Ejemplo n.º 1
0
int main (int argc, const char * argv[])
{

    // location 1096 of 5847 in BigNerdRanch Obj-C book
    printf("3*3+5*2 = %d.\n", 3*3+5*2);
    printf("11 / 3 = %f.\n", testingCast(11, 3));
    printf("The absolute value of -5 is %d\n", abs(-5));
    printFloats();
    
    printf("sine of 1 radian is %.3f \n", sin(1.0));
    return 0;
}
/* ************************************************************************* 

   NAME:  test_float2char_scalar

   USAGE: 

   test_float2char_scalar();

   returns: void

   DESCRIPTION:
                 convert floats to ints to shorts to chars to test
                 rounding/truncating

   REFERENCES:

   Ian Ollmann's Altivec Tutorial
   
   LIMITATIONS:

   GLOBAL VARIABLES:

      accessed: none

      modified: none

   FUNCTIONS CALLED:
   
   fprintf

   
   REVISION HISTORY:
        STR        Description of Revision                   Author
     08-Feb-2011    Based off of gpk's yuv422rgb_scalar       kaj

 ************************************************************************* */
void test_float2char_scalar(void)
{
  float floatVec1[4] = {0.0, -50.14455,  21.7790, 100.0 };
  //float floatVec2[4] = {-100.4567, 250.14455,  -210.7790, 170.0 };
  float floatVec2[4] = {136.0,110.0,119.0,0.0};
  float floatVec3[4] = {0.09876, -150.55,  1.7790, -120.0 };
  float floatVec4[4] = {-90.234, -30.9455,  -205.90, 199.9 };
  signed int intVec1, intVec2, intVec3, intVec4;
  signed short shortVec1, shortVec2;
  unsigned char charVec;
  unsigned char printchar[CHAR_ARRAYSIZE] __attribute__ ((aligned (16)));
  float printfloat[FLOAT_ARRAYSIZE] __attribute__ ((aligned (16)));
  signed short printshort[SHORT_ARRAYSIZE] __attribute__ ((aligned (16)));
  signed int printint[INT_ARRAYSIZE] __attribute__ ((aligned (16)));
  int i;
  unsigned char red0, green0, blue0, alpha;
  unsigned char red1, green1, blue1;
  int y0, y1, u, v;
  const unsigned char *source_endp;
  const unsigned char *vector_endp;
  int remainder;
  float red_partial, green_partial, blue_partial;

  fprintf(stderr, "--- function %s ------\n", __FUNCTION__);

  /* print out floats */
  printFloats(floatVec2);

  i = 0;
  y0 = floatVec2[i++]; /* Y  */
  u =  floatVec2[i++] - 128; /* U  */
  y1 = floatVec2[i++]; /* Y  */
  v =  floatVec2[i++] - 128; /* V  */

  red_partial =  1.4075 * (float)v;
  green_partial = -0.34455 * (float)u - 0.7169 * (float)v;
  blue_partial = 1.7790 * (float)u;

{
  int redsum, greensum, bluesum;

  redsum =   (int)(y0 + red_partial);
  greensum = (int)(y0 + green_partial);
  bluesum =  (int)(y0 + blue_partial);

  red0 =   (unsigned char)redsum;
  green0 = (unsigned char)greensum;
  blue0  = (unsigned char)bluesum;

  fprintf(stderr,"Redsum0: (%d %d %d) RGB0: (%d %d %d) \n",
   redsum,greensum,bluesum,red0,green0,blue0);
}

{
  int redsum, greensum, bluesum;

  redsum = (int)(y1 + red_partial);
  greensum = (int)(y1 + green_partial);
  bluesum = (int)(y1 + blue_partial);

  red1 =   (unsigned char)redsum;
  green1 = (unsigned char)greensum;
  blue1  = (unsigned char)bluesum;

  fprintf(stderr,"Redsum1: (%d %d %d) RGB1: (%d %d %d) \n",
   redsum,greensum,bluesum,red1,green1,blue1);
}


} /* test_float2char_scalar */
/* ************************************************************************* 

   NAME:  test2_float2char

   USAGE: 

   test2_float2char();

   returns: void

   DESCRIPTION:
                 convert floats to ints to shorts to chars to test
                 rounding/truncating

   REFERENCES:

   Ian Ollmann's Altivec Tutorial
   
   LIMITATIONS:

   GLOBAL VARIABLES:

      accessed: none

      modified: none

   FUNCTIONS CALLED:
   
   fprintf
   vec_st - store a vector to memory
   vec_ctu - convert to fixed point
   vec_pack - narrow 2 vectors and pack them into one vector
   
   REVISION HISTORY:
        STR        Description of Revision                   Author
     08-Feb-2011   Based off of test_float2char but          kaj
                    changing set of vec functions called  

 ************************************************************************* */
void test2_float2char(void)
{
  vector float floatVec1 = {0.0, -50.14455,  21.7790, 100.0 };
  vector float floatVec2 = {-100.4567, 250.14455,  -210.7790, 170.0 };
  vector float floatVec3 = {0.09876, -150.55,  1.7790, -120.0 };
  vector float floatVec4 = {-90.234, -30.9455,  -205.90, 199.9 };
  vector unsigned int intVec1, intVec2, intVec3, intVec4;
  vector unsigned short shortVec1, shortVec2;
  vector unsigned char charVec;
  unsigned char printchar[CHAR_ARRAYSIZE] __attribute__ ((aligned (16)));
  float printfloat[FLOAT_ARRAYSIZE] __attribute__ ((aligned (16)));
  unsigned short printshort[SHORT_ARRAYSIZE] __attribute__ ((aligned (16)));
  unsigned int printint[INT_ARRAYSIZE] __attribute__ ((aligned (16)));
  int i;

  fprintf(stderr, "--- function %s ------\n", __FUNCTION__);

  /* print out floats */
  vec_st(floatVec1,0,printfloat);
  printFloats(printfloat);

  vec_st(floatVec2,0,printfloat);
  printFloats(printfloat);

  vec_st(floatVec3,0,printfloat);
  printFloats(printfloat);

  vec_st(floatVec4,0,printfloat);
  printFloats(printfloat);

  /* convert from float to unsigned int and print */
  intVec1 = vec_ctu(floatVec1,0);
  vec_st(intVec1,0,printint);
  printUInts(printint);

  intVec2 = vec_ctu(floatVec2,0);
  vec_st(intVec2,0,printint);
  printUInts(printint);

  intVec3 = vec_ctu(floatVec3,0);
  vec_st(intVec3,0,printint);
  printUInts(printint);

  intVec4 = vec_ctu(floatVec4,0);
  vec_st(intVec4,0,printint);
  printInts(printint);

  /* convert from unsigned int to unsigned short and print */
  shortVec1 = vec_pack(intVec1,intVec2);
  vec_st(shortVec1,0,printshort);
  printUShorts(printshort);

  shortVec2 = vec_pack(intVec3,intVec4);
  vec_st(shortVec2,0,printshort);
  printUShorts(printshort);

  /* convert from unsigned short to unsigned char and print */
  charVec  = vec_pack(shortVec1, shortVec2);
  vec_st(charVec,0,printchar);
  printChars(printchar);

} /* test2_float2char */