我一直在对 AMD64 (x86-64) 指令进行大量研究,这有点令人困惑。很多时候,官方 CPU 文档并未将指令指定为特定指令集的一部分,并且互联网有时会根据特定指令所属的指令集进行划分。这方面的一个例子是SFENCE
,一些消息来源声称它是 EMMX 的一部分,而另一些则声称它是 SSE 的一部分。
我试图将所有这些都组织在一个电子表格中以帮助学习,但是在一个以技术和精确着称的领域中,这些不一致令人难以置信的沮丧。
我一直在对 AMD64 (x86-64) 指令进行大量研究,这有点令人困惑。很多时候,官方 CPU 文档并未将指令指定为特定指令集的一部分,并且互联网有时会根据特定指令所属的指令集进行划分。这方面的一个例子是SFENCE
,一些消息来源声称它是 EMMX 的一部分,而另一些则声称它是 SSE 的一部分。
我试图将所有这些都组织在一个电子表格中以帮助学习,但是在一个以技术和精确着称的领域中,这些不一致令人难以置信的沮丧。
EMMX 是 SSE 的一个子集,并且sfence
是两者的一部分。
AMD 并没有立即支持所有 SSE 指令,但起初采用了其中的一个子集,不需要新的 XMM 寄存器(见 PDF 底部附近),这就是众所周知的 EMMX。这包括例如pavgb mm0, mm1
(但不 pavgb xmm0, xmm1
包括)和sfence
.
EMMX 中的所有指令也在 SSE 中,支持 SSE 的处理器可以执行 EMMX 代码,无论它们是否“明确”支持 EMMX(具有专用的 CPUID 功能标志)。您链接的 Zen 1 aka Summit Ridge 隐式支持 EMMX:它没有设置相应的功能标志,但由于它支持 SSE,它最终也支持 EMMX。在 Zen 之前,具有 SSE 的 AMD 处理器也用于设置 EMMX 功能标志。