SIMD SSE 命令を同等の C コードに変換する割り当てがありました... コードは次のようなものです (I1_block_addr-- は uint8_t であり、esc_offset_1 は 32 ビット整数です)。
__m128i xmm1 = _mm_load_si128((__m128i*)(I1_block_addr+desc_offset_1));
__m128i xmm6 = _mm_load_si128((__m128i*)(I2_block_addr+desc_offset_1));
xmm6 = _mm_sad_epu8(xmm1,xmm6);
私がしたことは
char *c1;
char xmm1[16],xmm6[16];
short xmm6s[16]
//for loding 16 byte
c1=( char* )( I1_block_addr + desc_offset_1 );
memcpy( xmm1 , c1 , 16 );
c1=( char* )( I2_block_addr + desc_offset_1 );
memcpy( xmm6 , c1 , 16 );
xmm6s[0] = (short) ( abs(xmm1[0]-xmm6[0]) + abs(xmm1[1]-xmm6[1]) + abs(xmm1[2]-xmm6[2]) + abs(xmm1[3]-xmm6[3]) + abs(xmm1[4]-xmm6[4]) + abs(xmm1[5]-xmm6[5]) +
abs(xmm1[6]-xmm6[6]) + abs(xmm1[7]-xmm6[7]) );
xmm6s[1] = 0; xmm6s[2] = 0; xmm6s[3] = 0;
xmm6s[4] = (short) ( abs(xmm1[8]-xmm6[8]) + abs(xmm1[9]-xmm6[9]) + abs(xmm1[10]-xmm6[10]) + abs(xmm1[11]-xmm6[11]) + abs(xmm1[12]-xmm6[12]) +
abs(xmm1[13]-xmm6[13]) + abs(xmm1[14]-xmm6[14]) + abs(xmm1[15]-xmm6[15]) );
xmm6s[5] = 0; xmm6s[6] = 0; xmm6s[7] = 0;
エラーは発生していませんが、画像の品質が低下しています。コードのどの部分が間違っているのか、それを修正する方法を教えてください。