X86 C语言内联汇编代码,将数组中的值复制到xmm

X86 C语言内联汇编代码,将数组中的值复制到xmm,x86,sse,simd,sse4,X86,Sse,Simd,Sse4,我有两个数组,我想得到点积。 如何将vek和vec的值转换为xmm0和xmm1? 我如何得到xmm1(??)中的值,以便将其用于“printf” #包括 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(“结果:%f\n,?”) } 正如@mystical正确地说的那样,使用内部语言而不是原始汇编程序: #include &

我有两个数组,我想得到点积。 如何将vek和vec的值转换为xmm0和xmm1? 我如何得到xmm1(??)中的值,以便将其用于“printf”

#包括
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(“结果:%f\n,?”)
}

正如
@mystical
正确地说的那样,使用内部语言而不是原始汇编程序:

#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;
}
#包括
#包括//SSE 4.1
int main()
{
__m128 vek=_mm_set_ps(4.0,3.0,2.0,1.0);
__m128向量=最小值集ps(1.0,2.0,3.0,4.0);
__m128结果=_mm_dp_ps(vek,vec,0xff);
printf(“结果={%vf}\n”,结果);
返回0;
}

请注意,并非所有编译器都支持SIMD值的
%v
格式说明符-如果您的编译器不支持,则您需要实现一种适当的方法来打印结果,例如使用union。

对于像这样的小事,我建议您使用内部函数而不是内联汇编。
#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;
}