如何将 4 个浮点数的 ps 向量转换为 4 个双精度数并存储到 pd 数组?
How to convert a ps vector of 4 float to 4 doubles and store to a pd array?
是否可以使用 SSE2
/SIMD
将 __m128
值 (4 float
) 存储到 double
的数组中?
我需要从这个代码切换:
double *pC = c[voiceIndex];
__m128d v_result;
_mm_store_pd(pC, v_result);
对此:
double *pC = c[voiceIndex];
__m128 v_result_float;
_mm_store_ps(pC, v_result_float);
除了不进行 4x 32 位 float
的 128 位存储,我需要将它们转换为 double
。
我无法更改 "source" pC
数组(即 double
)
本质上,这是your previous question的逆题。这种情况下需要先movhlps
(_mm_movelh_ps
) 将高位字转换为低位字再转换后半部分:
void foo(double* dest, __m128 input)
{
// assuming dest is nicely aligned
_mm_store_pd(dest, _mm_cvtps_pd(input));
_mm_store_pd(dest+2, _mm_cvtps_pd(_mm_movehl_ps(input, input)));
}
是否可以使用 SSE2
/SIMD
将 __m128
值 (4 float
) 存储到 double
的数组中?
我需要从这个代码切换:
double *pC = c[voiceIndex];
__m128d v_result;
_mm_store_pd(pC, v_result);
对此:
double *pC = c[voiceIndex];
__m128 v_result_float;
_mm_store_ps(pC, v_result_float);
除了不进行 4x 32 位 float
的 128 位存储,我需要将它们转换为 double
。
我无法更改 "source" pC
数组(即 double
)
本质上,这是your previous question的逆题。这种情况下需要先movhlps
(_mm_movelh_ps
) 将高位字转换为低位字再转换后半部分:
void foo(double* dest, __m128 input)
{
// assuming dest is nicely aligned
_mm_store_pd(dest, _mm_cvtps_pd(input));
_mm_store_pd(dest+2, _mm_cvtps_pd(_mm_movehl_ps(input, input)));
}