| 发表于:2007-01-04 13:26:51 楼主 |
代替dist = sqrt(distx + disty + distz)的东东: void cssetestdlg( float* parray1, // [输入] 源数组1 float* parray2, // [输入] 源数组2 float* parray3, // [输入] 源数组3 float* presult, // [输出] 用来存放结果的数组 int nsize) // [输入] 数组的大小 { int nloop = nsize/ 4; __m128 m1, m2, m3, m4; __m128* psrc1 = (__m128*) parray1; __m128* psrc2 = (__m128*) parray2; __m128* psrc3 = (__m128*) parray3; __m128* pdest = (__m128*) presult; __m128 m0_5 = _mm_set_ps1(0.5f); // m0_5[0, 1, 2, 3] = 0.5 for ( int i = 0; i < nloop; i++ ) { m1 = _mm_mul_ps(*psrc1, *psrc1); // m1 = *psrc1 * *psrc1 m2 = _mm_mul_ps(*psrc2, *psrc2); m3 = _mm_mul_ps(*psrc3, *psrc3); m4 = _mm_add_ps(m1, m2); m4 = _mm_add_ps(m4, m3); *pdest = _mm_sqrt_ps(m4); // m4 = sqrt(m3) psrc1++; psrc2++; psrc3++; pdest++; } } |
|
|
|
|