c++ - GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd

标签 c++ gcc intrinsics avx2

刚刚发现,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 操作数指令,movlhpsunpcklpd 相同,相同)

关于c++ - GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58270381/

相关文章:

C++:是否需要使用相同版本的 GCC 和 GDB 进行调试

c - 对 libncurses 中函数的 undefined reference

java - 在C++中,静态变量、动态变量和局部变量存储在哪里?在 C 和 Java 中怎么样?

c++ - 在 C++ 应用程序中链接到 C 库

c++ - 如何从非托管代码执行托管代码?

gcc - `asm()`函数在C语言中是如何工作的?

c - 如何访问 SHA 内在?

simd - 使用 ARM-v8 Neon SIMD 将 ascii 字符串打包成 7 位二进制 blob

c - 对 4 个整数大小的数组进行 SSE 操作

c++ - vector::max_size 的实际使用