_mm_broadcastsd_pd GCC avx2intrin.h 中缺失(X-9.2 版)

_mm_broadcastsd_pd missing in GCC avx2intrin.h (versions X-9.2)

刚发现 _mm_broadcastsd_pd,它在英特尔内在函数指南 (link), is not implemented in GCCs avx2intrin.h. I tested a small example on Godbolt with the latest GCC version and it won't compile (Example GCC). Clang does (Example Clang) 中列出。它在我的电脑(GCC 8.3)上是一样的。

我应该提交错误报告,还是有任何特殊原因不包括在内?我的意思是,当然,_mm_movedup_pd 做完全相同的事情并且 clang 实际上为两个内在函数生成相同的程序集,但我认为这不应该成为排除它的理由。

问候

编辑

创建错误报告:link

并非所有编译器都具有内部函数的所有别名(同一事物的不同名称)。除了在 Godbolt 上试用它们之外,IDK 如何找出哪些可以跨当前版本的主要 4 个编译器移植。

但是是的,GCC/clang 确实接受有关缺少 _mm 内在函数的错误,尤其是英特尔记录的错误。

_mm_broadcastsd_pd 被英特尔记录为 movddup 的固有特性,因此您不会错过任何东西。更重要的是,它有点误导,因为没有vbroadcastsd xmm, xmmonly with a YMM or ZMM destination。 (_mm256_broadcast_sd(double *a);_mm256_broadcastsd_pd(__m128d a);)

asm 参考手册甚至没有在 vbroadcast 或 the movddup entry 中记录 _mm_broadcastsd_pd;它仅在内在函数指南中。

GCC 可能想添加这个,特别是因为 clang 有它。将 _mm_broadcastsd_pd 作为别名对于正在寻找它但不太了解 asm 以知道他们需要 movddup 的人来说会很有用。 (或使用 AVX 3 操作数指令,movlhpsunpcklpd 相同,相同)