OPTION AVXENCODING
選取AVX指示的慣用編碼方式。
語法
OPTION AVXENCODING:
偏好
背景
Intel AVX 和 AVX-512 指令的編碼方式與其他 Intel 架構指示不同。 它們不使用依賴指令前置詞位元組和opcode前置位元組來選取指令,而是使用單一多位元組前置詞。 此前置詞可以編碼額外的緩存器操作數。 在 64 位模式中,它也具有位來選取其他操作數的 8 到 15 快存器,而且不需要 REX 前置詞。
使用三個不同的多位元組前置詞。 AVX 指令可以使用 3 位元組 VEX 前置詞進行編碼,其中第二個和第三個字節有助於選取執行的特定作業。 如果 3 位元組 VEX 前置詞中的某些欄位具有特定值,則可以改用 2 位元組形式的 VEX 前置詞。 最後,某些 AVX 指令也有 AVX-512 格式,其編碼為 4 位元組的 EVEX 前置詞。 EVEX 前置詞有額外的字段,可選取 512 位向量長度,以及 AVX-512 指示特有的其他選項。
由於某些 AVX 指示可能以三種不同的方式編碼,因此有規則可選取要使用的表單。 指示 OPTION AVXENCODING
詞是用來選取要使用的規則集。
喜好設定
偏好 | 編碼喜好設定優先順序 |
---|---|
PREFER_FIRST |
可能的話,請使用第一個定義的窗體。 |
PREFER_VEX |
使用 VEX 喜好設定的編碼來 EVEX 編碼。 |
PREFER_VEX3 |
偏好使用3位元組 VEX 編碼進行 EVEX 編碼。 |
PREFER_EVEX |
使用 EVEX 喜好設定的編碼來 VEX 編碼。 |
NO_EVEX |
請勿使用 EVEX 進行編碼。 |
只有在指令未指定指令前置詞窗體時,才會套用AVXENCODING順序。 如果明確編碼指令前置詞,則會優先於 AVXENCODING
選項。 例如,即使OPTION AVXENCODING:no_EVEX
已指定 ,evex vpmaddwd
也會使用 EVEX
-prefixedVPMADDWD
。
如果元件來源不用來 OPTION AVXENCODING
選取編碼喜好設定, PREFER_FIRST
預設會使用規則。 根據這些規則,新增至 Microsoft 宏組合器 (MASM) 的最早指令編碼具有優先順序,而且在這些可能性中,最好使用最短前置詞格式的編碼方式。 如果稍後新增指令表單,這些規則可確保MASM所組合的程式代碼仍會產生相同的物件程序代碼。
在嘗試使用 EVEX
編碼之前,規則PREFER_VEX
一律會先嘗試使用 VEX
前置詞進行編碼。 可能的話,會使用的 VEX
2 位元組形式,而不是 3 位元組格式。
PREFER_VEX3
喜好設定一律會先嘗試使用 3 位元組VEX
前置詞進行編碼,然後再嘗試使用 EVEX
進行編碼。 不會使用 2 位元組形式的 VEX
。
選項 PREFER_EVEX
一律會嘗試使用 EVEX
前置詞進行編碼,而且只有在指令沒有AVX-512窗體時才會嘗試使用 VEX
。
喜好 NO_EVEX
設定只會嘗試使用 VEX
前置詞進行編碼。 不允許 AVX-512 指令表單。 此選項可讓您組合程式代碼,以在完全沒有AVX-512支援的平臺上使用。
指示 OPTION AVXENCODING
詞可在Visual Studio 2019 16.7版和更新版本中取得。
範例
此範例會使用 VPDPBUSD
和 VPMADDWD
指示來說明選項的運作方式 AVXENCODING
。 VPDPBUSD
最初定義為只使用 EVEX
編碼,之後會以 VEX 編碼形式擴充平臺,而沒有 AVX-512 支援,而 VPMADDWD
AVX 又擴充至 AVX-512。 組合範例的清單輸出會顯示變更 AVXENCODING
模式如何影響針對每個指令產生的物件程序代碼。 每個指令的前置詞會以 『/“ 結尾。
00000000 62 F2 6D 08/ 50 vpdpbusd xmm1, xmm2, xmm3
CB
00000006 C5 E9/ F5 CB vpmaddwd xmm1, xmm2, xmm3
option avxencoding:no_EVEX
0000000A C4 E2 69/ 50 CB vpdpbusd xmm1, xmm2, xmm3
0000000F C5 E9/ F5 CB vpmaddwd xmm1, xmm2, xmm3
option avxencoding:prefer_VEX
00000013 C4 E2 69/ 50 CB vpdpbusd xmm1, xmm2, xmm3
00000018 C5 E9/ F5 CB vpmaddwd xmm1, xmm2, xmm3
option avxencoding:prefer_VEX3
0000001C C4 E2 69/ 50 CB vpdpbusd xmm1, xmm2, xmm3
00000021 C4 E1 69/ F5 CB vpmaddwd xmm1, xmm2, xmm3
option avxencoding:prefer_EVEX
00000026 62 F2 6D 08/ 50 vpdpbusd xmm1, xmm2, xmm3
CB
0000002C 62 F1 6D 08/ F5 vpmaddwd xmm1, xmm2, xmm3
CB
option avxencoding:prefer_first
00000032 62 F2 6D 08/ 50 vpdpbusd xmm1, xmm2, xmm3
CB
00000038 C5 E9/ F5 CB vpmaddwd xmm1, xmm2, xmm3