OPSI AVXENCODING
Memilih pengodean instruksi AVX yang disukai.
Sintaks
OPTION AVXENCODING:
Preferensi
Latar belakang
Instruksi Intel AVX dan AVX-512 dikodekan secara berbeda dari instruksi Arsitektur Intel lainnya. Daripada mengandalkan byte awalan instruksi dan byte prospek opcode untuk memilih instruksi, mereka menggunakan awalan multi-byte tunggal. Awalan ini dapat mengodekan operand register tambahan. Dalam mode 64-bit, ia juga memiliki bit untuk memilih mendaftarkan 8 hingga 15 untuk operand lain, dan awalan REX tidak diperlukan.
Tiga prefiks multi-byte yang berbeda digunakan. Instruksi AVX dapat dikodekan dengan awalan VEX 3 byte, di mana byte kedua dan ketiga membantu memilih operasi tertentu yang dijalankan. Jika beberapa bidang dalam awalan VEX 3-byte memiliki nilai tertentu, bentuk 2 byte dari awalan VEX dapat digunakan sebagai gantinya. Terakhir, beberapa instruksi AVX juga memiliki formulir AVX-512, yang dikodekan dengan awalan EVEX 4-byte. Awalan EVEX memiliki bidang tambahan untuk memilih panjang vektor 512-bit dan opsi lain khusus untuk instruksi AVX-512.
Karena beberapa instruksi AVX mungkin dikodekan hingga dengan tiga cara berbeda, ada aturan untuk memilih formulir mana yang akan digunakan. Direktif OPTION AVXENCODING
digunakan untuk memilih sekumpulan aturan mana yang akan digunakan.
Preferensi
Preferensi | Prioritas preferensi pengodean |
---|---|
PREFER_FIRST |
Gunakan formulir pertama yang ditentukan jika memungkinkan. |
PREFER_VEX |
Gunakan VEX pengodean di preferensi untuk EVEX pengodean. |
PREFER_VEX3 |
Gunakan pengodean 3 byte VEX di preferensi untuk EVEX pengodean. |
PREFER_EVEX |
Gunakan EVEX pengodean di preferensi untuk VEX pengodean. |
NO_EVEX |
Jangan mengodekan menggunakan EVEX . |
Urutan AVXENCODING hanya berlaku jika formulir awalan instruksi tidak ditentukan untuk instruksi. Jika awalan instruksi dikodekan secara eksplisit, itu lebih diutamakan daripada AVXENCODING
opsi . Misalnya, evex vpmaddwd
akan menggunakan EVEX
-prefiks VPMADDWD
meskipun OPTION AVXENCODING:no_EVEX
ditentukan.
Jika sumber rakitan tidak digunakan OPTION AVXENCODING
untuk memilih preferensi pengodean, PREFER_FIRST
aturan digunakan secara default. Dengan aturan ini, pengodean instruksi paling awal yang ditambahkan ke Microsoft Macro Assembler (MASM) lebih diutamakan, dan di antara kemungkinan-kemungkinan pengodean dengan formulir awalan terpendek lebih disukai. Aturan ini memastikan bahwa kode yang dirakit oleh MASM masih menghasilkan kode objek yang sama jika formulir instruksi baru ditambahkan nanti.
Aturan PREFER_VEX
selalu mencoba mengodekan dengan VEX
awalan sebelum mencoba mengodekan dengan EVEX
. Jika memungkinkan, bentuk 2 byte digunakan VEX
alih-alih formulir 3 byte.
Preferensi PREFER_VEX3
selalu mencoba mengodekan dengan awalan 3 byte VEX
sebelum mencoba mengodekan dengan EVEX
. Bentuk VEX
2 byte tidak akan digunakan.
Opsi PREFER_EVEX
selalu mencoba mengodekan dengan EVEX
awalan, dan hanya mencoba menggunakan VEX
jika instruksi tidak memiliki formulir AVX-512.
Preferensi NO_EVEX
hanya mencoba mengodekan dengan menggunakan awalan VEX
. Tidak ada formulir instruksi AVX-512 yang diizinkan. Opsi ini memungkinkan Anda merakit kode untuk digunakan pada platform yang tidak memiliki dukungan AVX-512 sama sekali.
Arahan OPTION AVXENCODING
tersedia di Visual Studio 2019 versi 16.7 dan yang lebih baru.
Contoh
Contoh ini menggunakan VPDPBUSD
dan VPMADDWD
instruksi untuk mengilustrasikan cara AVXENCODING
kerja opsi. VPDPBUSD
pertama kali didefinisikan untuk dikodekan hanya dengan EVEX
, dan kemudian diperluas dengan formulir yang dikodekan VEX untuk platform tanpa dukungan AVX-512, sedangkan VPMADDWD
AVX dan diperluas ke AVX-512. Output daftar dari perakitan contoh menunjukkan bagaimana perubahan AVXENCODING
mode memengaruhi kode objek yang dihasilkan untuk setiap instruksi. Awalan untuk setiap instruksi berakhir pada '/".
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