假设你真的想要
double
(
__m128d
),你在找
_mm_set_sd(d)
将双精度扩展到零
喜欢
_mm_set_pd(0, d)
.
见
Intel's intrinsics guide
(double
找到需要
(或
double*
)阿格。
__m128
是4的向量
float
;是否要将双->浮点转换为向量的低位元素?就像
_mm_set_ps(0.f, 0.f, 0.f, d);
__m128d*
因为向量的宽度是
双重的
. 如果有什么能说得通的话
(__m128d)d
或者是一个静态的或者重新解释的版本。
但不幸的是,没办法对一个
使用未定义的上元素AFAIK,即使标量浮点/双精度和
__m128d型
How to merge a scalar into a vector without the compiler wasting an instruction zeroing upper elements? Design limitation in Intel's intrinsics?
一些编译器(很可能仍然只是叮当声)可以优化零扩展或广播到
__m128d型
向量,如果只使用标量内部函数,然后提取标量结果。其他编译器实际上是在上层元素上浪费指令。