将2个连续的双精度加载到2个sse寄存器的低半部分

时间:2014-05-04 01:57:14

标签: assembly sse intrinsics

我想实现这个目标:

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?

1 个答案:

答案 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]);