刚刚发现,intel 内在函数指南 ( link ) 中列出的 _mm_broadcastsd_pd
并未在 GCC avx2intrin.h
中实现。我使用最新的 GCC 版本在 Godbolt 上测试了一个小示例,但它无法编译( Example GCC )。 Clang 确实如此( Example Clang )。在我的电脑上也是一样的(GCC 8.3)。
我应该提交错误报告吗?或者是否有任何特殊原因导致未包含该报告?我的意思是,当然,_mm_movedup_pd
做了完全相同的事情,并且 clang 实际上为两个内在函数生成相同的程序集,但我认为这不应该成为排除它的理由。
问候
编辑
已创建错误报告:link
最佳答案
并非所有编译器都具有内部函数的所有别名(同一事物的不同名称)。除了在 Godbolt 上尝试之外,我不知道如何找出哪些可以跨 4 个主要编译器的当前版本移植。
但是,GCC/clang 确实接受有关缺少 _mm
内在函数的错误,尤其是英特尔文档中的错误。
_mm_broadcastsd_pd
被英特尔记录为 movddup
的内在函数,因此您不会错过任何内容。更重要的是,这有点误导,因为没有 vbroadcastsd xmm, xmm
, only 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 操作数指令,movlhps
或 unpcklpd
相同,相同)
关于c++ - GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58270381/