Předpona EVEX - EVEX prefix
The Předpona EVEX (Enhanced vector extension) a odpovídající schéma kódování je rozšíření k 32-bit x86 (IA-32) a 64bitové x86-64 (AMD64) architektura sady instrukcí. EVEX je založen na, ale neměl by být zaměňován s předponou MVEX používanou Knights Corner procesor.
Schéma EVEX je 4bajtové rozšíření VEX režim, který podporuje AVX-512 sada instrukcí a umožňuje adresovat nové 512bitové registry ZMM a nové 64bitové registry masky operandů.
Funkce
Kódování EVEX může adresovat 8 registrů masky operandů, 16 univerzálních registrů a 32 vektorových registrů v 64bitovém režimu (jinak 8 univerzálních a 8 vektorových) a může podporovat až 4 operandy.
Stejně jako schéma kódování VEX, předpona EVEX sjednocuje existující předpony operačních kódů a únikové kódy, adresování paměti a modifikátory délky operandů sady instrukcí x86.
Následující funkce jsou přeneseny ze schématu VEX:
- Přímé kódování tří registrů SIMD (XMM, YMM nebo ZMM) jako zdrojových operandů (registry MMX nebo x87 nejsou podporovány);
- Kompaktní předpona REX pro 64bitový režim;
- Komprimovaná předpona SIMD (66H, F2H, F3H), únikový operační kód (0FH) a dvoubajtový únik (0F38H, 0F3AH);
- Méně přísné požadavky na zarovnání paměti pro paměťový operand
EVEX také rozšiřuje VEX o další funkce:
- Rozšířené kódování registrů SIMD: celkem 32 nových 512 bitů SIMD registruje ZMM0-ZMM31 v 64bitovém režimu;
- Kódování masky operandu: 8 nových 64bitových opmask registrů k0-k7 pro podmíněné provedení a sloučení cílových operandů;
- Broadcasting from source to destination for instructions that take memory vector as a source operand: the second operand is broadcast before being used in the actual operation;
- Přímé vložené ovládání zaokrouhlování pro pokyny, které fungují na registrech SIMD s plovoucí desetinnou čárkou se sémantikou zaokrouhlování;
- Integrované řízení výjimek pro instrukce s plovoucí desetinnou čárkou bez zaokrouhlování sémantiky;
- Komprimované posunutí (DISP8 * N), nový režim adresování paměti pro zlepšení hustoty kódování proudu bajtů instrukcí; měřítkový faktor N závisí na délce vektoru a režimu vysílání.
Například schéma kódování EVEX umožňuje podmíněné přidání vektoru ve formě
VADDPS zmm1 {k1} {z}, zmm2, zmm3
kde modifikátor {k1} vedle cílového operandu kóduje použití registru opmask k1 pro podmíněné zpracování a aktualizace cíle a modifikátor {z} (kódovaný souborem EVEX.z) poskytuje dva typy maskování (slučování a nulování), s sloučení jako výchozí, když není připojen žádný modifikátor.
Technický popis
Schéma kódování EVEX používá předponu kódu skládající se ze 4 bajtů; první bajt je vždy 62 hodin a je odvozen z nepoužitého operačního kódu 32bitové instrukce BOUND, která není v 64bitovém režimu podporována. [1]
# bytů | 4 | 1 | 1 | 1 | 4 / 1 | 1 |
---|---|---|---|---|---|---|
[Předpony] | EVEX | Operační kód | ModR / M | [SIB] | [Disp32] / [Disp8 * N] | [Bezprostřední] |
Bajt ModR / M určuje jeden operand (vždy registr) s reg pole a druhý operand je kódován mod a r / m pole, určující buď registr, nebo umístění v paměti. Base-plus-index a scale-plus-index adresování vyžadují SIB byte, který kóduje 2-bit měřítko faktor i 3-bit index a 3-bit základna registry. V závislosti na režimu adresování může pole Disp8 / Disp16 / Disp32 následovat posunutí, které je třeba přidat k adrese.
Předpona EVEX zachovává pole zavedená v souboru Předpona VEX:
- Čtyři bity R, X, B a W z předpony REX. W rozšiřuje velikost operandu na 64 bitů nebo slouží jako další operační kód, R rozšiřuje reg, B se rozšiřuje r / m nebo rega X a B se rozšiřují index a základna v bajtu SIB. Stejně jako v předponě VEX jsou RXB poskytovány v obrácené formě.
- Čtyři bity s názvem v, určující druhý operand nedestruktivního zdrojového registru. Stejně jako v předponě VEX je i vvvv poskytován v obrácené formě.
- Bit L určující délku vektoru 256 bitů.
- Dva bity pojmenované p, které nahradí předpony velikosti operandů a předpony typu operandů (66, F2, F3).
- Dva z m bitů pro nahrazení stávajících únikových kódů (0F, 0F 38 a 0F 3A).
Nové funkce stávajících polí:
- Bit X se nyní rozšiřuje r / m spolu s bitem B, když není přítomen byte SIB, což umožňuje 32 registrů SIMD.
Existuje několik nových bitových polí:
- Bit R 'se rozšiřuje reg. Stejně jako bit R je R 'poskytován v obrácené formě.
- Bit V 'se rozšiřuje vvvv. Stejně jako bity vvvv je V 'poskytováno v obrácené formě.
- Tři bity pojmenované a, určující registr masky operandu (k0-k7) pro vektorové instrukce.
- Bit z pro určení režimu slučování (sloučení nebo nula).
- Bit b pro zdrojové vysílání, ovládání zaokrouhlování (v kombinaci s L’L) nebo potlačení výjimek.
- Bit L ’pro určení délky 512 bitů vektoru nebo režim ovládání zaokrouhlování v kombinaci s L.
Kódování předpony EVEX je následující:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
Byte 0 (62h) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | |
Byte 1 (P0) | R | X | B | R ‘ | 0 | 0 | m1 | m0 | P [7: 0] |
Byte 2 (P1) | Ž | proti3 | proti2 | proti1 | proti0 | 1 | str1 | str0 | P [15: 8] |
Byte 3 (P2) | z | L ‘ | L | b | PROTI' | A2 | A1 | A0 | P [23:16] |
Následující tabulka uvádí možné kombinace adresování registrů (bit 4 je při kódování 16 univerzálních registrů vždy nula):
Režim adresování | Bit 4 | Bit 3 | Bity [2: 0] | Typ registrace | Běžné použití |
---|---|---|---|---|---|
REG | EVEX.R “ | EVEX.R | ModRM.reg | Obecné účely, vektor | Zaregistrovat operand |
RM (pokud ModRM.mod = 11) | EVEX.X | EVEX.B | ModRM.r / m | GPR, vektor | Zaregistrovat operand |
RM | 0 | EVEX.B | ModRM.r / m | GPR | Zaregistrujte adresu paměti |
ZÁKLADNA | 0 | EVEX.B | SIB.base | GPR | Base + Index * Adresa měřítka paměti |
INDEX | 0 | EVEX.X | SIB.index | GPR | Base + Index * Adresa měřítka paměti |
VIDX | EVEX.V “ | EVEX.X | SIB.index | Vektor | Base + VectorIndex * Měřítko adresy paměti |
NDS / NDD | EVEX.V “ | EVEX.v3proti2proti1proti0 | GPR, vektor | Zaregistrovat operand | |
K. | 0 | 0 | EVEX.a2A1A0 | Maska | Operand registrace masky |
Několik instrukcí míchání AVX kódovaných VEX má 4 operandy. Aby tomu bylo vyhověno, má VEX režim adresování IS4, který kóduje 4. operand (vektorový registr) v bitech Imm8 [7: 4] okamžité konstanty. Podobné instrukce míchání kódované EVEX mají svůj 4. operand v registru masky. Žádná instrukce kódovaná pomocí EVEX nepoužívá kódování v režimu adresování IS4.
Reference
- ^ Intel Corporation (červenec 2013). „Referenční příručka k programování rozšíření architektury Intel“.