// // Author: Mengjuei Hsieh, UC Irvine, Irvine, CA // //This wrapper is inspired by Ian Ollmann's sample code for Apple Computer //To compile: // gcc -c -O3 -fast -funroll-loops -faltivec vector.c // #include void vrsqrtd_wrapper( double *in, double *out, int *n ) { int i; int loopCount = *n / vec_step( vector float ); union { float scalarArray[ *n + 3 ]; vector float v[ loopCount + 1 ]; }buffer; for( i = 0; i < *n ; i++ ) buffer.scalarArray[i] = (float) in[i]; buffer.scalarArray[*n+1] = 1; buffer.scalarArray[*n+2] = 1; buffer.scalarArray[*n+3] = 1; for( i = 0; i < loopCount + 1; i++ ) buffer.v[i] = vrsqrtf( buffer.v[i] ); for( i = 0; i < *n; i++ ) out[i] = (double) buffer.scalarArray[i]; } /* void vrsqrtf_wrapper( float *in, float *out, int *n ) { int i; int loopCount = *n / vec_step( vector float ); union { float scalarArray[ *n + 3 ]; vector float v[ loopCount + 1 ]; }buffer; for( i = 0; i < *n ; i++ ) buffer.scalarArray[i] = in[i]; buffer.scalarArray[*n+1] = 1; buffer.scalarArray[*n+2] = 1; buffer.scalarArray[*n+3] = 1; for( i = 0; i < loopCount + 1; i++ ) buffer.v[i] = vrsqrtf( buffer.v[i] ); for( i = 0; i < *n; i++ ) out[i] = buffer.scalarArray[i]; } */