Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /****************************    opcodes.cpp    *******************************
  2. * Author:        Agner Fog
  3. * Date created:  2007-02-21
  4. * Last modified: 2018-10-08
  5. * Project:       objconv
  6. * Module:        opcodes.cpp
  7. * Description:
  8. * Definition of opcode maps used by disassembler
  9. *
  10. * Copyright 2007-2018 GNU General Public License http://www.gnu.org/licenses
  11. *****************************************************************************/
  12.  
  13.  
  14. /*************************** Define opcode maps ******************************
  15.  
  16. Each line in the tables defines an instruction.
  17. Name is the name of the instruction, possibly without suffix for operand size etc.
  18. Instset defines which instruction set is required.
  19. Prefix defines which prefixes are allowed or required and what they do.
  20. Format defines which scheme the instruction code is modeled after.
  21. Dest is the type of the destination operand.
  22. Source1-3 defines the types of up to 3 source operands.
  23. Link indicates branching into a subpage.
  24. Options is used for various types of additional information.
  25.  
  26. These code tables are organized as a big branching tree.
  27. A line can branch into a subpage if more than one instruction or variant
  28. begins with the same code bytes. Each subpage can branch further to form
  29. a tree structure many levels deep. The first page, OpcodeMap0, is indexed
  30. by the first code byte after any prefixes. The subpages can be indexed by
  31. several different criteria, such as subsequent bytes, various bit-fields,
  32. or by the values of any prefixes that come before the code byte. The
  33. branching criteria are indicated in the 'link' column, while the submap
  34. number is indicated in the 'instset' field.
  35.  
  36. The interpretation of an instruction may start at the root, OpcodeMap0,
  37. and follow any branches until the final leaf is found.
  38. Instructions with VEX, EVEX or MVEX prefix use the VEX.mm bits as
  39. shortcuts to the subpages OpcodeMap1, OpcodeMap2 and OpcodeMap4.
  40.  
  41. The values in the tables do not use names for the constants because each
  42. value would need the combination of several names so that the lines would
  43. be extremely long and very difficult to align in a readable way. The meaning
  44. of the values in each field in the map entries is defined in disasm.h.
  45.  
  46. OpcodeTables[] is an array of pointers to all the maps.
  47.  
  48. OpcodeTableLength[] indicates the size of each map.
  49.  
  50. If a map is incomplete, then the last entry should indicate a default for
  51. the missing entries, i.e. how to display the illegal or unknown instruction
  52. codes.
  53.  
  54. New entries can be added whenever a new extension to the instruction set is
  55. introduced.
  56.  
  57. *****************************************************************************/
  58.  
  59. #include "stdafx.h"
  60.  
  61. // Primary opcode map. This is the root of the opcode lookup tree
  62. SOpcodeDef OpcodeMap0[256] = {
  63. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  64.    {"add",       0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 00
  65.    {"add",       0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 01
  66.    {"add",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 02
  67.    {"add",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 03
  68.    {"add",       0     , 0      , 0x41  , 0xA1  , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 04
  69.    {"add",       0     , 0x1100 , 0x81  , 0xA9  , 0x28  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 05
  70.    {"push es",   0x8000, 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 06
  71.    {"pop  es",   0x8000, 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 07
  72.    {"or",        0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 08
  73.    {"or",        0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 09
  74.    {"or",        0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0A
  75.    {"or",        0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0B
  76.    {"or",        0     , 0      , 0x41  , 0xA1  , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 0C
  77.    {"or",        0     , 0x1100 , 0x81  , 0xA9  , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 0D
  78.    {"push cs",   0x8000, 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0E
  79.    {0,           0x1   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F link to OpcodeMap1
  80. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  81.    {"adc",       0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 10
  82.    {"adc",       0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 11
  83.    {"adc",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 12
  84.    {"adc",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 13
  85.    {"adc",       0     , 0      , 0x41  , 0xA1  , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 14
  86.    {"adc",       0     , 0x1100 , 0x81  , 0xA9  , 0x29  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 15
  87.    {"push ss",   0x8000, 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 16
  88.    {"pop  ss",   0x8000, 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 17
  89.    {"sbb",       0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 18
  90.    {"sbb",       0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 19
  91.    {"sbb",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 1A
  92.    {"sbb",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 1B
  93.    {"sbb",       0     , 0      , 0x41  , 0xA1  , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 1C
  94.    {"sbb",       0     , 0x1100 , 0x81  , 0xA9  , 0x29  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 1D
  95.    {"push ds",   0x8000, 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 1E
  96.    {"pop  ds",   0x8000, 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 1F
  97. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  98.    {"and",       0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 20
  99.    {"and",       0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 21
  100.    {"and",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 22
  101.    {"and",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 23
  102.    {"and",       0     , 0      , 0x41  , 0xA1  , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 24
  103.    {"and",       0     , 0x1100 , 0x81  , 0xA9  , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 25
  104.    {"es:",       0     , 0      , 0x8001, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 26
  105.    {"daa",       0x8000, 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 27
  106.    {"sub",       0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 28
  107.    {"sub",       0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 29
  108.    {"sub",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 2A
  109.    {"sub",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 2B
  110.    {"sub",       0     , 0      , 0x41  , 0xA1  , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 2C
  111.    {"sub",       0     , 0x1100 , 0x81  , 0xA9  , 0x29  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 2D
  112.    {"cs:",       0     , 0      , 0x8001, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 2E
  113.    {"das",       0x8000, 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 2F
  114. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  115.    {"xor",       0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 30
  116.    {"xor",       0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 31
  117.    {"xor",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 32
  118.    {"xor",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 33
  119.    {"xor",       0     , 0      , 0x41  , 0xA1  , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 34
  120.    {"xor",       0     , 0x1100 , 0x81  , 0xA9  , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 35
  121.    {"ss:",       0     , 0      , 0x8001, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 36
  122.    {"aaa",       0x8000, 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 37
  123.    {"cmp",       0     , 0      , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0x4   },    // 38
  124.    {"cmp",       0     , 0x1100 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0x4   },    // 39
  125.    {"cmp",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 3A
  126.    {"cmp",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 3B
  127.    {"cmp",       0     , 0      , 0x41  , 0xA1  , 0x11  , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 3C
  128.    {"cmp",       0     , 0x1100 , 0x81  , 0xA9  , 0x19  , 0     , 0     , 0     , 0     , 0     , 0x84  },    // 3D
  129.    {"ds:",       0     , 0      , 0x8001, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 3E
  130.    {"aas",       0x8000, 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 3F
  131. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  132.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 40
  133.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 41
  134.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 42
  135.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 43
  136.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 44
  137.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 45
  138.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 46
  139.    {"inc",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 47
  140.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 48
  141.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 49
  142.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 4A
  143.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 4B
  144.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 4C
  145.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 4D
  146.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 4E
  147.    {"dec",       0x8000, 0x100  , 0x3   , 0x1008, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 4F
  148. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  149.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 50
  150.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 51
  151.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 52
  152.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 53
  153.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 54
  154.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 55
  155.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 56
  156.    {"push",      0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // 57
  157.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 58
  158.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 59
  159.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 5A
  160.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 5B
  161.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 5C
  162.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 5D
  163.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 5E
  164.    {"pop",       0     , 0x2102 , 0x3   , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 5F
  165. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  166.    {"pusha",     0x8001, 0x102  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   },    // 60
  167.    {"popa",      0x8001, 0x102  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   },    // 61
  168.    {"bound",     0x8001, 0x106  , 0x12  , 0x1008, 0x2009, 0     , 0     , 0     , 0     , 0     , 0     },    // 62
  169.    {0,           0x3B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x7   , 0     },    // 63 Link to arpl/movsxd
  170.    {"fs:",       0     , 0      , 0x8001, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 64
  171.    {"gs:",       0     , 0      , 0x8001, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 65
  172.    {"operand size:",0x0, 0      , 0x8000, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66
  173.    {"address size:",0x0, 0      , 0x8000, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 67
  174.    {"push",      0     , 0x2102 , 0x82  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 68 push imm word
  175.    {"imul",      0x1   , 0x1100 , 0x92  , 0x1009, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0x80  },    // 69 imul r,m,iv
  176.    {"push",      0     , 0x2102 , 0x42  , 0     , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 6A push imm byte
  177.    {"imul",      0x1   , 0x1100 , 0x52  , 0x1009, 0x9   , 0x21  , 0     , 0     , 0     , 0     , 0     },    // 6B imul r,m,ib
  178.    {"insb",      0     , 0x21   , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 6C insb
  179.    {"ins",       0     , 0x121  , 0x1   , 0x20C2, 0xB2  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 6D insw
  180.    {"outsb",     0     , 0x21   , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 6E outsb
  181.    {"outs",      0     , 0x121  , 0x1   , 0xB2  , 0x20C2, 0     , 0     , 0     , 0     , 0     , 0x8   },    // 6F outs
  182. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  183.    {"jo",        0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 70 conditional short jumps
  184.    {"jno",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 71
  185.    {"jc",        0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 72
  186.    {"jnc",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 73
  187.    {"jz",        0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 74
  188.    {"jnz",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 75
  189.    {"jbe",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 76
  190.    {"ja",        0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 77
  191.    {"js",        0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 78
  192.    {"jns",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 79
  193.    {"jpe",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 7A
  194.    {"jpo",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 7B
  195.    {"jl",        0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 7C
  196.    {"jge",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 7D
  197.    {"jle",       0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 7E
  198.    {"jg",        0     , 0x88   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 7F
  199. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  200.    {"grp1",      0x1A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 80 link to immediate grp 1
  201.    {"grp1",      0x1B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 81 link to immediate grp 1
  202.    {"grp1",      0x1C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 82 link to immediate grp 1
  203.    {"grp1",      0x1D  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 83 link to immediate grp 1
  204.    {"test",      0     , 0      , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0x4   },    // 84
  205.    {"test",      0     , 0x1100 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0x4   },    // 85
  206.    {"xchg",      0     , 0xC50  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0x48  },    // 86
  207.    {"xchg",      0     , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0x48  },    // 87
  208.    {"mov",       0     , 0xC40  , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0x40  },    // 88
  209.    {"mov",       0     , 0x1D40 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0x40  },    // 89
  210.    {"mov",       0     , 0      , 0x12  , 0x1001, 0x1   , 0     , 0     , 0     , 0     , 0     , 0x40  },    // 8A
  211.    {"mov",       0     , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0x40  },    // 8B
  212.    {"mov",       0     , 0x1100 , 0x13  , 0x9   , 0x91  , 0     , 0     , 0     , 0     , 0     , 0     },    // 8C mov r16,segreg
  213.    {"lea",       0     , 0x1101 , 0x12  , 0x1009, 0x2009, 0     , 0     , 0     , 0     , 0     , 0xC0  },    // 8D
  214.    {"mov",       0     , 0x1100 , 0x12  , 0x91  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 8E mov segreg,r16
  215.    {"pop",       0x28  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 8F Link to group 1A
  216. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  217.    {"nop",       0x3C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 90 NOP/Pause. Link to map
  218.    {"xchg",      0     , 0x1100 , 0x3   , 0x1009, 0xA9  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 91 xchg cx,ax
  219.    {"xchg",      0     , 0x1100 , 0x3   , 0x1009, 0xA9  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 92 xchg dx,ax
  220.    {"xchg",      0     , 0x1100 , 0x3   , 0x1009, 0xA9  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 93 xchg bx,ax
  221.    {"xchg",      0     , 0x1100 , 0x3   , 0x1009, 0xA9  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 94 xchg sp,ax
  222.    {"xchg",      0     , 0x1100 , 0x3   , 0x1009, 0xA9  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 95 xchg bp,ax
  223.    {"xchg",      0     , 0x1100 , 0x3   , 0x1009, 0xA9  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 96 xchg si,ax
  224.    {"xchg",      0     , 0x1100 , 0x3   , 0x1009, 0xA9  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 97 xchg di,ax
  225.    {"cbw",       0x39  , 0x1100 , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 98 Link to map
  226.    {"cwd",       0x3A  , 0x1100 , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 99 Link to map
  227.    {"call",      0x8000, 0x182  , 0x200 , 0x85  , 0     , 0     , 0     , 0     , 0     , 0     , 0x28  },    // 9A call far
  228.    {"fwait",     0x100 , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 9B
  229.    {"pushf",     0x3E  , 0x2100 , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 9C Link to map: pushf/d/q
  230.    {"popf",      0x3F  , 0x2100 , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 9D Link to map: popf/d/q
  231.    {"sahf",      0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 9E
  232.    {"lahf",      0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 9F
  233. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  234.    {"mov",       0     , 0x5    , 0x401 , 0x10A1, 0x2001, 0     , 0     , 0     , 0     , 0     , 0     },    // A0 mov al,mem
  235.    {"mov",       0     , 0x1105 , 0x401 , 0x10A9, 0x2009, 0     , 0     , 0     , 0     , 0     , 0     },    // A1 mov ax,mem
  236.    {"mov",       0     , 0x5    , 0x401 , 0x2001, 0x10A1, 0     , 0     , 0     , 0     , 0     , 0     },    // A2 mov mem,al
  237.    {"mov",       0     , 0x1105 , 0x401 , 0x2009, 0x10A9, 0     , 0     , 0     , 0     , 0     , 0     },    // A3 mov mem,ax
  238.    {"movs",      0     , 0x25   , 0x1   , 0x20C2, 0x20C1, 0     , 0     , 0     , 0     , 0     , 0x8   },    // A4 movsb
  239.    {"movs",      0     , 0x1125 , 0x1   , 0x20C2, 0x20C1, 0     , 0     , 0     , 0     , 0     , 0x8   },    // A5 movsw
  240.    {"cmps",      0     , 0x45   , 0x1   , 0x20C2, 0x20C1, 0     , 0     , 0     , 0     , 0     , 0x8   },    // A6 cmpsb
  241.    {"cmps",      0     , 0x1145 , 0x1   , 0x20C2, 0x20C1, 0     , 0     , 0     , 0     , 0     , 0x8   },    // A7 cmpsw
  242.    {"test",      0     , 0      , 0x41  , 0x10A1, 0x31  , 0     , 0     , 0     , 0     , 0     , 0x4   },    // A8 test al,ib
  243.    {"test",      0     , 0x1100 , 0x81  , 0x10A9, 0x39  , 0     , 0     , 0     , 0     , 0     , 0x4   },    // A9 test ax,iw
  244.    {"stos",      0     , 0x21   , 0x1   , 0x20C2, 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // AA stosb
  245.    {"stos",      0     , 0x1121 , 0x1   , 0x20C2, 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // AB stosw
  246.    {"lods",      0     , 0x25   , 0x1   , 0     , 0x20C1, 0     , 0     , 0     , 0     , 0     , 0x8   },    // AC lodsb
  247.    {"lods",      0     , 0x1125 , 0x1   , 0     , 0x20C1, 0     , 0     , 0     , 0     , 0     , 0x8   },    // AD lodsw
  248.    {"scas",      0     , 0x41   , 0x1   , 0x20C2, 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // AE scasb
  249.    {"scas",      0     , 0x1141 , 0x1   , 0x20C2, 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // AF scasw
  250. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  251.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B0 mov al,ib
  252.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B1 mov cl,ib
  253.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B2 mov dl,ib
  254.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B3 mov bl,ib
  255.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B4 mov ah,ib
  256.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B5 mov ch,ib
  257.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B6 mov dh,ib
  258.    {"mov",       0     , 0      , 0x43  , 0x1001, 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // B7 mov bh,ib
  259.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // B8 mov ax,iw
  260.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // B9 mov cx,iw
  261.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // BA mov dx,iw
  262.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // BB mov bx,iw
  263.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // BC mov sp,iw
  264.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // BD mov bp,iw
  265.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // BE mov si,iw
  266.    {"mov",       0     , 0x1100 , 0x103 , 0x1009, 0x19  , 0     , 0     , 0     , 0     , 0     , 0x400 },    // BF mov di,iw
  267. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  268.    {"grp2",      0x1E  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // C0 link to grp 2
  269.    {"grp2",      0x1F  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // C1 link to grp 2
  270.    {"ret",       0     , 0x21AA , 0x22  , 0     , 0x12  , 0     , 0     , 0     , 0     , 0     , 0x30  },    // C2 retn iw
  271.    {"ret",       0     , 0x21AA , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x30  },    // C3 retn
  272.    {"les",       0x8000, 0x100  , 0x812 , 0x1009, 0x200C, 0     , 0     , 0     , 0     , 0     , 0     },    // C4 les
  273.    {"lds",       0x8000, 0x100  , 0x812 , 0x1009, 0x200C, 0     , 0     , 0     , 0     , 0     , 0     },    // C5 lds
  274.    {"mov",       0x2F  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // C6 link to grp 11
  275.    {"mov",       0x30  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // C7 link to grp 11
  276.    {"enter",     0     , 0      , 0x62  , 0     , 0x12  , 0x11  , 0     , 0     , 0     , 0     , 0x8   },    // C8
  277.    {"leave",     0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // C9
  278.    {"retf",      0     , 0x2182 , 0x22  , 0     , 0x12  , 0     , 0     , 0     , 0     , 0     , 0x10  },    // CA retf iw
  279.    {"retf",      0     , 0x2182 , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x10  },    // CB retf
  280.    {"int 3;breakpoint or filler",0,0,2  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x48  },    // CC
  281.    {"int",       0     , 0      , 0x42  , 0     , 0x11  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // CD
  282.    {"into",      0x8000, 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // CE
  283.    {0,           0x19  , 0x1100 , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // CF link to IRET
  284. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  285.    {"grp2",      0x20  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // D0 link to grp 2
  286.    {"grp2",      0x21  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // D1 link to grp 2
  287.    {"grp2",      0x22  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // D2 link to grp 2
  288.    {"grp2",      0x23  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // D3 link to grp 2
  289.    {"aam",       0x8000, 0      , 0x42  , 0     , 0x11  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // D4. Don't show immediate operand if = 10 !
  290.    {"aad",       0x8000, 0      , 0x42  , 0     , 0x11  , 0     , 0     , 0     , 0     , 0     , 0x8   },    // D5. Don't show immediate operand if = 10 !
  291.    {"salc",      0x8000, 0      , 0x4002, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // D6 salc (undocumented opcode)
  292.    {"xlat",      0x92  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x10  , 0     },    // D7. Link to xlat
  293.    {"x87 instr", 0x8   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // D8 link to FP grp
  294.    {"x87 instr", 0x9   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // D9 link to FP grp
  295.    {"x87 instr", 0xA   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // DA link to FP grp
  296.    {"x87 instr", 0xB   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // DB link to FP grp
  297.    {"x87 instr", 0xC   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // DC link to FP grp
  298.    {"x87 instr", 0xD   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // DD link to FP grp
  299.    {"x87 instr", 0xE   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // DE link to FP grp
  300.    {"x87 instr", 0xF   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // DF link to FP grp
  301. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  302.    {"loopne",    0     , 0x80   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // E0
  303.    {"loope",     0     , 0x80   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // E1
  304.    {"loop",      0     , 0x80   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // E2
  305.    {"j(e/r)cxz", 0x3D  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xA   , 0     },    // E3 link to map
  306.    {"in",        0x800 , 0      , 0x41  , 0xA1  , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // E4 in al,ib
  307.    {"in",        0x800 , 0x100  , 0x41  , 0xA8  , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // E5 in ax,ib
  308.    {"out",       0x800 , 0      , 0x41  , 0x32  , 0xA1  , 0     , 0     , 0     , 0     , 0     , 0     },    // E6 out ib,al
  309.    {"out",       0x800 , 0x100  , 0x41  , 0x32  , 0xA8  , 0     , 0     , 0     , 0     , 0     , 0     },    // E7 out ib,ax
  310.    {"call",      0     , 0xAA   , 0x82  , 0x83  , 0     , 0     , 0     , 0     , 0     , 0     , 0x28  },    // E8 call near
  311.    {"jmp",       0     , 0xA8   , 0x82  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xB0  },    // E9 jmp near
  312.    {"jmp",       0x8000, 0x80   , 0x202 , 0x84  , 0     , 0     , 0     , 0     , 0     , 0     , 0x30  },    // EA jmp far
  313.    {"jmp",       0     , 0xA8   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0x30  },    // EB jmp short
  314.    {"in",        0x800 , 0      , 0x1   , 0xA1  , 0xB2  , 0     , 0     , 0     , 0     , 0     , 0     },    // EC in al,dx
  315.    {"in",        0x800 , 0x100  , 0x1   , 0xA8  , 0xB2  , 0     , 0     , 0     , 0     , 0     , 0     },    // ED in ax,dx
  316.    {"out",       0x800 , 0      , 0x1   , 0xB2  , 0xA1  , 0     , 0     , 0     , 0     , 0     , 0     },    // EE out dx,al
  317.    {"out",       0x800 , 0x100  , 0x1   , 0xB2  , 0xA8  , 0     , 0     , 0     , 0     , 0     , 0     },    // EF out dx,ax
  318. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  319.    {"lock:",     0     , 0      , 0x8000, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F0 lock prefix
  320.    {"icebp",     0x8000, 0      , 0x4002, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F1 ICE breakpoint, undocumented opcode
  321.    {"repne:",    0     , 0      , 0x8000, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 repne prefix
  322.    {"repe:",     0     , 0      , 0x8000, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F3 repe  prefix
  323.    {"hlt",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x48  },    // F4
  324.    {"cmc",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F5
  325.    {"grp3",      0x24  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // F6 link to grp 3
  326.    {"grp3",      0x25  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // F7 link to grp 3
  327.    {"clc",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F8
  328.    {"stc",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F9
  329.    {"cli",       0x800 , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // FA
  330.    {"sti",       0x800 , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // FB
  331.    {"cld",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // FC
  332.    {"std",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // FD
  333.    {"grp4",      0x26  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // FE link to grp 4
  334.    {"grp5",      0x27  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     }     // FF link to grp 5
  335. };
  336.  
  337. // Secondary opcode map for 2-byte opcode. First byte = 0F
  338. // Indexed by second opcode byte
  339. SOpcodeDef OpcodeMap1[256] = {
  340. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  341.    {"grp6",      0x2A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 00 link to grp 6; sldt etc.
  342.    {"grp7",      0x2B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // 0F 01 link to grp 7; sgdt etc.
  343.    {0,           0x5E  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 02 link to lar
  344.    {0,           0x5F  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 03 link to lsl
  345.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 04 Illegal
  346.    {"syscall",   0x5   , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F 05
  347.    {"clts",      0x805 , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 06
  348.    {"sysret",    0x805 , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x10  },    // 0F 07
  349.    {"invd",      0x804 , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 08
  350.    {"wbinvd",    0x804 , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 09
  351.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0A Illegal
  352.    {"ud2",       0x3   , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x10  },    // 0F 0B
  353.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0C Illegal
  354.    {0,           0xD1  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 0D Link to prefetch
  355.    {"FEMS",      0x1001, 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F OE. AMD only
  356.    {0,           0x6   , 0      , 0x52  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     },    // 0F 0F. Link to tertiary map for AMD 3DNow instructions
  357. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  358.    {0,           0x40  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 10 Link to tertiary map: movups, etc.
  359.    {0,           0x41  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 11 Link to tertiary map: movups, etc.
  360.    {0,           0x42  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 12 Link to tertiary map: movlps, etc.
  361.    {"movl",      0x11  ,0x812200, 0x13  , 0x234F, 0x144F, 0     , 0     , 0x1000, 0     , 0     , 0x3   },    // 0F 13 movlps/pd
  362.    {"unpckl",    0x11  ,0x8D2200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x31  , 0     , 0     , 0x3   },    // 0F 14 unpcklps/pd
  363.    {"unpckh",    0x11  ,0x8D2200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x31  , 0     , 0     , 0x3   },    // 0F 15 unpckhps/pd
  364.    {0,           0x44  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 16 Link to tertiary map: movhps, etc.
  365.    {"movh",      0x11  ,0x812200, 0x13  , 0x234F, 0x144F, 0     , 0     , 0x1000, 0     , 0     , 0x3   },    // 0F 17 movhps/pd
  366.    {0,           0x35  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 18 Link to tertiary map: group 16
  367.    {"hint",      0x6   , 0      , 0x2012, 0     , 0x6   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 19. Hint instructions reserved for future use
  368.    {0,           0x110 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 1A. Link to BNDMK etc
  369.    {0,           0x111 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 1B. Link to BNDCL etc
  370.    {"hint",      0x6   , 0      , 0x2012, 0     , 0x6   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 1C. Hint instructions reserved for future use
  371.    {"hint",      0x6   , 0      , 0x2012, 0     , 0x6   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 1D. Hint instructions reserved for future use
  372.    {"hint",      0x135 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },    // 0F 1E. link to endbr64 etc.
  373.    {"nop",       0x6   , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x40  },    // 0F 1F. Multi-byte nop
  374. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  375.    {"mov",       0x803 , 0      , 0x13  , 0x100A, 0x92  , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 20. mov r32/64,cr
  376.    {"mov",       0x803 , 0x1000 , 0x13  , 0x1009, 0x93  , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 21. mov r32,dr
  377.    {"mov",       0x803 , 0      , 0x12  , 0x92  , 0x100A, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 22. mov cr,r32/64
  378.    {"mov",       0x803 , 0x1000 , 0x12  , 0x93  , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 23. mov dr,r32
  379. #if 0 // Opcode 0F 24 has two meanings:
  380.       // 1: mov r32,tr (obsolete, 80386 only)
  381.    {"mov;80386 only",0x803,0x0  , 0x4013, 0x1003, 0x94  , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 24. mov r32,tr (80386 only)
  382. #else
  383.       // 2: start of 3-byte opcode for AMD SSE5 instructions with DREX byte
  384.    {0,           0x68  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 24. Link to tertiary map for 3-byte opcodes AMD SSE5 with four operands
  385. #endif
  386.    {0,           0x69  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 25. Link to tertiary map for 3-byte opcodes AMD SSE5 with three operands + immediate byte
  387.    {"mov;80386 only",0x803,0    , 0x4012, 0x94  , 0x1003, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 26. mov tr,r32 (80386 only)
  388.    {0,           0x803 , 0      , 0x4012, 0x1003, 0x1003, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 27. illegal
  389.    {"mova",      0x11  ,0xC52200, 0x12  , 0x124F, 0x24F,  0     , 0     , 0x30  , 0x1204, 0     , 0x103 },    // 0F 28. movaps/pd
  390.    {"mova",      0xBC  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 29. Link to movaps/pd
  391.    {0,           0x46  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 2A. Link to tertiary map: cvtpi2ps, etc.
  392.    {0,           0xD2  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 2B. Link to tertiary map: movntps/pd,AMD: also ss/sd
  393.    {0,           0x47  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 2C. Link to tertiary map: cvttps2pi, etc.
  394.    {0,           0x48  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 2D. Link to tertiary map: cvtps2pi, etc.
  395.    {0,           0x4B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 2E. Link to tertiary map: ucomiss/sd
  396.    {0,           0x4C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 2F. Link to tertiary map: comiss/sd
  397. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  398.    {"wrmsr",     0x805 , 0x1000 , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 30
  399.    {"rdtsc",     0x5   , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F 31
  400.    {"rdmsr",     0x805 , 0x1000 , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F 32
  401.    {"rdpmc",     0x5   , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F 33
  402.    {"sysenter",  0x8   , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F 34
  403.    {"sysexit;Same name with or without 48h prefix",0x808,0x1000,1,0,0,0,0, 0     ,0x0   , 0     , 0     },    // 0F 35
  404.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 36 Illegal
  405.    {"getsec",    0x14  , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F 37
  406.    {0,           0x2   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 38. Link to tertiary map for 3-byte opcodes
  407.    {0,           0x3   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 39. Link to tertiary map for 3-byte opcodes
  408.    {0,           0x4   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 3A. Link to tertiary map for 3-byte opcodes
  409.    {0,           0x5   , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 3B. Link to tertiary map for 3-byte opcodes
  410.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3C Illegal
  411.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3D Illegal
  412.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3E Illegal
  413.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3F (VIA/Centaur ALTINST ?)
  414. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  415.    {"cmovo",     0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 40. cmov
  416.    {"cmovno",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 41. cmov
  417.    {"cmovc",     0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 42. cmov
  418.    {"cmovnc",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 43. cmov
  419.    {"cmove",     0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 44. cmov
  420.    {"cmovne",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 45. cmov
  421.    {"cmovbe",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 46. cmov
  422.    {"cmova",     0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 47. cmov
  423.    {"cmovs",     0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 48. cmov
  424.    {"cmovns",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 49. cmov
  425.    {"cmovpe",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 4A. cmov
  426.    {"cmovpo",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 4B. cmov
  427.    {"cmovl",     0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 4C. cmov
  428.    {"cmovge",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 4D. cmov
  429.    {"cmovle",    0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 4E  cmov
  430.    {"cmovg",     0x6   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 4F. cmov
  431. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  432.    {"movmskp",   0xCA  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 50. Link to movmskps/pd
  433.    {"sqrt",      0x76  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 51. Link to sqrtps/pd/ss/sd
  434.    {"rsqrt",     0x77  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 52. Link to rsqrtps/ss
  435.    {"rcp",       0x78  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 53. Link to rcpps/ss
  436.    {"and",       0x11  ,0x8D2200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x21  , 0     , 0     , 0x3   },    // 0F 54. andps/pd
  437.    {"andn",      0x11  ,0x8D2200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x21  , 0     , 0     , 0x3   },    // 0F 55. andnps/pd
  438.    {"or",        0x11  ,0x8D2200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x21  , 0     , 0     , 0x3   },    // 0F 56. orps/pd
  439.    {"xor",       0x11  ,0x8D2200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x21  , 0     , 0     , 0x3   },    // 0F 57. xorps/pd
  440.    {"add",       0x11  ,0xE92E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x3   },    // 0F 58. addps/pd/ss/sd
  441.    {"mul",       0x11  ,0xE92E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x3   },    // 0F 59. mulps/pd/ss/sd
  442.    {0,           0x49  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 5A. Link to cvtps2pd, etc.
  443.    {0,           0x4A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 5B. Link to cvtdq2ps, etc.
  444.    {"sub",       0x11  ,0xE92E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x3   },    // 0F 5C. subps/pd/ss/sd
  445.    {"min",       0x11  ,0xA92E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x33  , 0     , 0     , 0x3   },    // 0F 5D. minps/pd/ss/sd
  446.    {"div",       0x11  ,0xA92E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0     , 0     , 0x3   },    // 0F 5E. divps/pd/ss/sd
  447.    {"max",       0x11  ,0xA92E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x33  , 0     , 0     , 0x3   },    // 0F 5F. maxps/pd/ss/sd
  448. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  449.    {"punpcklbw", 0x7   ,0x8D0200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 60
  450.    {"punpcklwd", 0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 61
  451.    {"punpckldq", 0x7   ,0x8D0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0x21  , 0     , 0     , 0x2   },    // 0F 62
  452.    {"packsswb",  0x7   ,0x8D2200, 0x19  , 0x1201, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 63
  453.    {"pcmpgtb",   0x118 , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 64
  454.    {"pcmpgtw",   0x119 , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 65
  455.    {"pcmpgtd",   0xC8  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 66. link to pcmpgtd
  456.    {"packuswb",  0x7   ,0x8D0200, 0x19  , 0x1201, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 67
  457.    {"punpckhbw", 0x7   ,0x8D2200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 68
  458.    {"punpckhwd", 0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 69
  459.    {"punpckhdq", 0x7   ,0x8D0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0x31  , 0     , 0     , 0x2   },    // 0F 6A
  460.    {"packssdw",  0x7   ,0x8D0200, 0x19  , 0x1202, 0x1203, 0x203 , 0     , 0x21  , 0     , 0     , 0x2   },    // 0F 6B
  461.    {"punpcklqdq",0x12  ,0x8DB200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0x21  , 0     , 0     , 0x2   },    // 0F 6C
  462.    {"punpckhqdq",0x12  ,0x8DB200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0x21  , 0     , 0     , 0x2   },    // 0F 6D
  463.    {0,           0x58  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 0F 6E. Link to tertiary map: movd/movq
  464.    {0,           0x4D  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 6F. Link to tertiary map: movq/movdqa/movdqu
  465. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  466.    {0,           0x4F  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 70. Link to tertiary map: pshufw, etc.
  467.    {0,           0x31  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 71. Link to tertiary map for group 12
  468.    {0,           0x32  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 72. Link to tertiary map for group 13
  469.    {0,           0x33  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 73. Link to tertiary map for group 14
  470.    {"pcmpeqb",   0x116 , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 74
  471.    {"pcmpeqw",   0x117 , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 75
  472.    {"pcmpeqd",   0xC7  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 76. link to pcmpeqd
  473.    {"emms",      0x79  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xB   , 0     },    // 0F 77. Link to emms, vzeroupper, vzeroall
  474.    {0,           0x6C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 78. Link to map for wmread, insrtq, extrq
  475.    {0,           0x6D  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 79 without EVEX. Link to map for wmread, insrtq, extrq
  476.    {0,           0x6A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 7A. Link to map for obsolete 3-byte opcodes AMD SSE5. Note: VEX 0F 7A is in map B1
  477.    {0,           0x6B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   , 0     },    // 0F 7B. Link to map for obsolete 3-byte opcodes AMD SSE5. Note: VEX 0F 7B is in map B1
  478.    {0,           0x5C  , 0xA00  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 7C. Link to map: hadd
  479.    {0,           0x5D  , 0xA00  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 7D. Link to map: hsub
  480.    {0,           0x59  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 7E. Link to map: movd/movq
  481.    {0,           0x4E  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 7F. Link to map: movq/movdqa/movdqu
  482. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  483.    {"jo",        0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 80
  484.    {"jno",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 81
  485.    {"jc",        0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 82
  486.    {"jnc",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 83
  487.    {"je",        0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 84
  488.    {"jne",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 85
  489.    {"jbe",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 86
  490.    {"ja",        0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 87
  491.    {"js",        0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 88
  492.    {"jns",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 89
  493.    {"jpe",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 8A
  494.    {"jpo",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 8B
  495.    {"jl",        0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 8C
  496.    {"jge",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 8D
  497.    {"jle",       0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 8E
  498.    {"jg",        0x3   , 0x8    , 0x80  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0     , 0xA0  },    // 0F 8F
  499. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  500.    {"seto",      0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 90
  501.    {"setno",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 91
  502.    {"setb",      0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 92
  503.    {"setae",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 93
  504.    {"sete",      0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 94
  505.    {"setne",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 95
  506.    {"setbe",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 96
  507.    {"seta",      0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 97
  508.    {"sets",      0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 98
  509.    {"setns",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 99
  510.    {"setpe",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 9A
  511.    {"setpo",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 9B
  512.    {"setl",      0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 9C
  513.    {"setge",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 9D
  514.    {"setle",     0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 9E
  515.    {"setg",      0x3   , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 9F
  516. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  517.    {"push fs",   0x3   , 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F A0
  518.    {"pop  fs",   0x3   , 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F A1
  519.    {"cpuid",     0x4   , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F A2
  520.    {"bt",        0x3   , 0x1100 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F A3
  521.    {"shld",      0x3   , 0x1100 , 0x53  , 0x9   , 0x1009, 0x11  , 0     , 0     , 0     , 0     , 0     },    // 0F A4
  522.    {"shld",      0x3   , 0x1100 , 0x13  , 0x9   , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     },    // 0F A5
  523.    {0,           0xA6  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // 0F A6. Link to VIA instructions
  524.    {0,           0xA7  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // 0F A7. Link to VIA instructions
  525.    {"push gs",   0x3   , 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F A8
  526.    {"pop  gs",   0x3   , 0x2    , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F A9
  527.    {"rsm",       0x803 , 0      , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F AA
  528.    {"bts",       0x3   , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F AB
  529.    {"shrd",      0x3   , 0x1100 , 0x53  , 0x9   , 0x1009, 0x11  , 0     , 0     , 0     , 0     , 0     },    // 0F AC
  530.    {"shrd",      0x3   , 0x1100 , 0x13  , 0x9   , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     },    // 0F AD
  531.    {0,           0x34  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // 0F AE. Link to tertiary map for group 15
  532.    {"imul",      0x1   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F AF
  533. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  534.    {"cmpxchg",   0x3   , 0xC50  , 0x13  , 0x2001, 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B0
  535.    {"cmpxchg",   0x3   , 0x1D50 , 0x13  , 0x2009, 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B1
  536.    {"lss",       0     , 0x1100 , 0x812 , 0x1009, 0x200D, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B2 (valid in 64-bit mode)
  537.    {"btr",       0x3   , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B3
  538.    {"lfs",       0     , 0x1100 , 0x812 , 0x1009, 0x200D, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B4
  539.    {"lgs",       0     , 0x1100 , 0x812 , 0x1009, 0x200D, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B5
  540.    {"movzx",     0x3   , 0x1100 , 0x12  , 0x1009, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B6
  541.    {"movzx",     0x3   , 0x1100 , 0x12  , 0x1009, 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F B7  
  542.    {0,           0x60  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F B8. Link to tertiary map for popcnt, jmpe
  543.    {0,           0x2E  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F B9. Link to tertiary map for group 10: ud1
  544.    {0,           0x2C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F BA. Link to tertiary map for group 8: bt
  545.    {"btc",       0x3   , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F BB
  546.    {"bsf",       0xAE  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F BC. Link to bsf etc.
  547.    {0,           0xD3  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F BD. Link to tertiary map for BSR and LZCNT
  548.    {"movsx",     0x3   , 0x1100 , 0x12  , 0x1009, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F BE
  549.    {"movsx",     0x3   , 0x1100 , 0x12  , 0x1009, 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F BF
  550. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  551.    {"xadd",      0x4   , 0x0C50 , 0x13  , 0x1   , 0x1001, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C0
  552.    {"xadd",      0x4   , 0x1D50 , 0x13  , 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C1
  553.    {0,           0xF5  , 0      , 0x52  , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F C2. Link to cmpps etc.
  554.    {"movnti",    0x11  , 0x1000 , 0x13  , 0x2009, 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C3
  555.    {0,           0x29  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F C4. Link to pinsrw
  556.    {"pextrw",    0x7   ,0x812200, 0x52  , 0x1002, 0x1102, 0x11  , 0     , 0x1000, 0     , 0     , 0x2   },    // 0F C5
  557.    {"shuf",      0x11  ,0x8D2200, 0x59  , 0x124F, 0x124F, 0x24F , 0x11  , 0x31  , 0     , 0     , 0x3   },    // 0F C6
  558.    {0,           0x50  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F C7. Link to tertiary map for group 9
  559.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C8. bswap eax
  560.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C9. bswap ecx
  561.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F CA. bswap edx
  562.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F CB. bswap ebx
  563.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F CC. bswap esp
  564.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F CD. bswap ebp
  565.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F CE. bswap esi
  566.    {"bswap",     0x3   , 0x1000 , 0x3   , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F CF. bswap edi
  567. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  568.    {0,           0x2D  , 0xA00  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F D0. Link to addsubps/pd
  569.    {"psrlw",     0x99  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F D1. Link to map for psrlw
  570.    {"psrld",     0x9A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F D2. Link to map for psrld
  571.    {"psrlq",     0x9B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F D3. Link to map for psrlq
  572.    {"paddq",     0x12  ,0x8D3200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0x21  , 0     , 0     , 0x2   },    // 0F D4
  573.    {"pmullw",    0x7   ,0x8DA200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D5
  574.    {0,           0x53  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F D6. Link to tertiary map for movq2dq etc.
  575.    {"pmovmskb",  0x93  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0B  , 0     },    // 0F D7. Link pmovmskb
  576.    {"psubusb",   0x7   ,0x8D2200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0x20   , 0     , 0     , 0x2   },    // 0F D8
  577.    {"psubusw",   0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D9
  578.    {"pminub",    0x7   ,0x8D0200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F DA
  579.    {"pand",      0xC2  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F DB. link to pand
  580.    {"paddusb",   0x7   ,0x8D2200, 0x19  , 0x1201, 0x1201, 0x201 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F DC
  581.    {"paddusw",   0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F DD
  582.    {"pmaxub",    0x7   ,0x8D2200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F DE
  583.    {"pandn",     0xC3  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F DF. link to pandn
  584. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  585.    {"pavgb",     0x7   ,0x8D2200, 0x19  , 0x1201, 0x1201, 0x201 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F E0
  586.    {"psraw",     0x9C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F E1. Link to map for psraw
  587.    {"psrad",     0x9D  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F E2. Link to map for psrad
  588.    {"pavgw",     0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F E3
  589.    {"pmulhuw",   0x7   ,0x8DA200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F E4
  590.    {"pmulhw",    0x7   ,0x8DA200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F E5
  591.    {0,           0x54  , 0xE00  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F E6. Link to tertiary map for cvtpd2dq etc.
  592.    {0,           0x55  , 0x200  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F E7. Link to tertiary map for movntq
  593.    {"psubsb",    0x7   ,0x8D2200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F E8
  594.    {"psubsw",    0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20   , 0     , 0     , 0x2   },    // 0F E9
  595.    {"pminsw",    0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F EA
  596.    {"por",       0xC4  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F EB. link to por
  597.    {"paddsb",    0x7   ,0x8D2200, 0x19  , 0x1201, 0x1201, 0x201 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F EC
  598.    {"paddsw",    0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F ED
  599.    {"pmaxsw",    0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F EE
  600.    {"pxor",      0xC5  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F EF. link to pxor
  601. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  602.    {0,           0x56  , 0x800  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F F0. Link to tertiary map for lddqu
  603.    {"psllw",     0x96  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F F1. Link to map for psllw
  604.    {"pslld",     0x97  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F F2. Link to map for pslld
  605.    {"psllq",     0x98  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F F3. Link to map for psllq
  606.    {"pmuludq",   0x7   ,0x8D2200, 0x19  , 0x1104, 0x1104, 0x104 , 0     , 0x31  , 0     , 0     , 0x2   },    // 0F F4 (32 bit memory operand is broadcast as 64 bit into every second dword)
  607.    {"pmaddwd",   0x7   ,0x8D2200, 0x19  , 0x1103, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F F5
  608.    {"psadbw",    0x7   ,0x8D2200, 0x19  , 0x1102, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F F6
  609.    {0,           0x57  , 0x200  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F F7. Link to tertiary map for maskmovq
  610.    {"psubb",     0x7   ,0x8D2200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F F8
  611.    {"psubw",     0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F F9
  612.    {"psubd",     0x7   ,0xCD0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0x21  , 0x1406, 0     , 0x2   },    // 0F FA  
  613.    {"psubq",     0x7   ,0x8D2200, 0x19  , 0x1104, 0x1104, 0x104 , 0     , 0x21  , 0     , 0     , 0x2   },    // 0F FB
  614.    {"paddb",     0x7   ,0x8D2200, 0x19  , 0x1201, 0x1201, 0x201 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F FC
  615.    {"paddw",     0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F FD
  616.    {"paddd",     0x7   ,0xCD0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0x31  , 0x1406, 0     , 0x2   },    // 0F FE
  617.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F FF
  618.  
  619.  
  620. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 38
  621. // or VEX encoded with mmmm = 2
  622. // Indexed by third opcode byte
  623. SOpcodeDef OpcodeMap2[] = {
  624. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  625.    {"pshufb",    0x14  ,0x8D2200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 38 00
  626.    {"phaddw",    0x14  , 0xD0200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 01
  627.    {"phaddd",    0x14  , 0xD0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 02
  628.    {"phaddsw",   0x14  , 0xD0200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 03
  629.    {"pmaddubsw", 0x14  ,0x8D2200, 0x19  , 0x1102, 0x1101, 0x101 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 38 04
  630.    {"phsubw",    0x14  , 0xD0200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 05
  631.    {"phsubd",    0x14  , 0xD0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 06
  632.    {"phsubsw",   0x14  , 0xD0200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 07
  633.    {"psignb",    0x14  , 0xD0200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 08
  634.    {"psignw",    0x14  , 0xD0200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 09
  635.    {"psignd",    0x14  , 0xD0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 0A
  636.  
  637.    {"pmulhrsw",  0x14  ,0x8DA200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 38 0B
  638.    {"vpermilps", 0x19  ,0x8FA200, 0x19  , 0x124B, 0x124B, 0x24B , 0     , 0x31  , 0     , 0     , 0     },    // 0F 38 0C
  639.    {"vpermilpd", 0x19  ,0x8FA200, 0x19  , 0x124C, 0x124C, 0x24C , 0     , 0x31  , 0     , 0     , 0     },    // 0F 38 0D
  640.    {"vtestps",   0x19  , 0x78200, 0x12  , 0x124B, 0x24B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 0E
  641.    {"vtestpd",   0x19  , 0x78200, 0x12  , 0x124B, 0x24B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 0F
  642.  
  643. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  644.    {0,           0xEA  , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 10. Link pblendvb and vpsrlvw
  645.    {"vpsravw",   0x1C  ,0x8FC200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x20  , 0     , 0     , 0     },    // 0F 38 11
  646.    {"vpsllvw",   0x20  ,0x8FC200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x20  , 0     , 0     , 0     },    // 0F 38 12
  647.    {"vcvtph2ps", 0x19  ,0x878200, 0x12  , 0x250 , 0xF4A , 0     , 0     , 0x2232, 0     , 0     , 0     },    // 0F 38 13
  648.    {0,           0x8D  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xB   , 0     },    // 0F 38 14. Link to vprorvd blendvps and vpmovqw
  649.    {0,           0x8E  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xB   , 0     },    // 0F 38 15. Link to vprolvd blendvpd and vpmovqd
  650.    {"vpermp",    0x1C  ,0x9F9200 ,0x19  , 0x124F, 0x1203, 0x24F , 0     , 0x31  , 0     , 0     , 0x1   },    // 0F 38 16
  651.    {"ptest",     0x15  , 0x58200, 0x12  , 0x1250, 0x250 , 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 17. Also in AMD SSE5 instruction set
  652.    {"vbroadcastss",0x19,0xC78200, 0x12  , 0x124B, 0x04B , 0     , 0     , 0x20  , 0x1048, 0     , 0     },    // 0F 38 18
  653.    {0,           0x12A , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0E  , 0     },    // 0F 38 19. Link to vbroadcastsd
  654.    {0,           0xE5  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0C  , 0     },    // 0F 38 1A. Link to broadcast instructions
  655.    {0,           0x38  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0C  , 0     },    // 0F 38 1B. Link to vbroadcastf64x4
  656.    {"pabsb",     0x14  ,0x85A200, 0x12  , 0x1201, 0x201 , 0     , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 38 1C
  657.    {"pabsw",     0x14  ,0x85A200, 0x12  , 0x1202, 0x202 , 0     , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 38 1D
  658.    {"pabsd",     0x14  ,0x85B200, 0x12  , 0x1203, 0x203 , 0     , 0     , 0x31  , 0     , 0     , 0x2   },    // 0F 38 1E
  659.    {"vpabsq",    0x20  ,0x85B200, 0x12  , 0x1203, 0x203 , 0     , 0     , 0x31  , 0     , 0     , 0x0   },    // 0F 38 1F
  660. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  661.    {0,           0x7A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 20. Link pmovsxbw
  662.    {0,           0x7B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 21. Link pmovsxbd and vpmovdb
  663.    {0,           0x7D  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 22. Link pmovsxbq and vpmovqb
  664.    {0,           0x7F  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 23. Link pmovsxwd and vpmovdw
  665.    {0,           0x80  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 24. Link pmovsxwq and vpmovqw
  666.    {0,           0x82  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 25. Link pmovsxdq and vpmovqd
  667.    {"vptestm",   0x20  ,0x8BC200, 0x19  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 1     },    // 0F 38 27
  668.    {"vptestm",   0x20  ,0xCBB200, 0x19  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 1     },    // 0F 38 27
  669.    {"pmuldq",    0x15  ,0x8DA200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0x31  , 0     , 0     , 0x2   },    // 0F 38 28  (32 bit memory operand is broadcast as 64 bit into every second dword)
  670.    {0,           0xE3  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 29. Link to pcmpeqq
  671.    {0,           0x91  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 2A. Link to movntdqa and vpbroadcastmb2q
  672.    {"packusdw",  0x15  ,0x8D8200, 0x19  , 0x1202, 0x1203, 0x203 , 0     , 0x21  , 0     , 0     , 0x2   },    // 0F 38 2B
  673.    {0,           0xFD  , 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 2C. Link to vmaskmovps and vscalefps
  674.    {0,           0xFE  , 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 2D. Link to vmaskmovss and vscalefss
  675.    {"vmaskmovps",0x19  , 0xF8200, 0x1A,   0x224B, 0x124B, 0x124B, 0     , 0     , 0     , 0     , 0     },    // 0F 38 2E
  676.    {"vmaskmovpd",0x19  , 0xF8200, 0x1A,   0x224C, 0x124C, 0x124C, 0     , 0     , 0     , 0     , 0     },    // 0F 38 2F
  677. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  678.    {0,           0x83  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 30. Link pmovzxbv
  679.    {0,           0x85  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 31. Link pmovzxbd and vpmovdb
  680.    {0,           0x87  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 32. Link pmovzxbq and vpmovqb
  681.    {0,           0x89  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 33. Link pmovzxwd and vpmovdw
  682.    {0,           0x8A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 34. Link pmovzxwq and vpmovqw
  683.    {0,           0x8C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 35. Link pmovzxdq and vpmovqd
  684.    {"vperm",     0x1C  , 0xCFB200,0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1000, 0     , 0x1   },    // 0F 38 36
  685.    {0,           0xE4  , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 37
  686.    {0,           0x12C , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 38. Link to pminsb etc.
  687.    {0,           0xE6  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 39. Link pminsd
  688.    {0,           0xFF  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 3A
  689.    {0       ,    0xE7  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0x2   },    // 0F 38 3B. Link pminud
  690.    {"pmaxsb",    0x15  ,0x8DA200, 0x19  , 0x1201, 0x1201, 0x201 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 38 3C
  691.    {0,           0xE8  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 3D. Link pmaxsd
  692.    {"pmaxuw",    0x15  ,0x8DA200, 0x19  , 0x1202, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F 38 3E
  693.    {0,           0xE9  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 3F. Link pmaxud
  694. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  695.    {"pmull",     0x15  ,0xCDB200, 0x19  , 0x1203, 0x1203, 0x203 , 0     , 0x31  , 0x1406, 0     , 0x3   },    // 0F 38 40
  696.    {"phminposuw",0x15  ,0x18200,  0x12  , 0x1402, 0x402 , 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 41
  697.    {"vgetexpp",  0x20  ,0xC29200, 0x12  , 0x124F, 0x24F , 0     , 0     , 0x33  , 0x1204, 0     , 0x101 },    // 0F 38 42
  698.    {"vgetexps",  0x20  ,0xCA9200, 0x19  , 0x144F, 0x24F , 0x04F , 0     , 0x32  , 0x1204, 0     , 0x101 },    // 0F 38 43
  699.    {"vplzcnt",   0x21  ,0x80B200, 0x12  , 0x1209, 0x0209, 0     , 0     , 0x31  , 0     , 0     , 0x1   },    // 0F 38 44
  700.    {"vpsrlv",    0x1C  ,0xCFB200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   },    // 0F 38 45
  701.    {"vpsrav",    0x1C  ,0xCFB200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   },    // 0F 38 46
  702.    {"vpsllv",    0x1C  ,0xCFB200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   },    // 0F 38 47
  703.    {"(reserved)",0x0   ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 48
  704.    {"(reserved)",0x0   ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 49
  705.    {"(reserved)",0x0   ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 4A
  706.    {"(reserved)",0x0   ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 4B
  707.    {"vrcp14p"   ,0x20  ,0x8D9200, 0x12  , 0x124F, 0x024F, 0     , 0     , 0x31  , 0     , 0     , 0x1   },    // 0F 38 4C
  708.    {"vrcp14s"   ,0x20  ,0x8D9200, 0x19  , 0x144F, 0x144F, 0x004F, 0     , 0x30  , 0     , 0     , 0x1   },    // 0F 38 4D
  709.    {"vrsqrt14p", 0x20  ,0x8D9200, 0x12  , 0x124F, 0x024F, 0     , 0     , 0x31  , 0     , 0     , 0x1   },    // 0F 38 4E
  710.    {"vrsqrt14s", 0x20  ,0x8D9200, 0x19  , 0x144F, 0x144F, 0x004F, 0     , 0x30  , 0     , 0     , 0x1   },    // 0F 38 4F
  711. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  712.    {"vaddnp",    0x80  ,0x4A9200, 0x19,   0x164F, 0x164F, 0x64F , 0     , 0     , 0x1304, 0     , 0x101 },    // 0F 38 50
  713.    {"vgmaxabsps",0x80  ,0x428200, 0x12  , 0x164F, 0x64F , 0     , 0     , 0     , 0x1204, 0     , 0x100 },    // 0F 38 51
  714.    {"vgminp",    0x80  ,0x429200, 0x12  , 0x164F, 0x64F , 0     , 0     , 0     , 0x1204, 0     , 0x101 },    // 0F 38 52
  715.    {"vgmaxp",    0x80  ,0x429200, 0x12  , 0x164F, 0x64F , 0     , 0     , 0     , 0x1204, 0     , 0x101 },    // 0F 38 53
  716.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 54
  717.    {"vfixupnanp",0x80  ,0x4A9200, 0x19,   0x164F, 0x164F, 0x603 , 0     , 0     , 0x1206, 0     , 0x101 },    // 0F 38 55
  718.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 56
  719.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 57
  720.    {"vpbroadcastd",0xA0, 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 58. Link to vpbroadcastd
  721.    {"vpbroadcastq",0xA1, 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 59. Link to vpbroadcastq
  722.    {0,           0x84  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F 38 5A. Link to broadcast instructions
  723.    {"vbroadcasti64x4",0x80,0xC29200,0x12, 0x1604, 0x2504, 0     , 0     , 0x20  , 0x1013, 0     , 0x100 },    // 0F 38 5B
  724.    {"vpadcd",    0x80  , 0x4A8200,0x19  , 0x1603, 0x95  , 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 5C
  725.    {"vpaddsetcd",0x80  , 0x4A8200,0x19  , 0x1603, 0x95  , 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 5D
  726.    {"vpsbbd",    0x80  , 0x4A8200,0x19  , 0x1603, 0x95  , 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 5E
  727.    {"vpsubsetbd",0x80  , 0x4A8200,0x19  , 0x1603, 0x95  , 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 5F
  728. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  729.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 60
  730.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 61
  731.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 62
  732.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 63
  733.    {"vpblendm",  0x20  ,0xCAB200, 0x19,   0x1209, 0x1209, 0x209 , 0     , 0x21  , 0x1406, 0     , 0x001 },    // 0F 38 64 (alignment required only in Knights Corner)
  734.    {"vblendmp",  0x80  ,0xCA9200, 0x19,   0x124F, 0x124F, 0x24F , 0     , 0x21  , 0x1404, 0     , 0x101 },    // 0F 38 65
  735.    {"vpblendm",  0x20  ,0x8AC200, 0x19,   0x1209, 0x1209, 0x209 , 0     , 0x21  , 0x1406, 0     , 0x001 },    // 0F 38 66
  736.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 67
  737.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 68
  738.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 69
  739.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 6A
  740.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 6B
  741.    {"vpsubrd",   0x80  , 0x4A8200,0x19  , 0x1603, 0x95  , 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 6C
  742.    {"vsubrp",    0x80  ,0x4A9200, 0x19,   0x164F, 0x164F, 0x64F , 0     , 0     , 0x1304, 0     , 0x101 },    // 0F 38 6D
  743.    {"vpsbbrd",   0x80  , 0x4A8200,0x19  , 0x1603, 0x95  , 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 6E
  744.    {"vpsubrsetbd",0x80 , 0x4A8200,0x19  , 0x1603, 0x95  , 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 6F
  745. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  746.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 70
  747.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 71
  748.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 72
  749.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 73
  750.    {"vpcmpltd",  0x80  ,0x4B8200, 0x19  , 0x95  , 0x1603, 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 74
  751.    {"vpermi2" ,  0x23  ,0x8EC200, 0x19,   0x1209, 0x1209, 0x209 , 0     , 0x20  , 0     , 0     , 1     },    // 0F 38 75 (instruction set avx512vbmi for byte version)
  752.    {"vpermi2",   0x20  ,0x8AB200, 0x19,   0x1609, 0x1609, 0x0609, 0     , 0x31  , 0     , 0     , 0x1   },    // 0F 38 76
  753.    {"vpermi2p",  0x20  ,0x8A9200, 0x19,   0x164F, 0x164F, 0x064F, 0     , 0x31  , 0     , 0     , 0x1   },    // 0F 38 77
  754.    {"vpbroadcastb",0x9E, 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 78. Link to vpbroadcastb
  755.    {"vpbroadcastw",0x9F, 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 38 79. Link to vpbroadcastw
  756.    {"vpbroadcastb",0x20,0x828200, 0x12,   0x1201, 0x1001, 0     , 0     , 0x20  , 0     , 0     , 0     },    // 0F 38 7A
  757.    {"vpbroadcastw",0x20,0x828200, 0x12,   0x1202, 0x1002, 0     , 0     , 0x20  , 0     , 0     , 0     },    // 0F 38 7B
  758.    {"vpbroadcast",0x20 ,0x82B200, 0x12,   0x1209, 0x1009, 0     , 0     , 0x20  , 0     , 0     , 0x1   },    // 0F 38 7C
  759.    {"vpermt2" ,  0x20  ,0x8EC200, 0x19,   0x1209, 0x1209, 0x209 , 0     , 0x20  , 0     , 0     , 1     },    // 0F 38 7D (instruction set avx512vbmi for byte version)
  760.    {"vpermt2",   0x20  ,0x8AB200, 0x19,   0x1209, 0x1209, 0x209 , 0     , 0x21  , 0     , 0     , 0x1   },    // 0F 38 7E
  761.    {"vpermt2p",  0x20  ,0x8A9200, 0x19,   0x164F, 0x164F, 0x064F, 0     , 0x21  , 0     , 0     , 0x1   },    // 0F 38 7F
  762. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  763.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 80
  764.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 81
  765.    {"invpcid",   0x81D , 0x9200 , 0x12  , 0x1009, 0x2406, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 82
  766.    {"vpmultishiftqb",0x23,0x8E9200,0x19 , 0x1204, 0x1204, 0x204 , 0     , 0x21  , 0     , 0     , 0     },    // 0F 38 83
  767.    {"vscaleps",  0x80  ,0x4B8200, 0x19  , 0x164B, 0x164B, 0x603 , 0     , 0     , 0x1306, 0     , 0x100 },    // 0F 38 84
  768.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 85
  769.    {"vpmulhud",  0x80  ,0x4A8200, 0x19  , 0x1603, 0x1603, 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 86
  770.    {"vpmulhd",   0x80  ,0x4A8200, 0x19  , 0x1603, 0x1603, 0x603 , 0     , 0     , 0x1406, 0     , 0x100 },    // 0F 38 87
  771.    {"vexpandp",  0x20  ,0x801200, 0x12  , 0x164F, 0x064F, 0     , 0     , 0x1030, 0     , 0     , 1     },    // 0F 38 88
  772.    {"vpexpand",  0x20  ,0x83B200, 0x12  , 0x1209, 0x0209, 0     , 0     , 0x30  , 0     , 0     , 1     },    // 0F 38 89
  773.    {"vcompressp",0x20  ,0x809200, 0x13,   0x024F, 0x124F, 0     , 0     , 0x1030, 0     , 0     , 1     },    // 0F 38 8A
  774.    {"vpcompress",0x20  ,0x80B200, 0x13,   0x0209, 0x1209, 0     , 0     , 0x1030, 0     , 0     , 1     },    // 0F 38 8B
  775.    {"vpmaskmov", 0x1C  , 0xFB200, 0x19,   0x1209, 0x1209, 0x2209, 0     , 0     , 0     , 0     , 1     },    // 0F 38 8C
  776.    {"vperm" ,    0x23  ,0x8EC200, 0x19,   0x1209, 0x1209, 0x209 , 0     , 0x20  , 0     , 0     , 1     },    // 0F 38 8D
  777.    {"vpmaskmov", 0x1C  , 0xFB200, 0x1A,   0x2209, 0x1209, 0x1209, 0     , 0     , 0     , 0     , 1     },    // 0F 38 8E
  778.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 8F
  779. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  780.    {0,           0x102 , 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 90. link to vpgatherd/q
  781.    {0,           0x94  , 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 91. Link to vpgatherqd/q
  782.    {0,           0xB6  , 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 92. Link to vpgatherdps/pd
  783.    {0,           0xE0  , 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 38 93. Link to vpgatherqps/pd
  784.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 94
  785.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 95
  786.    {"vfmaddsub132p",0x1A,0x8F9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0     , 0     , 0x1   },    // 0F 38 96
  787.    {"vfmsubadd132p",0x1A,0x8F9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0     , 0     , 0x1   },    // 0F 38 97
  788.    {"vfmadd132p",0x1A  ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 98
  789.    {"vfmadd132s",0x1A  ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 99
  790.    {"vfmsub132p",0x1A  ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 9A
  791.    {"vfmsub132s",0x1A  ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 9B
  792.    {"vfnmadd132p",0x1A ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 9C
  793.    {"vfnmadd132s",0x1A ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 9D
  794.    {"vfnmsub132p",0x1A ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 9E
  795.    {"vfnmsub132s",0x1A ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 9F
  796. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  797.    {0,           0xD7  , 0       ,0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 38 A0. Link to vpscatterdd
  798.    {0,           0xD8  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 38 A1. Link to vpscatterqd
  799.    {0,           0x100 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 38 A2. Link to vpscatterdps
  800.    {0,           0x101 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 38 A3. Link to vpscatterqps
  801.    {"vfmadd233ps",0x80 ,0x4F8200, 0x19  , 0x124B, 0x124B, 0x24B , 0     , 0     , 0x1316, 0     , 0x100 },    // 0F 38 A4
  802.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 A5
  803.    {"vfmaddsub213p",0x1A,0x8F9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0     , 0     , 0x1   },    // 0F 38 A6
  804.    {"vfmsubadd213p",0x1A,0x8F9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0     , 0     , 0x1   },    // 0F 38 A7
  805.    {"vfmadd213p",0x1A  ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 A8
  806.    {"vfmadd213s",0x1A  ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 A9
  807.    {"vfmsub213p",0x1A  ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 AA
  808.    {"vfmsub213s",0x1A  ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 AB
  809.    {"vfnmadd213p",0x1A ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 AC
  810.    {"vfnmadd213s",0x1A ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 AD
  811.    {"vfnmsub213p",0x1A ,0xCF9200, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 AE
  812.    {"vfnmsub213s",0x1A ,0x8B9200, 0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 AF
  813.  
  814. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  815.    {"(reserved)",0x00  ,0x4D2E00, 0x401E, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 B0
  816.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 B1
  817.    {"(reserved)",0x00  ,0x4D2E00, 0x401E, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 B2
  818.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 B3
  819.    {0,           0x128 , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 B4. Link to vpmadd52luq
  820.    {0,           0x129 , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 B5. Link to vpmadd52huq
  821.    {"vfmaddsub231p",0x1A,0x8F9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0     , 0     , 0x1   },    // 0F 38 B6
  822.    {"vfmsubadd231p",0x1A,0x8F9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0     , 0     , 0x1   },    // 0F 38 B7
  823.    {"vfmadd231p",   0x1A,0xCF9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 B8
  824.    {"vfmadd231s",   0x1A,0x8B9200,0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 B9
  825.    {"vfmsub231p",   0x1A,0xCF9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 BA
  826.    {"vfmsub231s",   0x1A,0x8B9200,0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 BB
  827.    {"vfnmadd231p",  0x1A,0xCF9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 BC
  828.    {"vfnmadd231s",  0x1A,0x8B9200,0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 BD
  829.    {"vfnmsub231p",  0x1A,0xCF9200,0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x37  , 0x1304, 0     , 0x1   },    // 0F 38 BE
  830.    {"vfnmsub231s",  0x1A,0x8B9200,0x19  , 0x144F, 0x144F, 0x04F , 0     , 0x36  , 0     , 0     , 0x1   },    // 0F 38 BF
  831. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  832.    {"(reserved)",0x0  ,0x4D2E00 , 0x401E, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 C0
  833.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 C1
  834.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 C2
  835.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 C3
  836.    {"vpconflict",0x21  ,0x80B200, 0x12  , 0x1209, 0x0209, 0     , 0     , 0x31  , 0     , 0     , 0x1   },    // 0F 38 C4
  837.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 C5
  838.    {0,           0xB7  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 38 C6. Link to vgatherpf0dps
  839.    {0,           0x10F , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 38 C7. Link to vgatherpf0qps
  840.    {0,           0x107 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 C8
  841.    {0,           0x108 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 C9
  842.    {0,           0x109 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 CA
  843.    {0,           0x10A , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 CB
  844.    {0,           0x10B , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 CC
  845.    {0,           0x10C , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x11  , 0     },    // 0F 38 CD
  846.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 CE
  847.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 CF
  848. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  849.    {0,           0xBE  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 D0. Link to vloadunpackld
  850.    {0,           0xBF  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 D1. Link to vloadunpacklps
  851.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D2
  852.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D3
  853.    {0,           0xC0  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 D4. Link to vloadunpackhd
  854.    {0,           0xC1  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 D5. Link to vloadunpackhps
  855.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D6
  856.    {"(reserved)",0x00  ,0x4D2E00, 0x4012, 0x609 , 0x609 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D7
  857.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D8
  858.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D9
  859.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 DA
  860.    {"aesimc",    0x17  ,0x98200 , 0x19,   0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 DB
  861.    {"aesenc",    0x17  ,0x98200 , 0x19,   0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 DC
  862.    {"aesenclast",0x17  ,0x98200 , 0x19,   0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 DD
  863.    {"aesdec",    0x17  ,0x98200 , 0x19,   0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 DE
  864.    {"aesdeclast",0x17  ,0x98200 , 0x19,   0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 DF
  865. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  866.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E0
  867.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E1
  868.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E2
  869.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E3
  870.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E4
  871.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E5
  872.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E6
  873.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E7
  874.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E8
  875.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 E9
  876.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 EA
  877.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 EB
  878.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 EC
  879.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 ED
  880.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 EE
  881.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 EF
  882. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  883.    {"crc32",     0x16  ,0x19900 , 0x12  , 0x1009, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 F0
  884.    {"crc32",     0x07  ,0x19900 , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 0F 38 F1. Link to crc32 16/32/64 bit
  885.    {"andn",      0x1D  ,0xB1000 , 0x19  , 0x1009, 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     },    // 0F 38 F2
  886.    {"blsi",      0xA2  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 0F 38 F3. Link to blsi etc. by reg bit
  887.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 F4
  888.    {"bzhi",      0xA3  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 F5. Link to bzhi, pdep, pext
  889.    {"mulx",      0xD0  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 F6. Link to mulx, adcx, adox
  890.    {"bextr",     0xAD  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 38 F7. Link to bextr etc.
  891.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 F8
  892.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 F9
  893.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 FA
  894.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 FB
  895.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 FC
  896.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 FD
  897.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 FE
  898.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 38 FF
  899.  
  900. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 39
  901. // Reserved by Intel for future extensions, but never used
  902. SOpcodeDef OpcodeMap3[] = {
  903. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  904.    {0,           0     , 0      , 0x2012, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 39 00
  905.  
  906. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 3A
  907. // or VEX encoded with mmmm = 3
  908. // Indexed by third opcode byte
  909. SOpcodeDef OpcodeMap4[] = {
  910. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  911.    {"vpermq",    0x1C  ,0x97B200, 0x52  , 0x1204, 0x204 , 0x31  , 0     , 0x31  , 0     , 0     , 0     },    // 0F 3A 00
  912.    {"vpermpd",   0x1C  ,0x97B200, 0x52  , 0x124C, 0x24C , 0x31  , 0     , 0x31  , 0     , 0     , 0     },    // 0F 3A 01
  913.    {"vpblendd",  0x1C  , 0xF8200, 0x59,   0x1203, 0x1203, 0x203 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 3A 02
  914.    {"valign",    0x20  ,0xCAB200, 0x59,   0x1209, 0x1209, 0x209 , 0x31  , 0x21  , 0x1000, 0     , 0x101 },    // 0F 3A 03
  915.    {"vpermilps", 0x19  ,0x8F8200, 0x52,   0x124B, 0x24B , 0x31  , 0     , 0x31  , 0     , 0     , 0     },    // 0F 3A 04
  916.    {"vpermilpd", 0x19  ,0x8FA200, 0x52,   0x124C, 0x24C , 0x31  , 0     , 0x31  , 0     , 0     , 0     },    // 0F 3A 05
  917.    {"vperm2f128",0x19  ,0x1F8200, 0x59,   0x1550, 0x1550, 0x550 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 3A 06
  918.    {"vpermf32x4",0x80  ,0x438200, 0x52,   0x124B, 0x24B , 0x31  , 0     , 0     , 0x1000, 0     , 0x100 },    // 0F 3A 07
  919.    {0,           0xF9  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 08. Also in AMD instruction set  
  920.    {0,           0xFA  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 09. Also in AMD instruction set
  921.    {0,           0xFB  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 0A. Also in AMD instruction set
  922.    {0,           0xFC  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 0B. Also in AMD instruction set
  923.    {"blendps",   0x15  , 0xD8200, 0x59  , 0x124B, 0x124B, 0x24B , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 0C
  924.    {"blendpd",   0x15  , 0xD8200, 0x59  , 0x124C, 0x124C, 0x24C , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 0D
  925.    {"pblendw",   0x15  , 0xD8200, 0x59  , 0x1202, 0x1202, 0x202 , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 0E
  926.    {"palignr",   0x14  ,0x8D2200, 0x59  , 0x1201, 0x1201, 0x201 , 0x31  , 0x20  , 0     , 0     , 0x2   },    // 0F 3A 0F
  927. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  928.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 10
  929.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 11
  930.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 12
  931.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 13  
  932.    {0,           0x61  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 3A 14. Link to pextrb
  933.    {0,           0x62  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 3A 15. Link to pextrw
  934.    {0,           0x63  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 0F 3A 16. Link to pextrd, pextrq
  935.    {"extractps" ,0x15  ,0x819200, 0x53  , 0x3   , 0x144B, 0x31  , 0     , 0     , 0     , 0     , 0x2   },    // 0F 3A 17
  936.    {0           ,0x122 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 18
  937.    {0           ,0x11E , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 19. Link to vextractf128
  938.    {0           ,0x124 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 3A 1A. Link to vinsertf64x4
  939.    {0,           0xDE  , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 3A 1B. Link to vextractf64x4
  940.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 1C
  941. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  942.    {"vcvtps2ph", 0x1D  ,0x878200, 0x53,   0xF4A , 0x250 , 0x31  , 0     , 0x22  , 0     , 0     , 0     },    // 0F 3A 1D
  943.    {0,           0x114 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     },    // 0F 3A 1E. link to vpcmpud
  944.    {0,           0x115 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     },    // 0F 3A 1F. link to vpcmpd
  945. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  946.    {0,           0xA5  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 0F 3A 20. Link to pinsrb
  947.    {"insertps",  0x15  ,0x898200, 0x59  , 0x144B, 0x144B, 0x4B  , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 21
  948.    {"pinsrd/q",  0x75  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 0F 3A 22. Link to pinsrd/q
  949.    {0,           0x8F  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 3A 23. Link to vshuff32x4
  950.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 24
  951.    {"vpternlog", 0x20  ,0x88B200, 0x59  , 0x1209, 0x1209, 0x0209, 0x31  , 0x31  , 0     , 0     , 0x1   },    // 0F 3A 25
  952.    {"vgetmantp", 0x20  , 0xC29200,0x52  , 0x124F, 0x24F , 0x31  , 0     , 0x33  , 0x1204, 0     , 0x001 },    // 0F 3A 26
  953.    {"vgetmants", 0x20  , 0xCA9200,0x59  , 0x144F, 0x24F , 0x04F , 0x31  , 0x32  , 0x1204, 0     , 0x001 },    // 0F 3A 27
  954.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 28
  955.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 29
  956.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 2A
  957.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 2B
  958.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 2C
  959.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 2D
  960.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 2E
  961.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 2F
  962. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  963.    {"kshiftr",   0x20  , 0x3C200, 0x52  , 0x1095, 0x1095, 0x11  , 0     , 0     , 0     , 0     , 1     },    // 0F 3A 30
  964.    {"kshiftr",   0x20  , 0x3B200, 0x52  , 0x1095, 0x1095, 0x11  , 0     , 0     , 0     , 0     , 1     },    // 0F 3A 30
  965.    {"kshiftl",   0x20  , 0x3C200, 0x52  , 0x1095, 0x1095, 0x11  , 0     , 0     , 0     , 0     , 1     },    // 0F 3A 32
  966.    {"kshiftl",   0x20  , 0x3B200, 0x52  , 0x1095, 0x1095, 0x11  , 0     , 0     , 0     , 0     , 1     },    // 0F 3A 33
  967.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 34
  968.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 35
  969.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 36
  970.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 37
  971.    {0,           0x125 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 38. Link to vinserti128
  972.    {0,           0x120 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 39. Link to vextracti128
  973.    {0,           0x127 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 3A 3A. Link to vinserti64x4
  974.    {0,           0xDF  , 0      , 0x53 , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 3A 3B. Link to vextracti64x4
  975.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 3C
  976.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 3D
  977.    {0,           0xC6  , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 0F 3A 3E. Link to kextract and vpcmp
  978.    {0,           0x113 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     },    // 0F 3A 3F. Link to vpcmp
  979.    //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  980.    {"dpps",      0x15  , 0xD8200, 0x59  , 0x124B, 0x124B, 0x24B , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 40
  981.    {"dppd",      0x15  , 0x98200, 0x59  , 0x144C, 0x144C, 0x44C , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 41 (No ymm version)
  982.    {0,           0x11D , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0x2   },    // 0F 3A 42. Link to mpsadbw
  983.    {0,           0x90  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 3A 43. Link to vshufi32x4
  984.    {"pclmulqdq", 0x18  , 0x98200, 0x59,   0x1404, 0x1404, 0x404 , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 44
  985.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 45
  986.    {"vperm2i128",0x1C  , 0x1FB200,0x59  , 0x1506, 0x1506, 0x506 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 3A 46
  987.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 47
  988.    {"vpermil2ps",0x1005, 0xFF200, 0x5C,   0x124B, 0x124B, 0x24B , 0x24B , 0     , 0x31  , 0     , 0     },    // 0F 3A 48 AMD XOP
  989.    {"vpermil2pd",0x1005, 0xFF200, 0x5C,   0x124C, 0x124C, 0x24C , 0x24C , 0     , 0x31  , 0     , 0     },    // 0F 3A 49 AMD XOP
  990.    {"vblendvps", 0x19  , 0xF8200, 0x5C  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 3A 4A
  991.    {"vblendvpd", 0x19  , 0xF8200, 0x5C  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 3A 4B
  992.    {"vpblendvb", 0x19  , 0xF8200, 0x5C  , 0x1201, 0x1201, 0x201 , 0x201 , 0     , 0     , 0     , 0     },    // 0F 3A 4C
  993.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 4D
  994.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 4E
  995.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 4F
  996. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  997.    {"vrangep",   0x20  ,0x8EB200, 0x59,   0x124F, 0x124F, 0x24F , 0x31  , 0x23  , 0     , 0     , 1     },    // 0F 3A 50
  998.    {"vranges",   0x20  ,0x8EB200, 0x59,   0x144F, 0x144F, 0x44F , 0x31  , 0x33  , 0     , 0     , 1     },    // 0F 3A 50
  999.    {"vrndfxpntp",0x80  , 0x4B9200,0x52  , 0x124F, 0x24F , 0x11  , 0     , 0     , 0x1204, 0     , 0x101 },    // 0F 3A 52
  1000.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 53
  1001.    {"vfixupimmp",0x20  ,0x881200, 0x59  , 0x124F, 0x124F, 0x024F, 0x31  , 0x33  , 0     , 0     , 1     },    // 0F 3A 54
  1002.    {"vfixupimms",0x20  ,0x8C1200, 0x59  , 0x104F, 0x104F, 0x004F, 0x31  , 0x32  , 0     , 0     , 1     },    // 0F 3A 55
  1003.    {"vreducep",  0x20  ,0x86B200, 0x52  , 0x124F, 0x24f , 0     , 0x31  , 0x23  , 0     , 0     , 1     },    // 0F 3A 56
  1004.    {"vreduces",  0x20  ,0x8EB200, 0x52  , 0x144F, 0x44f , 0     , 0x31  , 0x22  , 0     , 0     , 1     },    // 0F 3A 57
  1005.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 58
  1006.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 59
  1007.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 5A
  1008.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 5B
  1009.    {"vfmaddsubps",0x1006,0xFF200,0x5C   , 0x24B , 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 3A 5C
  1010.    {"vfmaddsubpd",0x1006,0xFF200,0x5C   , 0x24C , 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 3A 5D
  1011.    {"vfmsubaddps",0x1006,0xFF200,0x5C   , 0x24B , 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 3A 5E
  1012.    {"vfmsubaddpd",0x1006,0xFF200,0x5C   , 0x24C , 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 3A 5F
  1013. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1014.    {"pcmpestrm", 0x16  , 0x18200, 0x52  , 0x1401, 0x451 , 0x31  , 0     , 0     , 0     , 0     , 0x202 },    // 0F 3A 60
  1015.    {"pcmpestri", 0x16  , 0x18200, 0x52  , 0x1401, 0x451 , 0x31  , 0     , 0     , 0     , 0     , 0x202 },    // 0F 3A 61
  1016.    {"pcmpistrm", 0x16  , 0x18200, 0x52  , 0x1401, 0x451 , 0x31  , 0     , 0     , 0     , 0     , 0x202 },    // 0F 3A 62
  1017.    {"pcmpistri", 0x16  , 0x18200, 0x52  , 0x1401, 0x451 , 0x31  , 0     , 0     , 0     , 0     , 0x202 },    // 0F 3A 63
  1018.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 64
  1019.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 65
  1020.    {"vfpclassp", 0x20  ,0x82B200, 0x52  , 0x95  , 0x24F , 0x31  , 0     , 0x10  , 0     , 0     , 1     },    // 0F 3A 66
  1021.    {"vfpclasss", 0x20  ,0x82B200, 0x52  , 0x95  , 0x44F , 0x31  , 0     , 0x10  , 0     , 0     , 1     },    // 0F 3A 67
  1022. // 4-operand FMA instructions. First specified by Intel, then Intel changed their plans, now supported by AMD
  1023.    {"vfmaddps",  0x1006,0xFF200 , 0x5C  , 0x24B , 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 3A 68
  1024.    {"vfmaddpd",  0x1006,0xFF200 , 0x5C  , 0x24C , 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 3A 69
  1025.    {"vfmaddss",  0x1006,0xBF200 , 0x5C  , 0x44B , 0x44B , 0x44B , 0x44B , 0     , 0     , 0     , 0     },    // 0F 3A 6A
  1026.    {"vfmaddsd",  0x1006,0xBF200 , 0x5C  , 0x44C , 0x44C , 0x44C , 0x44C , 0     , 0     , 0     , 0     },    // 0F 3A 6B
  1027.    {"vfmsubps",  0x1006,0xFF200 , 0x5C  , 0x24B , 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 3A 6C
  1028.    {"vfmsubpd",  0x1006,0xFF200 , 0x5C  , 0x24C , 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 3A 6D
  1029.    {"vfmsubss",  0x1006,0xBF200 , 0x5C  , 0x44B , 0x44B , 0x44B , 0x44B , 0     , 0     , 0     , 0     },    // 0F 3A 6E
  1030.    {"vfmsubsd",  0x1006,0xBF200 , 0x5C  , 0x44C , 0x44C , 0x44C , 0x44C , 0     , 0     , 0     , 0     },    // 0F 3A 6F
  1031. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1032.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 70
  1033.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 71
  1034.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 72
  1035.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 73
  1036.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 74
  1037.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 75
  1038.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 76
  1039.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 77
  1040.    {"vfnmaddps", 0x1006,0xFF200 , 0x5C  , 0x24B , 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 3A 78
  1041.    {"vfnmaddpd", 0x1006,0xFF200 , 0x5C  , 0x24C , 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 3A 79
  1042.    {"vfnmaddss", 0x1006,0xBF200 , 0x5C  , 0x44B , 0x44B , 0x44B , 0x44B , 0     , 0     , 0     , 0     },    // 0F 3A 7A
  1043.    {"vfnmaddsd", 0x1006,0xBF200 , 0x5C  , 0x44C , 0x44C , 0x44C , 0x44C , 0     , 0     , 0     , 0     },    // 0F 3A 7B
  1044.    {"vfnmsubps", 0x1006,0xFF200 , 0x5C  , 0x24B , 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 3A 7C
  1045.    {"vfnmsubpd", 0x1006,0xFF200 , 0x5C  , 0x24C , 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 3A 7D
  1046.    {"vfnmsubss", 0x1006,0xBF200 , 0x5C  , 0x44B , 0x44B , 0x44B , 0x44B , 0     , 0     , 0     , 0     },    // 0F 3A 7E
  1047.    {"vfnmsubsd", 0x1006,0xBF200 , 0x5C  , 0x44C , 0x44C , 0x44C , 0x44C , 0     , 0     , 0     , 0     },    // 0F 3A 7F
  1048. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1049.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 80
  1050.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 81
  1051.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 82
  1052.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 83
  1053.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 84
  1054.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 85
  1055.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 86
  1056.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 87
  1057.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 88
  1058.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 89
  1059.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 8A
  1060.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 8B
  1061.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 8C
  1062.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 8D
  1063.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 8E
  1064.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 8F
  1065. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1066.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 90
  1067.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 91
  1068.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 92
  1069.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 93
  1070.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 94
  1071.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 95
  1072.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 96
  1073.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 97
  1074.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 98
  1075.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 99
  1076.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 9A
  1077.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 9B
  1078.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 9C
  1079.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 9D
  1080.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 9E
  1081.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 9F
  1082. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1083.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A0
  1084.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A1
  1085.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A2
  1086.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A3
  1087.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A4
  1088.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A5
  1089.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A6
  1090.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A7
  1091.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A8
  1092.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A A9
  1093.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A AA
  1094.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A AB
  1095.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A AC
  1096.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A AD
  1097.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A AE
  1098.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A AF
  1099. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1100.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B0
  1101.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B1
  1102.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B2
  1103.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B3
  1104.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B4
  1105.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B5
  1106.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B6
  1107.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B7
  1108.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B8
  1109.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A B9
  1110.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A BA
  1111.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A BB
  1112.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A BC
  1113.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A BD
  1114.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A BE
  1115.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A BF
  1116. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1117.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C0
  1118.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C1
  1119.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C2
  1120.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C3
  1121.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C4
  1122.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C5
  1123.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C6
  1124.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C7
  1125.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C8
  1126.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A C9
  1127.    {0,           0xB4  , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 3A CA. Link to vcvtfxpntpd2udq etc
  1128.    {0,           0xB5  , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 3A CB. Link to vcvtfxpntdq2ps etc
  1129.    {"sha1rnds4", 0x22  , 0      , 0x52  , 0x1403, 0x0403, 0x31  , 0     , 0     , 0     , 0     , 0     },    // 0F 3A CC
  1130.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A CD
  1131.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A CE
  1132.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A CF
  1133. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1134.    {"(reserved)",0x00  ,0x4D2E00, 0x4052, 0x609 , 0x609 , 0x31  , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D0
  1135.    {"(reserved)",0x00  ,0x4D2E00, 0x4052, 0x609 , 0x609 , 0x31  , 0     , 0     , 0     , 0     , 0     },    // 0F 38 D1
  1136.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D2
  1137.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D3
  1138.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D4
  1139.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D5
  1140.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D6
  1141.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D7
  1142.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D8
  1143.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A D9
  1144.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A DA
  1145.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A DB
  1146.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A DC
  1147.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A DD
  1148.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A DE
  1149. {"aeskeygenassist",0x17,0x18200 , 0x52,   0x1101, 0x101 , 0x31  , 0     , 0     , 0     , 0     , 0x2   },    // 0F 3A DF
  1150. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1151.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E0
  1152.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E1
  1153.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E2
  1154.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E3
  1155.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E4
  1156.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E5
  1157. {"vcvtfxpntpd2dq",0x80 ,0x42B800, 0x52,   0x1603, 0x64C , 0x31  , 0     , 0     , 0x1205, 0     , 0x100 },    // 0F 3A E6
  1158.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E7
  1159.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E8
  1160.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A E9
  1161.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A EA
  1162.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A EB
  1163.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A EC
  1164.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A ED
  1165.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A EE
  1166.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A EF
  1167. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1168.    {0,           0xA4  , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F 3A F0. Link to rorx
  1169.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F1
  1170.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F2
  1171.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F3
  1172.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F4
  1173.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F5
  1174.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F6
  1175.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F7
  1176.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F8
  1177.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A F9
  1178.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A FA
  1179.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A FB
  1180.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A FC
  1181.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A FD
  1182.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 3A FE
  1183.    {0,           0     , 0      , 0x2052, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 3A FF
  1184.  
  1185.  
  1186. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 3B
  1187. // Reserved by Intel for future extensions, but never used
  1188. SOpcodeDef OpcodeMap5[1] = {
  1189. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1190.    {0,           0     , 0      , 0x2000, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 3B 00
  1191.  
  1192.  
  1193. // Tertiary opcode map for AMD 3DNow instructions (obsolete). First two bytes = 0F 0F
  1194. // Indexed by immediate byte following operands
  1195. SOpcodeDef OpcodeMap6[] = {
  1196. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1197.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 00
  1198.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 01
  1199.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 02
  1200.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 03
  1201.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 04
  1202.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 05
  1203.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 06
  1204.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 07
  1205.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 08
  1206.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 09
  1207.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 0A
  1208.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 0B
  1209.    {"PFI2FW",    0x1001, 0      , 0x52  , 0x134B, 0x302 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 0C
  1210.    {"PI2FD",     0x1001, 0      , 0x52  , 0x134B, 0x303 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 0D
  1211.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 0E
  1212.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 0F
  1213. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1214.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 10
  1215.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 11
  1216.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 12
  1217.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 13
  1218.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 14
  1219.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 15
  1220.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 16
  1221.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 17
  1222.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 18
  1223.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 19
  1224.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 1A
  1225.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 1B
  1226.    {"PF2IW",     0x1002, 0      , 0x52  , 0x1302, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 1C
  1227.    {"PF2ID",     0x1001, 0      , 0x52  , 0x1303, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 1D
  1228.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 1E
  1229.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 1F
  1230. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1231.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 20
  1232.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 21
  1233.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 22
  1234.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 23
  1235.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 24
  1236.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 25
  1237.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 26
  1238.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 27
  1239.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 28
  1240.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 29
  1241.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 2A
  1242.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 2B
  1243.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 2C
  1244.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 2D
  1245.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 2E
  1246.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 2F
  1247. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1248.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 30
  1249.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 31
  1250.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 32
  1251.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 33
  1252.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 34
  1253.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 35
  1254.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 36
  1255.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 37
  1256.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 38
  1257.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 39
  1258.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 3A
  1259.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 3B
  1260.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 3C
  1261.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 3D
  1262.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 3E
  1263.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 3F
  1264. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1265.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 40
  1266.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 41
  1267.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 42
  1268.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 43
  1269.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 44
  1270.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 45
  1271.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 46
  1272.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 47
  1273.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 48
  1274.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 49
  1275.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 4A
  1276.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 4B
  1277.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 4C
  1278.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 4D
  1279.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 4E
  1280.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 4F
  1281. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1282.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 50
  1283.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 51
  1284.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 52
  1285.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 53
  1286.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 54
  1287.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 55
  1288.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 56
  1289.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 57
  1290.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 58
  1291.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 59
  1292.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 5A
  1293.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 5B
  1294.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 5C
  1295.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 5D
  1296.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 5E
  1297.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 5F
  1298. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1299.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 60
  1300.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 61
  1301.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 62
  1302.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 63
  1303.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 64
  1304.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 65
  1305.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 66
  1306.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 67
  1307.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 68
  1308.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 69
  1309.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 6A
  1310.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 6B
  1311.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 6C
  1312.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 6D
  1313.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 6E
  1314.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 6F
  1315. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1316.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 70
  1317.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 71
  1318.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 72
  1319.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 73
  1320.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 74
  1321.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 75
  1322.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 76
  1323.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 77
  1324.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 78
  1325.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 79
  1326.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 7A
  1327.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 7B
  1328.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 7C
  1329.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 7D
  1330.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 7E
  1331.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 7F
  1332. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1333.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 80
  1334.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 81
  1335.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 82
  1336.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 83
  1337.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 84
  1338.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 85
  1339.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 86
  1340.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 87
  1341.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 88
  1342.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 89
  1343.    {"PFNACC",    0x1002, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 8A
  1344.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 8B
  1345.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 8C
  1346.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 8D
  1347.    {"PFPNACC",   0x1002, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 8E
  1348.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 8F
  1349. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1350.    {"PFCMPGE",   0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 90
  1351.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 91
  1352.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 92
  1353.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 93
  1354.    {"PFMIN",     0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 94
  1355.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 95
  1356.    {"PFRCP",     0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 96
  1357.    {"PFRSQRT",   0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 97
  1358.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 98
  1359.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 99
  1360.    {"PFSUB",     0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 9A
  1361.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 9B
  1362.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 9C
  1363.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 9D
  1364.    {"PFADD",     0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 9E
  1365.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op 9F
  1366. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1367.    {"PFCMPGT",   0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A0
  1368.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A1
  1369.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A2
  1370.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A3
  1371.    {"PFMAX",     0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A4
  1372.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A5
  1373.    {"PFRCPIT1",  0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A6
  1374.    {"PFRSQIT1",  0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A7
  1375.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A8
  1376.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op A9
  1377.    {"PFSUBR",    0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op AA
  1378.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op AB
  1379.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op AC
  1380.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op AD
  1381.    {"PFACC",     0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op AE
  1382.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op AF
  1383. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1384.    {"PFCMPEQ",   0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B0
  1385.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B1
  1386.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B2
  1387.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B3
  1388.    {"PFMUL",     0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B4
  1389.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B5
  1390.    {"PFRCPIT2",  0x1001, 0      , 0x52  , 0x134B, 0x34B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B6
  1391.    {"PMULHRW",   0x1001, 0      , 0x52  , 0x1302, 0x302 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B7
  1392.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B8
  1393.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op B9
  1394.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op BA
  1395.    {"PSWAPD",    0x1002, 0      , 0x52  , 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op BB
  1396.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op BC
  1397.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op BD
  1398.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op BE
  1399.    {"PAVGUSB",   0x1001, 0      , 0x52  , 0x1301, 0x301 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0F op BF
  1400. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1401.    {0,           0x1001, 0      , 0x2052, 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 0F op C0
  1402.  
  1403. // Opcode map for crc32. Opcode byte = 0F 38 F1
  1404. // Indexed by operand size (16, 32, 64)
  1405. SOpcodeDef OpcodeMap7[3] = {
  1406. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1407.    {"crc32",     0x16  ,0x19900 , 0x12  , 0x1003, 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 F1
  1408.    {"crc32",     0x16  ,0x19900 , 0x12  , 0x1003, 0x3   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 F1
  1409.    {"crc32",     0x16  ,0x19900 , 0x12  , 0x1004, 0x4   , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 38 F1
  1410.  
  1411. // Secondary opcode map for x87 f.p. instructions. Opcode D8
  1412. // Indexed by reg bits and mod == 3
  1413. SOpcodeDef OpcodeMap8[16] = {
  1414. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1415.    {"fadd",      0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // fadd m32
  1416.    {"fmul",      0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // fmul m32
  1417.    {"fcom",      0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcom m32
  1418.    {"fcomp",     0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcomp m32
  1419.    {"fsub",      0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // fsub m32
  1420.    {"fsubr",     0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // fsubr m32
  1421.    {"fdiv",      0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // fdiv m32
  1422.    {"fdivr",     0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // fdivr m32
  1423.    {"fadd",      0x100 , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fadd st,st(i)
  1424.    {"fmul",      0x100 , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fmul st,st(i)
  1425.    {"fcom",      0x100 , 0      , 0x11  , 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcom st,st(i)
  1426.    {"fcomp",     0x100 , 0      , 0x11  , 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcomp st,st(i)
  1427.    {"fsub",      0x100 , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fsub st,st(i)
  1428.    {"fsubr",     0x100 , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fsubr st,st(i)
  1429.    {"fdiv",      0x100 , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fdiv st,st(i)
  1430.    {"fdivr",     0x100 , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     }};   // fdivr st,st(i)
  1431.  
  1432. // Secondary opcode map for x87 f.p. instructions. Opcode D9
  1433. // Indexed by reg bits and mod == 3
  1434. SOpcodeDef OpcodeMap9[16] = {
  1435. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1436.    {"fld",       0x100 , 0      , 0x11  , 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // fld m32
  1437.    {0,           0     , 0      , 0x4011, 0     , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1438.    {"fst",       0x100 , 0      , 0x11  , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fst m32
  1439.    {"fstp",      0x100 , 0      , 0x11  , 0x2043, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fstp m32
  1440.    {"fldenv",    0x100 , 0      , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // fldenv m
  1441.    {"fldcw",     0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fldcw m16
  1442.    {"fnstenv",   0x100 , 0      , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fnstenv m
  1443.    {"fnstcw",    0x100 , 0      , 0x11  , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fnstcw m16
  1444.    {"fld",       0x100 , 0      , 0x11  , 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fld st(i)
  1445.    {"fxch",      0x100 , 0      , 0x11  , 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fxch st(i)
  1446.    {"fnop",      0x10  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x10 fnop
  1447.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  1448.    {0,           0x11  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x11 fchs etc.
  1449.    {0,           0x12  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x12 fld1 etc.
  1450.    {0,           0x13  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x13 f2xm1 etc.
  1451.    {0,           0x14  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     }};   // Link to tertiary map 0x14 fprem etc.
  1452.  
  1453. // Secondary opcode map for x87 f.p. instructions. Opcode DA
  1454. // Indexed by reg bits and mod == 3
  1455. SOpcodeDef OpcodeMapA[16] = {
  1456. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1457.    {"fiadd",     0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fiadd m32
  1458.    {"fimul",     0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fimul m32
  1459.    {"ficom",     0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0x4   },    // ficom m32
  1460.    {"ficomp",    0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0x4   },    // ficomp m32
  1461.    {"fisub",     0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fisub m32
  1462.    {"fisubr",    0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fisubr m32
  1463.    {"fidiv",     0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fidiv m32
  1464.    {"fidivr",    0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fidivr m32
  1465.    {"fcmovb",    0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovb st,st(i)
  1466.    {"fcmove",    0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovb st,st(i)
  1467.    {"fcmovbe",   0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovbe st,st(i)
  1468.    {"fcmovu",    0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovbe st,st(i)
  1469.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  1470.    {0,           0x15  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x15 fucompp
  1471.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  1472.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     }};   // Illegal
  1473.  
  1474. // Secondary opcode map for x87 f.p. instructions. Opcode DB
  1475. // Indexed by reg bits and mod == 3
  1476. SOpcodeDef OpcodeMapB[16] = {
  1477. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1478.    {"fild",      0x100 , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fild m32
  1479.    {"fisttp",    0x13  , 0      , 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // fisttp m32
  1480.    {"fist",      0x100 , 0      , 0x11  , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fist m32
  1481.    {"fistp",     0x100 , 0      , 0x11  , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fistp m32
  1482.    {0,           0     , 0      , 0x4011, 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1483.    {"fld",       0x100 , 0      , 0x11  , 0     , 0x2045, 0     , 0     , 0     , 0     , 0     , 0     },    // fld m80
  1484.    {0,           0     , 0      , 0x4011, 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1485.    {"fstp",      0x100 , 0      , 0x11  , 0x2045, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fst m80
  1486.    {"fcmovnb",   0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovnb st,st(i)
  1487.    {"fcmovne",   0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovne st,st(i)
  1488.    {"fcmovnbe",  0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovnbe st,st(i)
  1489.    {"fcmovnu",   0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fcmovnu st,st(i)
  1490.    {0,           0x16  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x16 fclex etc.
  1491.    {"fucomi",    0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fucomi st,st(i)
  1492.    {"fcomi",     0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcomi st,st(i)
  1493.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1494.  
  1495. // Secondary opcode map for x87 f.p. instructions. Opcode DC
  1496. // Indexed by reg bits and mod == 3
  1497. SOpcodeDef OpcodeMapC[16] = {
  1498. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1499.    {"fadd",      0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     },    // fadd m64
  1500.    {"fmul",      0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     },    // fmul m64
  1501.    {"fcom",      0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcom m64
  1502.    {"fcomp",     0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcomp m64
  1503.    {"fsub",      0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     },    // fsub m64
  1504.    {"fsubr",     0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     },    // fsubr m64
  1505.    {"fdiv",      0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     },    // fdiv m64
  1506.    {"fdivr",     0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     },    // fdivr m64
  1507.    {"fadd",      0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fadd st(i),st
  1508.    {"fmul",      0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fmul st(i),st
  1509.    {0,           0     , 0      , 0x4011, 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1510.    {0,           0     , 0      , 0x4011, 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1511.    {"fsubr",     0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fsubr st(i),st
  1512.    {"fsub",      0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fsub st(i),st
  1513.    {"fdivr",     0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fdivr st(i),st
  1514.    {"fdiv",      0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     }};   // fdiv st(i),st
  1515.  
  1516. // Secondary opcode map for x87 f.p. instructions. Opcode DD
  1517. // Indexed by reg bits and mod == 3
  1518. SOpcodeDef OpcodeMapD[16] = {
  1519. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1520.    {"fld",       0x100 , 0      , 0x11  , 0     , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     },    // fld m64
  1521.    {"fisttp",    0x13  , 0      , 0x11  , 0x2004, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fisttp m64
  1522.    {"fst",       0x100 , 0      , 0x11  , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fst m64
  1523.    {"fstp",      0x100 , 0      , 0x11  , 0x2044, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fstp m64
  1524.    {"frstor",    0x100 , 0      , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // frstor 108 bytes
  1525.    {0,           0     , 0      , 0x4011, 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1526.    {"fnsave",    0x100 , 0      , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // fnsave 108 bytes
  1527.    {"fnstsw",    0x100 , 0      , 0x11  , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fstsw m16
  1528.    {"ffree",     0x100 , 0      , 0x11  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // ffree st(i)
  1529.    {0,           0     , 0      , 0x4011, 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1530.    {"fst",       0x100 , 0      , 0x11  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fst st(i)
  1531.    {"fstp",      0x100 , 0      , 0x11  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fstp st(i)
  1532.    {"fucom",     0x101 , 0      , 0x11  , 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fucom st(i)
  1533.    {"fucomp",    0x101 , 0      , 0x11  , 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // fucomp st(i)
  1534.    {0,           0     , 0      , 0x4011, 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1535.    {0,           0     , 0      , 0x4011, 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1536.  
  1537. // Secondary opcode map for x87 f.p. instructions. Opcode DE
  1538. // Indexed by reg bits and mod == 3
  1539. SOpcodeDef OpcodeMapE[16] = {
  1540. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1541.    {"fiadd",     0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fiadd m16
  1542.    {"fimul",     0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fimul m16
  1543.    {"ficom",     0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0x4   },    // ficom m16
  1544.    {"ficomp",    0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0x4   },    // ficomp m16
  1545.    {"fisub",     0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fisub m16
  1546.    {"fisubr",    0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fisubr m16
  1547.    {"fidiv",     0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fidiv m16
  1548.    {"fidivr",    0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fidivr m16
  1549.    {"faddp",     0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // faddp st(i),st
  1550.    {"fmulp",     0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fmulp st(i),st
  1551.    {0,           0     , 0      , 0x4011, 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1552.    {0,           0x17  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x17 fcompp
  1553.    {"fsubrp",    0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fsubrp st(i),st (Yes, the order is illogical here)
  1554.    {"fsubp",     0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fsubp st(i),st
  1555.    {"fdivrp",    0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     },    // fdivrp st(i),st
  1556.    {"fdivp",     0x100 , 0      , 0x11  , 0x1040, 0xAF  , 0     , 0     , 0     , 0     , 0     , 0     }};   // fdivp st(i),st
  1557.  
  1558. // Secondary opcode map for x87 f.p. instructions. Opcode DF
  1559. // Indexed by reg bits and mod == 3
  1560. SOpcodeDef OpcodeMapF[16] = {
  1561. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1562.    {"fild",      0x100 , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fild m16
  1563.    {"fisttp",    0x13  , 0      , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // fisttp m16
  1564.    {"fist",      0x100 , 0      , 0x11  , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fist m16
  1565.    {"fistp",     0x100 , 0      , 0x11  , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fistp m16
  1566.    {"fbld",      0x100 , 0      , 0x11  , 0     , 0x2005, 0     , 0     , 0     , 0     , 0     , 0     },    // fbld m80
  1567.    {"fild",      0x100 , 0      , 0x11  , 0     , 0x2004, 0     , 0     , 0     , 0     , 0     , 0     },    // fild m64
  1568.    {"fbstp",     0x100 , 0      , 0x11  , 0x2005, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fbstp m80
  1569.    {"fistp",     0x100 , 0      , 0x11  , 0x2004, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fistp m64
  1570.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1571.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1572.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1573.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1574.    {0,           0x18  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x5   , 0     },    // Link to tertiary map 0x18 fnstsw ax
  1575.    {"fucomip",   0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fucomp st,st(i)
  1576.    {"fcomip",    0x6   , 0      , 0x11  , 0xAF  , 0x1040, 0     , 0     , 0     , 0     , 0     , 0x4   },    // fcomp st,st(i)
  1577.    {0,           0     , 0      , 0x4011, 0     , 0x1040, 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1578.  
  1579. // Tertiary opcode map for f.p. D9 / reg = 010
  1580. // Indexed by rm bits of mod/reg/rm byte
  1581. SOpcodeDef OpcodeMap10[2] = {
  1582. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1583.    {"fnop",      0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x40  },    // fnop
  1584.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // the rest is illegal
  1585.  
  1586. // Tertiary opcode map for f.p. D9 / reg = 100
  1587. // Indexed by rm bits of mod/reg/rm byte
  1588. SOpcodeDef OpcodeMap11[8] = {
  1589. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1590.    {"fchs",      0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fchs
  1591.    {"fabs",      0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fabs
  1592.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1593.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1594.    {"ftst",      0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // ftst
  1595.    {"fxam",      0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fxam
  1596.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1597.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1598.  
  1599. // Tertiary opcode map for f.p. D9 / reg = 101
  1600. // Indexed by rm bits of mod/reg/rm byte
  1601. SOpcodeDef OpcodeMap12[8] = {
  1602. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1603.    {"fld1",      0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // fld1
  1604.    {"fldl2t",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1605.    {"fldl2e",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1606.    {"fldpi",     0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1607.    {"fldlg2",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1608.    {"fldln2",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1609.    {"fldz",      0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1610.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1611.  
  1612. // Tertiary opcode map for f.p. D9 / reg = 110
  1613. // Indexed by rm bits of mod/reg/rm byte
  1614. SOpcodeDef OpcodeMap13[8] = {
  1615. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1616.    {"f2xm1",     0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // f2xm1
  1617.    {"fyl2x",     0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1618.    {"fptan",     0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1619.    {"fpatan",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1620.    {"fxtract",   0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1621.    {"fprem1",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1622.    {"fdecstp",   0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1623.    {"fincstp",   0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   //
  1624.  
  1625. // Tertiary opcode map for f.p. D9 / reg = 111
  1626. // Indexed by rm bits of mod/reg/rm byte
  1627. SOpcodeDef OpcodeMap14[8] = {
  1628. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1629.    {"fprem",     0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1630.    {"fyl2xp1",   0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1631.    {"fsqrt",     0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1632.    {"fsincos",   0x101 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1633.    {"frndint",   0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1634.    {"fscale",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1635.    {"fsin",      0x101 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1636.    {"fcos",      0x101 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   //
  1637.  
  1638. // Tertiary opcode map for f.p. DA / reg = 101
  1639. // Indexed by rm bits of mod/reg/rm byte
  1640. SOpcodeDef OpcodeMap15[3] = {
  1641. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1642.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1643.    {"fucompp",   0x101 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1644.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1645.  
  1646. // Tertiary opcode map for f.p. DB / reg = 100
  1647. // Indexed by rm bits of mod/reg/rm byte
  1648. SOpcodeDef OpcodeMap16[5] = {
  1649. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1650.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1651.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1652.    {"fnclex",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1653.    {"fninit",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    //
  1654.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1655.  
  1656. // Tertiary opcode map for f.p. DE / reg = 011
  1657. // Indexed by rm bits of mod/reg/rm byte
  1658. SOpcodeDef OpcodeMap17[3] = {
  1659. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1660.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1661.    {"fcompp",    0x100 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    //
  1662.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1663.  
  1664. // Tertiary opcode map for f.p. DF / reg = 100
  1665. // Indexed by rm bits of mod/reg/rm byte
  1666. SOpcodeDef OpcodeMap18[2] = {
  1667. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1668.    {"fnstsw",    0x100 , 0      , 0x10  , 0xA2  , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1669.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1670.  
  1671. // Secondary opcode map for IRET. Opcode byte = 0xCF
  1672. // Indexed by operand size
  1673. SOpcodeDef OpcodeMap19[3] = {
  1674. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1675.    {"iret",      0     , 0x102  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x10  },    // CF
  1676.    {"iretd",     0     , 0x102  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x10  },    // CF
  1677.    {"iretq",     0     , 0x1102 , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x10  }};   // CF
  1678.  
  1679. // Secondary opcode map for immediate group 1. Opcode byte = 0x80
  1680. // Indexed by reg bits = 0 - 7
  1681. SOpcodeDef OpcodeMap1A[8] = {
  1682. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1683.    {"add",       0     , 0x10   , 0x51  , 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 80 /0
  1684.    {"or",        0     , 0x10   , 0x51  , 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 80 /1
  1685.    {"adc",       0     , 0x10   , 0x51  , 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 80 /2
  1686.    {"sbb",       0     , 0x10   , 0x51  , 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 80 /3
  1687.    {"and",       0     , 0x10   , 0x51  , 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 80 /4
  1688.    {"sub",       0     , 0x10   , 0x51  , 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 80 /5
  1689.    {"xor",       0     , 0x10   , 0x51  , 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 80 /6
  1690.    {"cmp",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0x4   }};   // 80 /7
  1691.  
  1692. // Secondary opcode map for immediate group 1. Opcode byte = 0x81
  1693. // Indexed by reg bits = 0 - 7
  1694. SOpcodeDef OpcodeMap1B[8] = {
  1695. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1696.    {"add",       0     , 0x1110 , 0x91  , 0x9   , 0x28  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 81 /0
  1697.    {"or",        0     , 0x1110 , 0x91  , 0x9   , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 81 /1
  1698.    {"adc",       0     , 0x1110 , 0x91  , 0x9   , 0x28  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 81 /2
  1699.    {"sbb",       0     , 0x1110 , 0x91  , 0x9   , 0x28  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 81 /3
  1700.    {"and",       0     , 0x1110 , 0x91  , 0x9   , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 81 /4
  1701.    {"sub",       0     , 0x1110 , 0x91  , 0x9   , 0x28  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 81 /5
  1702.    {"xor",       0     , 0x1110 , 0x91  , 0x9   , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // 81 /6
  1703.    {"cmp",       0     , 0x1100 , 0x91  , 0x9   , 0x28  , 0     , 0     , 0     , 0     , 0     , 0x84  }};   // 81 /7
  1704.  
  1705. // Secondary opcode map for immediate group 1. Opcode byte = 0x82.
  1706. // Undocumented opcode. Signed byte instructions do the same as unsigned byte instructions at 0x80
  1707. SOpcodeDef OpcodeMap1C[8] = {
  1708. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1709.    {"add",       0x8000, 0x10   , 0x4051, 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 82 /0
  1710.    {"or",        0x8000, 0x10   , 0x4051, 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 82 /1
  1711.    {"adc",       0x8000, 0x10   , 0x4051, 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 82 /2
  1712.    {"sbb",       0x8000, 0x10   , 0x4051, 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 82 /3
  1713.    {"and",       0x8000, 0x10   , 0x4051, 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 82 /4
  1714.    {"sub",       0x8000, 0x10   , 0x4051, 0x1   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 82 /5
  1715.    {"xor",       0x8000, 0x10   , 0x4051, 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 82 /6
  1716.    {"cmp",       0x8000, 0      , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0x4   }};   // 82 /7
  1717.  
  1718. // Secondary opcode map for immediate group 1. Opcode byte = 0x83
  1719. // Indexed by reg bits = 0 - 7
  1720. SOpcodeDef OpcodeMap1D[8] = {
  1721. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1722.    {"add",       0     , 0x1110 , 0x51  , 0x9   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 83 /0
  1723.    {"or",        0     , 0x1110 , 0x51  , 0x9   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 83 /1
  1724.    {"adc",       0     , 0x1110 , 0x51  , 0x9   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 83 /2
  1725.    {"sbb",       0     , 0x1110 , 0x51  , 0x9   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 83 /3
  1726.    {"and",       0     , 0x1110 , 0x51  , 0x9   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 83 /4
  1727.    {"sub",       0     , 0x1110 , 0x51  , 0x9   , 0x21  , 0     , 0     , 0     , 0     , 0     , 0     },    // 83 /5
  1728.    {"xor",       0     , 0x1110 , 0x51  , 0x9   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     },    // 83 /6
  1729.    {"cmp",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0x4   }};   // 83 /7
  1730.  
  1731. // Secondary opcode map for shift group 2. Opcode byte = 0xC0
  1732. // Indexed by reg bits = 0 - 7.
  1733. SOpcodeDef OpcodeMap1E[8] = {
  1734. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1735.    {"rol",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C0 /0 rol byte ptr r/m,ib
  1736.    {"ror",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C0 /1
  1737.    {"rcl",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C0 /2
  1738.    {"rcr",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C0 /3
  1739.    {"shl",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C0 /4
  1740.    {"shr",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C0 /5
  1741.    {"sal",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C0 /6
  1742.    {"sar",       0     , 0      , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C0 /7
  1743.  
  1744. // Secondary opcode map for shift group 2. Opcode byte = 0xC1
  1745. // Indexed by reg bits = 0 - 7.
  1746. SOpcodeDef OpcodeMap1F[8] = {
  1747. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1748.    {"rol",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C1 /0 rol word ptr r/m,ib
  1749.    {"ror",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C1 /1
  1750.    {"rcl",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C1 /2
  1751.    {"rcr",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C1 /3
  1752.    {"shl",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C1 /4
  1753.    {"shr",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C1 /5
  1754.    {"sal",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C1 /6
  1755.    {"sar",       0     , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C1 /7
  1756.  
  1757. // Secondary opcode map for shift group 2. Opcode byte = 0xD0
  1758. // Indexed by reg bits = 0 - 7.
  1759. SOpcodeDef OpcodeMap20[8] = {
  1760. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1761.    {"rol",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /0 rol byte ptr r/m,1
  1762.    {"ror",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /1
  1763.    {"rcl",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /2
  1764.    {"rcr",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /3
  1765.    {"shl",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /4
  1766.    {"shr",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /5
  1767.    {"sal",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /6
  1768.    {"sar",       0     , 0      , 0x11  , 0x1   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C2 /7
  1769.  
  1770. // Secondary opcode map for shift group 2. Opcode byte = 0xD1
  1771. // Indexed by reg bits = 0 - 7.
  1772. SOpcodeDef OpcodeMap21[8] = {
  1773. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1774.    {"rol",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /0 rol word ptr r/m,1
  1775.    {"ror",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /1
  1776.    {"rcl",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /2
  1777.    {"rcr",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /3
  1778.    {"shl",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /4
  1779.    {"shr",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /5
  1780.    {"sal",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /6
  1781.    {"sar",       0     , 0x1100 , 0x11  , 0x9   , 0xB1  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C3 /7
  1782.  
  1783. // Secondary opcode map for shift group 2. Opcode byte = 0xD2
  1784. // Indexed by reg bits = 0 - 7.
  1785. SOpcodeDef OpcodeMap22[8] = {
  1786. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1787.    {"rol",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /0 rol byte ptr r/m,cl
  1788.    {"ror",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /1
  1789.    {"rcl",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /2
  1790.    {"rcr",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /3
  1791.    {"shl",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /4
  1792.    {"shr",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /5
  1793.    {"sal",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C2 /6
  1794.    {"sar",       0     , 0      , 0x11  , 0x1   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C2 /7
  1795.  
  1796. // Secondary opcode map for shift group 2. Opcode byte = 0xD3
  1797. // Indexed by reg bits = 0 - 7.
  1798. SOpcodeDef OpcodeMap23[8] = {
  1799. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1800.    {"rol",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /0 rol word ptr r/m,cl
  1801.    {"ror",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /1
  1802.    {"rcl",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /2
  1803.    {"rcr",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /3
  1804.    {"shl",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /4
  1805.    {"shr",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /5
  1806.    {"sal",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     },    // C3 /6
  1807.    {"sar",       0     , 0x1100 , 0x11  , 0x9   , 0xB3  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C3 /7
  1808.  
  1809. // Secondary opcode map for group 3. Opcode byte = 0xF6
  1810. // Indexed by reg bits = 0 - 7.
  1811. SOpcodeDef OpcodeMap24[8] = {
  1812. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1813.    {"test",      0     , 0      , 0x51  , 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0x4   },    // test rm8,ib
  1814.    {"test",      0     , 0      , 0x4051, 0x1   , 0x31  , 0     , 0     , 0     , 0     , 0     , 0x4   },    // test rm8,ib. undocumented
  1815.    {"not",       0     , 0x1C50 , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // not rm8
  1816.    {"neg",       0     , 0x1C50 , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // neg rm8
  1817.    {"mul",       0     , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // mul rm8
  1818.    {"imul",      0     , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // imul rm8
  1819.    {"div",       0     , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // div rm8
  1820.    {"idiv",      0     , 0      , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   }};   // idiv rm8
  1821.  
  1822. // Secondary opcode map for group 3. Opcode byte = 0xF7
  1823. // Indexed by reg bits = 0 - 7.
  1824. SOpcodeDef OpcodeMap25[8] = {
  1825. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1826.    {"test",      0     , 0x1100 , 0x91  , 0x9   , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x4   },    // test rm,i
  1827.    {"test",      0     , 0x1100 , 0x4091, 0x9   , 0x39  , 0     , 0     , 0     , 0     , 0     , 0x4   },    // test rm,i. undocumented
  1828.    {"not",       0     , 0x1D50 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // not rm
  1829.    {"neg",       0     , 0x1D50 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // neg rm
  1830.    {"mul",       0     , 0x1100 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // mul rm
  1831.    {"imul",      0     , 0x1100 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // imul rm
  1832.    {"div",       0     , 0x1100 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // div rm
  1833.    {"idiv",      0     , 0x1100 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   }};   // idiv rm
  1834.  
  1835. // Secondary opcode map for group 4. Opcode byte = 0xFE
  1836. // Indexed by reg bits = 0 - 7.
  1837. SOpcodeDef OpcodeMap26[8] = {
  1838. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1839.    {"inc",       0     , 0xC50  , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // inc rm8
  1840.    {"dec",       0     , 0xC50  , 0x11  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // dec rm8
  1841.    {0,           0     , 0      , 0x4011, 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal opcode
  1842.  
  1843. // Secondary opcode map for group 5. Opcode byte = 0xFF
  1844. // Indexed by reg bits = 0 - 7.
  1845. SOpcodeDef OpcodeMap27[8] = {
  1846. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1847.    {"inc",       0     , 0x1D50 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0x80  },    // inc rm
  1848.    {"dec",       0     , 0x1D50 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0x80  },    // dec rm
  1849.    {"call",      0     , 0x2182 , 0x11  , 0xC   , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // call indirect rm
  1850.    {"call",      0     , 0x1102 , 0x811 , 0x200D, 0     , 0     , 0     , 0     , 0     , 0     , 0x28  },    // call indirect far
  1851.    {"jmp",       0     , 0x2180 , 0x11  , 0xB   , 0     , 0     , 0     , 0     , 0     , 0     , 0x14  },    // jmp indirect rm
  1852.    {"jmp",       0     , 0x1100 , 0x811 , 0x200D, 0     , 0     , 0     , 0     , 0     , 0     , 0x30  },    // jmp indirect far
  1853.    {"push",      0     , 0x2102 , 0x11  , 0xA   , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   },    // push rm
  1854.    {0,           0     , 0      , 0x4011, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal opcode
  1855.  
  1856. // Secondary opcode map for immediate group 1A. Opcode byte = 0x8F
  1857. // Indexed by reg bits = 0 - 7. Values != 0 are discouraged
  1858. SOpcodeDef OpcodeMap28[2] = {
  1859. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1860.    {"pop",       0     , 0x2102 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 8F
  1861.    {"pop",       0     , 0x2102 , 0x4011, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // 8F
  1862.  
  1863. // Tertiary opcode map for pinsrw. Opcode byte = 0F C4
  1864. // Indexed by mod bits 0 register vs. memory operand
  1865. SOpcodeDef OpcodeMap29[2] = {
  1866. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1867.    {"pinsrw",    0x7   ,0x892200, 0x59  , 0x1102, 0x1102, 0x2002, 0x11  , 0x1000, 0     , 0     , 0x2   },    // 0F C4 mem16
  1868.    {"pinsrw",    0x7   ,0x892200, 0x59  , 0x1102, 0x1102, 0x1009, 0x11  , 0     , 0     , 0     , 0x2   }};   // 0F C4 register
  1869.  
  1870. // Tertiary opcode map for group 6. Opcode byte = 0F 00
  1871. // Indexed by reg bits = 0 - 7.
  1872. SOpcodeDef OpcodeMap2A[8] = {
  1873. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1874.    {"sldt",      0x2   , 0x1100 , 0x11  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1875.    {"str",       0x802 , 0x100  , 0x11  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1876.    {"lldt",      0x802 , 0x2000 , 0x11  , 0     , 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    //
  1877.    {"ltr",       0x802 , 0      , 0x11  , 0     , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1878.    {"verr",      0x802 , 0      , 0x11  , 0     , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1879.    {"verw",      0x802 , 0      , 0x11  , 0     , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1880.    {0,           0     , 0      , 0x4011, 0     , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  1881.    {0,           0     , 0      , 0x4011, 0     , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  1882.  
  1883. // Tertiary opcode map for group 7. Opcode byte = 0F 01
  1884. // Indexed by reg bits = 0 - 7 and mod = 11b.
  1885. SOpcodeDef OpcodeMap2B[16] = {
  1886. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1887.    {"sgdt",      0x802 , 0x1100 , 0x11  , 0x200D, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // mod<3, reg=0
  1888.    {"sidt",      0x802 , 0x1100 , 0x11  , 0x200D, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1889.    {"lgdt",      0x802 , 0x1100 , 0x11  , 0     , 0x200D, 0     , 0     , 0     , 0     , 0     , 0     },    //
  1890.    {"lidt",      0x802 , 0x1100 , 0x11  , 0     , 0x200D, 0     , 0     , 0     , 0     , 0     , 0     },    //
  1891.    {"smsw",      0x2   , 0      , 0x11  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1892.    {0,           0x133 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },    // link to rstorssp
  1893.    {"lmsw",      0x802 , 0      , 0x11  , 0     , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1894.    {"invlpg",    0x4   , 0      , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // mod<3, reg=7
  1895.  
  1896.    {0,           0x36  , 0      , 0x4011, 0     , 0     , 0     , 0     , 0     , 0     , 5     , 0     },    // link to quarternary map, vmcall etc.
  1897.    {0,           0x37  , 0      , 0x4011, 0     , 0     , 0     , 0     , 0     , 0     , 5     , 0     },    // link to quarternary map, monitor, mwait
  1898.    {0,           0xA9  , 0      , 0x4011, 0     , 0     , 0     , 0     , 0     , 0     , 5     , 0     },    // link to quarternary map, xgetbv, xsetbv
  1899.    {0,           0xAA  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 5     , 0     },    // link AMD virtualization
  1900.    {"smsw",      0x2   , 0x1100 , 0x11  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1901.    {0,           0x130 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 5     , 0     },    // link to incssp etc.
  1902.    {"lmsw",      0x802 , 0      , 0x11  , 0     , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1903.    {0,           0xAB  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 5     , 0     }};   // link SWAPGS and RDTSCP
  1904.  
  1905. // Secondary opcode map for group 8. Opcode byte = 0F BA: bt
  1906. // Indexed by reg bits = 0 - 7.
  1907. SOpcodeDef OpcodeMap2C[8] = {
  1908. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1909.    {0,           0     , 0      , 0x51  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  1910.    {0,           0     , 0      , 0x51  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  1911.    {0,           0     , 0      , 0x51  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  1912.    {0,           0     , 0      , 0x51  , 0x9   , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  1913.    {"bt",        0x3   , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1914.    {"bts",       0x3   , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1915.    {"btr",       0x3   , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    //
  1916.    {"btc",       0x3   , 0x1100 , 0x51  , 0x9   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     }};   //
  1917.  
  1918. // Secondary opcode map for addsub. Opcode byte = 0F D0
  1919. // Indexed by prefix = none, 66, F2, F3
  1920. SOpcodeDef OpcodeMap2D[4] = {
  1921. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1922.    {"addsub",    0x13  , 0xD0000, 0x4019, 0x124F, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0x2   },    // 0F D0. undefined
  1923.    {"addsubpd",  0x13  , 0xD0200, 0x19  , 0x124C, 0x124C, 0x24C , 0     , 0     , 0     , 0     , 0x2   },    // 66 0F D0. addsubpd
  1924.    {"addsubps",  0x13  , 0xD0800, 0x19  , 0x124B, 0x124B, 0x24B , 0     , 0     , 0     , 0     , 0x2   },    // F2 0F D0. addsubps
  1925.    {"addsub",    0x13  , 0xD0400, 0x4019, 0x124F, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0x2   }};   // F3 0F D0. undefined
  1926.  
  1927. // Secondary opcode map for group 10. Opcode byte = 0F B9
  1928. // Indexed by reg bits = 0 - 7.
  1929. SOpcodeDef OpcodeMap2E[1] = {
  1930. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1931.    {"ud1",       0     , 0      , 0x4012, 0x1009, 0x6   , 0     , 0     , 0     , 0     , 0     , 0     }};   // Invalid opcode, possibly used for emulation
  1932.  
  1933. // Secondary opcode map for mov group 11. Opcode byte = 0xC6
  1934. // Indexed by reg bits and mod.
  1935. SOpcodeDef OpcodeMap2F[16] = {
  1936. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1937.    {"mov",       0     , 0xC45  , 0x51  , 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /0 mov m,ib
  1938.    {"mov",       0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /1
  1939.    {"mov",       0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /2
  1940.    {"mov",       0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /3
  1941.    {"mov",       0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /4
  1942.    {"mov",       0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /5
  1943.    {"mov",       0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /6
  1944.    {"mov",       0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 m /7
  1945.    {"",          0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 r /0
  1946.    {"",          0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 r /1
  1947.    {"",          0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 r /2
  1948.    {"",          0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 r /3
  1949.    {"",          0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 r /4
  1950.    {"",          0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 r /5
  1951.    {"",          0     , 0x5    , 0x4051, 0x1   , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     },    // C6 r /6
  1952.    {"xabort",    0x1D  , 0      , 0x50  , 0     , 0x31  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C6 r /7
  1953.  
  1954. // Secondary opcode map for mov group 11. Opcode byte = 0xC7
  1955. // Indexed by reg bits and mod.
  1956. SOpcodeDef OpcodeMap30[16] = {
  1957. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1958.    {"mov",       0     , 0x1D45 , 0x91  , 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /0 mov m,iw
  1959.    {"mov",       0     , 0x5    , 0x4091, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /1
  1960.    {"mov",       0     , 0x5    , 0x4091, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /2
  1961.    {"mov",       0     , 0x5    , 0x4091, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /3
  1962.    {"mov",       0     , 0x5    , 0x4091, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /4
  1963.    {"mov",       0     , 0x5    , 0x4091, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /5
  1964.    {"mov",       0     , 0x5    , 0x4091, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /6
  1965.    {"mov",       0     , 0x5    , 0x4091, 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 m /7
  1966.    {"mov",       0     , 0x1105 , 0x91  , 0x9   , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 r /0 mov r,iw
  1967.    {"",          0     , 0      , 0x91  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 r /1
  1968.    {"",          0     , 0      , 0x91  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 r /2
  1969.    {"",          0     , 0      , 0x91  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 r /3
  1970.    {"",          0     , 0      , 0x91  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 r /4
  1971.    {"",          0     , 0      , 0x91  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 r /5
  1972.    {"",          0     , 0      , 0x91  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     },    // C7 r /6
  1973.    {"xbegin",    0x1D  , 0x100  , 0x90  , 0     , 0x29  , 0     , 0     , 0     , 0     , 0     , 0     }};   // C7 r /7
  1974.  
  1975. // Secondary opcode map for group 12. Opcode byte = 0F 71
  1976. // Indexed by reg bits = 0 - 7.
  1977. SOpcodeDef OpcodeMap31[8] = {
  1978. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1979.    {0,           0x7   , 0x90200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0     , 0     , 0     , 0x2   },     // Illegal
  1980.    {0,           0x7   , 0x90200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0     , 0     , 0     , 0x2   },     // Illegal
  1981.    {"psrlw",     0x7   ,0x8D2200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0x20  , 0     , 0     , 0x2   },     // 2
  1982.    {0,           0x7   , 0x90200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0     , 0     , 0     , 0x2   },     // Illegal
  1983.    {"psraw",     0x7   ,0x8D2200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0x20  , 0     , 0     , 0x2   },     // 4
  1984.    {0,           0x7   , 0x90200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0     , 0     , 0     , 0x2   },     // Illegal
  1985.    {"psllw",     0x7   ,0x8D2200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0x20  , 0     , 0     , 0x2   },     // 6
  1986.    {0,           0x7   , 0x90200, 0x58  , 0x1102, 0x1102, 0x11  , 0     , 0     , 0     , 0     , 0x2   }};    // Illegal
  1987.  
  1988. // Secondary opcode map for group 13. Opcode byte = 0F 72
  1989. // Indexed by reg bits = 0 - 7.
  1990. SOpcodeDef OpcodeMap32[8] = {
  1991. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  1992.    {"vpror",     0x20  ,0x893200, 0x58  , 0x1209, 0x209 , 0x11  , 0     , 0x21  , 0     , 0     , 0x1   },     // /0
  1993.    {"vprol",     0x20  ,0x893200, 0x58  , 0x1209, 0x209 , 0x11  , 0     , 0x21  , 0     , 0     , 0x1   },     // /1
  1994.    {"psrld",     0x12  ,0xCD3200, 0x58  , 0x1103, 0x103 , 0x11  , 0     , 0x21  , 0x1406, 0     , 0x2   },     // /2
  1995.    {0,           0x12  , 0x90200, 0x58  , 0x1103, 0x103 , 0x11  , 0     , 0     , 0     , 0     , 0x2   },     // Illegal
  1996.    {"psra",      0x12  ,0xCD3200, 0x58  , 0x1109, 0x109 , 0x11  , 0     , 0x31  , 0x1406, 0     , 0x3   },     // /4. W bit controls operand size only if EVEX
  1997.    {0,           0x12  , 0x90200, 0x58  , 0x1103, 0x103 , 0x11  , 0     , 0     , 0     , 0     , 0x2   },     // Illegal
  1998.    {"pslld",     0x12  ,0xCD3200, 0x58  , 0x1103, 0x103 , 0x11  , 0     , 0x21  , 0x1406, 0     , 0x2   },     // /6
  1999.    {0,           0x12  , 0x90200, 0x58  , 0x1103, 0x103 , 0x11  , 0     , 0     , 0     , 0     , 0x2   }};    // Illegal
  2000.  
  2001. // Secondary opcode map for group 14. Opcode byte = 0F 73
  2002. // Indexed by reg bits = 0 - 7.
  2003. SOpcodeDef OpcodeMap33[8] = {
  2004. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2005.    {0,           0x12  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // /0 Illegal
  2006.    {0,           0x12  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // /1 Illegal
  2007.    {"psrlq",     0x12  ,0x8D3200, 0x58  , 0x1104, 0x104 , 0x11  , 0     , 0x21  , 0     , 0     , 0x2   },     // /2
  2008.    {"psrldq",    0x12  , 0xDA200, 0x58  , 0x1204, 0x204 , 0x11  , 0     , 0     , 0     , 0     , 0x2   },     // /3 Not valid without 66 prefix
  2009.    {0,           0x12  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // /4 Illegal
  2010.    {0,           0x12  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // /5 Illegal
  2011.    {"psllq",     0x12  ,0x8D3200, 0x58  , 0x1104, 0x104 , 0x11  , 0     , 0x21  , 0     , 0     , 0x2   },     // /6
  2012.    {"pslldq",    0x12  ,0x8DA200, 0x58  , 0x1204, 0x204 , 0x11  , 0     , 0     , 0     , 0     , 0x2   }};    // /7 Not valid without 66 prefix
  2013.  
  2014. // Secondary opcode map for group 15. Opcode byte = 0F AE
  2015. // Indexed by reg bits = 0 - 7 and mod = 3
  2016. // These codes are without VEX prefix. Same codes with VEX or MVEX prefix are in OpcodeMapCD
  2017. SOpcodeDef OpcodeMap34[16] = {
  2018. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2019.    {"fxsave",    0x11  , 0      , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // 0F AE /0
  2020.    {"fxrstor",   0x11  , 0      , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0x8   },     // 0F AE /1
  2021.    {"ldmxcsr",   0x11  , 0x10000, 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0x2   },     // 0F AE /2
  2022.    {"stmxcsr",   0x11  , 0x10000, 0x11  , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     , 0x2   },     // 0F AE /3
  2023.    {0,           0     , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // Illegal
  2024.    {0,           0x134 , 0      , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },     // 0F AE /5. Link setssbsy
  2025.    {0,           0xF3  , 0      , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },     // 0F AE /6. Link xsaveopt
  2026.    {0,           0xF2  , 0      , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },     // 0F AE /7. Link clflush
  2027.    {"rdfsbase",  0x10000,0x1400 , 0x11  , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // F3 0F AE m-0
  2028.    {"rdgsbase",  0x10000,0x1400 , 0x11  , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // F3 0F AE m-1
  2029.    {"wrfsbase",  0x10000,0x1400 , 0x11  , 0     , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },     // F3 0F AE m-2
  2030.    {"wrgsbase",  0x10000,0x1400 , 0x11  , 0     , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },     // F3 0F AE m-3
  2031.    {0,           0     , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // Illegal
  2032.    {"lfence",    0x12  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // m-5
  2033.    {"mfence",    0x12  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // m-6
  2034.    {0,           0xF4  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     }};    // m-7. Link sfence, pcommit
  2035.  
  2036. // Secondary opcode map for group 16. Opcode byte = 0F 18
  2037. // Indexed by reg bits = 0 - 7.
  2038. SOpcodeDef OpcodeMap35[8] = {
  2039. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2040.    {"prefetchnta",0x13 ,0x410000, 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0x2   },    // 0F 18 /0
  2041.    {"prefetcht0",0x13  ,0x410000, 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0x2   },    // 0F 18 /1
  2042.    {"prefetcht1",0x13  ,0x410000, 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0x2   },    // 0F 18 /2
  2043.    {"prefetcht2",0x13  ,0x410000, 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0x2   },    // 0F 18 /3
  2044.    {"vprefetchenta",0x13,0x430000,0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0     },    // 0F 18 /4
  2045.    {"vprefetche0",0x13  ,0x430000,0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0     },    // 0F 18 /5
  2046.    {"vprefetche1",0x13  ,0x430000,0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0     },    // 0F 18 /6
  2047.    {"vprefetche2",0x13  ,0x430000,0x11  , 0     , 0x2006, 0     , 0     , 0     , 0x2   , 0     , 0     }};   // 0F 18 /7
  2048.  
  2049. // Quarternary opcode map for group 7. 0F 01 reg = 0
  2050. // Indexed by rm bits of mod/reg/rm byte
  2051. SOpcodeDef OpcodeMap36[6] = {
  2052. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2053.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // illegal
  2054.    {"vmcall",    0x813 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // Intel processor only?
  2055.    {"vmlaunch",  0x813 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // Intel processor only?
  2056.    {"vmresume",  0x813 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Intel processor only?
  2057.    {"vmxoff",    0x813 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Intel processor only?
  2058.    {0,           0     , 0      , 0x4010, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  2059.  
  2060. // Quarternary opcode map for group 7. 0F 01 reg = 1
  2061. // Indexed by rm bits of mod/reg/rm byte
  2062. SOpcodeDef OpcodeMap37[5] = {
  2063. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2064.    {"monitor",   0x813 , 0x4    , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 1 - 0
  2065.    {"mwait",     0x813 , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 1 - 1
  2066.    {"clac",      0x81D , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 1 - 2
  2067.    {"stac",      0x81D , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 1 - 3
  2068.    {0,           0     , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // illegal
  2069.  
  2070. // EVEX 0F 38 1B, indexed by W bit
  2071. SOpcodeDef OpcodeMap38[] = {
  2072. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2073.    {"vbroadcastf32x8",0x20,0xC69200,0x12, 0x164B, 0x254B, 0     , 0     , 0x20  , 0x1011, 0     , 0x100 },    // EVEX W0 0F 38 1B
  2074.    {"vbroadcastf64x4",0x20,0xC69200,0x12, 0x164C, 0x254C, 0     , 0     , 0x20  , 0x1011, 0     , 0x100 }};   // EVEX W1 0F 38 1B
  2075.  
  2076. // Secondary opcode map for cbw/cwde/cdqe. Opcode byte = 0x98
  2077. // Indexed by operand size = 16, 32, 64
  2078. SOpcodeDef OpcodeMap39[3] = {
  2079. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2080.    {"cbw",       0     , 0x100  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 98
  2081.    {"cwde",      0     , 0x100  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 98
  2082.    {"cdqe",      0x4000, 0x1000 , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   }};   // 98
  2083.  
  2084. // Secondary opcode map for cwd/cdq/cqo. Opcode byte = 0x99
  2085. // Indexed by operand size = 16, 32, 64
  2086. SOpcodeDef OpcodeMap3A[3] = {
  2087. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2088.    {"cwd",       0     , 0x100  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 99
  2089.    {"cdq",       0     , 0x100  , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 99
  2090.    {"cqo",       0x4000, 0x1000 , 0x1   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   }};   // 99
  2091.  
  2092.  
  2093. // Secondary opcode map for arpl/movsxd. Opcode byte = 0x63
  2094. // Indexed by mode = 16, 32, 64
  2095. SOpcodeDef OpcodeMap3B[3] = {
  2096. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2097.    {"arpl",      0x8802, 0      , 0x13  , 0x2   , 0x1002, 0     , 0     , 0     , 0     , 0     , 0     },    // 63
  2098.    {"arpl",      0x8802, 0      , 0x13  , 0x2   , 0x1002, 0     , 0     , 0     , 0     , 0     , 0     },    // 63
  2099.    {"movsxd",    0x4000, 0x1000 , 0x12  , 0x1009, 0x3   , 0     , 0     , 0     , 0     , 0     , 0     }};   // 63
  2100.  
  2101. // Secondary opcode map for nop/pause. Opcode byte = 0x90
  2102. // Indexed by prefix = none, 66, F2, F3
  2103. SOpcodeDef OpcodeMap3C[4] = {
  2104. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2105.    {"nop",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x40  },    // 90
  2106.    {"nop",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x40  },    // 66 90
  2107.    {"nop",       0     , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x40  },    // F2 90
  2108.    {"pause",     0     , 0x400  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 90. (No instset indicated because backwards compatible)
  2109.  
  2110. // Secondary opcode map for jcxz. Opcode byte = 0xE3
  2111. // Indexed by address size
  2112. SOpcodeDef OpcodeMap3D[4] = {
  2113. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2114.    {"jcxz",      0     , 0x81   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // E3
  2115.    {"jecxz",     0     , 0x81   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0     },
  2116.    {"jrcxz",     0x4000, 0x81   , 0x42  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  2117.  
  2118. // Secondary opcode map for pushf/d/q. Opcode byte = 0x9C
  2119. // Indexed by operand size
  2120. SOpcodeDef OpcodeMap3E[3] = {
  2121. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2122.    {"pushf",     0     , 0x102  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 9C pushf
  2123.    {"pushf",     0     , 0x2102 , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   },    // 9C pushf/d/q
  2124.    {"pushf",     0     , 0x2102 , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   }};   // 9C pushf/d/q
  2125.  
  2126. // Secondary opcode map for poof/d/q. Opcode byte = 0x9D
  2127. // Indexed by operand size
  2128. SOpcodeDef OpcodeMap3F[3] = {
  2129. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2130.    {"popf",      0     , 0x102  , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 9D popf
  2131.    {"popf",      0     , 0x2102 , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   },    // 9D popf/d/q
  2132.    {"popf",      0     , 0x2102 , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x1   }};   // 9D popf/d/q
  2133.  
  2134. // Tertiary opcode map for movups etc. Opcode byte = 0F 10
  2135. // Indexed by prefixes (none, 66, F2, F3)
  2136. SOpcodeDef OpcodeMap40[4] = {
  2137. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2138.    {"movups",    0x11  ,0x850000, 0x12  , 0x124B, 0x251 , 0     , 0     , 0x30  , 0     , 0     , 0x202 },    // 0F 10
  2139.    {"movupd",    0x12  ,0x852200, 0x12  , 0x124C, 0x251 , 0     , 0     , 0x30  , 0     , 0     , 0x202 },    // 66 0F 10
  2140.    {"movsd",     0x71  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 3     , 0     },    // F2 0F 10 Link for memory/register
  2141.    {"movss",     0x72  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 3     , 0     }};   // F3 0F 10 Link for memory/register
  2142.  
  2143. // Tertiary opcode map for movups etc. Opcode byte = 0F 11
  2144. // Indexed by prefixes (none, 66, F2, F3)
  2145. SOpcodeDef OpcodeMap41[4] = {
  2146. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2147.    {"movups",    0x11  ,0x850000, 0x13  , 0x251 , 0x124B, 0     , 0     , 0x30  , 0     , 0     , 0x202 },    // 0F 11
  2148.    {"movupd",    0x12  ,0x852200, 0x13  , 0x251 , 0x124C, 0     , 0     , 0x30  , 0     , 0     , 0x202 },    // 66 0F 11
  2149.    {"movsd",     0x73  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 3     , 0     },    // F2 0F 11 Link for memory/register
  2150.    {"movss",     0x74  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 3     , 0     }};   // F3 0F 11 Link for memory/register
  2151.  
  2152. // Tertiary opcode map for movlps etc. Opcode byte = 0F 12
  2153. // Indexed by prefixes (none, 66, F2, F3)
  2154. SOpcodeDef OpcodeMap42[4] = {
  2155. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2156.    {0,           0x43  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // Link to quarternary map
  2157.    {"movlpd",    0x12  ,0x892200, 0x19  , 0x144C, 0x144C, 0x204C, 0     , 0     , 0     , 0     , 0x2   },    // 66 0F 12
  2158.    {"movddup",   0x70  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xB   , 0     },    // F2 0F 12
  2159.    {"movsldup",  0x13  ,0x852400, 0x12  , 0x124B, 0x24B , 0     , 0     , 0x30  , 0     , 0     , 0x2   }};   // F3 0F 12
  2160.  
  2161. // Quarternary opcode map for movlps and movhlps. Opcode byte = 0F 12
  2162. // Indexed by mod bits
  2163. SOpcodeDef OpcodeMap43[2] = {
  2164. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2165.    {"movlps",    0x11  ,0x892000, 0x19  , 0x144B, 0x144B, 0x234B, 0     , 0x1000, 0     , 0     , 0x2   },    // 0F 12 (mem)
  2166.    {"movhlps",   0x11  ,0x892000, 0x19  , 0x144B, 0x144B, 0x144B, 0     , 0x00  , 0     , 0     , 0x2   }};   // 0F 12 (reg)
  2167.  
  2168. // Tertiary opcode map for movlps etc. Opcode byte = 0F 16
  2169. // Indexed by prefixes (none, 66, F2, F3)
  2170. SOpcodeDef OpcodeMap44[4] = {
  2171. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2172.    {0,           0x45  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // Link to quarternary map
  2173.    {"movhpd",    0x12  ,0x892200, 0x19  , 0x144C, 0x144C, 0x204C, 0     , 0x00  , 0     , 0     , 0x2   },    // 66 0F 16
  2174.    {0,           0x13  , 0x800  , 0x4012, 0x124C, 0x4C  , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 16
  2175.    {"movshdup",  0x13  ,0x852400, 0x12  , 0x124B, 0x24B , 0     , 0     , 0x30  , 0     , 0     , 0x2   }};   // F3 0F 16
  2176.  
  2177. // Quarternary opcode map for movhps and movlhps. Opcode byte = 0F 16
  2178. // Indexed by mod bits
  2179. SOpcodeDef OpcodeMap45[2] = {
  2180. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2181.    {"movhps",    0x11  ,0x890000, 0x19  , 0x144B, 0x144B, 0x234B, 0     , 0x1000, 0     , 0     , 0x2   },    // 0F 12 (mem)
  2182.    {"movlhps",   0x11  ,0x890000, 0x19  , 0x144B, 0x144B, 0x144B, 0     , 0x0   , 0     , 0     , 0x2   }};   // 0F 12 (reg)
  2183.  
  2184. // Tertiary opcode map for cvtpi2ps etc. Opcode byte = 0F 2A
  2185. // Indexed by prefixes (none, 66, F2, F3)
  2186. SOpcodeDef OpcodeMap46[4] = {
  2187. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2188.    {"cvtpi2ps",  0x11  , 0      , 0x12  , 0x124B, 0x303 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 2A
  2189.    {"cvtpi2pd",  0x12  , 0x200  , 0x12  , 0x124C, 0x303 , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F 2A
  2190.    {"cvtsi2sd",  0x12  ,0x891800, 0x19  , 0x104C, 0x104C, 0x9   , 0     , 0x6   , 0     , 0     , 0x2   },    // F2 0F 2A
  2191.    {"cvtsi2ss",  0x12  ,0x891400, 0x19  , 0x104B, 0x104B, 0x9   , 0     , 0x6   , 0     , 0     , 0x2   }};   // F3 0F 2A
  2192.  
  2193. // Tertiary opcode map for cvttps2pi etc. Opcode byte = 0F 2C
  2194. // Indexed by prefixes (none, 66, F2, F3)
  2195. SOpcodeDef OpcodeMap47[4] = {
  2196. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2197.    {"cvttps2pi", 0x11  , 0      , 0x12  , 0x1303, 0x24B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 2C
  2198.    {"cvttpd2pi", 0x12  , 0x200  , 0x12  , 0x1303, 0x24C , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F 2C
  2199.    {"cvttsd2si", 0x12  ,0x811800, 0x12  , 0x1009, 0x4C  , 0     , 0     , 0x2   , 0     , 0     , 0x2   },    // F2 0F 2C
  2200.    {"cvttss2si", 0x12  ,0x811400, 0x12  , 0x1009, 0x4B  , 0     , 0     , 0x2   , 0     , 0     , 0x2   }};   // F3 0F 2C
  2201.  
  2202. // Tertiary opcode map for cvtps2pi etc. Opcode byte = 0F 2D
  2203. // Indexed by prefixes (none, 66, F2, F3)
  2204. SOpcodeDef OpcodeMap48[4] = {
  2205. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2206.    {"cvtps2pi",  0x11  ,0x000000, 0x12  , 0x1303, 0x24B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 2D
  2207.    {"cvtpd2pi",  0x12  ,0x000200, 0x12  , 0x1303, 0x24C , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F 2D
  2208.    {"cvtsd2si",  0x12  ,0x811800, 0x12  , 0x1009, 0x4C  , 0     , 0     , 0x6   , 0     , 0     , 0x2   },    // F2 0F 2D
  2209.    {"cvtss2si",  0x12  ,0x811400, 0x12  , 0x1009, 0x4B  , 0     , 0     , 0x6   , 0     , 0     , 0x2   }};   // F3 0F 2D
  2210.  
  2211. // Tertiary opcode map for cvtps2pd etc. Opcode byte = 0F 5A
  2212. // Indexed by prefixes (none, 66, F2, F3)
  2213. SOpcodeDef OpcodeMap49[4] = {
  2214. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2215.    {"cvtps2pd",  0x12  ,0xC50000, 0x12  , 0x124C, 0xF4B , 0     , 0     , 0x33  , 0x1215, 0     , 0x2   },    //    0F 5A
  2216.    {"cvtpd2ps",  0x12  ,0xC52200, 0x12  , 0x1F4B, 0x24C , 0     , 0     , 0x37,   0x1305, 0     , 0x2   },    // 66 0F 5A
  2217.    {"cvtsd2ss",  0x12  ,0x892800, 0x19  , 0x104B, 0x4C  , 0x4C  , 0     , 0x36  , 0     , 0     , 0x2   },    // F2 0F 5A
  2218.    {"cvtss2sd",  0x12  ,0x892400, 0x19  , 0x104C, 0x104C, 0x4B  , 0     , 0x32  , 0     , 0     , 0x2   }};   // F3 0F 5A
  2219.  
  2220. // Tertiary opcode map for cvtdq2ps etc. Opcode byte = 0F 5B
  2221. // Indexed by prefixes (none, 66, F2, F3)
  2222. SOpcodeDef OpcodeMap4A[4] = {
  2223. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2224.    {"cvtdq2ps",  0x12  ,0x850000, 0x12  , 0x124B, 0x203 , 0     , 0     , 0x37  , 0     , 0     , 0x2   },    // 0F 5B
  2225.    {"cvtps2dq",  0x12  ,0x850200, 0x12  , 0x1203, 0x24B , 0     , 0     , 0x37  , 0     , 0     , 0x2   },    // 66 0F 5B
  2226.    {0,           0x12  ,0x800   , 0x4012, 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 5B. Illegal
  2227.    {"cvttps2dq", 0x12  ,0x852400, 0x12  , 0x1203, 0x24B , 0     , 0     , 0x37  , 0     , 0     , 0x2   }};   // F3 0F 5B
  2228.  
  2229. // Tertiary opcode map for ucomiss/sd etc. Opcode byte = 0F 2E
  2230. // Indexed by prefixes (none, 66, F2, F3)
  2231. SOpcodeDef OpcodeMap4B[3] = {
  2232. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2233.    {"ucomiss",   0x11  ,0x810200, 0x12  , 0x124B, 0x4B  , 0     , 0     , 0x2   , 0     , 0     , 0x6   },    // 0F 2E. ucomiss
  2234.    {"ucomisd",   0x11  ,0x812200, 0x12  , 0x124C, 0x4C  , 0     , 0     , 0x2   , 0     , 0     , 0x6   },    // 66 0F 2E. ucomisd
  2235.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // Illegal
  2236.  
  2237. // Tertiary opcode map for comiss/sd etc. Opcode byte = 0F 2F
  2238. // Indexed by prefixes (none, 66, F2, F3)
  2239. SOpcodeDef OpcodeMap4C[3] = {
  2240. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2241.    {"comiss",    0x11  ,0x812200, 0x12  , 0x124B, 0x4B  , 0     , 0     , 0x2   , 0     , 0     , 0x6   },    // 0F 2F. comiss
  2242.    {"comisd",    0x11  ,0x812200, 0x12  , 0x124C, 0x4C  , 0     , 0     , 0x2   , 0     , 0     , 0x6   },    // 66 0F 2F. comisd
  2243.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // Illegal
  2244.  
  2245. // Tertiary opcode map for movq/movdqa/movdqu. Opcode byte = 0F 6F
  2246. // Indexed by prefixes (none, 66, F2, F3)
  2247. SOpcodeDef OpcodeMap4D[4] = {
  2248. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2249.    {"movq",      0x7   , 0      , 0x12  , 0x1351, 0x351 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 6F
  2250.    {"movdqa",    0xB8  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 66 0F 6F. Link to movdqa and vmovdqa32
  2251.    {"vmovdqu",   0x19  ,0x864800, 0x12  , 0x1209, 0x209 , 0     , 0     , 0x20  , 0     , 0     , 0x1200},    // F2 0F 6F
  2252.    {"movdqu",    0xB9  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     }};   // F3 0F 6F. Link to movdqu and vmovdqu32
  2253.  
  2254. // Tertiary opcode map for movq/movdqa/movdqu. Opcode byte = 0F 7F
  2255. // Indexed by prefixes (none, 66, F2, F3)
  2256. SOpcodeDef OpcodeMap4E[4] = {
  2257. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2258.    {"movq",      0x7   , 0      , 0x13  , 0x351 , 0x1351, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7F
  2259.    {"movdqa",    0xBA  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // 66 0F 7F. Link to movdqa and vmovdqa32
  2260.    {"vmovdqu",   0x19  ,0x864800, 0x13  , 0x209 , 0x1209, 0     , 0     , 0x20  , 0     , 0     ,0x1200 },    // E/MVEX F3 0F 7F
  2261.    {"movdqu",    0xBB  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     }};   // F3 0F 7F. Link to movdqu and vmovdqu32
  2262.  
  2263. // Tertiary opcode map for pshufw etc. Opcode byte = 0F 70
  2264. // Indexed by prefixes (none, 66, F2, F3)
  2265. SOpcodeDef OpcodeMap4F[4] = {
  2266. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2267.    {"pshufw",    0x7   , 0      , 0x52  , 0x1302, 0x302 , 0x31  , 0     , 0     , 0     , 0     , 0     },    // 0F 70
  2268.    {"pshufd",    0x12  ,0xC52100, 0x52  , 0x1203, 0x203 , 0x31  , 0     , 0x21  , 0x1000, 0     , 0x2   },    // 66 0F 70
  2269.    {"pshuflw",   0x12  ,0x852800, 0x52  , 0x1202, 0x202 , 0x31  , 0     , 0x20  , 0     , 0     , 0x2   },    // F2 0F 70
  2270.    {"pshufhw",   0x12  ,0x852400, 0x52  , 0x1202, 0x202 , 0x31  , 0     , 0x20  , 0     , 0     , 0x2   }};   // F3 0F 70
  2271.  
  2272. // Tertiary opcode map for group 9. Opcode byte = 0F C7
  2273. // Indexed by reg bits = 0 - 7.
  2274. SOpcodeDef OpcodeMap50[8] = {
  2275. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2276.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0. Illegal
  2277.    {0,           0x51  , 0x1010 , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 1. Link to map: cmpxchg8b
  2278.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2279.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2280.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2281.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2282.    {0,           0xAC  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 6. Link to map: vmptrld etc
  2283.    {0,           0xAF  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     }};   // 7. Link to map: vmptrst, rdseed
  2284.  
  2285. // Quarternary opcode map for cmpxchg8b. Opcode byte = 0F C7 /1
  2286. // Indexed by operand size: 16, 32, 64
  2287. SOpcodeDef OpcodeMap51[3] = {
  2288. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2289.    {"cmpxchg8b", 0x5   , 0x1C50 , 0x11  , 0x2351, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  2290.    {"cmpxchg8b", 0x5   , 0x1C50 , 0x11  , 0x2351, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  2291.    {"cmpxchg16b",0x5   , 0x1C50 , 0x11  , 0x2450, 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  2292.  
  2293. // Quarternary opcode map for vmptrld etc. Opcode byte = 0F C7 /6 mem
  2294. // Indexed by prefix: none/66/F2/F3
  2295. SOpcodeDef OpcodeMap52[4] = {
  2296. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2297.    {"vmptrld",   0x813 , 0      , 0x11  , 0x2351, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C7 /6 mem
  2298.    {"vmclear",   0x813 , 0x200  , 0x11  , 0x2351, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  2299.    {0,           0x813 , 0x800  , 0x11  , 0x2351, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2300.    {"vmxon",     0x813 , 0x400  , 0x11  , 0x2351, 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  2301.  
  2302. // Quarternary opcode map for movdq2q etc. Opcode byte = 0F D6
  2303. // Indexed by prefix: none/66/F2/F3
  2304. SOpcodeDef OpcodeMap53[4] = {
  2305. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2306.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2307.    {"movq",      0x6F  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     },    // 66: Link to movq m64,xmm / movq xmm,xmm
  2308.    {"movdq2q",   0x12  , 0x800  , 0x12  , 0x1351, 0x1450, 0     , 0     , 0     , 0     , 0     , 0     },    // F2
  2309.    {"movq2dq",   0x12  , 0x400  , 0x12  , 0x1450, 0x1351, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3
  2310.  
  2311. // Quarternary opcode map for cvtpd2dq etc. Opcode byte = 0F E6
  2312. // Indexed by prefix: none/66/F2/F3
  2313. SOpcodeDef OpcodeMap54[4] = {
  2314. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2315.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2316.    {"cvttpd2dq", 0x12  ,0x852200, 0x12  , 0x1F03, 0x24C , 0     , 0     , 0x33  , 0     , 0     , 0x2   },    // 66
  2317.    {"cvtpd2dq",  0x12  ,0x852800, 0x12  , 0x1F03, 0x24C , 0     , 0     , 0x37  , 0     , 0     , 0x2   },    // F2
  2318.    {"cvtdq2pd",  0x12  ,0xC50400, 0x12  , 0x124C, 0xF03 , 0     , 0     , 0x31  , 0x1214, 0     , 0x2   }};   // F3
  2319.  
  2320. // Quarternary opcode map for movntq etc. Opcode byte = 0F E7
  2321. // Indexed by prefix: none/66/F2/F3
  2322. SOpcodeDef OpcodeMap55[3] = {
  2323. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2324.    {"movntq",    0x11  , 0      , 0x13  , 0x2351, 0x1351, 0     , 0     , 0     , 0     , 0     , 0     },    //
  2325.    {"movntdq",   0x12  ,0x850200, 0x13  , 0x2250, 0x1250, 0     , 0     , 0x00  , 0     , 0     , 0x102 },    //
  2326.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // Illegal
  2327.  
  2328. // Quarternary opcode map for lddqu. Opcode byte = 0F F0
  2329. // Indexed by prefix: none/66/F2/F3
  2330. SOpcodeDef OpcodeMap56[4] = {
  2331. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2332.    {0,           0     , 0      , 0x12  , 0x1450, 0x1450, 0     , 0     , 0     , 0     , 0     , 0     },    // Illegal
  2333.    {0,           0     , 0x200  , 0x12  , 0x1450, 0x1450, 0     , 0     , 0     , 0     , 0     , 0     },    //
  2334.    {"lddqu",     0x13  , 0x58800, 0x12  , 0x1250, 0x251,  0     , 0     , 0     , 0     , 0     , 0x202 },    //
  2335.    {0,           0     , 0x400  , 0x12  , 0x1450, 0x1450, 0     , 0     , 0     , 0     , 0     , 0     }};   // Illegal
  2336.  
  2337. // Quarternary opcode map for maskmovq. Opcode byte = 0F F7
  2338. // Indexed by prefix: none/66/F2/F3
  2339. SOpcodeDef OpcodeMap57[3] = {
  2340. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2341.    {"maskmovq",  0x7   , 0x5    , 0x12  , 0x1351, 0x1351, 0     , 0     , 0     , 0     , 0     , 0x20  },    //
  2342.    {"maskmovdqu",0x12  , 0x18205, 0x12  , 0x1450, 0x1450, 0     , 0     , 0     , 0     , 0     , 0x22  },    //
  2343.    {0,           0     , 0      , 0x12  , 0x1450, 0x2450, 0     , 0     , 0     , 0     , 0     , 0     }};   // Illegal
  2344.  
  2345. // Tertiary opcode map for movd/movq. Opcode byte = 0F 6E
  2346. // Indexed by operand size 16/32/64
  2347. // First two lines are identical because operand size is determined only by REX.W prefix,
  2348. // while 66 prefix determines mmx or xmm register
  2349. // Note: VEX/EVEX version is in map B1
  2350. SOpcodeDef OpcodeMap58[3] = {
  2351. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2352.    {"movd",      0x7   , 0x11200, 0x12  , 0x1103, 0x3   , 0     , 0     , 0x00  , 0     , 0     , 0x2   },    // 0F 6E
  2353.    {"movd",      0x7   , 0x11200, 0x12  , 0x1103, 0x3   , 0     , 0     , 0x00  , 0     , 0     , 0x2   },    // 0F 6E
  2354.    {"movq",      0x4000, 0x11200, 0x12  , 0x1104, 0x4   , 0     , 0     , 0x00  , 0     , 0     , 0x2   }};   // 0F 6E. Name varies: movd or movq, though the operand is 64 bits
  2355.  
  2356. // Tertiary opcode map for movd/movq. Opcode byte = 0F 7E
  2357. // Indexed by prefix: none/66/F2/F3
  2358. SOpcodeDef OpcodeMap59[4] = {
  2359. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2360.    {0,           0x5A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 0F 7E. Link to map 5A. Name depends on REX.W prefix
  2361.    {0,           0x5A  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   , 0     },    // 66 0F 7E. Link to map 5A. Name depends on REX.W prefix
  2362.    {0,           0x7   , 0      , 0x4013, 0x3   , 0x1103, 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 7E. Doesn't exist
  2363.    {0,           0x5B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     }};   // F3 0F 7E. Link to map 5B. movq xmm,xmm/m64
  2364.  
  2365. // Quarternary opcode map for movd/movq. Opcode byte = 66 0F 7E
  2366. // Indexed by operand size 16/32/64
  2367. // First two lines are identical because operand size is determined only by REX.W prefix,
  2368. // while 66 prefix determines mmx or xmm register
  2369. SOpcodeDef OpcodeMap5A[3] = {
  2370. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2371.    {"movd",      0x7   , 0x11200, 0x13  , 0x3   , 0x1103, 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F 7E
  2372.    {"movd",      0x7   , 0x11200, 0x13  , 0x3   , 0x1103, 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F 7E
  2373.    {"movq",      0x4000, 0x11200, 0x13  , 0x4   , 0x1104, 0x0   , 0     , 0     , 0     , 0     , 0x2   }};   // 0F 7E. Name varies: movd or movq, though the operand is 64 bits
  2374.  
  2375. // Quarternary opcode map for movq xmm,xmm/m64. Opcode byte = F3 0F 7E
  2376. // Indexed by memory vs. register operand
  2377. // Link to here from both map 59 (without VEX) and map E2 (with VEX)
  2378. SOpcodeDef OpcodeMap5B[2] = {
  2379.    {"movq",      0x12  ,0x812400, 0x12  , 0x1404, 0x4   , 0     , 0     , 0     , 0     , 0     , 0x2   },    // F3 0F 7E. movq xmm,m64
  2380.    {"movq",      0x12  ,0x812400, 0x12  , 0x1404, 0x404 , 0     , 0     , 0     , 0     , 0     , 0x2   }};   // F3 0F 7E. movq xmm,xmm
  2381.  
  2382. // Tertiary opcode map for haddps/pd etc. Opcode byte = 0F 7C
  2383. // Indexed by prefixes (none, 66, F2, F3)
  2384. SOpcodeDef OpcodeMap5C[4] = {
  2385. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2386.    {0,           0     , 0      , 0x4012, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7C
  2387.    {"haddpd",    0x13  , 0xD0A00, 0x19  , 0x124C, 0x124C, 0x24C , 0     , 0     , 0     , 0     , 0x2   },    // 66 0F 7C
  2388.    {"haddps",    0x13  , 0xD0A00, 0x19  , 0x124B, 0x124B, 0x24B , 0     , 0     , 0     , 0     , 0x2   },    // F2 0F 7C
  2389.    {0,           0     , 0      , 0x4012, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 7C
  2390.  
  2391. // Tertiary opcode map for hsubps/pd etc. Opcode byte = 0F 7D
  2392. // Indexed by prefixes (none, 66, F2, F3)
  2393. SOpcodeDef OpcodeMap5D[4] = {
  2394. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2395.    {0,           0     , 0      , 0x4012, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7D
  2396.    {"hsubpd",    0x13  , 0xD0A00, 0x19  , 0x124C, 0x124C, 0x24C , 0     , 0     , 0     , 0     , 0x2   },    // 66 0F 7D
  2397.    {"hsubps",    0x13  , 0xD0A00, 0x19  , 0x124B, 0x124B, 0x24B , 0     , 0     , 0     , 0     , 0x2   },    // F2 0F 7D
  2398.    {0,           0     , 0      , 0x4012, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 7D
  2399.  
  2400. // Tertiary opcode map for lar. Opcode byte = 0F 02
  2401. // Indexed by memory vs. register operand
  2402. SOpcodeDef OpcodeMap5E[2] = {
  2403. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2404.    {"lar",       0x802 , 0x1100 , 0x12  , 0x1009, 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 02 memory
  2405.    {"lar",       0x802 , 0x1100 , 0x12  , 0x1009, 0x1009, 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 02 register
  2406.  
  2407. // Tertiary opcode map for lsl. Opcode byte = 0F 03
  2408. // Indexed by memory vs. register operand
  2409. SOpcodeDef OpcodeMap5F[2] = {
  2410. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2411.    {"lsl",       0x802 , 0x1100 , 0x12  , 0x1009, 0x2002, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 03 memory
  2412.    {"lsl",       0x802 , 0x1100 , 0x12  , 0x1009, 0x1009, 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 03 register
  2413.  
  2414. // Tertiary opcode map for popcnt. Opcode byte = 0F B8
  2415. // Indexed by prefixes (none, 66, F2, F3)
  2416. SOpcodeDef OpcodeMap60[4] = {
  2417. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2418.    {"jmpe;Itanium only",0,0     , 0x11  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },    // 0F B8
  2419.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F B8
  2420.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F B8
  2421.    {"popcnt",    0x16  ,0x11500 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F B8
  2422.  
  2423. // Quarternary opcode map for pextrb. Opcode byte = 0F 3A 14
  2424. // Indexed by memory vs. register operand
  2425. SOpcodeDef OpcodeMap61[2] = {
  2426. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2427.    {"pextrb",    0x15  ,0x81A200, 0x53  , 0x2001, 0x1401, 0x31  , 0     , 0x1000, 0     , 0     , 0x2   },    // 0F 3A 14 memory
  2428.    {"pextrb",    0x15  ,0x81A200, 0x53  , 0x1009, 0x1401, 0x31  , 0     , 0     , 0     , 0     , 0x2   }};   // 0F 3A 14 register
  2429.  
  2430. // Quarternary opcode map for pextrw. Opcode byte = 0F 3A 15
  2431. // Indexed by memory vs. register operand
  2432. SOpcodeDef OpcodeMap62[2] = {
  2433. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2434.    {"pextrw",    0x15  ,0x81A200, 0x53  , 0x2002, 0x1402, 0x31  , 0     , 0x1000, 0     , 0     , 0x2   },    // 0F 3A 15 memory
  2435.    {"pextrw",    0x15  ,0x81A200, 0x53  , 0x1002, 0x1402, 0x31  , 0     , 0     , 0     , 0     , 0x2   }};   // 0F 3A 15 register
  2436.  
  2437. // Quarternary opcode map for pextrd/q. Opcode byte = 0F 3A 16
  2438. // Indexed by operand size (16, 32, 64)
  2439. SOpcodeDef OpcodeMap63[3] = {
  2440. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2441.    {"pextr",     0x15  ,0x81B200, 0x53  , 0x3   , 0x1403, 0x31  , 0     , 0x1000, 0     , 0     , 3     },    // 0F 3A 16 pextrd
  2442.    {"pextr",     0x15  ,0x81B200, 0x53  , 0x3   , 0x1403, 0x31  , 0     , 0x1000, 0     , 0     , 3     },    // 0F 3A 16 pextrd
  2443.    {"pextr",     0x15  ,0x81B200, 0x53  , 0x4   , 0x1404, 0x31  , 0     , 0x1000, 0     , 0     , 3     }};   // 0F 3A 16 pextrq
  2444.  
  2445. // Opcode map for AMD instructions with XOP prefix and mmmmm = 01000
  2446. // Indexed by first opcode byte after XOP prefix. Has one byte immediate data
  2447. SOpcodeDef OpcodeMap64[] = {
  2448. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2449.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 00
  2450.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 01
  2451.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 02
  2452.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 03
  2453.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 04
  2454.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 05
  2455.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 06
  2456.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 07
  2457.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 08
  2458.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 09
  2459.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 0A
  2460.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 0B
  2461.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 0C
  2462.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 0D
  2463.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 0E
  2464.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 0F
  2465.  
  2466.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 10
  2467.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 11
  2468.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 12
  2469.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 13
  2470.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 14
  2471.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 15
  2472.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 16
  2473.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 17
  2474.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 18
  2475.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 19
  2476.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 1A
  2477.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 1B
  2478.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 1C
  2479.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 1D
  2480.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 1E
  2481.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 1F
  2482.  
  2483.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 20
  2484.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 21
  2485.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 22
  2486.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 23
  2487.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 24
  2488.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 25
  2489.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 26
  2490.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 27
  2491.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 28
  2492.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 29
  2493.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 2A
  2494.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 2B
  2495.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 2C
  2496.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 2D
  2497.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 2E
  2498.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 2F
  2499.  
  2500.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 30
  2501.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 31
  2502.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 32
  2503.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 33
  2504.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 34
  2505.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 35
  2506.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 36
  2507.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 37
  2508.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 38
  2509.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 39
  2510.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 3A
  2511.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 3B
  2512.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 3C
  2513.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 3D
  2514.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 3E
  2515.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 3F
  2516.  
  2517.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 40
  2518.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 41
  2519.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 42
  2520.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 43
  2521.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 44
  2522.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 45
  2523.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 46
  2524.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 47
  2525.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 48
  2526.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 49
  2527.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 4A
  2528.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 4B
  2529.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 4C
  2530.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 4D
  2531.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 4E
  2532.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 4F
  2533.  
  2534.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 50
  2535.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 51
  2536.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 52
  2537.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 53
  2538.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 54
  2539.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 55
  2540.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 56
  2541.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 57
  2542.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 58
  2543.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 59
  2544.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 5A
  2545.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 5B
  2546.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 5C
  2547.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 5D
  2548.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 5E
  2549.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 5F
  2550.  
  2551.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 60
  2552.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 61
  2553.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 62
  2554.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 63
  2555.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 64
  2556.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 65
  2557.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 66
  2558.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 67
  2559.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 68
  2560.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 69
  2561.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 6A
  2562.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 6B
  2563.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 6C
  2564.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 6D
  2565.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 6E
  2566.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 6F
  2567.  
  2568.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 70
  2569.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 71
  2570.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 72
  2571.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 73
  2572.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 74
  2573.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 75
  2574.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 76
  2575.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 77
  2576.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 78
  2577.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 79
  2578.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 7A
  2579.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 7B
  2580.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 7C
  2581.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 7D
  2582.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 7E
  2583.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 7F
  2584.  
  2585.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 80
  2586.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 81
  2587.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 82
  2588.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 83
  2589.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 84
  2590.    {"vpmacssww", 0x1005, 0xB0000, 0x5C,   0x1202, 0x1202, 0x202 , 0x1202, 0     , 0     , 0     , 0     },    // XOP(8) 85
  2591.    {"vpmacsswd", 0x1005, 0xB0000, 0x5C,   0x1203, 0x1202, 0x202 , 0x1203, 0     , 0     , 0     , 0     },    // XOP(8) 86
  2592.    {"vpmacssdql",0x1005, 0xB0000, 0x5C,   0x1204, 0x1203, 0x203 , 0x1204, 0     , 0     , 0     , 0     },    // XOP(8) 87
  2593.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 88
  2594.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 89
  2595.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 8A
  2596.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 8B
  2597.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 8C
  2598.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 8D
  2599.    {"vpmacssdd", 0x1005, 0xB0000, 0x5C,   0x1203, 0x1203, 0x203 , 0x1203, 0     , 0     , 0     , 0     },    // XOP(8) 8E
  2600.    {"vpmacssdqh",0x1005, 0xB0000, 0x5C,   0x1204, 0x1203, 0x203 , 0x1204, 0     , 0     , 0     , 0     },    // XOP(8) 8F
  2601.  
  2602.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 90
  2603.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 91
  2604.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 92
  2605.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 93
  2606.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 94
  2607.    {"vpmacsww",  0x1005, 0xB0000, 0x5C,   0x1202, 0x1202, 0x202 , 0x1202, 0     , 0     , 0     , 0     },    // XOP(8) 95
  2608.    {"vpmacswd",  0x1005, 0xB0000, 0x5C,   0x1203, 0x1202, 0x202 , 0x1203, 0     , 0     , 0     , 0     },    // XOP(8) 96
  2609.    {"vpmacsdql", 0x1005, 0xB0000, 0x5C,   0x1204, 0x1203, 0x203 , 0x1204, 0     , 0     , 0     , 0     },    // XOP(8) 97
  2610.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 98
  2611.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 99
  2612.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 9A
  2613.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 9B
  2614.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 9C
  2615.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) 9D
  2616.    {"vpmacsdd",  0x1005, 0xB0000, 0x5C,   0x1203, 0x1203, 0x203 , 0x1203, 0     , 0     , 0     , 0     },    // XOP(8) 9E
  2617.    {"vpmacsdqh", 0x1005, 0xB0000, 0x5C,   0x1204, 0x1203, 0x203 , 0x1204, 0     , 0     , 0     , 0     },    // XOP(8) 9F
  2618.  
  2619. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2620.    {"cvtph2ps",  0x1D  , 0x70000, 0x52  , 0x124B, 0x402 , 0x31  , 0     , 0     , 0     , 0     , 0     },    // XOP(8) A0
  2621.    {"cvtps2ph",  0x1D  , 0x70000, 0x53  , 0x402,  0x124B, 0x31  , 0     , 0     , 0     , 0     , 0     },    // XOP(8) A1
  2622.    {"vpcmov",    0x1005, 0xF7000, 0x5C,   0x1201, 0x1201, 0x201 , 0x201 , 0     , 0     , 0     , 0     },    // XOP(8) A2
  2623.    {"vpperm",    0x1005, 0xB7000, 0x5C,   0x1201, 0x1201, 0x201 , 0x201 , 0     , 0     , 0     , 0     },    // XOP(8) A3
  2624.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) A4
  2625.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) A5
  2626.    {"vpmadcsswd",0x1005, 0xB0000, 0x5C,   0x1203, 0x1202, 0x202 , 0x1203, 0     , 0     , 0     , 0     },    // XOP(8) A6
  2627.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) A7
  2628.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) A8
  2629.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) A9
  2630.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) AA
  2631.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) AB
  2632.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) AC
  2633.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) AD
  2634.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) AE
  2635.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) AF
  2636.  
  2637.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B0
  2638.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B1
  2639.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B2
  2640.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B3
  2641.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B4
  2642.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B5
  2643.    {"vpmadcswd", 0x1005, 0xB0000, 0x5C,   0x1203, 0x1202, 0x202 , 0x1203, 0     , 0     , 0     , 0     },    // XOP(8) B6
  2644.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B7
  2645.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B8
  2646.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) B9
  2647.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) BA
  2648.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) BB
  2649.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) BC
  2650.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) BD
  2651.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) BE
  2652.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) BF
  2653.  
  2654.    {"vprotb",    0x1005, 0x30000, 0x52  , 0x1401, 0x401 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C0
  2655.    {"vprotw",    0x1005, 0x30000, 0x52  , 0x1402, 0x402 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C1
  2656.    {"vprotd",    0x1005, 0x30000, 0x52  , 0x1403, 0x403 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C2
  2657.    {"vprotq",    0x1005, 0x30000, 0x52  , 0x1404, 0x404 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C3
  2658.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C4
  2659.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C5
  2660.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C6
  2661.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C7
  2662.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C8
  2663.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) C9
  2664.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) CA
  2665.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) CB
  2666.    {"vpcomb",    0x1005, 0xB0000, 0x59  , 0x1401, 0x1401, 0x401 , 0x31  , 0     , 0     , 0     , 0     },    // XOP(8) CC
  2667.    {"vpcomw",    0x1005, 0xB0000, 0x59  , 0x1402, 0x1402, 0x402 , 0x31  , 0     , 0     , 0     , 0     },    // XOP(8) CD
  2668.    {"vpcomd",    0x1005, 0xB0000, 0x59  , 0x1403, 0x1403, 0x403 , 0x31  , 0     , 0     , 0     , 0     },    // XOP(8) CE
  2669.    {"vpcomq",    0x1005, 0xB0000, 0x59  , 0x1404, 0x1404, 0x404 , 0x31  , 0     , 0     , 0     , 0     },    // XOP(8) CF
  2670.  
  2671.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D0
  2672.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D1
  2673.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D2
  2674.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D3
  2675.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D4
  2676.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D5
  2677.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D6
  2678.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D7
  2679.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D8
  2680.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) D9
  2681.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) DA
  2682.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) DB
  2683.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) DC
  2684.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) DD
  2685.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) DE
  2686.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) DF
  2687.  
  2688.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E0
  2689.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E1
  2690.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E2
  2691.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E3
  2692.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E4
  2693.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E5
  2694.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E6
  2695.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E7
  2696.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E8
  2697.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) E9
  2698.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) EA
  2699.    {0,           0     , 0      , 0x2059, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(8) EB
  2700.    {"vpcomub",   0x1005, 0xB0000, 0x59  , 0x1401, 0x1401, 0x401 , 0x31  , 0     , 0     , 0     , 0     },    // XOP(8) EC
  2701.    {"vpcomuw",   0x1005, 0xB0000, 0x59  , 0x1402, 0x1402, 0x402 , 0x31  , 0     , 0     , 0     , 0     },    // XOP(8) ED
  2702.    {"vpcomud",   0x1005, 0xB0000, 0x59  , 0x1403, 0x1403, 0x403 , 0x31  , 0     , 0     , 0     , 0     },    // XOP(8) EE
  2703.    {"vpcomuq",   0x1005, 0xB0000, 0x59  , 0x1404, 0x1404, 0x404 , 0x31  , 0     , 0     , 0     , 0     }};   // XOP(8) EF
  2704.  
  2705.  
  2706. // Opcode map for AMD instructions with XOP prefix and mmmmm = 01001
  2707. // Indexed by first opcode byte after XOP prefix. Has no immediate data
  2708. SOpcodeDef OpcodeMap65[] = {
  2709. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2710.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 00
  2711.    {0,           0xD4  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // XOP(9) 01. Link blcfill etc.
  2712.    {0,           0xD5  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // XOP(9) 02. Link blcmsk  etc.
  2713.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 03
  2714.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 04
  2715.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 05
  2716.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 06
  2717.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 07
  2718.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 08
  2719.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 09
  2720.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 0A
  2721.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 0B
  2722.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 0C
  2723.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 0D
  2724.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 0E
  2725.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 0F
  2726.  
  2727.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 10
  2728.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 11
  2729.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 12
  2730.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 13
  2731.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 14
  2732.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 15
  2733.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 16
  2734.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 17
  2735.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 18
  2736.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 19
  2737.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 1A
  2738.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 1B
  2739.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 1C
  2740.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 1D
  2741.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 1E
  2742.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 1F
  2743.  
  2744.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 20
  2745.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 21
  2746.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 22
  2747.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 23
  2748.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 24
  2749.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 25
  2750.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 26
  2751.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 27
  2752.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 28
  2753.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 29
  2754.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 2A
  2755.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 2B
  2756.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 2C
  2757.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 2D
  2758.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 2E
  2759.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 2F
  2760.  
  2761.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 30
  2762.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 31
  2763.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 32
  2764.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 33
  2765.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 34
  2766.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 35
  2767.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 36
  2768.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 37
  2769.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 38
  2770.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 39
  2771.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 3A
  2772.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 3B
  2773.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 3C
  2774.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 3D
  2775.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 3E
  2776.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 3F
  2777.  
  2778.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 40
  2779.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 41
  2780.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 42
  2781.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 43
  2782.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 44
  2783.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 45
  2784.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 46
  2785.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 47
  2786.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 48
  2787.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 49
  2788.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 4A
  2789.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 4B
  2790.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 4C
  2791.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 4D
  2792.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 4E
  2793.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 4F
  2794.  
  2795.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 50
  2796.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 51
  2797.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 52
  2798.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 53
  2799.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 54
  2800.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 55
  2801.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 56
  2802.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 57
  2803.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 58
  2804.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 59
  2805.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 5A
  2806.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 5B
  2807.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 5C
  2808.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 5D
  2809.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 5E
  2810.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 5F
  2811.  
  2812.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 60
  2813.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 61
  2814.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 62
  2815.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 63
  2816.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 64
  2817.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 65
  2818.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 66
  2819.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 67
  2820.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 68
  2821.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 69
  2822.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 6A
  2823.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 6B
  2824.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 6C
  2825.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 6D
  2826.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 6E
  2827.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 6F
  2828.  
  2829.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 70
  2830.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 71
  2831.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 72
  2832.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 73
  2833.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 74
  2834.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 75
  2835.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 76
  2836.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 77
  2837.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 78
  2838.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 79
  2839.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 7A
  2840.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 7B
  2841.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 7C
  2842.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 7D
  2843.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 7E
  2844.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 7F
  2845.  
  2846. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2847.    {"frczps",    0x11005,0x70000, 0x12  , 0x124B, 0x24B , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 80
  2848.    {"frczpd",    0x11005,0x70000, 0x12  , 0x124C, 0x24C , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 81
  2849.    {"frczss",    0x11005,0x70000, 0x12  , 0x124B, 0x4B  , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 82
  2850.    {"frczsd",    0x11005,0x70000, 0x12  , 0x124C, 0x4C  , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 83
  2851.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 84
  2852.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 85
  2853.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 86
  2854.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 87
  2855.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 88
  2856.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 89
  2857.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 8A
  2858.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 8B
  2859.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 8C
  2860.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 8D
  2861.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 8E
  2862.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 8F
  2863.  
  2864. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2865.    {"vprotb",    0x1005, 0xB7000, 0x19  , 0x1401, 0x401 , 0x401 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 90
  2866.    {"vprotw",    0x1005, 0xB7000, 0x19  , 0x1402, 0x402 , 0x402 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 91
  2867.    {"vprotd",    0x1005, 0xB7000, 0x19  , 0x1403, 0x403 , 0x403 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 92
  2868.    {"vprotq",    0x1005, 0xB7000, 0x19  , 0x1404, 0x404 , 0x404 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 93
  2869.    {"vpshlb",    0x1005, 0xB7000, 0x19  , 0x1401, 0x401 , 0x401 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 94
  2870.    {"vpshlw",    0x1005, 0xB7000, 0x19  , 0x1402, 0x402 , 0x402 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 95
  2871.    {"vpshld",    0x1005, 0xB7000, 0x19  , 0x1403, 0x403 , 0x403 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 96
  2872.    {"vpshlq",    0x1005, 0xB7000, 0x19  , 0x1404, 0x404 , 0x404 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 97
  2873.    {"vpshab",    0x1005, 0xB7000, 0x19  , 0x1401, 0x401 , 0x401 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 98
  2874.    {"vpshaw",    0x1005, 0xB7000, 0x19  , 0x1402, 0x402 , 0x402 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 99
  2875.    {"vpshad",    0x1005, 0xB7000, 0x19  , 0x1403, 0x403 , 0x403 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 9A
  2876.    {"vpshaq",    0x1005, 0xB7000, 0x19  , 0x1404, 0x404 , 0x404 , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 9B
  2877.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 9C
  2878.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 9D
  2879.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 9E
  2880.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 9F
  2881.  
  2882.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A0
  2883.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A1
  2884.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A2
  2885.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A3
  2886.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A4
  2887.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A5
  2888.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A6
  2889.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A7
  2890.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A8
  2891.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) A9
  2892.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) AA
  2893.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) AB
  2894.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) AC
  2895.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) AD
  2896.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) AE
  2897.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) AF
  2898.  
  2899.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B0
  2900.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B1
  2901.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B2
  2902.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B3
  2903.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B4
  2904.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B5
  2905.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B6
  2906.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B7
  2907.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B8
  2908.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) B9
  2909.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) BA
  2910.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) BB
  2911.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) BC
  2912.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) BD
  2913.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) BE
  2914.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) BF
  2915.  
  2916. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2917.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C0
  2918.    {"vphaddbw",  0x1005, 0x30000, 0x12  , 0x1402, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C1
  2919.    {"vphaddbd",  0x1005, 0x30000, 0x12  , 0x1403, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C2
  2920.    {"vphaddbq",  0x1005, 0x30000, 0x12  , 0x1404, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C3
  2921.    {0,           0     , 0      , 0x2019, 0x0,    0   ,   0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C4
  2922.    {0,           0     , 0      , 0x2019, 0x0,    0   ,   0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C5
  2923.    {"vphaddwd",  0x1005, 0x30000, 0x12  , 0x1403, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C6
  2924.    {"vphaddwq",  0x1005, 0x30000, 0x12  , 0x1404, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C7
  2925.    {0,           0     , 0      , 0x2019, 0x0,    0   ,   0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C8
  2926.    {0,           0     , 0      , 0x2019, 0x0,    0   ,   0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) C9
  2927.    {0,           0     , 0      , 0x2019, 0x0,    0   ,   0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) CA
  2928.    {"vphadddq",  0x1005, 0x30000, 0x12  , 0x1404, 0x403 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) CB
  2929.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) CC
  2930.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) CD
  2931.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) CE
  2932.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) CF
  2933.  
  2934.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D0
  2935.    {"vphaddubw", 0x1005, 0x30000, 0x12  , 0x1402, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D1
  2936.    {"vphaddubd", 0x1005, 0x30000, 0x12  , 0x1403, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D2
  2937.    {"vphaddubq", 0x1005, 0x30000, 0x12  , 0x1404, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D3
  2938.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D3
  2939.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D4
  2940.    {"vphadduwd", 0x1005, 0x30000, 0x12  , 0x1403, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D6
  2941.    {"vphadduwq", 0x1005, 0x30000, 0x12  , 0x1404, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D7
  2942.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D7
  2943.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D8
  2944.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) D9
  2945.    {"vphaddudq", 0x1005, 0x30000, 0x12  , 0x1404, 0x403 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) DB
  2946.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) DC
  2947.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) DD
  2948.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) DE
  2949.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) DF
  2950.  
  2951.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E0
  2952.    {"vphsubbw",  0x1005, 0x30000, 0x12  , 0x1402, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E1
  2953.    {"vphsubwd",  0x1005, 0x30000, 0x12  , 0x1403, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E2
  2954.    {"vphsubdq",  0x1005, 0x30000, 0x12  , 0x1404, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E3
  2955.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E4
  2956.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E5
  2957.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E6
  2958.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E7
  2959.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E8
  2960.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) E9
  2961.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) EA
  2962.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) EB
  2963.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) EC
  2964.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) ED
  2965.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) EE
  2966.    {0,           0     , 0      , 0x2019, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // XOP(9) EF
  2967.  
  2968. // Opcode map for AMD instructions with XOP prefix and mmmmm = 01010
  2969. // Indexed by first opcode byte after XOP prefix. Has 4 bytes immediate data
  2970. SOpcodeDef OpcodeMap66[] = {
  2971. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2972.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 00
  2973.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 01
  2974.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 02
  2975.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 03
  2976.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 04
  2977.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 05
  2978.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 06
  2979.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 07
  2980.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 08
  2981.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 09
  2982.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 0A
  2983.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 0B
  2984.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 0C
  2985.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 0D
  2986.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 0E
  2987.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 0F
  2988.  
  2989.    {"bextr",     0x1007, 0x11000, 0x92  , 0x1009, 0x9   , 0x33  , 0     , 0     , 0     , 0     , 0     },    // XOP(0xA) 10
  2990.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // XOP(0xA) 11
  2991.  
  2992.  
  2993. // Opcode map for AMD instructions with XOP prefix and mmmmm = 01011 or whatever (vacant)
  2994. // Indexed by first opcode byte after XOP prefix.
  2995. SOpcodeDef OpcodeMap67[] = {
  2996. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  2997.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // XOP(0xB) 00
  2998.  
  2999.  
  3000. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 24
  3001. // Indexed by third opcode byte
  3002. // AMD SSE5 instructions with three or four operands
  3003.  
  3004. //************************* NOTE ***********************
  3005. //  These proposed codes have never been implemented.
  3006. //  Specifications have been changed for the sake of compatibility with Intel AVX coding scheme
  3007. // *****************************************************
  3008. SOpcodeDef OpcodeMap68[] = {
  3009. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3010.    {"fmaddps",   0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 00
  3011.    {"fmaddpd",   0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 01
  3012.    {"fmaddss",   0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 02
  3013.    {"fmaddsd",   0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 03
  3014.    {"fmaddps",   0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 04
  3015.    {"fmaddpd",   0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 05
  3016.    {"fmaddss",   0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 06
  3017.    {"fmaddsd",   0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 07
  3018.    {"fmsubps",   0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 08
  3019.    {"fmsubpd",   0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 09
  3020.    {"fmsubss",   0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 0A
  3021.    {"fmsubsd",   0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 0B
  3022.    {"fmsubps",   0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 0C
  3023.    {"fmsubpd",   0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 0D
  3024.    {"fmsubss",   0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 0E
  3025.    {"fmsubsd",   0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 0F
  3026.  
  3027.    {"fnmaddps",  0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 10
  3028.    {"fnmaddpd",  0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 11
  3029.    {"fnmaddss",  0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 12
  3030.    {"fnmaddsd",  0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 13
  3031.    {"fnmaddps",  0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 14
  3032.    {"fnmaddpd",  0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 15
  3033.    {"fnmaddss",  0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 16
  3034.    {"fnmaddsd",  0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 17
  3035.    {"fnmsubps",  0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 18
  3036.    {"fnmsubpd",  0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 19
  3037.    {"fnmsubss",  0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 1A
  3038.    {"fnmsubsd",  0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 1B
  3039.    {"fnmsubps",  0x21006,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 1C
  3040.    {"fnmsubpd",  0x21006,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 1D
  3041.    {"fnmsubss",  0x21006,0x0    , 0x15  , 0x104B, 0x4B  , 0x4B  , 0x4B  , 0     , 0     , 0     , 0     },    // 0F 24 1E
  3042.    {"fnmsubsd",  0x21006,0x0    , 0x15  , 0x104C, 0x4C  , 0x4C  , 0x4C  , 0     , 0     , 0     , 0     },    // 0F 24 1F
  3043.  
  3044.    {"permps",    0x21005,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 20
  3045.    {"permpd",    0x21005,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 21
  3046.    {"pcmov",     0x21005,0x0    , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 22
  3047.    {"pperm",     0x21005,0x0    , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 23
  3048.    {"permps",    0x21005,0x0    , 0x15  , 0x124B, 0x24B , 0x24B , 0x24B , 0     , 0     , 0     , 0     },    // 0F 24 24
  3049.    {"permpd",    0x21005,0x0    , 0x15  , 0x124C, 0x24C , 0x24C , 0x24C , 0     , 0     , 0     , 0     },    // 0F 24 25
  3050.    {"pcmov",     0x21005,0x0    , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 26
  3051.    {"pperm",     0x21005,0x0    , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 27
  3052.  
  3053.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 28
  3054.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 29
  3055.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 2A
  3056.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 2B
  3057.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 2C
  3058.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 2D
  3059.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 2E
  3060.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 2F
  3061.  
  3062.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 30
  3063.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 31
  3064.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 32
  3065.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 33
  3066.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 34
  3067.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 35
  3068.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 36
  3069.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 37
  3070.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 38
  3071.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 39
  3072.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 3A
  3073.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 3B
  3074.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 3C
  3075.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 3D
  3076.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 3E
  3077.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 3F
  3078.  
  3079.    {"protb",     0x21005,0x0    , 0x14  , 0x1401, 0x401 , 0x401 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 40
  3080.    {"protw",     0x21005,0x0    , 0x14  , 0x1402, 0x402 , 0x402 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 41
  3081.    {"protd",     0x21005,0x0    , 0x14  , 0x1403, 0x403 , 0x403 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 42
  3082.    {"protq",     0x21005,0x0    , 0x14  , 0x1404, 0x404 , 0x404 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 43
  3083.    {"pshlb",     0x21005,0x0    , 0x14  , 0x1401, 0x401 , 0x401 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 44
  3084.    {"pshlw",     0x21005,0x0    , 0x14  , 0x1402, 0x402 , 0x402 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 45
  3085.    {"pshld",     0x21005,0x0    , 0x14  , 0x1403, 0x403 , 0x403 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 46
  3086.    {"pshlq",     0x21005,0x0    , 0x14  , 0x1404, 0x404 , 0x404 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 47
  3087.    {"pshab",     0x21005,0x0    , 0x14  , 0x1401, 0x401 , 0x401 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 48
  3088.    {"pshaw",     0x21005,0x0    , 0x14  , 0x1402, 0x402 , 0x402 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 49
  3089.    {"pshad",     0x21005,0x0    , 0x14  , 0x1403, 0x403 , 0x403 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 4A
  3090.    {"pshaq",     0x21005,0x0    , 0x14  , 0x1404, 0x404 , 0x404 , 0     , 0     , 0     , 0     , 0     },    // 0F 24 4B
  3091.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 4C
  3092.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 4D
  3093.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 4E
  3094.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 4F
  3095.  
  3096.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 50
  3097.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 51
  3098.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 52
  3099.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 53
  3100.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 54
  3101.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 55
  3102.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 56
  3103.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 57
  3104.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 58
  3105.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 59
  3106.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 5A
  3107.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 5B
  3108.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 5C
  3109.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 5D
  3110.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 5E
  3111.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 5F
  3112.  
  3113.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 60
  3114.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 61
  3115.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 62
  3116.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 63
  3117.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 64
  3118.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 65
  3119.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 66
  3120.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 67
  3121.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 68
  3122.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 69
  3123.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 6A
  3124.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 6B
  3125.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 6C
  3126.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 6D
  3127.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 6E
  3128.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 6F
  3129.  
  3130.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 70
  3131.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 71
  3132.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 72
  3133.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 73
  3134.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 74
  3135.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 75
  3136.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 76
  3137.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 77
  3138.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 78
  3139.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 79
  3140.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 7A
  3141.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 7B
  3142.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 7C
  3143.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 7D
  3144.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 7E
  3145.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 7F
  3146.  
  3147.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 80
  3148.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 81
  3149.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 82
  3150.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 83
  3151.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 84
  3152.    {"pmacssww",  0x21005,0x0    , 0x15  , 0x1402, 0x402 , 0x402 , 0x402 , 0     , 0     , 0     , 0     },    // 0F 24 85
  3153.    {"pmacsswd",  0x21005,0x0    , 0x15  , 0x1403, 0x402 , 0x402 , 0x402 , 0     , 0     , 0     , 0     },    // 0F 24 86
  3154.    {"pmacssdql", 0x21005,0x0    , 0x15  , 0x1404, 0x403 , 0x403 , 0x403 , 0     , 0     , 0     , 0     },    // 0F 24 87
  3155.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 88
  3156.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 89
  3157.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 8A
  3158.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 8B
  3159.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 8C
  3160.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 8D
  3161.    {"pmacssdd",  0x21005,0x0    , 0x15  , 0x1403, 0x403 , 0x403 , 0x403 , 0     , 0     , 0     , 0     },    // 0F 24 8E
  3162.    {"pmacssdqh", 0x21005,0x0    , 0x15  , 0x1404, 0x403 , 0x403 , 0x403 , 0     , 0     , 0     , 0     },    // 0F 24 8F
  3163.  
  3164.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 90
  3165.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 91
  3166.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 92
  3167.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 93
  3168.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 94
  3169.    {"pmacsww",   0x21005,0x0    , 0x15  , 0x1402, 0x402 , 0x402 , 0x402 , 0     , 0     , 0     , 0     },    // 0F 24 95
  3170.    {"pmacswd",   0x21005,0x0    , 0x15  , 0x1403, 0x402 , 0x402 , 0x402 , 0     , 0     , 0     , 0     },    // 0F 24 96
  3171.    {"pmacsdql",  0x21005,0x0    , 0x15  , 0x1404, 0x403 , 0x403 , 0x403 , 0     , 0     , 0     , 0     },    // 0F 24 97
  3172.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 98
  3173.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 99
  3174.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 9A
  3175.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 9B
  3176.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 9C
  3177.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 9D
  3178.    {"pmacsdd",   0x21005,0x0    , 0x15  , 0x1403, 0x403 , 0x403 , 0x403 , 0     , 0     , 0     , 0     },    // 0F 24 9E
  3179.    {"pmacsdqh",  0x21005,0x0    , 0x15  , 0x1404, 0x403 , 0x403 , 0x403 , 0     , 0     , 0     , 0     },    // 0F 24 9F
  3180.  
  3181.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A0
  3182.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A1
  3183.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A2
  3184.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A3
  3185.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A4
  3186.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A5
  3187.    {"pmadcsswd", 0x21005,0x0    , 0x15  , 0x1403, 0x402 , 0x402 , 0x402 , 0     , 0     , 0     , 0     },    // 0F 24 A6
  3188.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A7
  3189.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A8
  3190.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 A9
  3191.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 AA
  3192.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 AB
  3193.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 AC
  3194.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 AD
  3195.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 AE
  3196.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 AF
  3197.  
  3198.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B0
  3199.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B1
  3200.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B2
  3201.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B3
  3202.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B4
  3203.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B5
  3204.    {"pmadcswd",  0x21005,0x0    , 0x15  , 0x1403, 0x402 , 0x402 , 0x402 , 0     , 0     , 0     , 0     },    // 0F 24 B6
  3205.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B7
  3206.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B8
  3207.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 B9
  3208.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 BA
  3209.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 BB
  3210.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 BC
  3211.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 BD
  3212.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 BE
  3213.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     },    // 0F 24 BF
  3214.  
  3215.    {0,           0     , 0      , 0x15  , 0x1450, 0x450 , 0x450 , 0x450 , 0     , 0     , 0     , 0     }};   // 0F 24 C0+. Reserved for future opcodes
  3216.  
  3217. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 25
  3218. // Indexed by third opcode byte
  3219. // AMD SSE5 instructions with three operands + immediate byte
  3220. // Note: These proposed codes have never been implemented.
  3221. SOpcodeDef OpcodeMap69[] = {
  3222. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3223.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 00
  3224.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 01
  3225.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 02
  3226.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 03
  3227.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 04
  3228.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 05
  3229.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 06
  3230.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 07
  3231.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 08
  3232.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 09
  3233.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 0A
  3234.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 0B
  3235.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 0C
  3236.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 0D
  3237.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 0E
  3238.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 0F
  3239.  
  3240.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 10
  3241.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 11
  3242.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 12
  3243.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 13
  3244.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 14
  3245.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 15
  3246.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 16
  3247.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 17
  3248.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 18
  3249.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 19
  3250.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 1A
  3251.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 1B
  3252.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 1C
  3253.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 1D
  3254.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 1E
  3255.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 1F
  3256.  
  3257.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 20
  3258.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 21
  3259.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 22
  3260.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 23
  3261.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 24
  3262.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 25
  3263.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 26
  3264.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 27
  3265.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 28
  3266.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 29
  3267.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 2A
  3268.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 2B
  3269.    {"comps",     0x21005,0x0    , 0x54  , 0x124B, 0x24B , 0x24B , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 2C
  3270.    {"compd",     0x21005,0x0    , 0x54  , 0x124C, 0x24C , 0x24C , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 2D
  3271.    {"comss",     0x21005,0x0    , 0x54  , 0x104B, 0x4B  , 0x4B  , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 2E
  3272.    {"comsd",     0x21005,0x0    , 0x54  , 0x104C, 0x4C  , 0x4C  , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 2F
  3273.  
  3274.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 30
  3275.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 31
  3276.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 32
  3277.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 33
  3278.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 34
  3279.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 35
  3280.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 36
  3281.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 37
  3282.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 38
  3283.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 39
  3284.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 3A
  3285.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 3B
  3286.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 3C
  3287.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 3D
  3288.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 3E
  3289.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 3F
  3290.  
  3291.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 40
  3292.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 41
  3293.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 42
  3294.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 43
  3295.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 44
  3296.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 45
  3297.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 46
  3298.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 47
  3299.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 48
  3300.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 49
  3301.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 4A
  3302.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 4B
  3303.    {"pcomb",     0x21005,0x0    , 0x54  , 0x1401, 0x401 , 0x401 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 4C
  3304.    {"pcomw",     0x21005,0x0    , 0x54  , 0x1402, 0x402 , 0x402 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 4D
  3305.    {"pcomd",     0x21005,0x0    , 0x54  , 0x1403, 0x403 , 0x403 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 4E
  3306.    {"pcomq",     0x21005,0x0    , 0x54  , 0x1404, 0x404 , 0x404 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 4F
  3307.  
  3308.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 50
  3309.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 51
  3310.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 52
  3311.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 53
  3312.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 54
  3313.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 55
  3314.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 56
  3315.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 57
  3316.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 58
  3317.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 59
  3318.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 5A
  3319.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 5B
  3320.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 5C
  3321.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 5D
  3322.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 5E
  3323.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 5F
  3324.  
  3325.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 60
  3326.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 61
  3327.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 62
  3328.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 63
  3329.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 64
  3330.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 65
  3331.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 66
  3332.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 67
  3333.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 68
  3334.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 69
  3335.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 6A
  3336.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 6B
  3337.    {"pcomub",    0x21005,0x0    , 0x54  , 0x1401, 0x401 , 0x401 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 6C
  3338.    {"pcomuw",    0x21005,0x0    , 0x54  , 0x1402, 0x402 , 0x402 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 6D
  3339.    {"pcomud",    0x21005,0x0    , 0x54  , 0x1403, 0x403 , 0x403 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 6E
  3340.    {"pcomuq",    0x21005,0x0    , 0x54  , 0x1404, 0x404 , 0x404 , 0x31  , 0     , 0     , 0     , 0     },    // 0F 25 6F
  3341.  
  3342.    {0,           0     , 0      , 0x54  , 0x1450, 0x450 , 0x450 , 0x31  , 0     , 0     , 0     , 0     }};   // 0F 25 70+. Reserved for future opcodes
  3343.  
  3344. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 7A
  3345. // Indexed by third opcode byte
  3346. // AMD SSE5 instructions with two operands
  3347. // Note: These proposed codes have never been implemented.
  3348. SOpcodeDef OpcodeMap6A[] = {
  3349. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3350.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 00
  3351.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 01
  3352.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 02
  3353.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 03
  3354.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 04
  3355.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 05
  3356.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 06
  3357.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 07
  3358.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 08
  3359.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 09
  3360.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 0A
  3361.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 0B
  3362.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 0C
  3363.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 0D
  3364.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 0E
  3365.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 0F
  3366.  
  3367.    {"frczps",    0x21005,0x0    , 0x12  , 0x124B, 0x24B , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 10
  3368.    {"frczpd",    0x21005,0x0    , 0x12  , 0x124C, 0x24C , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 11
  3369.    {"frczss",    0x21005,0x0    , 0x12  , 0x104B, 0x4B  , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 12
  3370.    {"frczsd",    0x21005,0x0    , 0x12  , 0x104C, 0x4C  , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 13
  3371.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 14
  3372.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 15
  3373.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 16
  3374.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 17
  3375.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 18
  3376.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 19
  3377.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 1A
  3378.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 1B
  3379.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 1C
  3380.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 1D
  3381.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 1E
  3382.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 1F
  3383.  
  3384.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 20
  3385.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 21
  3386.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 22
  3387.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 23
  3388.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 24
  3389.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 25
  3390.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 26
  3391.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 27
  3392.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 28
  3393.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 29
  3394.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 2A
  3395.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 2B
  3396.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 2C
  3397.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 2D
  3398.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 2E
  3399.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 2F
  3400.  
  3401.    {"cvtph2ps",  0x21007,0x0    , 0x12  , 0x124B, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 30
  3402.    {"cvtps2ph",  0x21007,0x0    , 0x13  , 0x402,  0x124B, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 31
  3403.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 32
  3404.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 33
  3405.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 34
  3406.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 35
  3407.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 36
  3408.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 37
  3409.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 38
  3410.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 39
  3411.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 3A
  3412.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 3B
  3413.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 3C
  3414.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 3D
  3415.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 3E
  3416.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 3F
  3417.  
  3418.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 40
  3419.    {"phaddbw",   0x21005,0x0    , 0x12  , 0x1402, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 41
  3420.    {"phaddbd",   0x21005,0x0    , 0x12  , 0x1403, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 42
  3421.    {"phaddbq",   0x21005,0x0    , 0x12  , 0x1404, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 43
  3422.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 44
  3423.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 45
  3424.    {"phaddwd",   0x21005,0x0    , 0x12  , 0x1403, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 46
  3425.    {"phaddwq",   0x21005,0x0    , 0x12  , 0x1404, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 47
  3426.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 48
  3427.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 49
  3428.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 4A
  3429.    {"phadddq",   0x21005,0x0    , 0x12  , 0x1404, 0x403 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 4B
  3430.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 4C
  3431.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 4D
  3432.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 4E
  3433.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 4F
  3434.  
  3435.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 50
  3436.    {"phaddubw",  0x21005,0x0    , 0x12  , 0x1402, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 51
  3437.    {"phaddubd",  0x21005,0x0    , 0x12  , 0x1403, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 52
  3438.    {"phaddubq",  0x21005,0x0    , 0x12  , 0x1404, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 53
  3439.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 54
  3440.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 55
  3441.    {"phadduwd",  0x21005,0x0    , 0x12  , 0x1403, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 56
  3442.    {"phadduwq",  0x21005,0x0    , 0x12  , 0x1404, 0x402 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 57
  3443.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 58
  3444.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 59
  3445.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 5A
  3446.    {"phaddudq",  0x21005,0x0    , 0x12  , 0x1404, 0x403 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 5B
  3447.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 5C
  3448.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 5D
  3449.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 5E
  3450.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 5F
  3451.  
  3452.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 60
  3453.    {"phsubbw",   0x21005,0x0    , 0x12  , 0x1402, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 61
  3454.    {"phsubwd",   0x21005,0x0    , 0x12  , 0x1403, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 62
  3455.    {"phsubdq",   0x21005,0x0    , 0x12  , 0x1404, 0x401 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 63
  3456.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 64
  3457.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 65
  3458.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 66
  3459.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 67
  3460.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 68
  3461.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 69
  3462.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 6A
  3463.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 6B
  3464.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 6C
  3465.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 6D
  3466.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7A 6E
  3467.    {0,           0     , 0      , 0x12  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 7A 6F
  3468.  
  3469. // Tertiary opcode map for 3-byte opcode. First two bytes = 0F 7B
  3470. // Indexed by third opcode byte
  3471. // AMD SSE5 instructions with two operands and an immediate byte operand
  3472. // Note: These proposed codes have never been implemented.
  3473. SOpcodeDef OpcodeMap6B[] = {
  3474. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3475.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 00
  3476.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 01
  3477.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 02
  3478.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 03
  3479.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 04
  3480.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 05
  3481.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 06
  3482.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 07
  3483.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 08
  3484.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 09
  3485.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 0A
  3486.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 0B
  3487.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 0C
  3488.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 0D
  3489.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 0E
  3490.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 0F
  3491.  
  3492.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 10
  3493.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 11
  3494.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 12
  3495.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 13
  3496.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 14
  3497.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 15
  3498.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 16
  3499.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 17
  3500.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 18
  3501.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 19
  3502.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 1A
  3503.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 1B
  3504.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 1C
  3505.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 1D
  3506.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 1E
  3507.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 1F
  3508.  
  3509.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 20
  3510.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 21
  3511.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 22
  3512.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 23
  3513.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 24
  3514.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 25
  3515.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 26
  3516.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 27
  3517.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 28
  3518.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 29
  3519.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 2A
  3520.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 2B
  3521.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 2C
  3522.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 2D
  3523.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 2E
  3524.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 2F
  3525.  
  3526.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 30
  3527.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 31
  3528.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 32
  3529.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 33
  3530.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 34
  3531.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 35
  3532.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 36
  3533.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 37
  3534.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 38
  3535.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 39
  3536.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 3A
  3537.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 3B
  3538.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 3C
  3539.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 3D
  3540.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 3E
  3541.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 3F
  3542.  
  3543.    {"protb"  ,   0x21005,0x0    , 0x52  , 0x1401, 0x401 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 40
  3544.    {"protw"  ,   0x21005,0x0    , 0x52  , 0x1402, 0x402 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 41
  3545.    {"protd"  ,   0x21005,0x0    , 0x52  , 0x1403, 0x403 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 42
  3546.    {"protq"  ,   0x21005,0x0    , 0x52  , 0x1404, 0x404 , 0x21  , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 43
  3547.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 44
  3548.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 45
  3549.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 46
  3550.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 47
  3551.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 48
  3552.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 49
  3553.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 4A
  3554.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 4B
  3555.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 4C
  3556.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 4D
  3557.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 4E
  3558.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 7B 4F
  3559.  
  3560.    {0,           0     , 0      , 0x52  , 0x1450, 0x450 , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F 7B 50+
  3561.  
  3562.  
  3563. // Tertiary opcode map for vmread, insrtw, extrq. Opcode byte = 0F 78
  3564. // Indexed by prefix = none, 66, F2, F3
  3565. SOpcodeDef OpcodeMap6C[4] = {
  3566. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3567.    {"vmread",    0x813 , 0x1000 , 0x13  , 0x4   , 0x1004, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 78. vmread              
  3568.    {0,           0x6E  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // 66 0F 78. link to map 6E: extrq xmm,xmm (AMD SSE4a)
  3569.    {"insrtq",    0x1004, 0x800  , 0x32  , 0x1450, 0x1450, 0x11  , 0x11  , 0     , 0     , 0     , 0     },    // F2 0F 78. insrtq xmm,xmm,i,i (AMD SSE4a)
  3570.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 78.
  3571.  
  3572. // Tertiary opcode map for vmwrite, insrtw, extrq. Opcode byte = 0F 79 without VEX prefix
  3573. // Indexed by prefix = none, 66, F2, F3
  3574. SOpcodeDef OpcodeMap6D[4] = {
  3575. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3576.    {"vmwrite",   0x813 , 0x1000 , 0x12  , 0x1004, 0x4   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 79. vmwrite
  3577.    {"extrq",     0x1004, 0x200  , 0x12  , 0x1450, 0x1450, 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F 79. link to map 6E: extrq xmm,xmm (AMD SSE4a)
  3578.    {"insrtq",    0x1004, 0x800  , 0x12  , 0x1450, 0x1450, 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 79. insrtq xmm,xmm (AMD SSE4a)
  3579.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 79.
  3580.  
  3581. // Quarternary opcode map for extrq. Opcode byte = 66 0F 78
  3582. // Indexed by reg bits = 0 - 7
  3583. SOpcodeDef OpcodeMap6E[] = {
  3584. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3585.    {"extrq",     0x1004, 0x200  , 0x31  , 0x1450, 0x11  , 0x11  , 0     , 0     , 0     , 0     , 0     },    // 66 0F 78. extrq xmm,i,i (AMD SSE4a)
  3586.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // reg bits must be 0
  3587.  
  3588. // Submap for movq xmm/m64,xmm. Opcode byte = 66 0F D6
  3589. // Indexed by memory vs. register operand
  3590.    SOpcodeDef OpcodeMap6F[2] = {
  3591.    {"movq",      0x12  ,0x812200, 0x13  , 0x4   , 0x1450, 0     , 0     , 0     , 0     , 0     , 0x2   },    // movq m64,xmm
  3592.    {"movq",      0x12  ,0x812200, 0x13  , 0x450 , 0x1450, 0     , 0     , 0     , 0     , 0     , 0x2   }};   // movq xmm,xmm
  3593.  
  3594. // Submap for movddup. Opcode byte = F2 0F 12
  3595. // Indexed by VEX.L
  3596. SOpcodeDef OpcodeMap70[4] = {
  3597.    {"movddup",   0x13  , 0x00800, 0x12  , 0x124C, 0x4C  , 0     , 0     , 0     , 0     , 0     , 0     },    // no VEX prefix
  3598.    {"vmovddup",  0x19  ,0x852800, 0x12  , 0x124C, 0x4C  , 0     , 0     , 0x20  , 0     , 0     , 0     },    // VEX.L = 0
  3599.    {"vmovddup",  0x19  ,0x852800, 0x12  , 0x124C, 0x24C , 0     , 0     , 0x20  , 0     , 0     , 0     },    // VEX.L = 1
  3600.    {"vmovddup",  0x19  ,0x852800, 0x12  , 0x124C, 0x24C , 0     , 0     , 0x20  , 0     , 0     , 0     }};   // EVEX.LL = 2
  3601.  
  3602. // Submap for movsd. Opcode byte = F2 0F 10
  3603. // Indexed by memory/register operand
  3604. SOpcodeDef OpcodeMap71[2] = {
  3605. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3606.    {"movsd",     0x12  ,0x812800, 0x12  , 0x104C, 0x4C  , 0     , 0     , 0x30  , 0     , 0     , 0x2   },    // F2 0F 10 mem
  3607.    {"movsd",     0x12  ,0x892800, 0x19  , 0x104C, 0x104C, 0x104C, 0     , 0x30  , 0     , 0     , 0x2   }};   // F2 0F 10 reg
  3608.  
  3609. // Submap for movss. Opcode byte = F3 0F 10
  3610. // Indexed by memory/register operand
  3611. SOpcodeDef OpcodeMap72[2] = {
  3612.    {"movss",     0x12  ,0x812400,  0x12  , 0x104B, 0x4B  , 0     , 0     , 0x30  , 0     , 0     , 0x2   },    // F3 0F 10 mem
  3613.    {"movss",     0x12  ,0x892400,  0x19  , 0x104B, 0x104B, 0x104B, 0     , 0x30  , 0     , 0     , 0x2   }};   // F3 0F 10 reg
  3614.  
  3615. // Submap for movsd. Opcode byte = F2 0F 11
  3616. // Indexed by memory/register operand
  3617. SOpcodeDef OpcodeMap73[2] = {
  3618.    {"movsd",     0x12  ,0x812800, 0x13  , 0x4C  , 0x104C, 0     , 0     , 0x30  , 0     , 0     , 0x2   },    // F2 0F 11 mem
  3619.    {"movsd",     0x12  ,0x892800, 0x19  , 0x104C, 0x104C, 0x104C, 0     , 0x10  , 0     , 0     , 0x2   }};   // F2 0F 11 reg
  3620.  
  3621. // Submap for movss. Opcode byte = F3 0F 11
  3622. // Indexed by memory/register operand
  3623. SOpcodeDef OpcodeMap74[2] = {
  3624.    {"movss",     0x12  ,0x812400, 0x13  , 0x4B  , 0x104B, 0     , 0     , 0x10  , 0     , 0     , 0x2   },    // F3 0F 11 mem
  3625.    {"movss",     0x12  ,0x892400, 0x19  , 0x104B, 0x104B, 0x104B, 0     , 0x30  , 0     , 0     , 0x2   }};   // F3 0F 11 reg
  3626.  
  3627. // Submap for pinsrd/pinsrq. Opcode byte = 0F 3A 22
  3628. // Indexed by operand size
  3629. SOpcodeDef OpcodeMap75[3] = {
  3630.    {"pinsrd",    0x15  ,0x89B200, 0x59  , 0x1403, 0x1403, 0x3   , 0x11  , 0x1000, 0     , 0     , 0x2   },    // (16 bit). 66 prefix actually is 32 bits
  3631.    {"pinsrd",    0x15  ,0x89B200, 0x59  , 0x1403, 0x1403, 0x3   , 0x11  , 0x1000, 0     , 0     , 0x2   },    // 32 bit
  3632.    {"pinsrq",    0x15  ,0x89B200, 0x59  , 0x1404, 0x1404, 0x4   , 0x11  , 0x1000, 0     , 0     , 0x2   }};   // 64 bit. REX.W prefix
  3633.  
  3634. // Submap for sqrtps/pd/sd/ss. Opcode byte = 0F 51
  3635. // Indexed by prefix = none, 66, F2, F3
  3636. SOpcodeDef OpcodeMap76[4] = {
  3637. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3638.    {"sqrtps",    0x11  ,0x852E00, 0x12  , 0x124F, 0x24F , 0     , 0     , 0x37  , 0     , 0     , 0x2   },    //    0F 51. sqrtps
  3639.    {"sqrtpd",    0x11  ,0x852E00, 0x12  , 0x124F, 0x24F , 0     , 0     , 0x37  , 0     , 0     , 0x2   },    // 66 0F 51. sqrtpd
  3640.    {"sqrtsd",    0x11  ,0x892E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x36  , 0     , 0     , 0x2   },    // F2 0F 51. sqrtsd
  3641.    {"sqrtss",    0x11  ,0x892E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0x36  , 0     , 0     , 0x2   }};   // F3 0F 51. sqrtss
  3642.  
  3643. // Submap for rsqrtps/ss. Opcode byte = 0F 52
  3644. // Indexed by prefix = none, 66, F2, F3
  3645. SOpcodeDef OpcodeMap77[4] = {
  3646.    {"rsqrtps",   0x11  , 0x50E00, 0x12  , 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F 52. rsqrtps
  3647.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // illegal
  3648.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // illegal
  3649.    {"rsqrtss",   0x11  , 0x90E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0x2   }};   // F3 0F 52. rsqrtss
  3650.  
  3651. // Submap for rcpps/ss. Opcode byte = 0F 53
  3652. // Indexed by prefix = none, 66, F2, F3
  3653. SOpcodeDef OpcodeMap78[4] = {
  3654.    {"rcpps",     0x11  , 0x50E00, 0x12  , 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F 53. rcpps
  3655.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // illegal
  3656.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // illegal
  3657.    {"rcpss",     0x11  , 0x90E00, 0x19  , 0x124F, 0x124F, 0x24F , 0     , 0     , 0     , 0     , 0x2   }};   // F3 0F 53. rcpss
  3658.  
  3659. // Submap for emms/vzeroupper/vzeroall. Opcode byte = 0F 77
  3660. // Indexed by VEX prefix and VEX.L
  3661. SOpcodeDef OpcodeMap79[3] = {
  3662. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3663.    {"emms",      0x7   , 0      , 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 77
  3664.    {"vzeroupper",0x19  , 0x10000, 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 77, L=0
  3665.    {"vzeroall",  0x19  , 0x50000, 0x2   , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // VEX 0F 77, L=1
  3666.  
  3667. // Submap for pmovsxbw. Opcode byte = 0F 38 20. Indexed by memory/register operand
  3668. SOpcodeDef OpcodeMap7A[2] = {
  3669. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3670.    {"pmovsxbw",  0x15  ,0x85A200, 0x12  , 0x1202, 0xF01 , 0     , 0     , 0x2220, 0     , 0     , 0x2   },    // 0F 38 20 mem, link by VEX.L
  3671.    {"pmovsxbw",  0x15  ,0x85A200, 0x12  , 0x1202, 0xF01 , 0     , 0     , 0x2220, 0     , 0     , 0x2   }};   // 0F 38 20 reg
  3672.  
  3673. // Submap for pmovsxbd. Opcode byte = 0F 38 21. Indexed by memory/register operand
  3674. SOpcodeDef OpcodeMap7B[2] = {
  3675.    {0,           0x7C  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F 38 21 mem, link by VEX.L
  3676.    {"pmovsxbd",  0x15  ,0x85A200, 0x12  , 0x1203, 0x401 , 0     , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F 38 21 reg
  3677.  
  3678. // Submap for pmovsxbd. Opcode byte = 0F 38 21 mem. Indexed by VEX.L
  3679. SOpcodeDef OpcodeMap7C[] = {
  3680.    {"pmovsxbd",  0x15  ,0x85A200, 0x12  , 0x1203, 0x3   , 0     , 0     , 0x2420 , 0     , 0     , 0x2   },    // 0F 38 21 L0
  3681.    {"pmovsxbd",  0x15  ,0x85A200, 0x12  , 0x1203, 0x301 , 0     , 0     , 0x2420 , 0     , 0     , 0x2   },    // 0F 38 21 L1
  3682.    {"pmovsxbd",  0x15  ,0x85A200, 0x12  , 0x1203, 0x401 , 0     , 0     , 0x2420 , 0     , 0     , 0x2   }};   // 0F 38 21 L2
  3683.  
  3684. // Submap for pmovsxbq. Opcode byte = 0F 38 22. Indexed by memory/register operand
  3685. SOpcodeDef OpcodeMap7D[2] = {
  3686.    {"pmovsxbq",  0x7E  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F 38 22 mem, link by VEX.L
  3687.    {"pmovsxbq",  0x15  ,0x858200, 0x12  , 0x1204, 0x401 , 0     , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F 38 22 reg
  3688.  
  3689. // Submap for pmovsxbq. Opcode byte = 0F 38 22 mem. Indexed by VEX.L
  3690. SOpcodeDef OpcodeMap7E[] = {
  3691.    {"pmovsxbq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x2   , 0     , 0     , 0x2620, 0     , 0     , 0x2   },    // 0F 38 22 L0
  3692.    {"pmovsxbq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x3   , 0     , 0     , 0x2620, 0     , 0     , 0x2   },    // 0F 38 22 L1
  3693.    {"pmovsxbq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x4   , 0     , 0     , 0x2620, 0     , 0     , 0x2   }};   // 0F 38 22 L2
  3694.  
  3695. // Submap for pmovsxwd. Opcode byte = 0F 38 23. Indexed by memory/register operand
  3696. SOpcodeDef OpcodeMap7F[2] = {
  3697.    {"pmovsxwd",  0x15  ,0x85A200, 0x12  , 0x1203, 0xF02 , 0     , 0     , 0x2220, 0     , 0     , 0x2   },    // 0F 38 23 mem, link by VEX.L
  3698.    {"pmovsxwd",  0x15  ,0x85A200, 0x12  , 0x1203, 0xF02 , 0     , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F 38 23 reg
  3699.  
  3700. // Submap for pmovsxwq. Opcode byte = 0F 38 24. Indexed by memory/register operand
  3701. SOpcodeDef OpcodeMap80[2] = {
  3702.    {"pmovsxwq",  0x81  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F 38 24 mem, link by VEX.L
  3703.    {"pmovsxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x402 , 0     , 0     , 0x30  , 0     , 0     , 0x2   }};   // 0F 38 24 reg
  3704.  
  3705. // Submap for pmovsxwq. Opcode byte = 0F 38 24 mem. Indexed by VEX.L
  3706. SOpcodeDef OpcodeMap81[] = {
  3707.    {"pmovsxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x3   , 0     , 0     , 0x2420, 0     , 0     , 0x2   },    // 0F 38 24 L0
  3708.    {"pmovsxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x302 , 0     , 0     , 0x2420, 0     , 0     , 0x2   },    // 0F 38 24 L1
  3709.    {"pmovsxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x402 , 0     , 0     , 0x2420, 0     , 0     , 0x2   }};   // 0F 38 24 L1
  3710.  
  3711. // Submap for pmovsxdq. Opcode byte = 0F 38 25. Indexed by memory/register operand
  3712. SOpcodeDef OpcodeMap82[2] = {
  3713.    {"pmovsxdq",  0x15  ,0x85A200, 0x12  , 0x1204, 0xF03 , 0     , 0     , 0x2220, 0     , 0     , 0x2   },    // 0F 38 25 mem, link by VEX.L
  3714.    {"pmovsxdq",  0x15  ,0x85A200, 0x12  , 0x1204, 0xF03 , 0     , 0     , 0x2220, 0     , 0     , 0x2   }};   // 0F 38 25 reg
  3715.  
  3716. // Submap for pmovzxbw. Opcode byte = 0F 38 30. Indexed by memory/register operand
  3717. SOpcodeDef OpcodeMap83[2] = {
  3718.    {"pmovzxbw",  0x15  ,0x85A200, 0x12  , 0x1202, 0xF01 , 0     , 0     , 0x2220, 0     , 0     , 0x2   },    // 0F 38 30 L0
  3719.    {"pmovzxbw",  0x15  ,0x85A200, 0x12  , 0x1202, 0xF01 , 0     , 0     , 0x2220, 0     , 0     , 0x2   }};   // 0F 38 30 reg
  3720.  
  3721. // Submap for 0F 38 5A, indexed by L bit and MVEX for vector size
  3722. SOpcodeDef OpcodeMap84[] = {
  3723.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 5A, 128 bits
  3724.    {"vbroadcasti128",0x1C,0x978200,0x12 , 0x1550, 0x2451, 0     , 0     , 0x20  , 0     , 0     , 0     },    // 0F 38 5A, 256 bits
  3725.    {"vbroadcasti32x4",0x80,0xC28200,0x12, 0x1603, 0x2403, 0     , 0     , 0x20  , 0x1012, 0     , 0x100 },    // 0F 38 5A, 512 bits
  3726.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  3727.  
  3728. // Submap for pmovzxbd. Opcode byte = 0F 38 31. Indexed by memory/register operand
  3729. SOpcodeDef OpcodeMap85[2] = {
  3730.    {"pmovzxbd",  0x86  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F 38 31 mem, link by VEX.L
  3731.    {"pmovzxbd",  0x15  ,0x85A200, 0x12  , 0x1203, 0x401 , 0     , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F 38 31 reg
  3732.  
  3733. // Submap for pmovzxbd. Opcode byte = 0F 38 31 mem. Indexed by VEX.L
  3734. SOpcodeDef OpcodeMap86[] = {
  3735.    {"pmovzxbd",  0x15  ,0x85A200, 0x12  , 0x1403, 0x3   , 0     , 0     , 0x2420 , 0     , 0     , 0x2   },    // 0F 38 31 L0
  3736.    {"pmovzxbd",  0x15  ,0x85A200, 0x12  , 0x1503, 0x301 , 0     , 0     , 0x2420 , 0     , 0     , 0x2   },    // 0F 38 31 L1
  3737.    {"pmovzxbd",  0x15  ,0x85A200, 0x12  , 0x1603, 0x401 , 0     , 0     , 0x2420 , 0     , 0     , 0x2   }};   // 0F 38 31 L2
  3738.  
  3739. // Submap for pmovzxbq. Opcode byte = 0F 38 32. Indexed by memory/register operand
  3740. SOpcodeDef OpcodeMap87[2] = {
  3741.    {"pmovzxbq",  0x88  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F 38 32 mem, link by VEX.L
  3742.    {"pmovzxbq",  0x15  ,0x858200, 0x12  , 0x1204, 0x401 , 0     , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F 38 32 reg
  3743.  
  3744. // Submap for pmovzxbq. Opcode byte = 0F 38 32 mem. Indexed by VEX.L
  3745. SOpcodeDef OpcodeMap88[] = {
  3746.    {"pmovzxbq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x2   , 0     , 0     , 0x2620, 0     , 0     , 0x2   },    // 0F 38 32 L0
  3747.    {"pmovzxbq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x3   , 0     , 0     , 0x2620, 0     , 0     , 0x2   },    // 0F 38 32 L1
  3748.    {"pmovzxbq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x4   , 0     , 0     , 0x2620, 0     , 0     , 0x2   }};   // 0F 38 32 L2
  3749.  
  3750. // Submap for pmovzxwd. Opcode byte = 0F 38 33. Indexed by memory/register operand
  3751. SOpcodeDef OpcodeMap89[2] = {
  3752.    {"pmovzxwd",  0x15  ,0x85A200, 0x12  , 0x1203, 0xF02 , 0     , 0     , 0x2220, 0     , 0     , 0x2   },    // 0F 38 33 mem, link by VEX.L
  3753.    {"pmovzxwd",  0x15  ,0x85A200, 0x12  , 0x1203, 0xF02 , 0     , 0     , 0x2220, 0     , 0     , 0x2   }};   // 0F 38 33 reg
  3754.  
  3755. // Submap for pmovzxwq. Opcode byte = 0F 38 34. Indexed by memory/register operand
  3756. SOpcodeDef OpcodeMap8A[2] = {
  3757.    {"pmovzxwq",  0x8B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x0D  , 0     },    // 0F 38 34 mem, link by VEX.L
  3758.    {"pmovzxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x402 , 0     , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F 38 34 reg
  3759.  
  3760. // Submap for pmovzxwq. Opcode byte = 0F 38 34 mem. Indexed by VEX.L
  3761. SOpcodeDef OpcodeMap8B[] = {
  3762.    {"pmovzxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x3   , 0     , 0     , 0x2420, 0     , 0     , 0x2   },    // 0F 38 34 L0
  3763.    {"pmovzxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x302 , 0     , 0     , 0x2420, 0     , 0     , 0x2   },    // 0F 38 34 L1
  3764.    {"pmovzxwq",  0x15  ,0x85A200, 0x12  , 0x1204, 0x402 , 0     , 0     , 0x2420, 0     , 0     , 0x2   }};   // 0F 38 34 L1
  3765.  
  3766. // Submap for pmovzxwq. Opcode byte = 0F 38 35. Indexed by memory/register operand
  3767. SOpcodeDef OpcodeMap8C[2] = {
  3768.    {"pmovzxdq",  0x15  ,0x85A200, 0x12  , 0x1204, 0xF03 , 0     , 0     , 0x2220, 0     , 0     , 0x2   },    // 0F 38 35 mem
  3769.    {"pmovzxdq",  0x15  ,0x85A200, 0x12  , 0x1204, 0xF03 , 0     , 0     , 0x2220, 0     , 0     , 0x2   }};   // 0F 38 35 reg
  3770.  
  3771. // submap for 0F 38 14. Indexed by VEX prefix
  3772. SOpcodeDef OpcodeMap8D[] = {
  3773.    {"blendvps",  0x15  , 0x8200 , 0x12  , 0x124B, 0x24B , 0xAE  , 0     , 0     , 0     , 0     , 0     },    //      0F 38 14
  3774.    {"vprorv",    0x20  ,0x883200, 0x19  , 0x1209, 0x1209, 0x0209, 0     , 0x31  , 0     , 0     , 0x1   }};   //  VEX 0F 38 14
  3775.  
  3776. // submap for 0F 38 15. Indexed by VEX prefix
  3777. SOpcodeDef OpcodeMap8E[] = {
  3778.    {"blendvpd",  0x15  , 0x8200 , 0x12  , 0x124C, 0x24C , 0xAE  , 0     , 0     , 0     , 0     , 0     },    //     0F 38 15
  3779.    {"vprolv",    0x20  ,0x883200, 0x19  , 0x1209, 0x1209, 0x0209, 0     , 0x31  , 0     , 0     , 0x1   }};   // VEX 0F 38 15
  3780.  
  3781. // submap for 0F 3A 23. Index by W bit
  3782. SOpcodeDef OpcodeMap8F[] = {
  3783.    {"vshuff32x4",0x20  ,0x88B200, 0x59  , 0x124F, 0x124F, 0x024F, 0x31  , 0x31  , 0     , 0     , 0     },    // 0F 3A 23. W0
  3784.    {"vshuff64x2",0x20  ,0x88B200, 0x59  , 0x124F, 0x124F, 0x024F, 0x31  , 0x31  , 0     , 0     , 0     }};   // 0F 3A 23. W1
  3785.  
  3786. // submap for 0F 3A 43. Index by W bit
  3787. SOpcodeDef OpcodeMap90[] = {
  3788.    {"vshufi32x4",0x20  ,0x88B200, 0x59  , 0x1209, 0x1209, 0x0209, 0x31  , 0x31  , 0     , 0     , 0     },    // 0F 3A 43. W0
  3789.    {"vshufi64x2",0x20  ,0x88B200, 0x59  , 0x1209, 0x1209, 0x0209, 0x31  , 0x31  , 0     , 0     , 0     }};   // 0F 3A 43. W1
  3790.  
  3791. // submap for 0F 38 2A. Index by 66 F2 F3 prefix
  3792. SOpcodeDef OpcodeMap91[] = {
  3793.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 2A
  3794.    {"movntdqa",  0x15  ,0x85A200, 0x12  , 0x1250, 0x2250, 0     , 0     , 0x00  , 0     , 0     , 0x102 },    // 66 0F 38 2A
  3795.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 38 2A
  3796.    {"vpbroadcastmb2q",0x20,0x823400,0x12, 0x1204, 0x1095, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 38 2A. W1
  3797.  
  3798. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3799. // Submap for xlat. Opcode byte = D7. Indexed by assembly syntax: 0=MASM, 1=NASM/YASM, 2=GAS
  3800. SOpcodeDef OpcodeMap92[3] = {
  3801.    {"xlat",      0     , 0x5    , 0x1   , 0     , 0x20C0, 0     , 0     , 0     , 0     , 0     , 0x8   },    // D7
  3802.    {"xlatb",     0     , 0x5    , 0x1   , 0     , 0x20C0, 0     , 0     , 0     , 0     , 0     , 0x8   },    // D7
  3803.    {"xlat",      0     , 0x5    , 0x1   , 0     , 0x20C0, 0     , 0     , 0     , 0     , 0     , 0x8   }};   // D7
  3804.  
  3805. // Submap for pmovmskb, Opcode 0F D7, Indexed by VEX prefix and VEX.L bit
  3806. SOpcodeDef OpcodeMap93[3] = {
  3807.    {"pmovmskb",  0x7   , 0x51200, 0x12  , 0x1009, 0x1150, 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F D7
  3808.    {"pmovmskb",  0x7   , 0x51200, 0x12  , 0x100A, 0x1150, 0     , 0     , 0     , 0     , 0     , 0x2   },    // 0F D7, VEX    (32/64 bit dest. depending on mode)
  3809.    {"pmovmskb",  0x7   , 0x51200, 0x12  , 0x100A, 0x1150, 0     , 0     , 0     , 0     , 0     , 0x2   }};   // 0F D7, VEX.L  (32/64 bit dest. depending on mode)
  3810.  
  3811. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3812. // Submap for vpgatherq, Opcode 0F 38 91, Indexed by VEX/EVEX
  3813. SOpcodeDef OpcodeMap94[2] = {
  3814.    {0,           0x105 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    //
  3815.    {0,           0x106 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   //
  3816.  
  3817. // Submap for vgatherqps/pd, Opcode 0F 38 93, Indexed by VEX.W bit
  3818. SOpcodeDef OpcodeMap95[2] = {
  3819.    {"vgatherqps",0x1C  , 0xE9200, 0x1E,   0xF4B , 0x224B, 0xF4B , 0     , 0     , 0     , 0     , 0     },    // 0F 38 93, W0
  3820.    {"vgatherqpd",0x1C  , 0xE9200, 0x1E,   0x24C , 0x224C, 0x24C , 0     , 0     , 0     , 0     , 0     }};   // 0F 38 93, W1
  3821.  
  3822. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3823. // Submap for psllw, Opcode 0F F1, Indexed by VEX.L bit
  3824. SOpcodeDef OpcodeMap96[] = {
  3825.    {"psllw",     0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F F1
  3826.    {"psllw",     0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x402 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F F1, L1
  3827.    {"psllw",     0x20  ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x402 , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F F1, L2
  3828.  
  3829. // Submap for pslld, Opcode 0F F2, Indexed by VEX.L bit
  3830. SOpcodeDef OpcodeMap97[] = {
  3831.    {"pslld",     0x7   ,0x8D2200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F F2
  3832.    {"pslld",     0x7   ,0x8D2200, 0x19  , 0x1203, 0x1203, 0x403 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F F2, L1
  3833.    {"pslld",     0x20  ,0x8D2200, 0x19  , 0x1203, 0x1203, 0x403 , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F F2, L1
  3834.  
  3835. // Submap for psllq, Opcode 0F F3, Indexed by VEX.L bit
  3836. SOpcodeDef OpcodeMap98[] = {
  3837.    {"psllq",     0x7   ,0x8D2200, 0x19  , 0x1104, 0x1104, 0x104 , 0     , 0x30  , 0     , 0     , 0x2   },    // 0F F3
  3838.    {"psllq",     0x7   ,0x8D2200, 0x19  , 0x1204, 0x1204, 0x404 , 0     , 0x30  , 0     , 0     , 0x2   },    // 0F F3, L1
  3839.    {"psllq",     0x20  ,0x8D2200, 0x19  , 0x1204, 0x1204, 0x404 , 0     , 0x30  , 0     , 0     , 0x2   }};   // 0F F3, L1
  3840.  
  3841. // Submap for psrlw, Opcode 0F D1, Indexed by VEX.L bit
  3842. SOpcodeDef OpcodeMap99[] = {
  3843.    {"psrlw",     0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D1
  3844.    {"psrlw",     0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x402 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D1
  3845.    {"psrlw",     0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x402 , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F D1
  3846.  
  3847. // Submap for psrld, Opcode 0F D2, Indexed by VEX.L bit
  3848. SOpcodeDef OpcodeMap9A[] = {
  3849.    {"psrld",     0x7   ,0x8D2200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D2
  3850.    {"psrld",     0x7   ,0x8D2200, 0x19  , 0x1203, 0x1203, 0x403 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D2
  3851.    {"psrld",     0x7   ,0x8D2200, 0x19  , 0x1203, 0x1203, 0x403 , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F D2
  3852.  
  3853. // Submap for psrlq, Opcode 0F D3, Indexed by VEX.L bit
  3854. SOpcodeDef OpcodeMap9B[] = {
  3855.    {"psrlq",     0x7   ,0x8D2200, 0x19  , 0x1104, 0x1104, 0x104 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D3
  3856.    {"psrlq",     0x7   ,0x8D2200, 0x19  , 0x1204, 0x1204, 0x404 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F D3
  3857.    {"psrlq",     0x7   ,0x8D2200, 0x19  , 0x1204, 0x1204, 0x404 , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F D3
  3858.  
  3859. // Submap for psraw, Opcode 0F E1, Indexed by VEX.L bit
  3860. SOpcodeDef OpcodeMap9C[] = {
  3861.    {"psraw",     0x7   ,0x8D2200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F E1
  3862.    {"psraw",     0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x402 , 0     , 0x20  , 0     , 0     , 0x2   },    // 0F E1
  3863.    {"psraw",     0x7   ,0x8D2200, 0x19  , 0x1202, 0x1202, 0x402 , 0     , 0x20  , 0     , 0     , 0x2   }};   // 0F E1
  3864.  
  3865. // Submap for psrad, Opcode 0F E2, Indexed by VEX.L bit
  3866. SOpcodeDef OpcodeMap9D[] = {
  3867.    {"psra",      0x7   ,0x8D3200, 0x19  , 0x1109, 0x1109, 0x109 , 0     , 0x21  , 0     , 0     , 0x3   },    // 0F E2
  3868.    {"psra",      0x7   ,0x8D3200, 0x19  , 0x1109, 0x1109, 0x409 , 0     , 0x21  , 0     , 0     , 0x3   },    // 0F E2. w bit specifies operand size only if EVEX
  3869.    {"psra",      0x7   ,0x8D3200, 0x19  , 0x1109, 0x1109, 0x409 , 0     , 0x21  , 0     , 0     , 0x3   }};   // 0F E2. w bit specifies operand size only if EVEX
  3870.  
  3871. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3872. // Submap for vpbroadcastb, Opcode 0F 38 78, Indexed by memory/register
  3873. SOpcodeDef OpcodeMap9E[2] = {
  3874.    {"vpbroadcastb",0x1C,0x878200, 0x12,   0x1201, 0x1   , 0     , 0     , 0x20  , 0     , 0     , 0     },    // 0F 38 78 mem
  3875.    {"vpbroadcastb",0x1C,0x878200, 0x12,   0x1201, 0x401 , 0     , 0     , 0x20  , 0     , 0     , 0     }};   // 0F 38 78 reg
  3876.  
  3877. // Submap for vpbroadcastw, Opcode 0F 38 79, Indexed by memory/register
  3878. SOpcodeDef OpcodeMap9F[2] = {
  3879.    {"vpbroadcastw",0x1C,0x878200, 0x12,   0x1201, 0x2   , 0     , 0     , 0x20  , 0     , 0     , 0     },    // 0F 38 79 mem
  3880.    {"vpbroadcastw",0x1C,0x878200, 0x12,   0x1201, 0x402 , 0     , 0     , 0x20  , 0     , 0     , 0     }};   // 0F 38 79 reg
  3881.  
  3882. // Submap for vpbroadcastd, Opcode 0F 38 58, Indexed by memory/register
  3883. SOpcodeDef OpcodeMapA0[2] = {
  3884.    {"vpbroadcastd",0x1C,0xC78200, 0x12,   0x1201, 0x3   , 0     , 0     , 0x20  , 0x100A, 0     , 0     },    // 0F 38 58 mem
  3885.    {"vpbroadcastd",0x1C,0x878200, 0x12,   0x1201, 0x403 , 0     , 0     , 0x20  , 0     , 0     , 0     }};   // 0F 38 58 reg
  3886.  
  3887. // Submap for vpbroadcastq, Opcode 0F 38 59, Indexed by memory/register
  3888. SOpcodeDef OpcodeMapA1[2] = {
  3889.    {"vpbroadcastq",0x1C,0xC7B200, 0x12,   0x1201, 0x4   , 0     , 0     , 0x20  , 0x100B, 0     , 0     },    // 0F 38 59 mem. (manuals disagree on W bit?)
  3890.    {"vpbroadcastq",0x1C,0x879200, 0x12,   0x1201, 0x404 , 0     , 0     , 0x20  , 0     , 0     , 0     }};   // 0F 38 59 reg
  3891.  
  3892. // Submap for 0F 38 F3. Indexed by reg bit
  3893. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3894. SOpcodeDef OpcodeMapA2[8] = {
  3895.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 38 F3 /0
  3896.    {"blsr"  ,    0x1D   , 0xB1000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 38 F3 /3
  3897.    {"blsmsk",    0x1D   , 0xB1000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 38 F3 /3
  3898.    {"blsi"  ,    0x1D   , 0xB1000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 38 F3 /3
  3899.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 38 F3 /4
  3900.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 38 F3 /5
  3901.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 38 F3 /6
  3902.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};  // 0F 38 F3 /7
  3903.  
  3904. // Submap for 0F 38 F5. Indexed by prefixes
  3905. SOpcodeDef OpcodeMapA3[4] = {
  3906.    {"bzhi"  ,    0x1D   , 0xB1000, 0x1B  , 0x1009, 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     },   // 0F 38 F5
  3907.    {"wruss" ,    0      , 0x1200 , 0x13  , 0x2009, 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },   // 66 0F 38 F5
  3908.    {"pdep"  ,    0x1D   , 0xB1000, 0x19  , 0x1009, 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     },   // F2 0F 38 F5
  3909.    {"pext"  ,    0x1D   , 0xB1000, 0x19  , 0x1009, 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     }};  // F3 0F 38 F5
  3910.  
  3911. // Submap for 0F 3A F0. Indexed by prefixes
  3912. SOpcodeDef OpcodeMapA4[4] = {
  3913.    {0       ,    0      , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },   // 0F 3A F0
  3914.    {0       ,    0      , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },   // 66 0F 3A F0
  3915.    {"rorx"  ,    0x1D   , 0x31000, 0x52  , 0x1009, 0x9   , 0x31  , 0     , 0     , 0     , 0     , 0     },   // F2 0F 3A F0
  3916.    {0       ,    0      , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};  // F3 0F 3A F0
  3917.  
  3918. // Quarternary opcode map for pinsrb. Opcode byte = 0F 3A 20
  3919. // Indexed by memory vs. register operand
  3920. SOpcodeDef OpcodeMapA5[2] = {
  3921. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3922.    {"pinsrb",    0x15  ,0x89A200, 0x59  , 0x1401, 0x1401, 0x2001, 0x31  , 0x1000, 0     , 0     , 0x2   },   // 0F 3A 20 memory 8
  3923.    {"pinsrb",    0x15  ,0x89A200, 0x59  , 0x1401, 0x1401, 0x1003, 0x31  , 0     , 0     , 0     , 0x2   }};  // 0F 3A 20 register 32
  3924.  
  3925. // Opcode map for VIA instructions. Opcode byte = 0F A6 ..
  3926. // Indexed by mod and reg fields of mod/reg/rm byte
  3927. SOpcodeDef OpcodeMapA6[] = {
  3928. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3929.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=0
  3930.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=1
  3931.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=2
  3932.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=3
  3933.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=4
  3934.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=5
  3935.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=6
  3936.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A6, mod<3, reg=7
  3937.    {"rep montmul;VIA",0x2001,0x8021,0x10, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A6 /0
  3938.    {"rep xsha1;VIA",0x2001,0x8021,0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A6 /1
  3939.    {"rep xsha256;VIA",0x2001,0x8021,0x10, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A6 /2
  3940.    {0,           0     , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }}; // 0F A6, mod=3, reg=3
  3941.  
  3942. // Opcode map for VIA instructions. Opcode byte = 0F A7 ..
  3943. // Indexed by mod and reg fields of mod/reg/rm byte
  3944. SOpcodeDef OpcodeMapA7[] = {
  3945. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3946.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=0
  3947.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=1
  3948.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=2
  3949.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=3
  3950.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=4
  3951.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=5
  3952.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=6
  3953.    {0,           0     , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7, mod<3, reg=7
  3954.    {0,           0xA8  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },  // 0F A7, mod=3, reg=0. Link to XSTORE
  3955.    {"rep xcryptecb;VIA",0x2001,0x8021,0x10,0    , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A7 /1
  3956.    {"rep xcryptcbc;VIA",0x2001,0x8021,0x10,0    , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A7 /2
  3957.    {"rep xcryptctr;VIA",0x2001,0x8021,0x10,0    , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A7 /3
  3958.    {"rep xcryptcfb;VIA",0x2001,0x8021,0x10,0    , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A7 /4
  3959.    {"rep xcryptofb;VIA",0x2001,0x8021,0x10,0    , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // F3 0F A7 /5
  3960.    {0,           0     , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }}; // 0F A7, mod=3, reg=6
  3961.  
  3962. // Opcode map for VIA XSTORE instruction. Opcode byte = 0F A7 /0
  3963. // Indexed by prefixes
  3964. SOpcodeDef OpcodeMapA8[] = {
  3965. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3966.    {"xstore;VIA",0x2001, 1      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F A7 /0
  3967.    {0,           0     , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 66 0F A7 /0
  3968.    {0,           0     , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // F2 0F A7 /0
  3969.    {"rep xstore;VIA",0x2001,0x21, 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   }}; // F3 0F A7 /0
  3970.  
  3971. // Opcode map for XGETBV, XSETBV instruction. Opcode byte = 0F 01 /2
  3972. // Indexed by rm bits
  3973. SOpcodeDef OpcodeMapA9[] = {
  3974. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  3975.    {"xgetbv",    0x16   , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 D0
  3976.    {"xsetbv",    0x16   , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 D1
  3977.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 D2
  3978.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 D3
  3979.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 D4
  3980.    {"xend"  ,    0x1D   , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 D5
  3981.    {"xtest" ,    0x1D   , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 D6
  3982.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }}; // 0F 01 D7
  3983.  
  3984. // Opcode map for AMD virtualization instructions 0F 1F 11/011/xxx
  3985. // Indexed by rm bits
  3986. SOpcodeDef OpcodeMapAA[] = {
  3987.    {"vmrun" ,   0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 D8
  3988.    {"vmmcall",  0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 D9
  3989.    {"vmload",   0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 DA
  3990.    {"vmsave",   0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 DB
  3991.    {"stgi"  ,   0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 DC
  3992.    {"clgi"  ,   0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 DD
  3993.    {"skinit",   0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 DE
  3994.    {0       ,   0x1804  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   }}; // 0F 01 DF
  3995.  
  3996. // Opcode map for swapgs and RDTSCP instructions 0F 1F 11/111/xxx
  3997. // Indexed by rm bits
  3998. SOpcodeDef OpcodeMapAB[] = {
  3999.    {"swapgs",    0x800  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 F8. instruction set unknown
  4000.    {"rdtscp",    0x19   , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x8   },  // 0F 01 F9. AMD SSE4.A and Intel AVX?
  4001.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 FA
  4002.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 FB
  4003.    {"clzero",    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 FC. AMD
  4004.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 FD
  4005.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },  // 0F 01 FE
  4006.    {0       ,    0      , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }}; // 0F 01 FF
  4007.  
  4008. // Opcode map for 0F C7 /6
  4009. // Indexed by mem/reg
  4010. SOpcodeDef OpcodeMapAC[] = {
  4011. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4012.    {0,           0x52  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // 0F C7 /6 mem link to vmptrld etc
  4013.    {"rdrand",    0x1D  , 0x1100 , 0x11  , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // 0F C7 /6 reg
  4014.  
  4015. // Submap for 0F 38 F7, indexed by prefixes
  4016. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4017. SOpcodeDef OpcodeMapAD[] = {
  4018.    {"bextr",     0x1D  , 0xB3000, 0x1B  , 0x1009, 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     },    // 0F 38 F7
  4019.    {"shlx",      0x1D  , 0xB3200, 0x1B  , 0x1009, 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     },    // 66 0F 38 F7
  4020.    {"shrx",      0x1D  , 0xB3800, 0x1B  , 0x1009, 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     },    // F2 0F 38 F7
  4021.    {"sarx",      0x1D  , 0xB3400, 0x1B  , 0x1009, 0x9   , 0x1009, 0     , 0     , 0     , 0     , 0     }};   // F3 0F 38 F7
  4022.  
  4023. // Submap for 0F BC, indexed by prefixes
  4024. SOpcodeDef OpcodeMapAE[4] = {
  4025.    {"bsf"   ,    0x3    , 0x1100 , 0x12 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F BC
  4026.    {"bsf"   ,    0x3    , 0x1100 , 0x12 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F BC
  4027.    {"tzcnti",    0x20   ,0x31800 , 0x12 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F BC
  4028.    {"tzcnt" ,    0x1D   ,0x11500 , 0x12 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F BC, or 66 F3 0F BC. Does not work for F3 66 0F BC!
  4029.  
  4030. // Submap for 0F C7 /7, Indexed by mem/reg
  4031. SOpcodeDef OpcodeMapAF[] = {
  4032.    {"vmptrst",   0x813  , 0      , 0x11  , 0x2351, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C7 /7 mem
  4033.    {0       ,    0x138  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     }};   // 0F C7 /7 reg. link to rdseed, rdpid
  4034.  
  4035.  
  4036. // Shortcut opcode map for VEX prefix and mmmm = 0000
  4037. // Indexed by first opcode byte after VEX prefix. With or without mod/reg/rm byte, and any number of immediate bytes
  4038. SOpcodeDef OpcodeMapB0[] = {
  4039. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4040.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 00
  4041.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 01
  4042.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 02
  4043.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 03
  4044.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 04
  4045.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 05
  4046.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 06
  4047.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 07
  4048.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 08
  4049.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 09
  4050.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0A
  4051.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0B
  4052.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0C
  4053.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0D
  4054.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0E
  4055.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F
  4056.  
  4057.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 10
  4058.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 11
  4059.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 12
  4060.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 13
  4061.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 14
  4062.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 15
  4063.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 16
  4064.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 17
  4065.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 18
  4066.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 19
  4067.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 1A
  4068.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 1B
  4069.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 1C
  4070.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 1D
  4071.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 1E
  4072.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 1F
  4073.  
  4074.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 20
  4075.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 21
  4076.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 22
  4077.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 23
  4078.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 24
  4079.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 25
  4080.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 26
  4081.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 27
  4082.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 28
  4083.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 29
  4084.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 2A
  4085.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 2B
  4086.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 2C
  4087.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 2D
  4088.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 2E
  4089.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 2F
  4090.  
  4091.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 30
  4092.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 31
  4093.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 32
  4094.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 33
  4095.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 34
  4096.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 35
  4097.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 36
  4098.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 37
  4099.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 38
  4100.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 39
  4101.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 3A
  4102.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 3B
  4103.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 3C
  4104.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 3D
  4105.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 3E
  4106.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 3F
  4107.  
  4108.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 40
  4109.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 41
  4110.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 42
  4111.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 43
  4112.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 44
  4113.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 45
  4114.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 46
  4115.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 47
  4116.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 48
  4117.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 49
  4118.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 4A
  4119.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 4B
  4120.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 4C
  4121.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 4D
  4122.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 4E
  4123.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 4F
  4124.  
  4125.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 50
  4126.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 51
  4127.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 52
  4128.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 53
  4129.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 54
  4130.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 55
  4131.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 56
  4132.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 57
  4133.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 58
  4134.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 59
  4135.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 5A
  4136.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 5B
  4137.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 5C
  4138.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 5D
  4139.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 5E
  4140.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 5F
  4141.  
  4142.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 60
  4143.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 61
  4144.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 62
  4145.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 63
  4146.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 64
  4147.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 65
  4148.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 66
  4149.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 67
  4150.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 68
  4151.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 69
  4152.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 6A
  4153.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 6B
  4154.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 6C
  4155.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 6D
  4156.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 6E
  4157.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 6F
  4158.  
  4159.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 70
  4160.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 71
  4161.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 72
  4162.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 73
  4163.    {"jkzd",      0x20  , 0xB0080, 0x44  , 0x95  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // VEX 74
  4164.    {"jknzd",     0x20  , 0xB0080, 0x44  , 0x95  , 0x81  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // VEX 75
  4165.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 76
  4166.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 77
  4167.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 78
  4168.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 79
  4169.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 7A
  4170.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 7B
  4171.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 7C
  4172.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 7D
  4173.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 7E
  4174.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // VEX 7F
  4175.  
  4176. // Shortcut opcode map for VEX or EVEX prefix and mmmm = 0001
  4177. // Important: if VEX prefix is optional then use OpcodeMap1 instead. Don't put the same code in both maps!
  4178. // Indexed by first opcode byte after VEX prefix. With or without mod/reg/rm byte, and any number of immediate bytes
  4179. SOpcodeDef OpcodeMapB1[] = {
  4180. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4181.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 00
  4182.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 01
  4183.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 02
  4184.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 03
  4185.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 04
  4186.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 05
  4187.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 06
  4188.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 07
  4189.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 08
  4190.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 09
  4191.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 0A
  4192.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 0B
  4193.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 0C
  4194.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 0D
  4195.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 0E
  4196.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 0F
  4197.  
  4198.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 10
  4199.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 11
  4200.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 12
  4201.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 13
  4202.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 14
  4203.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 15
  4204.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 16
  4205.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 17
  4206.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 18
  4207.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 19
  4208.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 1A
  4209.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 1B
  4210.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 1C
  4211.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 1D
  4212.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 1E
  4213.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 1F
  4214.  
  4215.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 20
  4216.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 21
  4217.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 22
  4218.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 23
  4219.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 24
  4220.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 25
  4221.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 26
  4222.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 27
  4223.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 28
  4224.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 29
  4225.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 2A
  4226.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 2B
  4227.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 2C
  4228.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 2D
  4229.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 2E
  4230.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 2F
  4231.  
  4232.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 30
  4233.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 31
  4234.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 32
  4235.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 33
  4236.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 34
  4237.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 35
  4238.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 36
  4239.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 37
  4240.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 38
  4241.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 39
  4242.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 3A
  4243.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 3B
  4244.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 3C
  4245.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 3D
  4246.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 3E
  4247.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 3F
  4248.  
  4249. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4250.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 40
  4251.    {"kand",      0x20  , 0xE5200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 1     },    // VEX 0F 41
  4252.    {"kandn",     0x20  , 0xE5200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 1     },    // VEX 0F 42
  4253.    {"kandnr",    0x80  , 0x30000, 0x12  , 0x95  , 0x1095, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 43
  4254.    {"knot",      0x20  , 0xE5200, 0x12  , 0x1095, 0x1095, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 44
  4255.    {"kor",       0x20  , 0xE5200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 1     },    // VEX 0F 45
  4256.    {"kxnor",     0x20  , 0xE5200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 1     },    // VEX 0F 46
  4257.    {"kxor",      0x20  , 0xE5200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 1     },    // VEX 0F 47
  4258.    {"kmerge2l1h",0x80  , 0x30000, 0x12  , 0x95  , 0x1095, 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 48
  4259.    {"kmerge2l1l",0x80  , 0x30000, 0x12  , 0x95  , 0x1095, 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 49
  4260.    {"kadd",      0x20  , 0xE5200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 1     },    // VEX 0F 41
  4261.    {0,           0xF0  , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // VEX 0F 4B. Link to kunpckbw
  4262.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 4C
  4263.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 4D
  4264.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 4E
  4265.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 4F
  4266.  
  4267.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 50
  4268.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 51
  4269.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 52
  4270.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 53
  4271.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 54
  4272.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 55
  4273.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 56
  4274.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 57
  4275.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 58
  4276.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 59
  4277.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 5A
  4278.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 5B
  4279.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 5C
  4280.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 5D
  4281.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 5E
  4282.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 5F
  4283.  
  4284.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 60
  4285.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 61
  4286.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 62
  4287.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 63
  4288.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 64
  4289.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 65
  4290.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 66
  4291.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 67
  4292.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 68
  4293.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 69
  4294.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 6A
  4295.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 6B
  4296.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 6C
  4297.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 6D
  4298.    {"vmov",      0x7   ,0x813200, 0x12  , 0x1409, 0x9   , 0     , 0     , 0x00  , 0     , 0     , 0x1   },    // VEX 0F 6E
  4299.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 6F
  4300.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 70
  4301.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 71
  4302.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 72
  4303.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 73
  4304.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 74
  4305.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 75
  4306.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 76
  4307.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 77
  4308.    {0,           0xDA  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // EVEX 0F 78. Link to vcvttpd2udq
  4309.    {0,           0xD6  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // EVEX 0F 79. Link to vcvtps etc
  4310.    {0,           0xDC  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // E/MVEX 0F 7A. Link to vcvtudq2pd
  4311.    {0,           0xDD  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // EVEX 0F 7B. Link to vcvtusi2sd etc
  4312.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 7C
  4313.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 7D
  4314.    {0,           0xE2  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // VEX 0F 7E. Link to movq
  4315.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 7F
  4316.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 80
  4317.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 81
  4318.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 82
  4319.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 83
  4320.    {"jkzd",      0x20  , 0xB0080, 0x84  , 0x95  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // VEX 0F 84
  4321.    {"jknzd",     0x20  , 0xB0080, 0x84  , 0x95  , 0x82  , 0     , 0     , 0     , 0     , 0     , 0x80  },    // VEX 0F 85
  4322.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 86
  4323.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 87
  4324.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 88
  4325.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 89
  4326.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 8A
  4327.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 8B
  4328.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 8C
  4329.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 8D
  4330.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 8E
  4331.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 8F
  4332. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4333.    {0,           0xEB  , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 3     ,       },    // VEX 0F 90. Link to kmov
  4334.    {"kmov",      0x20  , 0x35200, 0x13  , 0x2009, 0x1095, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 91. Name without w in KNC syntax, but code identical
  4335.    {0,           0xEC  , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // VEX 0F 92. Link to kmov r, k
  4336.    {0,           0xEE  , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     },    // VEX 0F 93. Link to kmov k, r
  4337.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 94
  4338.    {"kconcath",  0x80  , 0xB0000, 0x19  , 0x1004, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 0     },    // VEX 0F 95
  4339.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 96
  4340.    {"kconcatl",  0x80  , 0xB0000, 0x19  , 0x1004, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 0     },    // VEX 0F 97
  4341.    {"kortest",   0x20  , 0x25200, 0x12  , 0x95  , 0x1095, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 98
  4342.    {"ktest",     0x20  , 0x25200, 0x12  , 0x1095, 0x1095, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 99
  4343.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 9A
  4344.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 9B
  4345.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 9C
  4346.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 9D
  4347.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 9E
  4348.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 9F
  4349.  
  4350.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A0
  4351.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A1
  4352.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A2
  4353.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A3
  4354.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A4
  4355.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A5
  4356.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A6
  4357.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A7
  4358.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A8
  4359.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F A9
  4360.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F AA
  4361.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F AB
  4362.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F AC
  4363.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F AD
  4364.    {0,           0xCD  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x4   , 0     },    // VEX 0F AE. Link
  4365.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // VEX 0F AF
  4366.  
  4367.  
  4368. // Shortcut opcode map for EVEX F2 0F 38
  4369. // Indexed by first opcode byte after EVEX prefix
  4370. SOpcodeDef OpcodeMapB2[] = {
  4371.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 00
  4372.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 01
  4373.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 02
  4374.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 03
  4375.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 04
  4376.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 05
  4377.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 06
  4378.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 07
  4379.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 08
  4380.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 09
  4381.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 0A
  4382.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 0B
  4383.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 0C
  4384.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 0D
  4385.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 0E
  4386.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 0F
  4387.  
  4388.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 10
  4389.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 11
  4390.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 12
  4391.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 13
  4392.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 14
  4393.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 15
  4394.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 16
  4395.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 17
  4396.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 18
  4397.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 19
  4398.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 1A
  4399.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 1B
  4400.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 1C
  4401.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 1D
  4402.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 1E
  4403.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 1F
  4404.  
  4405. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4406.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 20
  4407.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 21
  4408.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 22
  4409.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 23
  4410.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 24
  4411.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 25
  4412.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 26
  4413.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 27
  4414.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 28
  4415.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 29
  4416.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 2A
  4417.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 2B
  4418.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 2C
  4419.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 2D
  4420.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 2E
  4421.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 2F
  4422.  
  4423.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 30
  4424.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 31
  4425.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 32
  4426.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 33
  4427.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 34
  4428.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 35
  4429.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 36
  4430.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 37
  4431.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 38
  4432.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 39
  4433.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 3A
  4434.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 3B
  4435.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 3C
  4436.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 3D
  4437.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 3E
  4438.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 3F
  4439.  
  4440. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4441.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 40
  4442.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 41
  4443.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 42
  4444.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 43
  4445.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 44
  4446.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 45
  4447.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 46
  4448.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 47
  4449.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 48
  4450.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 49
  4451.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 4A
  4452.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 4B
  4453.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 4C
  4454.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 4D
  4455.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 4E
  4456.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 4F
  4457.  
  4458.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 50
  4459.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 51
  4460.    {"vp4dpwssd" ,0x24  ,0x8F9800, 0x19  , 0x164B, 0x164B, 0x244B, 0     , 0x20  , 0     , 0     , 0     },    // EVEX F2 0F 38 52
  4461.    {"vp4dpwssds",0x24  ,0x8F9800, 0x19  , 0x164B, 0x164B, 0x244B, 0     , 0x20  , 0     , 0     , 0     },    // EVEX F2 0F 38 53
  4462.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 54
  4463.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 55
  4464.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 56
  4465.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 57
  4466.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 58
  4467.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 59
  4468.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 5A
  4469.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 5B
  4470.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 5C
  4471.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 5D
  4472.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 5E
  4473.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 5F
  4474.  
  4475. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4476.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 60
  4477.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 61
  4478.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 62
  4479.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 63
  4480.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 64
  4481.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 65
  4482.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 66
  4483.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 67
  4484.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 68
  4485.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 69
  4486.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 6A
  4487.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 6B
  4488.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 6C
  4489.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 6D
  4490.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 6E
  4491.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 6F
  4492.  
  4493.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 70
  4494.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 71
  4495.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 72
  4496.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 73
  4497.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 74
  4498.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 75
  4499.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 76
  4500.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 77
  4501.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 78
  4502.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 79
  4503.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 7A
  4504.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 7B
  4505.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 7C
  4506.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 7D
  4507.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 7E
  4508.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 7F
  4509.  
  4510. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4511.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 80
  4512.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 81
  4513.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 82
  4514.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 83
  4515.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 84
  4516.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 85
  4517.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 86
  4518.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 87
  4519.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 88
  4520.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 89
  4521.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 8A
  4522.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 8B
  4523.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 8C
  4524.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 8D
  4525.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 8E
  4526.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 8F
  4527.  
  4528.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 90
  4529.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 91
  4530.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 92
  4531.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 93
  4532.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 94
  4533.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 95
  4534.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 96
  4535.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 97
  4536.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 98
  4537.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 99
  4538.    {"v4fmaddps", 0x24  ,0x8F9800, 0x19  , 0x164B, 0x164B, 0x264B, 0     , 0x20  , 0     , 0     , 0     },    // EVEX F2 0F 38 9A
  4539.    {"v4fmaddss", 0x24  ,0x8F9800, 0x19  , 0x144B, 0x144B, 0x244B, 0     , 0x20  , 0     , 0     , 0     },    // EVEX F2 0F 38 9B
  4540.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 9C
  4541.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 9D
  4542.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 9E
  4543.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 9F
  4544.  
  4545. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4546.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A0
  4547.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A1
  4548.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A2
  4549.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A3
  4550.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A4
  4551.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A5
  4552.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A6
  4553.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A7
  4554.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A8
  4555.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 A9
  4556.    {"v4fnmaddps",0x24  ,0x8F9800, 0x19  , 0x164B, 0x164B, 0x264B, 0     , 0x20  , 0     , 0     , 0     },    // EVEX F2 0F 38 AA
  4557.    {"v4fnmaddss",0x24  ,0x8F9800, 0x19  , 0x144B, 0x144B, 0x244B, 0     , 0x20  , 0     , 0     , 0     },    // EVEX F2 0F 38 AB
  4558.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 AC
  4559.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 AD
  4560.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F2 0F 38 AE
  4561.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // EVEX F2 0F 38 AF
  4562.  
  4563.  
  4564. // Shortcut opcode map for EVEX F3 0F 38
  4565. // Indexed by first opcode byte after EVEX prefix
  4566. SOpcodeDef OpcodeMapB3[] = {
  4567. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4568.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 00
  4569.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 01
  4570.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 02
  4571.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 03
  4572.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 04
  4573.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 05
  4574.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 06
  4575.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 07
  4576.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 08
  4577.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 09
  4578.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 0A
  4579.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 0B
  4580.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 0C
  4581.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 0D
  4582.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 0E
  4583.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 0F
  4584.  
  4585.    {"vpmovuswb", 0x20  ,0x820400, 0x13  , 0x0F01, 0x1202, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 10
  4586.    {"vpmovusdb", 0x20  ,0x820400, 0x13  , 0x0401, 0x1203, 0     , 0     , 0x2430, 0     , 0     , 0x800 },    // EVEX F3 0F 38 11
  4587.    {"vpmovusqb", 0x20  ,0x820400, 0x13  , 0x0401, 0x1204, 0     , 0     , 0x2630, 0     , 0     , 0x800 },    // EVEX F3 0F 38 12
  4588.    {"vpmovusdw", 0x20  ,0x820400, 0x13  , 0x0F02, 0x1203, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 13
  4589.    {"vpmovusqw", 0x20  ,0x820400, 0x13  , 0x0402, 0x1204, 0     , 0     , 0x2430, 0     , 0     , 0x800 },    // EVEX F3 0F 38 14
  4590.    {"vpmovusqd", 0x20  ,0x820400, 0x13  , 0x0F03, 0x1204, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 15
  4591.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 16
  4592.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 17
  4593.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 18
  4594.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 19
  4595.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 1A
  4596.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 1B
  4597.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 1C
  4598.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 1D
  4599.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 1E
  4600.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 1F
  4601.  
  4602. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4603.    {"vpmovswb",  0x20  ,0x820400, 0x13  , 0x0F01, 0x1202, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 20
  4604.    {"vpmovsdb",  0x20  ,0x820400, 0x13  , 0x0401, 0x1203, 0     , 0     , 0x2430, 0     , 0     , 0x800 },    // EVEX F3 0F 38 21
  4605.    {"vpmovsqb",  0x20  ,0x820400, 0x13  , 0x0401, 0x1204, 0     , 0     , 0x2630, 0     , 0     , 0x800 },    // EVEX F3 0F 38 22
  4606.    {"vpmovsdw",  0x20  ,0x820400, 0x13  , 0x0F02, 0x1203, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 23
  4607.    {"vpmovsqw",  0x20  ,0x820400, 0x13  , 0x0402, 0x1204, 0     , 0     , 0x2430, 0     , 0     , 0x800 },    // EVEX F3 0F 38 24
  4608.    {"vpmovsqd",  0x20  ,0x820400, 0x13  , 0x0F03, 0x1204, 0     , 0     , 0x2220, 0     , 0     , 0     },    // EVEX F3 0F 38 25
  4609.    {"vptestnm",  0x20  ,0x8EC200, 0x19  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0     , 0     , 1     },    // EVEX F3 0F 38 26
  4610.    {"vptestnm",  0x20  ,0x8EB200, 0x19  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0     , 0     , 1     },    // EVEX F3 0F 38 27
  4611.    {"vpmovm2",   0x20  ,0x86C400, 0x12  , 0x1201, 0x95  , 0     , 0     , 0     , 0     , 0     , 1     },    // EVEX F3 0F 38 28
  4612.    {0,           0x12E , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // EVEX F3 0F 38 29
  4613.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 2A
  4614.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 2B
  4615.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 2C
  4616.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 2D
  4617.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 2E
  4618.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 2F
  4619.  
  4620.    {"vpmovwb",   0x20  ,0x820400, 0x13  , 0x0F01, 0x1202, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 30
  4621.    {"vpmovdb",   0x20  ,0x820400, 0x13  , 0x0401, 0x1203, 0     , 0     , 0x2420, 0     , 0     , 0x800 },    // EVEX F3 0F 38 31
  4622.    {"vpmovqb",   0x20  ,0x820400, 0x13  , 0x0401, 0x1204, 0     , 0     , 0x2620, 0     , 0     , 0x800 },    // EVEX F3 0F 38 32
  4623.    {"vpmovdw",   0x20  ,0x820400, 0x13  , 0x0F02, 0x1203, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 33
  4624.    {"vpmovqw",   0x20  ,0x820400, 0x13  , 0x0402, 0x1204, 0     , 0     , 0x2420, 0     , 0     , 0x800 },    // EVEX F3 0F 38 34
  4625.    {"vpmovqd",   0x20  ,0x820400, 0x13  , 0x0F03, 0x1204, 0     , 0     , 0x2220, 0     , 0     , 0x800 },    // EVEX F3 0F 38 35
  4626.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 36
  4627.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 37
  4628.    {"vpmovm2",   0x20  ,0x86B400, 0x12  , 0x1201, 0x95  , 0     , 0     , 0     , 0     , 0     , 1     },    // EVEX F3 0F 38 38
  4629.    {0,           0x12F , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // EVEX F3 0F 38 39
  4630.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 3A
  4631.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 3B
  4632.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 3C
  4633.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 3D
  4634.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 3E
  4635.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 3F
  4636.  
  4637. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4638.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 40
  4639.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 41
  4640.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 42
  4641.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 43
  4642.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 44
  4643.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 45
  4644.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 46
  4645.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 47
  4646.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 48
  4647.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 49
  4648.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 4A
  4649.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 4B
  4650.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 4C
  4651.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 4D
  4652.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 4E
  4653.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 4F
  4654.  
  4655.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 50
  4656.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 51
  4657.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 52
  4658.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 53
  4659.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 54
  4660.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 55
  4661.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 56
  4662.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 57
  4663.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 58
  4664.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 59
  4665.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 5A
  4666.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 5B
  4667.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 5C
  4668.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 5D
  4669.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 5E
  4670.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 5F
  4671.  
  4672. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4673.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 60
  4674.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 61
  4675.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 62
  4676.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 63
  4677.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 64
  4678.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 65
  4679.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 66
  4680.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 67
  4681.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 68
  4682.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 69
  4683.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 6A
  4684.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 6B
  4685.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 6C
  4686.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 6D
  4687.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 6E
  4688.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 6F
  4689.  
  4690.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 70
  4691.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 71
  4692.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 72
  4693.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 73
  4694.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 74
  4695.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 75
  4696.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 76
  4697.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 77
  4698.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 78
  4699.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 79
  4700.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 7A
  4701.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 7B
  4702.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 7C
  4703.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 7D
  4704.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 7E
  4705.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 7F
  4706.  
  4707. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4708.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 80
  4709.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 81
  4710.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 82
  4711.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 83
  4712.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 84
  4713.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 85
  4714.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 86
  4715.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 87
  4716.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 88
  4717.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 89
  4718.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 8A
  4719.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 8B
  4720.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 8C
  4721.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 8D
  4722.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 8E
  4723.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 8F
  4724.  
  4725.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 90
  4726.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 91
  4727.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 92
  4728.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 93
  4729.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 94
  4730.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 95
  4731.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 96
  4732.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 97
  4733.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 98
  4734.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 99
  4735.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 9A
  4736.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 9B
  4737.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 9C
  4738.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 9D
  4739.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 9E
  4740.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 9F
  4741.  
  4742. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4743.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A0
  4744.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A1
  4745.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A2
  4746.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A3
  4747.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A4
  4748.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A5
  4749.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A6
  4750.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A7
  4751.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A8
  4752.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 A9
  4753.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 AA
  4754.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 AB
  4755.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 AC
  4756.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 AD
  4757.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 AE
  4758.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // EVEX F3 0F 38 AF
  4759.  
  4760.  
  4761.  
  4762. // Submap for vcvtfxpntpd2udq etc. Opcode byte = 0F 3A CA
  4763. // Indexed by prefix: none/66/F2/F3
  4764. SOpcodeDef OpcodeMapB4[] = {
  4765. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4766. {"vcvtfxpntudq2ps",0x80 ,0x420000, 0x52 , 0x164B, 0x603 , 0x31  , 0     , 0     , 0x1206, 0     , 0x100 },    //    0F 3A CA
  4767. {"vcvtfxpntps2udq",0x80 ,0x420200, 0x52 , 0x1603, 0x64B , 0x31  , 0     , 0     , 0x1204, 0     , 0x100 },    // 66 0F 3A CA
  4768. {"vcvtfxpntpd2udq",0x80 ,0x423800, 0x52 , 0x1603, 0x64C , 0x31  , 0     , 0     , 0x1205, 0     , 0x100 },    // F2 0F 3A CA
  4769.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 3A CA
  4770.  
  4771. // Submap for vcvtfxpntdq2ps etc. Opcode byte = 0F 3A CB
  4772. // Indexed by prefix: none/66/F2/F3
  4773. SOpcodeDef OpcodeMapB5[] = {
  4774. {"vcvtfxpntdq2ps",0x80  ,0x420000, 0x52 , 0x164B, 0x603 , 0x31  , 0     , 0     , 0x1206, 0     , 0x100 },    //    0F 3B CB
  4775. {"vcvtfxpntps2dq",0x80  ,0x420200, 0x52 , 0x1603, 0x64B , 0x31  , 0     , 0     , 0x1204, 0     , 0x100 },    // 66 0F 3B CB
  4776.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 3B CB
  4777.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 3B CB
  4778.  
  4779. // Submap for vgatherdps. Opcode byte = 0F 38 92
  4780. // Indexed by MVEX prefix
  4781. SOpcodeDef OpcodeMapB6[] = {
  4782.    {"vgatherdp", 0xCC  ,0       ,  0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // VEX 0F 38 92. link vgatherdps
  4783.    {"vgatherdp", 0xCB  ,0       ,  0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // EVEX/MVEX 0F 38 92. link vgatherdps, has k register as mask
  4784.  
  4785. // Submap for E/MVEX 0F 38 C6 vgatherpf.. Indexed by W bit
  4786. SOpcodeDef OpcodeMapB7[] = {
  4787. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4788.    {0       ,    0x10D  , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     },    // E/MVEX 0F 38 C6. W0
  4789.    {0       ,    0x10E  , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0x2   , 0     }};   // E/MVEX 0F 38 C6. W1
  4790.  
  4791. // Submap for movdqa. Opcode byte = 66 0F 6F
  4792. // Indexed by E/MVEX prefix
  4793. SOpcodeDef OpcodeMapB8[] = {
  4794.    {"movdqa",    0x12  , 0x52100, 0x12  , 0x1250, 0x250 , 0     , 0     , 0     , 0     , 0     , 0x102 },    // 66 0F 6F
  4795.    {"vmovdqa",   0x19  ,0xC53100, 0x12  , 0x1209, 0x209 , 0     , 0     , 0x30  , 0x140A, 0     , 0x1100}};   // E/MVEX.66 0F 6F
  4796.  
  4797. // Submap for movdqu. Opcode byte = F3 0F 6F
  4798. // Indexed by E/MVEX prefix
  4799. SOpcodeDef OpcodeMapB9[] = {
  4800.    {"movdqu",    0x12  , 0x50400, 0x12  , 0x1250, 0x251 , 0     , 0     , 0     , 0     , 0     , 0x202 },    // F3 0F 6F
  4801.    {"vmovdqu",   0x20  ,0x853400, 0x12  , 0x1209, 0x209 , 0     , 0     , 0x30  , 0     , 0     , 0x1200}};   // F3 0F 6F
  4802.  
  4803. // Submap for movdqa. Opcode byte = 66 0F 7F
  4804. // Indexed by E/MVEX prefix
  4805. SOpcodeDef OpcodeMapBA[] = {
  4806.    {"movdqa",    0x12  , 0x52100, 0x13  , 0x250 , 0x1250, 0     , 0     , 0     , 0     , 0     , 0x102 },    // 66 0F 7F
  4807.    {"vmovdqa",   0x19  ,0xC53100, 0x13  , 0x203 , 0x1203, 0     , 0     , 0x30  , 0x140E, 0     , 0x1100}};   // E/MVEX.66.W0 0F 7F
  4808.  
  4809. // Submap for movdqu. Opcode byte = F3 0F 7F
  4810. // Indexed by MVEX.W prefix
  4811. SOpcodeDef OpcodeMapBB[] = {
  4812.    {"movdqu",    0x12  , 0x50400, 0x13  , 0x251 , 0x1250, 0     , 0     , 0     , 0     , 0     , 0x202 },    // F3 0F 7F
  4813.    {"vmovdqu",   0x20  ,0x853400, 0x13  , 0x209 , 0x1209, 0     , 0     , 0x30  , 0     , 0     ,0x1200 }};   // E/MVEX F3 0F 7F
  4814.  
  4815. // Submap for vmovaps. Opcode byte = 0F 29
  4816. // Indexed by prefix: none/66/F2/F3
  4817. SOpcodeDef OpcodeMapBC[] = {
  4818.    {"mova",      0x11  ,0xC52200, 0x13 , 0x24F  , 0x124F, 0     , 0     , 0x30  , 0x140C, 0     , 0x103 },    //    0F 29. movaps
  4819.    {"mova",      0x11  ,0xC52200, 0x13 , 0x24F  , 0x124F, 0     , 0     , 0x30  , 0x140C, 0     , 0x103 },    // 66 0F 29. movapd
  4820.    {0       ,    0xBD  , 0      , 0    ,  0     , 0     , 0     , 0     , 0     , 0     , 0xF   , 0     },    // F2 0F 29. link to vmovnraps
  4821.    {0       ,    0xBD  , 0      , 0    ,  0     , 0     , 0     , 0     , 0     , 0     , 0xF   , 0     }};   // F3 0F 29. link to vmovnraps
  4822.  
  4823. // Submap for vmovnraps. Opcode byte = F2/F3 0F 29
  4824. // Indexed by MVEX.E bit
  4825. SOpcodeDef OpcodeMapBD[] = {
  4826.    {"vmovnrap",   0x80  ,0x411C00, 0x13  ,0x224F , 0x124F, 0    , 0     , 0     , 0x180C, 0     , 0x101 },    // F2/F3 0F 29
  4827.    {"vmovnrngoap",0x80  ,0x411C00, 0x13  ,0x224F , 0x124F, 0    , 0     , 0     , 0x180C, 0     , 0x101 }};   // F2/F3 0F 29, MVEX.E
  4828.  
  4829. // Submap for vloadunpackld. Opcode byte = 0F 38 D0
  4830. // Indexed by prefix: none/66
  4831. SOpcodeDef OpcodeMapBE[] = {
  4832.    {"vloadunpackl",0x80, 0x423200,0x12  , 0x1609, 0x2609, 0     , 0     , 0     , 0x100A, 0     , 0x101 },    // 0F 38 D0
  4833.    {"vpackstorel" ,0x80, 0x423200,0x13  , 0x2609, 0x1609, 0     , 0     , 0     , 0x100E, 0     , 0x101 }};   // 66 0F 38 D0
  4834.  
  4835. // Submap for vloadunpacklps. Opcode byte = 0F 38 D1
  4836. // Indexed by prefix: none/66
  4837. SOpcodeDef OpcodeMapBF[] = {
  4838.    {"vloadunpacklp",0x80,0x421200,0x12  , 0x164F, 0x264F, 0     , 0     , 0     , 0x1008, 0     , 0x101 },    // 0F 38 D1
  4839.    {"vpackstorelp" ,0x80,0x421200,0x13  , 0x264F, 0x164F, 0     , 0     , 0     , 0x100C, 0     , 0x101 }};   // 66 0F 38 D1
  4840.  
  4841. // Submap for vloadunpackhd. Opcode byte = 0F 38 D4
  4842. // Indexed by prefix: none/66
  4843. SOpcodeDef OpcodeMapC0[] = {
  4844.    {"vloadunpackh",0x80, 0x423200,0x12  , 0x1609, 0x2609, 0     , 0     , 0     , 0x100A, 0     , 0x101 },    // 0F 38 D4
  4845.    {"vpackstoreh" ,0x80, 0x423200,0x13  , 0x2609, 0x1609, 0     , 0     , 0     , 0x100E, 0     , 0x101 }};   // 66 0F 38 D4
  4846.  
  4847. // Submap for vloadunpackhps. Opcode byte = 0F 38 D5
  4848. // Indexed by prefix: none/66
  4849. SOpcodeDef OpcodeMapC1[] = {
  4850.    {"vloadunpackhp",0x80,0x421200,0x12  , 0x164F, 0x264F, 0     , 0     , 0     , 0x1008, 0     , 0x101 },    // 0F 38 D5
  4851.    {"vpackstorehp" ,0x80,0x421200,0x13  , 0x264F, 0x164F, 0     , 0     , 0     , 0x100C, 0     , 0x101 }};   // 66 0F 38 D5
  4852.  
  4853. // Submap for pand. Opcode byte = 0F DB
  4854. // Indexed by E/MVEX prefix
  4855. SOpcodeDef OpcodeMapC2[] = {
  4856. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4857.    {"pand",      0x7   , 0xD0200, 0x19  , 0x1150, 0x1150, 0x150 , 0     , 0     , 0     , 0     , 0x2   },    // 0F DB
  4858.    {"vpand",     0x20  ,0xC93200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   }};   // MVEX 0F DB
  4859.  
  4860. // Submap for pandn. Opcode byte = 0F DF
  4861. // Indexed by MVEX prefix
  4862. SOpcodeDef OpcodeMapC3[] = {
  4863.    {"pandn",     0x7   , 0xD0200, 0x19  , 0x1150, 0x1150, 0x150 , 0     , 0     , 0     , 0     , 0x2   },    // 0F DF
  4864.    {"vpandn",    0x20  ,0xC93200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   }};   // MVEX 0F DF
  4865.  
  4866. // Submap for por. Opcode byte = 0F EB
  4867. // Indexed by E/MVEX prefix
  4868. SOpcodeDef OpcodeMapC4[] = {
  4869.    {"por",       0x7   , 0xD0200, 0x19  , 0x1150, 0x1150, 0x150 , 0     , 0     , 0     , 0     , 0x2   },    // 0F EB
  4870.    {"vpor",      0x20  ,0xC93200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   }};   // MVEX 0F EB
  4871.  
  4872. // Submap for pxor. Opcode byte = 0F EF
  4873. // Indexed by MVEX prefix
  4874. SOpcodeDef OpcodeMapC5[] = {
  4875.    {"pxor",      0x7   , 0xD0200, 0x19  , 0x1150, 0x1150, 0x150 , 0     , 0     , 0     , 0     , 0x2   },    // 0F EF
  4876.    {"vpxor",     0x20  ,0xC93200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   }};   // MVEX 0F EF
  4877.  
  4878. // Submap for vpcmpd. Opcode byte = 0F 3A 3E
  4879. // Indexed by VEX / EVEX
  4880. SOpcodeDef OpcodeMapC6[] = {
  4881.    {"kextract",  0x80  , 0x38200, 0x52  , 0x1095, 0x1004, 0x11  , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 3A 3E
  4882.    {0,           0x112 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     }};   // EVEX 0F 3A 3F. Link to vpcmp
  4883.  
  4884. // Submap for pcmpeqd. Opcode byte = 0F 76
  4885. // Indexed by E/MVEX prefix
  4886. SOpcodeDef OpcodeMapC7[] = {
  4887.    {"pcmpeqd",   0x7   , 0xD0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 76
  4888.    {"vpcmpeqd",  0x20  ,0xCBA200, 0x19  , 0x95  , 0x1203, 0x203 , 0     , 0x11  , 0x1406, 0     , 0x000 }};   // E/MVEX 0F 76
  4889.  
  4890. // Submap for pcmpgtd. Opcode byte = 0F 66
  4891. // Indexed by E/MVEX prefix
  4892. SOpcodeDef OpcodeMapC8[] = {
  4893.    {"pcmpgtd",   0x7   , 0xD0200, 0x19  , 0x1103, 0x1103, 0x103 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 66
  4894.    {"vpcmpgtd",  0x20  ,0xCBA200, 0x19  , 0x95  , 0x1203, 0x203 , 0     , 0x11  , 0x1406, 0     , 0x000 }};   // E/MVEX 0F 66
  4895.  
  4896. // Opcode map for EVEX 66 0F 79. Indexed by W bit
  4897. SOpcodeDef OpcodeMapC9[] = {
  4898. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4899. {"vcvtps2uqq",   0x20  ,0x840200, 0x12  , 0x204 , 0xF4B , 0     , 0     , 0x27  , 0     , 0     , 0     },    // EVEX 66 0F 79. W = 0
  4900. {"vcvtpd2uqq",   0x20  ,0x841200, 0x12  , 0x204 , 0x24C , 0     , 0     , 0x27  , 0     , 0     , 0     }};   // EVEX 66 0F 79. W = 1
  4901.  
  4902. // Opcode map for 0F 50. Indexed by prefix
  4903. SOpcodeDef OpcodeMapCA[] = {
  4904. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4905.    {"movmskps",  0x11  , 0x52000, 0x12  , 0x100A, 0x124B, 0     , 0     , 0     , 0     , 0     , 2     },    // 0F 50. movmskps
  4906.    {"movmskpd",  0x11  , 0x52200, 0x12  , 0x100A, 0x124C, 0     , 0     , 0     , 0     , 0     , 2     },    // 66 0F 50. movmskpd
  4907.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  4908.  
  4909. // Submap for EVEX vgatherdps. Opcode byte = 0F 38 92
  4910. // Indexed by VEX.W bit
  4911. SOpcodeDef OpcodeMapCB[] = {
  4912.    {"vgatherdps",0x20  ,0xC39200,  0x1E,  0x24F , 0x224F, 0     , 0     , 0x1090, 0x3048, 0     , 0     },    // EVEX/MVEX 0F 38 92 has k register as mask
  4913.    {"vgatherdpd",0x20  ,0xC39200,  0x1E,  0x24F , 0x2F4F, 0     , 0     , 0x1090, 0x3048, 0     , 0     }};   // EVEX/MVEX 0F 38 92 has k register as mask
  4914.  
  4915. // Submap for vgatherdps. Opcode byte = 0F 38 92
  4916. // Indexed by VEX.W bit
  4917. SOpcodeDef OpcodeMapCC[] = {
  4918.    {"vgatherdps",0x1C  ,0x0E9200,  0x1E,  0x24B , 0x224B, 0x24B , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 38 92
  4919.    {"vgatherdpd",0x1C  ,0x0E9200,  0x1E,  0x24C , 0x2F4C, 0x24C , 0     , 0     , 0     , 0     , 0     }};   // VEX 0F 38 92
  4920.  
  4921. // Submap for opcodes VEX/MVEX 0F AE
  4922. // Indexed by reg bits = 0 - 7 and mod < 3 to mod = 3
  4923. // These codes are with VEX or MVEX prefix. Same codes without prefix are in OpcodeMap34
  4924. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4925. SOpcodeDef OpcodeMapCD[] = {
  4926.    {"fxsave",    0x11  , 0      , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE /0
  4927.    {"fxrstor",   0x11  , 0      , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0x8   },     // VEX 0F AE /1
  4928.    {"vldmxcsr",  0x11  , 0x10000, 0x11  , 0     , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE /2
  4929.    {"vstmxcsr",  0x11  , 0x10000, 0x11  , 0x2003, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE /3
  4930.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE /4
  4931.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE /5
  4932.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE /6
  4933.    {0       ,    0xCF   , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },     // VEX 0F AE /7. Link
  4934.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE reg /0
  4935.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE reg /1
  4936.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE reg /2
  4937.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE reg /3
  4938.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE reg /4
  4939.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 0F AE reg /5
  4940.    {0       ,    0xCE   , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },     // VEX 0F AE reg /6. Link
  4941.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};    // VEX 0F AE reg /7
  4942.  
  4943. // Submap for opcodes VEX/MVEX 0F AE /6
  4944. // Indexed by prefixes 66 F2 F3
  4945. SOpcodeDef OpcodeMapCE[] = {
  4946. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4947.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX    0F AE /6
  4948.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 66 0F AE /6
  4949.    {"spflt" ,    0x80   , 0x33400, 0x11 , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX F2 0F AE /6
  4950.    {"delay" ,    0x80   , 0x33400, 0x11 , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     }};    // VEX F3 0F AE /6
  4951.  
  4952. // Submap for opcodes VEX/MVEX 0F AE /7
  4953. // Indexed by prefixes 66 F2 F3
  4954. SOpcodeDef OpcodeMapCF[] = {
  4955.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX    0F AE /7
  4956.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // VEX 66 0F AE /7
  4957.    {"clevict0",  0x80   ,0x430800, 0x11 , 0x2006, 0     , 0     , 0     , 0     , 2     , 0     , 0     },     // VEX F2 0F AE /7
  4958.    {"clevict1",  0x80   ,0x430400, 0x11 , 0x2006, 0     , 0     , 0     , 0     , 2     , 0     , 0     }};    // VEX F3 0F AE /7
  4959.  
  4960. // Submap for opcodes 0F 38 F6
  4961. // Indexed by prefixes 66 F2 F3
  4962. SOpcodeDef OpcodeMapD0[] = {
  4963.    {"wrss"  ,    0      , 0x1000 , 0x13 , 0x2009, 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },     //    0F 38 F6
  4964.    {"adcx"  ,    0x1D   , 0x1200 , 0x12 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },     // 66 0F 38 F6
  4965.    {"mulx"  ,    0x1D   , 0xB1000, 0x19 , 0x1009, 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     },     // F2 0F 38 F6
  4966.    {"adox"  ,    0x1D   , 0x1400 , 0x12 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     }};    // F3 0F 38 F6
  4967.  
  4968. SOpcodeDef OpcodeMapD1[] = {
  4969. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4970.    {"prefetch",  0x1001 ,  0     , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0D /0 AMD only. Works as NOP on Intel
  4971.    {"prefetchw", 0x1D   ,  0     , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0D /1
  4972.    {"prefetchwt1",0x22  ,  0     , 0x11  , 0     , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 0D /2
  4973.    {0       ,    0      ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   //
  4974.  
  4975. // Tertiary opcode map for movnt. Opcode byte = 0F 2B
  4976. // Indexed by prefix = none, 66, F2, F3
  4977. SOpcodeDef OpcodeMapD2[4] = {
  4978. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4979.    {"movntps",   0x11  ,0x852000, 0x13  , 0x224B, 0x124B, 0     , 0     , 0x00  , 0     , 0     , 0x102 },    // 0F 2B. movntps
  4980.    {"movntpd",   0x12  ,0x852200, 0x13  , 0x224C, 0x124C, 0     , 0     , 0x00  , 0     , 0     , 0x102 },    // 66 0F 2B. movntpd
  4981.    {"movntsd",   0x1004, 0x800  , 0x13  , 0x204C, 0x104C, 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 2B. movntsd (AMD only)
  4982.    {"movntss",   0x1004, 0x400  , 0x13  , 0x204B, 0x104B, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 2B. movntss (AMD only)
  4983.  
  4984. // opcode map for bsr and lzcnt. Opcode byte = 0F BD
  4985. // Indexed by prefix = none, 66, F2, F3
  4986. SOpcodeDef OpcodeMapD3[4] = {
  4987. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  4988.    {"bsr",       0x3   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F BD. bsr
  4989.    {"bsr",       0x3   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F BD. not allowed
  4990.    {"bsr",       0x3   , 0x1100 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F BD. not allowed
  4991.    {"lzcnt",     0x1D  ,0x11500 , 0x12  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F BD. AMD SSE4a, Intel LZCNT
  4992.  
  4993. // Opcode map for blcfill etc. Opcode byte = XOP(9) 01, indexed by reg bits
  4994. SOpcodeDef OpcodeMapD4[] = {
  4995.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 01 /0
  4996.    {"blcfill",   0x1007, 0x11000, 0x18  , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 01 /1
  4997.    {"blsfill",   0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 01 /2
  4998.    {"blcs"  ,    0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 01 /3
  4999.    {"tzmsk" ,    0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 01 /4
  5000.    {"blcic" ,    0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 01 /5
  5001.    {"blsic" ,    0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 01 /6
  5002.    {"t1mskc",    0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     }};   // XOP(9) 01 /7
  5003.  
  5004. // Opcode map for blcmsk etc. Opcode byte = XOP(9) 02, indexed by reg bits
  5005. SOpcodeDef OpcodeMapD5[] = {
  5006.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 02 /0
  5007.    {"blcmsk",    0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 02 /1
  5008.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 02 /2
  5009.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 02 /3
  5010.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 02 /4
  5011.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 02 /5
  5012.    {"blci"  ,    0x1007 , 0x11000, 0x18 , 0x1009, 0x9   , 0     , 0     , 0     , 0     , 0     , 0     },    // XOP(9) 02 /6
  5013.    {0       ,    0      , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // XOP(9) 02 /7
  5014.  
  5015. // Opcode map for EVEX 0F 79. Indexed by 66,F2,F3 prefix
  5016. SOpcodeDef OpcodeMapD6[] = {
  5017. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5018.    {0,           0xD9  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // EVEX 0F 79. Link to vcvtps/pd2udq
  5019.    {0,           0xC9  , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // EVEX 66 0F 79. Link to
  5020.    {"vcvtsd2usi",0x20  ,0x803800, 0x12  , 0x1009, 0x4C  , 0     , 0     , 0x6   , 0     , 0     , 0     },    // EVEX F2 0F 79
  5021.    {"vcvtss2usi",0x20  ,0x803800, 0x12  , 0x1009, 0x4B  , 0     , 0     , 0x6   , 0     , 0     , 0     }};   // EVEX F3 0F 79
  5022.  
  5023. // Opcode map for 0F 38 A0. Indexed by VEX.W bit
  5024. SOpcodeDef OpcodeMapD7[] = {
  5025.    {"vpscatterdd",0x20 , 0xC3B200,0x1E  , 0x2209, 0x1209, 0     , 0     , 0x1090, 0x304E, 0     , 0x000 },    // W0 0F 38 A0
  5026.    {"vpscatterdq",0x20 , 0xC3B200,0x1E  , 0x2F09, 0x1209, 0     , 0     , 0x1090, 0x304E, 0     , 0x000 }};   // W1 0F 38 A0
  5027.  
  5028. // Opcode map for 0F 38 A1. Indexed by VEX.W bit
  5029. SOpcodeDef OpcodeMapD8[] = {
  5030.    {"vpscatterqd",0x20 , 0xC3B200,0x1E  , 0x2209, 0x1F09, 0     , 0     , 0x1090, 0x304E, 0     , 0x000 },    // W0 0F 38 A0
  5031.    {"vpscatterqq",0x20 , 0xC3B200,0x1E  , 0x2209, 0x1209, 0     , 0     , 0x1090, 0x304E, 0     , 0x000 }};   // W1 0F 38 A0
  5032.  
  5033. // Opcode map for EVEX 0F 79, pp0. Indexed by W bit
  5034. SOpcodeDef OpcodeMapD9[] = {
  5035. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5036. {"vcvtps2udq",   0x20  ,0x840000, 0x12  , 0x203 , 0x24B , 0     , 0     , 0x37  , 0     , 0     , 0     },    // EVEX 0F 79. W = 0
  5037. {"vcvtpd2udq",   0x20  ,0x841000, 0x12  , 0xF03 , 0x24C , 0     , 0     , 0x37  , 0     , 0     , 0     }};   // EVEX 0F 79. W = 1
  5038.  
  5039. // Opcode map for EVEX 0F 78. Indexed by 66,F2,F3 prefix
  5040. SOpcodeDef OpcodeMapDA[] = {
  5041.    {0,           0xDB  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // EVEX 0F 78. Link to vcvttpd2udq
  5042.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 EVEX 0F 78
  5043.    {"vcvttsd2usi",0x20 ,0x803800, 0x12  , 0x1009, 0x4C  , 0     , 0     , 0x2   , 0     , 0     , 0     },    // F2 EVEX 0F 78
  5044.    {"vcvttss2usi",0x20 ,0x803400, 0x12  , 0x1009, 0x4B  , 0     , 0     , 0x2   , 0     , 0     , 0     }};   // F3 EVEX 0F 78
  5045.  
  5046. // Opcode map for EVEX 0F 78. Indexed by W bit
  5047. SOpcodeDef OpcodeMapDB[] = {
  5048.    {"vcvttps2udq",0x20 ,0x841000, 0x12  , 0x1203, 0x24B , 0     , 0     , 0x37  , 0     , 0     , 0     },    // VEX 0F 78
  5049.    {"vcvttpd2udq",0x20 ,0x841000, 0x12  , 0x1F03, 0x24C , 0     , 0     , 0x37  , 0     , 0     , 0     }};   // VEX 0F 78
  5050.  
  5051. // Opcode map for EVEX 0F 7A. Indexed by 66,F2,F3 prefix
  5052. SOpcodeDef OpcodeMapDC[] = {
  5053.    {0           , 0    , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX 0F 7A
  5054.    {0           , 0    , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 EVEX 0F 7A
  5055.    {0           ,0x11B , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // F2 EVEX 0F 7A. Link to vcvtudq2ps
  5056.    {0           ,0x11C , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // F3 E/MVEX 0F 7A. Link to vcvtudq2pd
  5057.  
  5058. // Opcode map for EVEX 0F 7B. Indexed by 66,F2,F3 prefix
  5059. SOpcodeDef OpcodeMapDD[] = {
  5060.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //    EVEX 0F 7B
  5061.    {0,           0x11A , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 66 EVEX 0F 7B. Link to vcvtps/pd2qq
  5062.    {"vcvtusi2sd",0x20  ,0x8C3800, 0x19  , 0x104C, 0x104C, 9     , 0     , 0x06  , 0     , 0     , 0     },    // F2 EVEX 0F 7B
  5063.    {"vcvtusi2ss",0x20  ,0x8C3400, 0x19  , 0x104B, 0x104B, 9     , 0     , 0x06  , 0     , 0     , 0     }};   // F3 EVEX 0F 7B
  5064.  
  5065. // Opcode map for 0F 3A 1B. Indexed by W bit
  5066. SOpcodeDef OpcodeMapDE[] = {
  5067.    {"vextractf32x8",0x20,0x801200,0x53  , 0x54B , 0x124B, 0x31  , 0     , 0x30  , 0     , 0     , 0     },    // 0F 3A 1B. W0
  5068.    {"vextractf64x4",0x20,0x801200,0x53  , 0x54B , 0x124B, 0x31  , 0     , 0x30  , 0     , 0     , 0     }};   // 0F 3A 1B. W1
  5069.  
  5070. // Opcode map for 0F 3A 3B. Indexed by W bit
  5071. SOpcodeDef OpcodeMapDF[] = {
  5072.    {"vextracti32x8",0x20,0x800200, 0x53 , 0x504 , 0x1204, 0x31  , 0     , 0x20  , 0     , 0     , 0     },    // 0F 3A 3B
  5073.    {"vextracti64x4",0x20,0x801200, 0x53 , 0x504 , 0x1204, 0x31  , 0     , 0x20  , 0     , 0     , 0     }};   // 0F 3A 3B
  5074.  
  5075. // Opcode map for 0F 38 93. Indexed by EVEX present
  5076. SOpcodeDef OpcodeMapE0[] = {
  5077.    {"vgatherqp", 0x95  , 0      , 0   ,   0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    // 0F 38 93. Link to vpgatherqps/pd
  5078.    {"vgatherqp", 0xE1  , 0      , 0    ,  0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // EVEX/MVEX 0F 38 92 has k register as mask. Link by vector size
  5079.  
  5080. // Opcode map for 0F 38 93. Indexed by W bit
  5081. SOpcodeDef OpcodeMapE1[] = {
  5082.    {"vgatherqps",0x20  ,0xC39200, 0x1E ,  0xF4F , 0x224F, 0     , 0     , 0x1090, 0x3048, 0     , 0     },    // EVEX/MVEX 0F 38 92. W0
  5083.    {"vgatherqpd",0x20  ,0xC39200, 0x1E ,  0x24F , 0x224F, 0     , 0     , 0x1090, 0x3048, 0     , 0     }};   // EVEX/MVEX 0F 38 92. W1
  5084.  
  5085. // map for movd/movq. Opcode byte = 0F 7E
  5086. // Indexed by prefix: none/66/F2/F3
  5087. SOpcodeDef OpcodeMapE2[] = {
  5088.    {"vmov",      0x7   ,0x813200, 0x13  , 0x9   , 0x1409, 0     , 0     , 0x00  , 0     , 0     , 0x1   },    //    VEX 0F 7E
  5089.    {"vmov",      0x7   ,0x813200, 0x13  , 0x9   , 0x1409, 0     , 0     , 0x00  , 0     , 0     , 0x1   },    // 66 VEX 0F 7E
  5090.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 VEX 0F 7E
  5091.    {0,           0x5B  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0x3   , 0     }};   // F3 0F 7E. Link to map 5B. movq xmm,xmm/m64
  5092.  
  5093. // map for 0F 38 29
  5094. // Indexed by EVEX
  5095. SOpcodeDef OpcodeMapE3[] = {
  5096.    {"pcmpeqq",   0x16  , 0xD8200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0     , 0     , 0     , 0x2   },    //      0F 38 29
  5097.    {"vpcmpeqq",  0x20  ,0x8FB200, 0x19  , 0x95  , 0x1204, 0x204 , 0     , 0x11  , 0     , 0     , 0     }};   // EVEX 0F 38 29
  5098.  
  5099. // map for 0F 38 37
  5100. // Indexed by EVEX
  5101. SOpcodeDef OpcodeMapE4[] = {
  5102.    {"pcmpgtq",   0x16  , 0xD8200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 38 37
  5103.    {"vpcmpgtq",  0x20  ,0x8FB200, 0x19  , 0x95  , 0x1204, 0x204 , 0     , 0x11  , 0     , 0     , 0     }};   // EVEX 0F 38 37
  5104.  
  5105. // Submap for 0F 38 1A, indexed by VEX.W bit
  5106. SOpcodeDef OpcodeMapE5[] = {
  5107.    {0       ,    0xF8   , 0      , 0    , 0     , 0     , 0     , 0     , 0     , 0     , 0xE   , 0     },    // VEX 0F 38 1A /W0, link to vbroadcastf128 vbroadcastf32x4
  5108.    {"vbroadcastf64x2",0x20,0xC6B200,0x12, 0x124C, 0x244C, 0     , 0     , 0x20  , 0x1010, 0     , 0x100 }};   // 0F 38 1A, 512 bits
  5109.  
  5110. // Map for 0F 38 39. Indexed by EVEX present
  5111. SOpcodeDef OpcodeMapE6[] = {
  5112.    {"pminsd",    0x15  ,0x4D8200, 0x19  , 0x1203, 0x1203, 0x203 , 0     , 0     , 0x1406, 0     , 0x2   },    //      0F 38 39
  5113.    {0,           0x12D , 0      , 0x19  , 0     , 0     , 0     , 0     , 0     , 0     , 0x9   , 0     }};   // EVEX 0F 38 39
  5114.  
  5115. // Map for 0F 38 3B. Indexed by EVEX present
  5116. SOpcodeDef OpcodeMapE7[] = {
  5117.    {"pminud",    0x15  ,0x4D8200, 0x19  , 0x1203, 0x1203, 0x203 , 0     , 0     , 0x1406, 0     , 0x2   },    // 0F 38 3B
  5118.    {"vpminu",    0x15  ,0xCDB200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   }};   // 0F 38 3B
  5119.  
  5120. // Map for 0F 38 3D. Indexed by EVEX present
  5121. SOpcodeDef OpcodeMapE8[] = {
  5122.    {"pmaxsd",    0x15  ,0x4D8200, 0x19  , 0x1203, 0x1203, 0x203 , 0     , 0     , 0x1406, 0     , 0x2   },    // 0F 38 3D
  5123.    {"vpmaxs",    0x15  ,0xCDB200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   }};   // 0F 38 3D
  5124.  
  5125. // Map for 0F 38 3F. Indexed by EVEX present
  5126. SOpcodeDef OpcodeMapE9[] = {
  5127.    {"pmaxud",    0x15  ,0x4D8200, 0x19  , 0x1203, 0x1203, 0x203 , 0     , 0     , 0x1406, 0     , 0x2   },    // 0F 38 3F
  5128.    {"vpmaxu",    0x15  ,0xCDB200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   }};   // 0F 38 3F
  5129.  
  5130. // Map for 0F 38 10. Indexed by VEX prefix type
  5131. SOpcodeDef OpcodeMapEA[] = {
  5132. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5133.    {"pblendvb",  0x15  , 0x8200 , 0x12  , 0x1401, 0x401 , 0xAE  , 0     , 0     , 0     , 0     , 0     },    // 0F 38 10
  5134.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX 0F 38 10
  5135.    {"vpsrlvw",   0x20  ,0x8FC200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x20  , 0     , 0     , 0     },    // EVEX 0F 38 10
  5136.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // MVEX 0F 38 10
  5137.  
  5138. // Map for VEX 0F 90. Indexed by memory/register
  5139. SOpcodeDef OpcodeMapEB[] = {
  5140.    {"kmov",      0x20  , 0x35200, 0x12  , 0x1095, 0x2009, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 90. Name without w in KNC syntax, but code identical
  5141.    {"kmov",      0x20  , 0x35200, 0x12  , 0x1095, 0x95  , 0     , 0     , 0     , 0     , 0     , 1     }};   // VEX 0F 90. Name without w in KNC syntax, but code identical
  5142.  
  5143. // Map for VEX 0F 92. indexed by prefix 0 66 F2 F3
  5144. // The coding with F2 is different from other k instructions. Allow coding with 66 instead in case this is an error in the manual
  5145. SOpcodeDef OpcodeMapEC[] = {
  5146.    {"kmov",      0x20  , 0x35200, 0x12  , 0x95  , 0x1003, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 92. Name without w in KNC syntax, but code identical
  5147.    {"kmov",      0x20  , 0x35200, 0x12  , 0x95  , 0x1003, 0     , 0     , 0     , 0     , 0     , 1     },    // 66 VEX 0F 92
  5148.    {0,           0xED  , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // F2 VEX 0F 92
  5149.  
  5150. // Map for VEX 0F 92. indexed by VEX.W bit
  5151. SOpcodeDef OpcodeMapED[] = {
  5152.    {"kmovd",    0x20  , 0x35200, 0x12  , 0x95  , 0x1003, 0     , 0     , 0     , 0     , 0     , 0     },    // F2 VEX 0F 92. W0
  5153.    {"kmovq",    0x20  , 0x35200, 0x12  , 0x95  , 0x1004, 0     , 0     , 0     , 0     , 0     , 0     }};   // F2 VEX 0F 92. W1
  5154.  
  5155. // Map for VEX 0F 93. indexed by prefix 0 66 F2 F3
  5156. // The coding with F2 is different from other k instructions. Allow coding with 66 instead in case this is an error in the manual
  5157. SOpcodeDef OpcodeMapEE[] = {
  5158.    {"kmov",      0x20  , 0x35200, 0x12  , 0x1003, 0x1095, 0     , 0     , 0     , 0     , 0     , 1     },    // VEX 0F 93. Name without w in KNC syntax, but code identical
  5159.    {"kmov",      0x20  , 0x35200, 0x12  , 0x1003, 0x1095, 0     , 0     , 0     , 0     , 0     , 1     },    // 66 VEX 0F 93
  5160.    {0,           0xEF  , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // F2 VEX 0F 93
  5161.  
  5162. // Map for VEX 0F 93. indexed by VEX.W bit
  5163. SOpcodeDef OpcodeMapEF[] = {
  5164.    {"kmovd",     0x20  , 0x35200, 0x12  , 0x1003, 0x1095, 0     , 0     , 0     , 0     , 0     , 0     },    // F2 VEX 0F 93 W0
  5165.    {"kmovq",     0x20  , 0x35200, 0x12  , 0x1004, 0x1095, 0     , 0     , 0     , 0     , 0     , 0     }};   // F2 VEX 0F 93 W1
  5166.  
  5167. // Map for VEX 0F 4B. indexed by prefix 0 66 F2 F3
  5168. SOpcodeDef OpcodeMapF0[] = {
  5169.    {0,           0xF1  , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },
  5170.    {"kunpckbw",  0x20  ,0x1E3200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 0     },    // 66 VEX 0F 4B
  5171.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5172.  
  5173. // Map for VEX 0F 4B. indexed by VEX.W bit
  5174. SOpcodeDef OpcodeMapF1[] = {
  5175.    {"kunpckwd",  0x20  ,0x1E3200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 0     },    // VEX 0F 4B
  5176.    {"kunpckdq",  0x20  ,0x1E3200, 0x19  , 0x1095, 0x1095, 0x1095, 0     , 0     , 0     , 0     , 0     }};
  5177.  
  5178. // Map for 0F AE /7. Indexed by 66 prefix
  5179. SOpcodeDef OpcodeMapF2[] = {
  5180.    {"clflush",   0x12  , 0      , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // 0F AE /7
  5181.    {"clflushopt",0x22  , 0x200  , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     }};    // 66 0F AE /7
  5182.  
  5183. // Map for 0F AE /6. Indexed by 66 prefix
  5184. SOpcodeDef OpcodeMapF3[] = {
  5185.    {"xsaveopt",  0x19  , 0x2000 , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // 0F AE /6
  5186.    {"clwb    ",  0x22  , 0x200  , 0x11  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // 66 0F AE /6
  5187.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // F2 0F AE /6
  5188.    {"clrssbsy",  0     , 0x400  , 0x11  , 0     , 0x2004, 0     , 0     , 0     , 0     , 0     , 0     }};    // F3 0F AE /6
  5189.  
  5190. // Map for 0F AE reg /7. Indexed by 66 prefix
  5191. SOpcodeDef OpcodeMapF4[] = {
  5192.    {"sfence",    0x12  , 0      , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },     // m-7
  5193.    {"pcommit",   0x22  , 0x200  , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5194.  
  5195. // Opcode map for floating point cmpps/pd instructions. First two bytes = 0F C2
  5196. // Indexed by VEX prefix type
  5197. SOpcodeDef OpcodeMapF5[] = {
  5198.    {0,           0xF6  , 0      , 0x52  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     },    //      0F C2. Link to cmpps etc.
  5199.    {0,           0xF6  , 0      , 0x52  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     },    // VEX  0F C2. Link to cmpps etc.
  5200.    {0,           0xF7  , 0      , 0x52  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     },    // EVEX 0F C2. Link to cmpps etc.
  5201.    {0,           0xF7  , 0      , 0x52  , 0     , 0     , 0     , 0     , 0     , 0     , 0x6   , 0     }};   // MVEX 0F C2. Link to cmpps etc.
  5202.  
  5203. SOpcodeDef OpcodeMapF6[] = {
  5204. // Opcode map for floating point cmpps/pd instructions. First two bytes = 0F C2
  5205. // Indexed by immediate byte following operands = 0 - 7
  5206. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5207.    {"cmpeq",     0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 00: cmpeqps/pd
  5208.    {"cmplt",     0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 01:
  5209.    {"cmple",     0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 02:
  5210.    {"cmpunord",  0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 03:
  5211.    {"cmpneq",    0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 04:
  5212.    {"cmpnlt",    0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 05:
  5213.    {"cmpnle",    0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 06:
  5214.    {"cmpord",    0x12  ,0xCD2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 07:
  5215. // imm > 7 only with VEX
  5216.    {"vcmpeq_uq", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 08:
  5217.    {"vcmpnge_us",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 09:
  5218.    {"vcmpngt_us",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0A:
  5219.    {"vcmpfalse_oq",0x19,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0B:
  5220.    {"vcmpneq_oq",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0C:
  5221.    {"vcmpge_os", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0D:
  5222.    {"vcmpgt_os", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0E:
  5223.    {"vcmptrue_uq",0x19 ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0F:
  5224.    {"vcmpeq_os", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 10:
  5225.    {"vcmplt_oq", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 11:
  5226.    {"vcmple_oq", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 12:
  5227.    {"vcmpunord_s",0x19 ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 13:
  5228.    {"vcmpneq_us",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 14:
  5229.    {"vcmpnlt_uq",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 15:
  5230.    {"vcmpnle_uq",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 16:
  5231.    {"vcmpord_s", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 17:
  5232.    {"vcmpeq_us", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 18:
  5233.    {"vcmpnge_uq",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 19:
  5234.    {"vcmpngt_uq",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1A:
  5235.    {"vcmpfalse_os",0x19,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1B:
  5236.    {"vcmpneq_os",0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1C:
  5237.    {"vcmpge_oq", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1D:
  5238.    {"vcmpgt_oq", 0x19  ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1E:
  5239.    {"vcmptrue_us",0x19 ,0x8E2E00, 0x59  , 0x124F, 0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1F:
  5240.    {"vcmp",      0x19  ,0x8E2200, 0x4059, 0x124F, 0x24F , 0x24F , 0x31  , 0x13  , 0     , 0     , 0x3   }};   // 0F C2 op > 1F: cmpps/pd, imm
  5241.  
  5242.  
  5243. SOpcodeDef OpcodeMapF7[] = {
  5244. // Opcode map for floating point cmpps/pd instructions. EVEX 0F C2
  5245. // Indexed by immediate byte following operands = 0 - 7
  5246. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5247.    {"cmpeq",     0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 00: cmpeqps/pd
  5248.    {"cmplt",     0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 01:
  5249.    {"cmple",     0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 02:
  5250.    {"cmpunord",  0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 03:
  5251.    {"cmpneq",    0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 04:
  5252.    {"cmpnlt",    0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 05:
  5253.    {"cmpnle",    0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 06:
  5254.    {"cmpord",    0x12  ,0xCD2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0x1204, 0     , 0x3   },    // 0F C2 op 07:
  5255. // imm > 7 only with EVEX prefix, not with MVEX
  5256.    {"vcmpeq_uq", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 08:
  5257.    {"vcmpnge_us",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 09:
  5258.    {"vcmpngt_us",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0A:
  5259.    {"vcmpfalse_oq",0x19,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0B:
  5260.    {"vcmpneq_oq",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0C:
  5261.    {"vcmpge_os", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0D:
  5262.    {"vcmpgt_os", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0E:
  5263.    {"vcmptrue_uq",0x19 ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 0F:
  5264.    {"vcmpeq_os", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 10:
  5265.    {"vcmplt_oq", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 11:
  5266.    {"vcmple_oq", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 12:
  5267.    {"vcmpunord_s",0x19 ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 13:
  5268.    {"vcmpneq_us",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 14:
  5269.    {"vcmpnlt_uq",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 15:
  5270.    {"vcmpnle_uq",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 16:
  5271.    {"vcmpord_s", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 17:
  5272.    {"vcmpeq_us", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 18:
  5273.    {"vcmpnge_uq",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 19:
  5274.    {"vcmpngt_uq",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1A:
  5275.    {"vcmpfalse_os",0x19,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1B:
  5276.    {"vcmpneq_os",0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1C:
  5277.    {"vcmpge_oq", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1D:
  5278.    {"vcmpgt_oq", 0x19  ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1E:
  5279.    {"vcmptrue_us",0x19 ,0x8E2E00, 0x59  , 0x95,   0x24F , 0x24F , 0     , 0x13  , 0     , 0     , 0x1   },    // 0F C2 op 1F:
  5280.    {"vcmp",      0x19  ,0x8E2200, 0x4059, 0x95,   0x24F , 0x24F , 0x31  , 0x13  , 0     , 0     , 0x3   }};   // 0F C2 op > 1F: cmpps/pd, imm
  5281.  
  5282. // Submap for 0F 38 1A / W0, indexed by EVEX
  5283. SOpcodeDef OpcodeMapF8[] = {
  5284.    {"vbroadcastf128" ,0x19,0x878200,0x12, 0x154B, 0x244B, 0     , 0     , 0x20  , 0     , 0     , 0     },    // VEX  0F 38 1A
  5285.    {"vbroadcastf32x4",0x10,0xC6B200,0x12, 0x124B, 0x244B, 0     , 0     , 0x20  , 0x1010, 0     , 0x100 }};   // EVEX 0F 38 1A
  5286.  
  5287. // Map for 0F 3A 08. Indexed by EVEX present
  5288. SOpcodeDef OpcodeMapF9[] = {
  5289.    {"roundps",   0x15  , 0x58200, 0x52  , 0x124B, 0x24B , 0x31  , 0     , 0     , 0     , 0     , 0x2   },    // 0F 3A 08. Also in AMD instruction set  
  5290.    {"vrndscaleps",0x20 ,0x858200, 0x52  , 0x124B, 0x24B , 0x31  , 0     , 0x33  , 0     , 0     , 0     }};   // EVEX 0F 3A 08
  5291.  
  5292. // Map for 0F 3A 09. Indexed by EVEX present
  5293. SOpcodeDef OpcodeMapFA[] = {
  5294.    {"roundpd",   0x15  ,0x858200, 0x52  , 0x124C, 0x24C , 0x31  , 0     , 0     , 0     , 0     , 0x2   },    // 0F 3A 09. Also in AMD instruction set
  5295.    {"vrndscalepd",0x20 ,0x85A200, 0x52  , 0x124C, 0x24C , 0x31  , 0     , 0x33  , 0     , 0     , 0     }};   // EVEX 0F 3A 09
  5296.  
  5297. // Map for 0F 3A 0A. Indexed by EVEX present
  5298. SOpcodeDef OpcodeMapFB[] = {
  5299.    {"roundss",   0x15  , 0x98200, 0x59  , 0x104B, 0x104B, 0x4B  , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 0A. Also in AMD instruction set
  5300.    {"vrndscaless",0x20 ,0x8DB200, 0x59  , 0x104B, 0x004B, 0x4B  , 0x31  , 0x32  , 0     , 0     , 0     }};   // EVEX 0F 3A 08
  5301.  
  5302. // Map for 0F 3A 0B. Indexed by EVEX present
  5303. SOpcodeDef OpcodeMapFC[] = {
  5304.    {"roundsd",   0x15  , 0x98200, 0x59  , 0x104C, 0x104C, 0x4C  , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 0B. Also in AMD instruction set
  5305.    {"vrndscalesd",0x20 ,0x8DB200, 0x59  , 0x104C, 0x004C, 0x4C  , 0x31  , 0x32  , 0     , 0     , 0     }};   // EVEX 0F 3A 08
  5306.  
  5307. // Map for 0F 38 2C. Indexed by EVEX present
  5308. SOpcodeDef OpcodeMapFD[] = {
  5309.    {"vmaskmovps",0x19  , 0xF8200, 0x19,   0x124B, 0x124B, 0x224B, 0     , 0     , 0     , 0     , 0     },    // 0F 38 2C
  5310.    {"vscalefp"  ,0x20  ,0x899200, 0x19,   0x124F, 0x124F, 0x024F, 0     , 0x37  , 0     , 0     , 0x1   }};   // EVEX 0F 38 2C
  5311.  
  5312. // Map for 0F 38 2D. Indexed by EVEX present
  5313. SOpcodeDef OpcodeMapFE[] = {
  5314.    {"vmaskmovpd",0x19  , 0xF8200, 0x19,   0x124C, 0x124C, 0x224C, 0     , 0     , 0     , 0     , 0     },    // 0F 38 2D
  5315.    {"vscalefs"  ,0x20  ,0x899200, 0x19,   0x144F, 0x144F, 0x044F, 0     , 0x36  , 0     , 0     , 0x1   }};   // EVEX 0F 38 2D
  5316.  
  5317. // Map for 0F 38 3A. Indexed by 66 F2 F3 prefixes
  5318. SOpcodeDef OpcodeMapFF[] = {
  5319.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F 38 3A
  5320.    {"pminuw",    0x15  ,0x8D8200, 0x19  , 0x1202, 0x1202, 0x202 , 0     , 0x20  , 0     , 0     , 0x2   },    // 66 0F 38 3A
  5321.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 38 3A
  5322.    {"vpbroadcastmw2d",0x20,0x860400,0x12, 0x1203, 0x1095, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 38 2A
  5323.  
  5324. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5325. // Map for 0F 38 A". Indexed by W bit
  5326. SOpcodeDef OpcodeMap100[] = {
  5327.    {"vscatterdps",0x20 ,0xC39200, 0x1E  , 0x224B, 0x1209, 0     , 0     , 0x1090, 0x304C, 0     , 0x000 },    // 0F 38 A2. W0
  5328.    {"vscatterdpd",0x20 ,0xC39200, 0x1E  , 0x2F4C, 0x1209, 0     , 0     , 0x1090, 0x304C, 0     , 0x000 }};   // 0F 38 A2. W1
  5329.  
  5330. // Map for 0F 38 A3. Indexed by W bit
  5331. SOpcodeDef OpcodeMap101[] = {
  5332.    {"vscatterqps",0x20 ,0xC39200, 0x1E  , 0x224B, 0x1F09, 0     , 0     , 0x1090, 0x304C, 0     , 0x000 },    // 0F 38 A3. W0
  5333.    {"vscatterqpd",0x20 ,0xC39200, 0x1E  , 0x224C, 0x1209, 0     , 0     , 0x1090, 0x304C, 0     , 0x000 }};   // 0F 38 A3. W1
  5334.  
  5335.  
  5336. // Submap for vpgatherd. Opcode byte = 0F 38 90
  5337. // Indexed by VEX/EVEX prefix
  5338. SOpcodeDef OpcodeMap102[] = {
  5339.    {0,           0x103 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     },    //
  5340.    {0,           0x104 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   //
  5341.  
  5342. // Submap for vpgatherd. Opcode byte = 0F 38 90
  5343. // Indexed by VEX.W bit
  5344. SOpcodeDef OpcodeMap103[] = {
  5345. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5346.    {"vpgatherdd",0x1C  ,0xCEB200, 0x1E,   0x203 , 0x2203, 0x203 , 0     , 0     , 0     , 0     , 0     },    // 0F 38 90
  5347.    {"vpgatherdq",0x1C  ,0xCEB200, 0x1E,   0x204 , 0x2F04, 0x204 , 0     , 0     , 0x100A, 0     , 0     }};   // 0F 38 90
  5348.  
  5349. // Submap for vpgatherd. Opcode byte = 0F 38 90
  5350. // Indexed by EVEX.W bit
  5351. SOpcodeDef OpcodeMap104[] = {
  5352. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5353.    {"vpgatherdd",0x1C  ,0xCEB200, 0x1E,   0x203 , 0x2203, 0     , 0     , 0x1090, 0x100A, 0     , 0     },    // EVEX 0F 38 90
  5354.    {"vpgatherdq",0x1C  ,0xCEB200, 0x1E,   0x204 , 0x2F04, 0     , 0     , 0x1090, 0x100A, 0     , 0     }};   // EVEX 0F 38 90
  5355.  
  5356. // Submap for vpgatherq, Opcode 0F 38 91, Indexed by VEX.W bit
  5357. SOpcodeDef OpcodeMap105[] = {
  5358.    {"vpgatherqd",0x1C  ,0x8EB200, 0x1E,   0xF03 , 0x2203, 0xF03 , 0     , 0     , 0     , 0     , 0     },    // 0F 38 91, W0
  5359.    {"vpgatherqq",0x1C  ,0x8EB200, 0x1E,   0x204 , 0x2204, 0x204 , 0     , 0     , 0     , 0     , 0     }};   // 0F 38 91, W1
  5360.  
  5361. // Submap for vpgatherq, Opcode 0F 38 91, Indexed by EVEX.W bit
  5362. SOpcodeDef OpcodeMap106[] = {
  5363.    {"vpgatherqd",0x1C  ,0x8EB200, 0x1E,   0xF03 , 0x2203, 0     , 0     , 0x1090, 0     , 0     , 0     },    // EVEX 0F 38 91, W0
  5364.    {"vpgatherqq",0x1C  ,0x8EB200, 0x1E,   0x204 , 0x2204, 0     , 0     , 0x1090, 0     , 0     , 0     }};   // EVEX 0F 38 91, W1
  5365.  
  5366. // Map for 0F 38 C8. Indexed by VEX prefix type
  5367. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5368. SOpcodeDef OpcodeMap107[] = {
  5369.    {"sha1nexte", 0x22  , 0      , 0x12  , 0x1203, 0x0203, 0     , 0     , 0     , 0     , 0     , 0     },    // no VEX
  5370.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX
  5371.    {"vexp2p",    0x21  ,0x809200, 0x12  , 0x124F, 0x024F, 0     , 0     , 0x33  , 0     , 0     , 0x1   },    // EVEX 0F 38 C8
  5372.    {"vexp223ps", 0x80  ,0x428200, 0x12  , 0x164B, 0x603 , 0     , 0     , 0     , 0x1201, 0     , 0x100 }};   // MVEX 0F 38 C8
  5373.  
  5374. // Map for 0F 38 C9. Indexed by VEX prefix type
  5375. SOpcodeDef OpcodeMap108[] = {
  5376.    {"sha1msg1",  0x22  , 0      , 0x12  , 0x1203, 0x0203, 0     , 0     , 0     , 0     , 0     , 0     },    // no VEX
  5377.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX
  5378.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX 0F 38 C9
  5379.    {"vlog2ps",   0x80  ,0x428200, 0x12  , 0x164B, 0x603 , 0     , 0     , 0     , 0x1201, 0     , 0x100 }};   // MVEX 0F 38 C9
  5380.  
  5381. // Map for 0F 38 CA. Indexed by VEX prefix type
  5382. SOpcodeDef OpcodeMap109[] = {
  5383.    {"sha1msg2",  0x22  , 0      , 0x12  , 0x1203, 0x0203, 0     , 0     , 0     , 0     , 0     , 0     },    // no VEX
  5384.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX
  5385.    {"vrcp28p",   0x21  ,0x809200, 0x12  , 0x124F, 0x024F, 0     , 0     , 0x33  , 0     , 0     , 0x1   },    // EVEX 0F 38 CA
  5386.    {"vrcp23ps",  0x80  ,0x428200, 0x12  , 0x164B, 0x603 , 0     , 0     , 0     , 0x1201, 0     , 0x100 }};   // MVEX 0F 38 CA
  5387.  
  5388. // Map for 0F 38 CB. Indexed by VEX prefix type
  5389. SOpcodeDef OpcodeMap10A[] = {
  5390.    {"sha256rnds2",0x22 , 0      , 0x12  , 0x1203, 0x0203, 0xAE  , 0     , 0     , 0     , 0     , 0     },    // no VEX
  5391.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX
  5392.    {"vrcp28s",   0x21  ,0x809200, 0x12  , 0x104F, 0x004F, 0     , 0     , 0x32  , 0     , 0     , 0x1   },    // EVEX 0F 38 CB
  5393.    {"vrsqrt23ps",0x80  ,0x428200, 0x12  , 0x164B, 0x603 , 0     , 0     , 0     , 0x1201, 0     , 0x100 }};   // MVEX 0F 38 CB
  5394.  
  5395. // Map for 0F 38 CC. Indexed by VEX prefix type
  5396. SOpcodeDef OpcodeMap10B[] = {
  5397.    {"sha256msg1",0x22  , 0      , 0x12  , 0x1203, 0x0203, 0     , 0     , 0     , 0     , 0     , 0     },    // no VEX
  5398.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX
  5399.    {"vrsqrt28p", 0x21  ,0x809200, 0x12  , 0x124F, 0x024F, 0     , 0     , 0x33  , 0     , 0     , 0x1   },    // EVEX 0F 38 CC
  5400.    {"vaddsetsps",0x80  ,0x4A8200, 0x19,   0x164B, 0x164B, 0x64B , 0     , 0     , 0x3304, 0     , 0x100 }};   // MVEX 0F 38 CC
  5401.  
  5402. // Map for 0F 38 CD. Indexed by VEX prefix type
  5403. SOpcodeDef OpcodeMap10C[] = {
  5404.    {"sha256msg2",0x22  , 0      , 0x12  , 0x1203, 0x0203, 0     , 0     , 0     , 0     , 0     , 0     },    // no VEX
  5405.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX
  5406.    {"vrsqrt28s", 0x21  ,0x809200, 0x12  , 0x104F, 0x004F, 0     , 0     , 0x32  , 0     , 0     , 0x1   },    // EVEX 0F 38 CD
  5407.    {"vpaddsetsd",0x80  ,0x4A8200, 0x19  , 0x1603, 0x1603, 0x603 , 0     , 0     , 0x3406, 0     , 0x100 }};   // MVEX 0F 38 CD
  5408.  
  5409. // Submap for MVEX 0F 38 C6. W0
  5410. // Indexed by reg bits
  5411. SOpcodeDef OpcodeMap10D[] = {
  5412. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5413. {"vgatherpf0hintdp",0x80,0x439200, 0x1E,  0     , 0x264B, 0     , 0     , 0     , 0x1048, 0     , 0x101 },    // MVEX 0F 38 C6 /0
  5414. {"vgatherpf0dps",0x21,0xC38200,    0x1E,  0     , 0x224B, 0     , 0     , 0x1010, 0x1048, 0     , 0x000 },    // MVEX 0F 38 C6 /1
  5415. {"vgatherpf1dps",0x21,0xC38200,    0x1E,  0     , 0x224B, 0     , 0     , 0x1010, 0x1048, 0     , 0x000 },    // MVEX 0F 38 C6 /2
  5416.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5417. {"vscatterpf0hintdp",0x80,0x43B200,0x1E,  0     , 0x264B, 0     , 0     , 0     , 0x1048, 0     , 0x101 },    // MVEX 0F 38 C6 /4
  5418. {"vscatterpf0dps",0x21,0xC38200,   0x1E,  0     , 0x224B, 0     , 0     , 0x1010, 0x1048, 0     , 0x000 },    // MVEX 0F 38 C6 /5
  5419. {"vscatterpf1dps",0x21,0xC38200,   0x1E,  0     , 0x224B, 0     , 0     , 0x1010, 0x1048, 0     , 0x000 },    // MVEX 0F 38 C6 /6
  5420.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   //
  5421.  
  5422. // Submap for MVEX 0F 38 C6. W1
  5423. // Indexed by reg bits
  5424. SOpcodeDef OpcodeMap10E[] = {
  5425. {"vgatherpf0hintdpd",0x80,0x439200,0x1E,  0     , 0x264C, 0     , 0     , 0     , 0x1048, 0     , 0x100 },    // MVEX 0F 38 C6 /0
  5426. {"vgatherpf0dpd",0x21,0xC3A200,    0x1E,  0     , 0x2F4C, 0     , 0     , 0x1010, 0x1048, 0     , 0x000 },    // MVEX 0F 38 C6 /1
  5427. {"vgatherpf1dpd",0x21,0xC3A200,    0x1E,  0     , 0x2F4C, 0     , 0     , 0x1010, 0x1048, 0     , 0x000 },    // MVEX 0F 38 C6 /2
  5428.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5429. {"vscatterpf0hintdp",0x80,0x43B200,0x1E,  0     , 0x264c, 0     , 0     , 0     , 0x1048, 0     , 0x101 },    // MVEX 0F 38 C6 /4
  5430. {"vscatterpf0dpd",0x21,0xC3A200,   0x1E,  0     , 0x2F4C, 0     , 0     , 0x1010, 0x1048, 0     , 0x000 },    // MVEX 0F 38 C6 /5
  5431. {"vscatterpf1dpd",0x21,0xC3A200,   0x1E,  0     , 0x2F4C, 0     , 0     , 0x1010, 0x1048, 0     , 0x100 },    // MVEX 0F 38 C6 /6
  5432.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   //
  5433.  
  5434. // Submap for 0F 38 C7 vgatherpf.. Indexed by reg bits
  5435. SOpcodeDef OpcodeMap10F[] = {
  5436.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5437. {"vgatherpf0qp", 0x21   ,0xC39200, 0x1E,  0     , 0x224F, 0     , 0     , 0x1010, 0     , 0     , 0x1   },    // 0F 38 C7 /1
  5438. {"vgatherpf1qp", 0x21   ,0xC39200, 0x1E,  0     , 0x224F, 0     , 0     , 0x1010, 0     , 0     , 0x1   },    // 0F 38 C7 /2
  5439.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5440.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5441. {"vscatterpf0qp",0x21   ,0xC39200, 0x1E,  0     , 0x224F, 0     , 0     , 0x1010, 0     , 0     , 0x1   },    // 0F 38 C7 /5
  5442. {"vscatterpf1qp",0x21   ,0xC39200, 0x1E,  0     , 0x224F, 0     , 0     , 0x1010, 0     , 0     , 0x1   },    // 0F 38 C7 /6
  5443.    {0       ,    0      , 0      , 0   ,  0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   //
  5444.  
  5445. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5446. // Submap for 0F 1A. Indexed by 66 F2 F3 prefix
  5447. SOpcodeDef OpcodeMap110[] = {
  5448.    {"bndldx",    0x22   , 0      , 0x12,  0x98  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    //    0F 1A
  5449.    {"bndmov",    0x22   , 0x200  , 0x12,  0x1098, 0x98  , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F 1A
  5450.    {"bndcu" ,    0x22   , 0x800  , 0x12,  0x98  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 1A
  5451.    {"bndcl" ,    0x22   , 0x400  , 0x12,  0x98  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 1A
  5452.  
  5453. // Submap for 0F 1B. Indexed by 66 F2 F3 prefix
  5454. SOpcodeDef OpcodeMap111[] = {
  5455.    {"bndstx",    0x22   , 0      , 0x13,  0x2006, 0x98  , 0     , 0     , 0     , 0     , 0     , 0     },    //    0F 1B
  5456.    {"bndmov",    0x22   , 0x200  , 0x13,  0x98  , 0x1098, 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F 1B
  5457.    {"bndcn" ,    0x22   , 0x800  , 0x12,  0x98  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 1B
  5458.    {"bndmk" ,    0x22   , 0x400  , 0x12,  0x98  , 0x2006, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F 1B
  5459.  
  5460. // Submap for 0F 3A 3E. Indexed by immediate byte. VCMPUB/W
  5461. SOpcodeDef OpcodeMap112[] = {
  5462.    {"vpcmpequ",  0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3E / 0
  5463.    {"vpcmpltu",  0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3E / 1
  5464.    {"vpcmpleu",  0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3E / 2
  5465.    {"vpcmpu",    0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3E / 3 = true
  5466.    {"vpcmpnequ", 0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3E / 4
  5467.    {"vpcmpnltu", 0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3E / 5
  5468.    {"vpcmpnleu", 0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3E / 6
  5469.    {"vpcmpu",    0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x10  , 0     , 0     , 0x01  }};   // 0F 3A 3E / >= 7 = false
  5470.  
  5471. // Submap for 0F 3A 3F. Indexed by immediate byte. VCMPB/W
  5472. SOpcodeDef OpcodeMap113[] = {
  5473.    {"vpcmpeq",   0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3F / 0
  5474.    {"vpcmplt",   0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3F / 1
  5475.    {"vpcmple",   0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3F / 2
  5476.    {"vpcmp",     0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3F / 3 = true
  5477.    {"vpcmpneq",  0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3F / 4
  5478.    {"vpcmpnlt",  0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3F / 5
  5479.    {"vpcmpnle",  0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x10  , 0     , 0     , 0x01  },    // 0F 3A 3F / 6
  5480.    {"vpcmp",     0x20  , 0x8FC200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x10  , 0     , 0     , 0x01  }};   // 0F 3A 3F / >= 7 = false
  5481.  
  5482. // Submap for 0F 3A 1E. Indexed by immediate byte. VCMPUD/Q
  5483. SOpcodeDef OpcodeMap114[] = {
  5484.    {"vpcmpequ",  0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1E / 0
  5485.    {"vpcmpltu",  0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1E / 1
  5486.    {"vpcmpleu",  0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1E / 2
  5487.    {"vpcmpu",    0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1E / 3 = true
  5488.    {"vpcmpnequ", 0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1E / 4
  5489.    {"vpcmpnltu", 0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1E / 5
  5490.    {"vpcmpnleu", 0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1E / 6
  5491.    {"vpcmpu",    0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x11  , 0x1406, 0     , 0x01  }};   // 0F 3A 1E / >= 7 = false
  5492.  
  5493. // Submap for 0F 3A 1F. Indexed by immediate byte. VCMPD/Q
  5494. SOpcodeDef OpcodeMap115[] = {
  5495.    {"vpcmpeq",   0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1F / 0
  5496.    {"vpcmplt",   0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1F / 1
  5497.    {"vpcmple",   0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1F / 2
  5498.    {"vpcmp",     0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1F / 3 = true
  5499.    {"vpcmpneq",  0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1F / 4
  5500.    {"vpcmpnlt",  0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1F / 5
  5501.    {"vpcmpnle",  0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0     , 0x11  , 0x1406, 0     , 0x01  },    // 0F 3A 1F / 6
  5502.    {"vpcmp",     0x20  , 0xCBB200,0x59  , 0x95  , 0x1209, 0x209 , 0x31  , 0x11  , 0x1406, 0     , 0x01  }};   // 0F 3A 1F / >= 7 = false
  5503.  
  5504. // Submap for pcmpeqb. Opcode byte = 0F 74
  5505. // Indexed by E/MVEX prefix
  5506. SOpcodeDef OpcodeMap116[] = {
  5507. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5508.    {"pcmpeqb",   0x7   , 0xD0200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 74
  5509.    {"vpcmpeqb",  0x20  ,0x8FA200, 0x19  , 0x95  , 0x1201, 0x201 , 0     , 0x10  , 0     , 0     , 0     }};   // E/MVEX 0F 76
  5510.  
  5511. // Submap for pcmpeqw. Opcode byte = 0F 75
  5512. // Indexed by E/MVEX prefix
  5513. SOpcodeDef OpcodeMap117[] = {
  5514.    {"pcmpeqw",   0x7   , 0xD0200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 75
  5515.    {"vpcmpeqw",  0x20  ,0x8FA200, 0x19  , 0x95  , 0x1202, 0x202 , 0     , 0x10  , 0     , 0     , 0     }};   // E/MVEX 0F 76
  5516.  
  5517. // Submap for pcmpgtb. Opcode byte = 0F 64
  5518. // Indexed by EVEX prefix
  5519. SOpcodeDef OpcodeMap118[] = {
  5520.    {"pcmpgtb",   0x7   , 0xD0200, 0x19  , 0x1101, 0x1101, 0x101 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 64
  5521.    {"vpcmpgtb",  0x20  ,0x8BA200, 0x19  , 0x95  , 0x1203, 0x203 , 0     , 0x10  , 0x1406, 0     , 0x000 }};   // E/MVEX 0F 64
  5522.  
  5523.  
  5524. // Submap for pcmpgtw. Opcode byte = 0F 65
  5525. // Indexed by EVEX prefix
  5526. SOpcodeDef OpcodeMap119[] = {
  5527.    {"pcmpgtw",   0x7   , 0xD0200, 0x19  , 0x1102, 0x1102, 0x102 , 0     , 0     , 0     , 0     , 0x2   },    // 0F 65
  5528.    {"vpcmpgtw",  0x20  ,0x8BA200, 0x19  , 0x95  , 0x1203, 0x203 , 0     , 0x10  , 0x1406, 0     , 0x000 }};   // E/MVEX 0F 65
  5529.  
  5530.  
  5531. // Opcode map for EVEX 66 0F 7B. Indexed by W bit
  5532. SOpcodeDef OpcodeMap11A[] = {
  5533. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5534.    {"vcvtps2qq", 0x20  ,0x840200, 0x12  , 0x204 , 0xF4B , 0     , 0     , 0x27  , 0     , 0     , 0     },    // EVEX 66 0F 7B. W = 0
  5535.    {"vcvtpd2qq", 0x20  ,0x841200, 0x12  , 0x204 , 0x24C , 0     , 0     , 0x27  , 0     , 0     , 0     }};   // EVEX 66 0F 7B. W = 1
  5536.  
  5537. // Opcode map for EVEX F2 0F 7A. Indexed by W bit
  5538. SOpcodeDef OpcodeMap11B[] = {
  5539.    {"vcvtudq2ps",0x20  ,0xC28800, 0x12  , 0x124B, 0x203 , 0     , 0     , 0x37  , 0x1214, 0     , 0     },    // F2 EVEX 0F 7A W0
  5540.    {"vcvtuqq2ps",0x20  ,0x869800, 0x12  , 0x1F4B, 0x204 , 0     , 0     , 0x27  , 0     , 0     , 0     }};   // F2 EVEX 0F 7A W0
  5541.  
  5542. // Opcode map for EVEX F3 0F 7A. Indexed by W bit
  5543. SOpcodeDef OpcodeMap11C[] = {
  5544.    {"vcvtudq2pd",0x20  ,0xC28400, 0x12  , 0x124C, 0xF03 , 0     , 0     , 0x31  , 0x1214, 0     , 0     },    // F3 E/MVEX 0F 7A W0
  5545.    {"vcvtuqq2pd",0x20  ,0x869800, 0x12  , 0x124C, 0x204 , 0     , 0     , 0x27  , 0     , 0     , 0     }};   // F2 EVEX 0F 7A W0
  5546.  
  5547. // Opcode map for 0F 3A 42. Indexed by EVEX
  5548. SOpcodeDef OpcodeMap11D[] = {
  5549.    {"mpsadbw",   0x15  , 0xD8200, 0x59  , 0x1202, 0x1202, 0x201 , 0x31  , 0     , 0     , 0     , 0x2   },    // 0F 3A 42
  5550.    {"vdbpsadbw", 0x20  ,0x8E8200, 0x59  , 0x1202, 0x1202, 0x201 , 0x31  , 0x20  , 0     , 0     , 0     }};   // EVEX 0F 3A 42
  5551.  
  5552. // Opcode map for 0F 3A 19. Indexed by EVEX
  5553. SOpcodeDef OpcodeMap11E[] = {
  5554.    {"vextractf128" ,0x19,0x978200,0x53,   0x450 , 0x1550, 0x31  , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 19
  5555.    {0              ,0x11F,0      ,0x53,   0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // EVEX 0F 3A 19
  5556.  
  5557. // Opcode map for EVEX 0F 3A 19. Indexed by W bit
  5558. SOpcodeDef OpcodeMap11F[] = {
  5559.    {"vextractf32x4",0x20,0x868200,0x53,   0x44B , 0x124B, 0x31  , 0     , 0x20  , 0     , 0     , 0     },    // EVEX W0 0F 3A 19
  5560.    {"vextractf64x2",0x20,0x869200,0x53,   0x44C , 0x124C, 0x31  , 0     , 0x20  , 0     , 0     , 0     }};   // EVEX W1 0F 3A 19
  5561.  
  5562. // Opcode map for EVEX 0F 3A 39. Indexed by EVEX
  5563. SOpcodeDef OpcodeMap120[] = {
  5564.    {"vextracti128",0x1C, 0x978200,0x53  , 0x406 , 0x1506, 0x31  , 0     , 0     , 0     , 0     , 0     },    // 0F 3A 39
  5565.    {0             ,0x121, 0      ,0x53  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // EVEX 0F 3A 39
  5566.  
  5567. // Opcode map for EVEX 0F 3A 39. Indexed by W bit
  5568. SOpcodeDef OpcodeMap121[] = {
  5569.    {"vextracti32x4",0x20,0x868200,0x53  , 0x406 , 0x1203, 0x31  , 0     , 0x20  , 0     , 0     , 0     },    // 0F 3A 39
  5570.    {"vextracti64x2",0x20,0x869200,0x53  , 0x406 , 0x1203, 0x31  , 0     , 0x20  , 0     , 0     , 0     }};   // 0F 3A 39
  5571.  
  5572. // Opcode map for 0F 3A 18. Indexed by EVEX
  5573. SOpcodeDef OpcodeMap122[] = {
  5574.    {"vinsertf128",0x19 ,0x9F8200, 0x59  , 0x1250, 0x1250, 0x450 , 0x31  , 0x30  , 0     , 0     , 0     },    // 0F 3A 18
  5575.    {0,           0x123 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};
  5576.  
  5577. // Opcode map for EVEX 0F 3A 18. Indexed by W bit
  5578. SOpcodeDef OpcodeMap123[] = {
  5579.    {"vinsertf32x4",0x20,0x8AB200, 0x59  , 0x1250, 0x1250, 0x44B , 0x31  , 0x20  , 0     , 0     , 0     },    // EVEX 0F 3A 18. W0
  5580.    {"vinsertf64x2",0x20,0x8AB200, 0x59  , 0x1250, 0x1250, 0x44C , 0x31  , 0x20  , 0     , 0     , 0     }};   // EVEX 0F 3A 18. W0
  5581.  
  5582. // Opcode map for EVEX 0F 3A 1A. Indexed by W bit
  5583. SOpcodeDef OpcodeMap124[] = {
  5584.    {"vinsertf32x8",0x20,0x8AB200, 0x59  , 0x1250, 0x1250, 0x54B , 0x31  , 0x30  , 0     , 0     , 0     },    // 0F 3A 1A
  5585.    {"vinsertf64x4",0x20,0x8AB200, 0x59  , 0x1250, 0x1250, 0x54C , 0x31  , 0x30  , 0     , 0     , 0     }};   // 0F 3A 1A
  5586.  
  5587. // Opcode map for 0F 3A 38. Indexed by EVEX
  5588. SOpcodeDef OpcodeMap125[] = {
  5589.    {"vinserti128",0x1C ,0x9F8200, 0x59  , 0x1206, 0x1206, 0x406 , 0x31  , 0x30  , 0     , 0     , 0     },    // 0F 3A 38
  5590.    {0,           0x126 , 0      , 0x59  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};
  5591.  
  5592. // Opcode map for EVEX 0F 3A 38. Indexed by W bit
  5593. SOpcodeDef OpcodeMap126[] = {
  5594.    {"vinserti32x4",0x1C ,0x8AB200, 0x59  , 0x1203, 0x1203, 0x403 , 0x31  , 0x20  , 0     , 0     , 0     },   // EVEX 0F 3A 38. W0
  5595.    {"vinserti64x2",0x20 ,0x8AB200, 0x59  , 0x1204, 0x1204, 0x404 , 0x31  , 0x20  , 0     , 0     , 0     }};  // EVEX 0F 3A 38. W1
  5596.  
  5597. // Opcode map for EVEX 0F 3A 3A. Indexed by W bit
  5598. SOpcodeDef OpcodeMap127[] = {
  5599.    {"vinserti32x8",0x20,0x8AB200, 0x59  , 0x1203, 0x1203, 0x503 , 0x31   , 0x20  , 0     , 0     , 0     },    // EVEX 0F 3A 3A. W0
  5600.    {"vinserti64x4",0x20,0x8AB200, 0x59  , 0x1204, 0x1204, 0x504 , 0x31   , 0x20  , 0     , 0     , 0     }};   // EVEX 0F 3A 3A. W1
  5601.  
  5602. // Opcode map for 0F 38 B4. Indexed by VEX prefix type
  5603. SOpcodeDef OpcodeMap128[] = {
  5604. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5605.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },
  5606.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX  0F 38 B4
  5607.    {"vpmadd52luq",0x23 ,0x8EB200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0x21  , 0     , 0     , 0     },    // EVEX 0F 38 B4
  5608.    {"vpmadd233d",0x80  ,0x4A8200, 0x19  , 0x1603, 0x1603, 0x603 , 0     , 0     , 0x1406, 0     , 0x100 }};   // MVEX 0F 38 B4
  5609.  
  5610. // Opcode map for 0F 38 B5. Indexed by VEX prefix type
  5611. SOpcodeDef OpcodeMap129[] = {
  5612.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },
  5613.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // VEX  0F 38 B5
  5614.    {"vpmadd52huq",0x23 ,0x8EB200, 0x19  , 0x1204, 0x1204, 0x204 , 0     , 0x21  , 0     , 0     , 0     },    // EVEX 0F 38 B5
  5615.    {"vpmadd231d",0x80  ,0x4A8200, 0x19  , 0x1603, 0x1603, 0x603 , 0     , 0     , 0x1406, 0     , 0x100 }};   // MVEX 0F 38 B5
  5616.  
  5617. // 0F 38 19 indexed by VEX / EVEX
  5618. SOpcodeDef OpcodeMap12A[] = {
  5619.    {"vbroadcastsd",0x19,0xC7A200, 0x12  , 0x124C, 0x04C , 0     , 0     , 0x20  , 0x1049, 0     , 0     },    // VEX  0F 38 19
  5620.    {0,           0x12B , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // EVEX 0F 38 19
  5621.  
  5622. // EVEX 0F 38 19 indexed by W bit
  5623. SOpcodeDef OpcodeMap12B[] = {
  5624.    {"vbroadcastf32x2",0x20,0xC6B200, 0x12,0x124C, 0x04B , 0     , 0     , 0x20  , 0x1049, 0     , 0     },    // EVEX W0 0F 38 19
  5625.    {"vbroadcastsd",0x20,0xC6B200, 0x12  , 0x124C, 0x04C , 0     , 0     , 0x20  , 0x1049, 0     , 0     }};    // EVEX W1 0F 38 19
  5626.  
  5627. // Opcode map for 0F 38 38. Indexed by prefix
  5628. SOpcodeDef OpcodeMap12C[] = {
  5629.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //    0F 38 38
  5630.    {"pminsb",    0x15  ,0x8DA200, 0x19  , 0x1201, 0x1201, 0x201 , 0     , 0x20  , 0     , 0     , 0x2   },    // 66 0F 38 38
  5631.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 38 38
  5632.    // moved to map B2. this map can be removed
  5633. //   {"vpmovm2",   0x20  ,0x86B400, 0x12  , 0x1209, 0x95  , 0     , 0     , 0     , 0     , 0     , 1     }};   // F3 0F 38 38
  5634.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5635.  
  5636. // Opcode map for EVEX 0F 38 39. Indexed by prefix
  5637. SOpcodeDef OpcodeMap12D[] = {
  5638.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //    0F 38 39
  5639.    {"vpmins",    0x15  ,0xCDB200, 0x19  , 0x1209, 0x1209, 0x209 , 0     , 0x31  , 0x1406, 0     , 0x1   },    // 66 0F 38 39
  5640.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F 38 39
  5641.    // this entry has been replaced by a link from map B2. this may be removed
  5642.  //  {0,           0x12F , 0      , 0x12  , 0     , 0     , 0     , 0     , 0     , 0     , 0xC   , 0     }};   // F3 0F 38 39
  5643.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5644.  
  5645. // Opcode map for EVEX 0F 38 29. Indexed by W bit
  5646. SOpcodeDef OpcodeMap12E[] = {
  5647.    {"vpmovb2m",  0x20  ,0x86C400, 0x12  , 0x95  , 0x1209, 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 29 W0
  5648.    {"vpmovw2m",  0x20  ,0x86C400, 0x12  , 0x95  , 0x1209, 0     , 0     , 0     , 0     , 0     , 0     }};   // EVEX F3 0F 38 29 W1
  5649.  
  5650. // Opcode map for EVEX 0F 38 39. Indexed by W bit
  5651. SOpcodeDef OpcodeMap12F[] = {
  5652.    {"vpmovd2m",  0x20  ,0x86B400, 0x12  , 0x95  , 0x1209, 0     , 0     , 0     , 0     , 0     , 0     },    // EVEX F3 0F 38 39 W0
  5653.    {"vpmovq2m",  0x20  ,0x86B400, 0x12  , 0x95  , 0x1209, 0     , 0     , 0     , 0     , 0     , 0     }};   // EVEX F3 0F 38 39 W1
  5654.  
  5655. // Opcode map for 0F 01, mod = 11b, reg = 5
  5656. // Indexed by rm bits
  5657. SOpcodeDef OpcodeMap130[] = {
  5658.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 0
  5659.    {0,           0x131 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },    // rm = 1. link to incssp
  5660.    {0,           0x132 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 9     , 0     },    // rm = 2. link to savessp
  5661.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 3
  5662.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 4
  5663.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 5
  5664.    {"rdpkru",    0     , 0x000  , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 6
  5665.    {"wrpkru",    0     , 0x000  , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // rm = 7
  5666.  
  5667. // Opcode map for 0F 01, mod = 11b, reg = 5, rm = 1. Indexed by prefix
  5668. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5669. SOpcodeDef OpcodeMap131[] = {
  5670.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5671.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66
  5672.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2
  5673.    {"incssp",    0     , 0x400  , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3
  5674.  
  5675. // Opcode map for 0F 01, mod = 11b, reg = 5, rm = 2. Indexed by prefix
  5676. SOpcodeDef OpcodeMap132[] = {
  5677.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5678.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66
  5679.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2
  5680.    {"savessp",   0     , 0x400  , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3
  5681.  
  5682. // Opcode map for 0F 01, mod != 11b, reg = 5. Indexed by prefix
  5683. SOpcodeDef OpcodeMap133[] = {
  5684.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5685.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66
  5686.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2
  5687.    {"rstorssp",  0     , 0x400  , 0x11  , 0     , 0x2004, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3
  5688.  
  5689. // Opcode map for 0F AE /5. Link by prefix
  5690. SOpcodeDef OpcodeMap134[] = {
  5691.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5692.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66
  5693.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2
  5694.    {"setssbsy",  0     , 0x400  , 0x11  , 0     , 0x2004, 0     , 0     , 0     , 0     , 0     , 0     }};   // F3
  5695.  
  5696. // Opcode map for 0F 1E. Hint instructions. Link by prefix
  5697. SOpcodeDef OpcodeMap135[] = {
  5698.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5699.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66
  5700.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2
  5701.    {0,           0x136 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 4     , 0     }};   // F3
  5702.  
  5703. // Opcode map for F3 0F 1E. Hint instructions. Link by mod / reg
  5704. SOpcodeDef OpcodeMap136[] = {
  5705.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //  mod < 3
  5706.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5707.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5708.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5709.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5710.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5711.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5712.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    //
  5713.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // mod = 3, reg = 0
  5714.    {"rdssp",     0     , 0x1400 , 0x11  , 0     , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     },    // mod = 3, reg = 1
  5715.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // mod = 3, reg = 2
  5716.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // mod = 3, reg = 3
  5717.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // mod = 3, reg = 4
  5718.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // mod = 3, reg = 5
  5719.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // mod = 3, reg = 6
  5720.    {0,           0x137 , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 5     , 0     }};   // mod = 3, reg = 7
  5721.  
  5722. // Opcode map for F3 0F 1E. mod = 3, reg = 7. Link by rm
  5723. SOpcodeDef OpcodeMap137[] = {
  5724. //  name         instset prefix   format  dest.   source1 source2 source3 EVEX    MVEX    link    options
  5725.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 0
  5726.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 1
  5727.    {"endbr64",   0     , 0x400  , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 2
  5728.    {"endbr32",   0     , 0x400  , 0x10  , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 3
  5729.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 4
  5730.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 5
  5731.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // rm = 6
  5732.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // rm = 7
  5733.  
  5734. // Submap for 0F C7 reg /7, Indexed by prefixes
  5735. SOpcodeDef OpcodeMap138[] = {
  5736.    {"rdseed",    0x1D  , 0x1100 , 0x11  , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 0F C7 reg /7
  5737.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // 66 0F C7 reg /7
  5738.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     },    // F2 0F C7 reg /7
  5739.    {"rdpid",     0x1D  , 0x1500 , 0x11  , 0x1009, 0     , 0     , 0     , 0     , 0     , 0     , 0     }};   // F3 0F C7 reg /7
  5740.  
  5741.  
  5742. SOpcodeDef OpcodeMap139[] = {
  5743.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5744.  
  5745. SOpcodeDef OpcodeMap13A[] = {
  5746.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5747.  
  5748. SOpcodeDef OpcodeMap13B[] = {
  5749.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5750.  
  5751. SOpcodeDef OpcodeMap13C[] = {
  5752.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5753.  
  5754. SOpcodeDef OpcodeMap13D[] = {
  5755.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5756.  
  5757. SOpcodeDef OpcodeMap13E[] = {
  5758.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5759.  
  5760. SOpcodeDef OpcodeMap13F[] = {
  5761.    {0,           0     , 0      , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     }};
  5762.  
  5763.  
  5764. /************** Make pointers to all opcode maps ***************************/
  5765. const SOpcodeDef * const OpcodeTables[] = {    
  5766.    OpcodeMap0,  OpcodeMap1,  OpcodeMap2,  OpcodeMap3,
  5767.    OpcodeMap4,  OpcodeMap5,  OpcodeMap6,  OpcodeMap7,
  5768.    OpcodeMap8,  OpcodeMap9,  OpcodeMapA,  OpcodeMapB,
  5769.    OpcodeMapC,  OpcodeMapD,  OpcodeMapE,  OpcodeMapF,
  5770.    OpcodeMap10, OpcodeMap11, OpcodeMap12, OpcodeMap13,
  5771.    OpcodeMap14, OpcodeMap15, OpcodeMap16, OpcodeMap17,
  5772.    OpcodeMap18, OpcodeMap19, OpcodeMap1A, OpcodeMap1B,
  5773.    OpcodeMap1C, OpcodeMap1D, OpcodeMap1E, OpcodeMap1F,
  5774.    OpcodeMap20, OpcodeMap21, OpcodeMap22, OpcodeMap23,
  5775.    OpcodeMap24, OpcodeMap25, OpcodeMap26, OpcodeMap27,
  5776.    OpcodeMap28, OpcodeMap29, OpcodeMap2A, OpcodeMap2B,
  5777.    OpcodeMap2C, OpcodeMap2D, OpcodeMap2E, OpcodeMap2F,
  5778.    OpcodeMap30, OpcodeMap31, OpcodeMap32, OpcodeMap33,
  5779.    OpcodeMap34, OpcodeMap35, OpcodeMap36, OpcodeMap37,
  5780.    OpcodeMap38, OpcodeMap39, OpcodeMap3A, OpcodeMap3B,
  5781.    OpcodeMap3C, OpcodeMap3D, OpcodeMap3E, OpcodeMap3F,
  5782.    OpcodeMap40, OpcodeMap41, OpcodeMap42, OpcodeMap43,
  5783.    OpcodeMap44, OpcodeMap45, OpcodeMap46, OpcodeMap47,
  5784.    OpcodeMap48, OpcodeMap49, OpcodeMap4A, OpcodeMap4B,
  5785.    OpcodeMap4C, OpcodeMap4D, OpcodeMap4E, OpcodeMap4F,
  5786.    OpcodeMap50, OpcodeMap51, OpcodeMap52, OpcodeMap53,
  5787.    OpcodeMap54, OpcodeMap55, OpcodeMap56, OpcodeMap57,
  5788.    OpcodeMap58, OpcodeMap59, OpcodeMap5A, OpcodeMap5B,
  5789.    OpcodeMap5C, OpcodeMap5D, OpcodeMap5E, OpcodeMap5F,
  5790.    OpcodeMap60, OpcodeMap61, OpcodeMap62, OpcodeMap63,
  5791.    OpcodeMap64, OpcodeMap65, OpcodeMap66, OpcodeMap67,
  5792.    OpcodeMap68, OpcodeMap69, OpcodeMap6A, OpcodeMap6B,
  5793.    OpcodeMap6C, OpcodeMap6D, OpcodeMap6E, OpcodeMap6F,
  5794.    OpcodeMap70, OpcodeMap71, OpcodeMap72, OpcodeMap73,
  5795.    OpcodeMap74, OpcodeMap75, OpcodeMap76, OpcodeMap77,
  5796.    OpcodeMap78, OpcodeMap79, OpcodeMap7A, OpcodeMap7B,
  5797.    OpcodeMap7C, OpcodeMap7D, OpcodeMap7E, OpcodeMap7F,
  5798.    OpcodeMap80, OpcodeMap81, OpcodeMap82, OpcodeMap83,
  5799.    OpcodeMap84, OpcodeMap85, OpcodeMap86, OpcodeMap87,
  5800.    OpcodeMap88, OpcodeMap89, OpcodeMap8A, OpcodeMap8B,
  5801.    OpcodeMap8C, OpcodeMap8D, OpcodeMap8E, OpcodeMap8F,
  5802.    OpcodeMap90, OpcodeMap91, OpcodeMap92, OpcodeMap93,
  5803.    OpcodeMap94, OpcodeMap95, OpcodeMap96, OpcodeMap97,
  5804.    OpcodeMap98, OpcodeMap99, OpcodeMap9A, OpcodeMap9B,
  5805.    OpcodeMap9C, OpcodeMap9D, OpcodeMap9E, OpcodeMap9F,
  5806.    OpcodeMapA0, OpcodeMapA1, OpcodeMapA2, OpcodeMapA3,
  5807.    OpcodeMapA4, OpcodeMapA5, OpcodeMapA6, OpcodeMapA7,
  5808.    OpcodeMapA8, OpcodeMapA9, OpcodeMapAA, OpcodeMapAB,
  5809.    OpcodeMapAC, OpcodeMapAD, OpcodeMapAE, OpcodeMapAF,
  5810.    OpcodeMapB0, OpcodeMapB1, OpcodeMapB2, OpcodeMapB3,
  5811.    OpcodeMapB4, OpcodeMapB5, OpcodeMapB6, OpcodeMapB7,
  5812.    OpcodeMapB8, OpcodeMapB9, OpcodeMapBA, OpcodeMapBB,
  5813.    OpcodeMapBC, OpcodeMapBD, OpcodeMapBE, OpcodeMapBF,
  5814.    OpcodeMapC0, OpcodeMapC1, OpcodeMapC2, OpcodeMapC3,
  5815.    OpcodeMapC4, OpcodeMapC5, OpcodeMapC6, OpcodeMapC7,
  5816.    OpcodeMapC8, OpcodeMapC9, OpcodeMapCA, OpcodeMapCB,
  5817.    OpcodeMapCC, OpcodeMapCD, OpcodeMapCE, OpcodeMapCF,
  5818.    OpcodeMapD0, OpcodeMapD1, OpcodeMapD2, OpcodeMapD3,
  5819.    OpcodeMapD4, OpcodeMapD5, OpcodeMapD6, OpcodeMapD7,
  5820.    OpcodeMapD8, OpcodeMapD9, OpcodeMapDA, OpcodeMapDB,
  5821.    OpcodeMapDC, OpcodeMapDD, OpcodeMapDE, OpcodeMapDF,
  5822.    OpcodeMapE0, OpcodeMapE1, OpcodeMapE2, OpcodeMapE3,
  5823.    OpcodeMapE4, OpcodeMapE5, OpcodeMapE6, OpcodeMapE7,
  5824.    OpcodeMapE8, OpcodeMapE9, OpcodeMapEA, OpcodeMapEB,
  5825.    OpcodeMapEC, OpcodeMapED, OpcodeMapEE, OpcodeMapEF,
  5826.    OpcodeMapF0, OpcodeMapF1, OpcodeMapF2, OpcodeMapF3,
  5827.    OpcodeMapF4, OpcodeMapF5, OpcodeMapF6, OpcodeMapF7,
  5828.    OpcodeMapF8, OpcodeMapF9, OpcodeMapFA, OpcodeMapFB,
  5829.    OpcodeMapFC, OpcodeMapFD, OpcodeMapFE, OpcodeMapFF,
  5830.    OpcodeMap100, OpcodeMap101, OpcodeMap102, OpcodeMap103,
  5831.    OpcodeMap104, OpcodeMap105, OpcodeMap106, OpcodeMap107,
  5832.    OpcodeMap108, OpcodeMap109, OpcodeMap10A, OpcodeMap10B,
  5833.    OpcodeMap10C, OpcodeMap10D, OpcodeMap10E, OpcodeMap10F,
  5834.    OpcodeMap110, OpcodeMap111, OpcodeMap112, OpcodeMap113,
  5835.    OpcodeMap114, OpcodeMap115, OpcodeMap116, OpcodeMap117,
  5836.    OpcodeMap118, OpcodeMap119, OpcodeMap11A, OpcodeMap11B,
  5837.    OpcodeMap11C, OpcodeMap11D, OpcodeMap11E, OpcodeMap11F,
  5838.    OpcodeMap120, OpcodeMap121, OpcodeMap122, OpcodeMap123,
  5839.    OpcodeMap124, OpcodeMap125, OpcodeMap126, OpcodeMap127,
  5840.    OpcodeMap128, OpcodeMap129, OpcodeMap12A, OpcodeMap12B,
  5841.    OpcodeMap12C, OpcodeMap12D, OpcodeMap12E, OpcodeMap12F,
  5842.    OpcodeMap130, OpcodeMap131, OpcodeMap132, OpcodeMap133,
  5843.    OpcodeMap134, OpcodeMap135, OpcodeMap136, OpcodeMap137,
  5844.    OpcodeMap138, OpcodeMap139, OpcodeMap13A, OpcodeMap13B,
  5845.    OpcodeMap13C, OpcodeMap13D, OpcodeMap13E, OpcodeMap13F,
  5846. };
  5847.  
  5848. // size of each table pointed to by OpcodeTables[]
  5849. const uint32 OpcodeTableLength[] = {    
  5850.    TableSize(OpcodeMap0),  TableSize(OpcodeMap1),  TableSize(OpcodeMap2),  TableSize(OpcodeMap3),
  5851.    TableSize(OpcodeMap4),  TableSize(OpcodeMap5),  TableSize(OpcodeMap6),  TableSize(OpcodeMap7),
  5852.    TableSize(OpcodeMap8),  TableSize(OpcodeMap9),  TableSize(OpcodeMapA),  TableSize(OpcodeMapB),
  5853.    TableSize(OpcodeMapC),  TableSize(OpcodeMapD),  TableSize(OpcodeMapE),  TableSize(OpcodeMapF),
  5854.    TableSize(OpcodeMap10), TableSize(OpcodeMap11), TableSize(OpcodeMap12), TableSize(OpcodeMap13),
  5855.    TableSize(OpcodeMap14), TableSize(OpcodeMap15), TableSize(OpcodeMap16), TableSize(OpcodeMap17),
  5856.    TableSize(OpcodeMap18), TableSize(OpcodeMap19), TableSize(OpcodeMap1A), TableSize(OpcodeMap1B),
  5857.    TableSize(OpcodeMap1C), TableSize(OpcodeMap1D), TableSize(OpcodeMap1E), TableSize(OpcodeMap1F),
  5858.    TableSize(OpcodeMap20), TableSize(OpcodeMap21), TableSize(OpcodeMap22), TableSize(OpcodeMap23),
  5859.    TableSize(OpcodeMap24), TableSize(OpcodeMap25), TableSize(OpcodeMap26), TableSize(OpcodeMap27),
  5860.    TableSize(OpcodeMap28), TableSize(OpcodeMap29), TableSize(OpcodeMap2A), TableSize(OpcodeMap2B),
  5861.    TableSize(OpcodeMap2C), TableSize(OpcodeMap2D), TableSize(OpcodeMap2E), TableSize(OpcodeMap2F),
  5862.    TableSize(OpcodeMap30), TableSize(OpcodeMap31), TableSize(OpcodeMap32), TableSize(OpcodeMap33),
  5863.    TableSize(OpcodeMap34), TableSize(OpcodeMap35), TableSize(OpcodeMap36), TableSize(OpcodeMap37),
  5864.    TableSize(OpcodeMap38), TableSize(OpcodeMap39), TableSize(OpcodeMap3A), TableSize(OpcodeMap3B),
  5865.    TableSize(OpcodeMap3C), TableSize(OpcodeMap3D), TableSize(OpcodeMap3E), TableSize(OpcodeMap3F),
  5866.    TableSize(OpcodeMap40), TableSize(OpcodeMap41), TableSize(OpcodeMap42), TableSize(OpcodeMap43),
  5867.    TableSize(OpcodeMap44), TableSize(OpcodeMap45), TableSize(OpcodeMap46), TableSize(OpcodeMap47),
  5868.    TableSize(OpcodeMap48), TableSize(OpcodeMap49), TableSize(OpcodeMap4A), TableSize(OpcodeMap4B),
  5869.    TableSize(OpcodeMap4C), TableSize(OpcodeMap4D), TableSize(OpcodeMap4E), TableSize(OpcodeMap4F),
  5870.    TableSize(OpcodeMap50), TableSize(OpcodeMap51), TableSize(OpcodeMap52), TableSize(OpcodeMap53),
  5871.    TableSize(OpcodeMap54), TableSize(OpcodeMap55), TableSize(OpcodeMap56), TableSize(OpcodeMap57),
  5872.    TableSize(OpcodeMap58), TableSize(OpcodeMap59), TableSize(OpcodeMap5A), TableSize(OpcodeMap5B),
  5873.    TableSize(OpcodeMap5C), TableSize(OpcodeMap5D), TableSize(OpcodeMap5E), TableSize(OpcodeMap5F),
  5874.    TableSize(OpcodeMap60), TableSize(OpcodeMap61), TableSize(OpcodeMap62), TableSize(OpcodeMap63),
  5875.    TableSize(OpcodeMap64), TableSize(OpcodeMap65), TableSize(OpcodeMap66), TableSize(OpcodeMap67),
  5876.    TableSize(OpcodeMap68), TableSize(OpcodeMap69), TableSize(OpcodeMap6A), TableSize(OpcodeMap6B),
  5877.    TableSize(OpcodeMap6C), TableSize(OpcodeMap6D), TableSize(OpcodeMap6E), TableSize(OpcodeMap6F),
  5878.    TableSize(OpcodeMap70), TableSize(OpcodeMap71), TableSize(OpcodeMap72), TableSize(OpcodeMap73),
  5879.    TableSize(OpcodeMap74), TableSize(OpcodeMap75), TableSize(OpcodeMap76), TableSize(OpcodeMap77),
  5880.    TableSize(OpcodeMap78), TableSize(OpcodeMap79), TableSize(OpcodeMap7A), TableSize(OpcodeMap7B),
  5881.    TableSize(OpcodeMap7C), TableSize(OpcodeMap7D), TableSize(OpcodeMap7E), TableSize(OpcodeMap7F),
  5882.    TableSize(OpcodeMap80), TableSize(OpcodeMap81), TableSize(OpcodeMap82), TableSize(OpcodeMap83),
  5883.    TableSize(OpcodeMap84), TableSize(OpcodeMap85), TableSize(OpcodeMap86), TableSize(OpcodeMap87),
  5884.    TableSize(OpcodeMap88), TableSize(OpcodeMap89), TableSize(OpcodeMap8A), TableSize(OpcodeMap8B),
  5885.    TableSize(OpcodeMap8C), TableSize(OpcodeMap8D), TableSize(OpcodeMap8E), TableSize(OpcodeMap8F),
  5886.    TableSize(OpcodeMap90), TableSize(OpcodeMap91), TableSize(OpcodeMap92), TableSize(OpcodeMap93),
  5887.    TableSize(OpcodeMap94), TableSize(OpcodeMap95), TableSize(OpcodeMap96), TableSize(OpcodeMap97),
  5888.    TableSize(OpcodeMap98), TableSize(OpcodeMap99), TableSize(OpcodeMap9A), TableSize(OpcodeMap9B),
  5889.    TableSize(OpcodeMap9C), TableSize(OpcodeMap9D), TableSize(OpcodeMap9E), TableSize(OpcodeMap9F),
  5890.    TableSize(OpcodeMapA0), TableSize(OpcodeMapA1), TableSize(OpcodeMapA2), TableSize(OpcodeMapA3),
  5891.    TableSize(OpcodeMapA4), TableSize(OpcodeMapA5), TableSize(OpcodeMapA6), TableSize(OpcodeMapA7),
  5892.    TableSize(OpcodeMapA8), TableSize(OpcodeMapA9), TableSize(OpcodeMapAA), TableSize(OpcodeMapAB),
  5893.    TableSize(OpcodeMapAC), TableSize(OpcodeMapAD), TableSize(OpcodeMapAE), TableSize(OpcodeMapAF),
  5894.    TableSize(OpcodeMapB0), TableSize(OpcodeMapB1), TableSize(OpcodeMapB2), TableSize(OpcodeMapB3),
  5895.    TableSize(OpcodeMapB4), TableSize(OpcodeMapB5), TableSize(OpcodeMapB6), TableSize(OpcodeMapB7),
  5896.    TableSize(OpcodeMapB8), TableSize(OpcodeMapB9), TableSize(OpcodeMapBA), TableSize(OpcodeMapBB),
  5897.    TableSize(OpcodeMapBC), TableSize(OpcodeMapBD), TableSize(OpcodeMapBE), TableSize(OpcodeMapBF),
  5898.    TableSize(OpcodeMapC0), TableSize(OpcodeMapC1), TableSize(OpcodeMapC2), TableSize(OpcodeMapC3),
  5899.    TableSize(OpcodeMapC4), TableSize(OpcodeMapC5), TableSize(OpcodeMapC6), TableSize(OpcodeMapC7),
  5900.    TableSize(OpcodeMapC8), TableSize(OpcodeMapC9), TableSize(OpcodeMapCA), TableSize(OpcodeMapCB),
  5901.    TableSize(OpcodeMapCC), TableSize(OpcodeMapCD), TableSize(OpcodeMapCE), TableSize(OpcodeMapCF),
  5902.    TableSize(OpcodeMapD0), TableSize(OpcodeMapD1), TableSize(OpcodeMapD2), TableSize(OpcodeMapD3),
  5903.    TableSize(OpcodeMapD4), TableSize(OpcodeMapD5), TableSize(OpcodeMapD6), TableSize(OpcodeMapD7),
  5904.    TableSize(OpcodeMapD8), TableSize(OpcodeMapD9), TableSize(OpcodeMapDA), TableSize(OpcodeMapDB),
  5905.    TableSize(OpcodeMapDC), TableSize(OpcodeMapDD), TableSize(OpcodeMapDE), TableSize(OpcodeMapDF),
  5906.    TableSize(OpcodeMapE0), TableSize(OpcodeMapE1), TableSize(OpcodeMapE2), TableSize(OpcodeMapE3),
  5907.    TableSize(OpcodeMapE4), TableSize(OpcodeMapE5), TableSize(OpcodeMapE6), TableSize(OpcodeMapE7),
  5908.    TableSize(OpcodeMapE8), TableSize(OpcodeMapE9), TableSize(OpcodeMapEA), TableSize(OpcodeMapEB),
  5909.    TableSize(OpcodeMapEC), TableSize(OpcodeMapED), TableSize(OpcodeMapEE), TableSize(OpcodeMapEF),
  5910.    TableSize(OpcodeMapF0), TableSize(OpcodeMapF1), TableSize(OpcodeMapF2), TableSize(OpcodeMapF3),
  5911.    TableSize(OpcodeMapF4), TableSize(OpcodeMapF5), TableSize(OpcodeMapF6), TableSize(OpcodeMapF7),
  5912.    TableSize(OpcodeMapF8), TableSize(OpcodeMapF9), TableSize(OpcodeMapFA), TableSize(OpcodeMapFB),
  5913.    TableSize(OpcodeMapFC), TableSize(OpcodeMapFD), TableSize(OpcodeMapFE), TableSize(OpcodeMapFF),
  5914.    TableSize(OpcodeMap100), TableSize(OpcodeMap101), TableSize(OpcodeMap102), TableSize(OpcodeMap103),
  5915.    TableSize(OpcodeMap104), TableSize(OpcodeMap105), TableSize(OpcodeMap106), TableSize(OpcodeMap107),
  5916.    TableSize(OpcodeMap108), TableSize(OpcodeMap109), TableSize(OpcodeMap10A), TableSize(OpcodeMap10B),
  5917.    TableSize(OpcodeMap10C), TableSize(OpcodeMap10D), TableSize(OpcodeMap10E), TableSize(OpcodeMap10F),
  5918.    TableSize(OpcodeMap110), TableSize(OpcodeMap111), TableSize(OpcodeMap112), TableSize(OpcodeMap113),
  5919.    TableSize(OpcodeMap114), TableSize(OpcodeMap115), TableSize(OpcodeMap116), TableSize(OpcodeMap117),
  5920.    TableSize(OpcodeMap118), TableSize(OpcodeMap119), TableSize(OpcodeMap11A), TableSize(OpcodeMap11B),
  5921.    TableSize(OpcodeMap11C), TableSize(OpcodeMap11D), TableSize(OpcodeMap11E), TableSize(OpcodeMap11F),
  5922.    TableSize(OpcodeMap120), TableSize(OpcodeMap121), TableSize(OpcodeMap122), TableSize(OpcodeMap123),
  5923.    TableSize(OpcodeMap124), TableSize(OpcodeMap125), TableSize(OpcodeMap126), TableSize(OpcodeMap127),
  5924.    TableSize(OpcodeMap128), TableSize(OpcodeMap129), TableSize(OpcodeMap12A), TableSize(OpcodeMap12B),
  5925.    TableSize(OpcodeMap12C), TableSize(OpcodeMap12D), TableSize(OpcodeMap12E), TableSize(OpcodeMap12F),
  5926.    TableSize(OpcodeMap130), TableSize(OpcodeMap131), TableSize(OpcodeMap132), TableSize(OpcodeMap133),
  5927.    TableSize(OpcodeMap134), TableSize(OpcodeMap135), TableSize(OpcodeMap136), TableSize(OpcodeMap137),
  5928.    TableSize(OpcodeMap138), TableSize(OpcodeMap139), TableSize(OpcodeMap13A), TableSize(OpcodeMap13B),
  5929.    TableSize(OpcodeMap13C), TableSize(OpcodeMap13D), TableSize(OpcodeMap13E), TableSize(OpcodeMap13F),
  5930. };
  5931.  
  5932. // number of entries in OpcodeTables
  5933. const uint32 NumOpcodeTables1 = TableSize(OpcodeTables);        
  5934. const uint32 NumOpcodeTables2 = TableSize(OpcodeTableLength);        
  5935.  
  5936. // Index to start pages, depending on VEX.mmmm bits
  5937. uint32 OpcodeStartPageVEX[] = {
  5938.    0xB0,                        // no escape,      VEX.mmmm = 0
  5939.    0xB1,                        // 0F    escape or VEX.mmmm = 1
  5940.    0x2,                         // 0F 38 escape or VEX.mmmm = 2
  5941.    0x4,                         // 0f 3A escape or VEX.mmmm = 3
  5942.    0, 0, 0, 0,                  // reserved for higher mmmm
  5943.    0xB2,                        // 0F 38 escape or EVEX.mmmm = 2 with F2 prefix (pp = 11)
  5944.    0xB3                         // 0F 38 escape or EVEX.mmmm = 2 with F3 prefix (pp = 10)
  5945. };
  5946.  
  5947. // Index to start pages, depending on XOP.mmmm bits
  5948. SOpcodeDef const * OpcodeStartPageXOP[] = {
  5949.    OpcodeMap64,                        // XOP.mmmm = 8
  5950.    OpcodeMap65,                        // XOP.mmmm = 9
  5951.    OpcodeMap66                         // XOP.mmmm = 0xA
  5952. };  
  5953.  
  5954. // Number of entries in OpcodeStartPages
  5955. const uint32 NumOpcodeStartPageVEX = TableSize(OpcodeStartPageVEX);
  5956. const uint32 NumOpcodeStartPageXOP = TableSize(OpcodeStartPageXOP);
  5957.  
  5958.  
  5959. // Define register names
  5960.  
  5961. // Names of 8 bit registers
  5962. const char * RegisterNames8[8] = {
  5963.    "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh" };
  5964.  
  5965. // Names of 8 bit registers with REX prefix
  5966. const char * RegisterNames8x[16] = {
  5967.    "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
  5968.    "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"  };
  5969.  
  5970. // Names of 16 bit registers
  5971. const char * RegisterNames16[16] = {
  5972.    "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
  5973.    "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w" };
  5974.      
  5975. // Names of 32 bit registers
  5976. const char * RegisterNames32[16] = {
  5977.    "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
  5978.    "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d" };
  5979.      
  5980. // Names of 64 bit registers
  5981. const char * RegisterNames64[16] = {
  5982.    "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
  5983.    "r8",  "r9",  "r10", "r11", "r12", "r13", "r14", "r15" };
  5984.      
  5985. // Names of segment registers
  5986. const char * RegisterNamesSeg[8] = {
  5987.    "es", "cs", "ss", "ds", "fs", "gs", "hs?", "is?" }; // Last two are illegal or undocumented
  5988.  
  5989. // Names of control registers
  5990. const char * RegisterNamesCR[16] = {
  5991.    "cr0", "cr1 ?", "cr2", "cr3", "cr4", "cr5 ?", "cr6 ?", "cr7 ?",
  5992.    "cr8", "cr9 ?", "cr10 ?", "cr11 ?", "cr12 ?", "cr13 ?", "cr14 ?", "cr15 ?" }; // Those with ? are illegal
  5993.  
  5994.  
  5995. // MVEX tables: Tables of the meaning of the sss bits in a MVEX prefix
  5996.  
  5997. SwizSpec Sf32r[8] = {  // 32-bit float or integer register permutation
  5998.     {0x64B,64,4,""},
  5999.     {0x64B,64,4,"cdab"},
  6000.     {0x64B,64,4,"badc"},
  6001.     {0x64B,64,4,"dacb"},
  6002.     {0x64B,64,4,"aaaa"},
  6003.     {0x64B,64,4,"bbbb"},
  6004.     {0x64B,64,4,"cccc"},
  6005.     {0x64B,64,4,"dddd"}};
  6006.  
  6007. SwizSpec Sf64r[8] = {  // 64-bit float or integer register permutation
  6008.     {0x64C,64,8,""},
  6009.     {0x64C,64,8,"cdab"},
  6010.     {0x64C,64,8,"badc"},
  6011.     {0x64C,64,8,"dacb"},
  6012.     {0x64C,64,8,"aaaa"},
  6013.     {0x64C,64,8,"bbbb"},
  6014.     {0x64C,64,8,"cccc"},
  6015.     {0x64C,64,8,"dddd"}};
  6016.  
  6017. SwizSpec Sf32m[8] = {  // 32-bit float memory broadcast or conversion
  6018.     {0x64B,64,4,""},
  6019.     {0x04B, 4,4,"1to16"},
  6020.     {0x44B,16,4,"4to16"},
  6021.     {0x54A,32,2,"float16"},
  6022.     {0x401,16,1,"uint8"},
  6023.     {0x401,16,1,"sint8 N/A!"},
  6024.     {0x502,32,2,"uint16"},
  6025.     {0x502,32,2,"sint16"}};
  6026.  
  6027. SwizSpec Sf64m[8] = {  // 64-bit float memory broadcast (no conversion)
  6028.     {0x64C,64,8,""},
  6029.     {0x04C, 8,8,"1to8"},
  6030.     {0x54C,32,8,"4to8"},
  6031.     {0x64C,64,8,"N/A!"},
  6032.     {0x64C,64,8,"N/A!"},
  6033.     {0x64C,64,8,"N/A!"},
  6034.     {0x64C,64,8,"N/A!"},
  6035.     {0x64C,64,8,"N/A!"}};
  6036.  
  6037. SwizSpec Si32m[8] = {  // 32-bit integer memory broadcast or conversion
  6038.     {0x603,64,4,""},
  6039.     {0x003, 4,4,"1to16"},
  6040.     {0x403,16,4,"4to16"},
  6041.     {0x54A,32,2,"N/A!"},
  6042.     {0x401,16,1,"uint8"},
  6043.     {0x401,16,1,"sint8"},
  6044.     {0x502,32,2,"uint16"},
  6045.     {0x502,32,2,"sint16"}};
  6046.  
  6047. SwizSpec Si64m[8] = {  // 64-bit integer memory broadcast (no conversion)
  6048.     {0x604,64,8,""},
  6049.     {0x004, 8,8,"1to8"},
  6050.     {0x504,32,8,"4to8"},
  6051.     {0x604,64,8,"N/A!"},
  6052.     {0x604,64,8,"N/A!"},
  6053.     {0x604,64,8,"N/A!"},
  6054.     {0x604,64,8,"N/A!"},
  6055.     {0x604,64,8,"N/A!"}};
  6056.  
  6057. SwizSpec Uf32m[8] = {  // 32-bit float memory up- or down-conversion
  6058.     {0x64B,64,4,""},
  6059.     {0x04B, 4,4,"N/A!"},
  6060.     {0x54B,16,4,"N/A!"},
  6061.     {0x54A,32,2,"float16"},
  6062.     {0x401,16,1,"uint8"},
  6063.     {0x401,16,1,"sint8"},
  6064.     {0x502,32,2,"uint16"},
  6065.     {0x502,32,2,"sint16"}};
  6066.  
  6067. SwizSpec Uf64m[8] = {  // 64-bit float memory, no up- or down-conversion
  6068.     {0x64C,64,8,""},
  6069.     {0x64C,64,8,"N/A!"},
  6070.     {0x64C,64,8,"N/A!"},
  6071.     {0x64C,64,8,"N/A!"},
  6072.     {0x64C,64,8,"N/A!"},
  6073.     {0x64C,64,8,"N/A!"},
  6074.     {0x64C,64,8,"N/A!"},
  6075.     {0x64C,64,8,"N/A!"}};
  6076.  
  6077. SwizSpec Ui32m[8] = {  // 32-bit integer memory up- or down-conversion
  6078.     {0x603,64,4,""},
  6079.     {0x003, 4,4,"N/A!"},
  6080.     {0x503,16,4,"N/A!"},
  6081.     {0x54A,32,2,"N/A!"},
  6082.     {0x401,16,1,"uint8"},
  6083.     {0x401,16,1,"sint8"},
  6084.     {0x502,32,2,"uint16"},
  6085.     {0x502,32,2,"sint16"}};
  6086.  
  6087. SwizSpec Ui64m[8] = {  // 64-bit integer memory, no up- or down-conversion
  6088.     {0x604,64,8,""},
  6089.     {0x604,64,8,"N/A!"},
  6090.     {0x604,64,8,"N/A!"},
  6091.     {0x604,64,8,"N/A!"},
  6092.     {0x604,64,8,"N/A!"},
  6093.     {0x604,64,8,"N/A!"},
  6094.     {0x604,64,8,"N/A!"},
  6095.     {0x604,64,8,"N/A!"}};
  6096.  
  6097. // special cases:
  6098.  
  6099. SwizSpec Uf32mx4[8] = {  // 32-bit float memory up-conversion, broadcast * 4, vbroadcastf32x4
  6100.     {0x44B,16,4*4,""},
  6101.     {0x04B,16,4*4,"N/A!"},
  6102.     {0x54B,16,4*4,"N/A!"},
  6103.     {0x004, 8,2*4,"float16"},
  6104.     {0x003, 4,1*4,"uint8"},
  6105.     {0x003, 4,1*4,"sint8"},
  6106.     {0x004, 8,2*4,"uint16"},
  6107.     {0x004, 8,2*4,"sint16"}};
  6108.  
  6109. SwizSpec Uf64mx4[8] = {  // 64-bit float memory, no up-conversion, broadcast * 4, vbroadcastf64x4
  6110.     {0x54C,32,8*4,""},
  6111.     {0x54C,32,8*4,"N/A!"},
  6112.     {0x54C,32,8*4,"N/A!"},
  6113.     {0x54C,32,8*4,"N/A!"},
  6114.     {0x54C,32,8*4,"N/A!"},
  6115.     {0x54C,32,8*4,"N/A!"},
  6116.     {0x54C,32,8*4,"N/A!"},
  6117.     {0x54C,32,8*4,"N/A!"}};
  6118.  
  6119. SwizSpec Ui32mx4[8] = {  // 32-bit integer memory up-conversion, broadcast * 4, vbroadcasti32x4
  6120.     {0x403,16,4*4,""},
  6121.     {0x003,16,4*4,"N/A!"},
  6122.     {0x503,16,4*4,"N/A!"},
  6123.     {0x54A, 8,2*4,"N/A!"},
  6124.     {0x003, 4,1*4,"uint8"},
  6125.     {0x003, 4,1*4,"sint8"},
  6126.     {0x004, 8,2*4,"uint16"},
  6127.     {0x004, 8,2*4,"sint16"}};
  6128.  
  6129. SwizSpec Ui64mx4[8] = {  // 64-bit integer memory, no up-conversion, broadcast * 4, vbroadcasti64x4
  6130.     {0x504,32,8*4,""},
  6131.     {0x504,32,8*4,"N/A!"},
  6132.     {0x504,32,8*4,"N/A!"},
  6133.     {0x504,32,8*4,"N/A!"},
  6134.     {0x504,32,8*4,"N/A!"},
  6135.     {0x504,32,8*4,"N/A!"},
  6136.     {0x504,32,8*4,"N/A!"},
  6137.     {0x504,32,8*4,"N/A!"}};
  6138.  
  6139. SwizSpec Si32mHalf[8] = {  // 32-bit integer memory broadcast with conversion to double (VCVTDQ2PD)
  6140.     {0x503,32,4,""},
  6141.     {0x003, 4,4,"1to8"},
  6142.     {0x403,16,4,"4to8"},
  6143.     {0x503,32,4,"N/A!"},
  6144.     {0x503,32,4,"N/A!"},
  6145.     {0x503,32,4,"N/A!"},
  6146.     {0x503,32,4,"N/A!"},
  6147.     {0x503,32,4,"N/A!"}};
  6148.  
  6149. SwizSpec Sf32mHalf[8] = {  // 32-bit float memory broadcast or conversion (vcvtps2pd)
  6150.     {0x54B,32,4,""},
  6151.     {0x04B, 4,4,"1to8"},
  6152.     {0x44B,16,4,"4to8"},
  6153.     {0x54A,32,2,"N/A!"},
  6154.     {0x401,16,1,"N/A!"},
  6155.     {0x401,16,1,"N/A!"},
  6156.     {0x502,32,2,"N/A!"},
  6157.     {0x502,32,2,"N/A!"}};
  6158.  
  6159. SwizSpec Snone[8] = {  // No swizzle
  6160.     {0x600,64,8*4,""},
  6161.     {0x600,64,8*4,"N/A!"},
  6162.     {0x600,64,8*4,"N/A!"},
  6163.     {0x600,64,8*4,"N/A!"},
  6164.     {0x600,64,8*4,"N/A!"},
  6165.     {0x600,64,8*4,"N/A!"},
  6166.     {0x600,64,8*4,"N/A!"},
  6167.     {0x600,64,8*4,"N/A!"}};
  6168.  
  6169. SwizSpec Sf32mfmadd233[8] = {  // 32-bit float memory, without register swizzle and limited broadcast, vfmadd233ps
  6170.     {0x64B,64,4,""},
  6171.     {0x04B, 4,4,"N/A!"},
  6172.     {0x44B,16,4,"4to16"},
  6173.     {0x54A,32,2,"N/A!"},
  6174.     {0x401,16,1,"N/A!"},
  6175.     {0x401,16,1,"N/A!"},
  6176.     {0x502,32,2,"N/A!"},
  6177.     {0x502,32,2,"N/A!"}};
  6178.  
  6179. SwizSpec Sdummy[8] = {  // For unused entries
  6180.     {0,0,0,""},
  6181.     {0,0,0,"??"},
  6182.     {0,0,0,"??"},
  6183.     {0,0,0,"??"},
  6184.     {0,0,0,"??"},
  6185.     {0,0,0,"??"},
  6186.     {0,0,0,"??"},
  6187.     {0,0,0,"??"}};
  6188.  
  6189. SwizSpec Signore[8] = {  // sss bits ignored or used only for sae. Offset multiplier defined
  6190.     {0x603,64,4,""},
  6191.     {0x603,64,4,""},
  6192.     {0x603,64,4,""},
  6193.     {0x603,64,4,""},
  6194.     {0x603,64,4,""},
  6195.     {0x603,64,4,""},
  6196.     {0x603,64,4,""},
  6197.     {0x603,64,4,""}};
  6198.  
  6199. SwizSpec Signore1[8] = {  // sss bits ignored or used only for sae. Offset multiplier defined, vector size not defined
  6200.     {0x000,64,4,""},
  6201.     {0x000,64,4,""},
  6202.     {0x000,64,4,""},
  6203.     {0x000,64,4,""},
  6204.     {0x000,64,4,""},
  6205.     {0x000,64,4,""},
  6206.     {0x000,64,4,""},
  6207.     {0x000,64,4,""}};
  6208.  
  6209. // Table of swizzle tables
  6210. SwizSpec const * SwizTables[][2] = {
  6211.     {Sdummy,Sdummy},     //  0 no swizzle, sss must be zero
  6212.     {Signore,Signore},   //  1 sss ignored or used only for sae, offset multiplier defined
  6213.     {Signore1,Signore1}, //  2 sss ignored or used only for sae, offset multiplier defined, no vector size
  6214.     {Sdummy,Sdummy},     //  3 unused
  6215.     {Sf32r,Sf32m},       //  4 Sf32
  6216.     {Sf64r,Sf64m},       //  5 Sf64
  6217.     {Sf32r,Si32m},       //  6 Si32
  6218.     {Sf64r,Si64m},       //  7 Si64
  6219.     {Sdummy,Uf32m},      //  8 Uf32
  6220.     {Sdummy,Uf64m},      //  9 Uf64
  6221.     {Sf32r,Ui32m},       //  A Ui32
  6222.     {Sf64r,Ui64m},       //  B Ui64
  6223.     {Sdummy,Uf32m},      //  C Df32
  6224.     {Sdummy,Uf64m},      //  D Df64
  6225.     {Sf32r,Ui32m},       //  E Di32
  6226.     {Sf64r,Ui64m},       //  F Di64
  6227.     // special cases
  6228.     {Sdummy,Uf32mx4},    // 10 Uf32 vbroadcastf32x4
  6229.     {Sdummy,Uf64mx4},    // 11 Uf64 vbroadcastf64x4
  6230.     {Sdummy,Ui32mx4},    // 12 Ui32 vbroadcasti32x4
  6231.     {Sdummy,Ui64mx4},    // 13 Ui64 vbroadcasti64x4
  6232.     {Sf32r,Si32mHalf},   // 14 Si32 vcvtdq2pd, vcvtudq2pd
  6233.     {Sf32r,Sf32mHalf},   // 15 Sf32 vcvtps2pd
  6234.     {Snone,Sf32mfmadd233}// 16 Sf32 without register swizzle and limited broadcast, vfmadd233ps
  6235. };
  6236.  
  6237. SwizSpec Sround_1[8] = {  // Register operand rounding mode and suppress all exceptions
  6238.     {0x64B,32,4,"rn"},    // syntax 1
  6239.     {0x64B,32,4,"rd"},
  6240.     {0x64B,32,4,"ru"},
  6241.     {0x64B,32,4,"rz"},
  6242.     {0x64B,32,4,"rn-sae"},
  6243.     {0x64B,32,4,"rd-sae"},
  6244.     {0x64B,32,4,"ru-sae"},
  6245.     {0x64B,32,4,"rz-sae"}};
  6246.  
  6247. SwizSpec Sround_2[8] = {  // Register operand rounding mode and suppress all exceptions
  6248.     {0x64B,32,4,"rn"},    // alternative syntax
  6249.     {0x64B,32,4,"rd"},
  6250.     {0x64B,32,4,"ru"},
  6251.     {0x64B,32,4,"rz"},
  6252.     {0x64B,32,4,"rn} {sae"},
  6253.     {0x64B,32,4,"rd} {sae"},
  6254.     {0x64B,32,4,"ru} {sae"},
  6255.     {0x64B,32,4,"rz} {sae"}};
  6256.  
  6257. // Table of swizzle tables for rounding mode
  6258. SwizSpec const * SwizRoundTables[1][2] = {
  6259.     {Sround_1,Sround_2}
  6260. };
  6261.  
  6262. // EVEX tables: Tables of rounding mode names for EVEX
  6263. const char * EVEXRoundingNames[5] = {
  6264.     "rn-sae", "rd-sae", "ru-sae", "rz-sae", "sae"
  6265. };
  6266.  
  6267.