Bagikan melalui


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

Lihat juga

Opsi (MASM)
Referensi Arahan