谁是 vfmaddrnd231pd? 一个存在于文档却消失于现实的 FMA 指令
在 x86 架构的浮点运算领域,vfmaddrnd231pd 曾被视为一个独特的存在。根据 Intel 软件开发手册(SDM)的记录,这是一条涉及双精度浮点值融合乘加并带有特定圆形控制(Rounding Control)的指令。

VFMADDRND231PD:Double 包装的双精度浮点值的合乘法和加法与圆形控制 [...] 直接字节定义了几个控制圆形,DAZ, FTZ 和异常抑制的比特字段 (见表 5-3)。
通常情况下,大多数 x86 浮点指令依赖全局圆形模式设置,这些设置变化缓慢且影响整个系统状态。然而,vfmaddrnd231pd 的设计初衷是允许以“每指令”为基础独立控制圆形模式。由于 FMA(融合乘加)指令本身可以模拟加法、减法和乘法操作,这种机制理论上能让任何算法在不依赖 AVX-512 扩展的情况下实现可控的圆形处理,从而显著提升某些对圆形敏感算法的执行效率。
尽管理论描述详尽,但在实际开发环境中,这条指令却显得扑朔迷离。GNU 组装器无法识别该指令;Intel SDM 中提到的编译器内在函数 _mm_fmaddround_pd 和 _mm256_fmaddround_pd 不仅在 Clang 中缺失,在 Intel C/C++ 编译器(ICC)中同样未被支持。更令人困惑的是,当开发者尝试根据 SDM 中的 opcode 列表手动组装指令时,会发现编码格式中存在疑点。
SDM 中列出的 VEX 前缀之后紧跟着一个被称为 “DDS” 的标识符。这是整个 SDM 文档中唯一提及 “DDS” 的地方。有社区观点认为,“DDS” 仅用于文档内部标记,并在后续版本中被移除,但其残留至今引发了关于指令真实性的质疑。
此外,Intel SDM 仅列出了 vfmaddrnd231pd 这一种变体,而未包含其他可能的组合形式。进一步查证发现,在 2024 年版的 SDM 中该指令尚有记录,但在 2026 年版的最新文档中,它已彻底消失。
目前的迹象表明,这并非简单的文档排版错误,因为相关章节包含了独特的表格结构和伪代码逻辑,与其他标准指令的描述风格截然不同。一种推测是,Intel 可能曾计划引入 vfmaddrnd* 系列指令,但在最终发布前发现潜在问题并将其从硬件或软件支持中移除,却未能完全清理所有历史版本的参考文档。目前尚不清楚该指令是否曾在量产 CPU 上真正实现过,具体细节仍有待官方披露。





