Inline-Assembler-C in C,将值从Array复制到xmm

时间:2011-11-18 13:37:21

标签: x86 sse simd sse4

我有两个阵列,我想获得点积。 如何将vek和vec的值变为xmm0和xmm1? 如何将值保持在xmm1(??)中以便我可以将其用于“printf”?

#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, ??)
}

1 个答案:

答案 0 :(得分: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格式说明符 - 如果您的编译器没有,那么您需要实现一种合适的方法来打印结果,例如:使用工会。