Jac*_*ack 3 assembly sse x86-64 mmx amd-processor
我对 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 又名 Summit Ridge 隐式支持 EMMX:它没有设置相应的功能标志,但由于它支持 SSE,因此它最终也支持 EMMX。在 Zen 之前,具有 SSE 的 AMD 处理器也用于设置 EMMX 功能标志。