大家好,我嘗試使用英特爾內部函數,像這樣問題與英特爾內在
void test()
{
uint16_t n1 = 5;
uint16_t n2 = 2;
__m64 vec1, vec2, res;
vec1 = _mm_set_pi16(n1, n1, n1, n1);
vec2 = _mm_set_pi16(n2, n2, n2, n2);
res = _mm_add_pi16(vec1, vec2);
printf("%u %u %u %u \n", vec1[0], vec1[1], vec1[2], vec1[3]);
printf("%u %u %u %u \n", vec2[0], vec2[1], vec2[2], vec2[3]);
printf("%u %u %u %u \n", res[0], res[1], res[2], res[3]);
}
但奇怪的事情,我得到這個結果:
327685 327685 131074 131074
131074 131074 458759 458759
458759 458759 327685 327685
我使用日食火星......並且我包括mmintrin.h,xmmintrin.h,emmintrin.h。
請某人能解釋什麼不對的
你或許應該使用'__m128i'上證所在新代碼矢量,而不是64位MMX。即使在32位代碼中,SSE2支持也可以作爲基準很安全,並且可以保證x86-64。 –