1

我有两个数组,我想得到点积。如何将 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, ??)
}
4

1 回答 1

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

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

于 2011-11-18T14:15:28.443 回答