SFENCE属于什么指令集?

What instruction set does SFENCE belong to?

我一直在对 AMD64 (x86-64) 指令进行大量研究,这有点令人困惑。很多时候,官方 CPU 文档不会将指令指定为特定指令集的一部分,并且互联网有时会在特定指令属于哪个指令集上出现分歧。其中一个例子是 SFENCE,一些消息来源声称它是 EMMX 的一部分,而其他消息来源则声称它是 SSE 的一部分。

我试图将所有这些组织在一个电子表格中以帮助学习,但这些不一致在一个以技术和精确着称的领域中令人难以置信地沮丧。

EMMX 是 SSE 的子集,sfence两者 的一部分。

AMD 并未立即支持所有 SSE 指令,但起初 took a subset of it that did not require the new XMM registers(请参阅 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 功能标志。