2011-11-18 83 views
1

我有两个数组,我想获得点积。 如何将vek和vec的值分配到xmm0和xmm1中? 如何获得xmm1(?)中的值,以便我可以将它用于“printf”?内联汇编程序代码在C中,从数组中复制值到xmm

#include <stdio.h> 
main(){ 

float vek[4] = {4.0, 3.0, 2.0, 1.0}; 

float vec[4] = {1.0, 2.0, 3.0, 4.0}; 

asm(

"DPPS $0xFF, %xmm0, %xmm1" 

?? 

); 

printf("Result: %f\n, ??) 
} 
+3

我建议你使用内在函数而不是内联程序集来处理这样的琐碎事情。 – Mysticial

回答

2

由于@Mysticial说得好,使用内联函数而不是原始汇编:

#include <stdio.h> 
#include <smmintrin.h> // SSE 4.1 

int main() 
{ 

    __m128 vek = _mm_set_ps(4.0, 3.0, 2.0, 1.0); 
    __m128 vec = _mm_set_ps(1.0, 2.0, 3.0, 4.0); 

    __m128 result = _mm_dp_ps(vek, vec, 0xff); 

    printf("result = { %vf }\n", result); 

    return 0; 
} 

请注意,并非所有的编译器都支持SIMD值%v格式说明 - 如果你的编译器不那么你会需要实现一个合适的方法来打印结果,例如使用工会。