vestigia

Detect where execution depends on secrets.
git clone git://git.ppad.tech/vestigia.git
Log | Files | Refs | README | LICENSE

Intel.hs (18199B)


      1 {-# OPTIONS_HADDOCK prune #-}
      2 {-# LANGUAGE OverloadedStrings #-}
      3 
      4 -- |
      5 -- Module: Vestigia.Contract.Intel
      6 -- Copyright: (c) 2026 Jared Tobin
      7 -- License: MIT
      8 -- Maintainer: Jared Tobin <jared@ppad.tech>
      9 --
     10 -- Intel's data-operand-independent-timing contract (DOITM), row by
     11 -- row, transcribed from Intel's list.
     12 --
     13 -- == Source
     14 --
     15 -- Intel, /Data Operand Independent Timing Instructions/, document ID
     16 -- 768547, updated 2026-02-23, Table 1 \"Documented Data Operand
     17 -- Independent Timing Instructions\" (840 mnemonic\/opcode rows, 594
     18 -- distinct mnemonics), retrieved 2026-10-27 from @www.intel.com@
     19 -- under
     20 -- @\/content\/www\/us\/en\/developer\/articles\/technical\/@
     21 -- @software-security-guidance\/resources\/@, saved from a browser
     22 -- (the host refuses automated retrieval; sha256 of the page as saved
     23 -- @0f67179a44c9f872ab240c3363ee664340beea36ce4a07cbfe1a34cc7adb6a10@).
     24 -- The revision of 2023-02-28, as the Internet Archive kept it through
     25 -- 2025-11-13, lacks BSWAP, CQO, MOVAPS, MOVSS, MOVUPS, ROL, ROR,
     26 -- RORX, SHLD, SHRD, and XORPS; this one adds them and drops none.
     27 --
     28 -- == Rule
     29 --
     30 -- A row names a mnemonic and an opcode byte: the instruction's last
     31 -- opcode byte, after any prefixes, VEX or EVEX payload, and escape
     32 -- bytes. The list's own preface reads:
     33 --
     34 -- > The table below lists instructions that have data-independent
     35 -- > timing. [...] Note that these data operand independent timing
     36 -- > instructions may have variable latency for reasons unrelated to
     37 -- > the data values (for example, loading data from memory or the
     38 -- > encoding of the instruction).
     39 --
     40 -- The @REP_@ rows carry a footnote, \"These REP_ instructions'
     41 -- latency varies based on the loop count (*CX)\", whose marker is
     42 -- dropped from their names here: a count that depends on the secret
     43 -- repeats the instruction a different number of times, which is
     44 -- control flow.
     45 
     46 module Vestigia.Contract.Intel (
     47     instructions
     48   ) where
     49 
     50 import qualified Data.Text as T
     51 import Data.Word (Word8)
     52 
     53 -- | Every row: a mnemonic, as the list spells it, and an opcode byte.
     54 instructions :: [(T.Text, Word8)]
     55 instructions =
     56   [ ("ADC", 0x10), ("ADC", 0x11), ("ADC", 0x12), ("ADC", 0x13), ("ADC", 0x14)
     57   , ("ADC", 0x15), ("ADC", 0x80), ("ADC", 0x81), ("ADC", 0x82), ("ADC", 0x83)
     58   , ("ADCX", 0xf6), ("ADD", 0x00), ("ADD", 0x01), ("ADD", 0x02), ("ADD", 0x03)
     59   , ("ADD", 0x04), ("ADD", 0x05), ("ADD", 0x80), ("ADD", 0x81), ("ADD", 0x82)
     60   , ("ADD", 0x83), ("ADOX", 0xf6), ("AESDEC", 0xde), ("AESDECLAST", 0xdf)
     61   , ("AESENC", 0xdc), ("AESENCLAST", 0xdd), ("AESIMC", 0xdb)
     62   , ("AESKEYGENASSIST", 0xdf), ("AND", 0x20), ("AND", 0x21), ("AND", 0x22)
     63   , ("AND", 0x23), ("AND", 0x24), ("AND", 0x25), ("AND", 0x80), ("AND", 0x81)
     64   , ("AND", 0x82), ("AND", 0x83), ("ANDN", 0xf2), ("BSWAP", 0xc8)
     65   , ("BSWAP", 0xc9), ("BSWAP", 0xca), ("BSWAP", 0xcb), ("BSWAP", 0xcc)
     66   , ("BSWAP", 0xcd), ("BSWAP", 0xce), ("BSWAP", 0xcf), ("BT", 0xa3)
     67   , ("BT", 0xba), ("BTC", 0xba), ("BTC", 0xbb), ("BTR", 0xb3), ("BTR", 0xba)
     68   , ("BTS", 0xab), ("BTS", 0xba), ("CMOVB", 0x42), ("CMOVBE", 0x46)
     69   , ("CMOVL", 0x4c), ("CMOVLE", 0x4e), ("CMOVNB", 0x43), ("CMOVNBE", 0x47)
     70   , ("CMOVNL", 0x4d), ("CMOVNLE", 0x4f), ("CMOVNO", 0x41), ("CMOVNP", 0x4b)
     71   , ("CMOVNS", 0x49), ("CMOVNZ", 0x45), ("CMOVO", 0x40), ("CMOVP", 0x4a)
     72   , ("CMOVS", 0x48), ("CMOVZ", 0x44), ("CMP", 0x38), ("CMP", 0x39)
     73   , ("CMP", 0x3a), ("CMP", 0x3b), ("CMP", 0x3c), ("CMP", 0x3d), ("CMP", 0x80)
     74   , ("CMP", 0x81), ("CMP", 0x82), ("CMP", 0x83), ("CQO", 0x99), ("DEC", 0x48)
     75   , ("DEC", 0x49), ("DEC", 0x4a), ("DEC", 0x4b), ("DEC", 0x4c), ("DEC", 0x4d)
     76   , ("DEC", 0x4e), ("DEC", 0x4f), ("DEC", 0xfe), ("DEC", 0xff)
     77   , ("GF2P8AFFINEINVQB", 0xcf), ("GF2P8AFFINEQB", 0xce), ("GF2P8MULB", 0xcf)
     78   , ("IMUL", 0x69), ("IMUL", 0x6b), ("IMUL", 0xaf), ("IMUL", 0xf6)
     79   , ("IMUL", 0xf7), ("INC", 0x40), ("INC", 0x41), ("INC", 0x42), ("INC", 0x43)
     80   , ("INC", 0x44), ("INC", 0x45), ("INC", 0x46), ("INC", 0x47), ("INC", 0xfe)
     81   , ("INC", 0xff), ("KADDB", 0x4a), ("KADDD", 0x4a), ("KADDQ", 0x4a)
     82   , ("KADDW", 0x4a), ("KANDB", 0x41), ("KANDD", 0x41), ("KANDNB", 0x42)
     83   , ("KANDND", 0x42), ("KANDNQ", 0x42), ("KANDNW", 0x42), ("KANDQ", 0x41)
     84   , ("KANDW", 0x41), ("KMOVB", 0x90), ("KMOVB", 0x91), ("KMOVB", 0x92)
     85   , ("KMOVB", 0x93), ("KMOVD", 0x90), ("KMOVD", 0x91), ("KMOVD", 0x92)
     86   , ("KMOVD", 0x93), ("KMOVQ", 0x90), ("KMOVQ", 0x91), ("KMOVQ", 0x92)
     87   , ("KMOVQ", 0x93), ("KMOVW", 0x90), ("KMOVW", 0x91), ("KMOVW", 0x92)
     88   , ("KMOVW", 0x93), ("KNOTB", 0x44), ("KNOTD", 0x44), ("KNOTQ", 0x44)
     89   , ("KNOTW", 0x44), ("KORB", 0x45), ("KORD", 0x45), ("KORQ", 0x45)
     90   , ("KORTESTB", 0x98), ("KORTESTD", 0x98), ("KORTESTQ", 0x98)
     91   , ("KORTESTW", 0x98), ("KORW", 0x45), ("KSHIFTLB", 0x32), ("KSHIFTLD", 0x33)
     92   , ("KSHIFTLQ", 0x33), ("KSHIFTLW", 0x32), ("KSHIFTRB", 0x30)
     93   , ("KSHIFTRD", 0x31), ("KSHIFTRQ", 0x31), ("KSHIFTRW", 0x30)
     94   , ("KTESTB", 0x99), ("KTESTD", 0x99), ("KTESTQ", 0x99), ("KTESTW", 0x99)
     95   , ("KUNPCKBW", 0x4b), ("KUNPCKDQ", 0x4b), ("KUNPCKWD", 0x4b)
     96   , ("KXNORB", 0x46), ("KXNORD", 0x46), ("KXNORQ", 0x46), ("KXNORW", 0x46)
     97   , ("KXORB", 0x47), ("KXORD", 0x47), ("KXORQ", 0x47), ("KXORW", 0x47)
     98   , ("LDDQU", 0xf0), ("LEA", 0x8d), ("MOV", 0x88), ("MOV", 0x89), ("MOV", 0x8a)
     99   , ("MOV", 0x8b), ("MOV", 0xa0), ("MOV", 0xa1), ("MOV", 0xa2), ("MOV", 0xa3)
    100   , ("MOV", 0xb0), ("MOV", 0xb1), ("MOV", 0xb2), ("MOV", 0xb3), ("MOV", 0xb4)
    101   , ("MOV", 0xb5), ("MOV", 0xb6), ("MOV", 0xb7), ("MOV", 0xb8), ("MOV", 0xb9)
    102   , ("MOV", 0xba), ("MOV", 0xbb), ("MOV", 0xbc), ("MOV", 0xbd), ("MOV", 0xbe)
    103   , ("MOV", 0xbf), ("MOV", 0xc6), ("MOV", 0xc7), ("MOVAPS", 0x28)
    104   , ("MOVAPS", 0x29), ("MOVD", 0x6e), ("MOVD", 0x7e), ("MOVDDUP", 0x12)
    105   , ("MOVDQ2Q", 0xd6), ("MOVDQA", 0x6f), ("MOVDQA", 0x7f), ("MOVDQU", 0x6f)
    106   , ("MOVDQU", 0x7f), ("MOVNTDQ", 0xe7), ("MOVNTDQA", 0x2a), ("MOVQ", 0x6e)
    107   , ("MOVQ", 0x7e), ("MOVQ", 0xd6), ("MOVSB", 0xa4), ("MOVSD", 0xa5)
    108   , ("MOVSHDUP", 0x16), ("MOVSLDUP", 0x12), ("MOVSQ", 0xa5), ("MOVSS", 0x10)
    109   , ("MOVSS", 0x11), ("MOVSW", 0xa5), ("MOVSX", 0xbe), ("MOVSX", 0xbf)
    110   , ("MOVSXD", 0x63), ("MOVUPS", 0x10), ("MOVUPS", 0x11), ("MOVZX", 0xb6)
    111   , ("MOVZX", 0xb7), ("MPSADBW", 0x42), ("MUL", 0xf6), ("MUL", 0xf7)
    112   , ("MULX", 0xf6), ("NEG", 0xf6), ("NEG", 0xf7), ("NOT", 0xf6), ("NOT", 0xf7)
    113   , ("OR", 0x08), ("OR", 0x80), ("OR", 0x81), ("OR", 0x82), ("OR", 0x83)
    114   , ("OR", 0x09), ("OR", 0x0a), ("OR", 0x0b), ("OR", 0x0c), ("OR", 0x0d)
    115   , ("PABSB", 0x1c), ("PABSD", 0x1e), ("PABSW", 0x1d), ("PACKSSDW", 0x6b)
    116   , ("PACKSSWB", 0x63), ("PACKUSDW", 0x2b), ("PACKUSWB", 0x67), ("PADDB", 0xfc)
    117   , ("PADDD", 0xfe), ("PADDQ", 0xd4), ("PADDSB", 0xec), ("PADDSW", 0xed)
    118   , ("PADDUSB", 0xdc), ("PADDUSW", 0xdd), ("PADDW", 0xfd), ("PALIGNR", 0x0f)
    119   , ("PAND", 0xdb), ("PANDN", 0xdf), ("PAVGB", 0xe0), ("PAVGW", 0xe3)
    120   , ("PBLENDVB", 0x10), ("PBLENDW", 0x0e), ("PCLMULQDQ", 0x44)
    121   , ("PCMPEQB", 0x74), ("PCMPEQD", 0x76), ("PCMPEQQ", 0x29), ("PCMPEQW", 0x75)
    122   , ("PCMPGTB", 0x64), ("PCMPGTD", 0x66), ("PCMPGTQ", 0x37), ("PCMPGTW", 0x65)
    123   , ("PEXTRB", 0x14), ("PEXTRD", 0x16), ("PEXTRQ", 0x16), ("PEXTRW", 0x15)
    124   , ("PEXTRW", 0xc5), ("PHADDD", 0x02), ("PHADDSW", 0x03), ("PHADDW", 0x01)
    125   , ("PHMINPOSUW", 0x41), ("PHSUBD", 0x06), ("PHSUBSW", 0x07), ("PHSUBW", 0x05)
    126   , ("PINSRB", 0x20), ("PINSRD", 0x22), ("PINSRQ", 0x22), ("PINSRW", 0xc4)
    127   , ("PMADDUBSW", 0x04), ("PMADDWD", 0xf5), ("PMAXSB", 0x3c), ("PMAXSW", 0xee)
    128   , ("PMAXUB", 0xde), ("PMAXUD", 0x3f), ("PMAXUW", 0x3e), ("PMINSB", 0x38)
    129   , ("PMINSW", 0xea), ("PMINUB", 0xda), ("PMINUD", 0x3b), ("PMINUW", 0x3a)
    130   , ("PMOVMSKB", 0xd7), ("PMOVSXBD", 0x21), ("PMOVSXBQ", 0x22)
    131   , ("PMOVSXBW", 0x20), ("PMOVSXDQ", 0x25), ("PMOVSXWD", 0x23)
    132   , ("PMOVSXWQ", 0x24), ("PMOVZXBD", 0x31), ("PMOVZXBQ", 0x32)
    133   , ("PMOVZXBW", 0x30), ("PMOVZXDQ", 0x35), ("PMOVZXWD", 0x33)
    134   , ("PMOVZXWQ", 0x34), ("PMULDQ", 0x28), ("PMULHRSW", 0x0b), ("PMULHUW", 0xe4)
    135   , ("PMULHW", 0xe5), ("PMULLD", 0x40), ("PMULLW", 0xd5), ("PMULUDQ", 0xf4)
    136   , ("POP", 0x58), ("POP", 0x59), ("POP", 0x5a), ("POP", 0x5b), ("POP", 0x5c)
    137   , ("POP", 0x5d), ("POP", 0x5e), ("POP", 0x5f), ("POP", 0x8f), ("POR", 0xeb)
    138   , ("PSADBW", 0xf6), ("PSHUFB", 0x00), ("PSHUFD", 0x70), ("PSHUFHW", 0x70)
    139   , ("PSHUFLW", 0x70), ("PSIGNB", 0x08), ("PSIGND", 0x0a), ("PSIGNW", 0x09)
    140   , ("PSLLD", 0x72), ("PSLLD", 0xf2), ("PSLLDQ", 0x73), ("PSLLQ", 0x73)
    141   , ("PSLLQ", 0xf3), ("PSLLW", 0x71), ("PSLLW", 0xf1), ("PSRAD", 0x72)
    142   , ("PSRAD", 0xe2), ("PSRAW", 0x71), ("PSRAW", 0xe1), ("PSRLD", 0x72)
    143   , ("PSRLD", 0xd2), ("PSRLDQ", 0x73), ("PSRLQ", 0x73), ("PSRLQ", 0xd3)
    144   , ("PSRLW", 0x71), ("PSRLW", 0xd1), ("PSUBB", 0xf8), ("PSUBD", 0xfa)
    145   , ("PSUBQ", 0xfb), ("PSUBSB", 0xe8), ("PSUBSW", 0xe9), ("PSUBUSB", 0xd8)
    146   , ("PSUBUSW", 0xd9), ("PSUBW", 0xf9), ("PTEST", 0x17), ("PUNPCKHBW", 0x68)
    147   , ("PUNPCKHDQ", 0x6a), ("PUNPCKHQDQ", 0x6d), ("PUNPCKHWD", 0x69)
    148   , ("PUNPCKLBW", 0x60), ("PUNPCKLDQ", 0x62), ("PUNPCKLQDQ", 0x6c)
    149   , ("PUNPCKLWD", 0x61), ("PUSH", 0x50), ("PUSH", 0x51), ("PUSH", 0x52)
    150   , ("PUSH", 0x53), ("PUSH", 0x54), ("PUSH", 0x55), ("PUSH", 0x56)
    151   , ("PUSH", 0x57), ("PUSH", 0x68), ("PUSH", 0x6a), ("PUSH", 0xff)
    152   , ("PXOR", 0xef), ("REP_MOVSB", 0xa4), ("REP_MOVSD", 0xa5)
    153   , ("REP_MOVSW", 0xa5), ("REP_STOSB", 0xaa), ("REP_STOSD", 0xab)
    154   , ("REP_STOSW", 0xab), ("ROL", 0xc0), ("ROL", 0xc1), ("ROL", 0xd0)
    155   , ("ROL", 0xd1), ("ROL", 0xd2), ("ROL", 0xd3), ("ROR", 0xc0), ("ROR", 0xc1)
    156   , ("ROR", 0xd0), ("ROR", 0xd1), ("ROR", 0xd2), ("ROR", 0xd3), ("RORX", 0xf0)
    157   , ("SAR", 0xc0), ("SAR", 0xc1), ("SAR", 0xd0), ("SAR", 0xd1), ("SAR", 0xd2)
    158   , ("SAR", 0xd3), ("SBB", 0x18), ("SBB", 0x19), ("SBB", 0x1a), ("SBB", 0x1b)
    159   , ("SBB", 0x1c), ("SBB", 0x1d), ("SBB", 0x80), ("SBB", 0x81), ("SBB", 0x82)
    160   , ("SBB", 0x83), ("SETB", 0x92), ("SETBE", 0x96), ("SETL", 0x9c)
    161   , ("SETLE", 0x9e), ("SETNB", 0x93), ("SETNBE", 0x97), ("SETNL", 0x9d)
    162   , ("SETNLE", 0x9f), ("SETNO", 0x91), ("SETNP", 0x9b), ("SETNS", 0x99)
    163   , ("SETNZ", 0x95), ("SETO", 0x90), ("SETP", 0x9a), ("SETS", 0x98)
    164   , ("SETZ", 0x94), ("SHA1MSG1", 0xc9), ("SHA1MSG2", 0xca), ("SHA1NEXTE", 0xc8)
    165   , ("SHA1RNDS4", 0xcc), ("SHA256MSG1", 0xcc), ("SHA256MSG2", 0xcd)
    166   , ("SHA256RNDS2", 0xcb), ("SHL", 0xc0), ("SHL", 0xc1), ("SHL", 0xd0)
    167   , ("SHL", 0xd1), ("SHL", 0xd2), ("SHL", 0xd3), ("SHLD", 0x24), ("SHLD", 0xa4)
    168   , ("SHLD", 0xa5), ("SHLX", 0xf7), ("SHR", 0xc0), ("SHR", 0xc1), ("SHR", 0xd0)
    169   , ("SHR", 0xd1), ("SHR", 0xd2), ("SHR", 0xd3), ("SHRD", 0x2c), ("SHRD", 0xac)
    170   , ("SHRD", 0xad), ("SHRX", 0xf7), ("SUB", 0x28), ("SUB", 0x29), ("SUB", 0x2a)
    171   , ("SUB", 0x2b), ("SUB", 0x2c), ("SUB", 0x2d), ("SUB", 0x80), ("SUB", 0x81)
    172   , ("SUB", 0x82), ("SUB", 0x83), ("TEST", 0x84), ("TEST", 0x85)
    173   , ("TEST", 0xa8), ("TEST", 0xa9), ("TEST", 0xf6), ("TEST", 0xf7)
    174   , ("VAESDEC", 0xde), ("VAESDECLAST", 0xdf), ("VAESENC", 0xdc)
    175   , ("VAESENCLAST", 0xdd), ("VAESIMC", 0xdb), ("VAESKEYGENASSIST", 0xdf)
    176   , ("VALIGND", 0x03), ("VALIGNQ", 0x03), ("VBLENDMPD", 0x65)
    177   , ("VBLENDMPS", 0x65), ("VBROADCASTF128", 0x1a), ("VBROADCASTF32X2", 0x19)
    178   , ("VBROADCASTF32X4", 0x1a), ("VBROADCASTF32X8", 0x1b)
    179   , ("VBROADCASTF64X2", 0x1a), ("VBROADCASTF64X4", 0x1b)
    180   , ("VBROADCASTI128", 0x5a), ("VBROADCASTI32X2", 0x59)
    181   , ("VBROADCASTI32X4", 0x5a), ("VBROADCASTI32X8", 0x5b)
    182   , ("VBROADCASTI64X2", 0x5a), ("VBROADCASTI64X4", 0x5b)
    183   , ("VBROADCASTSD", 0x19), ("VBROADCASTSS", 0x18), ("VCOMPRESSPD", 0x8a)
    184   , ("VCOMPRESSPS", 0x8a), ("VDBPSADBW", 0x42), ("VEXPANDPD", 0x88)
    185   , ("VEXPANDPS", 0x88), ("VEXTRACTF128", 0x19), ("VEXTRACTF32X4", 0x19)
    186   , ("VEXTRACTF32X8", 0x1b), ("VEXTRACTF64X2", 0x19), ("VEXTRACTF64X4", 0x1b)
    187   , ("VEXTRACTI128", 0x39), ("VEXTRACTI32X4", 0x39), ("VEXTRACTI32X8", 0x3b)
    188   , ("VEXTRACTI64X2", 0x39), ("VEXTRACTI64X4", 0x3b)
    189   , ("VGF2P8AFFINEINVQB", 0xcf), ("VGF2P8AFFINEQB", 0xce), ("VGF2P8MULB", 0xcf)
    190   , ("VINSERTF128", 0x18), ("VINSERTF32X4", 0x18), ("VINSERTF32X8", 0x1a)
    191   , ("VINSERTF64X2", 0x18), ("VINSERTF64X4", 0x1a), ("VINSERTI128", 0x38)
    192   , ("VINSERTI32X4", 0x38), ("VINSERTI32X8", 0x3a), ("VINSERTI64X2", 0x38)
    193   , ("VINSERTI64X4", 0x3a), ("VLDDQU", 0xf0), ("VMOVD", 0x6e), ("VMOVD", 0x7e)
    194   , ("VMOVDDUP", 0x12), ("VMOVDQA", 0x6f), ("VMOVDQA", 0x7f)
    195   , ("VMOVDQA32", 0x6f), ("VMOVDQA32", 0x7f), ("VMOVDQA64", 0x6f)
    196   , ("VMOVDQA64", 0x7f), ("VMOVDQU", 0x6f), ("VMOVDQU", 0x7f)
    197   , ("VMOVDQU16", 0x6f), ("VMOVDQU16", 0x7f), ("VMOVDQU32", 0x6f)
    198   , ("VMOVDQU32", 0x7f), ("VMOVDQU64", 0x6f), ("VMOVDQU64", 0x7f)
    199   , ("VMOVDQU8", 0x6f), ("VMOVDQU8", 0x7f), ("VMOVNTDQ", 0xe7)
    200   , ("VMOVNTDQA", 0x2a), ("VMOVQ", 0x6e), ("VMOVQ", 0x7e), ("VMOVQ", 0xd6)
    201   , ("VMOVSD", 0x10), ("VMOVSD", 0x11), ("VMOVSHDUP", 0x16)
    202   , ("VMOVSLDUP", 0x12), ("VMPSADBW", 0x42), ("VPABSB", 0x1c), ("VPABSD", 0x1e)
    203   , ("VPABSQ", 0x1f), ("VPABSW", 0x1d), ("VPACKSSDW", 0x6b)
    204   , ("VPACKSSWB", 0x63), ("VPACKUSDW", 0x2b), ("VPACKUSWB", 0x67)
    205   , ("VPADDB", 0xfc), ("VPADDD", 0xfe), ("VPADDQ", 0xd4), ("VPADDSB", 0xec)
    206   , ("VPADDSW", 0xed), ("VPADDUSB", 0xdc), ("VPADDUSW", 0xdd), ("VPADDW", 0xfd)
    207   , ("VPALIGNR", 0x0f), ("VPAND", 0xdb), ("VPANDD", 0xdb), ("VPANDN", 0xdf)
    208   , ("VPANDND", 0xdf), ("VPANDNQ", 0xdf), ("VPANDQ", 0xdb), ("VPAVGB", 0xe0)
    209   , ("VPAVGW", 0xe3), ("VPBLENDD", 0x02), ("VPBLENDMB", 0x66)
    210   , ("VPBLENDMD", 0x64), ("VPBLENDMQ", 0x64), ("VPBLENDMW", 0x66)
    211   , ("VPBLENDVB", 0x4c), ("VPBLENDW", 0x0e), ("VPBROADCASTB", 0x78)
    212   , ("VPBROADCASTB", 0x7a), ("VPBROADCASTD", 0x58), ("VPBROADCASTD", 0x7c)
    213   , ("VPBROADCASTMB2Q", 0x2a), ("VPBROADCASTMW2D", 0x3a)
    214   , ("VPBROADCASTQ", 0x59), ("VPBROADCASTQ", 0x7c), ("VPBROADCASTW", 0x79)
    215   , ("VPBROADCASTW", 0x7b), ("VPCLMULQDQ", 0x44), ("VPCMPB", 0x3f)
    216   , ("VPCMPEQB", 0x74), ("VPCMPEQD", 0x76), ("VPCMPEQQ", 0x29)
    217   , ("VPCMPEQW", 0x75), ("VPCMPGTB", 0x64), ("VPCMPGTD", 0x66)
    218   , ("VPCMPGTQ", 0x37), ("VPCMPGTW", 0x65), ("VPCMPQ", 0x1f), ("VPCMPUB", 0x3e)
    219   , ("VPCMPUD", 0x1e), ("VPCMPUQ", 0x1e), ("VPCMPUW", 0x3e), ("VPCMPW", 0x3f)
    220   , ("VPERM2F128", 0x06), ("VPERM2I128", 0x46), ("VPERMD", 0x36)
    221   , ("VPERMI2D", 0x76), ("VPERMI2PD", 0x77), ("VPERMI2PS", 0x77)
    222   , ("VPERMI2Q", 0x76), ("VPERMI2W", 0x75), ("VPERMILPD", 0x05)
    223   , ("VPERMILPD", 0x0d), ("VPERMILPS", 0x04), ("VPERMILPS", 0x0c)
    224   , ("VPERMPD", 0x01), ("VPERMPD", 0x16), ("VPERMPS", 0x16), ("VPERMQ", 0x00)
    225   , ("VPERMQ", 0x36), ("VPERMT2D", 0x7e), ("VPERMT2PD", 0x7f)
    226   , ("VPERMT2PS", 0x7f), ("VPERMT2Q", 0x7e), ("VPERMT2W", 0x7d)
    227   , ("VPERMW", 0x8d), ("VPEXTRB", 0x14), ("VPEXTRD", 0x16), ("VPEXTRQ", 0x16)
    228   , ("VPEXTRW", 0x15), ("VPEXTRW", 0xc5), ("VPHADDD", 0x02), ("VPHADDSW", 0x03)
    229   , ("VPHADDW", 0x01), ("VPHMINPOSUW", 0x41), ("VPHSUBD", 0x06)
    230   , ("VPHSUBSW", 0x07), ("VPHSUBW", 0x05), ("VPINSRB", 0x20), ("VPINSRD", 0x22)
    231   , ("VPINSRQ", 0x22), ("VPINSRW", 0xc4), ("VPLZCNTD", 0x44)
    232   , ("VPLZCNTQ", 0x44), ("VPMADD52HUQ", 0xb5), ("VPMADD52LUQ", 0xb4)
    233   , ("VPMADDUBSW", 0x04), ("VPMADDWD", 0xf5), ("VPMAXSB", 0x3c)
    234   , ("VPMAXSQ", 0x3d), ("VPMAXSW", 0xee), ("VPMAXUB", 0xde), ("VPMAXUD", 0x3f)
    235   , ("VPMAXUQ", 0x3f), ("VPMAXUW", 0x3e), ("VPMINSB", 0x38), ("VPMINSQ", 0x39)
    236   , ("VPMINSW", 0xea), ("VPMINUB", 0xda), ("VPMINUD", 0x3b), ("VPMINUQ", 0x3b)
    237   , ("VPMINUW", 0x3a), ("VPMOVB2M", 0x29), ("VPMOVD2M", 0x39)
    238   , ("VPMOVDB", 0x31), ("VPMOVDW", 0x33), ("VPMOVM2B", 0x28)
    239   , ("VPMOVM2D", 0x38), ("VPMOVM2Q", 0x38), ("VPMOVM2W", 0x28)
    240   , ("VPMOVMSKB", 0xd7), ("VPMOVQ2M", 0x39), ("VPMOVQB", 0x32)
    241   , ("VPMOVQD", 0x35), ("VPMOVQW", 0x34), ("VPMOVSDB", 0x21)
    242   , ("VPMOVSDW", 0x23), ("VPMOVSQB", 0x22), ("VPMOVSQD", 0x25)
    243   , ("VPMOVSQW", 0x24), ("VPMOVSWB", 0x20), ("VPMOVSXBD", 0x21)
    244   , ("VPMOVSXBQ", 0x22), ("VPMOVSXBW", 0x20), ("VPMOVSXDQ", 0x25)
    245   , ("VPMOVSXWD", 0x23), ("VPMOVSXWQ", 0x24), ("VPMOVUSDB", 0x11)
    246   , ("VPMOVUSDW", 0x13), ("VPMOVUSQB", 0x12), ("VPMOVUSQD", 0x15)
    247   , ("VPMOVUSQW", 0x14), ("VPMOVUSWB", 0x10), ("VPMOVW2M", 0x29)
    248   , ("VPMOVWB", 0x30), ("VPMOVZXBD", 0x31), ("VPMOVZXBQ", 0x32)
    249   , ("VPMOVZXBW", 0x30), ("VPMOVZXDQ", 0x35), ("VPMOVZXWD", 0x33)
    250   , ("VPMOVZXWQ", 0x34), ("VPMULDQ", 0x28), ("VPMULHRSW", 0x0b)
    251   , ("VPMULHUW", 0xe4), ("VPMULHW", 0xe5), ("VPMULLD", 0x40), ("VPMULLQ", 0x40)
    252   , ("VPMULLW", 0xd5), ("VPMULUDQ", 0xf4), ("VPOR", 0xeb), ("VPORD", 0xeb)
    253   , ("VPORQ", 0xeb), ("VPROLD", 0x72), ("VPROLQ", 0x72), ("VPROLVD", 0x15)
    254   , ("VPROLVQ", 0x15), ("VPRORD", 0x72), ("VPRORQ", 0x72), ("VPRORVD", 0x14)
    255   , ("VPRORVQ", 0x14), ("VPSADBW", 0xf6), ("VPSHLDD", 0x71), ("VPSHLDQ", 0x71)
    256   , ("VPSHLDVD", 0x71), ("VPSHLDVQ", 0x71), ("VPSHLDVW", 0x70)
    257   , ("VPSHLDW", 0x70), ("VPSHRDD", 0x73), ("VPSHRDQ", 0x73), ("VPSHRDVD", 0x73)
    258   , ("VPSHRDVQ", 0x73), ("VPSHRDVW", 0x72), ("VPSHRDW", 0x72)
    259   , ("VPSHUFB", 0x00), ("VPSHUFD", 0x70), ("VPSHUFHW", 0x70)
    260   , ("VPSHUFLW", 0x70), ("VPSIGNB", 0x08), ("VPSIGND", 0x0a), ("VPSIGNW", 0x09)
    261   , ("VPSLLD", 0x72), ("VPSLLD", 0xf2), ("VPSLLDQ", 0x73), ("VPSLLQ", 0x73)
    262   , ("VPSLLQ", 0xf3), ("VPSLLVD", 0x47), ("VPSLLVQ", 0x47), ("VPSLLVW", 0x12)
    263   , ("VPSLLW", 0x71), ("VPSLLW", 0xf1), ("VPSRAD", 0x72), ("VPSRAD", 0xe2)
    264   , ("VPSRAQ", 0x72), ("VPSRAQ", 0xe2), ("VPSRAVD", 0x46), ("VPSRAVQ", 0x46)
    265   , ("VPSRAVW", 0x11), ("VPSRAW", 0x71), ("VPSRAW", 0xe1), ("VPSRLD", 0x72)
    266   , ("VPSRLD", 0xd2), ("VPSRLDQ", 0x73), ("VPSRLQ", 0x73), ("VPSRLQ", 0xd3)
    267   , ("VPSRLVD", 0x45), ("VPSRLVQ", 0x45), ("VPSRLVW", 0x10), ("VPSRLW", 0x71)
    268   , ("VPSRLW", 0xd1), ("VPSUBB", 0xf8), ("VPSUBD", 0xfa), ("VPSUBQ", 0xfb)
    269   , ("VPSUBSB", 0xe8), ("VPSUBSW", 0xe9), ("VPSUBUSB", 0xd8)
    270   , ("VPSUBUSW", 0xd9), ("VPSUBW", 0xf9), ("VPTERNLOGD", 0x25)
    271   , ("VPTERNLOGQ", 0x25), ("VPTEST", 0x17), ("VPTESTMB", 0x26)
    272   , ("VPTESTMD", 0x27), ("VPTESTMQ", 0x27), ("VPTESTMW", 0x26)
    273   , ("VPTESTNMB", 0x26), ("VPTESTNMD", 0x27), ("VPTESTNMQ", 0x27)
    274   , ("VPTESTNMW", 0x26), ("VPUNPCKHBW", 0x68), ("VPUNPCKHDQ", 0x6a)
    275   , ("VPUNPCKHQDQ", 0x6d), ("VPUNPCKHWD", 0x69), ("VPUNPCKLBW", 0x60)
    276   , ("VPUNPCKLDQ", 0x62), ("VPUNPCKLQDQ", 0x6c), ("VPUNPCKLWD", 0x61)
    277   , ("VPXOR", 0xef), ("VPXORD", 0xef), ("VPXORQ", 0xef), ("VSHUFF32X4", 0x23)
    278   , ("VSHUFF64X2", 0x23), ("VSHUFI32X4", 0x43), ("VSHUFI64X2", 0x43)
    279   , ("VZEROALL", 0x77), ("VZEROUPPER", 0x77), ("XOR", 0x30), ("XOR", 0x31)
    280   , ("XOR", 0x32), ("XOR", 0x33), ("XOR", 0x34), ("XOR", 0x35), ("XOR", 0x80)
    281   , ("XOR", 0x81), ("XOR", 0x82), ("XOR", 0x83), ("XORPS", 0x57)
    282   ]