2011-11-18 37 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格式說明 - 如果你的編譯器不那麼你會需要實現一個合適的方法來打印結果,例如使用工會。