这些功能之间有什么区别吗?如果没有,为什么?
__m128 __mm_set1_ps(float a)
__m128 __mm_set_ps1(float a)
两个描述在Intel Intrinsics Guide网站上都是相同的。谢谢。
差为零。 _mm_set1_ps
很惯用,请使用。
例如铛的xmmintrin.h根据set_ps1
定义了set1_ps
:
static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_set_ps1(float __w)
{
return _mm_set1_ps(__w);
}
[我的猜测是,英特尔早在SSE1初期就尚未确定命名方案,后来又改用_mm_set1_
类型。但是,如果他们已经记录了_mm_set_ps1
,则无法将其取回。
注意,没有_mm_set_epi321
或_mm_set_ep81
!因此,_mm_set1_ps
是惯用语,并且遵循与其他广播内在函数相同的模式,而_mm_set_ps1
是不寻常的,将使人类读者感到惊讶。但是,存在_mm_set_pd1
和_mm_load_pd1
,并且可能是它们同时被引入(使用SSE2)。
我只知道这一点,因为前几天我偶然发现了它,希望找到一个可以执行严格混叠安全广播负载的内在函数,就像在asm中使用vpbroadcastd
一样。 (没有一种可移植的工具可以在任何地方高效地进行编译;当您尝试做复杂的事情时,编译器对内在函数的支持充满了脑袋里的悲观主义和缺少内在函数的混杂。也许再过几年,_mm_loadu_si32(void*)
至少可以扩展到零。受到广泛支持。.)/结束话题。