我一直在對 AMD64 (x86-64) 指令進行大量研究,這有點令人困惑。很多時候,官方 CPU 檔案并未將指令指定為特定指令集的一部分,并且互聯網有時會根據特定指令所屬的指令集進行劃分。這方面的一個例子是SFENCE,一些訊息來源聲稱它是 EMMX 的一部分,而另一些則聲稱它是 SSE 的一部分。
我試圖將所有這些都組織在一個電子表格中以幫助學習,但是在一個以技術和精確著稱的領域中,這些不一致令人難以置信的沮喪。
uj5u.com熱心網友回復:
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 功能標志。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437321.html
下一篇:在x86匯編中運行總程式
