2011-11-18 6 views
1

두 개의 배열이 있는데 내적을 얻고 싶습니다. vek 및 vec의 값을 xmm0 및 xmm1로 가져 오는 방법은 무엇입니까? 그리고 "printf"에 사용할 수 있도록 xmm1 (??)에 값을 표시하려면 어떻게해야합니까? @Mysticial 바르게 말한다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

이렇게 사소한 일에 인라인 어셈블리 대신 intrinsics를 사용하는 것이 좋습니다. – Mysticial

답변

2

으로, 내장 함수보다는 원시 어셈블러 사용 : 모든 컴파일러는 SIMD 값의 %v 형식 지정자를 지원

#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; 
} 

주 - 컴파일러는 다음하지 않는 경우거야 결과를 인쇄하기위한 적절한 방법을 구현해야합니다 (예 : 노조를 사용하십시오.