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]

Předpona EVEX ve formátu instrukce AVX-512
# bytů41114 / 11
[Předpony]EVEXOperační kódModR / 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í:

76543210
Byte 0 (62h)01100010
Byte 1 (P0)RXBR ‘00m1m0P [7: 0]
Byte 2 (P1)Žproti3proti2proti1proti01str1str0P [15: 8]
Byte 3 (P2)zL ‘LbPROTI'A2A1A0P [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):

Zaregistrujte adresování v 64bitovém režimu pomocí předpony EVEX
Režim adresováníBit 4Bit 3Bity [2: 0]Typ registraceBěžné použití
REGEVEX.R “EVEX.RModRM.regObecné účely, vektorZaregistrovat operand
RM (pokud ModRM.mod = 11)EVEX.XEVEX.BModRM.r / mGPR, vektorZaregistrovat operand
RM0EVEX.BModRM.r / mGPRZaregistrujte adresu paměti
ZÁKLADNA0EVEX.BSIB.baseGPRBase + Index * Adresa měřítka paměti
INDEX0EVEX.XSIB.indexGPRBase + Index * Adresa měřítka paměti
VIDXEVEX.V “EVEX.XSIB.indexVektorBase + VectorIndex * Měřítko adresy paměti
NDS / NDDEVEX.V “EVEX.v3proti2proti1proti0GPR, vektorZaregistrovat operand
K.00EVEX.a2A1A0MaskaOperand 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

  1. ^ Intel Corporation (červenec 2013). „Referenční příručka k programování rozšíření architektury Intel“.