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 */