我想实现这个目标:
xmm0[0..63] = mem[0..63]
xmm0[64..127] = 0
xmm1[0..63] = mem[64..127]
xmm1[64..127] = 0
事实上,它并不一定非常像这样。只要:
,这没关系xmm0[0..63] + xmm0[64..127] = mem[0..63]
xmm1[0..63] + xmm1[64..127] = mem[64..127]
我应该如何使用xmm intrinsic?
答案 0 :(得分:3)
我只是使用_mm_set_pd
或_mm_set1_pd
内在函数,看看你的编译器生成了什么 - 它应该是合理有效的,如果没有,那么生成的代码可能会让你知道如何改进它有更明确的内在函数,例如:
double d[2];
__m128d v0 = _mm_set_pd(d[0], 0.0);
__m128d v1 = _mm_set_pd(d[1], 0.0);
或者,正如@Mysticial和@Anycorn所指出的,你可以使用_mm_load_sd
:
double d[2];
__m128d v0 = _mm_load_sd(&d[0]);
__m128d v1 = _mm_load_sd(&d[1]);