Home | History | Annotate | Line # | Download | only in opcodes
i386-dis.c revision 1.1.1.2
      1      1.1  christos /* Print i386 instructions for GDB, the GNU debugger.
      2      1.1  christos    Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
      3  1.1.1.2  christos    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
      4      1.1  christos    Free Software Foundation, Inc.
      5      1.1  christos 
      6      1.1  christos    This file is part of the GNU opcodes library.
      7      1.1  christos 
      8      1.1  christos    This library is free software; you can redistribute it and/or modify
      9      1.1  christos    it under the terms of the GNU General Public License as published by
     10      1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     11      1.1  christos    any later version.
     12      1.1  christos 
     13      1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     14      1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15      1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     16      1.1  christos    License for more details.
     17      1.1  christos 
     18      1.1  christos    You should have received a copy of the GNU General Public License
     19      1.1  christos    along with this program; if not, write to the Free Software
     20      1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     21      1.1  christos    MA 02110-1301, USA.  */
     22      1.1  christos 
     23      1.1  christos 
     24      1.1  christos /* 80386 instruction printer by Pace Willisson (pace (at) prep.ai.mit.edu)
     25      1.1  christos    July 1988
     26      1.1  christos     modified by John Hassey (hassey (at) dg-rtp.dg.com)
     27      1.1  christos     x86-64 support added by Jan Hubicka (jh (at) suse.cz)
     28      1.1  christos     VIA PadLock support by Michal Ludvig (mludvig (at) suse.cz).  */
     29      1.1  christos 
     30      1.1  christos /* The main tables describing the instructions is essentially a copy
     31      1.1  christos    of the "Opcode Map" chapter (Appendix A) of the Intel 80386
     32      1.1  christos    Programmers Manual.  Usually, there is a capital letter, followed
     33      1.1  christos    by a small letter.  The capital letter tell the addressing mode,
     34      1.1  christos    and the small letter tells about the operand size.  Refer to
     35      1.1  christos    the Intel manual for details.  */
     36      1.1  christos 
     37      1.1  christos #include "sysdep.h"
     38      1.1  christos #include "dis-asm.h"
     39      1.1  christos #include "opintl.h"
     40      1.1  christos #include "opcode/i386.h"
     41      1.1  christos #include "libiberty.h"
     42      1.1  christos 
     43      1.1  christos #include <setjmp.h>
     44      1.1  christos 
     45      1.1  christos static int print_insn (bfd_vma, disassemble_info *);
     46      1.1  christos static void dofloat (int);
     47      1.1  christos static void OP_ST (int, int);
     48      1.1  christos static void OP_STi (int, int);
     49      1.1  christos static int putop (const char *, int);
     50      1.1  christos static void oappend (const char *);
     51      1.1  christos static void append_seg (void);
     52      1.1  christos static void OP_indirE (int, int);
     53      1.1  christos static void print_operand_value (char *, int, bfd_vma);
     54      1.1  christos static void OP_E_register (int, int);
     55      1.1  christos static void OP_E_memory (int, int);
     56      1.1  christos static void print_displacement (char *, bfd_vma);
     57      1.1  christos static void OP_E (int, int);
     58      1.1  christos static void OP_G (int, int);
     59      1.1  christos static bfd_vma get64 (void);
     60      1.1  christos static bfd_signed_vma get32 (void);
     61      1.1  christos static bfd_signed_vma get32s (void);
     62      1.1  christos static int get16 (void);
     63      1.1  christos static void set_op (bfd_vma, int);
     64      1.1  christos static void OP_Skip_MODRM (int, int);
     65      1.1  christos static void OP_REG (int, int);
     66      1.1  christos static void OP_IMREG (int, int);
     67      1.1  christos static void OP_I (int, int);
     68      1.1  christos static void OP_I64 (int, int);
     69      1.1  christos static void OP_sI (int, int);
     70      1.1  christos static void OP_J (int, int);
     71      1.1  christos static void OP_SEG (int, int);
     72      1.1  christos static void OP_DIR (int, int);
     73      1.1  christos static void OP_OFF (int, int);
     74      1.1  christos static void OP_OFF64 (int, int);
     75      1.1  christos static void ptr_reg (int, int);
     76      1.1  christos static void OP_ESreg (int, int);
     77      1.1  christos static void OP_DSreg (int, int);
     78      1.1  christos static void OP_C (int, int);
     79      1.1  christos static void OP_D (int, int);
     80      1.1  christos static void OP_T (int, int);
     81      1.1  christos static void OP_R (int, int);
     82      1.1  christos static void OP_MMX (int, int);
     83      1.1  christos static void OP_XMM (int, int);
     84      1.1  christos static void OP_EM (int, int);
     85      1.1  christos static void OP_EX (int, int);
     86      1.1  christos static void OP_EMC (int,int);
     87      1.1  christos static void OP_MXC (int,int);
     88      1.1  christos static void OP_MS (int, int);
     89      1.1  christos static void OP_XS (int, int);
     90      1.1  christos static void OP_M (int, int);
     91      1.1  christos static void OP_VEX (int, int);
     92      1.1  christos static void OP_EX_Vex (int, int);
     93      1.1  christos static void OP_EX_VexW (int, int);
     94      1.1  christos static void OP_EX_VexImmW (int, int);
     95      1.1  christos static void OP_XMM_Vex (int, int);
     96      1.1  christos static void OP_XMM_VexW (int, int);
     97      1.1  christos static void OP_REG_VexI4 (int, int);
     98      1.1  christos static void PCLMUL_Fixup (int, int);
     99      1.1  christos static void VEXI4_Fixup (int, int);
    100      1.1  christos static void VZERO_Fixup (int, int);
    101      1.1  christos static void VCMP_Fixup (int, int);
    102      1.1  christos static void OP_0f07 (int, int);
    103      1.1  christos static void OP_Monitor (int, int);
    104      1.1  christos static void OP_Mwait (int, int);
    105      1.1  christos static void NOP_Fixup1 (int, int);
    106      1.1  christos static void NOP_Fixup2 (int, int);
    107      1.1  christos static void OP_3DNowSuffix (int, int);
    108      1.1  christos static void CMP_Fixup (int, int);
    109      1.1  christos static void BadOp (void);
    110      1.1  christos static void REP_Fixup (int, int);
    111  1.1.1.2  christos static void HLE_Fixup1 (int, int);
    112  1.1.1.2  christos static void HLE_Fixup2 (int, int);
    113  1.1.1.2  christos static void HLE_Fixup3 (int, int);
    114      1.1  christos static void CMPXCHG8B_Fixup (int, int);
    115      1.1  christos static void XMM_Fixup (int, int);
    116      1.1  christos static void CRC32_Fixup (int, int);
    117      1.1  christos static void FXSAVE_Fixup (int, int);
    118      1.1  christos static void OP_LWPCB_E (int, int);
    119      1.1  christos static void OP_LWP_E (int, int);
    120      1.1  christos static void OP_Vex_2src_1 (int, int);
    121      1.1  christos static void OP_Vex_2src_2 (int, int);
    122      1.1  christos 
    123      1.1  christos static void MOVBE_Fixup (int, int);
    124      1.1  christos 
    125      1.1  christos struct dis_private {
    126      1.1  christos   /* Points to first byte not fetched.  */
    127      1.1  christos   bfd_byte *max_fetched;
    128      1.1  christos   bfd_byte the_buffer[MAX_MNEM_SIZE];
    129      1.1  christos   bfd_vma insn_start;
    130      1.1  christos   int orig_sizeflag;
    131      1.1  christos   jmp_buf bailout;
    132      1.1  christos };
    133      1.1  christos 
    134      1.1  christos enum address_mode
    135      1.1  christos {
    136      1.1  christos   mode_16bit,
    137      1.1  christos   mode_32bit,
    138      1.1  christos   mode_64bit
    139      1.1  christos };
    140      1.1  christos 
    141      1.1  christos enum address_mode address_mode;
    142      1.1  christos 
    143      1.1  christos /* Flags for the prefixes for the current instruction.  See below.  */
    144      1.1  christos static int prefixes;
    145      1.1  christos 
    146      1.1  christos /* REX prefix the current instruction.  See below.  */
    147      1.1  christos static int rex;
    148      1.1  christos /* Bits of REX we've already used.  */
    149      1.1  christos static int rex_used;
    150      1.1  christos /* REX bits in original REX prefix ignored.  */
    151      1.1  christos static int rex_ignored;
    152      1.1  christos /* Mark parts used in the REX prefix.  When we are testing for
    153      1.1  christos    empty prefix (for 8bit register REX extension), just mask it
    154      1.1  christos    out.  Otherwise test for REX bit is excuse for existence of REX
    155      1.1  christos    only in case value is nonzero.  */
    156      1.1  christos #define USED_REX(value)					\
    157      1.1  christos   {							\
    158      1.1  christos     if (value)						\
    159      1.1  christos       {							\
    160      1.1  christos 	if ((rex & value))				\
    161      1.1  christos 	  rex_used |= (value) | REX_OPCODE;		\
    162      1.1  christos       }							\
    163      1.1  christos     else						\
    164      1.1  christos       rex_used |= REX_OPCODE;				\
    165      1.1  christos   }
    166      1.1  christos 
    167      1.1  christos /* Flags for prefixes which we somehow handled when printing the
    168      1.1  christos    current instruction.  */
    169      1.1  christos static int used_prefixes;
    170      1.1  christos 
    171      1.1  christos /* Flags stored in PREFIXES.  */
    172      1.1  christos #define PREFIX_REPZ 1
    173      1.1  christos #define PREFIX_REPNZ 2
    174      1.1  christos #define PREFIX_LOCK 4
    175      1.1  christos #define PREFIX_CS 8
    176      1.1  christos #define PREFIX_SS 0x10
    177      1.1  christos #define PREFIX_DS 0x20
    178      1.1  christos #define PREFIX_ES 0x40
    179      1.1  christos #define PREFIX_FS 0x80
    180      1.1  christos #define PREFIX_GS 0x100
    181      1.1  christos #define PREFIX_DATA 0x200
    182      1.1  christos #define PREFIX_ADDR 0x400
    183      1.1  christos #define PREFIX_FWAIT 0x800
    184      1.1  christos 
    185      1.1  christos /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
    186      1.1  christos    to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
    187      1.1  christos    on error.  */
    188      1.1  christos #define FETCH_DATA(info, addr) \
    189      1.1  christos   ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
    190      1.1  christos    ? 1 : fetch_data ((info), (addr)))
    191      1.1  christos 
    192      1.1  christos static int
    193      1.1  christos fetch_data (struct disassemble_info *info, bfd_byte *addr)
    194      1.1  christos {
    195      1.1  christos   int status;
    196      1.1  christos   struct dis_private *priv = (struct dis_private *) info->private_data;
    197      1.1  christos   bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
    198      1.1  christos 
    199      1.1  christos   if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
    200      1.1  christos     status = (*info->read_memory_func) (start,
    201      1.1  christos 					priv->max_fetched,
    202      1.1  christos 					addr - priv->max_fetched,
    203      1.1  christos 					info);
    204      1.1  christos   else
    205      1.1  christos     status = -1;
    206      1.1  christos   if (status != 0)
    207      1.1  christos     {
    208      1.1  christos       /* If we did manage to read at least one byte, then
    209      1.1  christos 	 print_insn_i386 will do something sensible.  Otherwise, print
    210      1.1  christos 	 an error.  We do that here because this is where we know
    211      1.1  christos 	 STATUS.  */
    212      1.1  christos       if (priv->max_fetched == priv->the_buffer)
    213      1.1  christos 	(*info->memory_error_func) (status, start, info);
    214      1.1  christos       longjmp (priv->bailout, 1);
    215      1.1  christos     }
    216      1.1  christos   else
    217      1.1  christos     priv->max_fetched = addr;
    218      1.1  christos   return 1;
    219      1.1  christos }
    220      1.1  christos 
    221      1.1  christos #define XX { NULL, 0 }
    222      1.1  christos #define Bad_Opcode NULL, { { NULL, 0 } }
    223      1.1  christos 
    224      1.1  christos #define Eb { OP_E, b_mode }
    225      1.1  christos #define EbS { OP_E, b_swap_mode }
    226      1.1  christos #define Ev { OP_E, v_mode }
    227      1.1  christos #define EvS { OP_E, v_swap_mode }
    228      1.1  christos #define Ed { OP_E, d_mode }
    229      1.1  christos #define Edq { OP_E, dq_mode }
    230      1.1  christos #define Edqw { OP_E, dqw_mode }
    231      1.1  christos #define Edqb { OP_E, dqb_mode }
    232      1.1  christos #define Edqd { OP_E, dqd_mode }
    233      1.1  christos #define Eq { OP_E, q_mode }
    234      1.1  christos #define indirEv { OP_indirE, stack_v_mode }
    235      1.1  christos #define indirEp { OP_indirE, f_mode }
    236      1.1  christos #define stackEv { OP_E, stack_v_mode }
    237      1.1  christos #define Em { OP_E, m_mode }
    238      1.1  christos #define Ew { OP_E, w_mode }
    239      1.1  christos #define M { OP_M, 0 }		/* lea, lgdt, etc. */
    240      1.1  christos #define Ma { OP_M, a_mode }
    241      1.1  christos #define Mb { OP_M, b_mode }
    242      1.1  christos #define Md { OP_M, d_mode }
    243      1.1  christos #define Mo { OP_M, o_mode }
    244      1.1  christos #define Mp { OP_M, f_mode }		/* 32 or 48 bit memory operand for LDS, LES etc */
    245      1.1  christos #define Mq { OP_M, q_mode }
    246      1.1  christos #define Mx { OP_M, x_mode }
    247      1.1  christos #define Mxmm { OP_M, xmm_mode }
    248      1.1  christos #define Gb { OP_G, b_mode }
    249      1.1  christos #define Gv { OP_G, v_mode }
    250      1.1  christos #define Gd { OP_G, d_mode }
    251      1.1  christos #define Gdq { OP_G, dq_mode }
    252      1.1  christos #define Gm { OP_G, m_mode }
    253      1.1  christos #define Gw { OP_G, w_mode }
    254      1.1  christos #define Rd { OP_R, d_mode }
    255      1.1  christos #define Rm { OP_R, m_mode }
    256      1.1  christos #define Ib { OP_I, b_mode }
    257      1.1  christos #define sIb { OP_sI, b_mode }	/* sign extened byte */
    258      1.1  christos #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
    259      1.1  christos #define Iv { OP_I, v_mode }
    260  1.1.1.2  christos #define sIv { OP_sI, v_mode }
    261      1.1  christos #define Iq { OP_I, q_mode }
    262      1.1  christos #define Iv64 { OP_I64, v_mode }
    263      1.1  christos #define Iw { OP_I, w_mode }
    264      1.1  christos #define I1 { OP_I, const_1_mode }
    265      1.1  christos #define Jb { OP_J, b_mode }
    266      1.1  christos #define Jv { OP_J, v_mode }
    267      1.1  christos #define Cm { OP_C, m_mode }
    268      1.1  christos #define Dm { OP_D, m_mode }
    269      1.1  christos #define Td { OP_T, d_mode }
    270      1.1  christos #define Skip_MODRM { OP_Skip_MODRM, 0 }
    271      1.1  christos 
    272      1.1  christos #define RMeAX { OP_REG, eAX_reg }
    273      1.1  christos #define RMeBX { OP_REG, eBX_reg }
    274      1.1  christos #define RMeCX { OP_REG, eCX_reg }
    275      1.1  christos #define RMeDX { OP_REG, eDX_reg }
    276      1.1  christos #define RMeSP { OP_REG, eSP_reg }
    277      1.1  christos #define RMeBP { OP_REG, eBP_reg }
    278      1.1  christos #define RMeSI { OP_REG, eSI_reg }
    279      1.1  christos #define RMeDI { OP_REG, eDI_reg }
    280      1.1  christos #define RMrAX { OP_REG, rAX_reg }
    281      1.1  christos #define RMrBX { OP_REG, rBX_reg }
    282      1.1  christos #define RMrCX { OP_REG, rCX_reg }
    283      1.1  christos #define RMrDX { OP_REG, rDX_reg }
    284      1.1  christos #define RMrSP { OP_REG, rSP_reg }
    285      1.1  christos #define RMrBP { OP_REG, rBP_reg }
    286      1.1  christos #define RMrSI { OP_REG, rSI_reg }
    287      1.1  christos #define RMrDI { OP_REG, rDI_reg }
    288      1.1  christos #define RMAL { OP_REG, al_reg }
    289      1.1  christos #define RMCL { OP_REG, cl_reg }
    290      1.1  christos #define RMDL { OP_REG, dl_reg }
    291      1.1  christos #define RMBL { OP_REG, bl_reg }
    292      1.1  christos #define RMAH { OP_REG, ah_reg }
    293      1.1  christos #define RMCH { OP_REG, ch_reg }
    294      1.1  christos #define RMDH { OP_REG, dh_reg }
    295      1.1  christos #define RMBH { OP_REG, bh_reg }
    296      1.1  christos #define RMAX { OP_REG, ax_reg }
    297      1.1  christos #define RMDX { OP_REG, dx_reg }
    298      1.1  christos 
    299      1.1  christos #define eAX { OP_IMREG, eAX_reg }
    300      1.1  christos #define eBX { OP_IMREG, eBX_reg }
    301      1.1  christos #define eCX { OP_IMREG, eCX_reg }
    302      1.1  christos #define eDX { OP_IMREG, eDX_reg }
    303      1.1  christos #define eSP { OP_IMREG, eSP_reg }
    304      1.1  christos #define eBP { OP_IMREG, eBP_reg }
    305      1.1  christos #define eSI { OP_IMREG, eSI_reg }
    306      1.1  christos #define eDI { OP_IMREG, eDI_reg }
    307      1.1  christos #define AL { OP_IMREG, al_reg }
    308      1.1  christos #define CL { OP_IMREG, cl_reg }
    309      1.1  christos #define DL { OP_IMREG, dl_reg }
    310      1.1  christos #define BL { OP_IMREG, bl_reg }
    311      1.1  christos #define AH { OP_IMREG, ah_reg }
    312      1.1  christos #define CH { OP_IMREG, ch_reg }
    313      1.1  christos #define DH { OP_IMREG, dh_reg }
    314      1.1  christos #define BH { OP_IMREG, bh_reg }
    315      1.1  christos #define AX { OP_IMREG, ax_reg }
    316      1.1  christos #define DX { OP_IMREG, dx_reg }
    317      1.1  christos #define zAX { OP_IMREG, z_mode_ax_reg }
    318      1.1  christos #define indirDX { OP_IMREG, indir_dx_reg }
    319      1.1  christos 
    320      1.1  christos #define Sw { OP_SEG, w_mode }
    321      1.1  christos #define Sv { OP_SEG, v_mode }
    322      1.1  christos #define Ap { OP_DIR, 0 }
    323      1.1  christos #define Ob { OP_OFF64, b_mode }
    324      1.1  christos #define Ov { OP_OFF64, v_mode }
    325      1.1  christos #define Xb { OP_DSreg, eSI_reg }
    326      1.1  christos #define Xv { OP_DSreg, eSI_reg }
    327      1.1  christos #define Xz { OP_DSreg, eSI_reg }
    328      1.1  christos #define Yb { OP_ESreg, eDI_reg }
    329      1.1  christos #define Yv { OP_ESreg, eDI_reg }
    330      1.1  christos #define DSBX { OP_DSreg, eBX_reg }
    331      1.1  christos 
    332      1.1  christos #define es { OP_REG, es_reg }
    333      1.1  christos #define ss { OP_REG, ss_reg }
    334      1.1  christos #define cs { OP_REG, cs_reg }
    335      1.1  christos #define ds { OP_REG, ds_reg }
    336      1.1  christos #define fs { OP_REG, fs_reg }
    337      1.1  christos #define gs { OP_REG, gs_reg }
    338      1.1  christos 
    339      1.1  christos #define MX { OP_MMX, 0 }
    340      1.1  christos #define XM { OP_XMM, 0 }
    341      1.1  christos #define XMScalar { OP_XMM, scalar_mode }
    342  1.1.1.2  christos #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
    343      1.1  christos #define XMM { OP_XMM, xmm_mode }
    344      1.1  christos #define EM { OP_EM, v_mode }
    345      1.1  christos #define EMS { OP_EM, v_swap_mode }
    346      1.1  christos #define EMd { OP_EM, d_mode }
    347      1.1  christos #define EMx { OP_EM, x_mode }
    348      1.1  christos #define EXw { OP_EX, w_mode }
    349      1.1  christos #define EXd { OP_EX, d_mode }
    350      1.1  christos #define EXdScalar { OP_EX, d_scalar_mode }
    351      1.1  christos #define EXdS { OP_EX, d_swap_mode }
    352      1.1  christos #define EXq { OP_EX, q_mode }
    353      1.1  christos #define EXqScalar { OP_EX, q_scalar_mode }
    354      1.1  christos #define EXqScalarS { OP_EX, q_scalar_swap_mode }
    355      1.1  christos #define EXqS { OP_EX, q_swap_mode }
    356      1.1  christos #define EXx { OP_EX, x_mode }
    357      1.1  christos #define EXxS { OP_EX, x_swap_mode }
    358      1.1  christos #define EXxmm { OP_EX, xmm_mode }
    359      1.1  christos #define EXxmmq { OP_EX, xmmq_mode }
    360  1.1.1.2  christos #define EXxmm_mb { OP_EX, xmm_mb_mode }
    361  1.1.1.2  christos #define EXxmm_mw { OP_EX, xmm_mw_mode }
    362  1.1.1.2  christos #define EXxmm_md { OP_EX, xmm_md_mode }
    363  1.1.1.2  christos #define EXxmm_mq { OP_EX, xmm_mq_mode }
    364  1.1.1.2  christos #define EXxmmdw { OP_EX, xmmdw_mode }
    365  1.1.1.2  christos #define EXxmmqd { OP_EX, xmmqd_mode }
    366      1.1  christos #define EXymmq { OP_EX, ymmq_mode }
    367      1.1  christos #define EXVexWdq { OP_EX, vex_w_dq_mode }
    368      1.1  christos #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
    369      1.1  christos #define MS { OP_MS, v_mode }
    370      1.1  christos #define XS { OP_XS, v_mode }
    371      1.1  christos #define EMCq { OP_EMC, q_mode }
    372      1.1  christos #define MXC { OP_MXC, 0 }
    373      1.1  christos #define OPSUF { OP_3DNowSuffix, 0 }
    374      1.1  christos #define CMP { CMP_Fixup, 0 }
    375      1.1  christos #define XMM0 { XMM_Fixup, 0 }
    376      1.1  christos #define FXSAVE { FXSAVE_Fixup, 0 }
    377      1.1  christos #define Vex_2src_1 { OP_Vex_2src_1, 0 }
    378      1.1  christos #define Vex_2src_2 { OP_Vex_2src_2, 0 }
    379      1.1  christos 
    380      1.1  christos #define Vex { OP_VEX, vex_mode }
    381      1.1  christos #define VexScalar { OP_VEX, vex_scalar_mode }
    382  1.1.1.2  christos #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
    383      1.1  christos #define Vex128 { OP_VEX, vex128_mode }
    384      1.1  christos #define Vex256 { OP_VEX, vex256_mode }
    385      1.1  christos #define VexGdq { OP_VEX, dq_mode }
    386      1.1  christos #define VexI4 { VEXI4_Fixup, 0}
    387      1.1  christos #define EXdVex { OP_EX_Vex, d_mode }
    388      1.1  christos #define EXdVexS { OP_EX_Vex, d_swap_mode }
    389      1.1  christos #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
    390      1.1  christos #define EXqVex { OP_EX_Vex, q_mode }
    391      1.1  christos #define EXqVexS { OP_EX_Vex, q_swap_mode }
    392      1.1  christos #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
    393      1.1  christos #define EXVexW { OP_EX_VexW, x_mode }
    394      1.1  christos #define EXdVexW { OP_EX_VexW, d_mode }
    395      1.1  christos #define EXqVexW { OP_EX_VexW, q_mode }
    396      1.1  christos #define EXVexImmW { OP_EX_VexImmW, x_mode }
    397      1.1  christos #define XMVex { OP_XMM_Vex, 0 }
    398      1.1  christos #define XMVexScalar { OP_XMM_Vex, scalar_mode }
    399      1.1  christos #define XMVexW { OP_XMM_VexW, 0 }
    400      1.1  christos #define XMVexI4 { OP_REG_VexI4, x_mode }
    401      1.1  christos #define PCLMUL { PCLMUL_Fixup, 0 }
    402      1.1  christos #define VZERO { VZERO_Fixup, 0 }
    403      1.1  christos #define VCMP { VCMP_Fixup, 0 }
    404      1.1  christos 
    405  1.1.1.2  christos #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
    406  1.1.1.2  christos #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
    407  1.1.1.2  christos 
    408      1.1  christos /* Used handle "rep" prefix for string instructions.  */
    409      1.1  christos #define Xbr { REP_Fixup, eSI_reg }
    410      1.1  christos #define Xvr { REP_Fixup, eSI_reg }
    411      1.1  christos #define Ybr { REP_Fixup, eDI_reg }
    412      1.1  christos #define Yvr { REP_Fixup, eDI_reg }
    413      1.1  christos #define Yzr { REP_Fixup, eDI_reg }
    414      1.1  christos #define indirDXr { REP_Fixup, indir_dx_reg }
    415      1.1  christos #define ALr { REP_Fixup, al_reg }
    416      1.1  christos #define eAXr { REP_Fixup, eAX_reg }
    417      1.1  christos 
    418  1.1.1.2  christos /* Used handle HLE prefix for lockable instructions.  */
    419  1.1.1.2  christos #define Ebh1 { HLE_Fixup1, b_mode }
    420  1.1.1.2  christos #define Evh1 { HLE_Fixup1, v_mode }
    421  1.1.1.2  christos #define Ebh2 { HLE_Fixup2, b_mode }
    422  1.1.1.2  christos #define Evh2 { HLE_Fixup2, v_mode }
    423  1.1.1.2  christos #define Ebh3 { HLE_Fixup3, b_mode }
    424  1.1.1.2  christos #define Evh3 { HLE_Fixup3, v_mode }
    425  1.1.1.2  christos 
    426      1.1  christos #define cond_jump_flag { NULL, cond_jump_mode }
    427      1.1  christos #define loop_jcxz_flag { NULL, loop_jcxz_mode }
    428      1.1  christos 
    429      1.1  christos /* bits in sizeflag */
    430      1.1  christos #define SUFFIX_ALWAYS 4
    431      1.1  christos #define AFLAG 2
    432      1.1  christos #define DFLAG 1
    433      1.1  christos 
    434      1.1  christos enum
    435      1.1  christos {
    436      1.1  christos   /* byte operand */
    437      1.1  christos   b_mode = 1,
    438      1.1  christos   /* byte operand with operand swapped */
    439      1.1  christos   b_swap_mode,
    440      1.1  christos   /* byte operand, sign extend like 'T' suffix */
    441      1.1  christos   b_T_mode,
    442      1.1  christos   /* operand size depends on prefixes */
    443      1.1  christos   v_mode,
    444      1.1  christos   /* operand size depends on prefixes with operand swapped */
    445      1.1  christos   v_swap_mode,
    446      1.1  christos   /* word operand */
    447      1.1  christos   w_mode,
    448      1.1  christos   /* double word operand  */
    449      1.1  christos   d_mode,
    450      1.1  christos   /* double word operand with operand swapped */
    451      1.1  christos   d_swap_mode,
    452      1.1  christos   /* quad word operand */
    453      1.1  christos   q_mode,
    454      1.1  christos   /* quad word operand with operand swapped */
    455      1.1  christos   q_swap_mode,
    456      1.1  christos   /* ten-byte operand */
    457      1.1  christos   t_mode,
    458      1.1  christos   /* 16-byte XMM or 32-byte YMM operand */
    459      1.1  christos   x_mode,
    460      1.1  christos   /* 16-byte XMM or 32-byte YMM operand with operand swapped */
    461      1.1  christos   x_swap_mode,
    462      1.1  christos   /* 16-byte XMM operand */
    463      1.1  christos   xmm_mode,
    464      1.1  christos   /* 16-byte XMM or quad word operand */
    465      1.1  christos   xmmq_mode,
    466  1.1.1.2  christos   /* XMM register or byte memory operand */
    467  1.1.1.2  christos   xmm_mb_mode,
    468  1.1.1.2  christos   /* XMM register or word memory operand */
    469  1.1.1.2  christos   xmm_mw_mode,
    470  1.1.1.2  christos   /* XMM register or double word memory operand */
    471  1.1.1.2  christos   xmm_md_mode,
    472  1.1.1.2  christos   /* XMM register or quad word memory operand */
    473  1.1.1.2  christos   xmm_mq_mode,
    474  1.1.1.2  christos   /* 16-byte XMM, word or double word operand  */
    475  1.1.1.2  christos   xmmdw_mode,
    476  1.1.1.2  christos   /* 16-byte XMM, double word or quad word operand */
    477  1.1.1.2  christos   xmmqd_mode,
    478      1.1  christos   /* 32-byte YMM or quad word operand */
    479      1.1  christos   ymmq_mode,
    480  1.1.1.2  christos   /* 32-byte YMM or 16-byte word operand */
    481  1.1.1.2  christos   ymmxmm_mode,
    482      1.1  christos   /* d_mode in 32bit, q_mode in 64bit mode.  */
    483      1.1  christos   m_mode,
    484      1.1  christos   /* pair of v_mode operands */
    485      1.1  christos   a_mode,
    486      1.1  christos   cond_jump_mode,
    487      1.1  christos   loop_jcxz_mode,
    488      1.1  christos   /* operand size depends on REX prefixes.  */
    489      1.1  christos   dq_mode,
    490      1.1  christos   /* registers like dq_mode, memory like w_mode.  */
    491      1.1  christos   dqw_mode,
    492      1.1  christos   /* 4- or 6-byte pointer operand */
    493      1.1  christos   f_mode,
    494      1.1  christos   const_1_mode,
    495      1.1  christos   /* v_mode for stack-related opcodes.  */
    496      1.1  christos   stack_v_mode,
    497      1.1  christos   /* non-quad operand size depends on prefixes */
    498      1.1  christos   z_mode,
    499      1.1  christos   /* 16-byte operand */
    500      1.1  christos   o_mode,
    501      1.1  christos   /* registers like dq_mode, memory like b_mode.  */
    502      1.1  christos   dqb_mode,
    503      1.1  christos   /* registers like dq_mode, memory like d_mode.  */
    504      1.1  christos   dqd_mode,
    505      1.1  christos   /* normal vex mode */
    506      1.1  christos   vex_mode,
    507      1.1  christos   /* 128bit vex mode */
    508      1.1  christos   vex128_mode,
    509      1.1  christos   /* 256bit vex mode */
    510      1.1  christos   vex256_mode,
    511      1.1  christos   /* operand size depends on the VEX.W bit.  */
    512      1.1  christos   vex_w_dq_mode,
    513      1.1  christos 
    514  1.1.1.2  christos   /* Similar to vex_w_dq_mode, with VSIB dword indices.  */
    515  1.1.1.2  christos   vex_vsib_d_w_dq_mode,
    516  1.1.1.2  christos   /* Similar to vex_w_dq_mode, with VSIB qword indices.  */
    517  1.1.1.2  christos   vex_vsib_q_w_dq_mode,
    518  1.1.1.2  christos 
    519      1.1  christos   /* scalar, ignore vector length.  */
    520      1.1  christos   scalar_mode,
    521      1.1  christos   /* like d_mode, ignore vector length.  */
    522      1.1  christos   d_scalar_mode,
    523      1.1  christos   /* like d_swap_mode, ignore vector length.  */
    524      1.1  christos   d_scalar_swap_mode,
    525      1.1  christos   /* like q_mode, ignore vector length.  */
    526      1.1  christos   q_scalar_mode,
    527      1.1  christos   /* like q_swap_mode, ignore vector length.  */
    528      1.1  christos   q_scalar_swap_mode,
    529      1.1  christos   /* like vex_mode, ignore vector length.  */
    530      1.1  christos   vex_scalar_mode,
    531      1.1  christos   /* like vex_w_dq_mode, ignore vector length.  */
    532      1.1  christos   vex_scalar_w_dq_mode,
    533      1.1  christos 
    534      1.1  christos   es_reg,
    535      1.1  christos   cs_reg,
    536      1.1  christos   ss_reg,
    537      1.1  christos   ds_reg,
    538      1.1  christos   fs_reg,
    539      1.1  christos   gs_reg,
    540      1.1  christos 
    541      1.1  christos   eAX_reg,
    542      1.1  christos   eCX_reg,
    543      1.1  christos   eDX_reg,
    544      1.1  christos   eBX_reg,
    545      1.1  christos   eSP_reg,
    546      1.1  christos   eBP_reg,
    547      1.1  christos   eSI_reg,
    548      1.1  christos   eDI_reg,
    549      1.1  christos 
    550      1.1  christos   al_reg,
    551      1.1  christos   cl_reg,
    552      1.1  christos   dl_reg,
    553      1.1  christos   bl_reg,
    554      1.1  christos   ah_reg,
    555      1.1  christos   ch_reg,
    556      1.1  christos   dh_reg,
    557      1.1  christos   bh_reg,
    558      1.1  christos 
    559      1.1  christos   ax_reg,
    560      1.1  christos   cx_reg,
    561      1.1  christos   dx_reg,
    562      1.1  christos   bx_reg,
    563      1.1  christos   sp_reg,
    564      1.1  christos   bp_reg,
    565      1.1  christos   si_reg,
    566      1.1  christos   di_reg,
    567      1.1  christos 
    568      1.1  christos   rAX_reg,
    569      1.1  christos   rCX_reg,
    570      1.1  christos   rDX_reg,
    571      1.1  christos   rBX_reg,
    572      1.1  christos   rSP_reg,
    573      1.1  christos   rBP_reg,
    574      1.1  christos   rSI_reg,
    575      1.1  christos   rDI_reg,
    576      1.1  christos 
    577      1.1  christos   z_mode_ax_reg,
    578      1.1  christos   indir_dx_reg
    579      1.1  christos };
    580      1.1  christos 
    581      1.1  christos enum
    582      1.1  christos {
    583      1.1  christos   FLOATCODE = 1,
    584      1.1  christos   USE_REG_TABLE,
    585      1.1  christos   USE_MOD_TABLE,
    586      1.1  christos   USE_RM_TABLE,
    587      1.1  christos   USE_PREFIX_TABLE,
    588      1.1  christos   USE_X86_64_TABLE,
    589      1.1  christos   USE_3BYTE_TABLE,
    590      1.1  christos   USE_XOP_8F_TABLE,
    591      1.1  christos   USE_VEX_C4_TABLE,
    592      1.1  christos   USE_VEX_C5_TABLE,
    593      1.1  christos   USE_VEX_LEN_TABLE,
    594      1.1  christos   USE_VEX_W_TABLE
    595      1.1  christos };
    596      1.1  christos 
    597      1.1  christos #define FLOAT			NULL, { { NULL, FLOATCODE } }
    598      1.1  christos 
    599      1.1  christos #define DIS386(T, I)		NULL, { { NULL, (T)}, { NULL,  (I) } }
    600      1.1  christos #define REG_TABLE(I)		DIS386 (USE_REG_TABLE, (I))
    601      1.1  christos #define MOD_TABLE(I)		DIS386 (USE_MOD_TABLE, (I))
    602      1.1  christos #define RM_TABLE(I)		DIS386 (USE_RM_TABLE, (I))
    603      1.1  christos #define PREFIX_TABLE(I)		DIS386 (USE_PREFIX_TABLE, (I))
    604      1.1  christos #define X86_64_TABLE(I)		DIS386 (USE_X86_64_TABLE, (I))
    605      1.1  christos #define THREE_BYTE_TABLE(I)	DIS386 (USE_3BYTE_TABLE, (I))
    606      1.1  christos #define XOP_8F_TABLE(I)		DIS386 (USE_XOP_8F_TABLE, (I))
    607      1.1  christos #define VEX_C4_TABLE(I)		DIS386 (USE_VEX_C4_TABLE, (I))
    608      1.1  christos #define VEX_C5_TABLE(I)		DIS386 (USE_VEX_C5_TABLE, (I))
    609      1.1  christos #define VEX_LEN_TABLE(I)	DIS386 (USE_VEX_LEN_TABLE, (I))
    610      1.1  christos #define VEX_W_TABLE(I)		DIS386 (USE_VEX_W_TABLE, (I))
    611      1.1  christos 
    612      1.1  christos enum
    613      1.1  christos {
    614      1.1  christos   REG_80 = 0,
    615      1.1  christos   REG_81,
    616      1.1  christos   REG_82,
    617      1.1  christos   REG_8F,
    618      1.1  christos   REG_C0,
    619      1.1  christos   REG_C1,
    620      1.1  christos   REG_C6,
    621      1.1  christos   REG_C7,
    622      1.1  christos   REG_D0,
    623      1.1  christos   REG_D1,
    624      1.1  christos   REG_D2,
    625      1.1  christos   REG_D3,
    626      1.1  christos   REG_F6,
    627      1.1  christos   REG_F7,
    628      1.1  christos   REG_FE,
    629      1.1  christos   REG_FF,
    630      1.1  christos   REG_0F00,
    631      1.1  christos   REG_0F01,
    632      1.1  christos   REG_0F0D,
    633      1.1  christos   REG_0F18,
    634      1.1  christos   REG_0F71,
    635      1.1  christos   REG_0F72,
    636      1.1  christos   REG_0F73,
    637      1.1  christos   REG_0FA6,
    638      1.1  christos   REG_0FA7,
    639      1.1  christos   REG_0FAE,
    640      1.1  christos   REG_0FBA,
    641      1.1  christos   REG_0FC7,
    642      1.1  christos   REG_VEX_0F71,
    643      1.1  christos   REG_VEX_0F72,
    644      1.1  christos   REG_VEX_0F73,
    645      1.1  christos   REG_VEX_0FAE,
    646      1.1  christos   REG_VEX_0F38F3,
    647      1.1  christos   REG_XOP_LWPCB,
    648      1.1  christos   REG_XOP_LWP,
    649      1.1  christos   REG_XOP_TBM_01,
    650      1.1  christos   REG_XOP_TBM_02
    651      1.1  christos };
    652      1.1  christos 
    653      1.1  christos enum
    654      1.1  christos {
    655      1.1  christos   MOD_8D = 0,
    656  1.1.1.2  christos   MOD_C6_REG_7,
    657  1.1.1.2  christos   MOD_C7_REG_7,
    658      1.1  christos   MOD_0F01_REG_0,
    659      1.1  christos   MOD_0F01_REG_1,
    660      1.1  christos   MOD_0F01_REG_2,
    661      1.1  christos   MOD_0F01_REG_3,
    662      1.1  christos   MOD_0F01_REG_7,
    663      1.1  christos   MOD_0F12_PREFIX_0,
    664      1.1  christos   MOD_0F13,
    665      1.1  christos   MOD_0F16_PREFIX_0,
    666      1.1  christos   MOD_0F17,
    667      1.1  christos   MOD_0F18_REG_0,
    668      1.1  christos   MOD_0F18_REG_1,
    669      1.1  christos   MOD_0F18_REG_2,
    670      1.1  christos   MOD_0F18_REG_3,
    671  1.1.1.2  christos   MOD_0F18_REG_4,
    672  1.1.1.2  christos   MOD_0F18_REG_5,
    673  1.1.1.2  christos   MOD_0F18_REG_6,
    674  1.1.1.2  christos   MOD_0F18_REG_7,
    675      1.1  christos   MOD_0F20,
    676      1.1  christos   MOD_0F21,
    677      1.1  christos   MOD_0F22,
    678      1.1  christos   MOD_0F23,
    679      1.1  christos   MOD_0F24,
    680      1.1  christos   MOD_0F26,
    681      1.1  christos   MOD_0F2B_PREFIX_0,
    682      1.1  christos   MOD_0F2B_PREFIX_1,
    683      1.1  christos   MOD_0F2B_PREFIX_2,
    684      1.1  christos   MOD_0F2B_PREFIX_3,
    685      1.1  christos   MOD_0F51,
    686      1.1  christos   MOD_0F71_REG_2,
    687      1.1  christos   MOD_0F71_REG_4,
    688      1.1  christos   MOD_0F71_REG_6,
    689      1.1  christos   MOD_0F72_REG_2,
    690      1.1  christos   MOD_0F72_REG_4,
    691      1.1  christos   MOD_0F72_REG_6,
    692      1.1  christos   MOD_0F73_REG_2,
    693      1.1  christos   MOD_0F73_REG_3,
    694      1.1  christos   MOD_0F73_REG_6,
    695      1.1  christos   MOD_0F73_REG_7,
    696      1.1  christos   MOD_0FAE_REG_0,
    697      1.1  christos   MOD_0FAE_REG_1,
    698      1.1  christos   MOD_0FAE_REG_2,
    699      1.1  christos   MOD_0FAE_REG_3,
    700      1.1  christos   MOD_0FAE_REG_4,
    701      1.1  christos   MOD_0FAE_REG_5,
    702      1.1  christos   MOD_0FAE_REG_6,
    703      1.1  christos   MOD_0FAE_REG_7,
    704      1.1  christos   MOD_0FB2,
    705      1.1  christos   MOD_0FB4,
    706      1.1  christos   MOD_0FB5,
    707      1.1  christos   MOD_0FC7_REG_6,
    708      1.1  christos   MOD_0FC7_REG_7,
    709      1.1  christos   MOD_0FD7,
    710      1.1  christos   MOD_0FE7_PREFIX_2,
    711      1.1  christos   MOD_0FF0_PREFIX_3,
    712      1.1  christos   MOD_0F382A_PREFIX_2,
    713      1.1  christos   MOD_62_32BIT,
    714      1.1  christos   MOD_C4_32BIT,
    715      1.1  christos   MOD_C5_32BIT,
    716      1.1  christos   MOD_VEX_0F12_PREFIX_0,
    717      1.1  christos   MOD_VEX_0F13,
    718      1.1  christos   MOD_VEX_0F16_PREFIX_0,
    719      1.1  christos   MOD_VEX_0F17,
    720      1.1  christos   MOD_VEX_0F2B,
    721      1.1  christos   MOD_VEX_0F50,
    722      1.1  christos   MOD_VEX_0F71_REG_2,
    723      1.1  christos   MOD_VEX_0F71_REG_4,
    724      1.1  christos   MOD_VEX_0F71_REG_6,
    725      1.1  christos   MOD_VEX_0F72_REG_2,
    726      1.1  christos   MOD_VEX_0F72_REG_4,
    727      1.1  christos   MOD_VEX_0F72_REG_6,
    728      1.1  christos   MOD_VEX_0F73_REG_2,
    729      1.1  christos   MOD_VEX_0F73_REG_3,
    730      1.1  christos   MOD_VEX_0F73_REG_6,
    731      1.1  christos   MOD_VEX_0F73_REG_7,
    732      1.1  christos   MOD_VEX_0FAE_REG_2,
    733      1.1  christos   MOD_VEX_0FAE_REG_3,
    734      1.1  christos   MOD_VEX_0FD7_PREFIX_2,
    735      1.1  christos   MOD_VEX_0FE7_PREFIX_2,
    736      1.1  christos   MOD_VEX_0FF0_PREFIX_3,
    737      1.1  christos   MOD_VEX_0F381A_PREFIX_2,
    738      1.1  christos   MOD_VEX_0F382A_PREFIX_2,
    739      1.1  christos   MOD_VEX_0F382C_PREFIX_2,
    740      1.1  christos   MOD_VEX_0F382D_PREFIX_2,
    741      1.1  christos   MOD_VEX_0F382E_PREFIX_2,
    742  1.1.1.2  christos   MOD_VEX_0F382F_PREFIX_2,
    743  1.1.1.2  christos   MOD_VEX_0F385A_PREFIX_2,
    744  1.1.1.2  christos   MOD_VEX_0F388C_PREFIX_2,
    745  1.1.1.2  christos   MOD_VEX_0F388E_PREFIX_2,
    746      1.1  christos };
    747      1.1  christos 
    748      1.1  christos enum
    749      1.1  christos {
    750  1.1.1.2  christos   RM_C6_REG_7 = 0,
    751  1.1.1.2  christos   RM_C7_REG_7,
    752  1.1.1.2  christos   RM_0F01_REG_0,
    753      1.1  christos   RM_0F01_REG_1,
    754      1.1  christos   RM_0F01_REG_2,
    755      1.1  christos   RM_0F01_REG_3,
    756      1.1  christos   RM_0F01_REG_7,
    757      1.1  christos   RM_0FAE_REG_5,
    758      1.1  christos   RM_0FAE_REG_6,
    759      1.1  christos   RM_0FAE_REG_7
    760      1.1  christos };
    761      1.1  christos 
    762      1.1  christos enum
    763      1.1  christos {
    764      1.1  christos   PREFIX_90 = 0,
    765      1.1  christos   PREFIX_0F10,
    766      1.1  christos   PREFIX_0F11,
    767      1.1  christos   PREFIX_0F12,
    768      1.1  christos   PREFIX_0F16,
    769      1.1  christos   PREFIX_0F2A,
    770      1.1  christos   PREFIX_0F2B,
    771      1.1  christos   PREFIX_0F2C,
    772      1.1  christos   PREFIX_0F2D,
    773      1.1  christos   PREFIX_0F2E,
    774      1.1  christos   PREFIX_0F2F,
    775      1.1  christos   PREFIX_0F51,
    776      1.1  christos   PREFIX_0F52,
    777      1.1  christos   PREFIX_0F53,
    778      1.1  christos   PREFIX_0F58,
    779      1.1  christos   PREFIX_0F59,
    780      1.1  christos   PREFIX_0F5A,
    781      1.1  christos   PREFIX_0F5B,
    782      1.1  christos   PREFIX_0F5C,
    783      1.1  christos   PREFIX_0F5D,
    784      1.1  christos   PREFIX_0F5E,
    785      1.1  christos   PREFIX_0F5F,
    786      1.1  christos   PREFIX_0F60,
    787      1.1  christos   PREFIX_0F61,
    788      1.1  christos   PREFIX_0F62,
    789      1.1  christos   PREFIX_0F6C,
    790      1.1  christos   PREFIX_0F6D,
    791      1.1  christos   PREFIX_0F6F,
    792      1.1  christos   PREFIX_0F70,
    793      1.1  christos   PREFIX_0F73_REG_3,
    794      1.1  christos   PREFIX_0F73_REG_7,
    795      1.1  christos   PREFIX_0F78,
    796      1.1  christos   PREFIX_0F79,
    797      1.1  christos   PREFIX_0F7C,
    798      1.1  christos   PREFIX_0F7D,
    799      1.1  christos   PREFIX_0F7E,
    800      1.1  christos   PREFIX_0F7F,
    801      1.1  christos   PREFIX_0FAE_REG_0,
    802      1.1  christos   PREFIX_0FAE_REG_1,
    803      1.1  christos   PREFIX_0FAE_REG_2,
    804      1.1  christos   PREFIX_0FAE_REG_3,
    805      1.1  christos   PREFIX_0FB8,
    806      1.1  christos   PREFIX_0FBC,
    807      1.1  christos   PREFIX_0FBD,
    808      1.1  christos   PREFIX_0FC2,
    809      1.1  christos   PREFIX_0FC3,
    810      1.1  christos   PREFIX_0FC7_REG_6,
    811      1.1  christos   PREFIX_0FD0,
    812      1.1  christos   PREFIX_0FD6,
    813      1.1  christos   PREFIX_0FE6,
    814      1.1  christos   PREFIX_0FE7,
    815      1.1  christos   PREFIX_0FF0,
    816      1.1  christos   PREFIX_0FF7,
    817      1.1  christos   PREFIX_0F3810,
    818      1.1  christos   PREFIX_0F3814,
    819      1.1  christos   PREFIX_0F3815,
    820      1.1  christos   PREFIX_0F3817,
    821      1.1  christos   PREFIX_0F3820,
    822      1.1  christos   PREFIX_0F3821,
    823      1.1  christos   PREFIX_0F3822,
    824      1.1  christos   PREFIX_0F3823,
    825      1.1  christos   PREFIX_0F3824,
    826      1.1  christos   PREFIX_0F3825,
    827      1.1  christos   PREFIX_0F3828,
    828      1.1  christos   PREFIX_0F3829,
    829      1.1  christos   PREFIX_0F382A,
    830      1.1  christos   PREFIX_0F382B,
    831      1.1  christos   PREFIX_0F3830,
    832      1.1  christos   PREFIX_0F3831,
    833      1.1  christos   PREFIX_0F3832,
    834      1.1  christos   PREFIX_0F3833,
    835      1.1  christos   PREFIX_0F3834,
    836      1.1  christos   PREFIX_0F3835,
    837      1.1  christos   PREFIX_0F3837,
    838      1.1  christos   PREFIX_0F3838,
    839      1.1  christos   PREFIX_0F3839,
    840      1.1  christos   PREFIX_0F383A,
    841      1.1  christos   PREFIX_0F383B,
    842      1.1  christos   PREFIX_0F383C,
    843      1.1  christos   PREFIX_0F383D,
    844      1.1  christos   PREFIX_0F383E,
    845      1.1  christos   PREFIX_0F383F,
    846      1.1  christos   PREFIX_0F3840,
    847      1.1  christos   PREFIX_0F3841,
    848      1.1  christos   PREFIX_0F3880,
    849      1.1  christos   PREFIX_0F3881,
    850  1.1.1.2  christos   PREFIX_0F3882,
    851      1.1  christos   PREFIX_0F38DB,
    852      1.1  christos   PREFIX_0F38DC,
    853      1.1  christos   PREFIX_0F38DD,
    854      1.1  christos   PREFIX_0F38DE,
    855      1.1  christos   PREFIX_0F38DF,
    856      1.1  christos   PREFIX_0F38F0,
    857      1.1  christos   PREFIX_0F38F1,
    858  1.1.1.2  christos   PREFIX_0F38F6,
    859      1.1  christos   PREFIX_0F3A08,
    860      1.1  christos   PREFIX_0F3A09,
    861      1.1  christos   PREFIX_0F3A0A,
    862      1.1  christos   PREFIX_0F3A0B,
    863      1.1  christos   PREFIX_0F3A0C,
    864      1.1  christos   PREFIX_0F3A0D,
    865      1.1  christos   PREFIX_0F3A0E,
    866      1.1  christos   PREFIX_0F3A14,
    867      1.1  christos   PREFIX_0F3A15,
    868      1.1  christos   PREFIX_0F3A16,
    869      1.1  christos   PREFIX_0F3A17,
    870      1.1  christos   PREFIX_0F3A20,
    871      1.1  christos   PREFIX_0F3A21,
    872      1.1  christos   PREFIX_0F3A22,
    873      1.1  christos   PREFIX_0F3A40,
    874      1.1  christos   PREFIX_0F3A41,
    875      1.1  christos   PREFIX_0F3A42,
    876      1.1  christos   PREFIX_0F3A44,
    877      1.1  christos   PREFIX_0F3A60,
    878      1.1  christos   PREFIX_0F3A61,
    879      1.1  christos   PREFIX_0F3A62,
    880      1.1  christos   PREFIX_0F3A63,
    881      1.1  christos   PREFIX_0F3ADF,
    882      1.1  christos   PREFIX_VEX_0F10,
    883      1.1  christos   PREFIX_VEX_0F11,
    884      1.1  christos   PREFIX_VEX_0F12,
    885      1.1  christos   PREFIX_VEX_0F16,
    886      1.1  christos   PREFIX_VEX_0F2A,
    887      1.1  christos   PREFIX_VEX_0F2C,
    888      1.1  christos   PREFIX_VEX_0F2D,
    889      1.1  christos   PREFIX_VEX_0F2E,
    890      1.1  christos   PREFIX_VEX_0F2F,
    891      1.1  christos   PREFIX_VEX_0F51,
    892      1.1  christos   PREFIX_VEX_0F52,
    893      1.1  christos   PREFIX_VEX_0F53,
    894      1.1  christos   PREFIX_VEX_0F58,
    895      1.1  christos   PREFIX_VEX_0F59,
    896      1.1  christos   PREFIX_VEX_0F5A,
    897      1.1  christos   PREFIX_VEX_0F5B,
    898      1.1  christos   PREFIX_VEX_0F5C,
    899      1.1  christos   PREFIX_VEX_0F5D,
    900      1.1  christos   PREFIX_VEX_0F5E,
    901      1.1  christos   PREFIX_VEX_0F5F,
    902      1.1  christos   PREFIX_VEX_0F60,
    903      1.1  christos   PREFIX_VEX_0F61,
    904      1.1  christos   PREFIX_VEX_0F62,
    905      1.1  christos   PREFIX_VEX_0F63,
    906      1.1  christos   PREFIX_VEX_0F64,
    907      1.1  christos   PREFIX_VEX_0F65,
    908      1.1  christos   PREFIX_VEX_0F66,
    909      1.1  christos   PREFIX_VEX_0F67,
    910      1.1  christos   PREFIX_VEX_0F68,
    911      1.1  christos   PREFIX_VEX_0F69,
    912      1.1  christos   PREFIX_VEX_0F6A,
    913      1.1  christos   PREFIX_VEX_0F6B,
    914      1.1  christos   PREFIX_VEX_0F6C,
    915      1.1  christos   PREFIX_VEX_0F6D,
    916      1.1  christos   PREFIX_VEX_0F6E,
    917      1.1  christos   PREFIX_VEX_0F6F,
    918      1.1  christos   PREFIX_VEX_0F70,
    919      1.1  christos   PREFIX_VEX_0F71_REG_2,
    920      1.1  christos   PREFIX_VEX_0F71_REG_4,
    921      1.1  christos   PREFIX_VEX_0F71_REG_6,
    922      1.1  christos   PREFIX_VEX_0F72_REG_2,
    923      1.1  christos   PREFIX_VEX_0F72_REG_4,
    924      1.1  christos   PREFIX_VEX_0F72_REG_6,
    925      1.1  christos   PREFIX_VEX_0F73_REG_2,
    926      1.1  christos   PREFIX_VEX_0F73_REG_3,
    927      1.1  christos   PREFIX_VEX_0F73_REG_6,
    928      1.1  christos   PREFIX_VEX_0F73_REG_7,
    929      1.1  christos   PREFIX_VEX_0F74,
    930      1.1  christos   PREFIX_VEX_0F75,
    931      1.1  christos   PREFIX_VEX_0F76,
    932      1.1  christos   PREFIX_VEX_0F77,
    933      1.1  christos   PREFIX_VEX_0F7C,
    934      1.1  christos   PREFIX_VEX_0F7D,
    935      1.1  christos   PREFIX_VEX_0F7E,
    936      1.1  christos   PREFIX_VEX_0F7F,
    937      1.1  christos   PREFIX_VEX_0FC2,
    938      1.1  christos   PREFIX_VEX_0FC4,
    939      1.1  christos   PREFIX_VEX_0FC5,
    940      1.1  christos   PREFIX_VEX_0FD0,
    941      1.1  christos   PREFIX_VEX_0FD1,
    942      1.1  christos   PREFIX_VEX_0FD2,
    943      1.1  christos   PREFIX_VEX_0FD3,
    944      1.1  christos   PREFIX_VEX_0FD4,
    945      1.1  christos   PREFIX_VEX_0FD5,
    946      1.1  christos   PREFIX_VEX_0FD6,
    947      1.1  christos   PREFIX_VEX_0FD7,
    948      1.1  christos   PREFIX_VEX_0FD8,
    949      1.1  christos   PREFIX_VEX_0FD9,
    950      1.1  christos   PREFIX_VEX_0FDA,
    951      1.1  christos   PREFIX_VEX_0FDB,
    952      1.1  christos   PREFIX_VEX_0FDC,
    953      1.1  christos   PREFIX_VEX_0FDD,
    954      1.1  christos   PREFIX_VEX_0FDE,
    955      1.1  christos   PREFIX_VEX_0FDF,
    956      1.1  christos   PREFIX_VEX_0FE0,
    957      1.1  christos   PREFIX_VEX_0FE1,
    958      1.1  christos   PREFIX_VEX_0FE2,
    959      1.1  christos   PREFIX_VEX_0FE3,
    960      1.1  christos   PREFIX_VEX_0FE4,
    961      1.1  christos   PREFIX_VEX_0FE5,
    962      1.1  christos   PREFIX_VEX_0FE6,
    963      1.1  christos   PREFIX_VEX_0FE7,
    964      1.1  christos   PREFIX_VEX_0FE8,
    965      1.1  christos   PREFIX_VEX_0FE9,
    966      1.1  christos   PREFIX_VEX_0FEA,
    967      1.1  christos   PREFIX_VEX_0FEB,
    968      1.1  christos   PREFIX_VEX_0FEC,
    969      1.1  christos   PREFIX_VEX_0FED,
    970      1.1  christos   PREFIX_VEX_0FEE,
    971      1.1  christos   PREFIX_VEX_0FEF,
    972      1.1  christos   PREFIX_VEX_0FF0,
    973      1.1  christos   PREFIX_VEX_0FF1,
    974      1.1  christos   PREFIX_VEX_0FF2,
    975      1.1  christos   PREFIX_VEX_0FF3,
    976      1.1  christos   PREFIX_VEX_0FF4,
    977      1.1  christos   PREFIX_VEX_0FF5,
    978      1.1  christos   PREFIX_VEX_0FF6,
    979      1.1  christos   PREFIX_VEX_0FF7,
    980      1.1  christos   PREFIX_VEX_0FF8,
    981      1.1  christos   PREFIX_VEX_0FF9,
    982      1.1  christos   PREFIX_VEX_0FFA,
    983      1.1  christos   PREFIX_VEX_0FFB,
    984      1.1  christos   PREFIX_VEX_0FFC,
    985      1.1  christos   PREFIX_VEX_0FFD,
    986      1.1  christos   PREFIX_VEX_0FFE,
    987      1.1  christos   PREFIX_VEX_0F3800,
    988      1.1  christos   PREFIX_VEX_0F3801,
    989      1.1  christos   PREFIX_VEX_0F3802,
    990      1.1  christos   PREFIX_VEX_0F3803,
    991      1.1  christos   PREFIX_VEX_0F3804,
    992      1.1  christos   PREFIX_VEX_0F3805,
    993      1.1  christos   PREFIX_VEX_0F3806,
    994      1.1  christos   PREFIX_VEX_0F3807,
    995      1.1  christos   PREFIX_VEX_0F3808,
    996      1.1  christos   PREFIX_VEX_0F3809,
    997      1.1  christos   PREFIX_VEX_0F380A,
    998      1.1  christos   PREFIX_VEX_0F380B,
    999      1.1  christos   PREFIX_VEX_0F380C,
   1000      1.1  christos   PREFIX_VEX_0F380D,
   1001      1.1  christos   PREFIX_VEX_0F380E,
   1002      1.1  christos   PREFIX_VEX_0F380F,
   1003      1.1  christos   PREFIX_VEX_0F3813,
   1004  1.1.1.2  christos   PREFIX_VEX_0F3816,
   1005      1.1  christos   PREFIX_VEX_0F3817,
   1006      1.1  christos   PREFIX_VEX_0F3818,
   1007      1.1  christos   PREFIX_VEX_0F3819,
   1008      1.1  christos   PREFIX_VEX_0F381A,
   1009      1.1  christos   PREFIX_VEX_0F381C,
   1010      1.1  christos   PREFIX_VEX_0F381D,
   1011      1.1  christos   PREFIX_VEX_0F381E,
   1012      1.1  christos   PREFIX_VEX_0F3820,
   1013      1.1  christos   PREFIX_VEX_0F3821,
   1014      1.1  christos   PREFIX_VEX_0F3822,
   1015      1.1  christos   PREFIX_VEX_0F3823,
   1016      1.1  christos   PREFIX_VEX_0F3824,
   1017      1.1  christos   PREFIX_VEX_0F3825,
   1018      1.1  christos   PREFIX_VEX_0F3828,
   1019      1.1  christos   PREFIX_VEX_0F3829,
   1020      1.1  christos   PREFIX_VEX_0F382A,
   1021      1.1  christos   PREFIX_VEX_0F382B,
   1022      1.1  christos   PREFIX_VEX_0F382C,
   1023      1.1  christos   PREFIX_VEX_0F382D,
   1024      1.1  christos   PREFIX_VEX_0F382E,
   1025      1.1  christos   PREFIX_VEX_0F382F,
   1026      1.1  christos   PREFIX_VEX_0F3830,
   1027      1.1  christos   PREFIX_VEX_0F3831,
   1028      1.1  christos   PREFIX_VEX_0F3832,
   1029      1.1  christos   PREFIX_VEX_0F3833,
   1030      1.1  christos   PREFIX_VEX_0F3834,
   1031      1.1  christos   PREFIX_VEX_0F3835,
   1032  1.1.1.2  christos   PREFIX_VEX_0F3836,
   1033      1.1  christos   PREFIX_VEX_0F3837,
   1034      1.1  christos   PREFIX_VEX_0F3838,
   1035      1.1  christos   PREFIX_VEX_0F3839,
   1036      1.1  christos   PREFIX_VEX_0F383A,
   1037      1.1  christos   PREFIX_VEX_0F383B,
   1038      1.1  christos   PREFIX_VEX_0F383C,
   1039      1.1  christos   PREFIX_VEX_0F383D,
   1040      1.1  christos   PREFIX_VEX_0F383E,
   1041      1.1  christos   PREFIX_VEX_0F383F,
   1042      1.1  christos   PREFIX_VEX_0F3840,
   1043      1.1  christos   PREFIX_VEX_0F3841,
   1044  1.1.1.2  christos   PREFIX_VEX_0F3845,
   1045  1.1.1.2  christos   PREFIX_VEX_0F3846,
   1046  1.1.1.2  christos   PREFIX_VEX_0F3847,
   1047  1.1.1.2  christos   PREFIX_VEX_0F3858,
   1048  1.1.1.2  christos   PREFIX_VEX_0F3859,
   1049  1.1.1.2  christos   PREFIX_VEX_0F385A,
   1050  1.1.1.2  christos   PREFIX_VEX_0F3878,
   1051  1.1.1.2  christos   PREFIX_VEX_0F3879,
   1052  1.1.1.2  christos   PREFIX_VEX_0F388C,
   1053  1.1.1.2  christos   PREFIX_VEX_0F388E,
   1054  1.1.1.2  christos   PREFIX_VEX_0F3890,
   1055  1.1.1.2  christos   PREFIX_VEX_0F3891,
   1056  1.1.1.2  christos   PREFIX_VEX_0F3892,
   1057  1.1.1.2  christos   PREFIX_VEX_0F3893,
   1058      1.1  christos   PREFIX_VEX_0F3896,
   1059      1.1  christos   PREFIX_VEX_0F3897,
   1060      1.1  christos   PREFIX_VEX_0F3898,
   1061      1.1  christos   PREFIX_VEX_0F3899,
   1062      1.1  christos   PREFIX_VEX_0F389A,
   1063      1.1  christos   PREFIX_VEX_0F389B,
   1064      1.1  christos   PREFIX_VEX_0F389C,
   1065      1.1  christos   PREFIX_VEX_0F389D,
   1066      1.1  christos   PREFIX_VEX_0F389E,
   1067      1.1  christos   PREFIX_VEX_0F389F,
   1068      1.1  christos   PREFIX_VEX_0F38A6,
   1069      1.1  christos   PREFIX_VEX_0F38A7,
   1070      1.1  christos   PREFIX_VEX_0F38A8,
   1071      1.1  christos   PREFIX_VEX_0F38A9,
   1072      1.1  christos   PREFIX_VEX_0F38AA,
   1073      1.1  christos   PREFIX_VEX_0F38AB,
   1074      1.1  christos   PREFIX_VEX_0F38AC,
   1075      1.1  christos   PREFIX_VEX_0F38AD,
   1076      1.1  christos   PREFIX_VEX_0F38AE,
   1077      1.1  christos   PREFIX_VEX_0F38AF,
   1078      1.1  christos   PREFIX_VEX_0F38B6,
   1079      1.1  christos   PREFIX_VEX_0F38B7,
   1080      1.1  christos   PREFIX_VEX_0F38B8,
   1081      1.1  christos   PREFIX_VEX_0F38B9,
   1082      1.1  christos   PREFIX_VEX_0F38BA,
   1083      1.1  christos   PREFIX_VEX_0F38BB,
   1084      1.1  christos   PREFIX_VEX_0F38BC,
   1085      1.1  christos   PREFIX_VEX_0F38BD,
   1086      1.1  christos   PREFIX_VEX_0F38BE,
   1087      1.1  christos   PREFIX_VEX_0F38BF,
   1088      1.1  christos   PREFIX_VEX_0F38DB,
   1089      1.1  christos   PREFIX_VEX_0F38DC,
   1090      1.1  christos   PREFIX_VEX_0F38DD,
   1091      1.1  christos   PREFIX_VEX_0F38DE,
   1092      1.1  christos   PREFIX_VEX_0F38DF,
   1093      1.1  christos   PREFIX_VEX_0F38F2,
   1094      1.1  christos   PREFIX_VEX_0F38F3_REG_1,
   1095      1.1  christos   PREFIX_VEX_0F38F3_REG_2,
   1096      1.1  christos   PREFIX_VEX_0F38F3_REG_3,
   1097  1.1.1.2  christos   PREFIX_VEX_0F38F5,
   1098  1.1.1.2  christos   PREFIX_VEX_0F38F6,
   1099      1.1  christos   PREFIX_VEX_0F38F7,
   1100  1.1.1.2  christos   PREFIX_VEX_0F3A00,
   1101  1.1.1.2  christos   PREFIX_VEX_0F3A01,
   1102  1.1.1.2  christos   PREFIX_VEX_0F3A02,
   1103      1.1  christos   PREFIX_VEX_0F3A04,
   1104      1.1  christos   PREFIX_VEX_0F3A05,
   1105      1.1  christos   PREFIX_VEX_0F3A06,
   1106      1.1  christos   PREFIX_VEX_0F3A08,
   1107      1.1  christos   PREFIX_VEX_0F3A09,
   1108      1.1  christos   PREFIX_VEX_0F3A0A,
   1109      1.1  christos   PREFIX_VEX_0F3A0B,
   1110      1.1  christos   PREFIX_VEX_0F3A0C,
   1111      1.1  christos   PREFIX_VEX_0F3A0D,
   1112      1.1  christos   PREFIX_VEX_0F3A0E,
   1113      1.1  christos   PREFIX_VEX_0F3A0F,
   1114      1.1  christos   PREFIX_VEX_0F3A14,
   1115      1.1  christos   PREFIX_VEX_0F3A15,
   1116      1.1  christos   PREFIX_VEX_0F3A16,
   1117      1.1  christos   PREFIX_VEX_0F3A17,
   1118      1.1  christos   PREFIX_VEX_0F3A18,
   1119      1.1  christos   PREFIX_VEX_0F3A19,
   1120      1.1  christos   PREFIX_VEX_0F3A1D,
   1121      1.1  christos   PREFIX_VEX_0F3A20,
   1122      1.1  christos   PREFIX_VEX_0F3A21,
   1123      1.1  christos   PREFIX_VEX_0F3A22,
   1124  1.1.1.2  christos   PREFIX_VEX_0F3A38,
   1125  1.1.1.2  christos   PREFIX_VEX_0F3A39,
   1126      1.1  christos   PREFIX_VEX_0F3A40,
   1127      1.1  christos   PREFIX_VEX_0F3A41,
   1128      1.1  christos   PREFIX_VEX_0F3A42,
   1129      1.1  christos   PREFIX_VEX_0F3A44,
   1130  1.1.1.2  christos   PREFIX_VEX_0F3A46,
   1131      1.1  christos   PREFIX_VEX_0F3A48,
   1132      1.1  christos   PREFIX_VEX_0F3A49,
   1133      1.1  christos   PREFIX_VEX_0F3A4A,
   1134      1.1  christos   PREFIX_VEX_0F3A4B,
   1135      1.1  christos   PREFIX_VEX_0F3A4C,
   1136      1.1  christos   PREFIX_VEX_0F3A5C,
   1137      1.1  christos   PREFIX_VEX_0F3A5D,
   1138      1.1  christos   PREFIX_VEX_0F3A5E,
   1139      1.1  christos   PREFIX_VEX_0F3A5F,
   1140      1.1  christos   PREFIX_VEX_0F3A60,
   1141      1.1  christos   PREFIX_VEX_0F3A61,
   1142      1.1  christos   PREFIX_VEX_0F3A62,
   1143      1.1  christos   PREFIX_VEX_0F3A63,
   1144      1.1  christos   PREFIX_VEX_0F3A68,
   1145      1.1  christos   PREFIX_VEX_0F3A69,
   1146      1.1  christos   PREFIX_VEX_0F3A6A,
   1147      1.1  christos   PREFIX_VEX_0F3A6B,
   1148      1.1  christos   PREFIX_VEX_0F3A6C,
   1149      1.1  christos   PREFIX_VEX_0F3A6D,
   1150      1.1  christos   PREFIX_VEX_0F3A6E,
   1151      1.1  christos   PREFIX_VEX_0F3A6F,
   1152      1.1  christos   PREFIX_VEX_0F3A78,
   1153      1.1  christos   PREFIX_VEX_0F3A79,
   1154      1.1  christos   PREFIX_VEX_0F3A7A,
   1155      1.1  christos   PREFIX_VEX_0F3A7B,
   1156      1.1  christos   PREFIX_VEX_0F3A7C,
   1157      1.1  christos   PREFIX_VEX_0F3A7D,
   1158      1.1  christos   PREFIX_VEX_0F3A7E,
   1159      1.1  christos   PREFIX_VEX_0F3A7F,
   1160  1.1.1.2  christos   PREFIX_VEX_0F3ADF,
   1161  1.1.1.2  christos   PREFIX_VEX_0F3AF0
   1162      1.1  christos };
   1163      1.1  christos 
   1164      1.1  christos enum
   1165      1.1  christos {
   1166      1.1  christos   X86_64_06 = 0,
   1167      1.1  christos   X86_64_07,
   1168      1.1  christos   X86_64_0D,
   1169      1.1  christos   X86_64_16,
   1170      1.1  christos   X86_64_17,
   1171      1.1  christos   X86_64_1E,
   1172      1.1  christos   X86_64_1F,
   1173      1.1  christos   X86_64_27,
   1174      1.1  christos   X86_64_2F,
   1175      1.1  christos   X86_64_37,
   1176      1.1  christos   X86_64_3F,
   1177      1.1  christos   X86_64_60,
   1178      1.1  christos   X86_64_61,
   1179      1.1  christos   X86_64_62,
   1180      1.1  christos   X86_64_63,
   1181      1.1  christos   X86_64_6D,
   1182      1.1  christos   X86_64_6F,
   1183      1.1  christos   X86_64_9A,
   1184      1.1  christos   X86_64_C4,
   1185      1.1  christos   X86_64_C5,
   1186      1.1  christos   X86_64_CE,
   1187      1.1  christos   X86_64_D4,
   1188      1.1  christos   X86_64_D5,
   1189      1.1  christos   X86_64_EA,
   1190      1.1  christos   X86_64_0F01_REG_0,
   1191      1.1  christos   X86_64_0F01_REG_1,
   1192      1.1  christos   X86_64_0F01_REG_2,
   1193      1.1  christos   X86_64_0F01_REG_3
   1194      1.1  christos };
   1195      1.1  christos 
   1196      1.1  christos enum
   1197      1.1  christos {
   1198      1.1  christos   THREE_BYTE_0F38 = 0,
   1199      1.1  christos   THREE_BYTE_0F3A,
   1200      1.1  christos   THREE_BYTE_0F7A
   1201      1.1  christos };
   1202      1.1  christos 
   1203      1.1  christos enum
   1204      1.1  christos {
   1205      1.1  christos   XOP_08 = 0,
   1206      1.1  christos   XOP_09,
   1207      1.1  christos   XOP_0A
   1208      1.1  christos };
   1209      1.1  christos 
   1210      1.1  christos enum
   1211      1.1  christos {
   1212      1.1  christos   VEX_0F = 0,
   1213      1.1  christos   VEX_0F38,
   1214      1.1  christos   VEX_0F3A
   1215      1.1  christos };
   1216      1.1  christos 
   1217      1.1  christos enum
   1218      1.1  christos {
   1219      1.1  christos   VEX_LEN_0F10_P_1 = 0,
   1220      1.1  christos   VEX_LEN_0F10_P_3,
   1221      1.1  christos   VEX_LEN_0F11_P_1,
   1222      1.1  christos   VEX_LEN_0F11_P_3,
   1223      1.1  christos   VEX_LEN_0F12_P_0_M_0,
   1224      1.1  christos   VEX_LEN_0F12_P_0_M_1,
   1225      1.1  christos   VEX_LEN_0F12_P_2,
   1226      1.1  christos   VEX_LEN_0F13_M_0,
   1227      1.1  christos   VEX_LEN_0F16_P_0_M_0,
   1228      1.1  christos   VEX_LEN_0F16_P_0_M_1,
   1229      1.1  christos   VEX_LEN_0F16_P_2,
   1230      1.1  christos   VEX_LEN_0F17_M_0,
   1231      1.1  christos   VEX_LEN_0F2A_P_1,
   1232      1.1  christos   VEX_LEN_0F2A_P_3,
   1233      1.1  christos   VEX_LEN_0F2C_P_1,
   1234      1.1  christos   VEX_LEN_0F2C_P_3,
   1235      1.1  christos   VEX_LEN_0F2D_P_1,
   1236      1.1  christos   VEX_LEN_0F2D_P_3,
   1237      1.1  christos   VEX_LEN_0F2E_P_0,
   1238      1.1  christos   VEX_LEN_0F2E_P_2,
   1239      1.1  christos   VEX_LEN_0F2F_P_0,
   1240      1.1  christos   VEX_LEN_0F2F_P_2,
   1241      1.1  christos   VEX_LEN_0F51_P_1,
   1242      1.1  christos   VEX_LEN_0F51_P_3,
   1243      1.1  christos   VEX_LEN_0F52_P_1,
   1244      1.1  christos   VEX_LEN_0F53_P_1,
   1245      1.1  christos   VEX_LEN_0F58_P_1,
   1246      1.1  christos   VEX_LEN_0F58_P_3,
   1247      1.1  christos   VEX_LEN_0F59_P_1,
   1248      1.1  christos   VEX_LEN_0F59_P_3,
   1249      1.1  christos   VEX_LEN_0F5A_P_1,
   1250      1.1  christos   VEX_LEN_0F5A_P_3,
   1251      1.1  christos   VEX_LEN_0F5C_P_1,
   1252      1.1  christos   VEX_LEN_0F5C_P_3,
   1253      1.1  christos   VEX_LEN_0F5D_P_1,
   1254      1.1  christos   VEX_LEN_0F5D_P_3,
   1255      1.1  christos   VEX_LEN_0F5E_P_1,
   1256      1.1  christos   VEX_LEN_0F5E_P_3,
   1257      1.1  christos   VEX_LEN_0F5F_P_1,
   1258      1.1  christos   VEX_LEN_0F5F_P_3,
   1259      1.1  christos   VEX_LEN_0F6E_P_2,
   1260      1.1  christos   VEX_LEN_0F7E_P_1,
   1261      1.1  christos   VEX_LEN_0F7E_P_2,
   1262      1.1  christos   VEX_LEN_0FAE_R_2_M_0,
   1263      1.1  christos   VEX_LEN_0FAE_R_3_M_0,
   1264      1.1  christos   VEX_LEN_0FC2_P_1,
   1265      1.1  christos   VEX_LEN_0FC2_P_3,
   1266      1.1  christos   VEX_LEN_0FC4_P_2,
   1267      1.1  christos   VEX_LEN_0FC5_P_2,
   1268      1.1  christos   VEX_LEN_0FD6_P_2,
   1269      1.1  christos   VEX_LEN_0FF7_P_2,
   1270  1.1.1.2  christos   VEX_LEN_0F3816_P_2,
   1271  1.1.1.2  christos   VEX_LEN_0F3819_P_2,
   1272      1.1  christos   VEX_LEN_0F381A_P_2_M_0,
   1273  1.1.1.2  christos   VEX_LEN_0F3836_P_2,
   1274      1.1  christos   VEX_LEN_0F3841_P_2,
   1275  1.1.1.2  christos   VEX_LEN_0F385A_P_2_M_0,
   1276      1.1  christos   VEX_LEN_0F38DB_P_2,
   1277      1.1  christos   VEX_LEN_0F38DC_P_2,
   1278      1.1  christos   VEX_LEN_0F38DD_P_2,
   1279      1.1  christos   VEX_LEN_0F38DE_P_2,
   1280      1.1  christos   VEX_LEN_0F38DF_P_2,
   1281      1.1  christos   VEX_LEN_0F38F2_P_0,
   1282      1.1  christos   VEX_LEN_0F38F3_R_1_P_0,
   1283      1.1  christos   VEX_LEN_0F38F3_R_2_P_0,
   1284      1.1  christos   VEX_LEN_0F38F3_R_3_P_0,
   1285  1.1.1.2  christos   VEX_LEN_0F38F5_P_0,
   1286  1.1.1.2  christos   VEX_LEN_0F38F5_P_1,
   1287  1.1.1.2  christos   VEX_LEN_0F38F5_P_3,
   1288  1.1.1.2  christos   VEX_LEN_0F38F6_P_3,
   1289      1.1  christos   VEX_LEN_0F38F7_P_0,
   1290  1.1.1.2  christos   VEX_LEN_0F38F7_P_1,
   1291  1.1.1.2  christos   VEX_LEN_0F38F7_P_2,
   1292  1.1.1.2  christos   VEX_LEN_0F38F7_P_3,
   1293  1.1.1.2  christos   VEX_LEN_0F3A00_P_2,
   1294  1.1.1.2  christos   VEX_LEN_0F3A01_P_2,
   1295      1.1  christos   VEX_LEN_0F3A06_P_2,
   1296      1.1  christos   VEX_LEN_0F3A0A_P_2,
   1297      1.1  christos   VEX_LEN_0F3A0B_P_2,
   1298      1.1  christos   VEX_LEN_0F3A14_P_2,
   1299      1.1  christos   VEX_LEN_0F3A15_P_2,
   1300      1.1  christos   VEX_LEN_0F3A16_P_2,
   1301      1.1  christos   VEX_LEN_0F3A17_P_2,
   1302      1.1  christos   VEX_LEN_0F3A18_P_2,
   1303      1.1  christos   VEX_LEN_0F3A19_P_2,
   1304      1.1  christos   VEX_LEN_0F3A20_P_2,
   1305      1.1  christos   VEX_LEN_0F3A21_P_2,
   1306      1.1  christos   VEX_LEN_0F3A22_P_2,
   1307  1.1.1.2  christos   VEX_LEN_0F3A38_P_2,
   1308  1.1.1.2  christos   VEX_LEN_0F3A39_P_2,
   1309      1.1  christos   VEX_LEN_0F3A41_P_2,
   1310      1.1  christos   VEX_LEN_0F3A44_P_2,
   1311  1.1.1.2  christos   VEX_LEN_0F3A46_P_2,
   1312      1.1  christos   VEX_LEN_0F3A60_P_2,
   1313      1.1  christos   VEX_LEN_0F3A61_P_2,
   1314      1.1  christos   VEX_LEN_0F3A62_P_2,
   1315      1.1  christos   VEX_LEN_0F3A63_P_2,
   1316      1.1  christos   VEX_LEN_0F3A6A_P_2,
   1317      1.1  christos   VEX_LEN_0F3A6B_P_2,
   1318      1.1  christos   VEX_LEN_0F3A6E_P_2,
   1319      1.1  christos   VEX_LEN_0F3A6F_P_2,
   1320      1.1  christos   VEX_LEN_0F3A7A_P_2,
   1321      1.1  christos   VEX_LEN_0F3A7B_P_2,
   1322      1.1  christos   VEX_LEN_0F3A7E_P_2,
   1323      1.1  christos   VEX_LEN_0F3A7F_P_2,
   1324      1.1  christos   VEX_LEN_0F3ADF_P_2,
   1325  1.1.1.2  christos   VEX_LEN_0F3AF0_P_3,
   1326  1.1.1.2  christos   VEX_LEN_0FXOP_08_CC,
   1327  1.1.1.2  christos   VEX_LEN_0FXOP_08_CD,
   1328  1.1.1.2  christos   VEX_LEN_0FXOP_08_CE,
   1329  1.1.1.2  christos   VEX_LEN_0FXOP_08_CF,
   1330  1.1.1.2  christos   VEX_LEN_0FXOP_08_EC,
   1331  1.1.1.2  christos   VEX_LEN_0FXOP_08_ED,
   1332  1.1.1.2  christos   VEX_LEN_0FXOP_08_EE,
   1333  1.1.1.2  christos   VEX_LEN_0FXOP_08_EF,
   1334      1.1  christos   VEX_LEN_0FXOP_09_80,
   1335      1.1  christos   VEX_LEN_0FXOP_09_81
   1336      1.1  christos };
   1337      1.1  christos 
   1338      1.1  christos enum
   1339      1.1  christos {
   1340      1.1  christos   VEX_W_0F10_P_0 = 0,
   1341      1.1  christos   VEX_W_0F10_P_1,
   1342      1.1  christos   VEX_W_0F10_P_2,
   1343      1.1  christos   VEX_W_0F10_P_3,
   1344      1.1  christos   VEX_W_0F11_P_0,
   1345      1.1  christos   VEX_W_0F11_P_1,
   1346      1.1  christos   VEX_W_0F11_P_2,
   1347      1.1  christos   VEX_W_0F11_P_3,
   1348      1.1  christos   VEX_W_0F12_P_0_M_0,
   1349      1.1  christos   VEX_W_0F12_P_0_M_1,
   1350      1.1  christos   VEX_W_0F12_P_1,
   1351      1.1  christos   VEX_W_0F12_P_2,
   1352      1.1  christos   VEX_W_0F12_P_3,
   1353      1.1  christos   VEX_W_0F13_M_0,
   1354      1.1  christos   VEX_W_0F14,
   1355      1.1  christos   VEX_W_0F15,
   1356      1.1  christos   VEX_W_0F16_P_0_M_0,
   1357      1.1  christos   VEX_W_0F16_P_0_M_1,
   1358      1.1  christos   VEX_W_0F16_P_1,
   1359      1.1  christos   VEX_W_0F16_P_2,
   1360      1.1  christos   VEX_W_0F17_M_0,
   1361      1.1  christos   VEX_W_0F28,
   1362      1.1  christos   VEX_W_0F29,
   1363      1.1  christos   VEX_W_0F2B_M_0,
   1364      1.1  christos   VEX_W_0F2E_P_0,
   1365      1.1  christos   VEX_W_0F2E_P_2,
   1366      1.1  christos   VEX_W_0F2F_P_0,
   1367      1.1  christos   VEX_W_0F2F_P_2,
   1368      1.1  christos   VEX_W_0F50_M_0,
   1369      1.1  christos   VEX_W_0F51_P_0,
   1370      1.1  christos   VEX_W_0F51_P_1,
   1371      1.1  christos   VEX_W_0F51_P_2,
   1372      1.1  christos   VEX_W_0F51_P_3,
   1373      1.1  christos   VEX_W_0F52_P_0,
   1374      1.1  christos   VEX_W_0F52_P_1,
   1375      1.1  christos   VEX_W_0F53_P_0,
   1376      1.1  christos   VEX_W_0F53_P_1,
   1377      1.1  christos   VEX_W_0F58_P_0,
   1378      1.1  christos   VEX_W_0F58_P_1,
   1379      1.1  christos   VEX_W_0F58_P_2,
   1380      1.1  christos   VEX_W_0F58_P_3,
   1381      1.1  christos   VEX_W_0F59_P_0,
   1382      1.1  christos   VEX_W_0F59_P_1,
   1383      1.1  christos   VEX_W_0F59_P_2,
   1384      1.1  christos   VEX_W_0F59_P_3,
   1385      1.1  christos   VEX_W_0F5A_P_0,
   1386      1.1  christos   VEX_W_0F5A_P_1,
   1387      1.1  christos   VEX_W_0F5A_P_3,
   1388      1.1  christos   VEX_W_0F5B_P_0,
   1389      1.1  christos   VEX_W_0F5B_P_1,
   1390      1.1  christos   VEX_W_0F5B_P_2,
   1391      1.1  christos   VEX_W_0F5C_P_0,
   1392      1.1  christos   VEX_W_0F5C_P_1,
   1393      1.1  christos   VEX_W_0F5C_P_2,
   1394      1.1  christos   VEX_W_0F5C_P_3,
   1395      1.1  christos   VEX_W_0F5D_P_0,
   1396      1.1  christos   VEX_W_0F5D_P_1,
   1397      1.1  christos   VEX_W_0F5D_P_2,
   1398      1.1  christos   VEX_W_0F5D_P_3,
   1399      1.1  christos   VEX_W_0F5E_P_0,
   1400      1.1  christos   VEX_W_0F5E_P_1,
   1401      1.1  christos   VEX_W_0F5E_P_2,
   1402      1.1  christos   VEX_W_0F5E_P_3,
   1403      1.1  christos   VEX_W_0F5F_P_0,
   1404      1.1  christos   VEX_W_0F5F_P_1,
   1405      1.1  christos   VEX_W_0F5F_P_2,
   1406      1.1  christos   VEX_W_0F5F_P_3,
   1407      1.1  christos   VEX_W_0F60_P_2,
   1408      1.1  christos   VEX_W_0F61_P_2,
   1409      1.1  christos   VEX_W_0F62_P_2,
   1410      1.1  christos   VEX_W_0F63_P_2,
   1411      1.1  christos   VEX_W_0F64_P_2,
   1412      1.1  christos   VEX_W_0F65_P_2,
   1413      1.1  christos   VEX_W_0F66_P_2,
   1414      1.1  christos   VEX_W_0F67_P_2,
   1415      1.1  christos   VEX_W_0F68_P_2,
   1416      1.1  christos   VEX_W_0F69_P_2,
   1417      1.1  christos   VEX_W_0F6A_P_2,
   1418      1.1  christos   VEX_W_0F6B_P_2,
   1419      1.1  christos   VEX_W_0F6C_P_2,
   1420      1.1  christos   VEX_W_0F6D_P_2,
   1421      1.1  christos   VEX_W_0F6F_P_1,
   1422      1.1  christos   VEX_W_0F6F_P_2,
   1423      1.1  christos   VEX_W_0F70_P_1,
   1424      1.1  christos   VEX_W_0F70_P_2,
   1425      1.1  christos   VEX_W_0F70_P_3,
   1426      1.1  christos   VEX_W_0F71_R_2_P_2,
   1427      1.1  christos   VEX_W_0F71_R_4_P_2,
   1428      1.1  christos   VEX_W_0F71_R_6_P_2,
   1429      1.1  christos   VEX_W_0F72_R_2_P_2,
   1430      1.1  christos   VEX_W_0F72_R_4_P_2,
   1431      1.1  christos   VEX_W_0F72_R_6_P_2,
   1432      1.1  christos   VEX_W_0F73_R_2_P_2,
   1433      1.1  christos   VEX_W_0F73_R_3_P_2,
   1434      1.1  christos   VEX_W_0F73_R_6_P_2,
   1435      1.1  christos   VEX_W_0F73_R_7_P_2,
   1436      1.1  christos   VEX_W_0F74_P_2,
   1437      1.1  christos   VEX_W_0F75_P_2,
   1438      1.1  christos   VEX_W_0F76_P_2,
   1439      1.1  christos   VEX_W_0F77_P_0,
   1440      1.1  christos   VEX_W_0F7C_P_2,
   1441      1.1  christos   VEX_W_0F7C_P_3,
   1442      1.1  christos   VEX_W_0F7D_P_2,
   1443      1.1  christos   VEX_W_0F7D_P_3,
   1444      1.1  christos   VEX_W_0F7E_P_1,
   1445      1.1  christos   VEX_W_0F7F_P_1,
   1446      1.1  christos   VEX_W_0F7F_P_2,
   1447      1.1  christos   VEX_W_0FAE_R_2_M_0,
   1448      1.1  christos   VEX_W_0FAE_R_3_M_0,
   1449      1.1  christos   VEX_W_0FC2_P_0,
   1450      1.1  christos   VEX_W_0FC2_P_1,
   1451      1.1  christos   VEX_W_0FC2_P_2,
   1452      1.1  christos   VEX_W_0FC2_P_3,
   1453      1.1  christos   VEX_W_0FC4_P_2,
   1454      1.1  christos   VEX_W_0FC5_P_2,
   1455      1.1  christos   VEX_W_0FD0_P_2,
   1456      1.1  christos   VEX_W_0FD0_P_3,
   1457      1.1  christos   VEX_W_0FD1_P_2,
   1458      1.1  christos   VEX_W_0FD2_P_2,
   1459      1.1  christos   VEX_W_0FD3_P_2,
   1460      1.1  christos   VEX_W_0FD4_P_2,
   1461      1.1  christos   VEX_W_0FD5_P_2,
   1462      1.1  christos   VEX_W_0FD6_P_2,
   1463      1.1  christos   VEX_W_0FD7_P_2_M_1,
   1464      1.1  christos   VEX_W_0FD8_P_2,
   1465      1.1  christos   VEX_W_0FD9_P_2,
   1466      1.1  christos   VEX_W_0FDA_P_2,
   1467      1.1  christos   VEX_W_0FDB_P_2,
   1468      1.1  christos   VEX_W_0FDC_P_2,
   1469      1.1  christos   VEX_W_0FDD_P_2,
   1470      1.1  christos   VEX_W_0FDE_P_2,
   1471      1.1  christos   VEX_W_0FDF_P_2,
   1472      1.1  christos   VEX_W_0FE0_P_2,
   1473      1.1  christos   VEX_W_0FE1_P_2,
   1474      1.1  christos   VEX_W_0FE2_P_2,
   1475      1.1  christos   VEX_W_0FE3_P_2,
   1476      1.1  christos   VEX_W_0FE4_P_2,
   1477      1.1  christos   VEX_W_0FE5_P_2,
   1478      1.1  christos   VEX_W_0FE6_P_1,
   1479      1.1  christos   VEX_W_0FE6_P_2,
   1480      1.1  christos   VEX_W_0FE6_P_3,
   1481      1.1  christos   VEX_W_0FE7_P_2_M_0,
   1482      1.1  christos   VEX_W_0FE8_P_2,
   1483      1.1  christos   VEX_W_0FE9_P_2,
   1484      1.1  christos   VEX_W_0FEA_P_2,
   1485      1.1  christos   VEX_W_0FEB_P_2,
   1486      1.1  christos   VEX_W_0FEC_P_2,
   1487      1.1  christos   VEX_W_0FED_P_2,
   1488      1.1  christos   VEX_W_0FEE_P_2,
   1489      1.1  christos   VEX_W_0FEF_P_2,
   1490      1.1  christos   VEX_W_0FF0_P_3_M_0,
   1491      1.1  christos   VEX_W_0FF1_P_2,
   1492      1.1  christos   VEX_W_0FF2_P_2,
   1493      1.1  christos   VEX_W_0FF3_P_2,
   1494      1.1  christos   VEX_W_0FF4_P_2,
   1495      1.1  christos   VEX_W_0FF5_P_2,
   1496      1.1  christos   VEX_W_0FF6_P_2,
   1497      1.1  christos   VEX_W_0FF7_P_2,
   1498      1.1  christos   VEX_W_0FF8_P_2,
   1499      1.1  christos   VEX_W_0FF9_P_2,
   1500      1.1  christos   VEX_W_0FFA_P_2,
   1501      1.1  christos   VEX_W_0FFB_P_2,
   1502      1.1  christos   VEX_W_0FFC_P_2,
   1503      1.1  christos   VEX_W_0FFD_P_2,
   1504      1.1  christos   VEX_W_0FFE_P_2,
   1505      1.1  christos   VEX_W_0F3800_P_2,
   1506      1.1  christos   VEX_W_0F3801_P_2,
   1507      1.1  christos   VEX_W_0F3802_P_2,
   1508      1.1  christos   VEX_W_0F3803_P_2,
   1509      1.1  christos   VEX_W_0F3804_P_2,
   1510      1.1  christos   VEX_W_0F3805_P_2,
   1511      1.1  christos   VEX_W_0F3806_P_2,
   1512      1.1  christos   VEX_W_0F3807_P_2,
   1513      1.1  christos   VEX_W_0F3808_P_2,
   1514      1.1  christos   VEX_W_0F3809_P_2,
   1515      1.1  christos   VEX_W_0F380A_P_2,
   1516      1.1  christos   VEX_W_0F380B_P_2,
   1517      1.1  christos   VEX_W_0F380C_P_2,
   1518      1.1  christos   VEX_W_0F380D_P_2,
   1519      1.1  christos   VEX_W_0F380E_P_2,
   1520      1.1  christos   VEX_W_0F380F_P_2,
   1521  1.1.1.2  christos   VEX_W_0F3816_P_2,
   1522      1.1  christos   VEX_W_0F3817_P_2,
   1523  1.1.1.2  christos   VEX_W_0F3818_P_2,
   1524  1.1.1.2  christos   VEX_W_0F3819_P_2,
   1525      1.1  christos   VEX_W_0F381A_P_2_M_0,
   1526      1.1  christos   VEX_W_0F381C_P_2,
   1527      1.1  christos   VEX_W_0F381D_P_2,
   1528      1.1  christos   VEX_W_0F381E_P_2,
   1529      1.1  christos   VEX_W_0F3820_P_2,
   1530      1.1  christos   VEX_W_0F3821_P_2,
   1531      1.1  christos   VEX_W_0F3822_P_2,
   1532      1.1  christos   VEX_W_0F3823_P_2,
   1533      1.1  christos   VEX_W_0F3824_P_2,
   1534      1.1  christos   VEX_W_0F3825_P_2,
   1535      1.1  christos   VEX_W_0F3828_P_2,
   1536      1.1  christos   VEX_W_0F3829_P_2,
   1537      1.1  christos   VEX_W_0F382A_P_2_M_0,
   1538      1.1  christos   VEX_W_0F382B_P_2,
   1539      1.1  christos   VEX_W_0F382C_P_2_M_0,
   1540      1.1  christos   VEX_W_0F382D_P_2_M_0,
   1541      1.1  christos   VEX_W_0F382E_P_2_M_0,
   1542      1.1  christos   VEX_W_0F382F_P_2_M_0,
   1543      1.1  christos   VEX_W_0F3830_P_2,
   1544      1.1  christos   VEX_W_0F3831_P_2,
   1545      1.1  christos   VEX_W_0F3832_P_2,
   1546      1.1  christos   VEX_W_0F3833_P_2,
   1547      1.1  christos   VEX_W_0F3834_P_2,
   1548      1.1  christos   VEX_W_0F3835_P_2,
   1549  1.1.1.2  christos   VEX_W_0F3836_P_2,
   1550      1.1  christos   VEX_W_0F3837_P_2,
   1551      1.1  christos   VEX_W_0F3838_P_2,
   1552      1.1  christos   VEX_W_0F3839_P_2,
   1553      1.1  christos   VEX_W_0F383A_P_2,
   1554      1.1  christos   VEX_W_0F383B_P_2,
   1555      1.1  christos   VEX_W_0F383C_P_2,
   1556      1.1  christos   VEX_W_0F383D_P_2,
   1557      1.1  christos   VEX_W_0F383E_P_2,
   1558      1.1  christos   VEX_W_0F383F_P_2,
   1559      1.1  christos   VEX_W_0F3840_P_2,
   1560      1.1  christos   VEX_W_0F3841_P_2,
   1561  1.1.1.2  christos   VEX_W_0F3846_P_2,
   1562  1.1.1.2  christos   VEX_W_0F3858_P_2,
   1563  1.1.1.2  christos   VEX_W_0F3859_P_2,
   1564  1.1.1.2  christos   VEX_W_0F385A_P_2_M_0,
   1565  1.1.1.2  christos   VEX_W_0F3878_P_2,
   1566  1.1.1.2  christos   VEX_W_0F3879_P_2,
   1567      1.1  christos   VEX_W_0F38DB_P_2,
   1568      1.1  christos   VEX_W_0F38DC_P_2,
   1569      1.1  christos   VEX_W_0F38DD_P_2,
   1570      1.1  christos   VEX_W_0F38DE_P_2,
   1571      1.1  christos   VEX_W_0F38DF_P_2,
   1572  1.1.1.2  christos   VEX_W_0F3A00_P_2,
   1573  1.1.1.2  christos   VEX_W_0F3A01_P_2,
   1574  1.1.1.2  christos   VEX_W_0F3A02_P_2,
   1575      1.1  christos   VEX_W_0F3A04_P_2,
   1576      1.1  christos   VEX_W_0F3A05_P_2,
   1577      1.1  christos   VEX_W_0F3A06_P_2,
   1578      1.1  christos   VEX_W_0F3A08_P_2,
   1579      1.1  christos   VEX_W_0F3A09_P_2,
   1580      1.1  christos   VEX_W_0F3A0A_P_2,
   1581      1.1  christos   VEX_W_0F3A0B_P_2,
   1582      1.1  christos   VEX_W_0F3A0C_P_2,
   1583      1.1  christos   VEX_W_0F3A0D_P_2,
   1584      1.1  christos   VEX_W_0F3A0E_P_2,
   1585      1.1  christos   VEX_W_0F3A0F_P_2,
   1586      1.1  christos   VEX_W_0F3A14_P_2,
   1587      1.1  christos   VEX_W_0F3A15_P_2,
   1588      1.1  christos   VEX_W_0F3A18_P_2,
   1589      1.1  christos   VEX_W_0F3A19_P_2,
   1590      1.1  christos   VEX_W_0F3A20_P_2,
   1591      1.1  christos   VEX_W_0F3A21_P_2,
   1592  1.1.1.2  christos   VEX_W_0F3A38_P_2,
   1593  1.1.1.2  christos   VEX_W_0F3A39_P_2,
   1594      1.1  christos   VEX_W_0F3A40_P_2,
   1595      1.1  christos   VEX_W_0F3A41_P_2,
   1596      1.1  christos   VEX_W_0F3A42_P_2,
   1597      1.1  christos   VEX_W_0F3A44_P_2,
   1598  1.1.1.2  christos   VEX_W_0F3A46_P_2,
   1599      1.1  christos   VEX_W_0F3A48_P_2,
   1600      1.1  christos   VEX_W_0F3A49_P_2,
   1601      1.1  christos   VEX_W_0F3A4A_P_2,
   1602      1.1  christos   VEX_W_0F3A4B_P_2,
   1603      1.1  christos   VEX_W_0F3A4C_P_2,
   1604      1.1  christos   VEX_W_0F3A60_P_2,
   1605      1.1  christos   VEX_W_0F3A61_P_2,
   1606      1.1  christos   VEX_W_0F3A62_P_2,
   1607      1.1  christos   VEX_W_0F3A63_P_2,
   1608      1.1  christos   VEX_W_0F3ADF_P_2
   1609      1.1  christos };
   1610      1.1  christos 
   1611      1.1  christos typedef void (*op_rtn) (int bytemode, int sizeflag);
   1612      1.1  christos 
   1613      1.1  christos struct dis386 {
   1614      1.1  christos   const char *name;
   1615      1.1  christos   struct
   1616      1.1  christos     {
   1617      1.1  christos       op_rtn rtn;
   1618      1.1  christos       int bytemode;
   1619      1.1  christos     } op[MAX_OPERANDS];
   1620      1.1  christos };
   1621      1.1  christos 
   1622      1.1  christos /* Upper case letters in the instruction names here are macros.
   1623      1.1  christos    'A' => print 'b' if no register operands or suffix_always is true
   1624      1.1  christos    'B' => print 'b' if suffix_always is true
   1625      1.1  christos    'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
   1626      1.1  christos 	  size prefix
   1627      1.1  christos    'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
   1628      1.1  christos 	  suffix_always is true
   1629      1.1  christos    'E' => print 'e' if 32-bit form of jcxz
   1630      1.1  christos    'F' => print 'w' or 'l' depending on address size prefix (loop insns)
   1631      1.1  christos    'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
   1632      1.1  christos    'H' => print ",pt" or ",pn" branch hint
   1633      1.1  christos    'I' => honor following macro letter even in Intel mode (implemented only
   1634      1.1  christos 	  for some of the macro letters)
   1635      1.1  christos    'J' => print 'l'
   1636      1.1  christos    'K' => print 'd' or 'q' if rex prefix is present.
   1637      1.1  christos    'L' => print 'l' if suffix_always is true
   1638      1.1  christos    'M' => print 'r' if intel_mnemonic is false.
   1639      1.1  christos    'N' => print 'n' if instruction has no wait "prefix"
   1640      1.1  christos    'O' => print 'd' or 'o' (or 'q' in Intel mode)
   1641      1.1  christos    'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
   1642      1.1  christos 	  or suffix_always is true.  print 'q' if rex prefix is present.
   1643      1.1  christos    'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
   1644      1.1  christos 	  is true
   1645      1.1  christos    'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
   1646      1.1  christos    'S' => print 'w', 'l' or 'q' if suffix_always is true
   1647      1.1  christos    'T' => print 'q' in 64bit mode and behave as 'P' otherwise
   1648      1.1  christos    'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
   1649      1.1  christos    'V' => print 'q' in 64bit mode and behave as 'S' otherwise
   1650      1.1  christos    'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
   1651      1.1  christos    'X' => print 's', 'd' depending on data16 prefix (for XMM)
   1652      1.1  christos    'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
   1653      1.1  christos 	  suffix_always is true.
   1654      1.1  christos    'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
   1655      1.1  christos    '!' => change condition from true to false or from false to true.
   1656      1.1  christos    '%' => add 1 upper case letter to the macro.
   1657      1.1  christos 
   1658      1.1  christos    2 upper case letter macros:
   1659      1.1  christos    "XY" => print 'x' or 'y' if no register operands or suffix_always
   1660      1.1  christos 	   is true.
   1661      1.1  christos    "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
   1662      1.1  christos    "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
   1663      1.1  christos 	   or suffix_always is true
   1664      1.1  christos    "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
   1665      1.1  christos    "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
   1666      1.1  christos    "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
   1667  1.1.1.2  christos    "LW" => print 'd', 'q' depending on the VEX.W bit
   1668      1.1  christos 
   1669      1.1  christos    Many of the above letters print nothing in Intel mode.  See "putop"
   1670      1.1  christos    for the details.
   1671      1.1  christos 
   1672      1.1  christos    Braces '{' and '}', and vertical bars '|', indicate alternative
   1673      1.1  christos    mnemonic strings for AT&T and Intel.  */
   1674      1.1  christos 
   1675      1.1  christos static const struct dis386 dis386[] = {
   1676      1.1  christos   /* 00 */
   1677  1.1.1.2  christos   { "addB",		{ Ebh1, Gb } },
   1678  1.1.1.2  christos   { "addS",		{ Evh1, Gv } },
   1679      1.1  christos   { "addB",		{ Gb, EbS } },
   1680      1.1  christos   { "addS",		{ Gv, EvS } },
   1681      1.1  christos   { "addB",		{ AL, Ib } },
   1682      1.1  christos   { "addS",		{ eAX, Iv } },
   1683      1.1  christos   { X86_64_TABLE (X86_64_06) },
   1684      1.1  christos   { X86_64_TABLE (X86_64_07) },
   1685      1.1  christos   /* 08 */
   1686  1.1.1.2  christos   { "orB",		{ Ebh1, Gb } },
   1687  1.1.1.2  christos   { "orS",		{ Evh1, Gv } },
   1688      1.1  christos   { "orB",		{ Gb, EbS } },
   1689      1.1  christos   { "orS",		{ Gv, EvS } },
   1690      1.1  christos   { "orB",		{ AL, Ib } },
   1691      1.1  christos   { "orS",		{ eAX, Iv } },
   1692      1.1  christos   { X86_64_TABLE (X86_64_0D) },
   1693      1.1  christos   { Bad_Opcode },	/* 0x0f extended opcode escape */
   1694      1.1  christos   /* 10 */
   1695  1.1.1.2  christos   { "adcB",		{ Ebh1, Gb } },
   1696  1.1.1.2  christos   { "adcS",		{ Evh1, Gv } },
   1697      1.1  christos   { "adcB",		{ Gb, EbS } },
   1698      1.1  christos   { "adcS",		{ Gv, EvS } },
   1699      1.1  christos   { "adcB",		{ AL, Ib } },
   1700      1.1  christos   { "adcS",		{ eAX, Iv } },
   1701      1.1  christos   { X86_64_TABLE (X86_64_16) },
   1702      1.1  christos   { X86_64_TABLE (X86_64_17) },
   1703      1.1  christos   /* 18 */
   1704  1.1.1.2  christos   { "sbbB",		{ Ebh1, Gb } },
   1705  1.1.1.2  christos   { "sbbS",		{ Evh1, Gv } },
   1706      1.1  christos   { "sbbB",		{ Gb, EbS } },
   1707      1.1  christos   { "sbbS",		{ Gv, EvS } },
   1708      1.1  christos   { "sbbB",		{ AL, Ib } },
   1709      1.1  christos   { "sbbS",		{ eAX, Iv } },
   1710      1.1  christos   { X86_64_TABLE (X86_64_1E) },
   1711      1.1  christos   { X86_64_TABLE (X86_64_1F) },
   1712      1.1  christos   /* 20 */
   1713  1.1.1.2  christos   { "andB",		{ Ebh1, Gb } },
   1714  1.1.1.2  christos   { "andS",		{ Evh1, Gv } },
   1715      1.1  christos   { "andB",		{ Gb, EbS } },
   1716      1.1  christos   { "andS",		{ Gv, EvS } },
   1717      1.1  christos   { "andB",		{ AL, Ib } },
   1718      1.1  christos   { "andS",		{ eAX, Iv } },
   1719      1.1  christos   { Bad_Opcode },	/* SEG ES prefix */
   1720      1.1  christos   { X86_64_TABLE (X86_64_27) },
   1721      1.1  christos   /* 28 */
   1722  1.1.1.2  christos   { "subB",		{ Ebh1, Gb } },
   1723  1.1.1.2  christos   { "subS",		{ Evh1, Gv } },
   1724      1.1  christos   { "subB",		{ Gb, EbS } },
   1725      1.1  christos   { "subS",		{ Gv, EvS } },
   1726      1.1  christos   { "subB",		{ AL, Ib } },
   1727      1.1  christos   { "subS",		{ eAX, Iv } },
   1728      1.1  christos   { Bad_Opcode },	/* SEG CS prefix */
   1729      1.1  christos   { X86_64_TABLE (X86_64_2F) },
   1730      1.1  christos   /* 30 */
   1731  1.1.1.2  christos   { "xorB",		{ Ebh1, Gb } },
   1732  1.1.1.2  christos   { "xorS",		{ Evh1, Gv } },
   1733      1.1  christos   { "xorB",		{ Gb, EbS } },
   1734      1.1  christos   { "xorS",		{ Gv, EvS } },
   1735      1.1  christos   { "xorB",		{ AL, Ib } },
   1736      1.1  christos   { "xorS",		{ eAX, Iv } },
   1737      1.1  christos   { Bad_Opcode },	/* SEG SS prefix */
   1738      1.1  christos   { X86_64_TABLE (X86_64_37) },
   1739      1.1  christos   /* 38 */
   1740      1.1  christos   { "cmpB",		{ Eb, Gb } },
   1741      1.1  christos   { "cmpS",		{ Ev, Gv } },
   1742      1.1  christos   { "cmpB",		{ Gb, EbS } },
   1743      1.1  christos   { "cmpS",		{ Gv, EvS } },
   1744      1.1  christos   { "cmpB",		{ AL, Ib } },
   1745      1.1  christos   { "cmpS",		{ eAX, Iv } },
   1746      1.1  christos   { Bad_Opcode },	/* SEG DS prefix */
   1747      1.1  christos   { X86_64_TABLE (X86_64_3F) },
   1748      1.1  christos   /* 40 */
   1749      1.1  christos   { "inc{S|}",		{ RMeAX } },
   1750      1.1  christos   { "inc{S|}",		{ RMeCX } },
   1751      1.1  christos   { "inc{S|}",		{ RMeDX } },
   1752      1.1  christos   { "inc{S|}",		{ RMeBX } },
   1753      1.1  christos   { "inc{S|}",		{ RMeSP } },
   1754      1.1  christos   { "inc{S|}",		{ RMeBP } },
   1755      1.1  christos   { "inc{S|}",		{ RMeSI } },
   1756      1.1  christos   { "inc{S|}",		{ RMeDI } },
   1757      1.1  christos   /* 48 */
   1758      1.1  christos   { "dec{S|}",		{ RMeAX } },
   1759      1.1  christos   { "dec{S|}",		{ RMeCX } },
   1760      1.1  christos   { "dec{S|}",		{ RMeDX } },
   1761      1.1  christos   { "dec{S|}",		{ RMeBX } },
   1762      1.1  christos   { "dec{S|}",		{ RMeSP } },
   1763      1.1  christos   { "dec{S|}",		{ RMeBP } },
   1764      1.1  christos   { "dec{S|}",		{ RMeSI } },
   1765      1.1  christos   { "dec{S|}",		{ RMeDI } },
   1766      1.1  christos   /* 50 */
   1767      1.1  christos   { "pushV",		{ RMrAX } },
   1768      1.1  christos   { "pushV",		{ RMrCX } },
   1769      1.1  christos   { "pushV",		{ RMrDX } },
   1770      1.1  christos   { "pushV",		{ RMrBX } },
   1771      1.1  christos   { "pushV",		{ RMrSP } },
   1772      1.1  christos   { "pushV",		{ RMrBP } },
   1773      1.1  christos   { "pushV",		{ RMrSI } },
   1774      1.1  christos   { "pushV",		{ RMrDI } },
   1775      1.1  christos   /* 58 */
   1776      1.1  christos   { "popV",		{ RMrAX } },
   1777      1.1  christos   { "popV",		{ RMrCX } },
   1778      1.1  christos   { "popV",		{ RMrDX } },
   1779      1.1  christos   { "popV",		{ RMrBX } },
   1780      1.1  christos   { "popV",		{ RMrSP } },
   1781      1.1  christos   { "popV",		{ RMrBP } },
   1782      1.1  christos   { "popV",		{ RMrSI } },
   1783      1.1  christos   { "popV",		{ RMrDI } },
   1784      1.1  christos   /* 60 */
   1785      1.1  christos   { X86_64_TABLE (X86_64_60) },
   1786      1.1  christos   { X86_64_TABLE (X86_64_61) },
   1787      1.1  christos   { X86_64_TABLE (X86_64_62) },
   1788      1.1  christos   { X86_64_TABLE (X86_64_63) },
   1789      1.1  christos   { Bad_Opcode },	/* seg fs */
   1790      1.1  christos   { Bad_Opcode },	/* seg gs */
   1791      1.1  christos   { Bad_Opcode },	/* op size prefix */
   1792      1.1  christos   { Bad_Opcode },	/* adr size prefix */
   1793      1.1  christos   /* 68 */
   1794      1.1  christos   { "pushT",		{ sIv } },
   1795      1.1  christos   { "imulS",		{ Gv, Ev, Iv } },
   1796      1.1  christos   { "pushT",		{ sIbT } },
   1797      1.1  christos   { "imulS",		{ Gv, Ev, sIb } },
   1798      1.1  christos   { "ins{b|}",		{ Ybr, indirDX } },
   1799      1.1  christos   { X86_64_TABLE (X86_64_6D) },
   1800      1.1  christos   { "outs{b|}",		{ indirDXr, Xb } },
   1801      1.1  christos   { X86_64_TABLE (X86_64_6F) },
   1802      1.1  christos   /* 70 */
   1803      1.1  christos   { "joH",		{ Jb, XX, cond_jump_flag } },
   1804      1.1  christos   { "jnoH",		{ Jb, XX, cond_jump_flag } },
   1805      1.1  christos   { "jbH",		{ Jb, XX, cond_jump_flag } },
   1806      1.1  christos   { "jaeH",		{ Jb, XX, cond_jump_flag } },
   1807      1.1  christos   { "jeH",		{ Jb, XX, cond_jump_flag } },
   1808      1.1  christos   { "jneH",		{ Jb, XX, cond_jump_flag } },
   1809      1.1  christos   { "jbeH",		{ Jb, XX, cond_jump_flag } },
   1810      1.1  christos   { "jaH",		{ Jb, XX, cond_jump_flag } },
   1811      1.1  christos   /* 78 */
   1812      1.1  christos   { "jsH",		{ Jb, XX, cond_jump_flag } },
   1813      1.1  christos   { "jnsH",		{ Jb, XX, cond_jump_flag } },
   1814      1.1  christos   { "jpH",		{ Jb, XX, cond_jump_flag } },
   1815      1.1  christos   { "jnpH",		{ Jb, XX, cond_jump_flag } },
   1816      1.1  christos   { "jlH",		{ Jb, XX, cond_jump_flag } },
   1817      1.1  christos   { "jgeH",		{ Jb, XX, cond_jump_flag } },
   1818      1.1  christos   { "jleH",		{ Jb, XX, cond_jump_flag } },
   1819      1.1  christos   { "jgH",		{ Jb, XX, cond_jump_flag } },
   1820      1.1  christos   /* 80 */
   1821      1.1  christos   { REG_TABLE (REG_80) },
   1822      1.1  christos   { REG_TABLE (REG_81) },
   1823      1.1  christos   { Bad_Opcode },
   1824      1.1  christos   { REG_TABLE (REG_82) },
   1825      1.1  christos   { "testB",		{ Eb, Gb } },
   1826      1.1  christos   { "testS",		{ Ev, Gv } },
   1827  1.1.1.2  christos   { "xchgB",		{ Ebh2, Gb } },
   1828  1.1.1.2  christos   { "xchgS",		{ Evh2, Gv } },
   1829      1.1  christos   /* 88 */
   1830  1.1.1.2  christos   { "movB",		{ Ebh3, Gb } },
   1831  1.1.1.2  christos   { "movS",		{ Evh3, Gv } },
   1832      1.1  christos   { "movB",		{ Gb, EbS } },
   1833      1.1  christos   { "movS",		{ Gv, EvS } },
   1834      1.1  christos   { "movD",		{ Sv, Sw } },
   1835      1.1  christos   { MOD_TABLE (MOD_8D) },
   1836      1.1  christos   { "movD",		{ Sw, Sv } },
   1837      1.1  christos   { REG_TABLE (REG_8F) },
   1838      1.1  christos   /* 90 */
   1839      1.1  christos   { PREFIX_TABLE (PREFIX_90) },
   1840      1.1  christos   { "xchgS",		{ RMeCX, eAX } },
   1841      1.1  christos   { "xchgS",		{ RMeDX, eAX } },
   1842      1.1  christos   { "xchgS",		{ RMeBX, eAX } },
   1843      1.1  christos   { "xchgS",		{ RMeSP, eAX } },
   1844      1.1  christos   { "xchgS",		{ RMeBP, eAX } },
   1845      1.1  christos   { "xchgS",		{ RMeSI, eAX } },
   1846      1.1  christos   { "xchgS",		{ RMeDI, eAX } },
   1847      1.1  christos   /* 98 */
   1848      1.1  christos   { "cW{t|}R",		{ XX } },
   1849      1.1  christos   { "cR{t|}O",		{ XX } },
   1850      1.1  christos   { X86_64_TABLE (X86_64_9A) },
   1851      1.1  christos   { Bad_Opcode },	/* fwait */
   1852      1.1  christos   { "pushfT",		{ XX } },
   1853      1.1  christos   { "popfT",		{ XX } },
   1854      1.1  christos   { "sahf",		{ XX } },
   1855      1.1  christos   { "lahf",		{ XX } },
   1856      1.1  christos   /* a0 */
   1857      1.1  christos   { "mov%LB",		{ AL, Ob } },
   1858      1.1  christos   { "mov%LS",		{ eAX, Ov } },
   1859      1.1  christos   { "mov%LB",		{ Ob, AL } },
   1860      1.1  christos   { "mov%LS",		{ Ov, eAX } },
   1861      1.1  christos   { "movs{b|}",		{ Ybr, Xb } },
   1862      1.1  christos   { "movs{R|}",		{ Yvr, Xv } },
   1863      1.1  christos   { "cmps{b|}",		{ Xb, Yb } },
   1864      1.1  christos   { "cmps{R|}",		{ Xv, Yv } },
   1865      1.1  christos   /* a8 */
   1866      1.1  christos   { "testB",		{ AL, Ib } },
   1867      1.1  christos   { "testS",		{ eAX, Iv } },
   1868      1.1  christos   { "stosB",		{ Ybr, AL } },
   1869      1.1  christos   { "stosS",		{ Yvr, eAX } },
   1870      1.1  christos   { "lodsB",		{ ALr, Xb } },
   1871      1.1  christos   { "lodsS",		{ eAXr, Xv } },
   1872      1.1  christos   { "scasB",		{ AL, Yb } },
   1873      1.1  christos   { "scasS",		{ eAX, Yv } },
   1874      1.1  christos   /* b0 */
   1875      1.1  christos   { "movB",		{ RMAL, Ib } },
   1876      1.1  christos   { "movB",		{ RMCL, Ib } },
   1877      1.1  christos   { "movB",		{ RMDL, Ib } },
   1878      1.1  christos   { "movB",		{ RMBL, Ib } },
   1879      1.1  christos   { "movB",		{ RMAH, Ib } },
   1880      1.1  christos   { "movB",		{ RMCH, Ib } },
   1881      1.1  christos   { "movB",		{ RMDH, Ib } },
   1882      1.1  christos   { "movB",		{ RMBH, Ib } },
   1883      1.1  christos   /* b8 */
   1884      1.1  christos   { "mov%LV",		{ RMeAX, Iv64 } },
   1885      1.1  christos   { "mov%LV",		{ RMeCX, Iv64 } },
   1886      1.1  christos   { "mov%LV",		{ RMeDX, Iv64 } },
   1887      1.1  christos   { "mov%LV",		{ RMeBX, Iv64 } },
   1888      1.1  christos   { "mov%LV",		{ RMeSP, Iv64 } },
   1889      1.1  christos   { "mov%LV",		{ RMeBP, Iv64 } },
   1890      1.1  christos   { "mov%LV",		{ RMeSI, Iv64 } },
   1891      1.1  christos   { "mov%LV",		{ RMeDI, Iv64 } },
   1892      1.1  christos   /* c0 */
   1893      1.1  christos   { REG_TABLE (REG_C0) },
   1894      1.1  christos   { REG_TABLE (REG_C1) },
   1895      1.1  christos   { "retT",		{ Iw } },
   1896      1.1  christos   { "retT",		{ XX } },
   1897      1.1  christos   { X86_64_TABLE (X86_64_C4) },
   1898      1.1  christos   { X86_64_TABLE (X86_64_C5) },
   1899      1.1  christos   { REG_TABLE (REG_C6) },
   1900      1.1  christos   { REG_TABLE (REG_C7) },
   1901      1.1  christos   /* c8 */
   1902      1.1  christos   { "enterT",		{ Iw, Ib } },
   1903      1.1  christos   { "leaveT",		{ XX } },
   1904      1.1  christos   { "Jret{|f}P",	{ Iw } },
   1905      1.1  christos   { "Jret{|f}P",	{ XX } },
   1906      1.1  christos   { "int3",		{ XX } },
   1907      1.1  christos   { "int",		{ Ib } },
   1908      1.1  christos   { X86_64_TABLE (X86_64_CE) },
   1909      1.1  christos   { "iretP",		{ XX } },
   1910      1.1  christos   /* d0 */
   1911      1.1  christos   { REG_TABLE (REG_D0) },
   1912      1.1  christos   { REG_TABLE (REG_D1) },
   1913      1.1  christos   { REG_TABLE (REG_D2) },
   1914      1.1  christos   { REG_TABLE (REG_D3) },
   1915      1.1  christos   { X86_64_TABLE (X86_64_D4) },
   1916      1.1  christos   { X86_64_TABLE (X86_64_D5) },
   1917      1.1  christos   { Bad_Opcode },
   1918      1.1  christos   { "xlat",		{ DSBX } },
   1919      1.1  christos   /* d8 */
   1920      1.1  christos   { FLOAT },
   1921      1.1  christos   { FLOAT },
   1922      1.1  christos   { FLOAT },
   1923      1.1  christos   { FLOAT },
   1924      1.1  christos   { FLOAT },
   1925      1.1  christos   { FLOAT },
   1926      1.1  christos   { FLOAT },
   1927      1.1  christos   { FLOAT },
   1928      1.1  christos   /* e0 */
   1929      1.1  christos   { "loopneFH",		{ Jb, XX, loop_jcxz_flag } },
   1930      1.1  christos   { "loopeFH",		{ Jb, XX, loop_jcxz_flag } },
   1931      1.1  christos   { "loopFH",		{ Jb, XX, loop_jcxz_flag } },
   1932      1.1  christos   { "jEcxzH",		{ Jb, XX, loop_jcxz_flag } },
   1933      1.1  christos   { "inB",		{ AL, Ib } },
   1934      1.1  christos   { "inG",		{ zAX, Ib } },
   1935      1.1  christos   { "outB",		{ Ib, AL } },
   1936      1.1  christos   { "outG",		{ Ib, zAX } },
   1937      1.1  christos   /* e8 */
   1938      1.1  christos   { "callT",		{ Jv } },
   1939      1.1  christos   { "jmpT",		{ Jv } },
   1940      1.1  christos   { X86_64_TABLE (X86_64_EA) },
   1941      1.1  christos   { "jmp",		{ Jb } },
   1942      1.1  christos   { "inB",		{ AL, indirDX } },
   1943      1.1  christos   { "inG",		{ zAX, indirDX } },
   1944      1.1  christos   { "outB",		{ indirDX, AL } },
   1945      1.1  christos   { "outG",		{ indirDX, zAX } },
   1946      1.1  christos   /* f0 */
   1947      1.1  christos   { Bad_Opcode },	/* lock prefix */
   1948      1.1  christos   { "icebp",		{ XX } },
   1949      1.1  christos   { Bad_Opcode },	/* repne */
   1950      1.1  christos   { Bad_Opcode },	/* repz */
   1951      1.1  christos   { "hlt",		{ XX } },
   1952      1.1  christos   { "cmc",		{ XX } },
   1953      1.1  christos   { REG_TABLE (REG_F6) },
   1954      1.1  christos   { REG_TABLE (REG_F7) },
   1955      1.1  christos   /* f8 */
   1956      1.1  christos   { "clc",		{ XX } },
   1957      1.1  christos   { "stc",		{ XX } },
   1958      1.1  christos   { "cli",		{ XX } },
   1959      1.1  christos   { "sti",		{ XX } },
   1960      1.1  christos   { "cld",		{ XX } },
   1961      1.1  christos   { "std",		{ XX } },
   1962      1.1  christos   { REG_TABLE (REG_FE) },
   1963      1.1  christos   { REG_TABLE (REG_FF) },
   1964      1.1  christos };
   1965      1.1  christos 
   1966      1.1  christos static const struct dis386 dis386_twobyte[] = {
   1967      1.1  christos   /* 00 */
   1968      1.1  christos   { REG_TABLE (REG_0F00 ) },
   1969      1.1  christos   { REG_TABLE (REG_0F01 ) },
   1970      1.1  christos   { "larS",		{ Gv, Ew } },
   1971      1.1  christos   { "lslS",		{ Gv, Ew } },
   1972      1.1  christos   { Bad_Opcode },
   1973      1.1  christos   { "syscall",		{ XX } },
   1974      1.1  christos   { "clts",		{ XX } },
   1975      1.1  christos   { "sysretP",		{ XX } },
   1976      1.1  christos   /* 08 */
   1977      1.1  christos   { "invd",		{ XX } },
   1978      1.1  christos   { "wbinvd",		{ XX } },
   1979      1.1  christos   { Bad_Opcode },
   1980      1.1  christos   { "ud2",		{ XX } },
   1981      1.1  christos   { Bad_Opcode },
   1982      1.1  christos   { REG_TABLE (REG_0F0D) },
   1983      1.1  christos   { "femms",		{ XX } },
   1984      1.1  christos   { "",			{ MX, EM, OPSUF } }, /* See OP_3DNowSuffix.  */
   1985      1.1  christos   /* 10 */
   1986      1.1  christos   { PREFIX_TABLE (PREFIX_0F10) },
   1987      1.1  christos   { PREFIX_TABLE (PREFIX_0F11) },
   1988      1.1  christos   { PREFIX_TABLE (PREFIX_0F12) },
   1989      1.1  christos   { MOD_TABLE (MOD_0F13) },
   1990      1.1  christos   { "unpcklpX",		{ XM, EXx } },
   1991      1.1  christos   { "unpckhpX",		{ XM, EXx } },
   1992      1.1  christos   { PREFIX_TABLE (PREFIX_0F16) },
   1993      1.1  christos   { MOD_TABLE (MOD_0F17) },
   1994      1.1  christos   /* 18 */
   1995      1.1  christos   { REG_TABLE (REG_0F18) },
   1996      1.1  christos   { "nopQ",		{ Ev } },
   1997      1.1  christos   { "nopQ",		{ Ev } },
   1998      1.1  christos   { "nopQ",		{ Ev } },
   1999      1.1  christos   { "nopQ",		{ Ev } },
   2000      1.1  christos   { "nopQ",		{ Ev } },
   2001      1.1  christos   { "nopQ",		{ Ev } },
   2002      1.1  christos   { "nopQ",		{ Ev } },
   2003      1.1  christos   /* 20 */
   2004      1.1  christos   { MOD_TABLE (MOD_0F20) },
   2005      1.1  christos   { MOD_TABLE (MOD_0F21) },
   2006      1.1  christos   { MOD_TABLE (MOD_0F22) },
   2007      1.1  christos   { MOD_TABLE (MOD_0F23) },
   2008      1.1  christos   { MOD_TABLE (MOD_0F24) },
   2009      1.1  christos   { Bad_Opcode },
   2010      1.1  christos   { MOD_TABLE (MOD_0F26) },
   2011      1.1  christos   { Bad_Opcode },
   2012      1.1  christos   /* 28 */
   2013      1.1  christos   { "movapX",		{ XM, EXx } },
   2014      1.1  christos   { "movapX",		{ EXxS, XM } },
   2015      1.1  christos   { PREFIX_TABLE (PREFIX_0F2A) },
   2016      1.1  christos   { PREFIX_TABLE (PREFIX_0F2B) },
   2017      1.1  christos   { PREFIX_TABLE (PREFIX_0F2C) },
   2018      1.1  christos   { PREFIX_TABLE (PREFIX_0F2D) },
   2019      1.1  christos   { PREFIX_TABLE (PREFIX_0F2E) },
   2020      1.1  christos   { PREFIX_TABLE (PREFIX_0F2F) },
   2021      1.1  christos   /* 30 */
   2022      1.1  christos   { "wrmsr",		{ XX } },
   2023      1.1  christos   { "rdtsc",		{ XX } },
   2024      1.1  christos   { "rdmsr",		{ XX } },
   2025      1.1  christos   { "rdpmc",		{ XX } },
   2026      1.1  christos   { "sysenter",		{ XX } },
   2027      1.1  christos   { "sysexit",		{ XX } },
   2028      1.1  christos   { Bad_Opcode },
   2029      1.1  christos   { "getsec",		{ XX } },
   2030      1.1  christos   /* 38 */
   2031      1.1  christos   { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
   2032      1.1  christos   { Bad_Opcode },
   2033      1.1  christos   { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
   2034      1.1  christos   { Bad_Opcode },
   2035      1.1  christos   { Bad_Opcode },
   2036      1.1  christos   { Bad_Opcode },
   2037      1.1  christos   { Bad_Opcode },
   2038      1.1  christos   { Bad_Opcode },
   2039      1.1  christos   /* 40 */
   2040      1.1  christos   { "cmovoS",		{ Gv, Ev } },
   2041      1.1  christos   { "cmovnoS",		{ Gv, Ev } },
   2042      1.1  christos   { "cmovbS",		{ Gv, Ev } },
   2043      1.1  christos   { "cmovaeS",		{ Gv, Ev } },
   2044      1.1  christos   { "cmoveS",		{ Gv, Ev } },
   2045      1.1  christos   { "cmovneS",		{ Gv, Ev } },
   2046      1.1  christos   { "cmovbeS",		{ Gv, Ev } },
   2047      1.1  christos   { "cmovaS",		{ Gv, Ev } },
   2048      1.1  christos   /* 48 */
   2049      1.1  christos   { "cmovsS",		{ Gv, Ev } },
   2050      1.1  christos   { "cmovnsS",		{ Gv, Ev } },
   2051      1.1  christos   { "cmovpS",		{ Gv, Ev } },
   2052      1.1  christos   { "cmovnpS",		{ Gv, Ev } },
   2053      1.1  christos   { "cmovlS",		{ Gv, Ev } },
   2054      1.1  christos   { "cmovgeS",		{ Gv, Ev } },
   2055      1.1  christos   { "cmovleS",		{ Gv, Ev } },
   2056      1.1  christos   { "cmovgS",		{ Gv, Ev } },
   2057      1.1  christos   /* 50 */
   2058      1.1  christos   { MOD_TABLE (MOD_0F51) },
   2059      1.1  christos   { PREFIX_TABLE (PREFIX_0F51) },
   2060      1.1  christos   { PREFIX_TABLE (PREFIX_0F52) },
   2061      1.1  christos   { PREFIX_TABLE (PREFIX_0F53) },
   2062      1.1  christos   { "andpX",		{ XM, EXx } },
   2063      1.1  christos   { "andnpX",		{ XM, EXx } },
   2064      1.1  christos   { "orpX",		{ XM, EXx } },
   2065      1.1  christos   { "xorpX",		{ XM, EXx } },
   2066      1.1  christos   /* 58 */
   2067      1.1  christos   { PREFIX_TABLE (PREFIX_0F58) },
   2068      1.1  christos   { PREFIX_TABLE (PREFIX_0F59) },
   2069      1.1  christos   { PREFIX_TABLE (PREFIX_0F5A) },
   2070      1.1  christos   { PREFIX_TABLE (PREFIX_0F5B) },
   2071      1.1  christos   { PREFIX_TABLE (PREFIX_0F5C) },
   2072      1.1  christos   { PREFIX_TABLE (PREFIX_0F5D) },
   2073      1.1  christos   { PREFIX_TABLE (PREFIX_0F5E) },
   2074      1.1  christos   { PREFIX_TABLE (PREFIX_0F5F) },
   2075      1.1  christos   /* 60 */
   2076      1.1  christos   { PREFIX_TABLE (PREFIX_0F60) },
   2077      1.1  christos   { PREFIX_TABLE (PREFIX_0F61) },
   2078      1.1  christos   { PREFIX_TABLE (PREFIX_0F62) },
   2079      1.1  christos   { "packsswb",		{ MX, EM } },
   2080      1.1  christos   { "pcmpgtb",		{ MX, EM } },
   2081      1.1  christos   { "pcmpgtw",		{ MX, EM } },
   2082      1.1  christos   { "pcmpgtd",		{ MX, EM } },
   2083      1.1  christos   { "packuswb",		{ MX, EM } },
   2084      1.1  christos   /* 68 */
   2085      1.1  christos   { "punpckhbw",	{ MX, EM } },
   2086      1.1  christos   { "punpckhwd",	{ MX, EM } },
   2087      1.1  christos   { "punpckhdq",	{ MX, EM } },
   2088      1.1  christos   { "packssdw",		{ MX, EM } },
   2089      1.1  christos   { PREFIX_TABLE (PREFIX_0F6C) },
   2090      1.1  christos   { PREFIX_TABLE (PREFIX_0F6D) },
   2091      1.1  christos   { "movK",		{ MX, Edq } },
   2092      1.1  christos   { PREFIX_TABLE (PREFIX_0F6F) },
   2093      1.1  christos   /* 70 */
   2094      1.1  christos   { PREFIX_TABLE (PREFIX_0F70) },
   2095      1.1  christos   { REG_TABLE (REG_0F71) },
   2096      1.1  christos   { REG_TABLE (REG_0F72) },
   2097      1.1  christos   { REG_TABLE (REG_0F73) },
   2098      1.1  christos   { "pcmpeqb",		{ MX, EM } },
   2099      1.1  christos   { "pcmpeqw",		{ MX, EM } },
   2100      1.1  christos   { "pcmpeqd",		{ MX, EM } },
   2101      1.1  christos   { "emms",		{ XX } },
   2102      1.1  christos   /* 78 */
   2103      1.1  christos   { PREFIX_TABLE (PREFIX_0F78) },
   2104      1.1  christos   { PREFIX_TABLE (PREFIX_0F79) },
   2105      1.1  christos   { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
   2106      1.1  christos   { Bad_Opcode },
   2107      1.1  christos   { PREFIX_TABLE (PREFIX_0F7C) },
   2108      1.1  christos   { PREFIX_TABLE (PREFIX_0F7D) },
   2109      1.1  christos   { PREFIX_TABLE (PREFIX_0F7E) },
   2110      1.1  christos   { PREFIX_TABLE (PREFIX_0F7F) },
   2111      1.1  christos   /* 80 */
   2112      1.1  christos   { "joH",		{ Jv, XX, cond_jump_flag } },
   2113      1.1  christos   { "jnoH",		{ Jv, XX, cond_jump_flag } },
   2114      1.1  christos   { "jbH",		{ Jv, XX, cond_jump_flag } },
   2115      1.1  christos   { "jaeH",		{ Jv, XX, cond_jump_flag } },
   2116      1.1  christos   { "jeH",		{ Jv, XX, cond_jump_flag } },
   2117      1.1  christos   { "jneH",		{ Jv, XX, cond_jump_flag } },
   2118      1.1  christos   { "jbeH",		{ Jv, XX, cond_jump_flag } },
   2119      1.1  christos   { "jaH",		{ Jv, XX, cond_jump_flag } },
   2120      1.1  christos   /* 88 */
   2121      1.1  christos   { "jsH",		{ Jv, XX, cond_jump_flag } },
   2122      1.1  christos   { "jnsH",		{ Jv, XX, cond_jump_flag } },
   2123      1.1  christos   { "jpH",		{ Jv, XX, cond_jump_flag } },
   2124      1.1  christos   { "jnpH",		{ Jv, XX, cond_jump_flag } },
   2125      1.1  christos   { "jlH",		{ Jv, XX, cond_jump_flag } },
   2126      1.1  christos   { "jgeH",		{ Jv, XX, cond_jump_flag } },
   2127      1.1  christos   { "jleH",		{ Jv, XX, cond_jump_flag } },
   2128      1.1  christos   { "jgH",		{ Jv, XX, cond_jump_flag } },
   2129      1.1  christos   /* 90 */
   2130      1.1  christos   { "seto",		{ Eb } },
   2131      1.1  christos   { "setno",		{ Eb } },
   2132      1.1  christos   { "setb",		{ Eb } },
   2133      1.1  christos   { "setae",		{ Eb } },
   2134      1.1  christos   { "sete",		{ Eb } },
   2135      1.1  christos   { "setne",		{ Eb } },
   2136      1.1  christos   { "setbe",		{ Eb } },
   2137      1.1  christos   { "seta",		{ Eb } },
   2138      1.1  christos   /* 98 */
   2139      1.1  christos   { "sets",		{ Eb } },
   2140      1.1  christos   { "setns",		{ Eb } },
   2141      1.1  christos   { "setp",		{ Eb } },
   2142      1.1  christos   { "setnp",		{ Eb } },
   2143      1.1  christos   { "setl",		{ Eb } },
   2144      1.1  christos   { "setge",		{ Eb } },
   2145      1.1  christos   { "setle",		{ Eb } },
   2146      1.1  christos   { "setg",		{ Eb } },
   2147      1.1  christos   /* a0 */
   2148      1.1  christos   { "pushT",		{ fs } },
   2149      1.1  christos   { "popT",		{ fs } },
   2150      1.1  christos   { "cpuid",		{ XX } },
   2151      1.1  christos   { "btS",		{ Ev, Gv } },
   2152      1.1  christos   { "shldS",		{ Ev, Gv, Ib } },
   2153      1.1  christos   { "shldS",		{ Ev, Gv, CL } },
   2154      1.1  christos   { REG_TABLE (REG_0FA6) },
   2155      1.1  christos   { REG_TABLE (REG_0FA7) },
   2156      1.1  christos   /* a8 */
   2157      1.1  christos   { "pushT",		{ gs } },
   2158      1.1  christos   { "popT",		{ gs } },
   2159      1.1  christos   { "rsm",		{ XX } },
   2160  1.1.1.2  christos   { "btsS",		{ Evh1, Gv } },
   2161      1.1  christos   { "shrdS",		{ Ev, Gv, Ib } },
   2162      1.1  christos   { "shrdS",		{ Ev, Gv, CL } },
   2163      1.1  christos   { REG_TABLE (REG_0FAE) },
   2164      1.1  christos   { "imulS",		{ Gv, Ev } },
   2165      1.1  christos   /* b0 */
   2166  1.1.1.2  christos   { "cmpxchgB",		{ Ebh1, Gb } },
   2167  1.1.1.2  christos   { "cmpxchgS",		{ Evh1, Gv } },
   2168      1.1  christos   { MOD_TABLE (MOD_0FB2) },
   2169  1.1.1.2  christos   { "btrS",		{ Evh1, Gv } },
   2170      1.1  christos   { MOD_TABLE (MOD_0FB4) },
   2171      1.1  christos   { MOD_TABLE (MOD_0FB5) },
   2172      1.1  christos   { "movz{bR|x}",	{ Gv, Eb } },
   2173      1.1  christos   { "movz{wR|x}",	{ Gv, Ew } }, /* yes, there really is movzww ! */
   2174      1.1  christos   /* b8 */
   2175      1.1  christos   { PREFIX_TABLE (PREFIX_0FB8) },
   2176      1.1  christos   { "ud1",		{ XX } },
   2177      1.1  christos   { REG_TABLE (REG_0FBA) },
   2178  1.1.1.2  christos   { "btcS",		{ Evh1, Gv } },
   2179      1.1  christos   { PREFIX_TABLE (PREFIX_0FBC) },
   2180      1.1  christos   { PREFIX_TABLE (PREFIX_0FBD) },
   2181      1.1  christos   { "movs{bR|x}",	{ Gv, Eb } },
   2182      1.1  christos   { "movs{wR|x}",	{ Gv, Ew } }, /* yes, there really is movsww ! */
   2183      1.1  christos   /* c0 */
   2184  1.1.1.2  christos   { "xaddB",		{ Ebh1, Gb } },
   2185  1.1.1.2  christos   { "xaddS",		{ Evh1, Gv } },
   2186      1.1  christos   { PREFIX_TABLE (PREFIX_0FC2) },
   2187      1.1  christos   { PREFIX_TABLE (PREFIX_0FC3) },
   2188      1.1  christos   { "pinsrw",		{ MX, Edqw, Ib } },
   2189      1.1  christos   { "pextrw",		{ Gdq, MS, Ib } },
   2190      1.1  christos   { "shufpX",		{ XM, EXx, Ib } },
   2191      1.1  christos   { REG_TABLE (REG_0FC7) },
   2192      1.1  christos   /* c8 */
   2193      1.1  christos   { "bswap",		{ RMeAX } },
   2194      1.1  christos   { "bswap",		{ RMeCX } },
   2195      1.1  christos   { "bswap",		{ RMeDX } },
   2196      1.1  christos   { "bswap",		{ RMeBX } },
   2197      1.1  christos   { "bswap",		{ RMeSP } },
   2198      1.1  christos   { "bswap",		{ RMeBP } },
   2199      1.1  christos   { "bswap",		{ RMeSI } },
   2200      1.1  christos   { "bswap",		{ RMeDI } },
   2201      1.1  christos   /* d0 */
   2202      1.1  christos   { PREFIX_TABLE (PREFIX_0FD0) },
   2203      1.1  christos   { "psrlw",		{ MX, EM } },
   2204      1.1  christos   { "psrld",		{ MX, EM } },
   2205      1.1  christos   { "psrlq",		{ MX, EM } },
   2206      1.1  christos   { "paddq",		{ MX, EM } },
   2207      1.1  christos   { "pmullw",		{ MX, EM } },
   2208      1.1  christos   { PREFIX_TABLE (PREFIX_0FD6) },
   2209      1.1  christos   { MOD_TABLE (MOD_0FD7) },
   2210      1.1  christos   /* d8 */
   2211      1.1  christos   { "psubusb",		{ MX, EM } },
   2212      1.1  christos   { "psubusw",		{ MX, EM } },
   2213      1.1  christos   { "pminub",		{ MX, EM } },
   2214      1.1  christos   { "pand",		{ MX, EM } },
   2215      1.1  christos   { "paddusb",		{ MX, EM } },
   2216      1.1  christos   { "paddusw",		{ MX, EM } },
   2217      1.1  christos   { "pmaxub",		{ MX, EM } },
   2218      1.1  christos   { "pandn",		{ MX, EM } },
   2219      1.1  christos   /* e0 */
   2220      1.1  christos   { "pavgb",		{ MX, EM } },
   2221      1.1  christos   { "psraw",		{ MX, EM } },
   2222      1.1  christos   { "psrad",		{ MX, EM } },
   2223      1.1  christos   { "pavgw",		{ MX, EM } },
   2224      1.1  christos   { "pmulhuw",		{ MX, EM } },
   2225      1.1  christos   { "pmulhw",		{ MX, EM } },
   2226      1.1  christos   { PREFIX_TABLE (PREFIX_0FE6) },
   2227      1.1  christos   { PREFIX_TABLE (PREFIX_0FE7) },
   2228      1.1  christos   /* e8 */
   2229      1.1  christos   { "psubsb",		{ MX, EM } },
   2230      1.1  christos   { "psubsw",		{ MX, EM } },
   2231      1.1  christos   { "pminsw",		{ MX, EM } },
   2232      1.1  christos   { "por",		{ MX, EM } },
   2233      1.1  christos   { "paddsb",		{ MX, EM } },
   2234      1.1  christos   { "paddsw",		{ MX, EM } },
   2235      1.1  christos   { "pmaxsw",		{ MX, EM } },
   2236      1.1  christos   { "pxor",		{ MX, EM } },
   2237      1.1  christos   /* f0 */
   2238      1.1  christos   { PREFIX_TABLE (PREFIX_0FF0) },
   2239      1.1  christos   { "psllw",		{ MX, EM } },
   2240      1.1  christos   { "pslld",		{ MX, EM } },
   2241      1.1  christos   { "psllq",		{ MX, EM } },
   2242      1.1  christos   { "pmuludq",		{ MX, EM } },
   2243      1.1  christos   { "pmaddwd",		{ MX, EM } },
   2244      1.1  christos   { "psadbw",		{ MX, EM } },
   2245      1.1  christos   { PREFIX_TABLE (PREFIX_0FF7) },
   2246      1.1  christos   /* f8 */
   2247      1.1  christos   { "psubb",		{ MX, EM } },
   2248      1.1  christos   { "psubw",		{ MX, EM } },
   2249      1.1  christos   { "psubd",		{ MX, EM } },
   2250      1.1  christos   { "psubq",		{ MX, EM } },
   2251      1.1  christos   { "paddb",		{ MX, EM } },
   2252      1.1  christos   { "paddw",		{ MX, EM } },
   2253      1.1  christos   { "paddd",		{ MX, EM } },
   2254      1.1  christos   { Bad_Opcode },
   2255      1.1  christos };
   2256      1.1  christos 
   2257      1.1  christos static const unsigned char onebyte_has_modrm[256] = {
   2258      1.1  christos   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
   2259      1.1  christos   /*       -------------------------------        */
   2260      1.1  christos   /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
   2261      1.1  christos   /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
   2262      1.1  christos   /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
   2263      1.1  christos   /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
   2264      1.1  christos   /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
   2265      1.1  christos   /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
   2266      1.1  christos   /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
   2267      1.1  christos   /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
   2268      1.1  christos   /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
   2269      1.1  christos   /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
   2270      1.1  christos   /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
   2271      1.1  christos   /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
   2272      1.1  christos   /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
   2273      1.1  christos   /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
   2274      1.1  christos   /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
   2275      1.1  christos   /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1  /* f0 */
   2276      1.1  christos   /*       -------------------------------        */
   2277      1.1  christos   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
   2278      1.1  christos };
   2279      1.1  christos 
   2280      1.1  christos static const unsigned char twobyte_has_modrm[256] = {
   2281      1.1  christos   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
   2282      1.1  christos   /*       -------------------------------        */
   2283      1.1  christos   /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
   2284      1.1  christos   /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
   2285      1.1  christos   /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
   2286      1.1  christos   /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
   2287      1.1  christos   /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
   2288      1.1  christos   /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
   2289      1.1  christos   /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
   2290      1.1  christos   /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
   2291      1.1  christos   /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
   2292      1.1  christos   /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
   2293      1.1  christos   /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
   2294      1.1  christos   /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
   2295      1.1  christos   /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
   2296      1.1  christos   /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
   2297      1.1  christos   /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
   2298      1.1  christos   /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0  /* ff */
   2299      1.1  christos   /*       -------------------------------        */
   2300      1.1  christos   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
   2301      1.1  christos };
   2302      1.1  christos 
   2303      1.1  christos static char obuf[100];
   2304      1.1  christos static char *obufp;
   2305      1.1  christos static char *mnemonicendp;
   2306      1.1  christos static char scratchbuf[100];
   2307      1.1  christos static unsigned char *start_codep;
   2308      1.1  christos static unsigned char *insn_codep;
   2309      1.1  christos static unsigned char *codep;
   2310      1.1  christos static int last_lock_prefix;
   2311      1.1  christos static int last_repz_prefix;
   2312      1.1  christos static int last_repnz_prefix;
   2313      1.1  christos static int last_data_prefix;
   2314      1.1  christos static int last_addr_prefix;
   2315      1.1  christos static int last_rex_prefix;
   2316      1.1  christos static int last_seg_prefix;
   2317      1.1  christos #define MAX_CODE_LENGTH 15
   2318      1.1  christos /* We can up to 14 prefixes since the maximum instruction length is
   2319      1.1  christos    15bytes.  */
   2320      1.1  christos static int all_prefixes[MAX_CODE_LENGTH - 1];
   2321      1.1  christos static disassemble_info *the_info;
   2322      1.1  christos static struct
   2323      1.1  christos   {
   2324      1.1  christos     int mod;
   2325      1.1  christos     int reg;
   2326      1.1  christos     int rm;
   2327      1.1  christos   }
   2328      1.1  christos modrm;
   2329      1.1  christos static unsigned char need_modrm;
   2330      1.1  christos static struct
   2331      1.1  christos   {
   2332      1.1  christos     int scale;
   2333      1.1  christos     int index;
   2334      1.1  christos     int base;
   2335      1.1  christos   }
   2336      1.1  christos sib;
   2337      1.1  christos static struct
   2338      1.1  christos   {
   2339      1.1  christos     int register_specifier;
   2340      1.1  christos     int length;
   2341      1.1  christos     int prefix;
   2342      1.1  christos     int w;
   2343      1.1  christos   }
   2344      1.1  christos vex;
   2345      1.1  christos static unsigned char need_vex;
   2346      1.1  christos static unsigned char need_vex_reg;
   2347      1.1  christos static unsigned char vex_w_done;
   2348      1.1  christos 
   2349      1.1  christos struct op
   2350      1.1  christos   {
   2351      1.1  christos     const char *name;
   2352      1.1  christos     unsigned int len;
   2353      1.1  christos   };
   2354      1.1  christos 
   2355      1.1  christos /* If we are accessing mod/rm/reg without need_modrm set, then the
   2356      1.1  christos    values are stale.  Hitting this abort likely indicates that you
   2357      1.1  christos    need to update onebyte_has_modrm or twobyte_has_modrm.  */
   2358      1.1  christos #define MODRM_CHECK  if (!need_modrm) abort ()
   2359      1.1  christos 
   2360      1.1  christos static const char **names64;
   2361      1.1  christos static const char **names32;
   2362      1.1  christos static const char **names16;
   2363      1.1  christos static const char **names8;
   2364      1.1  christos static const char **names8rex;
   2365      1.1  christos static const char **names_seg;
   2366      1.1  christos static const char *index64;
   2367      1.1  christos static const char *index32;
   2368      1.1  christos static const char **index16;
   2369      1.1  christos 
   2370      1.1  christos static const char *intel_names64[] = {
   2371      1.1  christos   "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
   2372      1.1  christos   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
   2373      1.1  christos };
   2374      1.1  christos static const char *intel_names32[] = {
   2375      1.1  christos   "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
   2376      1.1  christos   "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
   2377      1.1  christos };
   2378      1.1  christos static const char *intel_names16[] = {
   2379      1.1  christos   "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
   2380      1.1  christos   "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
   2381      1.1  christos };
   2382      1.1  christos static const char *intel_names8[] = {
   2383      1.1  christos   "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
   2384      1.1  christos };
   2385      1.1  christos static const char *intel_names8rex[] = {
   2386      1.1  christos   "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
   2387      1.1  christos   "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
   2388      1.1  christos };
   2389      1.1  christos static const char *intel_names_seg[] = {
   2390      1.1  christos   "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
   2391      1.1  christos };
   2392      1.1  christos static const char *intel_index64 = "riz";
   2393      1.1  christos static const char *intel_index32 = "eiz";
   2394      1.1  christos static const char *intel_index16[] = {
   2395      1.1  christos   "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
   2396      1.1  christos };
   2397      1.1  christos 
   2398      1.1  christos static const char *att_names64[] = {
   2399      1.1  christos   "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
   2400      1.1  christos   "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
   2401      1.1  christos };
   2402      1.1  christos static const char *att_names32[] = {
   2403      1.1  christos   "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
   2404      1.1  christos   "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
   2405      1.1  christos };
   2406      1.1  christos static const char *att_names16[] = {
   2407      1.1  christos   "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
   2408      1.1  christos   "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
   2409      1.1  christos };
   2410      1.1  christos static const char *att_names8[] = {
   2411      1.1  christos   "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
   2412      1.1  christos };
   2413      1.1  christos static const char *att_names8rex[] = {
   2414      1.1  christos   "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
   2415      1.1  christos   "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
   2416      1.1  christos };
   2417      1.1  christos static const char *att_names_seg[] = {
   2418      1.1  christos   "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
   2419      1.1  christos };
   2420      1.1  christos static const char *att_index64 = "%riz";
   2421      1.1  christos static const char *att_index32 = "%eiz";
   2422      1.1  christos static const char *att_index16[] = {
   2423      1.1  christos   "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
   2424      1.1  christos };
   2425      1.1  christos 
   2426      1.1  christos static const char **names_mm;
   2427      1.1  christos static const char *intel_names_mm[] = {
   2428      1.1  christos   "mm0", "mm1", "mm2", "mm3",
   2429      1.1  christos   "mm4", "mm5", "mm6", "mm7"
   2430      1.1  christos };
   2431      1.1  christos static const char *att_names_mm[] = {
   2432      1.1  christos   "%mm0", "%mm1", "%mm2", "%mm3",
   2433      1.1  christos   "%mm4", "%mm5", "%mm6", "%mm7"
   2434      1.1  christos };
   2435      1.1  christos 
   2436      1.1  christos static const char **names_xmm;
   2437      1.1  christos static const char *intel_names_xmm[] = {
   2438      1.1  christos   "xmm0", "xmm1", "xmm2", "xmm3",
   2439      1.1  christos   "xmm4", "xmm5", "xmm6", "xmm7",
   2440      1.1  christos   "xmm8", "xmm9", "xmm10", "xmm11",
   2441      1.1  christos   "xmm12", "xmm13", "xmm14", "xmm15"
   2442      1.1  christos };
   2443      1.1  christos static const char *att_names_xmm[] = {
   2444      1.1  christos   "%xmm0", "%xmm1", "%xmm2", "%xmm3",
   2445      1.1  christos   "%xmm4", "%xmm5", "%xmm6", "%xmm7",
   2446      1.1  christos   "%xmm8", "%xmm9", "%xmm10", "%xmm11",
   2447      1.1  christos   "%xmm12", "%xmm13", "%xmm14", "%xmm15"
   2448      1.1  christos };
   2449      1.1  christos 
   2450      1.1  christos static const char **names_ymm;
   2451      1.1  christos static const char *intel_names_ymm[] = {
   2452      1.1  christos   "ymm0", "ymm1", "ymm2", "ymm3",
   2453      1.1  christos   "ymm4", "ymm5", "ymm6", "ymm7",
   2454      1.1  christos   "ymm8", "ymm9", "ymm10", "ymm11",
   2455      1.1  christos   "ymm12", "ymm13", "ymm14", "ymm15"
   2456      1.1  christos };
   2457      1.1  christos static const char *att_names_ymm[] = {
   2458      1.1  christos   "%ymm0", "%ymm1", "%ymm2", "%ymm3",
   2459      1.1  christos   "%ymm4", "%ymm5", "%ymm6", "%ymm7",
   2460      1.1  christos   "%ymm8", "%ymm9", "%ymm10", "%ymm11",
   2461      1.1  christos   "%ymm12", "%ymm13", "%ymm14", "%ymm15"
   2462      1.1  christos };
   2463      1.1  christos 
   2464      1.1  christos static const struct dis386 reg_table[][8] = {
   2465      1.1  christos   /* REG_80 */
   2466      1.1  christos   {
   2467  1.1.1.2  christos     { "addA",	{ Ebh1, Ib } },
   2468  1.1.1.2  christos     { "orA",	{ Ebh1, Ib } },
   2469  1.1.1.2  christos     { "adcA",	{ Ebh1, Ib } },
   2470  1.1.1.2  christos     { "sbbA",	{ Ebh1, Ib } },
   2471  1.1.1.2  christos     { "andA",	{ Ebh1, Ib } },
   2472  1.1.1.2  christos     { "subA",	{ Ebh1, Ib } },
   2473  1.1.1.2  christos     { "xorA",	{ Ebh1, Ib } },
   2474      1.1  christos     { "cmpA",	{ Eb, Ib } },
   2475      1.1  christos   },
   2476      1.1  christos   /* REG_81 */
   2477      1.1  christos   {
   2478  1.1.1.2  christos     { "addQ",	{ Evh1, Iv } },
   2479  1.1.1.2  christos     { "orQ",	{ Evh1, Iv } },
   2480  1.1.1.2  christos     { "adcQ",	{ Evh1, Iv } },
   2481  1.1.1.2  christos     { "sbbQ",	{ Evh1, Iv } },
   2482  1.1.1.2  christos     { "andQ",	{ Evh1, Iv } },
   2483  1.1.1.2  christos     { "subQ",	{ Evh1, Iv } },
   2484  1.1.1.2  christos     { "xorQ",	{ Evh1, Iv } },
   2485      1.1  christos     { "cmpQ",	{ Ev, Iv } },
   2486      1.1  christos   },
   2487      1.1  christos   /* REG_82 */
   2488      1.1  christos   {
   2489  1.1.1.2  christos     { "addQ",	{ Evh1, sIb } },
   2490  1.1.1.2  christos     { "orQ",	{ Evh1, sIb } },
   2491  1.1.1.2  christos     { "adcQ",	{ Evh1, sIb } },
   2492  1.1.1.2  christos     { "sbbQ",	{ Evh1, sIb } },
   2493  1.1.1.2  christos     { "andQ",	{ Evh1, sIb } },
   2494  1.1.1.2  christos     { "subQ",	{ Evh1, sIb } },
   2495  1.1.1.2  christos     { "xorQ",	{ Evh1, sIb } },
   2496      1.1  christos     { "cmpQ",	{ Ev, sIb } },
   2497      1.1  christos   },
   2498      1.1  christos   /* REG_8F */
   2499      1.1  christos   {
   2500      1.1  christos     { "popU",	{ stackEv } },
   2501      1.1  christos     { XOP_8F_TABLE (XOP_09) },
   2502      1.1  christos     { Bad_Opcode },
   2503      1.1  christos     { Bad_Opcode },
   2504      1.1  christos     { Bad_Opcode },
   2505      1.1  christos     { XOP_8F_TABLE (XOP_09) },
   2506      1.1  christos   },
   2507      1.1  christos   /* REG_C0 */
   2508      1.1  christos   {
   2509      1.1  christos     { "rolA",	{ Eb, Ib } },
   2510      1.1  christos     { "rorA",	{ Eb, Ib } },
   2511      1.1  christos     { "rclA",	{ Eb, Ib } },
   2512      1.1  christos     { "rcrA",	{ Eb, Ib } },
   2513      1.1  christos     { "shlA",	{ Eb, Ib } },
   2514      1.1  christos     { "shrA",	{ Eb, Ib } },
   2515      1.1  christos     { Bad_Opcode },
   2516      1.1  christos     { "sarA",	{ Eb, Ib } },
   2517      1.1  christos   },
   2518      1.1  christos   /* REG_C1 */
   2519      1.1  christos   {
   2520      1.1  christos     { "rolQ",	{ Ev, Ib } },
   2521      1.1  christos     { "rorQ",	{ Ev, Ib } },
   2522      1.1  christos     { "rclQ",	{ Ev, Ib } },
   2523      1.1  christos     { "rcrQ",	{ Ev, Ib } },
   2524      1.1  christos     { "shlQ",	{ Ev, Ib } },
   2525      1.1  christos     { "shrQ",	{ Ev, Ib } },
   2526      1.1  christos     { Bad_Opcode },
   2527      1.1  christos     { "sarQ",	{ Ev, Ib } },
   2528      1.1  christos   },
   2529      1.1  christos   /* REG_C6 */
   2530      1.1  christos   {
   2531  1.1.1.2  christos     { "movA",	{ Ebh3, Ib } },
   2532  1.1.1.2  christos     { Bad_Opcode },
   2533  1.1.1.2  christos     { Bad_Opcode },
   2534  1.1.1.2  christos     { Bad_Opcode },
   2535  1.1.1.2  christos     { Bad_Opcode },
   2536  1.1.1.2  christos     { Bad_Opcode },
   2537  1.1.1.2  christos     { Bad_Opcode },
   2538  1.1.1.2  christos     { MOD_TABLE (MOD_C6_REG_7) },
   2539      1.1  christos   },
   2540      1.1  christos   /* REG_C7 */
   2541      1.1  christos   {
   2542  1.1.1.2  christos     { "movQ",	{ Evh3, Iv } },
   2543  1.1.1.2  christos     { Bad_Opcode },
   2544  1.1.1.2  christos     { Bad_Opcode },
   2545  1.1.1.2  christos     { Bad_Opcode },
   2546  1.1.1.2  christos     { Bad_Opcode },
   2547  1.1.1.2  christos     { Bad_Opcode },
   2548  1.1.1.2  christos     { Bad_Opcode },
   2549  1.1.1.2  christos     { MOD_TABLE (MOD_C7_REG_7) },
   2550      1.1  christos   },
   2551      1.1  christos   /* REG_D0 */
   2552      1.1  christos   {
   2553      1.1  christos     { "rolA",	{ Eb, I1 } },
   2554      1.1  christos     { "rorA",	{ Eb, I1 } },
   2555      1.1  christos     { "rclA",	{ Eb, I1 } },
   2556      1.1  christos     { "rcrA",	{ Eb, I1 } },
   2557      1.1  christos     { "shlA",	{ Eb, I1 } },
   2558      1.1  christos     { "shrA",	{ Eb, I1 } },
   2559      1.1  christos     { Bad_Opcode },
   2560      1.1  christos     { "sarA",	{ Eb, I1 } },
   2561      1.1  christos   },
   2562      1.1  christos   /* REG_D1 */
   2563      1.1  christos   {
   2564      1.1  christos     { "rolQ",	{ Ev, I1 } },
   2565      1.1  christos     { "rorQ",	{ Ev, I1 } },
   2566      1.1  christos     { "rclQ",	{ Ev, I1 } },
   2567      1.1  christos     { "rcrQ",	{ Ev, I1 } },
   2568      1.1  christos     { "shlQ",	{ Ev, I1 } },
   2569      1.1  christos     { "shrQ",	{ Ev, I1 } },
   2570      1.1  christos     { Bad_Opcode },
   2571      1.1  christos     { "sarQ",	{ Ev, I1 } },
   2572      1.1  christos   },
   2573      1.1  christos   /* REG_D2 */
   2574      1.1  christos   {
   2575      1.1  christos     { "rolA",	{ Eb, CL } },
   2576      1.1  christos     { "rorA",	{ Eb, CL } },
   2577      1.1  christos     { "rclA",	{ Eb, CL } },
   2578      1.1  christos     { "rcrA",	{ Eb, CL } },
   2579      1.1  christos     { "shlA",	{ Eb, CL } },
   2580      1.1  christos     { "shrA",	{ Eb, CL } },
   2581      1.1  christos     { Bad_Opcode },
   2582      1.1  christos     { "sarA",	{ Eb, CL } },
   2583      1.1  christos   },
   2584      1.1  christos   /* REG_D3 */
   2585      1.1  christos   {
   2586      1.1  christos     { "rolQ",	{ Ev, CL } },
   2587      1.1  christos     { "rorQ",	{ Ev, CL } },
   2588      1.1  christos     { "rclQ",	{ Ev, CL } },
   2589      1.1  christos     { "rcrQ",	{ Ev, CL } },
   2590      1.1  christos     { "shlQ",	{ Ev, CL } },
   2591      1.1  christos     { "shrQ",	{ Ev, CL } },
   2592      1.1  christos     { Bad_Opcode },
   2593      1.1  christos     { "sarQ",	{ Ev, CL } },
   2594      1.1  christos   },
   2595      1.1  christos   /* REG_F6 */
   2596      1.1  christos   {
   2597      1.1  christos     { "testA",	{ Eb, Ib } },
   2598      1.1  christos     { Bad_Opcode },
   2599  1.1.1.2  christos     { "notA",	{ Ebh1 } },
   2600  1.1.1.2  christos     { "negA",	{ Ebh1 } },
   2601      1.1  christos     { "mulA",	{ Eb } },	/* Don't print the implicit %al register,  */
   2602      1.1  christos     { "imulA",	{ Eb } },	/* to distinguish these opcodes from other */
   2603      1.1  christos     { "divA",	{ Eb } },	/* mul/imul opcodes.  Do the same for div  */
   2604      1.1  christos     { "idivA",	{ Eb } },	/* and idiv for consistency.		   */
   2605      1.1  christos   },
   2606      1.1  christos   /* REG_F7 */
   2607      1.1  christos   {
   2608      1.1  christos     { "testQ",	{ Ev, Iv } },
   2609      1.1  christos     { Bad_Opcode },
   2610  1.1.1.2  christos     { "notQ",	{ Evh1 } },
   2611  1.1.1.2  christos     { "negQ",	{ Evh1 } },
   2612      1.1  christos     { "mulQ",	{ Ev } },	/* Don't print the implicit register.  */
   2613      1.1  christos     { "imulQ",	{ Ev } },
   2614      1.1  christos     { "divQ",	{ Ev } },
   2615      1.1  christos     { "idivQ",	{ Ev } },
   2616      1.1  christos   },
   2617      1.1  christos   /* REG_FE */
   2618      1.1  christos   {
   2619  1.1.1.2  christos     { "incA",	{ Ebh1 } },
   2620  1.1.1.2  christos     { "decA",	{ Ebh1 } },
   2621      1.1  christos   },
   2622      1.1  christos   /* REG_FF */
   2623      1.1  christos   {
   2624  1.1.1.2  christos     { "incQ",	{ Evh1 } },
   2625  1.1.1.2  christos     { "decQ",	{ Evh1 } },
   2626      1.1  christos     { "call{T|}", { indirEv } },
   2627      1.1  christos     { "Jcall{T|}", { indirEp } },
   2628      1.1  christos     { "jmp{T|}", { indirEv } },
   2629      1.1  christos     { "Jjmp{T|}", { indirEp } },
   2630      1.1  christos     { "pushU",	{ stackEv } },
   2631      1.1  christos     { Bad_Opcode },
   2632      1.1  christos   },
   2633      1.1  christos   /* REG_0F00 */
   2634      1.1  christos   {
   2635      1.1  christos     { "sldtD",	{ Sv } },
   2636      1.1  christos     { "strD",	{ Sv } },
   2637      1.1  christos     { "lldt",	{ Ew } },
   2638      1.1  christos     { "ltr",	{ Ew } },
   2639      1.1  christos     { "verr",	{ Ew } },
   2640      1.1  christos     { "verw",	{ Ew } },
   2641      1.1  christos     { Bad_Opcode },
   2642      1.1  christos     { Bad_Opcode },
   2643      1.1  christos   },
   2644      1.1  christos   /* REG_0F01 */
   2645      1.1  christos   {
   2646      1.1  christos     { MOD_TABLE (MOD_0F01_REG_0) },
   2647      1.1  christos     { MOD_TABLE (MOD_0F01_REG_1) },
   2648      1.1  christos     { MOD_TABLE (MOD_0F01_REG_2) },
   2649      1.1  christos     { MOD_TABLE (MOD_0F01_REG_3) },
   2650      1.1  christos     { "smswD",	{ Sv } },
   2651      1.1  christos     { Bad_Opcode },
   2652      1.1  christos     { "lmsw",	{ Ew } },
   2653      1.1  christos     { MOD_TABLE (MOD_0F01_REG_7) },
   2654      1.1  christos   },
   2655      1.1  christos   /* REG_0F0D */
   2656      1.1  christos   {
   2657      1.1  christos     { "prefetch",	{ Mb } },
   2658      1.1  christos     { "prefetchw",	{ Mb } },
   2659  1.1.1.2  christos     { "prefetch",	{ Mb } },
   2660  1.1.1.2  christos     { "prefetch",	{ Mb } },
   2661  1.1.1.2  christos     { "prefetch",	{ Mb } },
   2662  1.1.1.2  christos     { "prefetch",	{ Mb } },
   2663  1.1.1.2  christos     { "prefetch",	{ Mb } },
   2664  1.1.1.2  christos     { "prefetch",	{ Mb } },
   2665      1.1  christos   },
   2666      1.1  christos   /* REG_0F18 */
   2667      1.1  christos   {
   2668      1.1  christos     { MOD_TABLE (MOD_0F18_REG_0) },
   2669      1.1  christos     { MOD_TABLE (MOD_0F18_REG_1) },
   2670      1.1  christos     { MOD_TABLE (MOD_0F18_REG_2) },
   2671      1.1  christos     { MOD_TABLE (MOD_0F18_REG_3) },
   2672  1.1.1.2  christos     { MOD_TABLE (MOD_0F18_REG_4) },
   2673  1.1.1.2  christos     { MOD_TABLE (MOD_0F18_REG_5) },
   2674  1.1.1.2  christos     { MOD_TABLE (MOD_0F18_REG_6) },
   2675  1.1.1.2  christos     { MOD_TABLE (MOD_0F18_REG_7) },
   2676      1.1  christos   },
   2677      1.1  christos   /* REG_0F71 */
   2678      1.1  christos   {
   2679      1.1  christos     { Bad_Opcode },
   2680      1.1  christos     { Bad_Opcode },
   2681      1.1  christos     { MOD_TABLE (MOD_0F71_REG_2) },
   2682      1.1  christos     { Bad_Opcode },
   2683      1.1  christos     { MOD_TABLE (MOD_0F71_REG_4) },
   2684      1.1  christos     { Bad_Opcode },
   2685      1.1  christos     { MOD_TABLE (MOD_0F71_REG_6) },
   2686      1.1  christos   },
   2687      1.1  christos   /* REG_0F72 */
   2688      1.1  christos   {
   2689      1.1  christos     { Bad_Opcode },
   2690      1.1  christos     { Bad_Opcode },
   2691      1.1  christos     { MOD_TABLE (MOD_0F72_REG_2) },
   2692      1.1  christos     { Bad_Opcode },
   2693      1.1  christos     { MOD_TABLE (MOD_0F72_REG_4) },
   2694      1.1  christos     { Bad_Opcode },
   2695      1.1  christos     { MOD_TABLE (MOD_0F72_REG_6) },
   2696      1.1  christos   },
   2697      1.1  christos   /* REG_0F73 */
   2698      1.1  christos   {
   2699      1.1  christos     { Bad_Opcode },
   2700      1.1  christos     { Bad_Opcode },
   2701      1.1  christos     { MOD_TABLE (MOD_0F73_REG_2) },
   2702      1.1  christos     { MOD_TABLE (MOD_0F73_REG_3) },
   2703      1.1  christos     { Bad_Opcode },
   2704      1.1  christos     { Bad_Opcode },
   2705      1.1  christos     { MOD_TABLE (MOD_0F73_REG_6) },
   2706      1.1  christos     { MOD_TABLE (MOD_0F73_REG_7) },
   2707      1.1  christos   },
   2708      1.1  christos   /* REG_0FA6 */
   2709      1.1  christos   {
   2710      1.1  christos     { "montmul",	{ { OP_0f07, 0 } } },
   2711      1.1  christos     { "xsha1",		{ { OP_0f07, 0 } } },
   2712      1.1  christos     { "xsha256",	{ { OP_0f07, 0 } } },
   2713      1.1  christos   },
   2714      1.1  christos   /* REG_0FA7 */
   2715      1.1  christos   {
   2716      1.1  christos     { "xstore-rng",	{ { OP_0f07, 0 } } },
   2717      1.1  christos     { "xcrypt-ecb",	{ { OP_0f07, 0 } } },
   2718      1.1  christos     { "xcrypt-cbc",	{ { OP_0f07, 0 } } },
   2719      1.1  christos     { "xcrypt-ctr",	{ { OP_0f07, 0 } } },
   2720      1.1  christos     { "xcrypt-cfb",	{ { OP_0f07, 0 } } },
   2721      1.1  christos     { "xcrypt-ofb",	{ { OP_0f07, 0 } } },
   2722      1.1  christos   },
   2723      1.1  christos   /* REG_0FAE */
   2724      1.1  christos   {
   2725      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_0) },
   2726      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_1) },
   2727      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_2) },
   2728      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_3) },
   2729      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_4) },
   2730      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_5) },
   2731      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_6) },
   2732      1.1  christos     { MOD_TABLE (MOD_0FAE_REG_7) },
   2733      1.1  christos   },
   2734      1.1  christos   /* REG_0FBA */
   2735      1.1  christos   {
   2736      1.1  christos     { Bad_Opcode },
   2737      1.1  christos     { Bad_Opcode },
   2738      1.1  christos     { Bad_Opcode },
   2739      1.1  christos     { Bad_Opcode },
   2740      1.1  christos     { "btQ",	{ Ev, Ib } },
   2741  1.1.1.2  christos     { "btsQ",	{ Evh1, Ib } },
   2742  1.1.1.2  christos     { "btrQ",	{ Evh1, Ib } },
   2743  1.1.1.2  christos     { "btcQ",	{ Evh1, Ib } },
   2744      1.1  christos   },
   2745      1.1  christos   /* REG_0FC7 */
   2746      1.1  christos   {
   2747      1.1  christos     { Bad_Opcode },
   2748      1.1  christos     { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
   2749      1.1  christos     { Bad_Opcode },
   2750      1.1  christos     { Bad_Opcode },
   2751      1.1  christos     { Bad_Opcode },
   2752      1.1  christos     { Bad_Opcode },
   2753      1.1  christos     { MOD_TABLE (MOD_0FC7_REG_6) },
   2754      1.1  christos     { MOD_TABLE (MOD_0FC7_REG_7) },
   2755      1.1  christos   },
   2756      1.1  christos   /* REG_VEX_0F71 */
   2757      1.1  christos   {
   2758      1.1  christos     { Bad_Opcode },
   2759      1.1  christos     { Bad_Opcode },
   2760      1.1  christos     { MOD_TABLE (MOD_VEX_0F71_REG_2) },
   2761      1.1  christos     { Bad_Opcode },
   2762      1.1  christos     { MOD_TABLE (MOD_VEX_0F71_REG_4) },
   2763      1.1  christos     { Bad_Opcode },
   2764      1.1  christos     { MOD_TABLE (MOD_VEX_0F71_REG_6) },
   2765      1.1  christos   },
   2766      1.1  christos   /* REG_VEX_0F72 */
   2767      1.1  christos   {
   2768      1.1  christos     { Bad_Opcode },
   2769      1.1  christos     { Bad_Opcode },
   2770      1.1  christos     { MOD_TABLE (MOD_VEX_0F72_REG_2) },
   2771      1.1  christos     { Bad_Opcode },
   2772      1.1  christos     { MOD_TABLE (MOD_VEX_0F72_REG_4) },
   2773      1.1  christos     { Bad_Opcode },
   2774      1.1  christos     { MOD_TABLE (MOD_VEX_0F72_REG_6) },
   2775      1.1  christos   },
   2776      1.1  christos   /* REG_VEX_0F73 */
   2777      1.1  christos   {
   2778      1.1  christos     { Bad_Opcode },
   2779      1.1  christos     { Bad_Opcode },
   2780      1.1  christos     { MOD_TABLE (MOD_VEX_0F73_REG_2) },
   2781      1.1  christos     { MOD_TABLE (MOD_VEX_0F73_REG_3) },
   2782      1.1  christos     { Bad_Opcode },
   2783      1.1  christos     { Bad_Opcode },
   2784      1.1  christos     { MOD_TABLE (MOD_VEX_0F73_REG_6) },
   2785      1.1  christos     { MOD_TABLE (MOD_VEX_0F73_REG_7) },
   2786      1.1  christos   },
   2787      1.1  christos   /* REG_VEX_0FAE */
   2788      1.1  christos   {
   2789      1.1  christos     { Bad_Opcode },
   2790      1.1  christos     { Bad_Opcode },
   2791      1.1  christos     { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
   2792      1.1  christos     { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
   2793      1.1  christos   },
   2794      1.1  christos   /* REG_VEX_0F38F3 */
   2795      1.1  christos   {
   2796      1.1  christos     { Bad_Opcode },
   2797      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
   2798      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
   2799      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
   2800      1.1  christos   },
   2801      1.1  christos   /* REG_XOP_LWPCB */
   2802      1.1  christos   {
   2803      1.1  christos     { "llwpcb", { { OP_LWPCB_E, 0 } } },
   2804      1.1  christos     { "slwpcb",	{ { OP_LWPCB_E, 0 } } },
   2805      1.1  christos   },
   2806      1.1  christos   /* REG_XOP_LWP */
   2807      1.1  christos   {
   2808      1.1  christos     { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
   2809      1.1  christos     { "lwpval",	{ { OP_LWP_E, 0 }, Ed, Iq } },
   2810      1.1  christos   },
   2811      1.1  christos   /* REG_XOP_TBM_01 */
   2812      1.1  christos   {
   2813      1.1  christos     { Bad_Opcode },
   2814      1.1  christos     { "blcfill",	{ { OP_LWP_E, 0 }, Ev } },
   2815      1.1  christos     { "blsfill",	{ { OP_LWP_E, 0 }, Ev } },
   2816      1.1  christos     { "blcs",	{ { OP_LWP_E, 0 }, Ev } },
   2817      1.1  christos     { "tzmsk",	{ { OP_LWP_E, 0 }, Ev } },
   2818      1.1  christos     { "blcic",	{ { OP_LWP_E, 0 }, Ev } },
   2819      1.1  christos     { "blsic",	{ { OP_LWP_E, 0 }, Ev } },
   2820      1.1  christos     { "t1mskc",	{ { OP_LWP_E, 0 }, Ev } },
   2821      1.1  christos   },
   2822      1.1  christos   /* REG_XOP_TBM_02 */
   2823      1.1  christos   {
   2824      1.1  christos     { Bad_Opcode },
   2825      1.1  christos     { "blcmsk",	{ { OP_LWP_E, 0 }, Ev } },
   2826      1.1  christos     { Bad_Opcode },
   2827      1.1  christos     { Bad_Opcode },
   2828      1.1  christos     { Bad_Opcode },
   2829      1.1  christos     { Bad_Opcode },
   2830      1.1  christos     { "blci",	{ { OP_LWP_E, 0 }, Ev } },
   2831      1.1  christos   },
   2832      1.1  christos };
   2833      1.1  christos 
   2834      1.1  christos static const struct dis386 prefix_table[][4] = {
   2835      1.1  christos   /* PREFIX_90 */
   2836      1.1  christos   {
   2837      1.1  christos     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
   2838      1.1  christos     { "pause", { XX } },
   2839      1.1  christos     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
   2840      1.1  christos   },
   2841      1.1  christos 
   2842      1.1  christos   /* PREFIX_0F10 */
   2843      1.1  christos   {
   2844      1.1  christos     { "movups",	{ XM, EXx } },
   2845      1.1  christos     { "movss",	{ XM, EXd } },
   2846      1.1  christos     { "movupd",	{ XM, EXx } },
   2847      1.1  christos     { "movsd",	{ XM, EXq } },
   2848      1.1  christos   },
   2849      1.1  christos 
   2850      1.1  christos   /* PREFIX_0F11 */
   2851      1.1  christos   {
   2852      1.1  christos     { "movups",	{ EXxS, XM } },
   2853      1.1  christos     { "movss",	{ EXdS, XM } },
   2854      1.1  christos     { "movupd",	{ EXxS, XM } },
   2855      1.1  christos     { "movsd",	{ EXqS, XM } },
   2856      1.1  christos   },
   2857      1.1  christos 
   2858      1.1  christos   /* PREFIX_0F12 */
   2859      1.1  christos   {
   2860      1.1  christos     { MOD_TABLE (MOD_0F12_PREFIX_0) },
   2861      1.1  christos     { "movsldup", { XM, EXx } },
   2862      1.1  christos     { "movlpd",	{ XM, EXq } },
   2863      1.1  christos     { "movddup", { XM, EXq } },
   2864      1.1  christos   },
   2865      1.1  christos 
   2866      1.1  christos   /* PREFIX_0F16 */
   2867      1.1  christos   {
   2868      1.1  christos     { MOD_TABLE (MOD_0F16_PREFIX_0) },
   2869      1.1  christos     { "movshdup", { XM, EXx } },
   2870      1.1  christos     { "movhpd",	{ XM, EXq } },
   2871      1.1  christos   },
   2872      1.1  christos 
   2873      1.1  christos   /* PREFIX_0F2A */
   2874      1.1  christos   {
   2875      1.1  christos     { "cvtpi2ps", { XM, EMCq } },
   2876      1.1  christos     { "cvtsi2ss%LQ", { XM, Ev } },
   2877      1.1  christos     { "cvtpi2pd", { XM, EMCq } },
   2878      1.1  christos     { "cvtsi2sd%LQ", { XM, Ev } },
   2879      1.1  christos   },
   2880      1.1  christos 
   2881      1.1  christos   /* PREFIX_0F2B */
   2882      1.1  christos   {
   2883      1.1  christos     { MOD_TABLE (MOD_0F2B_PREFIX_0) },
   2884      1.1  christos     { MOD_TABLE (MOD_0F2B_PREFIX_1) },
   2885      1.1  christos     { MOD_TABLE (MOD_0F2B_PREFIX_2) },
   2886      1.1  christos     { MOD_TABLE (MOD_0F2B_PREFIX_3) },
   2887      1.1  christos   },
   2888      1.1  christos 
   2889      1.1  christos   /* PREFIX_0F2C */
   2890      1.1  christos   {
   2891      1.1  christos     { "cvttps2pi", { MXC, EXq } },
   2892      1.1  christos     { "cvttss2siY", { Gv, EXd } },
   2893      1.1  christos     { "cvttpd2pi", { MXC, EXx } },
   2894      1.1  christos     { "cvttsd2siY", { Gv, EXq } },
   2895      1.1  christos   },
   2896      1.1  christos 
   2897      1.1  christos   /* PREFIX_0F2D */
   2898      1.1  christos   {
   2899      1.1  christos     { "cvtps2pi", { MXC, EXq } },
   2900      1.1  christos     { "cvtss2siY", { Gv, EXd } },
   2901      1.1  christos     { "cvtpd2pi", { MXC, EXx } },
   2902      1.1  christos     { "cvtsd2siY", { Gv, EXq } },
   2903      1.1  christos   },
   2904      1.1  christos 
   2905      1.1  christos   /* PREFIX_0F2E */
   2906      1.1  christos   {
   2907  1.1.1.2  christos     { "ucomiss",{ XM, EXd } },
   2908      1.1  christos     { Bad_Opcode },
   2909  1.1.1.2  christos     { "ucomisd",{ XM, EXq } },
   2910      1.1  christos   },
   2911      1.1  christos 
   2912      1.1  christos   /* PREFIX_0F2F */
   2913      1.1  christos   {
   2914      1.1  christos     { "comiss",	{ XM, EXd } },
   2915      1.1  christos     { Bad_Opcode },
   2916      1.1  christos     { "comisd",	{ XM, EXq } },
   2917      1.1  christos   },
   2918      1.1  christos 
   2919      1.1  christos   /* PREFIX_0F51 */
   2920      1.1  christos   {
   2921      1.1  christos     { "sqrtps", { XM, EXx } },
   2922      1.1  christos     { "sqrtss", { XM, EXd } },
   2923      1.1  christos     { "sqrtpd", { XM, EXx } },
   2924      1.1  christos     { "sqrtsd",	{ XM, EXq } },
   2925      1.1  christos   },
   2926      1.1  christos 
   2927      1.1  christos   /* PREFIX_0F52 */
   2928      1.1  christos   {
   2929      1.1  christos     { "rsqrtps",{ XM, EXx } },
   2930      1.1  christos     { "rsqrtss",{ XM, EXd } },
   2931      1.1  christos   },
   2932      1.1  christos 
   2933      1.1  christos   /* PREFIX_0F53 */
   2934      1.1  christos   {
   2935      1.1  christos     { "rcpps",	{ XM, EXx } },
   2936      1.1  christos     { "rcpss",	{ XM, EXd } },
   2937      1.1  christos   },
   2938      1.1  christos 
   2939      1.1  christos   /* PREFIX_0F58 */
   2940      1.1  christos   {
   2941      1.1  christos     { "addps", { XM, EXx } },
   2942      1.1  christos     { "addss", { XM, EXd } },
   2943      1.1  christos     { "addpd", { XM, EXx } },
   2944      1.1  christos     { "addsd", { XM, EXq } },
   2945      1.1  christos   },
   2946      1.1  christos 
   2947      1.1  christos   /* PREFIX_0F59 */
   2948      1.1  christos   {
   2949      1.1  christos     { "mulps",	{ XM, EXx } },
   2950      1.1  christos     { "mulss",	{ XM, EXd } },
   2951      1.1  christos     { "mulpd",	{ XM, EXx } },
   2952      1.1  christos     { "mulsd",	{ XM, EXq } },
   2953      1.1  christos   },
   2954      1.1  christos 
   2955      1.1  christos   /* PREFIX_0F5A */
   2956      1.1  christos   {
   2957      1.1  christos     { "cvtps2pd", { XM, EXq } },
   2958      1.1  christos     { "cvtss2sd", { XM, EXd } },
   2959      1.1  christos     { "cvtpd2ps", { XM, EXx } },
   2960      1.1  christos     { "cvtsd2ss", { XM, EXq } },
   2961      1.1  christos   },
   2962      1.1  christos 
   2963      1.1  christos   /* PREFIX_0F5B */
   2964      1.1  christos   {
   2965      1.1  christos     { "cvtdq2ps", { XM, EXx } },
   2966      1.1  christos     { "cvttps2dq", { XM, EXx } },
   2967      1.1  christos     { "cvtps2dq", { XM, EXx } },
   2968      1.1  christos   },
   2969      1.1  christos 
   2970      1.1  christos   /* PREFIX_0F5C */
   2971      1.1  christos   {
   2972      1.1  christos     { "subps",	{ XM, EXx } },
   2973      1.1  christos     { "subss",	{ XM, EXd } },
   2974      1.1  christos     { "subpd",	{ XM, EXx } },
   2975      1.1  christos     { "subsd",	{ XM, EXq } },
   2976      1.1  christos   },
   2977      1.1  christos 
   2978      1.1  christos   /* PREFIX_0F5D */
   2979      1.1  christos   {
   2980      1.1  christos     { "minps",	{ XM, EXx } },
   2981      1.1  christos     { "minss",	{ XM, EXd } },
   2982      1.1  christos     { "minpd",	{ XM, EXx } },
   2983      1.1  christos     { "minsd",	{ XM, EXq } },
   2984      1.1  christos   },
   2985      1.1  christos 
   2986      1.1  christos   /* PREFIX_0F5E */
   2987      1.1  christos   {
   2988      1.1  christos     { "divps",	{ XM, EXx } },
   2989      1.1  christos     { "divss",	{ XM, EXd } },
   2990      1.1  christos     { "divpd",	{ XM, EXx } },
   2991      1.1  christos     { "divsd",	{ XM, EXq } },
   2992      1.1  christos   },
   2993      1.1  christos 
   2994      1.1  christos   /* PREFIX_0F5F */
   2995      1.1  christos   {
   2996      1.1  christos     { "maxps",	{ XM, EXx } },
   2997      1.1  christos     { "maxss",	{ XM, EXd } },
   2998      1.1  christos     { "maxpd",	{ XM, EXx } },
   2999      1.1  christos     { "maxsd",	{ XM, EXq } },
   3000      1.1  christos   },
   3001      1.1  christos 
   3002      1.1  christos   /* PREFIX_0F60 */
   3003      1.1  christos   {
   3004      1.1  christos     { "punpcklbw",{ MX, EMd } },
   3005      1.1  christos     { Bad_Opcode },
   3006      1.1  christos     { "punpcklbw",{ MX, EMx } },
   3007      1.1  christos   },
   3008      1.1  christos 
   3009      1.1  christos   /* PREFIX_0F61 */
   3010      1.1  christos   {
   3011      1.1  christos     { "punpcklwd",{ MX, EMd } },
   3012      1.1  christos     { Bad_Opcode },
   3013      1.1  christos     { "punpcklwd",{ MX, EMx } },
   3014      1.1  christos   },
   3015      1.1  christos 
   3016      1.1  christos   /* PREFIX_0F62 */
   3017      1.1  christos   {
   3018      1.1  christos     { "punpckldq",{ MX, EMd } },
   3019      1.1  christos     { Bad_Opcode },
   3020      1.1  christos     { "punpckldq",{ MX, EMx } },
   3021      1.1  christos   },
   3022      1.1  christos 
   3023      1.1  christos   /* PREFIX_0F6C */
   3024      1.1  christos   {
   3025      1.1  christos     { Bad_Opcode },
   3026      1.1  christos     { Bad_Opcode },
   3027      1.1  christos     { "punpcklqdq", { XM, EXx } },
   3028      1.1  christos   },
   3029      1.1  christos 
   3030      1.1  christos   /* PREFIX_0F6D */
   3031      1.1  christos   {
   3032      1.1  christos     { Bad_Opcode },
   3033      1.1  christos     { Bad_Opcode },
   3034      1.1  christos     { "punpckhqdq", { XM, EXx } },
   3035      1.1  christos   },
   3036      1.1  christos 
   3037      1.1  christos   /* PREFIX_0F6F */
   3038      1.1  christos   {
   3039      1.1  christos     { "movq",	{ MX, EM } },
   3040      1.1  christos     { "movdqu",	{ XM, EXx } },
   3041      1.1  christos     { "movdqa",	{ XM, EXx } },
   3042      1.1  christos   },
   3043      1.1  christos 
   3044      1.1  christos   /* PREFIX_0F70 */
   3045      1.1  christos   {
   3046      1.1  christos     { "pshufw",	{ MX, EM, Ib } },
   3047      1.1  christos     { "pshufhw",{ XM, EXx, Ib } },
   3048      1.1  christos     { "pshufd",	{ XM, EXx, Ib } },
   3049      1.1  christos     { "pshuflw",{ XM, EXx, Ib } },
   3050      1.1  christos   },
   3051      1.1  christos 
   3052      1.1  christos   /* PREFIX_0F73_REG_3 */
   3053      1.1  christos   {
   3054      1.1  christos     { Bad_Opcode },
   3055      1.1  christos     { Bad_Opcode },
   3056      1.1  christos     { "psrldq",	{ XS, Ib } },
   3057      1.1  christos   },
   3058      1.1  christos 
   3059      1.1  christos   /* PREFIX_0F73_REG_7 */
   3060      1.1  christos   {
   3061      1.1  christos     { Bad_Opcode },
   3062      1.1  christos     { Bad_Opcode },
   3063      1.1  christos     { "pslldq",	{ XS, Ib } },
   3064      1.1  christos   },
   3065      1.1  christos 
   3066      1.1  christos   /* PREFIX_0F78 */
   3067      1.1  christos   {
   3068      1.1  christos     {"vmread",	{ Em, Gm } },
   3069      1.1  christos     { Bad_Opcode },
   3070      1.1  christos     {"extrq",	{ XS, Ib, Ib } },
   3071      1.1  christos     {"insertq",	{ XM, XS, Ib, Ib } },
   3072      1.1  christos   },
   3073      1.1  christos 
   3074      1.1  christos   /* PREFIX_0F79 */
   3075      1.1  christos   {
   3076      1.1  christos     {"vmwrite",	{ Gm, Em } },
   3077      1.1  christos     { Bad_Opcode },
   3078      1.1  christos     {"extrq",	{ XM, XS } },
   3079      1.1  christos     {"insertq",	{ XM, XS } },
   3080      1.1  christos   },
   3081      1.1  christos 
   3082      1.1  christos   /* PREFIX_0F7C */
   3083      1.1  christos   {
   3084      1.1  christos     { Bad_Opcode },
   3085      1.1  christos     { Bad_Opcode },
   3086      1.1  christos     { "haddpd",	{ XM, EXx } },
   3087      1.1  christos     { "haddps",	{ XM, EXx } },
   3088      1.1  christos   },
   3089      1.1  christos 
   3090      1.1  christos   /* PREFIX_0F7D */
   3091      1.1  christos   {
   3092      1.1  christos     { Bad_Opcode },
   3093      1.1  christos     { Bad_Opcode },
   3094      1.1  christos     { "hsubpd",	{ XM, EXx } },
   3095      1.1  christos     { "hsubps",	{ XM, EXx } },
   3096      1.1  christos   },
   3097      1.1  christos 
   3098      1.1  christos   /* PREFIX_0F7E */
   3099      1.1  christos   {
   3100      1.1  christos     { "movK",	{ Edq, MX } },
   3101      1.1  christos     { "movq",	{ XM, EXq } },
   3102      1.1  christos     { "movK",	{ Edq, XM } },
   3103      1.1  christos   },
   3104      1.1  christos 
   3105      1.1  christos   /* PREFIX_0F7F */
   3106      1.1  christos   {
   3107      1.1  christos     { "movq",	{ EMS, MX } },
   3108      1.1  christos     { "movdqu",	{ EXxS, XM } },
   3109      1.1  christos     { "movdqa",	{ EXxS, XM } },
   3110      1.1  christos   },
   3111      1.1  christos 
   3112      1.1  christos   /* PREFIX_0FAE_REG_0 */
   3113      1.1  christos   {
   3114      1.1  christos     { Bad_Opcode },
   3115      1.1  christos     { "rdfsbase", { Ev } },
   3116      1.1  christos   },
   3117      1.1  christos 
   3118      1.1  christos   /* PREFIX_0FAE_REG_1 */
   3119      1.1  christos   {
   3120      1.1  christos     { Bad_Opcode },
   3121      1.1  christos     { "rdgsbase", { Ev } },
   3122      1.1  christos   },
   3123      1.1  christos 
   3124      1.1  christos   /* PREFIX_0FAE_REG_2 */
   3125      1.1  christos   {
   3126      1.1  christos     { Bad_Opcode },
   3127      1.1  christos     { "wrfsbase", { Ev } },
   3128      1.1  christos   },
   3129      1.1  christos 
   3130      1.1  christos   /* PREFIX_0FAE_REG_3 */
   3131      1.1  christos   {
   3132      1.1  christos     { Bad_Opcode },
   3133      1.1  christos     { "wrgsbase", { Ev } },
   3134      1.1  christos   },
   3135      1.1  christos 
   3136      1.1  christos   /* PREFIX_0FB8 */
   3137      1.1  christos   {
   3138      1.1  christos     { Bad_Opcode },
   3139      1.1  christos     { "popcntS", { Gv, Ev } },
   3140      1.1  christos   },
   3141      1.1  christos 
   3142      1.1  christos   /* PREFIX_0FBC */
   3143      1.1  christos   {
   3144      1.1  christos     { "bsfS",	{ Gv, Ev } },
   3145      1.1  christos     { "tzcntS",	{ Gv, Ev } },
   3146      1.1  christos     { "bsfS",	{ Gv, Ev } },
   3147      1.1  christos   },
   3148      1.1  christos 
   3149      1.1  christos   /* PREFIX_0FBD */
   3150      1.1  christos   {
   3151      1.1  christos     { "bsrS",	{ Gv, Ev } },
   3152      1.1  christos     { "lzcntS",	{ Gv, Ev } },
   3153      1.1  christos     { "bsrS",	{ Gv, Ev } },
   3154      1.1  christos   },
   3155      1.1  christos 
   3156      1.1  christos   /* PREFIX_0FC2 */
   3157      1.1  christos   {
   3158      1.1  christos     { "cmpps",	{ XM, EXx, CMP } },
   3159      1.1  christos     { "cmpss",	{ XM, EXd, CMP } },
   3160      1.1  christos     { "cmppd",	{ XM, EXx, CMP } },
   3161      1.1  christos     { "cmpsd",	{ XM, EXq, CMP } },
   3162      1.1  christos   },
   3163      1.1  christos 
   3164      1.1  christos   /* PREFIX_0FC3 */
   3165      1.1  christos   {
   3166      1.1  christos     { "movntiS", { Ma, Gv } },
   3167      1.1  christos   },
   3168      1.1  christos 
   3169      1.1  christos   /* PREFIX_0FC7_REG_6 */
   3170      1.1  christos   {
   3171      1.1  christos     { "vmptrld",{ Mq } },
   3172      1.1  christos     { "vmxon",	{ Mq } },
   3173      1.1  christos     { "vmclear",{ Mq } },
   3174      1.1  christos   },
   3175      1.1  christos 
   3176      1.1  christos   /* PREFIX_0FD0 */
   3177      1.1  christos   {
   3178      1.1  christos     { Bad_Opcode },
   3179      1.1  christos     { Bad_Opcode },
   3180      1.1  christos     { "addsubpd", { XM, EXx } },
   3181      1.1  christos     { "addsubps", { XM, EXx } },
   3182      1.1  christos   },
   3183      1.1  christos 
   3184      1.1  christos   /* PREFIX_0FD6 */
   3185      1.1  christos   {
   3186      1.1  christos     { Bad_Opcode },
   3187      1.1  christos     { "movq2dq",{ XM, MS } },
   3188      1.1  christos     { "movq",	{ EXqS, XM } },
   3189      1.1  christos     { "movdq2q",{ MX, XS } },
   3190      1.1  christos   },
   3191      1.1  christos 
   3192      1.1  christos   /* PREFIX_0FE6 */
   3193      1.1  christos   {
   3194      1.1  christos     { Bad_Opcode },
   3195      1.1  christos     { "cvtdq2pd", { XM, EXq } },
   3196      1.1  christos     { "cvttpd2dq", { XM, EXx } },
   3197      1.1  christos     { "cvtpd2dq", { XM, EXx } },
   3198      1.1  christos   },
   3199      1.1  christos 
   3200      1.1  christos   /* PREFIX_0FE7 */
   3201      1.1  christos   {
   3202      1.1  christos     { "movntq",	{ Mq, MX } },
   3203      1.1  christos     { Bad_Opcode },
   3204      1.1  christos     { MOD_TABLE (MOD_0FE7_PREFIX_2) },
   3205      1.1  christos   },
   3206      1.1  christos 
   3207      1.1  christos   /* PREFIX_0FF0 */
   3208      1.1  christos   {
   3209      1.1  christos     { Bad_Opcode },
   3210      1.1  christos     { Bad_Opcode },
   3211      1.1  christos     { Bad_Opcode },
   3212      1.1  christos     { MOD_TABLE (MOD_0FF0_PREFIX_3) },
   3213      1.1  christos   },
   3214      1.1  christos 
   3215      1.1  christos   /* PREFIX_0FF7 */
   3216      1.1  christos   {
   3217      1.1  christos     { "maskmovq", { MX, MS } },
   3218      1.1  christos     { Bad_Opcode },
   3219      1.1  christos     { "maskmovdqu", { XM, XS } },
   3220      1.1  christos   },
   3221      1.1  christos 
   3222      1.1  christos   /* PREFIX_0F3810 */
   3223      1.1  christos   {
   3224      1.1  christos     { Bad_Opcode },
   3225      1.1  christos     { Bad_Opcode },
   3226      1.1  christos     { "pblendvb", { XM, EXx, XMM0 } },
   3227      1.1  christos   },
   3228      1.1  christos 
   3229      1.1  christos   /* PREFIX_0F3814 */
   3230      1.1  christos   {
   3231      1.1  christos     { Bad_Opcode },
   3232      1.1  christos     { Bad_Opcode },
   3233      1.1  christos     { "blendvps", { XM, EXx, XMM0 } },
   3234      1.1  christos   },
   3235      1.1  christos 
   3236      1.1  christos   /* PREFIX_0F3815 */
   3237      1.1  christos   {
   3238      1.1  christos     { Bad_Opcode },
   3239      1.1  christos     { Bad_Opcode },
   3240      1.1  christos     { "blendvpd", { XM, EXx, XMM0 } },
   3241      1.1  christos   },
   3242      1.1  christos 
   3243      1.1  christos   /* PREFIX_0F3817 */
   3244      1.1  christos   {
   3245      1.1  christos     { Bad_Opcode },
   3246      1.1  christos     { Bad_Opcode },
   3247      1.1  christos     { "ptest",  { XM, EXx } },
   3248      1.1  christos   },
   3249      1.1  christos 
   3250      1.1  christos   /* PREFIX_0F3820 */
   3251      1.1  christos   {
   3252      1.1  christos     { Bad_Opcode },
   3253      1.1  christos     { Bad_Opcode },
   3254      1.1  christos     { "pmovsxbw", { XM, EXq } },
   3255      1.1  christos   },
   3256      1.1  christos 
   3257      1.1  christos   /* PREFIX_0F3821 */
   3258      1.1  christos   {
   3259      1.1  christos     { Bad_Opcode },
   3260      1.1  christos     { Bad_Opcode },
   3261      1.1  christos     { "pmovsxbd", { XM, EXd } },
   3262      1.1  christos   },
   3263      1.1  christos 
   3264      1.1  christos   /* PREFIX_0F3822 */
   3265      1.1  christos   {
   3266      1.1  christos     { Bad_Opcode },
   3267      1.1  christos     { Bad_Opcode },
   3268      1.1  christos     { "pmovsxbq", { XM, EXw } },
   3269      1.1  christos   },
   3270      1.1  christos 
   3271      1.1  christos   /* PREFIX_0F3823 */
   3272      1.1  christos   {
   3273      1.1  christos     { Bad_Opcode },
   3274      1.1  christos     { Bad_Opcode },
   3275      1.1  christos     { "pmovsxwd", { XM, EXq } },
   3276      1.1  christos   },
   3277      1.1  christos 
   3278      1.1  christos   /* PREFIX_0F3824 */
   3279      1.1  christos   {
   3280      1.1  christos     { Bad_Opcode },
   3281      1.1  christos     { Bad_Opcode },
   3282      1.1  christos     { "pmovsxwq", { XM, EXd } },
   3283      1.1  christos   },
   3284      1.1  christos 
   3285      1.1  christos   /* PREFIX_0F3825 */
   3286      1.1  christos   {
   3287      1.1  christos     { Bad_Opcode },
   3288      1.1  christos     { Bad_Opcode },
   3289      1.1  christos     { "pmovsxdq", { XM, EXq } },
   3290      1.1  christos   },
   3291      1.1  christos 
   3292      1.1  christos   /* PREFIX_0F3828 */
   3293      1.1  christos   {
   3294      1.1  christos     { Bad_Opcode },
   3295      1.1  christos     { Bad_Opcode },
   3296      1.1  christos     { "pmuldq", { XM, EXx } },
   3297      1.1  christos   },
   3298      1.1  christos 
   3299      1.1  christos   /* PREFIX_0F3829 */
   3300      1.1  christos   {
   3301      1.1  christos     { Bad_Opcode },
   3302      1.1  christos     { Bad_Opcode },
   3303      1.1  christos     { "pcmpeqq", { XM, EXx } },
   3304      1.1  christos   },
   3305      1.1  christos 
   3306      1.1  christos   /* PREFIX_0F382A */
   3307      1.1  christos   {
   3308      1.1  christos     { Bad_Opcode },
   3309      1.1  christos     { Bad_Opcode },
   3310      1.1  christos     { MOD_TABLE (MOD_0F382A_PREFIX_2) },
   3311      1.1  christos   },
   3312      1.1  christos 
   3313      1.1  christos   /* PREFIX_0F382B */
   3314      1.1  christos   {
   3315      1.1  christos     { Bad_Opcode },
   3316      1.1  christos     { Bad_Opcode },
   3317      1.1  christos     { "packusdw", { XM, EXx } },
   3318      1.1  christos   },
   3319      1.1  christos 
   3320      1.1  christos   /* PREFIX_0F3830 */
   3321      1.1  christos   {
   3322      1.1  christos     { Bad_Opcode },
   3323      1.1  christos     { Bad_Opcode },
   3324      1.1  christos     { "pmovzxbw", { XM, EXq } },
   3325      1.1  christos   },
   3326      1.1  christos 
   3327      1.1  christos   /* PREFIX_0F3831 */
   3328      1.1  christos   {
   3329      1.1  christos     { Bad_Opcode },
   3330      1.1  christos     { Bad_Opcode },
   3331      1.1  christos     { "pmovzxbd", { XM, EXd } },
   3332      1.1  christos   },
   3333      1.1  christos 
   3334      1.1  christos   /* PREFIX_0F3832 */
   3335      1.1  christos   {
   3336      1.1  christos     { Bad_Opcode },
   3337      1.1  christos     { Bad_Opcode },
   3338      1.1  christos     { "pmovzxbq", { XM, EXw } },
   3339      1.1  christos   },
   3340      1.1  christos 
   3341      1.1  christos   /* PREFIX_0F3833 */
   3342      1.1  christos   {
   3343      1.1  christos     { Bad_Opcode },
   3344      1.1  christos     { Bad_Opcode },
   3345      1.1  christos     { "pmovzxwd", { XM, EXq } },
   3346      1.1  christos   },
   3347      1.1  christos 
   3348      1.1  christos   /* PREFIX_0F3834 */
   3349      1.1  christos   {
   3350      1.1  christos     { Bad_Opcode },
   3351      1.1  christos     { Bad_Opcode },
   3352      1.1  christos     { "pmovzxwq", { XM, EXd } },
   3353      1.1  christos   },
   3354      1.1  christos 
   3355      1.1  christos   /* PREFIX_0F3835 */
   3356      1.1  christos   {
   3357      1.1  christos     { Bad_Opcode },
   3358      1.1  christos     { Bad_Opcode },
   3359      1.1  christos     { "pmovzxdq", { XM, EXq } },
   3360      1.1  christos   },
   3361      1.1  christos 
   3362      1.1  christos   /* PREFIX_0F3837 */
   3363      1.1  christos   {
   3364      1.1  christos     { Bad_Opcode },
   3365      1.1  christos     { Bad_Opcode },
   3366      1.1  christos     { "pcmpgtq", { XM, EXx } },
   3367      1.1  christos   },
   3368      1.1  christos 
   3369      1.1  christos   /* PREFIX_0F3838 */
   3370      1.1  christos   {
   3371      1.1  christos     { Bad_Opcode },
   3372      1.1  christos     { Bad_Opcode },
   3373      1.1  christos     { "pminsb",	{ XM, EXx } },
   3374      1.1  christos   },
   3375      1.1  christos 
   3376      1.1  christos   /* PREFIX_0F3839 */
   3377      1.1  christos   {
   3378      1.1  christos     { Bad_Opcode },
   3379      1.1  christos     { Bad_Opcode },
   3380      1.1  christos     { "pminsd",	{ XM, EXx } },
   3381      1.1  christos   },
   3382      1.1  christos 
   3383      1.1  christos   /* PREFIX_0F383A */
   3384      1.1  christos   {
   3385      1.1  christos     { Bad_Opcode },
   3386      1.1  christos     { Bad_Opcode },
   3387      1.1  christos     { "pminuw",	{ XM, EXx } },
   3388      1.1  christos   },
   3389      1.1  christos 
   3390      1.1  christos   /* PREFIX_0F383B */
   3391      1.1  christos   {
   3392      1.1  christos     { Bad_Opcode },
   3393      1.1  christos     { Bad_Opcode },
   3394      1.1  christos     { "pminud",	{ XM, EXx } },
   3395      1.1  christos   },
   3396      1.1  christos 
   3397      1.1  christos   /* PREFIX_0F383C */
   3398      1.1  christos   {
   3399      1.1  christos     { Bad_Opcode },
   3400      1.1  christos     { Bad_Opcode },
   3401      1.1  christos     { "pmaxsb",	{ XM, EXx } },
   3402      1.1  christos   },
   3403      1.1  christos 
   3404      1.1  christos   /* PREFIX_0F383D */
   3405      1.1  christos   {
   3406      1.1  christos     { Bad_Opcode },
   3407      1.1  christos     { Bad_Opcode },
   3408      1.1  christos     { "pmaxsd",	{ XM, EXx } },
   3409      1.1  christos   },
   3410      1.1  christos 
   3411      1.1  christos   /* PREFIX_0F383E */
   3412      1.1  christos   {
   3413      1.1  christos     { Bad_Opcode },
   3414      1.1  christos     { Bad_Opcode },
   3415      1.1  christos     { "pmaxuw", { XM, EXx } },
   3416      1.1  christos   },
   3417      1.1  christos 
   3418      1.1  christos   /* PREFIX_0F383F */
   3419      1.1  christos   {
   3420      1.1  christos     { Bad_Opcode },
   3421      1.1  christos     { Bad_Opcode },
   3422      1.1  christos     { "pmaxud", { XM, EXx } },
   3423      1.1  christos   },
   3424      1.1  christos 
   3425      1.1  christos   /* PREFIX_0F3840 */
   3426      1.1  christos   {
   3427      1.1  christos     { Bad_Opcode },
   3428      1.1  christos     { Bad_Opcode },
   3429      1.1  christos     { "pmulld", { XM, EXx } },
   3430      1.1  christos   },
   3431      1.1  christos 
   3432      1.1  christos   /* PREFIX_0F3841 */
   3433      1.1  christos   {
   3434      1.1  christos     { Bad_Opcode },
   3435      1.1  christos     { Bad_Opcode },
   3436      1.1  christos     { "phminposuw", { XM, EXx } },
   3437      1.1  christos   },
   3438      1.1  christos 
   3439      1.1  christos   /* PREFIX_0F3880 */
   3440      1.1  christos   {
   3441      1.1  christos     { Bad_Opcode },
   3442      1.1  christos     { Bad_Opcode },
   3443      1.1  christos     { "invept",	{ Gm, Mo } },
   3444      1.1  christos   },
   3445      1.1  christos 
   3446      1.1  christos   /* PREFIX_0F3881 */
   3447      1.1  christos   {
   3448      1.1  christos     { Bad_Opcode },
   3449      1.1  christos     { Bad_Opcode },
   3450      1.1  christos     { "invvpid", { Gm, Mo } },
   3451      1.1  christos   },
   3452      1.1  christos 
   3453  1.1.1.2  christos   /* PREFIX_0F3882 */
   3454  1.1.1.2  christos   {
   3455  1.1.1.2  christos     { Bad_Opcode },
   3456  1.1.1.2  christos     { Bad_Opcode },
   3457  1.1.1.2  christos     { "invpcid", { Gm, M } },
   3458  1.1.1.2  christos   },
   3459  1.1.1.2  christos 
   3460      1.1  christos   /* PREFIX_0F38DB */
   3461      1.1  christos   {
   3462      1.1  christos     { Bad_Opcode },
   3463      1.1  christos     { Bad_Opcode },
   3464      1.1  christos     { "aesimc", { XM, EXx } },
   3465      1.1  christos   },
   3466      1.1  christos 
   3467      1.1  christos   /* PREFIX_0F38DC */
   3468      1.1  christos   {
   3469      1.1  christos     { Bad_Opcode },
   3470      1.1  christos     { Bad_Opcode },
   3471      1.1  christos     { "aesenc", { XM, EXx } },
   3472      1.1  christos   },
   3473      1.1  christos 
   3474      1.1  christos   /* PREFIX_0F38DD */
   3475      1.1  christos   {
   3476      1.1  christos     { Bad_Opcode },
   3477      1.1  christos     { Bad_Opcode },
   3478      1.1  christos     { "aesenclast", { XM, EXx } },
   3479      1.1  christos   },
   3480      1.1  christos 
   3481      1.1  christos   /* PREFIX_0F38DE */
   3482      1.1  christos   {
   3483      1.1  christos     { Bad_Opcode },
   3484      1.1  christos     { Bad_Opcode },
   3485      1.1  christos     { "aesdec", { XM, EXx } },
   3486      1.1  christos   },
   3487      1.1  christos 
   3488      1.1  christos   /* PREFIX_0F38DF */
   3489      1.1  christos   {
   3490      1.1  christos     { Bad_Opcode },
   3491      1.1  christos     { Bad_Opcode },
   3492      1.1  christos     { "aesdeclast", { XM, EXx } },
   3493      1.1  christos   },
   3494      1.1  christos 
   3495      1.1  christos   /* PREFIX_0F38F0 */
   3496      1.1  christos   {
   3497      1.1  christos     { "movbeS",	{ Gv, { MOVBE_Fixup, v_mode } } },
   3498      1.1  christos     { Bad_Opcode },
   3499      1.1  christos     { "movbeS",	{ Gv, { MOVBE_Fixup, v_mode } } },
   3500  1.1.1.2  christos     { "crc32",	{ Gdq, { CRC32_Fixup, b_mode } } },
   3501      1.1  christos   },
   3502      1.1  christos 
   3503      1.1  christos   /* PREFIX_0F38F1 */
   3504      1.1  christos   {
   3505      1.1  christos     { "movbeS",	{ { MOVBE_Fixup, v_mode }, Gv } },
   3506      1.1  christos     { Bad_Opcode },
   3507      1.1  christos     { "movbeS",	{ { MOVBE_Fixup, v_mode }, Gv } },
   3508  1.1.1.2  christos     { "crc32",	{ Gdq, { CRC32_Fixup, v_mode } } },
   3509  1.1.1.2  christos   },
   3510  1.1.1.2  christos 
   3511  1.1.1.2  christos   /* PREFIX_0F38F6 */
   3512  1.1.1.2  christos   {
   3513  1.1.1.2  christos     { Bad_Opcode },
   3514  1.1.1.2  christos     { "adoxS",	{ Gdq, Edq} },
   3515  1.1.1.2  christos     { "adcxS",	{ Gdq, Edq} },
   3516  1.1.1.2  christos     { Bad_Opcode },
   3517      1.1  christos   },
   3518      1.1  christos 
   3519      1.1  christos   /* PREFIX_0F3A08 */
   3520      1.1  christos   {
   3521      1.1  christos     { Bad_Opcode },
   3522      1.1  christos     { Bad_Opcode },
   3523      1.1  christos     { "roundps", { XM, EXx, Ib } },
   3524      1.1  christos   },
   3525      1.1  christos 
   3526      1.1  christos   /* PREFIX_0F3A09 */
   3527      1.1  christos   {
   3528      1.1  christos     { Bad_Opcode },
   3529      1.1  christos     { Bad_Opcode },
   3530      1.1  christos     { "roundpd", { XM, EXx, Ib } },
   3531      1.1  christos   },
   3532      1.1  christos 
   3533      1.1  christos   /* PREFIX_0F3A0A */
   3534      1.1  christos   {
   3535      1.1  christos     { Bad_Opcode },
   3536      1.1  christos     { Bad_Opcode },
   3537      1.1  christos     { "roundss", { XM, EXd, Ib } },
   3538      1.1  christos   },
   3539      1.1  christos 
   3540      1.1  christos   /* PREFIX_0F3A0B */
   3541      1.1  christos   {
   3542      1.1  christos     { Bad_Opcode },
   3543      1.1  christos     { Bad_Opcode },
   3544      1.1  christos     { "roundsd", { XM, EXq, Ib } },
   3545      1.1  christos   },
   3546      1.1  christos 
   3547      1.1  christos   /* PREFIX_0F3A0C */
   3548      1.1  christos   {
   3549      1.1  christos     { Bad_Opcode },
   3550      1.1  christos     { Bad_Opcode },
   3551      1.1  christos     { "blendps", { XM, EXx, Ib } },
   3552      1.1  christos   },
   3553      1.1  christos 
   3554      1.1  christos   /* PREFIX_0F3A0D */
   3555      1.1  christos   {
   3556      1.1  christos     { Bad_Opcode },
   3557      1.1  christos     { Bad_Opcode },
   3558      1.1  christos     { "blendpd", { XM, EXx, Ib } },
   3559      1.1  christos   },
   3560      1.1  christos 
   3561      1.1  christos   /* PREFIX_0F3A0E */
   3562      1.1  christos   {
   3563      1.1  christos     { Bad_Opcode },
   3564      1.1  christos     { Bad_Opcode },
   3565      1.1  christos     { "pblendw", { XM, EXx, Ib } },
   3566      1.1  christos   },
   3567      1.1  christos 
   3568      1.1  christos   /* PREFIX_0F3A14 */
   3569      1.1  christos   {
   3570      1.1  christos     { Bad_Opcode },
   3571      1.1  christos     { Bad_Opcode },
   3572      1.1  christos     { "pextrb",	{ Edqb, XM, Ib } },
   3573      1.1  christos   },
   3574      1.1  christos 
   3575      1.1  christos   /* PREFIX_0F3A15 */
   3576      1.1  christos   {
   3577      1.1  christos     { Bad_Opcode },
   3578      1.1  christos     { Bad_Opcode },
   3579      1.1  christos     { "pextrw",	{ Edqw, XM, Ib } },
   3580      1.1  christos   },
   3581      1.1  christos 
   3582      1.1  christos   /* PREFIX_0F3A16 */
   3583      1.1  christos   {
   3584      1.1  christos     { Bad_Opcode },
   3585      1.1  christos     { Bad_Opcode },
   3586      1.1  christos     { "pextrK",	{ Edq, XM, Ib } },
   3587      1.1  christos   },
   3588      1.1  christos 
   3589      1.1  christos   /* PREFIX_0F3A17 */
   3590      1.1  christos   {
   3591      1.1  christos     { Bad_Opcode },
   3592      1.1  christos     { Bad_Opcode },
   3593      1.1  christos     { "extractps", { Edqd, XM, Ib } },
   3594      1.1  christos   },
   3595      1.1  christos 
   3596      1.1  christos   /* PREFIX_0F3A20 */
   3597      1.1  christos   {
   3598      1.1  christos     { Bad_Opcode },
   3599      1.1  christos     { Bad_Opcode },
   3600      1.1  christos     { "pinsrb",	{ XM, Edqb, Ib } },
   3601      1.1  christos   },
   3602      1.1  christos 
   3603      1.1  christos   /* PREFIX_0F3A21 */
   3604      1.1  christos   {
   3605      1.1  christos     { Bad_Opcode },
   3606      1.1  christos     { Bad_Opcode },
   3607      1.1  christos     { "insertps", { XM, EXd, Ib } },
   3608      1.1  christos   },
   3609      1.1  christos 
   3610      1.1  christos   /* PREFIX_0F3A22 */
   3611      1.1  christos   {
   3612      1.1  christos     { Bad_Opcode },
   3613      1.1  christos     { Bad_Opcode },
   3614      1.1  christos     { "pinsrK",	{ XM, Edq, Ib } },
   3615      1.1  christos   },
   3616      1.1  christos 
   3617      1.1  christos   /* PREFIX_0F3A40 */
   3618      1.1  christos   {
   3619      1.1  christos     { Bad_Opcode },
   3620      1.1  christos     { Bad_Opcode },
   3621      1.1  christos     { "dpps",	{ XM, EXx, Ib } },
   3622      1.1  christos   },
   3623      1.1  christos 
   3624      1.1  christos   /* PREFIX_0F3A41 */
   3625      1.1  christos   {
   3626      1.1  christos     { Bad_Opcode },
   3627      1.1  christos     { Bad_Opcode },
   3628      1.1  christos     { "dppd",	{ XM, EXx, Ib } },
   3629      1.1  christos   },
   3630      1.1  christos 
   3631      1.1  christos   /* PREFIX_0F3A42 */
   3632      1.1  christos   {
   3633      1.1  christos     { Bad_Opcode },
   3634      1.1  christos     { Bad_Opcode },
   3635      1.1  christos     { "mpsadbw", { XM, EXx, Ib } },
   3636      1.1  christos   },
   3637      1.1  christos 
   3638      1.1  christos   /* PREFIX_0F3A44 */
   3639      1.1  christos   {
   3640      1.1  christos     { Bad_Opcode },
   3641      1.1  christos     { Bad_Opcode },
   3642      1.1  christos     { "pclmulqdq", { XM, EXx, PCLMUL } },
   3643      1.1  christos   },
   3644      1.1  christos 
   3645      1.1  christos   /* PREFIX_0F3A60 */
   3646      1.1  christos   {
   3647      1.1  christos     { Bad_Opcode },
   3648      1.1  christos     { Bad_Opcode },
   3649      1.1  christos     { "pcmpestrm", { XM, EXx, Ib } },
   3650      1.1  christos   },
   3651      1.1  christos 
   3652      1.1  christos   /* PREFIX_0F3A61 */
   3653      1.1  christos   {
   3654      1.1  christos     { Bad_Opcode },
   3655      1.1  christos     { Bad_Opcode },
   3656      1.1  christos     { "pcmpestri", { XM, EXx, Ib } },
   3657      1.1  christos   },
   3658      1.1  christos 
   3659      1.1  christos   /* PREFIX_0F3A62 */
   3660      1.1  christos   {
   3661      1.1  christos     { Bad_Opcode },
   3662      1.1  christos     { Bad_Opcode },
   3663      1.1  christos     { "pcmpistrm", { XM, EXx, Ib } },
   3664      1.1  christos   },
   3665      1.1  christos 
   3666      1.1  christos   /* PREFIX_0F3A63 */
   3667      1.1  christos   {
   3668      1.1  christos     { Bad_Opcode },
   3669      1.1  christos     { Bad_Opcode },
   3670      1.1  christos     { "pcmpistri", { XM, EXx, Ib } },
   3671      1.1  christos   },
   3672      1.1  christos 
   3673      1.1  christos   /* PREFIX_0F3ADF */
   3674      1.1  christos   {
   3675      1.1  christos     { Bad_Opcode },
   3676      1.1  christos     { Bad_Opcode },
   3677      1.1  christos     { "aeskeygenassist", { XM, EXx, Ib } },
   3678      1.1  christos   },
   3679      1.1  christos 
   3680      1.1  christos   /* PREFIX_VEX_0F10 */
   3681      1.1  christos   {
   3682      1.1  christos     { VEX_W_TABLE (VEX_W_0F10_P_0) },
   3683      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
   3684      1.1  christos     { VEX_W_TABLE (VEX_W_0F10_P_2) },
   3685      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
   3686      1.1  christos   },
   3687      1.1  christos 
   3688      1.1  christos   /* PREFIX_VEX_0F11 */
   3689      1.1  christos   {
   3690      1.1  christos     { VEX_W_TABLE (VEX_W_0F11_P_0) },
   3691      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
   3692      1.1  christos     { VEX_W_TABLE (VEX_W_0F11_P_2) },
   3693      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
   3694      1.1  christos   },
   3695      1.1  christos 
   3696      1.1  christos   /* PREFIX_VEX_0F12 */
   3697      1.1  christos   {
   3698      1.1  christos     { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
   3699      1.1  christos     { VEX_W_TABLE (VEX_W_0F12_P_1) },
   3700      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
   3701      1.1  christos     { VEX_W_TABLE (VEX_W_0F12_P_3) },
   3702      1.1  christos   },
   3703      1.1  christos 
   3704      1.1  christos   /* PREFIX_VEX_0F16 */
   3705      1.1  christos   {
   3706      1.1  christos     { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
   3707      1.1  christos     { VEX_W_TABLE (VEX_W_0F16_P_1) },
   3708      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
   3709      1.1  christos   },
   3710      1.1  christos 
   3711      1.1  christos   /* PREFIX_VEX_0F2A */
   3712      1.1  christos   {
   3713      1.1  christos     { Bad_Opcode },
   3714      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
   3715      1.1  christos     { Bad_Opcode },
   3716      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
   3717      1.1  christos   },
   3718      1.1  christos 
   3719      1.1  christos   /* PREFIX_VEX_0F2C */
   3720      1.1  christos   {
   3721      1.1  christos     { Bad_Opcode },
   3722      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
   3723      1.1  christos     { Bad_Opcode },
   3724      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
   3725      1.1  christos   },
   3726      1.1  christos 
   3727      1.1  christos   /* PREFIX_VEX_0F2D */
   3728      1.1  christos   {
   3729      1.1  christos     { Bad_Opcode },
   3730      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
   3731      1.1  christos     { Bad_Opcode },
   3732      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
   3733      1.1  christos   },
   3734      1.1  christos 
   3735      1.1  christos   /* PREFIX_VEX_0F2E */
   3736      1.1  christos   {
   3737      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
   3738      1.1  christos     { Bad_Opcode },
   3739      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
   3740      1.1  christos   },
   3741      1.1  christos 
   3742      1.1  christos   /* PREFIX_VEX_0F2F */
   3743      1.1  christos   {
   3744      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
   3745      1.1  christos     { Bad_Opcode },
   3746      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
   3747      1.1  christos   },
   3748      1.1  christos 
   3749      1.1  christos   /* PREFIX_VEX_0F51 */
   3750      1.1  christos   {
   3751      1.1  christos     { VEX_W_TABLE (VEX_W_0F51_P_0) },
   3752      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
   3753      1.1  christos     { VEX_W_TABLE (VEX_W_0F51_P_2) },
   3754      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
   3755      1.1  christos   },
   3756      1.1  christos 
   3757      1.1  christos   /* PREFIX_VEX_0F52 */
   3758      1.1  christos   {
   3759      1.1  christos     { VEX_W_TABLE (VEX_W_0F52_P_0) },
   3760      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
   3761      1.1  christos   },
   3762      1.1  christos 
   3763      1.1  christos   /* PREFIX_VEX_0F53 */
   3764      1.1  christos   {
   3765      1.1  christos     { VEX_W_TABLE (VEX_W_0F53_P_0) },
   3766      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
   3767      1.1  christos   },
   3768      1.1  christos 
   3769      1.1  christos   /* PREFIX_VEX_0F58 */
   3770      1.1  christos   {
   3771      1.1  christos     { VEX_W_TABLE (VEX_W_0F58_P_0) },
   3772      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
   3773      1.1  christos     { VEX_W_TABLE (VEX_W_0F58_P_2) },
   3774      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
   3775      1.1  christos   },
   3776      1.1  christos 
   3777      1.1  christos   /* PREFIX_VEX_0F59 */
   3778      1.1  christos   {
   3779      1.1  christos     { VEX_W_TABLE (VEX_W_0F59_P_0) },
   3780      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
   3781      1.1  christos     { VEX_W_TABLE (VEX_W_0F59_P_2) },
   3782      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
   3783      1.1  christos   },
   3784      1.1  christos 
   3785      1.1  christos   /* PREFIX_VEX_0F5A */
   3786      1.1  christos   {
   3787      1.1  christos     { VEX_W_TABLE (VEX_W_0F5A_P_0) },
   3788      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
   3789      1.1  christos     { "vcvtpd2ps%XY", { XMM, EXx } },
   3790      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
   3791      1.1  christos   },
   3792      1.1  christos 
   3793      1.1  christos   /* PREFIX_VEX_0F5B */
   3794      1.1  christos   {
   3795      1.1  christos     { VEX_W_TABLE (VEX_W_0F5B_P_0) },
   3796      1.1  christos     { VEX_W_TABLE (VEX_W_0F5B_P_1) },
   3797      1.1  christos     { VEX_W_TABLE (VEX_W_0F5B_P_2) },
   3798      1.1  christos   },
   3799      1.1  christos 
   3800      1.1  christos   /* PREFIX_VEX_0F5C */
   3801      1.1  christos   {
   3802      1.1  christos     { VEX_W_TABLE (VEX_W_0F5C_P_0) },
   3803      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
   3804      1.1  christos     { VEX_W_TABLE (VEX_W_0F5C_P_2) },
   3805      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
   3806      1.1  christos   },
   3807      1.1  christos 
   3808      1.1  christos   /* PREFIX_VEX_0F5D */
   3809      1.1  christos   {
   3810      1.1  christos     { VEX_W_TABLE (VEX_W_0F5D_P_0) },
   3811      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
   3812      1.1  christos     { VEX_W_TABLE (VEX_W_0F5D_P_2) },
   3813      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
   3814      1.1  christos   },
   3815      1.1  christos 
   3816      1.1  christos   /* PREFIX_VEX_0F5E */
   3817      1.1  christos   {
   3818      1.1  christos     { VEX_W_TABLE (VEX_W_0F5E_P_0) },
   3819      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
   3820      1.1  christos     { VEX_W_TABLE (VEX_W_0F5E_P_2) },
   3821      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
   3822      1.1  christos   },
   3823      1.1  christos 
   3824      1.1  christos   /* PREFIX_VEX_0F5F */
   3825      1.1  christos   {
   3826      1.1  christos     { VEX_W_TABLE (VEX_W_0F5F_P_0) },
   3827      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
   3828      1.1  christos     { VEX_W_TABLE (VEX_W_0F5F_P_2) },
   3829      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
   3830      1.1  christos   },
   3831      1.1  christos 
   3832      1.1  christos   /* PREFIX_VEX_0F60 */
   3833      1.1  christos   {
   3834      1.1  christos     { Bad_Opcode },
   3835      1.1  christos     { Bad_Opcode },
   3836  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F60_P_2) },
   3837      1.1  christos   },
   3838      1.1  christos 
   3839      1.1  christos   /* PREFIX_VEX_0F61 */
   3840      1.1  christos   {
   3841      1.1  christos     { Bad_Opcode },
   3842      1.1  christos     { Bad_Opcode },
   3843  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F61_P_2) },
   3844      1.1  christos   },
   3845      1.1  christos 
   3846      1.1  christos   /* PREFIX_VEX_0F62 */
   3847      1.1  christos   {
   3848      1.1  christos     { Bad_Opcode },
   3849      1.1  christos     { Bad_Opcode },
   3850  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F62_P_2) },
   3851      1.1  christos   },
   3852      1.1  christos 
   3853      1.1  christos   /* PREFIX_VEX_0F63 */
   3854      1.1  christos   {
   3855      1.1  christos     { Bad_Opcode },
   3856      1.1  christos     { Bad_Opcode },
   3857  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F63_P_2) },
   3858      1.1  christos   },
   3859      1.1  christos 
   3860      1.1  christos   /* PREFIX_VEX_0F64 */
   3861      1.1  christos   {
   3862      1.1  christos     { Bad_Opcode },
   3863      1.1  christos     { Bad_Opcode },
   3864  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F64_P_2) },
   3865      1.1  christos   },
   3866      1.1  christos 
   3867      1.1  christos   /* PREFIX_VEX_0F65 */
   3868      1.1  christos   {
   3869      1.1  christos     { Bad_Opcode },
   3870      1.1  christos     { Bad_Opcode },
   3871  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F65_P_2) },
   3872      1.1  christos   },
   3873      1.1  christos 
   3874      1.1  christos   /* PREFIX_VEX_0F66 */
   3875      1.1  christos   {
   3876      1.1  christos     { Bad_Opcode },
   3877      1.1  christos     { Bad_Opcode },
   3878  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F66_P_2) },
   3879      1.1  christos   },
   3880      1.1  christos 
   3881      1.1  christos   /* PREFIX_VEX_0F67 */
   3882      1.1  christos   {
   3883      1.1  christos     { Bad_Opcode },
   3884      1.1  christos     { Bad_Opcode },
   3885  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F67_P_2) },
   3886      1.1  christos   },
   3887      1.1  christos 
   3888      1.1  christos   /* PREFIX_VEX_0F68 */
   3889      1.1  christos   {
   3890      1.1  christos     { Bad_Opcode },
   3891      1.1  christos     { Bad_Opcode },
   3892  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F68_P_2) },
   3893      1.1  christos   },
   3894      1.1  christos 
   3895      1.1  christos   /* PREFIX_VEX_0F69 */
   3896      1.1  christos   {
   3897      1.1  christos     { Bad_Opcode },
   3898      1.1  christos     { Bad_Opcode },
   3899  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F69_P_2) },
   3900      1.1  christos   },
   3901      1.1  christos 
   3902      1.1  christos   /* PREFIX_VEX_0F6A */
   3903      1.1  christos   {
   3904      1.1  christos     { Bad_Opcode },
   3905      1.1  christos     { Bad_Opcode },
   3906  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F6A_P_2) },
   3907      1.1  christos   },
   3908      1.1  christos 
   3909      1.1  christos   /* PREFIX_VEX_0F6B */
   3910      1.1  christos   {
   3911      1.1  christos     { Bad_Opcode },
   3912      1.1  christos     { Bad_Opcode },
   3913  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F6B_P_2) },
   3914      1.1  christos   },
   3915      1.1  christos 
   3916      1.1  christos   /* PREFIX_VEX_0F6C */
   3917      1.1  christos   {
   3918      1.1  christos     { Bad_Opcode },
   3919      1.1  christos     { Bad_Opcode },
   3920  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F6C_P_2) },
   3921      1.1  christos   },
   3922      1.1  christos 
   3923      1.1  christos   /* PREFIX_VEX_0F6D */
   3924      1.1  christos   {
   3925      1.1  christos     { Bad_Opcode },
   3926      1.1  christos     { Bad_Opcode },
   3927  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F6D_P_2) },
   3928      1.1  christos   },
   3929      1.1  christos 
   3930      1.1  christos   /* PREFIX_VEX_0F6E */
   3931      1.1  christos   {
   3932      1.1  christos     { Bad_Opcode },
   3933      1.1  christos     { Bad_Opcode },
   3934      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
   3935      1.1  christos   },
   3936      1.1  christos 
   3937      1.1  christos   /* PREFIX_VEX_0F6F */
   3938      1.1  christos   {
   3939      1.1  christos     { Bad_Opcode },
   3940      1.1  christos     { VEX_W_TABLE (VEX_W_0F6F_P_1) },
   3941      1.1  christos     { VEX_W_TABLE (VEX_W_0F6F_P_2) },
   3942      1.1  christos   },
   3943      1.1  christos 
   3944      1.1  christos   /* PREFIX_VEX_0F70 */
   3945      1.1  christos   {
   3946      1.1  christos     { Bad_Opcode },
   3947  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F70_P_1) },
   3948  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F70_P_2) },
   3949  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F70_P_3) },
   3950      1.1  christos   },
   3951      1.1  christos 
   3952      1.1  christos   /* PREFIX_VEX_0F71_REG_2 */
   3953      1.1  christos   {
   3954      1.1  christos     { Bad_Opcode },
   3955      1.1  christos     { Bad_Opcode },
   3956  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
   3957      1.1  christos   },
   3958      1.1  christos 
   3959      1.1  christos   /* PREFIX_VEX_0F71_REG_4 */
   3960      1.1  christos   {
   3961      1.1  christos     { Bad_Opcode },
   3962      1.1  christos     { Bad_Opcode },
   3963  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
   3964      1.1  christos   },
   3965      1.1  christos 
   3966      1.1  christos   /* PREFIX_VEX_0F71_REG_6 */
   3967      1.1  christos   {
   3968      1.1  christos     { Bad_Opcode },
   3969      1.1  christos     { Bad_Opcode },
   3970  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
   3971      1.1  christos   },
   3972      1.1  christos 
   3973      1.1  christos   /* PREFIX_VEX_0F72_REG_2 */
   3974      1.1  christos   {
   3975      1.1  christos     { Bad_Opcode },
   3976      1.1  christos     { Bad_Opcode },
   3977  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
   3978      1.1  christos   },
   3979      1.1  christos 
   3980      1.1  christos   /* PREFIX_VEX_0F72_REG_4 */
   3981      1.1  christos   {
   3982      1.1  christos     { Bad_Opcode },
   3983      1.1  christos     { Bad_Opcode },
   3984  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
   3985      1.1  christos   },
   3986      1.1  christos 
   3987      1.1  christos   /* PREFIX_VEX_0F72_REG_6 */
   3988      1.1  christos   {
   3989      1.1  christos     { Bad_Opcode },
   3990      1.1  christos     { Bad_Opcode },
   3991  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
   3992      1.1  christos   },
   3993      1.1  christos 
   3994      1.1  christos   /* PREFIX_VEX_0F73_REG_2 */
   3995      1.1  christos   {
   3996      1.1  christos     { Bad_Opcode },
   3997      1.1  christos     { Bad_Opcode },
   3998  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
   3999      1.1  christos   },
   4000      1.1  christos 
   4001      1.1  christos   /* PREFIX_VEX_0F73_REG_3 */
   4002      1.1  christos   {
   4003      1.1  christos     { Bad_Opcode },
   4004      1.1  christos     { Bad_Opcode },
   4005  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
   4006      1.1  christos   },
   4007      1.1  christos 
   4008      1.1  christos   /* PREFIX_VEX_0F73_REG_6 */
   4009      1.1  christos   {
   4010      1.1  christos     { Bad_Opcode },
   4011      1.1  christos     { Bad_Opcode },
   4012  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
   4013      1.1  christos   },
   4014      1.1  christos 
   4015      1.1  christos   /* PREFIX_VEX_0F73_REG_7 */
   4016      1.1  christos   {
   4017      1.1  christos     { Bad_Opcode },
   4018      1.1  christos     { Bad_Opcode },
   4019  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
   4020      1.1  christos   },
   4021      1.1  christos 
   4022      1.1  christos   /* PREFIX_VEX_0F74 */
   4023      1.1  christos   {
   4024      1.1  christos     { Bad_Opcode },
   4025      1.1  christos     { Bad_Opcode },
   4026  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F74_P_2) },
   4027      1.1  christos   },
   4028      1.1  christos 
   4029      1.1  christos   /* PREFIX_VEX_0F75 */
   4030      1.1  christos   {
   4031      1.1  christos     { Bad_Opcode },
   4032      1.1  christos     { Bad_Opcode },
   4033  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F75_P_2) },
   4034      1.1  christos   },
   4035      1.1  christos 
   4036      1.1  christos   /* PREFIX_VEX_0F76 */
   4037      1.1  christos   {
   4038      1.1  christos     { Bad_Opcode },
   4039      1.1  christos     { Bad_Opcode },
   4040  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F76_P_2) },
   4041      1.1  christos   },
   4042      1.1  christos 
   4043      1.1  christos   /* PREFIX_VEX_0F77 */
   4044      1.1  christos   {
   4045      1.1  christos     { VEX_W_TABLE (VEX_W_0F77_P_0) },
   4046      1.1  christos   },
   4047      1.1  christos 
   4048      1.1  christos   /* PREFIX_VEX_0F7C */
   4049      1.1  christos   {
   4050      1.1  christos     { Bad_Opcode },
   4051      1.1  christos     { Bad_Opcode },
   4052      1.1  christos     { VEX_W_TABLE (VEX_W_0F7C_P_2) },
   4053      1.1  christos     { VEX_W_TABLE (VEX_W_0F7C_P_3) },
   4054      1.1  christos   },
   4055      1.1  christos 
   4056      1.1  christos   /* PREFIX_VEX_0F7D */
   4057      1.1  christos   {
   4058      1.1  christos     { Bad_Opcode },
   4059      1.1  christos     { Bad_Opcode },
   4060      1.1  christos     { VEX_W_TABLE (VEX_W_0F7D_P_2) },
   4061      1.1  christos     { VEX_W_TABLE (VEX_W_0F7D_P_3) },
   4062      1.1  christos   },
   4063      1.1  christos 
   4064      1.1  christos   /* PREFIX_VEX_0F7E */
   4065      1.1  christos   {
   4066      1.1  christos     { Bad_Opcode },
   4067      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
   4068      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
   4069      1.1  christos   },
   4070      1.1  christos 
   4071      1.1  christos   /* PREFIX_VEX_0F7F */
   4072      1.1  christos   {
   4073      1.1  christos     { Bad_Opcode },
   4074      1.1  christos     { VEX_W_TABLE (VEX_W_0F7F_P_1) },
   4075      1.1  christos     { VEX_W_TABLE (VEX_W_0F7F_P_2) },
   4076      1.1  christos   },
   4077      1.1  christos 
   4078      1.1  christos   /* PREFIX_VEX_0FC2 */
   4079      1.1  christos   {
   4080      1.1  christos     { VEX_W_TABLE (VEX_W_0FC2_P_0) },
   4081      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
   4082      1.1  christos     { VEX_W_TABLE (VEX_W_0FC2_P_2) },
   4083      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
   4084      1.1  christos   },
   4085      1.1  christos 
   4086      1.1  christos   /* PREFIX_VEX_0FC4 */
   4087      1.1  christos   {
   4088      1.1  christos     { Bad_Opcode },
   4089      1.1  christos     { Bad_Opcode },
   4090      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
   4091      1.1  christos   },
   4092      1.1  christos 
   4093      1.1  christos   /* PREFIX_VEX_0FC5 */
   4094      1.1  christos   {
   4095      1.1  christos     { Bad_Opcode },
   4096      1.1  christos     { Bad_Opcode },
   4097      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
   4098      1.1  christos   },
   4099      1.1  christos 
   4100      1.1  christos   /* PREFIX_VEX_0FD0 */
   4101      1.1  christos   {
   4102      1.1  christos     { Bad_Opcode },
   4103      1.1  christos     { Bad_Opcode },
   4104      1.1  christos     { VEX_W_TABLE (VEX_W_0FD0_P_2) },
   4105      1.1  christos     { VEX_W_TABLE (VEX_W_0FD0_P_3) },
   4106      1.1  christos   },
   4107      1.1  christos 
   4108      1.1  christos   /* PREFIX_VEX_0FD1 */
   4109      1.1  christos   {
   4110      1.1  christos     { Bad_Opcode },
   4111      1.1  christos     { Bad_Opcode },
   4112  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD1_P_2) },
   4113      1.1  christos   },
   4114      1.1  christos 
   4115      1.1  christos   /* PREFIX_VEX_0FD2 */
   4116      1.1  christos   {
   4117      1.1  christos     { Bad_Opcode },
   4118      1.1  christos     { Bad_Opcode },
   4119  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD2_P_2) },
   4120      1.1  christos   },
   4121      1.1  christos 
   4122      1.1  christos   /* PREFIX_VEX_0FD3 */
   4123      1.1  christos   {
   4124      1.1  christos     { Bad_Opcode },
   4125      1.1  christos     { Bad_Opcode },
   4126  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD3_P_2) },
   4127      1.1  christos   },
   4128      1.1  christos 
   4129      1.1  christos   /* PREFIX_VEX_0FD4 */
   4130      1.1  christos   {
   4131      1.1  christos     { Bad_Opcode },
   4132      1.1  christos     { Bad_Opcode },
   4133  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD4_P_2) },
   4134      1.1  christos   },
   4135      1.1  christos 
   4136      1.1  christos   /* PREFIX_VEX_0FD5 */
   4137      1.1  christos   {
   4138      1.1  christos     { Bad_Opcode },
   4139      1.1  christos     { Bad_Opcode },
   4140  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD5_P_2) },
   4141      1.1  christos   },
   4142      1.1  christos 
   4143      1.1  christos   /* PREFIX_VEX_0FD6 */
   4144      1.1  christos   {
   4145      1.1  christos     { Bad_Opcode },
   4146      1.1  christos     { Bad_Opcode },
   4147      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
   4148      1.1  christos   },
   4149      1.1  christos 
   4150      1.1  christos   /* PREFIX_VEX_0FD7 */
   4151      1.1  christos   {
   4152      1.1  christos     { Bad_Opcode },
   4153      1.1  christos     { Bad_Opcode },
   4154      1.1  christos     { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
   4155      1.1  christos   },
   4156      1.1  christos 
   4157      1.1  christos   /* PREFIX_VEX_0FD8 */
   4158      1.1  christos   {
   4159      1.1  christos     { Bad_Opcode },
   4160      1.1  christos     { Bad_Opcode },
   4161  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD8_P_2) },
   4162      1.1  christos   },
   4163      1.1  christos 
   4164      1.1  christos   /* PREFIX_VEX_0FD9 */
   4165      1.1  christos   {
   4166      1.1  christos     { Bad_Opcode },
   4167      1.1  christos     { Bad_Opcode },
   4168  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD9_P_2) },
   4169      1.1  christos   },
   4170      1.1  christos 
   4171      1.1  christos   /* PREFIX_VEX_0FDA */
   4172      1.1  christos   {
   4173      1.1  christos     { Bad_Opcode },
   4174      1.1  christos     { Bad_Opcode },
   4175  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FDA_P_2) },
   4176      1.1  christos   },
   4177      1.1  christos 
   4178      1.1  christos   /* PREFIX_VEX_0FDB */
   4179      1.1  christos   {
   4180      1.1  christos     { Bad_Opcode },
   4181      1.1  christos     { Bad_Opcode },
   4182  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FDB_P_2) },
   4183      1.1  christos   },
   4184      1.1  christos 
   4185      1.1  christos   /* PREFIX_VEX_0FDC */
   4186      1.1  christos   {
   4187      1.1  christos     { Bad_Opcode },
   4188      1.1  christos     { Bad_Opcode },
   4189  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FDC_P_2) },
   4190      1.1  christos   },
   4191      1.1  christos 
   4192      1.1  christos   /* PREFIX_VEX_0FDD */
   4193      1.1  christos   {
   4194      1.1  christos     { Bad_Opcode },
   4195      1.1  christos     { Bad_Opcode },
   4196  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FDD_P_2) },
   4197      1.1  christos   },
   4198      1.1  christos 
   4199      1.1  christos   /* PREFIX_VEX_0FDE */
   4200      1.1  christos   {
   4201      1.1  christos     { Bad_Opcode },
   4202      1.1  christos     { Bad_Opcode },
   4203  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FDE_P_2) },
   4204      1.1  christos   },
   4205      1.1  christos 
   4206      1.1  christos   /* PREFIX_VEX_0FDF */
   4207      1.1  christos   {
   4208      1.1  christos     { Bad_Opcode },
   4209      1.1  christos     { Bad_Opcode },
   4210  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FDF_P_2) },
   4211      1.1  christos   },
   4212      1.1  christos 
   4213      1.1  christos   /* PREFIX_VEX_0FE0 */
   4214      1.1  christos   {
   4215      1.1  christos     { Bad_Opcode },
   4216      1.1  christos     { Bad_Opcode },
   4217  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE0_P_2) },
   4218      1.1  christos   },
   4219      1.1  christos 
   4220      1.1  christos   /* PREFIX_VEX_0FE1 */
   4221      1.1  christos   {
   4222      1.1  christos     { Bad_Opcode },
   4223      1.1  christos     { Bad_Opcode },
   4224  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE1_P_2) },
   4225      1.1  christos   },
   4226      1.1  christos 
   4227      1.1  christos   /* PREFIX_VEX_0FE2 */
   4228      1.1  christos   {
   4229      1.1  christos     { Bad_Opcode },
   4230      1.1  christos     { Bad_Opcode },
   4231  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE2_P_2) },
   4232      1.1  christos   },
   4233      1.1  christos 
   4234      1.1  christos   /* PREFIX_VEX_0FE3 */
   4235      1.1  christos   {
   4236      1.1  christos     { Bad_Opcode },
   4237      1.1  christos     { Bad_Opcode },
   4238  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE3_P_2) },
   4239      1.1  christos   },
   4240      1.1  christos 
   4241      1.1  christos   /* PREFIX_VEX_0FE4 */
   4242      1.1  christos   {
   4243      1.1  christos     { Bad_Opcode },
   4244      1.1  christos     { Bad_Opcode },
   4245  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE4_P_2) },
   4246      1.1  christos   },
   4247      1.1  christos 
   4248      1.1  christos   /* PREFIX_VEX_0FE5 */
   4249      1.1  christos   {
   4250      1.1  christos     { Bad_Opcode },
   4251      1.1  christos     { Bad_Opcode },
   4252  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE5_P_2) },
   4253      1.1  christos   },
   4254      1.1  christos 
   4255      1.1  christos   /* PREFIX_VEX_0FE6 */
   4256      1.1  christos   {
   4257      1.1  christos     { Bad_Opcode },
   4258      1.1  christos     { VEX_W_TABLE (VEX_W_0FE6_P_1) },
   4259      1.1  christos     { VEX_W_TABLE (VEX_W_0FE6_P_2) },
   4260      1.1  christos     { VEX_W_TABLE (VEX_W_0FE6_P_3) },
   4261      1.1  christos   },
   4262      1.1  christos 
   4263      1.1  christos   /* PREFIX_VEX_0FE7 */
   4264      1.1  christos   {
   4265      1.1  christos     { Bad_Opcode },
   4266      1.1  christos     { Bad_Opcode },
   4267      1.1  christos     { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
   4268      1.1  christos   },
   4269      1.1  christos 
   4270      1.1  christos   /* PREFIX_VEX_0FE8 */
   4271      1.1  christos   {
   4272      1.1  christos     { Bad_Opcode },
   4273      1.1  christos     { Bad_Opcode },
   4274  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE8_P_2) },
   4275      1.1  christos   },
   4276      1.1  christos 
   4277      1.1  christos   /* PREFIX_VEX_0FE9 */
   4278      1.1  christos   {
   4279      1.1  christos     { Bad_Opcode },
   4280      1.1  christos     { Bad_Opcode },
   4281  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FE9_P_2) },
   4282      1.1  christos   },
   4283      1.1  christos 
   4284      1.1  christos   /* PREFIX_VEX_0FEA */
   4285      1.1  christos   {
   4286      1.1  christos     { Bad_Opcode },
   4287      1.1  christos     { Bad_Opcode },
   4288  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FEA_P_2) },
   4289      1.1  christos   },
   4290      1.1  christos 
   4291      1.1  christos   /* PREFIX_VEX_0FEB */
   4292      1.1  christos   {
   4293      1.1  christos     { Bad_Opcode },
   4294      1.1  christos     { Bad_Opcode },
   4295  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FEB_P_2) },
   4296      1.1  christos   },
   4297      1.1  christos 
   4298      1.1  christos   /* PREFIX_VEX_0FEC */
   4299      1.1  christos   {
   4300      1.1  christos     { Bad_Opcode },
   4301      1.1  christos     { Bad_Opcode },
   4302  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FEC_P_2) },
   4303      1.1  christos   },
   4304      1.1  christos 
   4305      1.1  christos   /* PREFIX_VEX_0FED */
   4306      1.1  christos   {
   4307      1.1  christos     { Bad_Opcode },
   4308      1.1  christos     { Bad_Opcode },
   4309  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FED_P_2) },
   4310      1.1  christos   },
   4311      1.1  christos 
   4312      1.1  christos   /* PREFIX_VEX_0FEE */
   4313      1.1  christos   {
   4314      1.1  christos     { Bad_Opcode },
   4315      1.1  christos     { Bad_Opcode },
   4316  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FEE_P_2) },
   4317      1.1  christos   },
   4318      1.1  christos 
   4319      1.1  christos   /* PREFIX_VEX_0FEF */
   4320      1.1  christos   {
   4321      1.1  christos     { Bad_Opcode },
   4322      1.1  christos     { Bad_Opcode },
   4323  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FEF_P_2) },
   4324      1.1  christos   },
   4325      1.1  christos 
   4326      1.1  christos   /* PREFIX_VEX_0FF0 */
   4327      1.1  christos   {
   4328      1.1  christos     { Bad_Opcode },
   4329      1.1  christos     { Bad_Opcode },
   4330      1.1  christos     { Bad_Opcode },
   4331      1.1  christos     { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
   4332      1.1  christos   },
   4333      1.1  christos 
   4334      1.1  christos   /* PREFIX_VEX_0FF1 */
   4335      1.1  christos   {
   4336      1.1  christos     { Bad_Opcode },
   4337      1.1  christos     { Bad_Opcode },
   4338  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF1_P_2) },
   4339      1.1  christos   },
   4340      1.1  christos 
   4341      1.1  christos   /* PREFIX_VEX_0FF2 */
   4342      1.1  christos   {
   4343      1.1  christos     { Bad_Opcode },
   4344      1.1  christos     { Bad_Opcode },
   4345  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF2_P_2) },
   4346      1.1  christos   },
   4347      1.1  christos 
   4348      1.1  christos   /* PREFIX_VEX_0FF3 */
   4349      1.1  christos   {
   4350      1.1  christos     { Bad_Opcode },
   4351      1.1  christos     { Bad_Opcode },
   4352  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF3_P_2) },
   4353      1.1  christos   },
   4354      1.1  christos 
   4355      1.1  christos   /* PREFIX_VEX_0FF4 */
   4356      1.1  christos   {
   4357      1.1  christos     { Bad_Opcode },
   4358      1.1  christos     { Bad_Opcode },
   4359  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF4_P_2) },
   4360      1.1  christos   },
   4361      1.1  christos 
   4362      1.1  christos   /* PREFIX_VEX_0FF5 */
   4363      1.1  christos   {
   4364      1.1  christos     { Bad_Opcode },
   4365      1.1  christos     { Bad_Opcode },
   4366  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF5_P_2) },
   4367      1.1  christos   },
   4368      1.1  christos 
   4369      1.1  christos   /* PREFIX_VEX_0FF6 */
   4370      1.1  christos   {
   4371      1.1  christos     { Bad_Opcode },
   4372      1.1  christos     { Bad_Opcode },
   4373  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF6_P_2) },
   4374      1.1  christos   },
   4375      1.1  christos 
   4376      1.1  christos   /* PREFIX_VEX_0FF7 */
   4377      1.1  christos   {
   4378      1.1  christos     { Bad_Opcode },
   4379      1.1  christos     { Bad_Opcode },
   4380      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
   4381      1.1  christos   },
   4382      1.1  christos 
   4383      1.1  christos   /* PREFIX_VEX_0FF8 */
   4384      1.1  christos   {
   4385      1.1  christos     { Bad_Opcode },
   4386      1.1  christos     { Bad_Opcode },
   4387  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF8_P_2) },
   4388      1.1  christos   },
   4389      1.1  christos 
   4390      1.1  christos   /* PREFIX_VEX_0FF9 */
   4391      1.1  christos   {
   4392      1.1  christos     { Bad_Opcode },
   4393      1.1  christos     { Bad_Opcode },
   4394  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF9_P_2) },
   4395      1.1  christos   },
   4396      1.1  christos 
   4397      1.1  christos   /* PREFIX_VEX_0FFA */
   4398      1.1  christos   {
   4399      1.1  christos     { Bad_Opcode },
   4400      1.1  christos     { Bad_Opcode },
   4401  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FFA_P_2) },
   4402      1.1  christos   },
   4403      1.1  christos 
   4404      1.1  christos   /* PREFIX_VEX_0FFB */
   4405      1.1  christos   {
   4406      1.1  christos     { Bad_Opcode },
   4407      1.1  christos     { Bad_Opcode },
   4408  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FFB_P_2) },
   4409      1.1  christos   },
   4410      1.1  christos 
   4411      1.1  christos   /* PREFIX_VEX_0FFC */
   4412      1.1  christos   {
   4413      1.1  christos     { Bad_Opcode },
   4414      1.1  christos     { Bad_Opcode },
   4415  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FFC_P_2) },
   4416      1.1  christos   },
   4417      1.1  christos 
   4418      1.1  christos   /* PREFIX_VEX_0FFD */
   4419      1.1  christos   {
   4420      1.1  christos     { Bad_Opcode },
   4421      1.1  christos     { Bad_Opcode },
   4422  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FFD_P_2) },
   4423      1.1  christos   },
   4424      1.1  christos 
   4425      1.1  christos   /* PREFIX_VEX_0FFE */
   4426      1.1  christos   {
   4427      1.1  christos     { Bad_Opcode },
   4428      1.1  christos     { Bad_Opcode },
   4429  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FFE_P_2) },
   4430      1.1  christos   },
   4431      1.1  christos 
   4432      1.1  christos   /* PREFIX_VEX_0F3800 */
   4433      1.1  christos   {
   4434      1.1  christos     { Bad_Opcode },
   4435      1.1  christos     { Bad_Opcode },
   4436  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3800_P_2) },
   4437      1.1  christos   },
   4438      1.1  christos 
   4439      1.1  christos   /* PREFIX_VEX_0F3801 */
   4440      1.1  christos   {
   4441      1.1  christos     { Bad_Opcode },
   4442      1.1  christos     { Bad_Opcode },
   4443  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3801_P_2) },
   4444      1.1  christos   },
   4445      1.1  christos 
   4446      1.1  christos   /* PREFIX_VEX_0F3802 */
   4447      1.1  christos   {
   4448      1.1  christos     { Bad_Opcode },
   4449      1.1  christos     { Bad_Opcode },
   4450  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3802_P_2) },
   4451      1.1  christos   },
   4452      1.1  christos 
   4453      1.1  christos   /* PREFIX_VEX_0F3803 */
   4454      1.1  christos   {
   4455      1.1  christos     { Bad_Opcode },
   4456      1.1  christos     { Bad_Opcode },
   4457  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3803_P_2) },
   4458      1.1  christos   },
   4459      1.1  christos 
   4460      1.1  christos   /* PREFIX_VEX_0F3804 */
   4461      1.1  christos   {
   4462      1.1  christos     { Bad_Opcode },
   4463      1.1  christos     { Bad_Opcode },
   4464  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3804_P_2) },
   4465      1.1  christos   },
   4466      1.1  christos 
   4467      1.1  christos   /* PREFIX_VEX_0F3805 */
   4468      1.1  christos   {
   4469      1.1  christos     { Bad_Opcode },
   4470      1.1  christos     { Bad_Opcode },
   4471  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3805_P_2) },
   4472      1.1  christos   },
   4473      1.1  christos 
   4474      1.1  christos   /* PREFIX_VEX_0F3806 */
   4475      1.1  christos   {
   4476      1.1  christos     { Bad_Opcode },
   4477      1.1  christos     { Bad_Opcode },
   4478  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3806_P_2) },
   4479      1.1  christos   },
   4480      1.1  christos 
   4481      1.1  christos   /* PREFIX_VEX_0F3807 */
   4482      1.1  christos   {
   4483      1.1  christos     { Bad_Opcode },
   4484      1.1  christos     { Bad_Opcode },
   4485  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3807_P_2) },
   4486      1.1  christos   },
   4487      1.1  christos 
   4488      1.1  christos   /* PREFIX_VEX_0F3808 */
   4489      1.1  christos   {
   4490      1.1  christos     { Bad_Opcode },
   4491      1.1  christos     { Bad_Opcode },
   4492  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3808_P_2) },
   4493      1.1  christos   },
   4494      1.1  christos 
   4495      1.1  christos   /* PREFIX_VEX_0F3809 */
   4496      1.1  christos   {
   4497      1.1  christos     { Bad_Opcode },
   4498      1.1  christos     { Bad_Opcode },
   4499  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3809_P_2) },
   4500      1.1  christos   },
   4501      1.1  christos 
   4502      1.1  christos   /* PREFIX_VEX_0F380A */
   4503      1.1  christos   {
   4504      1.1  christos     { Bad_Opcode },
   4505      1.1  christos     { Bad_Opcode },
   4506  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F380A_P_2) },
   4507      1.1  christos   },
   4508      1.1  christos 
   4509      1.1  christos   /* PREFIX_VEX_0F380B */
   4510      1.1  christos   {
   4511      1.1  christos     { Bad_Opcode },
   4512      1.1  christos     { Bad_Opcode },
   4513  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F380B_P_2) },
   4514      1.1  christos   },
   4515      1.1  christos 
   4516      1.1  christos   /* PREFIX_VEX_0F380C */
   4517      1.1  christos   {
   4518      1.1  christos     { Bad_Opcode },
   4519      1.1  christos     { Bad_Opcode },
   4520      1.1  christos     { VEX_W_TABLE (VEX_W_0F380C_P_2) },
   4521      1.1  christos   },
   4522      1.1  christos 
   4523      1.1  christos   /* PREFIX_VEX_0F380D */
   4524      1.1  christos   {
   4525      1.1  christos     { Bad_Opcode },
   4526      1.1  christos     { Bad_Opcode },
   4527      1.1  christos     { VEX_W_TABLE (VEX_W_0F380D_P_2) },
   4528      1.1  christos   },
   4529      1.1  christos 
   4530      1.1  christos   /* PREFIX_VEX_0F380E */
   4531      1.1  christos   {
   4532      1.1  christos     { Bad_Opcode },
   4533      1.1  christos     { Bad_Opcode },
   4534      1.1  christos     { VEX_W_TABLE (VEX_W_0F380E_P_2) },
   4535      1.1  christos   },
   4536      1.1  christos 
   4537      1.1  christos   /* PREFIX_VEX_0F380F */
   4538      1.1  christos   {
   4539      1.1  christos     { Bad_Opcode },
   4540      1.1  christos     { Bad_Opcode },
   4541      1.1  christos     { VEX_W_TABLE (VEX_W_0F380F_P_2) },
   4542      1.1  christos   },
   4543      1.1  christos 
   4544      1.1  christos   /* PREFIX_VEX_0F3813 */
   4545      1.1  christos   {
   4546      1.1  christos     { Bad_Opcode },
   4547      1.1  christos     { Bad_Opcode },
   4548      1.1  christos     { "vcvtph2ps", { XM, EXxmmq } },
   4549      1.1  christos   },
   4550      1.1  christos 
   4551  1.1.1.2  christos   /* PREFIX_VEX_0F3816 */
   4552  1.1.1.2  christos   {
   4553  1.1.1.2  christos     { Bad_Opcode },
   4554  1.1.1.2  christos     { Bad_Opcode },
   4555  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
   4556  1.1.1.2  christos   },
   4557  1.1.1.2  christos 
   4558      1.1  christos   /* PREFIX_VEX_0F3817 */
   4559      1.1  christos   {
   4560      1.1  christos     { Bad_Opcode },
   4561      1.1  christos     { Bad_Opcode },
   4562      1.1  christos     { VEX_W_TABLE (VEX_W_0F3817_P_2) },
   4563      1.1  christos   },
   4564      1.1  christos 
   4565      1.1  christos   /* PREFIX_VEX_0F3818 */
   4566      1.1  christos   {
   4567      1.1  christos     { Bad_Opcode },
   4568      1.1  christos     { Bad_Opcode },
   4569  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3818_P_2) },
   4570      1.1  christos   },
   4571      1.1  christos 
   4572      1.1  christos   /* PREFIX_VEX_0F3819 */
   4573      1.1  christos   {
   4574      1.1  christos     { Bad_Opcode },
   4575      1.1  christos     { Bad_Opcode },
   4576  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
   4577      1.1  christos   },
   4578      1.1  christos 
   4579      1.1  christos   /* PREFIX_VEX_0F381A */
   4580      1.1  christos   {
   4581      1.1  christos     { Bad_Opcode },
   4582      1.1  christos     { Bad_Opcode },
   4583      1.1  christos     { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
   4584      1.1  christos   },
   4585      1.1  christos 
   4586      1.1  christos   /* PREFIX_VEX_0F381C */
   4587      1.1  christos   {
   4588      1.1  christos     { Bad_Opcode },
   4589      1.1  christos     { Bad_Opcode },
   4590  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F381C_P_2) },
   4591      1.1  christos   },
   4592      1.1  christos 
   4593      1.1  christos   /* PREFIX_VEX_0F381D */
   4594      1.1  christos   {
   4595      1.1  christos     { Bad_Opcode },
   4596      1.1  christos     { Bad_Opcode },
   4597  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F381D_P_2) },
   4598      1.1  christos   },
   4599      1.1  christos 
   4600      1.1  christos   /* PREFIX_VEX_0F381E */
   4601      1.1  christos   {
   4602      1.1  christos     { Bad_Opcode },
   4603      1.1  christos     { Bad_Opcode },
   4604  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F381E_P_2) },
   4605      1.1  christos   },
   4606      1.1  christos 
   4607      1.1  christos   /* PREFIX_VEX_0F3820 */
   4608      1.1  christos   {
   4609      1.1  christos     { Bad_Opcode },
   4610      1.1  christos     { Bad_Opcode },
   4611  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3820_P_2) },
   4612      1.1  christos   },
   4613      1.1  christos 
   4614      1.1  christos   /* PREFIX_VEX_0F3821 */
   4615      1.1  christos   {
   4616      1.1  christos     { Bad_Opcode },
   4617      1.1  christos     { Bad_Opcode },
   4618  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3821_P_2) },
   4619      1.1  christos   },
   4620      1.1  christos 
   4621      1.1  christos   /* PREFIX_VEX_0F3822 */
   4622      1.1  christos   {
   4623      1.1  christos     { Bad_Opcode },
   4624      1.1  christos     { Bad_Opcode },
   4625  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3822_P_2) },
   4626      1.1  christos   },
   4627      1.1  christos 
   4628      1.1  christos   /* PREFIX_VEX_0F3823 */
   4629      1.1  christos   {
   4630      1.1  christos     { Bad_Opcode },
   4631      1.1  christos     { Bad_Opcode },
   4632  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3823_P_2) },
   4633      1.1  christos   },
   4634      1.1  christos 
   4635      1.1  christos   /* PREFIX_VEX_0F3824 */
   4636      1.1  christos   {
   4637      1.1  christos     { Bad_Opcode },
   4638      1.1  christos     { Bad_Opcode },
   4639  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3824_P_2) },
   4640      1.1  christos   },
   4641      1.1  christos 
   4642      1.1  christos   /* PREFIX_VEX_0F3825 */
   4643      1.1  christos   {
   4644      1.1  christos     { Bad_Opcode },
   4645      1.1  christos     { Bad_Opcode },
   4646  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3825_P_2) },
   4647      1.1  christos   },
   4648      1.1  christos 
   4649      1.1  christos   /* PREFIX_VEX_0F3828 */
   4650      1.1  christos   {
   4651      1.1  christos     { Bad_Opcode },
   4652      1.1  christos     { Bad_Opcode },
   4653  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3828_P_2) },
   4654      1.1  christos   },
   4655      1.1  christos 
   4656      1.1  christos   /* PREFIX_VEX_0F3829 */
   4657      1.1  christos   {
   4658      1.1  christos     { Bad_Opcode },
   4659      1.1  christos     { Bad_Opcode },
   4660  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3829_P_2) },
   4661      1.1  christos   },
   4662      1.1  christos 
   4663      1.1  christos   /* PREFIX_VEX_0F382A */
   4664      1.1  christos   {
   4665      1.1  christos     { Bad_Opcode },
   4666      1.1  christos     { Bad_Opcode },
   4667      1.1  christos     { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
   4668      1.1  christos   },
   4669      1.1  christos 
   4670      1.1  christos   /* PREFIX_VEX_0F382B */
   4671      1.1  christos   {
   4672      1.1  christos     { Bad_Opcode },
   4673      1.1  christos     { Bad_Opcode },
   4674  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F382B_P_2) },
   4675      1.1  christos   },
   4676      1.1  christos 
   4677      1.1  christos   /* PREFIX_VEX_0F382C */
   4678      1.1  christos   {
   4679      1.1  christos     { Bad_Opcode },
   4680      1.1  christos     { Bad_Opcode },
   4681      1.1  christos      { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
   4682      1.1  christos   },
   4683      1.1  christos 
   4684      1.1  christos   /* PREFIX_VEX_0F382D */
   4685      1.1  christos   {
   4686      1.1  christos     { Bad_Opcode },
   4687      1.1  christos     { Bad_Opcode },
   4688      1.1  christos      { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
   4689      1.1  christos   },
   4690      1.1  christos 
   4691      1.1  christos   /* PREFIX_VEX_0F382E */
   4692      1.1  christos   {
   4693      1.1  christos     { Bad_Opcode },
   4694      1.1  christos     { Bad_Opcode },
   4695      1.1  christos      { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
   4696      1.1  christos   },
   4697      1.1  christos 
   4698      1.1  christos   /* PREFIX_VEX_0F382F */
   4699      1.1  christos   {
   4700      1.1  christos     { Bad_Opcode },
   4701      1.1  christos     { Bad_Opcode },
   4702      1.1  christos      { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
   4703      1.1  christos   },
   4704      1.1  christos 
   4705      1.1  christos   /* PREFIX_VEX_0F3830 */
   4706      1.1  christos   {
   4707      1.1  christos     { Bad_Opcode },
   4708      1.1  christos     { Bad_Opcode },
   4709  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3830_P_2) },
   4710      1.1  christos   },
   4711      1.1  christos 
   4712      1.1  christos   /* PREFIX_VEX_0F3831 */
   4713      1.1  christos   {
   4714      1.1  christos     { Bad_Opcode },
   4715      1.1  christos     { Bad_Opcode },
   4716  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3831_P_2) },
   4717      1.1  christos   },
   4718      1.1  christos 
   4719      1.1  christos   /* PREFIX_VEX_0F3832 */
   4720      1.1  christos   {
   4721      1.1  christos     { Bad_Opcode },
   4722      1.1  christos     { Bad_Opcode },
   4723  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3832_P_2) },
   4724      1.1  christos   },
   4725      1.1  christos 
   4726      1.1  christos   /* PREFIX_VEX_0F3833 */
   4727      1.1  christos   {
   4728      1.1  christos     { Bad_Opcode },
   4729      1.1  christos     { Bad_Opcode },
   4730  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3833_P_2) },
   4731      1.1  christos   },
   4732      1.1  christos 
   4733      1.1  christos   /* PREFIX_VEX_0F3834 */
   4734      1.1  christos   {
   4735      1.1  christos     { Bad_Opcode },
   4736      1.1  christos     { Bad_Opcode },
   4737  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3834_P_2) },
   4738      1.1  christos   },
   4739      1.1  christos 
   4740      1.1  christos   /* PREFIX_VEX_0F3835 */
   4741      1.1  christos   {
   4742      1.1  christos     { Bad_Opcode },
   4743      1.1  christos     { Bad_Opcode },
   4744  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3835_P_2) },
   4745  1.1.1.2  christos   },
   4746  1.1.1.2  christos 
   4747  1.1.1.2  christos   /* PREFIX_VEX_0F3836 */
   4748  1.1.1.2  christos   {
   4749  1.1.1.2  christos     { Bad_Opcode },
   4750  1.1.1.2  christos     { Bad_Opcode },
   4751  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
   4752      1.1  christos   },
   4753      1.1  christos 
   4754      1.1  christos   /* PREFIX_VEX_0F3837 */
   4755      1.1  christos   {
   4756      1.1  christos     { Bad_Opcode },
   4757      1.1  christos     { Bad_Opcode },
   4758  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3837_P_2) },
   4759      1.1  christos   },
   4760      1.1  christos 
   4761      1.1  christos   /* PREFIX_VEX_0F3838 */
   4762      1.1  christos   {
   4763      1.1  christos     { Bad_Opcode },
   4764      1.1  christos     { Bad_Opcode },
   4765  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3838_P_2) },
   4766      1.1  christos   },
   4767      1.1  christos 
   4768      1.1  christos   /* PREFIX_VEX_0F3839 */
   4769      1.1  christos   {
   4770      1.1  christos     { Bad_Opcode },
   4771      1.1  christos     { Bad_Opcode },
   4772  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3839_P_2) },
   4773      1.1  christos   },
   4774      1.1  christos 
   4775      1.1  christos   /* PREFIX_VEX_0F383A */
   4776      1.1  christos   {
   4777      1.1  christos     { Bad_Opcode },
   4778      1.1  christos     { Bad_Opcode },
   4779  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F383A_P_2) },
   4780      1.1  christos   },
   4781      1.1  christos 
   4782      1.1  christos   /* PREFIX_VEX_0F383B */
   4783      1.1  christos   {
   4784      1.1  christos     { Bad_Opcode },
   4785      1.1  christos     { Bad_Opcode },
   4786  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F383B_P_2) },
   4787      1.1  christos   },
   4788      1.1  christos 
   4789      1.1  christos   /* PREFIX_VEX_0F383C */
   4790      1.1  christos   {
   4791      1.1  christos     { Bad_Opcode },
   4792      1.1  christos     { Bad_Opcode },
   4793  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F383C_P_2) },
   4794      1.1  christos   },
   4795      1.1  christos 
   4796      1.1  christos   /* PREFIX_VEX_0F383D */
   4797      1.1  christos   {
   4798      1.1  christos     { Bad_Opcode },
   4799      1.1  christos     { Bad_Opcode },
   4800  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F383D_P_2) },
   4801      1.1  christos   },
   4802      1.1  christos 
   4803      1.1  christos   /* PREFIX_VEX_0F383E */
   4804      1.1  christos   {
   4805      1.1  christos     { Bad_Opcode },
   4806      1.1  christos     { Bad_Opcode },
   4807  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F383E_P_2) },
   4808      1.1  christos   },
   4809      1.1  christos 
   4810      1.1  christos   /* PREFIX_VEX_0F383F */
   4811      1.1  christos   {
   4812      1.1  christos     { Bad_Opcode },
   4813      1.1  christos     { Bad_Opcode },
   4814  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F383F_P_2) },
   4815      1.1  christos   },
   4816      1.1  christos 
   4817      1.1  christos   /* PREFIX_VEX_0F3840 */
   4818      1.1  christos   {
   4819      1.1  christos     { Bad_Opcode },
   4820      1.1  christos     { Bad_Opcode },
   4821  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3840_P_2) },
   4822      1.1  christos   },
   4823      1.1  christos 
   4824      1.1  christos   /* PREFIX_VEX_0F3841 */
   4825      1.1  christos   {
   4826      1.1  christos     { Bad_Opcode },
   4827      1.1  christos     { Bad_Opcode },
   4828      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
   4829      1.1  christos   },
   4830      1.1  christos 
   4831  1.1.1.2  christos   /* PREFIX_VEX_0F3845 */
   4832  1.1.1.2  christos   {
   4833  1.1.1.2  christos     { Bad_Opcode },
   4834  1.1.1.2  christos     { Bad_Opcode },
   4835  1.1.1.2  christos     { "vpsrlv%LW", { XM, Vex, EXx } },
   4836  1.1.1.2  christos   },
   4837  1.1.1.2  christos 
   4838  1.1.1.2  christos   /* PREFIX_VEX_0F3846 */
   4839  1.1.1.2  christos   {
   4840  1.1.1.2  christos     { Bad_Opcode },
   4841  1.1.1.2  christos     { Bad_Opcode },
   4842  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3846_P_2) },
   4843  1.1.1.2  christos   },
   4844  1.1.1.2  christos 
   4845  1.1.1.2  christos   /* PREFIX_VEX_0F3847 */
   4846  1.1.1.2  christos   {
   4847  1.1.1.2  christos     { Bad_Opcode },
   4848  1.1.1.2  christos     { Bad_Opcode },
   4849  1.1.1.2  christos     { "vpsllv%LW", { XM, Vex, EXx } },
   4850  1.1.1.2  christos   },
   4851  1.1.1.2  christos 
   4852  1.1.1.2  christos   /* PREFIX_VEX_0F3858 */
   4853  1.1.1.2  christos   {
   4854  1.1.1.2  christos     { Bad_Opcode },
   4855  1.1.1.2  christos     { Bad_Opcode },
   4856  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3858_P_2) },
   4857  1.1.1.2  christos   },
   4858  1.1.1.2  christos 
   4859  1.1.1.2  christos   /* PREFIX_VEX_0F3859 */
   4860  1.1.1.2  christos   {
   4861  1.1.1.2  christos     { Bad_Opcode },
   4862  1.1.1.2  christos     { Bad_Opcode },
   4863  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3859_P_2) },
   4864  1.1.1.2  christos   },
   4865  1.1.1.2  christos 
   4866  1.1.1.2  christos   /* PREFIX_VEX_0F385A */
   4867  1.1.1.2  christos   {
   4868  1.1.1.2  christos     { Bad_Opcode },
   4869  1.1.1.2  christos     { Bad_Opcode },
   4870  1.1.1.2  christos     { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
   4871  1.1.1.2  christos   },
   4872  1.1.1.2  christos 
   4873  1.1.1.2  christos   /* PREFIX_VEX_0F3878 */
   4874  1.1.1.2  christos   {
   4875  1.1.1.2  christos     { Bad_Opcode },
   4876  1.1.1.2  christos     { Bad_Opcode },
   4877  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3878_P_2) },
   4878  1.1.1.2  christos   },
   4879  1.1.1.2  christos 
   4880  1.1.1.2  christos   /* PREFIX_VEX_0F3879 */
   4881  1.1.1.2  christos   {
   4882  1.1.1.2  christos     { Bad_Opcode },
   4883  1.1.1.2  christos     { Bad_Opcode },
   4884  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3879_P_2) },
   4885  1.1.1.2  christos   },
   4886  1.1.1.2  christos 
   4887  1.1.1.2  christos   /* PREFIX_VEX_0F388C */
   4888  1.1.1.2  christos   {
   4889  1.1.1.2  christos     { Bad_Opcode },
   4890  1.1.1.2  christos     { Bad_Opcode },
   4891  1.1.1.2  christos     { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
   4892  1.1.1.2  christos   },
   4893  1.1.1.2  christos 
   4894  1.1.1.2  christos   /* PREFIX_VEX_0F388E */
   4895  1.1.1.2  christos   {
   4896  1.1.1.2  christos     { Bad_Opcode },
   4897  1.1.1.2  christos     { Bad_Opcode },
   4898  1.1.1.2  christos     { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
   4899  1.1.1.2  christos   },
   4900  1.1.1.2  christos 
   4901  1.1.1.2  christos   /* PREFIX_VEX_0F3890 */
   4902  1.1.1.2  christos   {
   4903  1.1.1.2  christos     { Bad_Opcode },
   4904  1.1.1.2  christos     { Bad_Opcode },
   4905  1.1.1.2  christos     { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
   4906  1.1.1.2  christos   },
   4907  1.1.1.2  christos 
   4908  1.1.1.2  christos   /* PREFIX_VEX_0F3891 */
   4909  1.1.1.2  christos   {
   4910  1.1.1.2  christos     { Bad_Opcode },
   4911  1.1.1.2  christos     { Bad_Opcode },
   4912  1.1.1.2  christos     { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
   4913  1.1.1.2  christos   },
   4914  1.1.1.2  christos 
   4915  1.1.1.2  christos   /* PREFIX_VEX_0F3892 */
   4916  1.1.1.2  christos   {
   4917  1.1.1.2  christos     { Bad_Opcode },
   4918  1.1.1.2  christos     { Bad_Opcode },
   4919  1.1.1.2  christos     { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
   4920  1.1.1.2  christos   },
   4921  1.1.1.2  christos 
   4922  1.1.1.2  christos   /* PREFIX_VEX_0F3893 */
   4923  1.1.1.2  christos   {
   4924  1.1.1.2  christos     { Bad_Opcode },
   4925  1.1.1.2  christos     { Bad_Opcode },
   4926  1.1.1.2  christos     { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
   4927  1.1.1.2  christos   },
   4928  1.1.1.2  christos 
   4929      1.1  christos   /* PREFIX_VEX_0F3896 */
   4930      1.1  christos   {
   4931      1.1  christos     { Bad_Opcode },
   4932      1.1  christos     { Bad_Opcode },
   4933      1.1  christos     { "vfmaddsub132p%XW", { XM, Vex, EXx } },
   4934      1.1  christos   },
   4935      1.1  christos 
   4936      1.1  christos   /* PREFIX_VEX_0F3897 */
   4937      1.1  christos   {
   4938      1.1  christos     { Bad_Opcode },
   4939      1.1  christos     { Bad_Opcode },
   4940      1.1  christos     { "vfmsubadd132p%XW", { XM, Vex, EXx } },
   4941      1.1  christos   },
   4942      1.1  christos 
   4943      1.1  christos   /* PREFIX_VEX_0F3898 */
   4944      1.1  christos   {
   4945      1.1  christos     { Bad_Opcode },
   4946      1.1  christos     { Bad_Opcode },
   4947      1.1  christos     { "vfmadd132p%XW", { XM, Vex, EXx } },
   4948      1.1  christos   },
   4949      1.1  christos 
   4950      1.1  christos   /* PREFIX_VEX_0F3899 */
   4951      1.1  christos   {
   4952      1.1  christos     { Bad_Opcode },
   4953      1.1  christos     { Bad_Opcode },
   4954      1.1  christos     { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   4955      1.1  christos   },
   4956      1.1  christos 
   4957      1.1  christos   /* PREFIX_VEX_0F389A */
   4958      1.1  christos   {
   4959      1.1  christos     { Bad_Opcode },
   4960      1.1  christos     { Bad_Opcode },
   4961      1.1  christos     { "vfmsub132p%XW", { XM, Vex, EXx } },
   4962      1.1  christos   },
   4963      1.1  christos 
   4964      1.1  christos   /* PREFIX_VEX_0F389B */
   4965      1.1  christos   {
   4966      1.1  christos     { Bad_Opcode },
   4967      1.1  christos     { Bad_Opcode },
   4968      1.1  christos     { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   4969      1.1  christos   },
   4970      1.1  christos 
   4971      1.1  christos   /* PREFIX_VEX_0F389C */
   4972      1.1  christos   {
   4973      1.1  christos     { Bad_Opcode },
   4974      1.1  christos     { Bad_Opcode },
   4975      1.1  christos     { "vfnmadd132p%XW", { XM, Vex, EXx } },
   4976      1.1  christos   },
   4977      1.1  christos 
   4978      1.1  christos   /* PREFIX_VEX_0F389D */
   4979      1.1  christos   {
   4980      1.1  christos     { Bad_Opcode },
   4981      1.1  christos     { Bad_Opcode },
   4982      1.1  christos     { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   4983      1.1  christos   },
   4984      1.1  christos 
   4985      1.1  christos   /* PREFIX_VEX_0F389E */
   4986      1.1  christos   {
   4987      1.1  christos     { Bad_Opcode },
   4988      1.1  christos     { Bad_Opcode },
   4989      1.1  christos     { "vfnmsub132p%XW", { XM, Vex, EXx } },
   4990      1.1  christos   },
   4991      1.1  christos 
   4992      1.1  christos   /* PREFIX_VEX_0F389F */
   4993      1.1  christos   {
   4994      1.1  christos     { Bad_Opcode },
   4995      1.1  christos     { Bad_Opcode },
   4996      1.1  christos     { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   4997      1.1  christos   },
   4998      1.1  christos 
   4999      1.1  christos   /* PREFIX_VEX_0F38A6 */
   5000      1.1  christos   {
   5001      1.1  christos     { Bad_Opcode },
   5002      1.1  christos     { Bad_Opcode },
   5003      1.1  christos     { "vfmaddsub213p%XW", { XM, Vex, EXx } },
   5004      1.1  christos     { Bad_Opcode },
   5005      1.1  christos   },
   5006      1.1  christos 
   5007      1.1  christos   /* PREFIX_VEX_0F38A7 */
   5008      1.1  christos   {
   5009      1.1  christos     { Bad_Opcode },
   5010      1.1  christos     { Bad_Opcode },
   5011      1.1  christos     { "vfmsubadd213p%XW", { XM, Vex, EXx } },
   5012      1.1  christos   },
   5013      1.1  christos 
   5014      1.1  christos   /* PREFIX_VEX_0F38A8 */
   5015      1.1  christos   {
   5016      1.1  christos     { Bad_Opcode },
   5017      1.1  christos     { Bad_Opcode },
   5018      1.1  christos     { "vfmadd213p%XW", { XM, Vex, EXx } },
   5019      1.1  christos   },
   5020      1.1  christos 
   5021      1.1  christos   /* PREFIX_VEX_0F38A9 */
   5022      1.1  christos   {
   5023      1.1  christos     { Bad_Opcode },
   5024      1.1  christos     { Bad_Opcode },
   5025      1.1  christos     { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5026      1.1  christos   },
   5027      1.1  christos 
   5028      1.1  christos   /* PREFIX_VEX_0F38AA */
   5029      1.1  christos   {
   5030      1.1  christos     { Bad_Opcode },
   5031      1.1  christos     { Bad_Opcode },
   5032      1.1  christos     { "vfmsub213p%XW", { XM, Vex, EXx } },
   5033      1.1  christos   },
   5034      1.1  christos 
   5035      1.1  christos   /* PREFIX_VEX_0F38AB */
   5036      1.1  christos   {
   5037      1.1  christos     { Bad_Opcode },
   5038      1.1  christos     { Bad_Opcode },
   5039      1.1  christos     { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5040      1.1  christos   },
   5041      1.1  christos 
   5042      1.1  christos   /* PREFIX_VEX_0F38AC */
   5043      1.1  christos   {
   5044      1.1  christos     { Bad_Opcode },
   5045      1.1  christos     { Bad_Opcode },
   5046      1.1  christos     { "vfnmadd213p%XW", { XM, Vex, EXx } },
   5047      1.1  christos   },
   5048      1.1  christos 
   5049      1.1  christos   /* PREFIX_VEX_0F38AD */
   5050      1.1  christos   {
   5051      1.1  christos     { Bad_Opcode },
   5052      1.1  christos     { Bad_Opcode },
   5053      1.1  christos     { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5054      1.1  christos   },
   5055      1.1  christos 
   5056      1.1  christos   /* PREFIX_VEX_0F38AE */
   5057      1.1  christos   {
   5058      1.1  christos     { Bad_Opcode },
   5059      1.1  christos     { Bad_Opcode },
   5060      1.1  christos     { "vfnmsub213p%XW", { XM, Vex, EXx } },
   5061      1.1  christos   },
   5062      1.1  christos 
   5063      1.1  christos   /* PREFIX_VEX_0F38AF */
   5064      1.1  christos   {
   5065      1.1  christos     { Bad_Opcode },
   5066      1.1  christos     { Bad_Opcode },
   5067      1.1  christos     { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5068      1.1  christos   },
   5069      1.1  christos 
   5070      1.1  christos   /* PREFIX_VEX_0F38B6 */
   5071      1.1  christos   {
   5072      1.1  christos     { Bad_Opcode },
   5073      1.1  christos     { Bad_Opcode },
   5074      1.1  christos     { "vfmaddsub231p%XW", { XM, Vex, EXx } },
   5075      1.1  christos   },
   5076      1.1  christos 
   5077      1.1  christos   /* PREFIX_VEX_0F38B7 */
   5078      1.1  christos   {
   5079      1.1  christos     { Bad_Opcode },
   5080      1.1  christos     { Bad_Opcode },
   5081      1.1  christos     { "vfmsubadd231p%XW", { XM, Vex, EXx } },
   5082      1.1  christos   },
   5083      1.1  christos 
   5084      1.1  christos   /* PREFIX_VEX_0F38B8 */
   5085      1.1  christos   {
   5086      1.1  christos     { Bad_Opcode },
   5087      1.1  christos     { Bad_Opcode },
   5088      1.1  christos     { "vfmadd231p%XW", { XM, Vex, EXx } },
   5089      1.1  christos   },
   5090      1.1  christos 
   5091      1.1  christos   /* PREFIX_VEX_0F38B9 */
   5092      1.1  christos   {
   5093      1.1  christos     { Bad_Opcode },
   5094      1.1  christos     { Bad_Opcode },
   5095      1.1  christos     { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5096      1.1  christos   },
   5097      1.1  christos 
   5098      1.1  christos   /* PREFIX_VEX_0F38BA */
   5099      1.1  christos   {
   5100      1.1  christos     { Bad_Opcode },
   5101      1.1  christos     { Bad_Opcode },
   5102      1.1  christos     { "vfmsub231p%XW", { XM, Vex, EXx } },
   5103      1.1  christos   },
   5104      1.1  christos 
   5105      1.1  christos   /* PREFIX_VEX_0F38BB */
   5106      1.1  christos   {
   5107      1.1  christos     { Bad_Opcode },
   5108      1.1  christos     { Bad_Opcode },
   5109      1.1  christos     { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5110      1.1  christos   },
   5111      1.1  christos 
   5112      1.1  christos   /* PREFIX_VEX_0F38BC */
   5113      1.1  christos   {
   5114      1.1  christos     { Bad_Opcode },
   5115      1.1  christos     { Bad_Opcode },
   5116      1.1  christos     { "vfnmadd231p%XW", { XM, Vex, EXx } },
   5117      1.1  christos   },
   5118      1.1  christos 
   5119      1.1  christos   /* PREFIX_VEX_0F38BD */
   5120      1.1  christos   {
   5121      1.1  christos     { Bad_Opcode },
   5122      1.1  christos     { Bad_Opcode },
   5123      1.1  christos     { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5124      1.1  christos   },
   5125      1.1  christos 
   5126      1.1  christos   /* PREFIX_VEX_0F38BE */
   5127      1.1  christos   {
   5128      1.1  christos     { Bad_Opcode },
   5129      1.1  christos     { Bad_Opcode },
   5130      1.1  christos     { "vfnmsub231p%XW", { XM, Vex, EXx } },
   5131      1.1  christos   },
   5132      1.1  christos 
   5133      1.1  christos   /* PREFIX_VEX_0F38BF */
   5134      1.1  christos   {
   5135      1.1  christos     { Bad_Opcode },
   5136      1.1  christos     { Bad_Opcode },
   5137      1.1  christos     { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
   5138      1.1  christos   },
   5139      1.1  christos 
   5140      1.1  christos   /* PREFIX_VEX_0F38DB */
   5141      1.1  christos   {
   5142      1.1  christos     { Bad_Opcode },
   5143      1.1  christos     { Bad_Opcode },
   5144      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
   5145      1.1  christos   },
   5146      1.1  christos 
   5147      1.1  christos   /* PREFIX_VEX_0F38DC */
   5148      1.1  christos   {
   5149      1.1  christos     { Bad_Opcode },
   5150      1.1  christos     { Bad_Opcode },
   5151      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
   5152      1.1  christos   },
   5153      1.1  christos 
   5154      1.1  christos   /* PREFIX_VEX_0F38DD */
   5155      1.1  christos   {
   5156      1.1  christos     { Bad_Opcode },
   5157      1.1  christos     { Bad_Opcode },
   5158      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
   5159      1.1  christos   },
   5160      1.1  christos 
   5161      1.1  christos   /* PREFIX_VEX_0F38DE */
   5162      1.1  christos   {
   5163      1.1  christos     { Bad_Opcode },
   5164      1.1  christos     { Bad_Opcode },
   5165      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
   5166      1.1  christos   },
   5167      1.1  christos 
   5168      1.1  christos   /* PREFIX_VEX_0F38DF */
   5169      1.1  christos   {
   5170      1.1  christos     { Bad_Opcode },
   5171      1.1  christos     { Bad_Opcode },
   5172      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
   5173      1.1  christos   },
   5174      1.1  christos 
   5175      1.1  christos   /* PREFIX_VEX_0F38F2 */
   5176      1.1  christos   {
   5177      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
   5178      1.1  christos   },
   5179      1.1  christos 
   5180      1.1  christos   /* PREFIX_VEX_0F38F3_REG_1 */
   5181      1.1  christos   {
   5182      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
   5183      1.1  christos   },
   5184      1.1  christos 
   5185      1.1  christos   /* PREFIX_VEX_0F38F3_REG_2 */
   5186      1.1  christos   {
   5187      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
   5188      1.1  christos   },
   5189      1.1  christos 
   5190      1.1  christos   /* PREFIX_VEX_0F38F3_REG_3 */
   5191      1.1  christos   {
   5192      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
   5193      1.1  christos   },
   5194      1.1  christos 
   5195  1.1.1.2  christos   /* PREFIX_VEX_0F38F5 */
   5196  1.1.1.2  christos   {
   5197  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
   5198  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
   5199  1.1.1.2  christos     { Bad_Opcode },
   5200  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
   5201  1.1.1.2  christos   },
   5202  1.1.1.2  christos 
   5203  1.1.1.2  christos   /* PREFIX_VEX_0F38F6 */
   5204  1.1.1.2  christos   {
   5205  1.1.1.2  christos     { Bad_Opcode },
   5206  1.1.1.2  christos     { Bad_Opcode },
   5207  1.1.1.2  christos     { Bad_Opcode },
   5208  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
   5209  1.1.1.2  christos   },
   5210  1.1.1.2  christos 
   5211      1.1  christos   /* PREFIX_VEX_0F38F7 */
   5212      1.1  christos   {
   5213      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
   5214  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
   5215  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
   5216  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
   5217  1.1.1.2  christos   },
   5218  1.1.1.2  christos 
   5219  1.1.1.2  christos   /* PREFIX_VEX_0F3A00 */
   5220  1.1.1.2  christos   {
   5221  1.1.1.2  christos     { Bad_Opcode },
   5222  1.1.1.2  christos     { Bad_Opcode },
   5223  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
   5224  1.1.1.2  christos   },
   5225  1.1.1.2  christos 
   5226  1.1.1.2  christos   /* PREFIX_VEX_0F3A01 */
   5227  1.1.1.2  christos   {
   5228  1.1.1.2  christos     { Bad_Opcode },
   5229  1.1.1.2  christos     { Bad_Opcode },
   5230  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
   5231  1.1.1.2  christos   },
   5232  1.1.1.2  christos 
   5233  1.1.1.2  christos   /* PREFIX_VEX_0F3A02 */
   5234  1.1.1.2  christos   {
   5235  1.1.1.2  christos     { Bad_Opcode },
   5236  1.1.1.2  christos     { Bad_Opcode },
   5237  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
   5238      1.1  christos   },
   5239      1.1  christos 
   5240      1.1  christos   /* PREFIX_VEX_0F3A04 */
   5241      1.1  christos   {
   5242      1.1  christos     { Bad_Opcode },
   5243      1.1  christos     { Bad_Opcode },
   5244      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
   5245      1.1  christos   },
   5246      1.1  christos 
   5247      1.1  christos   /* PREFIX_VEX_0F3A05 */
   5248      1.1  christos   {
   5249      1.1  christos     { Bad_Opcode },
   5250      1.1  christos     { Bad_Opcode },
   5251      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
   5252      1.1  christos   },
   5253      1.1  christos 
   5254      1.1  christos   /* PREFIX_VEX_0F3A06 */
   5255      1.1  christos   {
   5256      1.1  christos     { Bad_Opcode },
   5257      1.1  christos     { Bad_Opcode },
   5258      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
   5259      1.1  christos   },
   5260      1.1  christos 
   5261      1.1  christos   /* PREFIX_VEX_0F3A08 */
   5262      1.1  christos   {
   5263      1.1  christos     { Bad_Opcode },
   5264      1.1  christos     { Bad_Opcode },
   5265      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
   5266      1.1  christos   },
   5267      1.1  christos 
   5268      1.1  christos   /* PREFIX_VEX_0F3A09 */
   5269      1.1  christos   {
   5270      1.1  christos     { Bad_Opcode },
   5271      1.1  christos     { Bad_Opcode },
   5272      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
   5273      1.1  christos   },
   5274      1.1  christos 
   5275      1.1  christos   /* PREFIX_VEX_0F3A0A */
   5276      1.1  christos   {
   5277      1.1  christos     { Bad_Opcode },
   5278      1.1  christos     { Bad_Opcode },
   5279      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
   5280      1.1  christos   },
   5281      1.1  christos 
   5282      1.1  christos   /* PREFIX_VEX_0F3A0B */
   5283      1.1  christos   {
   5284      1.1  christos     { Bad_Opcode },
   5285      1.1  christos     { Bad_Opcode },
   5286      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
   5287      1.1  christos   },
   5288      1.1  christos 
   5289      1.1  christos   /* PREFIX_VEX_0F3A0C */
   5290      1.1  christos   {
   5291      1.1  christos     { Bad_Opcode },
   5292      1.1  christos     { Bad_Opcode },
   5293      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
   5294      1.1  christos   },
   5295      1.1  christos 
   5296      1.1  christos   /* PREFIX_VEX_0F3A0D */
   5297      1.1  christos   {
   5298      1.1  christos     { Bad_Opcode },
   5299      1.1  christos     { Bad_Opcode },
   5300      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
   5301      1.1  christos   },
   5302      1.1  christos 
   5303      1.1  christos   /* PREFIX_VEX_0F3A0E */
   5304      1.1  christos   {
   5305      1.1  christos     { Bad_Opcode },
   5306      1.1  christos     { Bad_Opcode },
   5307  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
   5308      1.1  christos   },
   5309      1.1  christos 
   5310      1.1  christos   /* PREFIX_VEX_0F3A0F */
   5311      1.1  christos   {
   5312      1.1  christos     { Bad_Opcode },
   5313      1.1  christos     { Bad_Opcode },
   5314  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
   5315      1.1  christos   },
   5316      1.1  christos 
   5317      1.1  christos   /* PREFIX_VEX_0F3A14 */
   5318      1.1  christos   {
   5319      1.1  christos     { Bad_Opcode },
   5320      1.1  christos     { Bad_Opcode },
   5321      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
   5322      1.1  christos   },
   5323      1.1  christos 
   5324      1.1  christos   /* PREFIX_VEX_0F3A15 */
   5325      1.1  christos   {
   5326      1.1  christos     { Bad_Opcode },
   5327      1.1  christos     { Bad_Opcode },
   5328      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
   5329      1.1  christos   },
   5330      1.1  christos 
   5331      1.1  christos   /* PREFIX_VEX_0F3A16 */
   5332      1.1  christos   {
   5333      1.1  christos     { Bad_Opcode },
   5334      1.1  christos     { Bad_Opcode },
   5335      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
   5336      1.1  christos   },
   5337      1.1  christos 
   5338      1.1  christos   /* PREFIX_VEX_0F3A17 */
   5339      1.1  christos   {
   5340      1.1  christos     { Bad_Opcode },
   5341      1.1  christos     { Bad_Opcode },
   5342      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
   5343      1.1  christos   },
   5344      1.1  christos 
   5345      1.1  christos   /* PREFIX_VEX_0F3A18 */
   5346      1.1  christos   {
   5347      1.1  christos     { Bad_Opcode },
   5348      1.1  christos     { Bad_Opcode },
   5349      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
   5350      1.1  christos   },
   5351      1.1  christos 
   5352      1.1  christos   /* PREFIX_VEX_0F3A19 */
   5353      1.1  christos   {
   5354      1.1  christos     { Bad_Opcode },
   5355      1.1  christos     { Bad_Opcode },
   5356      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
   5357      1.1  christos   },
   5358      1.1  christos 
   5359      1.1  christos   /* PREFIX_VEX_0F3A1D */
   5360      1.1  christos   {
   5361      1.1  christos     { Bad_Opcode },
   5362      1.1  christos     { Bad_Opcode },
   5363      1.1  christos     { "vcvtps2ph", { EXxmmq, XM, Ib } },
   5364      1.1  christos   },
   5365      1.1  christos 
   5366      1.1  christos   /* PREFIX_VEX_0F3A20 */
   5367      1.1  christos   {
   5368      1.1  christos     { Bad_Opcode },
   5369      1.1  christos     { Bad_Opcode },
   5370      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
   5371      1.1  christos   },
   5372      1.1  christos 
   5373      1.1  christos   /* PREFIX_VEX_0F3A21 */
   5374      1.1  christos   {
   5375      1.1  christos     { Bad_Opcode },
   5376      1.1  christos     { Bad_Opcode },
   5377      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
   5378      1.1  christos   },
   5379      1.1  christos 
   5380      1.1  christos   /* PREFIX_VEX_0F3A22 */
   5381      1.1  christos   {
   5382      1.1  christos     { Bad_Opcode },
   5383      1.1  christos     { Bad_Opcode },
   5384      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
   5385      1.1  christos   },
   5386      1.1  christos 
   5387  1.1.1.2  christos   /* PREFIX_VEX_0F3A38 */
   5388      1.1  christos   {
   5389      1.1  christos     { Bad_Opcode },
   5390      1.1  christos     { Bad_Opcode },
   5391  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
   5392      1.1  christos   },
   5393      1.1  christos 
   5394  1.1.1.2  christos   /* PREFIX_VEX_0F3A39 */
   5395      1.1  christos   {
   5396      1.1  christos     { Bad_Opcode },
   5397      1.1  christos     { Bad_Opcode },
   5398  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
   5399      1.1  christos   },
   5400      1.1  christos 
   5401  1.1.1.2  christos   /* PREFIX_VEX_0F3A40 */
   5402      1.1  christos   {
   5403      1.1  christos     { Bad_Opcode },
   5404      1.1  christos     { Bad_Opcode },
   5405  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
   5406      1.1  christos   },
   5407      1.1  christos 
   5408  1.1.1.2  christos   /* PREFIX_VEX_0F3A41 */
   5409  1.1.1.2  christos   {
   5410  1.1.1.2  christos     { Bad_Opcode },
   5411  1.1.1.2  christos     { Bad_Opcode },
   5412  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
   5413  1.1.1.2  christos   },
   5414  1.1.1.2  christos 
   5415  1.1.1.2  christos   /* PREFIX_VEX_0F3A42 */
   5416  1.1.1.2  christos   {
   5417  1.1.1.2  christos     { Bad_Opcode },
   5418  1.1.1.2  christos     { Bad_Opcode },
   5419  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
   5420  1.1.1.2  christos   },
   5421  1.1.1.2  christos 
   5422  1.1.1.2  christos   /* PREFIX_VEX_0F3A44 */
   5423      1.1  christos   {
   5424      1.1  christos     { Bad_Opcode },
   5425      1.1  christos     { Bad_Opcode },
   5426      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
   5427      1.1  christos   },
   5428      1.1  christos 
   5429  1.1.1.2  christos   /* PREFIX_VEX_0F3A46 */
   5430  1.1.1.2  christos   {
   5431  1.1.1.2  christos     { Bad_Opcode },
   5432  1.1.1.2  christos     { Bad_Opcode },
   5433  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
   5434  1.1.1.2  christos   },
   5435  1.1.1.2  christos 
   5436      1.1  christos   /* PREFIX_VEX_0F3A48 */
   5437      1.1  christos   {
   5438      1.1  christos     { Bad_Opcode },
   5439      1.1  christos     { Bad_Opcode },
   5440      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
   5441      1.1  christos   },
   5442      1.1  christos 
   5443      1.1  christos   /* PREFIX_VEX_0F3A49 */
   5444      1.1  christos   {
   5445      1.1  christos     { Bad_Opcode },
   5446      1.1  christos     { Bad_Opcode },
   5447      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
   5448      1.1  christos   },
   5449      1.1  christos 
   5450      1.1  christos   /* PREFIX_VEX_0F3A4A */
   5451      1.1  christos   {
   5452      1.1  christos     { Bad_Opcode },
   5453      1.1  christos     { Bad_Opcode },
   5454      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
   5455      1.1  christos   },
   5456      1.1  christos 
   5457      1.1  christos   /* PREFIX_VEX_0F3A4B */
   5458      1.1  christos   {
   5459      1.1  christos     { Bad_Opcode },
   5460      1.1  christos     { Bad_Opcode },
   5461      1.1  christos     { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
   5462      1.1  christos   },
   5463      1.1  christos 
   5464      1.1  christos   /* PREFIX_VEX_0F3A4C */
   5465      1.1  christos   {
   5466      1.1  christos     { Bad_Opcode },
   5467      1.1  christos     { Bad_Opcode },
   5468  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
   5469      1.1  christos   },
   5470      1.1  christos 
   5471      1.1  christos   /* PREFIX_VEX_0F3A5C */
   5472      1.1  christos   {
   5473      1.1  christos     { Bad_Opcode },
   5474      1.1  christos     { Bad_Opcode },
   5475      1.1  christos     { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5476      1.1  christos   },
   5477      1.1  christos 
   5478      1.1  christos   /* PREFIX_VEX_0F3A5D */
   5479      1.1  christos   {
   5480      1.1  christos     { Bad_Opcode },
   5481      1.1  christos     { Bad_Opcode },
   5482      1.1  christos     { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5483      1.1  christos   },
   5484      1.1  christos 
   5485      1.1  christos   /* PREFIX_VEX_0F3A5E */
   5486      1.1  christos   {
   5487      1.1  christos     { Bad_Opcode },
   5488      1.1  christos     { Bad_Opcode },
   5489      1.1  christos     { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5490      1.1  christos   },
   5491      1.1  christos 
   5492      1.1  christos   /* PREFIX_VEX_0F3A5F */
   5493      1.1  christos   {
   5494      1.1  christos     { Bad_Opcode },
   5495      1.1  christos     { Bad_Opcode },
   5496      1.1  christos     { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5497      1.1  christos   },
   5498      1.1  christos 
   5499      1.1  christos   /* PREFIX_VEX_0F3A60 */
   5500      1.1  christos   {
   5501      1.1  christos     { Bad_Opcode },
   5502      1.1  christos     { Bad_Opcode },
   5503      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
   5504      1.1  christos     { Bad_Opcode },
   5505      1.1  christos   },
   5506      1.1  christos 
   5507      1.1  christos   /* PREFIX_VEX_0F3A61 */
   5508      1.1  christos   {
   5509      1.1  christos     { Bad_Opcode },
   5510      1.1  christos     { Bad_Opcode },
   5511      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
   5512      1.1  christos   },
   5513      1.1  christos 
   5514      1.1  christos   /* PREFIX_VEX_0F3A62 */
   5515      1.1  christos   {
   5516      1.1  christos     { Bad_Opcode },
   5517      1.1  christos     { Bad_Opcode },
   5518      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
   5519      1.1  christos   },
   5520      1.1  christos 
   5521      1.1  christos   /* PREFIX_VEX_0F3A63 */
   5522      1.1  christos   {
   5523      1.1  christos     { Bad_Opcode },
   5524      1.1  christos     { Bad_Opcode },
   5525      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
   5526      1.1  christos   },
   5527      1.1  christos 
   5528      1.1  christos   /* PREFIX_VEX_0F3A68 */
   5529      1.1  christos   {
   5530      1.1  christos     { Bad_Opcode },
   5531      1.1  christos     { Bad_Opcode },
   5532      1.1  christos     { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5533      1.1  christos   },
   5534      1.1  christos 
   5535      1.1  christos   /* PREFIX_VEX_0F3A69 */
   5536      1.1  christos   {
   5537      1.1  christos     { Bad_Opcode },
   5538      1.1  christos     { Bad_Opcode },
   5539      1.1  christos     { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5540      1.1  christos   },
   5541      1.1  christos 
   5542      1.1  christos   /* PREFIX_VEX_0F3A6A */
   5543      1.1  christos   {
   5544      1.1  christos     { Bad_Opcode },
   5545      1.1  christos     { Bad_Opcode },
   5546      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
   5547      1.1  christos   },
   5548      1.1  christos 
   5549      1.1  christos   /* PREFIX_VEX_0F3A6B */
   5550      1.1  christos   {
   5551      1.1  christos     { Bad_Opcode },
   5552      1.1  christos     { Bad_Opcode },
   5553      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
   5554      1.1  christos   },
   5555      1.1  christos 
   5556      1.1  christos   /* PREFIX_VEX_0F3A6C */
   5557      1.1  christos   {
   5558      1.1  christos     { Bad_Opcode },
   5559      1.1  christos     { Bad_Opcode },
   5560      1.1  christos     { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5561      1.1  christos   },
   5562      1.1  christos 
   5563      1.1  christos   /* PREFIX_VEX_0F3A6D */
   5564      1.1  christos   {
   5565      1.1  christos     { Bad_Opcode },
   5566      1.1  christos     { Bad_Opcode },
   5567      1.1  christos     { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5568      1.1  christos   },
   5569      1.1  christos 
   5570      1.1  christos   /* PREFIX_VEX_0F3A6E */
   5571      1.1  christos   {
   5572      1.1  christos     { Bad_Opcode },
   5573      1.1  christos     { Bad_Opcode },
   5574      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
   5575      1.1  christos   },
   5576      1.1  christos 
   5577      1.1  christos   /* PREFIX_VEX_0F3A6F */
   5578      1.1  christos   {
   5579      1.1  christos     { Bad_Opcode },
   5580      1.1  christos     { Bad_Opcode },
   5581      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
   5582      1.1  christos   },
   5583      1.1  christos 
   5584      1.1  christos   /* PREFIX_VEX_0F3A78 */
   5585      1.1  christos   {
   5586      1.1  christos     { Bad_Opcode },
   5587      1.1  christos     { Bad_Opcode },
   5588      1.1  christos     { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5589      1.1  christos   },
   5590      1.1  christos 
   5591      1.1  christos   /* PREFIX_VEX_0F3A79 */
   5592      1.1  christos   {
   5593      1.1  christos     { Bad_Opcode },
   5594      1.1  christos     { Bad_Opcode },
   5595      1.1  christos     { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5596      1.1  christos   },
   5597      1.1  christos 
   5598      1.1  christos   /* PREFIX_VEX_0F3A7A */
   5599      1.1  christos   {
   5600      1.1  christos     { Bad_Opcode },
   5601      1.1  christos     { Bad_Opcode },
   5602      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
   5603      1.1  christos   },
   5604      1.1  christos 
   5605      1.1  christos   /* PREFIX_VEX_0F3A7B */
   5606      1.1  christos   {
   5607      1.1  christos     { Bad_Opcode },
   5608      1.1  christos     { Bad_Opcode },
   5609      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
   5610      1.1  christos   },
   5611      1.1  christos 
   5612      1.1  christos   /* PREFIX_VEX_0F3A7C */
   5613      1.1  christos   {
   5614      1.1  christos     { Bad_Opcode },
   5615      1.1  christos     { Bad_Opcode },
   5616      1.1  christos     { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5617      1.1  christos     { Bad_Opcode },
   5618      1.1  christos   },
   5619      1.1  christos 
   5620      1.1  christos   /* PREFIX_VEX_0F3A7D */
   5621      1.1  christos   {
   5622      1.1  christos     { Bad_Opcode },
   5623      1.1  christos     { Bad_Opcode },
   5624      1.1  christos     { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   5625      1.1  christos   },
   5626      1.1  christos 
   5627      1.1  christos   /* PREFIX_VEX_0F3A7E */
   5628      1.1  christos   {
   5629      1.1  christos     { Bad_Opcode },
   5630      1.1  christos     { Bad_Opcode },
   5631      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
   5632      1.1  christos   },
   5633      1.1  christos 
   5634      1.1  christos   /* PREFIX_VEX_0F3A7F */
   5635      1.1  christos   {
   5636      1.1  christos     { Bad_Opcode },
   5637      1.1  christos     { Bad_Opcode },
   5638      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
   5639      1.1  christos   },
   5640      1.1  christos 
   5641      1.1  christos   /* PREFIX_VEX_0F3ADF */
   5642      1.1  christos   {
   5643      1.1  christos     { Bad_Opcode },
   5644      1.1  christos     { Bad_Opcode },
   5645      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
   5646      1.1  christos   },
   5647  1.1.1.2  christos 
   5648  1.1.1.2  christos   /* PREFIX_VEX_0F3AF0 */
   5649  1.1.1.2  christos   {
   5650  1.1.1.2  christos     { Bad_Opcode },
   5651  1.1.1.2  christos     { Bad_Opcode },
   5652  1.1.1.2  christos     { Bad_Opcode },
   5653  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
   5654  1.1.1.2  christos   },
   5655      1.1  christos };
   5656      1.1  christos 
   5657      1.1  christos static const struct dis386 x86_64_table[][2] = {
   5658      1.1  christos   /* X86_64_06 */
   5659      1.1  christos   {
   5660      1.1  christos     { "pushP", { es } },
   5661      1.1  christos   },
   5662      1.1  christos 
   5663      1.1  christos   /* X86_64_07 */
   5664      1.1  christos   {
   5665      1.1  christos     { "popP", { es } },
   5666      1.1  christos   },
   5667      1.1  christos 
   5668      1.1  christos   /* X86_64_0D */
   5669      1.1  christos   {
   5670      1.1  christos     { "pushP", { cs } },
   5671      1.1  christos   },
   5672      1.1  christos 
   5673      1.1  christos   /* X86_64_16 */
   5674      1.1  christos   {
   5675      1.1  christos     { "pushP", { ss } },
   5676      1.1  christos   },
   5677      1.1  christos 
   5678      1.1  christos   /* X86_64_17 */
   5679      1.1  christos   {
   5680      1.1  christos     { "popP", { ss } },
   5681      1.1  christos   },
   5682      1.1  christos 
   5683      1.1  christos   /* X86_64_1E */
   5684      1.1  christos   {
   5685      1.1  christos     { "pushP", { ds } },
   5686      1.1  christos   },
   5687      1.1  christos 
   5688      1.1  christos   /* X86_64_1F */
   5689      1.1  christos   {
   5690      1.1  christos     { "popP", { ds } },
   5691      1.1  christos   },
   5692      1.1  christos 
   5693      1.1  christos   /* X86_64_27 */
   5694      1.1  christos   {
   5695      1.1  christos     { "daa", { XX } },
   5696      1.1  christos   },
   5697      1.1  christos 
   5698      1.1  christos   /* X86_64_2F */
   5699      1.1  christos   {
   5700      1.1  christos     { "das", { XX } },
   5701      1.1  christos   },
   5702      1.1  christos 
   5703      1.1  christos   /* X86_64_37 */
   5704      1.1  christos   {
   5705      1.1  christos     { "aaa", { XX } },
   5706      1.1  christos   },
   5707      1.1  christos 
   5708      1.1  christos   /* X86_64_3F */
   5709      1.1  christos   {
   5710      1.1  christos     { "aas", { XX } },
   5711      1.1  christos   },
   5712      1.1  christos 
   5713      1.1  christos   /* X86_64_60 */
   5714      1.1  christos   {
   5715      1.1  christos     { "pushaP", { XX } },
   5716      1.1  christos   },
   5717      1.1  christos 
   5718      1.1  christos   /* X86_64_61 */
   5719      1.1  christos   {
   5720      1.1  christos     { "popaP", { XX } },
   5721      1.1  christos   },
   5722      1.1  christos 
   5723      1.1  christos   /* X86_64_62 */
   5724      1.1  christos   {
   5725      1.1  christos     { MOD_TABLE (MOD_62_32BIT) },
   5726      1.1  christos   },
   5727      1.1  christos 
   5728      1.1  christos   /* X86_64_63 */
   5729      1.1  christos   {
   5730      1.1  christos     { "arpl", { Ew, Gw } },
   5731      1.1  christos     { "movs{lq|xd}", { Gv, Ed } },
   5732      1.1  christos   },
   5733      1.1  christos 
   5734      1.1  christos   /* X86_64_6D */
   5735      1.1  christos   {
   5736      1.1  christos     { "ins{R|}", { Yzr, indirDX } },
   5737      1.1  christos     { "ins{G|}", { Yzr, indirDX } },
   5738      1.1  christos   },
   5739      1.1  christos 
   5740      1.1  christos   /* X86_64_6F */
   5741      1.1  christos   {
   5742      1.1  christos     { "outs{R|}", { indirDXr, Xz } },
   5743      1.1  christos     { "outs{G|}", { indirDXr, Xz } },
   5744      1.1  christos   },
   5745      1.1  christos 
   5746      1.1  christos   /* X86_64_9A */
   5747      1.1  christos   {
   5748      1.1  christos     { "Jcall{T|}", { Ap } },
   5749      1.1  christos   },
   5750      1.1  christos 
   5751      1.1  christos   /* X86_64_C4 */
   5752      1.1  christos   {
   5753      1.1  christos     { MOD_TABLE (MOD_C4_32BIT) },
   5754      1.1  christos     { VEX_C4_TABLE (VEX_0F) },
   5755      1.1  christos   },
   5756      1.1  christos 
   5757      1.1  christos   /* X86_64_C5 */
   5758      1.1  christos   {
   5759      1.1  christos     { MOD_TABLE (MOD_C5_32BIT) },
   5760      1.1  christos     { VEX_C5_TABLE (VEX_0F) },
   5761      1.1  christos   },
   5762      1.1  christos 
   5763      1.1  christos   /* X86_64_CE */
   5764      1.1  christos   {
   5765      1.1  christos     { "into", { XX } },
   5766      1.1  christos   },
   5767      1.1  christos 
   5768      1.1  christos   /* X86_64_D4 */
   5769      1.1  christos   {
   5770      1.1  christos     { "aam", { Ib } },
   5771      1.1  christos   },
   5772      1.1  christos 
   5773      1.1  christos   /* X86_64_D5 */
   5774      1.1  christos   {
   5775      1.1  christos     { "aad", { Ib } },
   5776      1.1  christos   },
   5777      1.1  christos 
   5778      1.1  christos   /* X86_64_EA */
   5779      1.1  christos   {
   5780      1.1  christos     { "Jjmp{T|}", { Ap } },
   5781      1.1  christos   },
   5782      1.1  christos 
   5783      1.1  christos   /* X86_64_0F01_REG_0 */
   5784      1.1  christos   {
   5785      1.1  christos     { "sgdt{Q|IQ}", { M } },
   5786      1.1  christos     { "sgdt", { M } },
   5787      1.1  christos   },
   5788      1.1  christos 
   5789      1.1  christos   /* X86_64_0F01_REG_1 */
   5790      1.1  christos   {
   5791      1.1  christos     { "sidt{Q|IQ}", { M } },
   5792      1.1  christos     { "sidt", { M } },
   5793      1.1  christos   },
   5794      1.1  christos 
   5795      1.1  christos   /* X86_64_0F01_REG_2 */
   5796      1.1  christos   {
   5797      1.1  christos     { "lgdt{Q|Q}", { M } },
   5798      1.1  christos     { "lgdt", { M } },
   5799      1.1  christos   },
   5800      1.1  christos 
   5801      1.1  christos   /* X86_64_0F01_REG_3 */
   5802      1.1  christos   {
   5803      1.1  christos     { "lidt{Q|Q}", { M } },
   5804      1.1  christos     { "lidt", { M } },
   5805      1.1  christos   },
   5806      1.1  christos };
   5807      1.1  christos 
   5808      1.1  christos static const struct dis386 three_byte_table[][256] = {
   5809      1.1  christos 
   5810      1.1  christos   /* THREE_BYTE_0F38 */
   5811      1.1  christos   {
   5812      1.1  christos     /* 00 */
   5813      1.1  christos     { "pshufb",		{ MX, EM } },
   5814      1.1  christos     { "phaddw",		{ MX, EM } },
   5815      1.1  christos     { "phaddd",		{ MX, EM } },
   5816      1.1  christos     { "phaddsw",	{ MX, EM } },
   5817      1.1  christos     { "pmaddubsw",	{ MX, EM } },
   5818      1.1  christos     { "phsubw",		{ MX, EM } },
   5819      1.1  christos     { "phsubd",		{ MX, EM } },
   5820      1.1  christos     { "phsubsw",	{ MX, EM } },
   5821      1.1  christos     /* 08 */
   5822      1.1  christos     { "psignb",		{ MX, EM } },
   5823      1.1  christos     { "psignw",		{ MX, EM } },
   5824      1.1  christos     { "psignd",		{ MX, EM } },
   5825      1.1  christos     { "pmulhrsw",	{ MX, EM } },
   5826      1.1  christos     { Bad_Opcode },
   5827      1.1  christos     { Bad_Opcode },
   5828      1.1  christos     { Bad_Opcode },
   5829      1.1  christos     { Bad_Opcode },
   5830      1.1  christos     /* 10 */
   5831      1.1  christos     { PREFIX_TABLE (PREFIX_0F3810) },
   5832      1.1  christos     { Bad_Opcode },
   5833      1.1  christos     { Bad_Opcode },
   5834      1.1  christos     { Bad_Opcode },
   5835      1.1  christos     { PREFIX_TABLE (PREFIX_0F3814) },
   5836      1.1  christos     { PREFIX_TABLE (PREFIX_0F3815) },
   5837      1.1  christos     { Bad_Opcode },
   5838      1.1  christos     { PREFIX_TABLE (PREFIX_0F3817) },
   5839      1.1  christos     /* 18 */
   5840      1.1  christos     { Bad_Opcode },
   5841      1.1  christos     { Bad_Opcode },
   5842      1.1  christos     { Bad_Opcode },
   5843      1.1  christos     { Bad_Opcode },
   5844      1.1  christos     { "pabsb",		{ MX, EM } },
   5845      1.1  christos     { "pabsw",		{ MX, EM } },
   5846      1.1  christos     { "pabsd",		{ MX, EM } },
   5847      1.1  christos     { Bad_Opcode },
   5848      1.1  christos     /* 20 */
   5849      1.1  christos     { PREFIX_TABLE (PREFIX_0F3820) },
   5850      1.1  christos     { PREFIX_TABLE (PREFIX_0F3821) },
   5851      1.1  christos     { PREFIX_TABLE (PREFIX_0F3822) },
   5852      1.1  christos     { PREFIX_TABLE (PREFIX_0F3823) },
   5853      1.1  christos     { PREFIX_TABLE (PREFIX_0F3824) },
   5854      1.1  christos     { PREFIX_TABLE (PREFIX_0F3825) },
   5855      1.1  christos     { Bad_Opcode },
   5856      1.1  christos     { Bad_Opcode },
   5857      1.1  christos     /* 28 */
   5858      1.1  christos     { PREFIX_TABLE (PREFIX_0F3828) },
   5859      1.1  christos     { PREFIX_TABLE (PREFIX_0F3829) },
   5860      1.1  christos     { PREFIX_TABLE (PREFIX_0F382A) },
   5861      1.1  christos     { PREFIX_TABLE (PREFIX_0F382B) },
   5862      1.1  christos     { Bad_Opcode },
   5863      1.1  christos     { Bad_Opcode },
   5864      1.1  christos     { Bad_Opcode },
   5865      1.1  christos     { Bad_Opcode },
   5866      1.1  christos     /* 30 */
   5867      1.1  christos     { PREFIX_TABLE (PREFIX_0F3830) },
   5868      1.1  christos     { PREFIX_TABLE (PREFIX_0F3831) },
   5869      1.1  christos     { PREFIX_TABLE (PREFIX_0F3832) },
   5870      1.1  christos     { PREFIX_TABLE (PREFIX_0F3833) },
   5871      1.1  christos     { PREFIX_TABLE (PREFIX_0F3834) },
   5872      1.1  christos     { PREFIX_TABLE (PREFIX_0F3835) },
   5873      1.1  christos     { Bad_Opcode },
   5874      1.1  christos     { PREFIX_TABLE (PREFIX_0F3837) },
   5875      1.1  christos     /* 38 */
   5876      1.1  christos     { PREFIX_TABLE (PREFIX_0F3838) },
   5877      1.1  christos     { PREFIX_TABLE (PREFIX_0F3839) },
   5878      1.1  christos     { PREFIX_TABLE (PREFIX_0F383A) },
   5879      1.1  christos     { PREFIX_TABLE (PREFIX_0F383B) },
   5880      1.1  christos     { PREFIX_TABLE (PREFIX_0F383C) },
   5881      1.1  christos     { PREFIX_TABLE (PREFIX_0F383D) },
   5882      1.1  christos     { PREFIX_TABLE (PREFIX_0F383E) },
   5883      1.1  christos     { PREFIX_TABLE (PREFIX_0F383F) },
   5884      1.1  christos     /* 40 */
   5885      1.1  christos     { PREFIX_TABLE (PREFIX_0F3840) },
   5886      1.1  christos     { PREFIX_TABLE (PREFIX_0F3841) },
   5887      1.1  christos     { Bad_Opcode },
   5888      1.1  christos     { Bad_Opcode },
   5889      1.1  christos     { Bad_Opcode },
   5890      1.1  christos     { Bad_Opcode },
   5891      1.1  christos     { Bad_Opcode },
   5892      1.1  christos     { Bad_Opcode },
   5893      1.1  christos     /* 48 */
   5894      1.1  christos     { Bad_Opcode },
   5895      1.1  christos     { Bad_Opcode },
   5896      1.1  christos     { Bad_Opcode },
   5897      1.1  christos     { Bad_Opcode },
   5898      1.1  christos     { Bad_Opcode },
   5899      1.1  christos     { Bad_Opcode },
   5900      1.1  christos     { Bad_Opcode },
   5901      1.1  christos     { Bad_Opcode },
   5902      1.1  christos     /* 50 */
   5903      1.1  christos     { Bad_Opcode },
   5904      1.1  christos     { Bad_Opcode },
   5905      1.1  christos     { Bad_Opcode },
   5906      1.1  christos     { Bad_Opcode },
   5907      1.1  christos     { Bad_Opcode },
   5908      1.1  christos     { Bad_Opcode },
   5909      1.1  christos     { Bad_Opcode },
   5910      1.1  christos     { Bad_Opcode },
   5911      1.1  christos     /* 58 */
   5912      1.1  christos     { Bad_Opcode },
   5913      1.1  christos     { Bad_Opcode },
   5914      1.1  christos     { Bad_Opcode },
   5915      1.1  christos     { Bad_Opcode },
   5916      1.1  christos     { Bad_Opcode },
   5917      1.1  christos     { Bad_Opcode },
   5918      1.1  christos     { Bad_Opcode },
   5919      1.1  christos     { Bad_Opcode },
   5920      1.1  christos     /* 60 */
   5921      1.1  christos     { Bad_Opcode },
   5922      1.1  christos     { Bad_Opcode },
   5923      1.1  christos     { Bad_Opcode },
   5924      1.1  christos     { Bad_Opcode },
   5925      1.1  christos     { Bad_Opcode },
   5926      1.1  christos     { Bad_Opcode },
   5927      1.1  christos     { Bad_Opcode },
   5928      1.1  christos     { Bad_Opcode },
   5929      1.1  christos     /* 68 */
   5930      1.1  christos     { Bad_Opcode },
   5931      1.1  christos     { Bad_Opcode },
   5932      1.1  christos     { Bad_Opcode },
   5933      1.1  christos     { Bad_Opcode },
   5934      1.1  christos     { Bad_Opcode },
   5935      1.1  christos     { Bad_Opcode },
   5936      1.1  christos     { Bad_Opcode },
   5937      1.1  christos     { Bad_Opcode },
   5938      1.1  christos     /* 70 */
   5939      1.1  christos     { Bad_Opcode },
   5940      1.1  christos     { Bad_Opcode },
   5941      1.1  christos     { Bad_Opcode },
   5942      1.1  christos     { Bad_Opcode },
   5943      1.1  christos     { Bad_Opcode },
   5944      1.1  christos     { Bad_Opcode },
   5945      1.1  christos     { Bad_Opcode },
   5946      1.1  christos     { Bad_Opcode },
   5947      1.1  christos     /* 78 */
   5948      1.1  christos     { Bad_Opcode },
   5949      1.1  christos     { Bad_Opcode },
   5950      1.1  christos     { Bad_Opcode },
   5951      1.1  christos     { Bad_Opcode },
   5952      1.1  christos     { Bad_Opcode },
   5953      1.1  christos     { Bad_Opcode },
   5954      1.1  christos     { Bad_Opcode },
   5955      1.1  christos     { Bad_Opcode },
   5956      1.1  christos     /* 80 */
   5957      1.1  christos     { PREFIX_TABLE (PREFIX_0F3880) },
   5958      1.1  christos     { PREFIX_TABLE (PREFIX_0F3881) },
   5959  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_0F3882) },
   5960      1.1  christos     { Bad_Opcode },
   5961      1.1  christos     { Bad_Opcode },
   5962      1.1  christos     { Bad_Opcode },
   5963      1.1  christos     { Bad_Opcode },
   5964      1.1  christos     { Bad_Opcode },
   5965      1.1  christos     /* 88 */
   5966      1.1  christos     { Bad_Opcode },
   5967      1.1  christos     { Bad_Opcode },
   5968      1.1  christos     { Bad_Opcode },
   5969      1.1  christos     { Bad_Opcode },
   5970      1.1  christos     { Bad_Opcode },
   5971      1.1  christos     { Bad_Opcode },
   5972      1.1  christos     { Bad_Opcode },
   5973      1.1  christos     { Bad_Opcode },
   5974      1.1  christos     /* 90 */
   5975      1.1  christos     { Bad_Opcode },
   5976      1.1  christos     { Bad_Opcode },
   5977      1.1  christos     { Bad_Opcode },
   5978      1.1  christos     { Bad_Opcode },
   5979      1.1  christos     { Bad_Opcode },
   5980      1.1  christos     { Bad_Opcode },
   5981      1.1  christos     { Bad_Opcode },
   5982      1.1  christos     { Bad_Opcode },
   5983      1.1  christos     /* 98 */
   5984      1.1  christos     { Bad_Opcode },
   5985      1.1  christos     { Bad_Opcode },
   5986      1.1  christos     { Bad_Opcode },
   5987      1.1  christos     { Bad_Opcode },
   5988      1.1  christos     { Bad_Opcode },
   5989      1.1  christos     { Bad_Opcode },
   5990      1.1  christos     { Bad_Opcode },
   5991      1.1  christos     { Bad_Opcode },
   5992      1.1  christos     /* a0 */
   5993      1.1  christos     { Bad_Opcode },
   5994      1.1  christos     { Bad_Opcode },
   5995      1.1  christos     { Bad_Opcode },
   5996      1.1  christos     { Bad_Opcode },
   5997      1.1  christos     { Bad_Opcode },
   5998      1.1  christos     { Bad_Opcode },
   5999      1.1  christos     { Bad_Opcode },
   6000      1.1  christos     { Bad_Opcode },
   6001      1.1  christos     /* a8 */
   6002      1.1  christos     { Bad_Opcode },
   6003      1.1  christos     { Bad_Opcode },
   6004      1.1  christos     { Bad_Opcode },
   6005      1.1  christos     { Bad_Opcode },
   6006      1.1  christos     { Bad_Opcode },
   6007      1.1  christos     { Bad_Opcode },
   6008      1.1  christos     { Bad_Opcode },
   6009      1.1  christos     { Bad_Opcode },
   6010      1.1  christos     /* b0 */
   6011      1.1  christos     { Bad_Opcode },
   6012      1.1  christos     { Bad_Opcode },
   6013      1.1  christos     { Bad_Opcode },
   6014      1.1  christos     { Bad_Opcode },
   6015      1.1  christos     { Bad_Opcode },
   6016      1.1  christos     { Bad_Opcode },
   6017      1.1  christos     { Bad_Opcode },
   6018      1.1  christos     { Bad_Opcode },
   6019      1.1  christos     /* b8 */
   6020      1.1  christos     { Bad_Opcode },
   6021      1.1  christos     { Bad_Opcode },
   6022      1.1  christos     { Bad_Opcode },
   6023      1.1  christos     { Bad_Opcode },
   6024      1.1  christos     { Bad_Opcode },
   6025      1.1  christos     { Bad_Opcode },
   6026      1.1  christos     { Bad_Opcode },
   6027      1.1  christos     { Bad_Opcode },
   6028      1.1  christos     /* c0 */
   6029      1.1  christos     { Bad_Opcode },
   6030      1.1  christos     { Bad_Opcode },
   6031      1.1  christos     { Bad_Opcode },
   6032      1.1  christos     { Bad_Opcode },
   6033      1.1  christos     { Bad_Opcode },
   6034      1.1  christos     { Bad_Opcode },
   6035      1.1  christos     { Bad_Opcode },
   6036      1.1  christos     { Bad_Opcode },
   6037      1.1  christos     /* c8 */
   6038      1.1  christos     { Bad_Opcode },
   6039      1.1  christos     { Bad_Opcode },
   6040      1.1  christos     { Bad_Opcode },
   6041      1.1  christos     { Bad_Opcode },
   6042      1.1  christos     { Bad_Opcode },
   6043      1.1  christos     { Bad_Opcode },
   6044      1.1  christos     { Bad_Opcode },
   6045      1.1  christos     { Bad_Opcode },
   6046      1.1  christos     /* d0 */
   6047      1.1  christos     { Bad_Opcode },
   6048      1.1  christos     { Bad_Opcode },
   6049      1.1  christos     { Bad_Opcode },
   6050      1.1  christos     { Bad_Opcode },
   6051      1.1  christos     { Bad_Opcode },
   6052      1.1  christos     { Bad_Opcode },
   6053      1.1  christos     { Bad_Opcode },
   6054      1.1  christos     { Bad_Opcode },
   6055      1.1  christos     /* d8 */
   6056      1.1  christos     { Bad_Opcode },
   6057      1.1  christos     { Bad_Opcode },
   6058      1.1  christos     { Bad_Opcode },
   6059      1.1  christos     { PREFIX_TABLE (PREFIX_0F38DB) },
   6060      1.1  christos     { PREFIX_TABLE (PREFIX_0F38DC) },
   6061      1.1  christos     { PREFIX_TABLE (PREFIX_0F38DD) },
   6062      1.1  christos     { PREFIX_TABLE (PREFIX_0F38DE) },
   6063      1.1  christos     { PREFIX_TABLE (PREFIX_0F38DF) },
   6064      1.1  christos     /* e0 */
   6065      1.1  christos     { Bad_Opcode },
   6066      1.1  christos     { Bad_Opcode },
   6067      1.1  christos     { Bad_Opcode },
   6068      1.1  christos     { Bad_Opcode },
   6069      1.1  christos     { Bad_Opcode },
   6070      1.1  christos     { Bad_Opcode },
   6071      1.1  christos     { Bad_Opcode },
   6072      1.1  christos     { Bad_Opcode },
   6073      1.1  christos     /* e8 */
   6074      1.1  christos     { Bad_Opcode },
   6075      1.1  christos     { Bad_Opcode },
   6076      1.1  christos     { Bad_Opcode },
   6077      1.1  christos     { Bad_Opcode },
   6078      1.1  christos     { Bad_Opcode },
   6079      1.1  christos     { Bad_Opcode },
   6080      1.1  christos     { Bad_Opcode },
   6081      1.1  christos     { Bad_Opcode },
   6082      1.1  christos     /* f0 */
   6083      1.1  christos     { PREFIX_TABLE (PREFIX_0F38F0) },
   6084      1.1  christos     { PREFIX_TABLE (PREFIX_0F38F1) },
   6085      1.1  christos     { Bad_Opcode },
   6086      1.1  christos     { Bad_Opcode },
   6087      1.1  christos     { Bad_Opcode },
   6088      1.1  christos     { Bad_Opcode },
   6089  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_0F38F6) },
   6090      1.1  christos     { Bad_Opcode },
   6091      1.1  christos     /* f8 */
   6092      1.1  christos     { Bad_Opcode },
   6093      1.1  christos     { Bad_Opcode },
   6094      1.1  christos     { Bad_Opcode },
   6095      1.1  christos     { Bad_Opcode },
   6096      1.1  christos     { Bad_Opcode },
   6097      1.1  christos     { Bad_Opcode },
   6098      1.1  christos     { Bad_Opcode },
   6099      1.1  christos     { Bad_Opcode },
   6100      1.1  christos   },
   6101      1.1  christos   /* THREE_BYTE_0F3A */
   6102      1.1  christos   {
   6103      1.1  christos     /* 00 */
   6104      1.1  christos     { Bad_Opcode },
   6105      1.1  christos     { Bad_Opcode },
   6106      1.1  christos     { Bad_Opcode },
   6107      1.1  christos     { Bad_Opcode },
   6108      1.1  christos     { Bad_Opcode },
   6109      1.1  christos     { Bad_Opcode },
   6110      1.1  christos     { Bad_Opcode },
   6111      1.1  christos     { Bad_Opcode },
   6112      1.1  christos     /* 08 */
   6113      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A08) },
   6114      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A09) },
   6115      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A0A) },
   6116      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A0B) },
   6117      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A0C) },
   6118      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A0D) },
   6119      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A0E) },
   6120      1.1  christos     { "palignr",	{ MX, EM, Ib } },
   6121      1.1  christos     /* 10 */
   6122      1.1  christos     { Bad_Opcode },
   6123      1.1  christos     { Bad_Opcode },
   6124      1.1  christos     { Bad_Opcode },
   6125      1.1  christos     { Bad_Opcode },
   6126      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A14) },
   6127      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A15) },
   6128      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A16) },
   6129      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A17) },
   6130      1.1  christos     /* 18 */
   6131      1.1  christos     { Bad_Opcode },
   6132      1.1  christos     { Bad_Opcode },
   6133      1.1  christos     { Bad_Opcode },
   6134      1.1  christos     { Bad_Opcode },
   6135      1.1  christos     { Bad_Opcode },
   6136      1.1  christos     { Bad_Opcode },
   6137      1.1  christos     { Bad_Opcode },
   6138      1.1  christos     { Bad_Opcode },
   6139      1.1  christos     /* 20 */
   6140      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A20) },
   6141      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A21) },
   6142      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A22) },
   6143      1.1  christos     { Bad_Opcode },
   6144      1.1  christos     { Bad_Opcode },
   6145      1.1  christos     { Bad_Opcode },
   6146      1.1  christos     { Bad_Opcode },
   6147      1.1  christos     { Bad_Opcode },
   6148      1.1  christos     /* 28 */
   6149      1.1  christos     { Bad_Opcode },
   6150      1.1  christos     { Bad_Opcode },
   6151      1.1  christos     { Bad_Opcode },
   6152      1.1  christos     { Bad_Opcode },
   6153      1.1  christos     { Bad_Opcode },
   6154      1.1  christos     { Bad_Opcode },
   6155      1.1  christos     { Bad_Opcode },
   6156      1.1  christos     { Bad_Opcode },
   6157      1.1  christos     /* 30 */
   6158      1.1  christos     { Bad_Opcode },
   6159      1.1  christos     { Bad_Opcode },
   6160      1.1  christos     { Bad_Opcode },
   6161      1.1  christos     { Bad_Opcode },
   6162      1.1  christos     { Bad_Opcode },
   6163      1.1  christos     { Bad_Opcode },
   6164      1.1  christos     { Bad_Opcode },
   6165      1.1  christos     { Bad_Opcode },
   6166      1.1  christos     /* 38 */
   6167      1.1  christos     { Bad_Opcode },
   6168      1.1  christos     { Bad_Opcode },
   6169      1.1  christos     { Bad_Opcode },
   6170      1.1  christos     { Bad_Opcode },
   6171      1.1  christos     { Bad_Opcode },
   6172      1.1  christos     { Bad_Opcode },
   6173      1.1  christos     { Bad_Opcode },
   6174      1.1  christos     { Bad_Opcode },
   6175      1.1  christos     /* 40 */
   6176      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A40) },
   6177      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A41) },
   6178      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A42) },
   6179      1.1  christos     { Bad_Opcode },
   6180      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A44) },
   6181      1.1  christos     { Bad_Opcode },
   6182      1.1  christos     { Bad_Opcode },
   6183      1.1  christos     { Bad_Opcode },
   6184      1.1  christos     /* 48 */
   6185      1.1  christos     { Bad_Opcode },
   6186      1.1  christos     { Bad_Opcode },
   6187      1.1  christos     { Bad_Opcode },
   6188      1.1  christos     { Bad_Opcode },
   6189      1.1  christos     { Bad_Opcode },
   6190      1.1  christos     { Bad_Opcode },
   6191      1.1  christos     { Bad_Opcode },
   6192      1.1  christos     { Bad_Opcode },
   6193      1.1  christos     /* 50 */
   6194      1.1  christos     { Bad_Opcode },
   6195      1.1  christos     { Bad_Opcode },
   6196      1.1  christos     { Bad_Opcode },
   6197      1.1  christos     { Bad_Opcode },
   6198      1.1  christos     { Bad_Opcode },
   6199      1.1  christos     { Bad_Opcode },
   6200      1.1  christos     { Bad_Opcode },
   6201      1.1  christos     { Bad_Opcode },
   6202      1.1  christos     /* 58 */
   6203      1.1  christos     { Bad_Opcode },
   6204      1.1  christos     { Bad_Opcode },
   6205      1.1  christos     { Bad_Opcode },
   6206      1.1  christos     { Bad_Opcode },
   6207      1.1  christos     { Bad_Opcode },
   6208      1.1  christos     { Bad_Opcode },
   6209      1.1  christos     { Bad_Opcode },
   6210      1.1  christos     { Bad_Opcode },
   6211      1.1  christos     /* 60 */
   6212      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A60) },
   6213      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A61) },
   6214      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A62) },
   6215      1.1  christos     { PREFIX_TABLE (PREFIX_0F3A63) },
   6216      1.1  christos     { Bad_Opcode },
   6217      1.1  christos     { Bad_Opcode },
   6218      1.1  christos     { Bad_Opcode },
   6219      1.1  christos     { Bad_Opcode },
   6220      1.1  christos     /* 68 */
   6221      1.1  christos     { Bad_Opcode },
   6222      1.1  christos     { Bad_Opcode },
   6223      1.1  christos     { Bad_Opcode },
   6224      1.1  christos     { Bad_Opcode },
   6225      1.1  christos     { Bad_Opcode },
   6226      1.1  christos     { Bad_Opcode },
   6227      1.1  christos     { Bad_Opcode },
   6228      1.1  christos     { Bad_Opcode },
   6229      1.1  christos     /* 70 */
   6230      1.1  christos     { Bad_Opcode },
   6231      1.1  christos     { Bad_Opcode },
   6232      1.1  christos     { Bad_Opcode },
   6233      1.1  christos     { Bad_Opcode },
   6234      1.1  christos     { Bad_Opcode },
   6235      1.1  christos     { Bad_Opcode },
   6236      1.1  christos     { Bad_Opcode },
   6237      1.1  christos     { Bad_Opcode },
   6238      1.1  christos     /* 78 */
   6239      1.1  christos     { Bad_Opcode },
   6240      1.1  christos     { Bad_Opcode },
   6241      1.1  christos     { Bad_Opcode },
   6242      1.1  christos     { Bad_Opcode },
   6243      1.1  christos     { Bad_Opcode },
   6244      1.1  christos     { Bad_Opcode },
   6245      1.1  christos     { Bad_Opcode },
   6246      1.1  christos     { Bad_Opcode },
   6247      1.1  christos     /* 80 */
   6248      1.1  christos     { Bad_Opcode },
   6249      1.1  christos     { Bad_Opcode },
   6250      1.1  christos     { Bad_Opcode },
   6251      1.1  christos     { Bad_Opcode },
   6252      1.1  christos     { Bad_Opcode },
   6253      1.1  christos     { Bad_Opcode },
   6254      1.1  christos     { Bad_Opcode },
   6255      1.1  christos     { Bad_Opcode },
   6256      1.1  christos     /* 88 */
   6257      1.1  christos     { Bad_Opcode },
   6258      1.1  christos     { Bad_Opcode },
   6259      1.1  christos     { Bad_Opcode },
   6260      1.1  christos     { Bad_Opcode },
   6261      1.1  christos     { Bad_Opcode },
   6262      1.1  christos     { Bad_Opcode },
   6263      1.1  christos     { Bad_Opcode },
   6264      1.1  christos     { Bad_Opcode },
   6265      1.1  christos     /* 90 */
   6266      1.1  christos     { Bad_Opcode },
   6267      1.1  christos     { Bad_Opcode },
   6268      1.1  christos     { Bad_Opcode },
   6269      1.1  christos     { Bad_Opcode },
   6270      1.1  christos     { Bad_Opcode },
   6271      1.1  christos     { Bad_Opcode },
   6272      1.1  christos     { Bad_Opcode },
   6273      1.1  christos     { Bad_Opcode },
   6274      1.1  christos     /* 98 */
   6275      1.1  christos     { Bad_Opcode },
   6276      1.1  christos     { Bad_Opcode },
   6277      1.1  christos     { Bad_Opcode },
   6278      1.1  christos     { Bad_Opcode },
   6279      1.1  christos     { Bad_Opcode },
   6280      1.1  christos     { Bad_Opcode },
   6281      1.1  christos     { Bad_Opcode },
   6282      1.1  christos     { Bad_Opcode },
   6283      1.1  christos     /* a0 */
   6284      1.1  christos     { Bad_Opcode },
   6285      1.1  christos     { Bad_Opcode },
   6286      1.1  christos     { Bad_Opcode },
   6287      1.1  christos     { Bad_Opcode },
   6288      1.1  christos     { Bad_Opcode },
   6289      1.1  christos     { Bad_Opcode },
   6290      1.1  christos     { Bad_Opcode },
   6291      1.1  christos     { Bad_Opcode },
   6292      1.1  christos     /* a8 */
   6293      1.1  christos     { Bad_Opcode },
   6294      1.1  christos     { Bad_Opcode },
   6295      1.1  christos     { Bad_Opcode },
   6296      1.1  christos     { Bad_Opcode },
   6297      1.1  christos     { Bad_Opcode },
   6298      1.1  christos     { Bad_Opcode },
   6299      1.1  christos     { Bad_Opcode },
   6300      1.1  christos     { Bad_Opcode },
   6301      1.1  christos     /* b0 */
   6302      1.1  christos     { Bad_Opcode },
   6303      1.1  christos     { Bad_Opcode },
   6304      1.1  christos     { Bad_Opcode },
   6305      1.1  christos     { Bad_Opcode },
   6306      1.1  christos     { Bad_Opcode },
   6307      1.1  christos     { Bad_Opcode },
   6308      1.1  christos     { Bad_Opcode },
   6309      1.1  christos     { Bad_Opcode },
   6310      1.1  christos     /* b8 */
   6311      1.1  christos     { Bad_Opcode },
   6312      1.1  christos     { Bad_Opcode },
   6313      1.1  christos     { Bad_Opcode },
   6314      1.1  christos     { Bad_Opcode },
   6315      1.1  christos     { Bad_Opcode },
   6316      1.1  christos     { Bad_Opcode },
   6317      1.1  christos     { Bad_Opcode },
   6318      1.1  christos     { Bad_Opcode },
   6319      1.1  christos     /* c0 */
   6320      1.1  christos     { Bad_Opcode },
   6321      1.1  christos     { Bad_Opcode },
   6322      1.1  christos     { Bad_Opcode },
   6323      1.1  christos     { Bad_Opcode },
   6324      1.1  christos     { Bad_Opcode },
   6325      1.1  christos     { Bad_Opcode },
   6326      1.1  christos     { Bad_Opcode },
   6327      1.1  christos     { Bad_Opcode },
   6328      1.1  christos     /* c8 */
   6329      1.1  christos     { Bad_Opcode },
   6330      1.1  christos     { Bad_Opcode },
   6331      1.1  christos     { Bad_Opcode },
   6332      1.1  christos     { Bad_Opcode },
   6333      1.1  christos     { Bad_Opcode },
   6334      1.1  christos     { Bad_Opcode },
   6335      1.1  christos     { Bad_Opcode },
   6336      1.1  christos     { Bad_Opcode },
   6337      1.1  christos     /* d0 */
   6338      1.1  christos     { Bad_Opcode },
   6339      1.1  christos     { Bad_Opcode },
   6340      1.1  christos     { Bad_Opcode },
   6341      1.1  christos     { Bad_Opcode },
   6342      1.1  christos     { Bad_Opcode },
   6343      1.1  christos     { Bad_Opcode },
   6344      1.1  christos     { Bad_Opcode },
   6345      1.1  christos     { Bad_Opcode },
   6346      1.1  christos     /* d8 */
   6347      1.1  christos     { Bad_Opcode },
   6348      1.1  christos     { Bad_Opcode },
   6349      1.1  christos     { Bad_Opcode },
   6350      1.1  christos     { Bad_Opcode },
   6351      1.1  christos     { Bad_Opcode },
   6352      1.1  christos     { Bad_Opcode },
   6353      1.1  christos     { Bad_Opcode },
   6354      1.1  christos     { PREFIX_TABLE (PREFIX_0F3ADF) },
   6355      1.1  christos     /* e0 */
   6356      1.1  christos     { Bad_Opcode },
   6357      1.1  christos     { Bad_Opcode },
   6358      1.1  christos     { Bad_Opcode },
   6359      1.1  christos     { Bad_Opcode },
   6360      1.1  christos     { Bad_Opcode },
   6361      1.1  christos     { Bad_Opcode },
   6362      1.1  christos     { Bad_Opcode },
   6363      1.1  christos     { Bad_Opcode },
   6364      1.1  christos     /* e8 */
   6365      1.1  christos     { Bad_Opcode },
   6366      1.1  christos     { Bad_Opcode },
   6367      1.1  christos     { Bad_Opcode },
   6368      1.1  christos     { Bad_Opcode },
   6369      1.1  christos     { Bad_Opcode },
   6370      1.1  christos     { Bad_Opcode },
   6371      1.1  christos     { Bad_Opcode },
   6372      1.1  christos     { Bad_Opcode },
   6373      1.1  christos     /* f0 */
   6374      1.1  christos     { Bad_Opcode },
   6375      1.1  christos     { Bad_Opcode },
   6376      1.1  christos     { Bad_Opcode },
   6377      1.1  christos     { Bad_Opcode },
   6378      1.1  christos     { Bad_Opcode },
   6379      1.1  christos     { Bad_Opcode },
   6380      1.1  christos     { Bad_Opcode },
   6381      1.1  christos     { Bad_Opcode },
   6382      1.1  christos     /* f8 */
   6383      1.1  christos     { Bad_Opcode },
   6384      1.1  christos     { Bad_Opcode },
   6385      1.1  christos     { Bad_Opcode },
   6386      1.1  christos     { Bad_Opcode },
   6387      1.1  christos     { Bad_Opcode },
   6388      1.1  christos     { Bad_Opcode },
   6389      1.1  christos     { Bad_Opcode },
   6390      1.1  christos     { Bad_Opcode },
   6391      1.1  christos   },
   6392      1.1  christos 
   6393      1.1  christos   /* THREE_BYTE_0F7A */
   6394      1.1  christos   {
   6395      1.1  christos     /* 00 */
   6396      1.1  christos     { Bad_Opcode },
   6397      1.1  christos     { Bad_Opcode },
   6398      1.1  christos     { Bad_Opcode },
   6399      1.1  christos     { Bad_Opcode },
   6400      1.1  christos     { Bad_Opcode },
   6401      1.1  christos     { Bad_Opcode },
   6402      1.1  christos     { Bad_Opcode },
   6403      1.1  christos     { Bad_Opcode },
   6404      1.1  christos     /* 08 */
   6405      1.1  christos     { Bad_Opcode },
   6406      1.1  christos     { Bad_Opcode },
   6407      1.1  christos     { Bad_Opcode },
   6408      1.1  christos     { Bad_Opcode },
   6409      1.1  christos     { Bad_Opcode },
   6410      1.1  christos     { Bad_Opcode },
   6411      1.1  christos     { Bad_Opcode },
   6412      1.1  christos     { Bad_Opcode },
   6413      1.1  christos     /* 10 */
   6414      1.1  christos     { Bad_Opcode },
   6415      1.1  christos     { Bad_Opcode },
   6416      1.1  christos     { Bad_Opcode },
   6417      1.1  christos     { Bad_Opcode },
   6418      1.1  christos     { Bad_Opcode },
   6419      1.1  christos     { Bad_Opcode },
   6420      1.1  christos     { Bad_Opcode },
   6421      1.1  christos     { Bad_Opcode },
   6422      1.1  christos     /* 18 */
   6423      1.1  christos     { Bad_Opcode },
   6424      1.1  christos     { Bad_Opcode },
   6425      1.1  christos     { Bad_Opcode },
   6426      1.1  christos     { Bad_Opcode },
   6427      1.1  christos     { Bad_Opcode },
   6428      1.1  christos     { Bad_Opcode },
   6429      1.1  christos     { Bad_Opcode },
   6430      1.1  christos     { Bad_Opcode },
   6431      1.1  christos     /* 20 */
   6432      1.1  christos     { "ptest",		{ XX } },
   6433      1.1  christos     { Bad_Opcode },
   6434      1.1  christos     { Bad_Opcode },
   6435      1.1  christos     { Bad_Opcode },
   6436      1.1  christos     { Bad_Opcode },
   6437      1.1  christos     { Bad_Opcode },
   6438      1.1  christos     { Bad_Opcode },
   6439      1.1  christos     { Bad_Opcode },
   6440      1.1  christos     /* 28 */
   6441      1.1  christos     { Bad_Opcode },
   6442      1.1  christos     { Bad_Opcode },
   6443      1.1  christos     { Bad_Opcode },
   6444      1.1  christos     { Bad_Opcode },
   6445      1.1  christos     { Bad_Opcode },
   6446      1.1  christos     { Bad_Opcode },
   6447      1.1  christos     { Bad_Opcode },
   6448      1.1  christos     { Bad_Opcode },
   6449      1.1  christos     /* 30 */
   6450      1.1  christos     { Bad_Opcode },
   6451      1.1  christos     { Bad_Opcode },
   6452      1.1  christos     { Bad_Opcode },
   6453      1.1  christos     { Bad_Opcode },
   6454      1.1  christos     { Bad_Opcode },
   6455      1.1  christos     { Bad_Opcode },
   6456      1.1  christos     { Bad_Opcode },
   6457      1.1  christos     { Bad_Opcode },
   6458      1.1  christos     /* 38 */
   6459      1.1  christos     { Bad_Opcode },
   6460      1.1  christos     { Bad_Opcode },
   6461      1.1  christos     { Bad_Opcode },
   6462      1.1  christos     { Bad_Opcode },
   6463      1.1  christos     { Bad_Opcode },
   6464      1.1  christos     { Bad_Opcode },
   6465      1.1  christos     { Bad_Opcode },
   6466      1.1  christos     { Bad_Opcode },
   6467      1.1  christos     /* 40 */
   6468      1.1  christos     { Bad_Opcode },
   6469      1.1  christos     { "phaddbw",	{ XM, EXq } },
   6470      1.1  christos     { "phaddbd",	{ XM, EXq } },
   6471      1.1  christos     { "phaddbq",	{ XM, EXq } },
   6472      1.1  christos     { Bad_Opcode },
   6473      1.1  christos     { Bad_Opcode },
   6474      1.1  christos     { "phaddwd",	{ XM, EXq } },
   6475      1.1  christos     { "phaddwq",	{ XM, EXq } },
   6476      1.1  christos     /* 48 */
   6477      1.1  christos     { Bad_Opcode },
   6478      1.1  christos     { Bad_Opcode },
   6479      1.1  christos     { Bad_Opcode },
   6480      1.1  christos     { "phadddq",	{ XM, EXq } },
   6481      1.1  christos     { Bad_Opcode },
   6482      1.1  christos     { Bad_Opcode },
   6483      1.1  christos     { Bad_Opcode },
   6484      1.1  christos     { Bad_Opcode },
   6485      1.1  christos     /* 50 */
   6486      1.1  christos     { Bad_Opcode },
   6487      1.1  christos     { "phaddubw",	{ XM, EXq } },
   6488      1.1  christos     { "phaddubd",	{ XM, EXq } },
   6489      1.1  christos     { "phaddubq",	{ XM, EXq } },
   6490      1.1  christos     { Bad_Opcode },
   6491      1.1  christos     { Bad_Opcode },
   6492      1.1  christos     { "phadduwd",	{ XM, EXq } },
   6493      1.1  christos     { "phadduwq",	{ XM, EXq } },
   6494      1.1  christos     /* 58 */
   6495      1.1  christos     { Bad_Opcode },
   6496      1.1  christos     { Bad_Opcode },
   6497      1.1  christos     { Bad_Opcode },
   6498      1.1  christos     { "phaddudq",	{ XM, EXq } },
   6499      1.1  christos     { Bad_Opcode },
   6500      1.1  christos     { Bad_Opcode },
   6501      1.1  christos     { Bad_Opcode },
   6502      1.1  christos     { Bad_Opcode },
   6503      1.1  christos     /* 60 */
   6504      1.1  christos     { Bad_Opcode },
   6505      1.1  christos     { "phsubbw",	{ XM, EXq } },
   6506      1.1  christos     { "phsubbd",	{ XM, EXq } },
   6507      1.1  christos     { "phsubbq",	{ XM, EXq } },
   6508      1.1  christos     { Bad_Opcode },
   6509      1.1  christos     { Bad_Opcode },
   6510      1.1  christos     { Bad_Opcode },
   6511      1.1  christos     { Bad_Opcode },
   6512      1.1  christos     /* 68 */
   6513      1.1  christos     { Bad_Opcode },
   6514      1.1  christos     { Bad_Opcode },
   6515      1.1  christos     { Bad_Opcode },
   6516      1.1  christos     { Bad_Opcode },
   6517      1.1  christos     { Bad_Opcode },
   6518      1.1  christos     { Bad_Opcode },
   6519      1.1  christos     { Bad_Opcode },
   6520      1.1  christos     { Bad_Opcode },
   6521      1.1  christos     /* 70 */
   6522      1.1  christos     { Bad_Opcode },
   6523      1.1  christos     { Bad_Opcode },
   6524      1.1  christos     { Bad_Opcode },
   6525      1.1  christos     { Bad_Opcode },
   6526      1.1  christos     { Bad_Opcode },
   6527      1.1  christos     { Bad_Opcode },
   6528      1.1  christos     { Bad_Opcode },
   6529      1.1  christos     { Bad_Opcode },
   6530      1.1  christos     /* 78 */
   6531      1.1  christos     { Bad_Opcode },
   6532      1.1  christos     { Bad_Opcode },
   6533      1.1  christos     { Bad_Opcode },
   6534      1.1  christos     { Bad_Opcode },
   6535      1.1  christos     { Bad_Opcode },
   6536      1.1  christos     { Bad_Opcode },
   6537      1.1  christos     { Bad_Opcode },
   6538      1.1  christos     { Bad_Opcode },
   6539      1.1  christos     /* 80 */
   6540      1.1  christos     { Bad_Opcode },
   6541      1.1  christos     { Bad_Opcode },
   6542      1.1  christos     { Bad_Opcode },
   6543      1.1  christos     { Bad_Opcode },
   6544      1.1  christos     { Bad_Opcode },
   6545      1.1  christos     { Bad_Opcode },
   6546      1.1  christos     { Bad_Opcode },
   6547      1.1  christos     { Bad_Opcode },
   6548      1.1  christos     /* 88 */
   6549      1.1  christos     { Bad_Opcode },
   6550      1.1  christos     { Bad_Opcode },
   6551      1.1  christos     { Bad_Opcode },
   6552      1.1  christos     { Bad_Opcode },
   6553      1.1  christos     { Bad_Opcode },
   6554      1.1  christos     { Bad_Opcode },
   6555      1.1  christos     { Bad_Opcode },
   6556      1.1  christos     { Bad_Opcode },
   6557      1.1  christos     /* 90 */
   6558      1.1  christos     { Bad_Opcode },
   6559      1.1  christos     { Bad_Opcode },
   6560      1.1  christos     { Bad_Opcode },
   6561      1.1  christos     { Bad_Opcode },
   6562      1.1  christos     { Bad_Opcode },
   6563      1.1  christos     { Bad_Opcode },
   6564      1.1  christos     { Bad_Opcode },
   6565      1.1  christos     { Bad_Opcode },
   6566      1.1  christos     /* 98 */
   6567      1.1  christos     { Bad_Opcode },
   6568      1.1  christos     { Bad_Opcode },
   6569      1.1  christos     { Bad_Opcode },
   6570      1.1  christos     { Bad_Opcode },
   6571      1.1  christos     { Bad_Opcode },
   6572      1.1  christos     { Bad_Opcode },
   6573      1.1  christos     { Bad_Opcode },
   6574      1.1  christos     { Bad_Opcode },
   6575      1.1  christos     /* a0 */
   6576      1.1  christos     { Bad_Opcode },
   6577      1.1  christos     { Bad_Opcode },
   6578      1.1  christos     { Bad_Opcode },
   6579      1.1  christos     { Bad_Opcode },
   6580      1.1  christos     { Bad_Opcode },
   6581      1.1  christos     { Bad_Opcode },
   6582      1.1  christos     { Bad_Opcode },
   6583      1.1  christos     { Bad_Opcode },
   6584      1.1  christos     /* a8 */
   6585      1.1  christos     { Bad_Opcode },
   6586      1.1  christos     { Bad_Opcode },
   6587      1.1  christos     { Bad_Opcode },
   6588      1.1  christos     { Bad_Opcode },
   6589      1.1  christos     { Bad_Opcode },
   6590      1.1  christos     { Bad_Opcode },
   6591      1.1  christos     { Bad_Opcode },
   6592      1.1  christos     { Bad_Opcode },
   6593      1.1  christos     /* b0 */
   6594      1.1  christos     { Bad_Opcode },
   6595      1.1  christos     { Bad_Opcode },
   6596      1.1  christos     { Bad_Opcode },
   6597      1.1  christos     { Bad_Opcode },
   6598      1.1  christos     { Bad_Opcode },
   6599      1.1  christos     { Bad_Opcode },
   6600      1.1  christos     { Bad_Opcode },
   6601      1.1  christos     { Bad_Opcode },
   6602      1.1  christos     /* b8 */
   6603      1.1  christos     { Bad_Opcode },
   6604      1.1  christos     { Bad_Opcode },
   6605      1.1  christos     { Bad_Opcode },
   6606      1.1  christos     { Bad_Opcode },
   6607      1.1  christos     { Bad_Opcode },
   6608      1.1  christos     { Bad_Opcode },
   6609      1.1  christos     { Bad_Opcode },
   6610      1.1  christos     { Bad_Opcode },
   6611      1.1  christos     /* c0 */
   6612      1.1  christos     { Bad_Opcode },
   6613      1.1  christos     { Bad_Opcode },
   6614      1.1  christos     { Bad_Opcode },
   6615      1.1  christos     { Bad_Opcode },
   6616      1.1  christos     { Bad_Opcode },
   6617      1.1  christos     { Bad_Opcode },
   6618      1.1  christos     { Bad_Opcode },
   6619      1.1  christos     { Bad_Opcode },
   6620      1.1  christos     /* c8 */
   6621      1.1  christos     { Bad_Opcode },
   6622      1.1  christos     { Bad_Opcode },
   6623      1.1  christos     { Bad_Opcode },
   6624      1.1  christos     { Bad_Opcode },
   6625      1.1  christos     { Bad_Opcode },
   6626      1.1  christos     { Bad_Opcode },
   6627      1.1  christos     { Bad_Opcode },
   6628      1.1  christos     { Bad_Opcode },
   6629      1.1  christos     /* d0 */
   6630      1.1  christos     { Bad_Opcode },
   6631      1.1  christos     { Bad_Opcode },
   6632      1.1  christos     { Bad_Opcode },
   6633      1.1  christos     { Bad_Opcode },
   6634      1.1  christos     { Bad_Opcode },
   6635      1.1  christos     { Bad_Opcode },
   6636      1.1  christos     { Bad_Opcode },
   6637      1.1  christos     { Bad_Opcode },
   6638      1.1  christos     /* d8 */
   6639      1.1  christos     { Bad_Opcode },
   6640      1.1  christos     { Bad_Opcode },
   6641      1.1  christos     { Bad_Opcode },
   6642      1.1  christos     { Bad_Opcode },
   6643      1.1  christos     { Bad_Opcode },
   6644      1.1  christos     { Bad_Opcode },
   6645      1.1  christos     { Bad_Opcode },
   6646      1.1  christos     { Bad_Opcode },
   6647      1.1  christos     /* e0 */
   6648      1.1  christos     { Bad_Opcode },
   6649      1.1  christos     { Bad_Opcode },
   6650      1.1  christos     { Bad_Opcode },
   6651      1.1  christos     { Bad_Opcode },
   6652      1.1  christos     { Bad_Opcode },
   6653      1.1  christos     { Bad_Opcode },
   6654      1.1  christos     { Bad_Opcode },
   6655      1.1  christos     { Bad_Opcode },
   6656      1.1  christos     /* e8 */
   6657      1.1  christos     { Bad_Opcode },
   6658      1.1  christos     { Bad_Opcode },
   6659      1.1  christos     { Bad_Opcode },
   6660      1.1  christos     { Bad_Opcode },
   6661      1.1  christos     { Bad_Opcode },
   6662      1.1  christos     { Bad_Opcode },
   6663      1.1  christos     { Bad_Opcode },
   6664      1.1  christos     { Bad_Opcode },
   6665      1.1  christos     /* f0 */
   6666      1.1  christos     { Bad_Opcode },
   6667      1.1  christos     { Bad_Opcode },
   6668      1.1  christos     { Bad_Opcode },
   6669      1.1  christos     { Bad_Opcode },
   6670      1.1  christos     { Bad_Opcode },
   6671      1.1  christos     { Bad_Opcode },
   6672      1.1  christos     { Bad_Opcode },
   6673      1.1  christos     { Bad_Opcode },
   6674      1.1  christos     /* f8 */
   6675      1.1  christos     { Bad_Opcode },
   6676      1.1  christos     { Bad_Opcode },
   6677      1.1  christos     { Bad_Opcode },
   6678      1.1  christos     { Bad_Opcode },
   6679      1.1  christos     { Bad_Opcode },
   6680      1.1  christos     { Bad_Opcode },
   6681      1.1  christos     { Bad_Opcode },
   6682      1.1  christos     { Bad_Opcode },
   6683      1.1  christos   },
   6684      1.1  christos };
   6685      1.1  christos 
   6686      1.1  christos static const struct dis386 xop_table[][256] = {
   6687      1.1  christos   /* XOP_08 */
   6688      1.1  christos   {
   6689      1.1  christos     /* 00 */
   6690      1.1  christos     { Bad_Opcode },
   6691      1.1  christos     { Bad_Opcode },
   6692      1.1  christos     { Bad_Opcode },
   6693      1.1  christos     { Bad_Opcode },
   6694      1.1  christos     { Bad_Opcode },
   6695      1.1  christos     { Bad_Opcode },
   6696      1.1  christos     { Bad_Opcode },
   6697      1.1  christos     { Bad_Opcode },
   6698      1.1  christos     /* 08 */
   6699      1.1  christos     { Bad_Opcode },
   6700      1.1  christos     { Bad_Opcode },
   6701      1.1  christos     { Bad_Opcode },
   6702      1.1  christos     { Bad_Opcode },
   6703      1.1  christos     { Bad_Opcode },
   6704      1.1  christos     { Bad_Opcode },
   6705      1.1  christos     { Bad_Opcode },
   6706      1.1  christos     { Bad_Opcode },
   6707      1.1  christos     /* 10 */
   6708  1.1.1.2  christos     { Bad_Opcode },
   6709      1.1  christos     { Bad_Opcode },
   6710      1.1  christos     { Bad_Opcode },
   6711      1.1  christos     { Bad_Opcode },
   6712      1.1  christos     { Bad_Opcode },
   6713      1.1  christos     { Bad_Opcode },
   6714      1.1  christos     { Bad_Opcode },
   6715      1.1  christos     { Bad_Opcode },
   6716      1.1  christos     /* 18 */
   6717      1.1  christos     { Bad_Opcode },
   6718      1.1  christos     { Bad_Opcode },
   6719      1.1  christos     { Bad_Opcode },
   6720      1.1  christos     { Bad_Opcode },
   6721      1.1  christos     { Bad_Opcode },
   6722      1.1  christos     { Bad_Opcode },
   6723      1.1  christos     { Bad_Opcode },
   6724      1.1  christos     { Bad_Opcode },
   6725      1.1  christos     /* 20 */
   6726      1.1  christos     { Bad_Opcode },
   6727      1.1  christos     { Bad_Opcode },
   6728      1.1  christos     { Bad_Opcode },
   6729      1.1  christos     { Bad_Opcode },
   6730      1.1  christos     { Bad_Opcode },
   6731      1.1  christos     { Bad_Opcode },
   6732      1.1  christos     { Bad_Opcode },
   6733      1.1  christos     { Bad_Opcode },
   6734      1.1  christos     /* 28 */
   6735      1.1  christos     { Bad_Opcode },
   6736      1.1  christos     { Bad_Opcode },
   6737      1.1  christos     { Bad_Opcode },
   6738      1.1  christos     { Bad_Opcode },
   6739      1.1  christos     { Bad_Opcode },
   6740      1.1  christos     { Bad_Opcode },
   6741      1.1  christos     { Bad_Opcode },
   6742      1.1  christos     { Bad_Opcode },
   6743      1.1  christos     /* 30 */
   6744      1.1  christos     { Bad_Opcode },
   6745      1.1  christos     { Bad_Opcode },
   6746      1.1  christos     { Bad_Opcode },
   6747      1.1  christos     { Bad_Opcode },
   6748      1.1  christos     { Bad_Opcode },
   6749      1.1  christos     { Bad_Opcode },
   6750      1.1  christos     { Bad_Opcode },
   6751      1.1  christos     { Bad_Opcode },
   6752      1.1  christos     /* 38 */
   6753      1.1  christos     { Bad_Opcode },
   6754      1.1  christos     { Bad_Opcode },
   6755      1.1  christos     { Bad_Opcode },
   6756      1.1  christos     { Bad_Opcode },
   6757      1.1  christos     { Bad_Opcode },
   6758      1.1  christos     { Bad_Opcode },
   6759      1.1  christos     { Bad_Opcode },
   6760      1.1  christos     { Bad_Opcode },
   6761      1.1  christos     /* 40 */
   6762      1.1  christos     { Bad_Opcode },
   6763      1.1  christos     { Bad_Opcode },
   6764      1.1  christos     { Bad_Opcode },
   6765      1.1  christos     { Bad_Opcode },
   6766      1.1  christos     { Bad_Opcode },
   6767      1.1  christos     { Bad_Opcode },
   6768      1.1  christos     { Bad_Opcode },
   6769      1.1  christos     { Bad_Opcode },
   6770      1.1  christos     /* 48 */
   6771      1.1  christos     { Bad_Opcode },
   6772      1.1  christos     { Bad_Opcode },
   6773      1.1  christos     { Bad_Opcode },
   6774      1.1  christos     { Bad_Opcode },
   6775      1.1  christos     { Bad_Opcode },
   6776      1.1  christos     { Bad_Opcode },
   6777      1.1  christos     { Bad_Opcode },
   6778      1.1  christos     { Bad_Opcode },
   6779      1.1  christos     /* 50 */
   6780      1.1  christos     { Bad_Opcode },
   6781      1.1  christos     { Bad_Opcode },
   6782      1.1  christos     { Bad_Opcode },
   6783      1.1  christos     { Bad_Opcode },
   6784      1.1  christos     { Bad_Opcode },
   6785      1.1  christos     { Bad_Opcode },
   6786      1.1  christos     { Bad_Opcode },
   6787      1.1  christos     { Bad_Opcode },
   6788      1.1  christos     /* 58 */
   6789      1.1  christos     { Bad_Opcode },
   6790      1.1  christos     { Bad_Opcode },
   6791      1.1  christos     { Bad_Opcode },
   6792      1.1  christos     { Bad_Opcode },
   6793      1.1  christos     { Bad_Opcode },
   6794      1.1  christos     { Bad_Opcode },
   6795      1.1  christos     { Bad_Opcode },
   6796      1.1  christos     { Bad_Opcode },
   6797      1.1  christos     /* 60 */
   6798      1.1  christos     { Bad_Opcode },
   6799      1.1  christos     { Bad_Opcode },
   6800      1.1  christos     { Bad_Opcode },
   6801      1.1  christos     { Bad_Opcode },
   6802      1.1  christos     { Bad_Opcode },
   6803      1.1  christos     { Bad_Opcode },
   6804      1.1  christos     { Bad_Opcode },
   6805      1.1  christos     { Bad_Opcode },
   6806      1.1  christos     /* 68 */
   6807      1.1  christos     { Bad_Opcode },
   6808      1.1  christos     { Bad_Opcode },
   6809      1.1  christos     { Bad_Opcode },
   6810      1.1  christos     { Bad_Opcode },
   6811      1.1  christos     { Bad_Opcode },
   6812      1.1  christos     { Bad_Opcode },
   6813      1.1  christos     { Bad_Opcode },
   6814      1.1  christos     { Bad_Opcode },
   6815      1.1  christos     /* 70 */
   6816      1.1  christos     { Bad_Opcode },
   6817      1.1  christos     { Bad_Opcode },
   6818      1.1  christos     { Bad_Opcode },
   6819      1.1  christos     { Bad_Opcode },
   6820      1.1  christos     { Bad_Opcode },
   6821      1.1  christos     { Bad_Opcode },
   6822      1.1  christos     { Bad_Opcode },
   6823      1.1  christos     { Bad_Opcode },
   6824      1.1  christos     /* 78 */
   6825      1.1  christos     { Bad_Opcode },
   6826      1.1  christos     { Bad_Opcode },
   6827      1.1  christos     { Bad_Opcode },
   6828      1.1  christos     { Bad_Opcode },
   6829      1.1  christos     { Bad_Opcode },
   6830      1.1  christos     { Bad_Opcode },
   6831      1.1  christos     { Bad_Opcode },
   6832      1.1  christos     { Bad_Opcode },
   6833      1.1  christos     /* 80 */
   6834      1.1  christos     { Bad_Opcode },
   6835      1.1  christos     { Bad_Opcode },
   6836      1.1  christos     { Bad_Opcode },
   6837      1.1  christos     { Bad_Opcode },
   6838      1.1  christos     { Bad_Opcode },
   6839      1.1  christos     { "vpmacssww", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6840      1.1  christos     { "vpmacsswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6841      1.1  christos     { "vpmacssdql", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6842      1.1  christos     /* 88 */
   6843      1.1  christos     { Bad_Opcode },
   6844      1.1  christos     { Bad_Opcode },
   6845      1.1  christos     { Bad_Opcode },
   6846      1.1  christos     { Bad_Opcode },
   6847      1.1  christos     { Bad_Opcode },
   6848      1.1  christos     { Bad_Opcode },
   6849      1.1  christos     { "vpmacssdd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6850      1.1  christos     { "vpmacssdqh", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6851      1.1  christos     /* 90 */
   6852      1.1  christos     { Bad_Opcode },
   6853      1.1  christos     { Bad_Opcode },
   6854      1.1  christos     { Bad_Opcode },
   6855      1.1  christos     { Bad_Opcode },
   6856      1.1  christos     { Bad_Opcode },
   6857      1.1  christos     { "vpmacsww", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6858      1.1  christos     { "vpmacswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6859      1.1  christos     { "vpmacsdql", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6860      1.1  christos     /* 98 */
   6861      1.1  christos     { Bad_Opcode },
   6862      1.1  christos     { Bad_Opcode },
   6863      1.1  christos     { Bad_Opcode },
   6864      1.1  christos     { Bad_Opcode },
   6865      1.1  christos     { Bad_Opcode },
   6866      1.1  christos     { Bad_Opcode },
   6867      1.1  christos     { "vpmacsdd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6868      1.1  christos     { "vpmacsdqh", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6869      1.1  christos     /* a0 */
   6870      1.1  christos     { Bad_Opcode },
   6871      1.1  christos     { Bad_Opcode },
   6872      1.1  christos     { "vpcmov", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6873      1.1  christos     { "vpperm", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6874      1.1  christos     { Bad_Opcode },
   6875      1.1  christos     { Bad_Opcode },
   6876      1.1  christos     { "vpmadcsswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6877      1.1  christos     { Bad_Opcode },
   6878      1.1  christos     /* a8 */
   6879      1.1  christos     { Bad_Opcode },
   6880      1.1  christos     { Bad_Opcode },
   6881      1.1  christos     { Bad_Opcode },
   6882      1.1  christos     { Bad_Opcode },
   6883      1.1  christos     { Bad_Opcode },
   6884      1.1  christos     { Bad_Opcode },
   6885      1.1  christos     { Bad_Opcode },
   6886      1.1  christos     { Bad_Opcode },
   6887      1.1  christos     /* b0 */
   6888      1.1  christos     { Bad_Opcode },
   6889      1.1  christos     { Bad_Opcode },
   6890      1.1  christos     { Bad_Opcode },
   6891      1.1  christos     { Bad_Opcode },
   6892      1.1  christos     { Bad_Opcode },
   6893      1.1  christos     { Bad_Opcode },
   6894      1.1  christos     { "vpmadcswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
   6895      1.1  christos     { Bad_Opcode },
   6896      1.1  christos     /* b8 */
   6897      1.1  christos     { Bad_Opcode },
   6898      1.1  christos     { Bad_Opcode },
   6899      1.1  christos     { Bad_Opcode },
   6900      1.1  christos     { Bad_Opcode },
   6901      1.1  christos     { Bad_Opcode },
   6902      1.1  christos     { Bad_Opcode },
   6903      1.1  christos     { Bad_Opcode },
   6904      1.1  christos     { Bad_Opcode },
   6905      1.1  christos     /* c0 */
   6906      1.1  christos     { "vprotb", 	{ XM, Vex_2src_1, Ib } },
   6907      1.1  christos     { "vprotw", 	{ XM, Vex_2src_1, Ib } },
   6908      1.1  christos     { "vprotd", 	{ XM, Vex_2src_1, Ib } },
   6909      1.1  christos     { "vprotq", 	{ XM, Vex_2src_1, Ib } },
   6910      1.1  christos     { Bad_Opcode },
   6911      1.1  christos     { Bad_Opcode },
   6912      1.1  christos     { Bad_Opcode },
   6913      1.1  christos     { Bad_Opcode },
   6914      1.1  christos     /* c8 */
   6915      1.1  christos     { Bad_Opcode },
   6916      1.1  christos     { Bad_Opcode },
   6917      1.1  christos     { Bad_Opcode },
   6918      1.1  christos     { Bad_Opcode },
   6919  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
   6920  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
   6921  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
   6922  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
   6923      1.1  christos     /* d0 */
   6924      1.1  christos     { Bad_Opcode },
   6925      1.1  christos     { Bad_Opcode },
   6926      1.1  christos     { Bad_Opcode },
   6927      1.1  christos     { Bad_Opcode },
   6928      1.1  christos     { Bad_Opcode },
   6929      1.1  christos     { Bad_Opcode },
   6930      1.1  christos     { Bad_Opcode },
   6931      1.1  christos     { Bad_Opcode },
   6932      1.1  christos     /* d8 */
   6933      1.1  christos     { Bad_Opcode },
   6934      1.1  christos     { Bad_Opcode },
   6935      1.1  christos     { Bad_Opcode },
   6936      1.1  christos     { Bad_Opcode },
   6937      1.1  christos     { Bad_Opcode },
   6938      1.1  christos     { Bad_Opcode },
   6939      1.1  christos     { Bad_Opcode },
   6940      1.1  christos     { Bad_Opcode },
   6941      1.1  christos     /* e0 */
   6942      1.1  christos     { Bad_Opcode },
   6943      1.1  christos     { Bad_Opcode },
   6944      1.1  christos     { Bad_Opcode },
   6945      1.1  christos     { Bad_Opcode },
   6946      1.1  christos     { Bad_Opcode },
   6947      1.1  christos     { Bad_Opcode },
   6948      1.1  christos     { Bad_Opcode },
   6949      1.1  christos     { Bad_Opcode },
   6950      1.1  christos     /* e8 */
   6951      1.1  christos     { Bad_Opcode },
   6952      1.1  christos     { Bad_Opcode },
   6953      1.1  christos     { Bad_Opcode },
   6954      1.1  christos     { Bad_Opcode },
   6955  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
   6956  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
   6957  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
   6958  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
   6959      1.1  christos     /* f0 */
   6960      1.1  christos     { Bad_Opcode },
   6961      1.1  christos     { Bad_Opcode },
   6962      1.1  christos     { Bad_Opcode },
   6963      1.1  christos     { Bad_Opcode },
   6964      1.1  christos     { Bad_Opcode },
   6965      1.1  christos     { Bad_Opcode },
   6966      1.1  christos     { Bad_Opcode },
   6967      1.1  christos     { Bad_Opcode },
   6968      1.1  christos     /* f8 */
   6969      1.1  christos     { Bad_Opcode },
   6970      1.1  christos     { Bad_Opcode },
   6971      1.1  christos     { Bad_Opcode },
   6972      1.1  christos     { Bad_Opcode },
   6973      1.1  christos     { Bad_Opcode },
   6974      1.1  christos     { Bad_Opcode },
   6975      1.1  christos     { Bad_Opcode },
   6976      1.1  christos     { Bad_Opcode },
   6977      1.1  christos   },
   6978      1.1  christos   /* XOP_09 */
   6979      1.1  christos   {
   6980      1.1  christos     /* 00 */
   6981      1.1  christos     { Bad_Opcode },
   6982      1.1  christos     { REG_TABLE (REG_XOP_TBM_01) },
   6983      1.1  christos     { REG_TABLE (REG_XOP_TBM_02) },
   6984      1.1  christos     { Bad_Opcode },
   6985      1.1  christos     { Bad_Opcode },
   6986      1.1  christos     { Bad_Opcode },
   6987      1.1  christos     { Bad_Opcode },
   6988      1.1  christos     { Bad_Opcode },
   6989      1.1  christos     /* 08 */
   6990      1.1  christos     { Bad_Opcode },
   6991      1.1  christos     { Bad_Opcode },
   6992      1.1  christos     { Bad_Opcode },
   6993      1.1  christos     { Bad_Opcode },
   6994      1.1  christos     { Bad_Opcode },
   6995      1.1  christos     { Bad_Opcode },
   6996      1.1  christos     { Bad_Opcode },
   6997      1.1  christos     { Bad_Opcode },
   6998      1.1  christos     /* 10 */
   6999      1.1  christos     { Bad_Opcode },
   7000      1.1  christos     { Bad_Opcode },
   7001      1.1  christos     { REG_TABLE (REG_XOP_LWPCB) },
   7002      1.1  christos     { Bad_Opcode },
   7003      1.1  christos     { Bad_Opcode },
   7004      1.1  christos     { Bad_Opcode },
   7005      1.1  christos     { Bad_Opcode },
   7006      1.1  christos     { Bad_Opcode },
   7007      1.1  christos     /* 18 */
   7008      1.1  christos     { Bad_Opcode },
   7009      1.1  christos     { Bad_Opcode },
   7010      1.1  christos     { Bad_Opcode },
   7011      1.1  christos     { Bad_Opcode },
   7012      1.1  christos     { Bad_Opcode },
   7013      1.1  christos     { Bad_Opcode },
   7014      1.1  christos     { Bad_Opcode },
   7015      1.1  christos     { Bad_Opcode },
   7016      1.1  christos     /* 20 */
   7017      1.1  christos     { Bad_Opcode },
   7018      1.1  christos     { Bad_Opcode },
   7019      1.1  christos     { Bad_Opcode },
   7020      1.1  christos     { Bad_Opcode },
   7021      1.1  christos     { Bad_Opcode },
   7022      1.1  christos     { Bad_Opcode },
   7023      1.1  christos     { Bad_Opcode },
   7024      1.1  christos     { Bad_Opcode },
   7025      1.1  christos     /* 28 */
   7026      1.1  christos     { Bad_Opcode },
   7027      1.1  christos     { Bad_Opcode },
   7028      1.1  christos     { Bad_Opcode },
   7029      1.1  christos     { Bad_Opcode },
   7030      1.1  christos     { Bad_Opcode },
   7031      1.1  christos     { Bad_Opcode },
   7032      1.1  christos     { Bad_Opcode },
   7033      1.1  christos     { Bad_Opcode },
   7034      1.1  christos     /* 30 */
   7035      1.1  christos     { Bad_Opcode },
   7036      1.1  christos     { Bad_Opcode },
   7037      1.1  christos     { Bad_Opcode },
   7038      1.1  christos     { Bad_Opcode },
   7039      1.1  christos     { Bad_Opcode },
   7040      1.1  christos     { Bad_Opcode },
   7041      1.1  christos     { Bad_Opcode },
   7042      1.1  christos     { Bad_Opcode },
   7043      1.1  christos     /* 38 */
   7044      1.1  christos     { Bad_Opcode },
   7045      1.1  christos     { Bad_Opcode },
   7046      1.1  christos     { Bad_Opcode },
   7047      1.1  christos     { Bad_Opcode },
   7048      1.1  christos     { Bad_Opcode },
   7049      1.1  christos     { Bad_Opcode },
   7050      1.1  christos     { Bad_Opcode },
   7051      1.1  christos     { Bad_Opcode },
   7052      1.1  christos     /* 40 */
   7053      1.1  christos     { Bad_Opcode },
   7054      1.1  christos     { Bad_Opcode },
   7055      1.1  christos     { Bad_Opcode },
   7056      1.1  christos     { Bad_Opcode },
   7057      1.1  christos     { Bad_Opcode },
   7058      1.1  christos     { Bad_Opcode },
   7059      1.1  christos     { Bad_Opcode },
   7060      1.1  christos     { Bad_Opcode },
   7061      1.1  christos     /* 48 */
   7062      1.1  christos     { Bad_Opcode },
   7063      1.1  christos     { Bad_Opcode },
   7064      1.1  christos     { Bad_Opcode },
   7065      1.1  christos     { Bad_Opcode },
   7066      1.1  christos     { Bad_Opcode },
   7067      1.1  christos     { Bad_Opcode },
   7068      1.1  christos     { Bad_Opcode },
   7069      1.1  christos     { Bad_Opcode },
   7070      1.1  christos     /* 50 */
   7071      1.1  christos     { Bad_Opcode },
   7072      1.1  christos     { Bad_Opcode },
   7073      1.1  christos     { Bad_Opcode },
   7074      1.1  christos     { Bad_Opcode },
   7075      1.1  christos     { Bad_Opcode },
   7076      1.1  christos     { Bad_Opcode },
   7077      1.1  christos     { Bad_Opcode },
   7078      1.1  christos     { Bad_Opcode },
   7079      1.1  christos     /* 58 */
   7080      1.1  christos     { Bad_Opcode },
   7081      1.1  christos     { Bad_Opcode },
   7082      1.1  christos     { Bad_Opcode },
   7083      1.1  christos     { Bad_Opcode },
   7084      1.1  christos     { Bad_Opcode },
   7085      1.1  christos     { Bad_Opcode },
   7086      1.1  christos     { Bad_Opcode },
   7087      1.1  christos     { Bad_Opcode },
   7088      1.1  christos     /* 60 */
   7089      1.1  christos     { Bad_Opcode },
   7090      1.1  christos     { Bad_Opcode },
   7091      1.1  christos     { Bad_Opcode },
   7092      1.1  christos     { Bad_Opcode },
   7093      1.1  christos     { Bad_Opcode },
   7094      1.1  christos     { Bad_Opcode },
   7095      1.1  christos     { Bad_Opcode },
   7096      1.1  christos     { Bad_Opcode },
   7097      1.1  christos     /* 68 */
   7098      1.1  christos     { Bad_Opcode },
   7099      1.1  christos     { Bad_Opcode },
   7100      1.1  christos     { Bad_Opcode },
   7101      1.1  christos     { Bad_Opcode },
   7102      1.1  christos     { Bad_Opcode },
   7103      1.1  christos     { Bad_Opcode },
   7104      1.1  christos     { Bad_Opcode },
   7105      1.1  christos     { Bad_Opcode },
   7106      1.1  christos     /* 70 */
   7107      1.1  christos     { Bad_Opcode },
   7108      1.1  christos     { Bad_Opcode },
   7109      1.1  christos     { Bad_Opcode },
   7110      1.1  christos     { Bad_Opcode },
   7111      1.1  christos     { Bad_Opcode },
   7112      1.1  christos     { Bad_Opcode },
   7113      1.1  christos     { Bad_Opcode },
   7114      1.1  christos     { Bad_Opcode },
   7115      1.1  christos     /* 78 */
   7116      1.1  christos     { Bad_Opcode },
   7117      1.1  christos     { Bad_Opcode },
   7118      1.1  christos     { Bad_Opcode },
   7119      1.1  christos     { Bad_Opcode },
   7120      1.1  christos     { Bad_Opcode },
   7121      1.1  christos     { Bad_Opcode },
   7122      1.1  christos     { Bad_Opcode },
   7123      1.1  christos     { Bad_Opcode },
   7124      1.1  christos     /* 80 */
   7125      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
   7126      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
   7127      1.1  christos     { "vfrczss", 	{ XM, EXd } },
   7128      1.1  christos     { "vfrczsd", 	{ XM, EXq } },
   7129      1.1  christos     { Bad_Opcode },
   7130      1.1  christos     { Bad_Opcode },
   7131      1.1  christos     { Bad_Opcode },
   7132      1.1  christos     { Bad_Opcode },
   7133      1.1  christos     /* 88 */
   7134      1.1  christos     { Bad_Opcode },
   7135      1.1  christos     { Bad_Opcode },
   7136      1.1  christos     { Bad_Opcode },
   7137      1.1  christos     { Bad_Opcode },
   7138      1.1  christos     { Bad_Opcode },
   7139      1.1  christos     { Bad_Opcode },
   7140      1.1  christos     { Bad_Opcode },
   7141      1.1  christos     { Bad_Opcode },
   7142      1.1  christos     /* 90 */
   7143      1.1  christos     { "vprotb",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7144      1.1  christos     { "vprotw",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7145      1.1  christos     { "vprotd",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7146      1.1  christos     { "vprotq",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7147      1.1  christos     { "vpshlb",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7148      1.1  christos     { "vpshlw",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7149      1.1  christos     { "vpshld",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7150      1.1  christos     { "vpshlq",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7151      1.1  christos     /* 98 */
   7152      1.1  christos     { "vpshab",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7153      1.1  christos     { "vpshaw",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7154      1.1  christos     { "vpshad",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7155      1.1  christos     { "vpshaq",		{ XM, Vex_2src_1, Vex_2src_2 } },
   7156      1.1  christos     { Bad_Opcode },
   7157      1.1  christos     { Bad_Opcode },
   7158      1.1  christos     { Bad_Opcode },
   7159      1.1  christos     { Bad_Opcode },
   7160      1.1  christos     /* a0 */
   7161      1.1  christos     { Bad_Opcode },
   7162      1.1  christos     { Bad_Opcode },
   7163      1.1  christos     { Bad_Opcode },
   7164      1.1  christos     { Bad_Opcode },
   7165      1.1  christos     { Bad_Opcode },
   7166      1.1  christos     { Bad_Opcode },
   7167      1.1  christos     { Bad_Opcode },
   7168      1.1  christos     { Bad_Opcode },
   7169      1.1  christos     /* a8 */
   7170      1.1  christos     { Bad_Opcode },
   7171      1.1  christos     { Bad_Opcode },
   7172      1.1  christos     { Bad_Opcode },
   7173      1.1  christos     { Bad_Opcode },
   7174      1.1  christos     { Bad_Opcode },
   7175      1.1  christos     { Bad_Opcode },
   7176      1.1  christos     { Bad_Opcode },
   7177      1.1  christos     { Bad_Opcode },
   7178      1.1  christos     /* b0 */
   7179      1.1  christos     { Bad_Opcode },
   7180      1.1  christos     { Bad_Opcode },
   7181      1.1  christos     { Bad_Opcode },
   7182      1.1  christos     { Bad_Opcode },
   7183      1.1  christos     { Bad_Opcode },
   7184      1.1  christos     { Bad_Opcode },
   7185      1.1  christos     { Bad_Opcode },
   7186      1.1  christos     { Bad_Opcode },
   7187      1.1  christos     /* b8 */
   7188      1.1  christos     { Bad_Opcode },
   7189      1.1  christos     { Bad_Opcode },
   7190      1.1  christos     { Bad_Opcode },
   7191      1.1  christos     { Bad_Opcode },
   7192      1.1  christos     { Bad_Opcode },
   7193      1.1  christos     { Bad_Opcode },
   7194      1.1  christos     { Bad_Opcode },
   7195      1.1  christos     { Bad_Opcode },
   7196      1.1  christos     /* c0 */
   7197      1.1  christos     { Bad_Opcode },
   7198      1.1  christos     { "vphaddbw",	{ XM, EXxmm } },
   7199      1.1  christos     { "vphaddbd",	{ XM, EXxmm } },
   7200      1.1  christos     { "vphaddbq",	{ XM, EXxmm } },
   7201      1.1  christos     { Bad_Opcode },
   7202      1.1  christos     { Bad_Opcode },
   7203      1.1  christos     { "vphaddwd",	{ XM, EXxmm } },
   7204      1.1  christos     { "vphaddwq",	{ XM, EXxmm } },
   7205      1.1  christos     /* c8 */
   7206      1.1  christos     { Bad_Opcode },
   7207      1.1  christos     { Bad_Opcode },
   7208      1.1  christos     { Bad_Opcode },
   7209      1.1  christos     { "vphadddq",	{ XM, EXxmm } },
   7210      1.1  christos     { Bad_Opcode },
   7211      1.1  christos     { Bad_Opcode },
   7212      1.1  christos     { Bad_Opcode },
   7213      1.1  christos     { Bad_Opcode },
   7214      1.1  christos     /* d0 */
   7215      1.1  christos     { Bad_Opcode },
   7216      1.1  christos     { "vphaddubw",	{ XM, EXxmm } },
   7217      1.1  christos     { "vphaddubd",	{ XM, EXxmm } },
   7218      1.1  christos     { "vphaddubq",	{ XM, EXxmm } },
   7219      1.1  christos     { Bad_Opcode },
   7220      1.1  christos     { Bad_Opcode },
   7221      1.1  christos     { "vphadduwd",	{ XM, EXxmm } },
   7222      1.1  christos     { "vphadduwq",	{ XM, EXxmm } },
   7223      1.1  christos     /* d8 */
   7224      1.1  christos     { Bad_Opcode },
   7225      1.1  christos     { Bad_Opcode },
   7226      1.1  christos     { Bad_Opcode },
   7227      1.1  christos     { "vphaddudq",	{ XM, EXxmm } },
   7228      1.1  christos     { Bad_Opcode },
   7229      1.1  christos     { Bad_Opcode },
   7230      1.1  christos     { Bad_Opcode },
   7231      1.1  christos     { Bad_Opcode },
   7232      1.1  christos     /* e0 */
   7233      1.1  christos     { Bad_Opcode },
   7234      1.1  christos     { "vphsubbw",	{ XM, EXxmm } },
   7235      1.1  christos     { "vphsubwd",	{ XM, EXxmm } },
   7236      1.1  christos     { "vphsubdq",	{ XM, EXxmm } },
   7237      1.1  christos     { Bad_Opcode },
   7238      1.1  christos     { Bad_Opcode },
   7239      1.1  christos     { Bad_Opcode },
   7240      1.1  christos     { Bad_Opcode },
   7241      1.1  christos     /* e8 */
   7242      1.1  christos     { Bad_Opcode },
   7243      1.1  christos     { Bad_Opcode },
   7244      1.1  christos     { Bad_Opcode },
   7245      1.1  christos     { Bad_Opcode },
   7246      1.1  christos     { Bad_Opcode },
   7247      1.1  christos     { Bad_Opcode },
   7248      1.1  christos     { Bad_Opcode },
   7249      1.1  christos     { Bad_Opcode },
   7250      1.1  christos     /* f0 */
   7251      1.1  christos     { Bad_Opcode },
   7252      1.1  christos     { Bad_Opcode },
   7253      1.1  christos     { Bad_Opcode },
   7254      1.1  christos     { Bad_Opcode },
   7255      1.1  christos     { Bad_Opcode },
   7256      1.1  christos     { Bad_Opcode },
   7257      1.1  christos     { Bad_Opcode },
   7258      1.1  christos     { Bad_Opcode },
   7259      1.1  christos     /* f8 */
   7260      1.1  christos     { Bad_Opcode },
   7261      1.1  christos     { Bad_Opcode },
   7262      1.1  christos     { Bad_Opcode },
   7263      1.1  christos     { Bad_Opcode },
   7264      1.1  christos     { Bad_Opcode },
   7265      1.1  christos     { Bad_Opcode },
   7266      1.1  christos     { Bad_Opcode },
   7267      1.1  christos     { Bad_Opcode },
   7268      1.1  christos   },
   7269      1.1  christos   /* XOP_0A */
   7270      1.1  christos   {
   7271      1.1  christos     /* 00 */
   7272      1.1  christos     { Bad_Opcode },
   7273      1.1  christos     { Bad_Opcode },
   7274      1.1  christos     { Bad_Opcode },
   7275      1.1  christos     { Bad_Opcode },
   7276      1.1  christos     { Bad_Opcode },
   7277      1.1  christos     { Bad_Opcode },
   7278      1.1  christos     { Bad_Opcode },
   7279      1.1  christos     { Bad_Opcode },
   7280      1.1  christos     /* 08 */
   7281      1.1  christos     { Bad_Opcode },
   7282      1.1  christos     { Bad_Opcode },
   7283      1.1  christos     { Bad_Opcode },
   7284      1.1  christos     { Bad_Opcode },
   7285      1.1  christos     { Bad_Opcode },
   7286      1.1  christos     { Bad_Opcode },
   7287      1.1  christos     { Bad_Opcode },
   7288      1.1  christos     { Bad_Opcode },
   7289      1.1  christos     /* 10 */
   7290      1.1  christos     { "bextr",	{ Gv, Ev, Iq } },
   7291      1.1  christos     { Bad_Opcode },
   7292      1.1  christos     { REG_TABLE (REG_XOP_LWP) },
   7293      1.1  christos     { Bad_Opcode },
   7294      1.1  christos     { Bad_Opcode },
   7295      1.1  christos     { Bad_Opcode },
   7296      1.1  christos     { Bad_Opcode },
   7297      1.1  christos     { Bad_Opcode },
   7298      1.1  christos     /* 18 */
   7299      1.1  christos     { Bad_Opcode },
   7300      1.1  christos     { Bad_Opcode },
   7301      1.1  christos     { Bad_Opcode },
   7302      1.1  christos     { Bad_Opcode },
   7303      1.1  christos     { Bad_Opcode },
   7304      1.1  christos     { Bad_Opcode },
   7305      1.1  christos     { Bad_Opcode },
   7306      1.1  christos     { Bad_Opcode },
   7307      1.1  christos     /* 20 */
   7308      1.1  christos     { Bad_Opcode },
   7309      1.1  christos     { Bad_Opcode },
   7310      1.1  christos     { Bad_Opcode },
   7311      1.1  christos     { Bad_Opcode },
   7312      1.1  christos     { Bad_Opcode },
   7313      1.1  christos     { Bad_Opcode },
   7314      1.1  christos     { Bad_Opcode },
   7315      1.1  christos     { Bad_Opcode },
   7316      1.1  christos     /* 28 */
   7317      1.1  christos     { Bad_Opcode },
   7318      1.1  christos     { Bad_Opcode },
   7319      1.1  christos     { Bad_Opcode },
   7320      1.1  christos     { Bad_Opcode },
   7321      1.1  christos     { Bad_Opcode },
   7322      1.1  christos     { Bad_Opcode },
   7323      1.1  christos     { Bad_Opcode },
   7324      1.1  christos     { Bad_Opcode },
   7325      1.1  christos     /* 30 */
   7326      1.1  christos     { Bad_Opcode },
   7327      1.1  christos     { Bad_Opcode },
   7328      1.1  christos     { Bad_Opcode },
   7329      1.1  christos     { Bad_Opcode },
   7330      1.1  christos     { Bad_Opcode },
   7331      1.1  christos     { Bad_Opcode },
   7332      1.1  christos     { Bad_Opcode },
   7333      1.1  christos     { Bad_Opcode },
   7334      1.1  christos     /* 38 */
   7335      1.1  christos     { Bad_Opcode },
   7336      1.1  christos     { Bad_Opcode },
   7337      1.1  christos     { Bad_Opcode },
   7338      1.1  christos     { Bad_Opcode },
   7339      1.1  christos     { Bad_Opcode },
   7340      1.1  christos     { Bad_Opcode },
   7341      1.1  christos     { Bad_Opcode },
   7342      1.1  christos     { Bad_Opcode },
   7343      1.1  christos     /* 40 */
   7344      1.1  christos     { Bad_Opcode },
   7345      1.1  christos     { Bad_Opcode },
   7346      1.1  christos     { Bad_Opcode },
   7347      1.1  christos     { Bad_Opcode },
   7348      1.1  christos     { Bad_Opcode },
   7349      1.1  christos     { Bad_Opcode },
   7350      1.1  christos     { Bad_Opcode },
   7351      1.1  christos     { Bad_Opcode },
   7352      1.1  christos     /* 48 */
   7353      1.1  christos     { Bad_Opcode },
   7354      1.1  christos     { Bad_Opcode },
   7355      1.1  christos     { Bad_Opcode },
   7356      1.1  christos     { Bad_Opcode },
   7357      1.1  christos     { Bad_Opcode },
   7358      1.1  christos     { Bad_Opcode },
   7359      1.1  christos     { Bad_Opcode },
   7360      1.1  christos     { Bad_Opcode },
   7361      1.1  christos     /* 50 */
   7362      1.1  christos     { Bad_Opcode },
   7363      1.1  christos     { Bad_Opcode },
   7364      1.1  christos     { Bad_Opcode },
   7365      1.1  christos     { Bad_Opcode },
   7366      1.1  christos     { Bad_Opcode },
   7367      1.1  christos     { Bad_Opcode },
   7368      1.1  christos     { Bad_Opcode },
   7369      1.1  christos     { Bad_Opcode },
   7370      1.1  christos     /* 58 */
   7371      1.1  christos     { Bad_Opcode },
   7372      1.1  christos     { Bad_Opcode },
   7373      1.1  christos     { Bad_Opcode },
   7374      1.1  christos     { Bad_Opcode },
   7375      1.1  christos     { Bad_Opcode },
   7376      1.1  christos     { Bad_Opcode },
   7377      1.1  christos     { Bad_Opcode },
   7378      1.1  christos     { Bad_Opcode },
   7379      1.1  christos     /* 60 */
   7380      1.1  christos     { Bad_Opcode },
   7381      1.1  christos     { Bad_Opcode },
   7382      1.1  christos     { Bad_Opcode },
   7383      1.1  christos     { Bad_Opcode },
   7384      1.1  christos     { Bad_Opcode },
   7385      1.1  christos     { Bad_Opcode },
   7386      1.1  christos     { Bad_Opcode },
   7387      1.1  christos     { Bad_Opcode },
   7388      1.1  christos     /* 68 */
   7389      1.1  christos     { Bad_Opcode },
   7390      1.1  christos     { Bad_Opcode },
   7391      1.1  christos     { Bad_Opcode },
   7392      1.1  christos     { Bad_Opcode },
   7393      1.1  christos     { Bad_Opcode },
   7394      1.1  christos     { Bad_Opcode },
   7395      1.1  christos     { Bad_Opcode },
   7396      1.1  christos     { Bad_Opcode },
   7397      1.1  christos     /* 70 */
   7398      1.1  christos     { Bad_Opcode },
   7399      1.1  christos     { Bad_Opcode },
   7400      1.1  christos     { Bad_Opcode },
   7401      1.1  christos     { Bad_Opcode },
   7402      1.1  christos     { Bad_Opcode },
   7403      1.1  christos     { Bad_Opcode },
   7404      1.1  christos     { Bad_Opcode },
   7405      1.1  christos     { Bad_Opcode },
   7406      1.1  christos     /* 78 */
   7407      1.1  christos     { Bad_Opcode },
   7408      1.1  christos     { Bad_Opcode },
   7409      1.1  christos     { Bad_Opcode },
   7410      1.1  christos     { Bad_Opcode },
   7411      1.1  christos     { Bad_Opcode },
   7412      1.1  christos     { Bad_Opcode },
   7413      1.1  christos     { Bad_Opcode },
   7414      1.1  christos     { Bad_Opcode },
   7415      1.1  christos     /* 80 */
   7416      1.1  christos     { Bad_Opcode },
   7417      1.1  christos     { Bad_Opcode },
   7418      1.1  christos     { Bad_Opcode },
   7419      1.1  christos     { Bad_Opcode },
   7420      1.1  christos     { Bad_Opcode },
   7421      1.1  christos     { Bad_Opcode },
   7422      1.1  christos     { Bad_Opcode },
   7423      1.1  christos     { Bad_Opcode },
   7424      1.1  christos     /* 88 */
   7425      1.1  christos     { Bad_Opcode },
   7426      1.1  christos     { Bad_Opcode },
   7427      1.1  christos     { Bad_Opcode },
   7428      1.1  christos     { Bad_Opcode },
   7429      1.1  christos     { Bad_Opcode },
   7430      1.1  christos     { Bad_Opcode },
   7431      1.1  christos     { Bad_Opcode },
   7432      1.1  christos     { Bad_Opcode },
   7433      1.1  christos     /* 90 */
   7434      1.1  christos     { Bad_Opcode },
   7435      1.1  christos     { Bad_Opcode },
   7436      1.1  christos     { Bad_Opcode },
   7437      1.1  christos     { Bad_Opcode },
   7438      1.1  christos     { Bad_Opcode },
   7439      1.1  christos     { Bad_Opcode },
   7440      1.1  christos     { Bad_Opcode },
   7441      1.1  christos     { Bad_Opcode },
   7442      1.1  christos     /* 98 */
   7443      1.1  christos     { Bad_Opcode },
   7444      1.1  christos     { Bad_Opcode },
   7445      1.1  christos     { Bad_Opcode },
   7446      1.1  christos     { Bad_Opcode },
   7447      1.1  christos     { Bad_Opcode },
   7448      1.1  christos     { Bad_Opcode },
   7449      1.1  christos     { Bad_Opcode },
   7450      1.1  christos     { Bad_Opcode },
   7451      1.1  christos     /* a0 */
   7452      1.1  christos     { Bad_Opcode },
   7453      1.1  christos     { Bad_Opcode },
   7454      1.1  christos     { Bad_Opcode },
   7455      1.1  christos     { Bad_Opcode },
   7456      1.1  christos     { Bad_Opcode },
   7457      1.1  christos     { Bad_Opcode },
   7458      1.1  christos     { Bad_Opcode },
   7459      1.1  christos     { Bad_Opcode },
   7460      1.1  christos     /* a8 */
   7461      1.1  christos     { Bad_Opcode },
   7462      1.1  christos     { Bad_Opcode },
   7463      1.1  christos     { Bad_Opcode },
   7464      1.1  christos     { Bad_Opcode },
   7465      1.1  christos     { Bad_Opcode },
   7466      1.1  christos     { Bad_Opcode },
   7467      1.1  christos     { Bad_Opcode },
   7468      1.1  christos     { Bad_Opcode },
   7469      1.1  christos     /* b0 */
   7470      1.1  christos     { Bad_Opcode },
   7471      1.1  christos     { Bad_Opcode },
   7472      1.1  christos     { Bad_Opcode },
   7473      1.1  christos     { Bad_Opcode },
   7474      1.1  christos     { Bad_Opcode },
   7475      1.1  christos     { Bad_Opcode },
   7476      1.1  christos     { Bad_Opcode },
   7477      1.1  christos     { Bad_Opcode },
   7478      1.1  christos     /* b8 */
   7479      1.1  christos     { Bad_Opcode },
   7480      1.1  christos     { Bad_Opcode },
   7481      1.1  christos     { Bad_Opcode },
   7482      1.1  christos     { Bad_Opcode },
   7483      1.1  christos     { Bad_Opcode },
   7484      1.1  christos     { Bad_Opcode },
   7485      1.1  christos     { Bad_Opcode },
   7486      1.1  christos     { Bad_Opcode },
   7487      1.1  christos     /* c0 */
   7488      1.1  christos     { Bad_Opcode },
   7489      1.1  christos     { Bad_Opcode },
   7490      1.1  christos     { Bad_Opcode },
   7491      1.1  christos     { Bad_Opcode },
   7492      1.1  christos     { Bad_Opcode },
   7493      1.1  christos     { Bad_Opcode },
   7494      1.1  christos     { Bad_Opcode },
   7495      1.1  christos     { Bad_Opcode },
   7496      1.1  christos     /* c8 */
   7497      1.1  christos     { Bad_Opcode },
   7498      1.1  christos     { Bad_Opcode },
   7499      1.1  christos     { Bad_Opcode },
   7500      1.1  christos     { Bad_Opcode },
   7501      1.1  christos     { Bad_Opcode },
   7502      1.1  christos     { Bad_Opcode },
   7503      1.1  christos     { Bad_Opcode },
   7504      1.1  christos     { Bad_Opcode },
   7505      1.1  christos     /* d0 */
   7506      1.1  christos     { Bad_Opcode },
   7507      1.1  christos     { Bad_Opcode },
   7508      1.1  christos     { Bad_Opcode },
   7509      1.1  christos     { Bad_Opcode },
   7510      1.1  christos     { Bad_Opcode },
   7511      1.1  christos     { Bad_Opcode },
   7512      1.1  christos     { Bad_Opcode },
   7513      1.1  christos     { Bad_Opcode },
   7514      1.1  christos     /* d8 */
   7515      1.1  christos     { Bad_Opcode },
   7516      1.1  christos     { Bad_Opcode },
   7517      1.1  christos     { Bad_Opcode },
   7518      1.1  christos     { Bad_Opcode },
   7519      1.1  christos     { Bad_Opcode },
   7520      1.1  christos     { Bad_Opcode },
   7521      1.1  christos     { Bad_Opcode },
   7522      1.1  christos     { Bad_Opcode },
   7523      1.1  christos     /* e0 */
   7524      1.1  christos     { Bad_Opcode },
   7525      1.1  christos     { Bad_Opcode },
   7526      1.1  christos     { Bad_Opcode },
   7527      1.1  christos     { Bad_Opcode },
   7528      1.1  christos     { Bad_Opcode },
   7529      1.1  christos     { Bad_Opcode },
   7530      1.1  christos     { Bad_Opcode },
   7531      1.1  christos     { Bad_Opcode },
   7532      1.1  christos     /* e8 */
   7533      1.1  christos     { Bad_Opcode },
   7534      1.1  christos     { Bad_Opcode },
   7535      1.1  christos     { Bad_Opcode },
   7536      1.1  christos     { Bad_Opcode },
   7537      1.1  christos     { Bad_Opcode },
   7538      1.1  christos     { Bad_Opcode },
   7539      1.1  christos     { Bad_Opcode },
   7540      1.1  christos     { Bad_Opcode },
   7541      1.1  christos     /* f0 */
   7542      1.1  christos     { Bad_Opcode },
   7543      1.1  christos     { Bad_Opcode },
   7544      1.1  christos     { Bad_Opcode },
   7545      1.1  christos     { Bad_Opcode },
   7546      1.1  christos     { Bad_Opcode },
   7547      1.1  christos     { Bad_Opcode },
   7548      1.1  christos     { Bad_Opcode },
   7549      1.1  christos     { Bad_Opcode },
   7550      1.1  christos     /* f8 */
   7551      1.1  christos     { Bad_Opcode },
   7552      1.1  christos     { Bad_Opcode },
   7553      1.1  christos     { Bad_Opcode },
   7554      1.1  christos     { Bad_Opcode },
   7555      1.1  christos     { Bad_Opcode },
   7556      1.1  christos     { Bad_Opcode },
   7557      1.1  christos     { Bad_Opcode },
   7558      1.1  christos     { Bad_Opcode },
   7559      1.1  christos   },
   7560      1.1  christos };
   7561      1.1  christos 
   7562      1.1  christos static const struct dis386 vex_table[][256] = {
   7563      1.1  christos   /* VEX_0F */
   7564      1.1  christos   {
   7565      1.1  christos     /* 00 */
   7566      1.1  christos     { Bad_Opcode },
   7567      1.1  christos     { Bad_Opcode },
   7568      1.1  christos     { Bad_Opcode },
   7569      1.1  christos     { Bad_Opcode },
   7570      1.1  christos     { Bad_Opcode },
   7571      1.1  christos     { Bad_Opcode },
   7572      1.1  christos     { Bad_Opcode },
   7573      1.1  christos     { Bad_Opcode },
   7574      1.1  christos     /* 08 */
   7575      1.1  christos     { Bad_Opcode },
   7576      1.1  christos     { Bad_Opcode },
   7577      1.1  christos     { Bad_Opcode },
   7578      1.1  christos     { Bad_Opcode },
   7579      1.1  christos     { Bad_Opcode },
   7580      1.1  christos     { Bad_Opcode },
   7581      1.1  christos     { Bad_Opcode },
   7582      1.1  christos     { Bad_Opcode },
   7583      1.1  christos     /* 10 */
   7584      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F10) },
   7585      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F11) },
   7586      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F12) },
   7587      1.1  christos     { MOD_TABLE (MOD_VEX_0F13) },
   7588      1.1  christos     { VEX_W_TABLE (VEX_W_0F14) },
   7589      1.1  christos     { VEX_W_TABLE (VEX_W_0F15) },
   7590      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F16) },
   7591      1.1  christos     { MOD_TABLE (MOD_VEX_0F17) },
   7592      1.1  christos     /* 18 */
   7593      1.1  christos     { Bad_Opcode },
   7594      1.1  christos     { Bad_Opcode },
   7595      1.1  christos     { Bad_Opcode },
   7596      1.1  christos     { Bad_Opcode },
   7597      1.1  christos     { Bad_Opcode },
   7598      1.1  christos     { Bad_Opcode },
   7599      1.1  christos     { Bad_Opcode },
   7600      1.1  christos     { Bad_Opcode },
   7601      1.1  christos     /* 20 */
   7602      1.1  christos     { Bad_Opcode },
   7603      1.1  christos     { Bad_Opcode },
   7604      1.1  christos     { Bad_Opcode },
   7605      1.1  christos     { Bad_Opcode },
   7606      1.1  christos     { Bad_Opcode },
   7607      1.1  christos     { Bad_Opcode },
   7608      1.1  christos     { Bad_Opcode },
   7609      1.1  christos     { Bad_Opcode },
   7610      1.1  christos     /* 28 */
   7611      1.1  christos     { VEX_W_TABLE (VEX_W_0F28) },
   7612      1.1  christos     { VEX_W_TABLE (VEX_W_0F29) },
   7613      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F2A) },
   7614      1.1  christos     { MOD_TABLE (MOD_VEX_0F2B) },
   7615      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F2C) },
   7616      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F2D) },
   7617      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F2E) },
   7618      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F2F) },
   7619      1.1  christos     /* 30 */
   7620      1.1  christos     { Bad_Opcode },
   7621      1.1  christos     { Bad_Opcode },
   7622      1.1  christos     { Bad_Opcode },
   7623      1.1  christos     { Bad_Opcode },
   7624      1.1  christos     { Bad_Opcode },
   7625      1.1  christos     { Bad_Opcode },
   7626      1.1  christos     { Bad_Opcode },
   7627      1.1  christos     { Bad_Opcode },
   7628      1.1  christos     /* 38 */
   7629      1.1  christos     { Bad_Opcode },
   7630      1.1  christos     { Bad_Opcode },
   7631      1.1  christos     { Bad_Opcode },
   7632      1.1  christos     { Bad_Opcode },
   7633      1.1  christos     { Bad_Opcode },
   7634      1.1  christos     { Bad_Opcode },
   7635      1.1  christos     { Bad_Opcode },
   7636      1.1  christos     { Bad_Opcode },
   7637      1.1  christos     /* 40 */
   7638      1.1  christos     { Bad_Opcode },
   7639      1.1  christos     { Bad_Opcode },
   7640      1.1  christos     { Bad_Opcode },
   7641      1.1  christos     { Bad_Opcode },
   7642      1.1  christos     { Bad_Opcode },
   7643      1.1  christos     { Bad_Opcode },
   7644      1.1  christos     { Bad_Opcode },
   7645      1.1  christos     { Bad_Opcode },
   7646      1.1  christos     /* 48 */
   7647      1.1  christos     { Bad_Opcode },
   7648      1.1  christos     { Bad_Opcode },
   7649      1.1  christos     { Bad_Opcode },
   7650      1.1  christos     { Bad_Opcode },
   7651      1.1  christos     { Bad_Opcode },
   7652      1.1  christos     { Bad_Opcode },
   7653      1.1  christos     { Bad_Opcode },
   7654      1.1  christos     { Bad_Opcode },
   7655      1.1  christos     /* 50 */
   7656      1.1  christos     { MOD_TABLE (MOD_VEX_0F50) },
   7657      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F51) },
   7658      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F52) },
   7659      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F53) },
   7660      1.1  christos     { "vandpX",		{ XM, Vex, EXx } },
   7661      1.1  christos     { "vandnpX",	{ XM, Vex, EXx } },
   7662      1.1  christos     { "vorpX",		{ XM, Vex, EXx } },
   7663      1.1  christos     { "vxorpX",		{ XM, Vex, EXx } },
   7664      1.1  christos     /* 58 */
   7665      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F58) },
   7666      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F59) },
   7667      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F5A) },
   7668      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F5B) },
   7669      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F5C) },
   7670      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F5D) },
   7671      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F5E) },
   7672      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F5F) },
   7673      1.1  christos     /* 60 */
   7674      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F60) },
   7675      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F61) },
   7676      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F62) },
   7677      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F63) },
   7678      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F64) },
   7679      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F65) },
   7680      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F66) },
   7681      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F67) },
   7682      1.1  christos     /* 68 */
   7683      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F68) },
   7684      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F69) },
   7685      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F6A) },
   7686      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F6B) },
   7687      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F6C) },
   7688      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F6D) },
   7689      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F6E) },
   7690      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F6F) },
   7691      1.1  christos     /* 70 */
   7692      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F70) },
   7693      1.1  christos     { REG_TABLE (REG_VEX_0F71) },
   7694      1.1  christos     { REG_TABLE (REG_VEX_0F72) },
   7695      1.1  christos     { REG_TABLE (REG_VEX_0F73) },
   7696      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F74) },
   7697      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F75) },
   7698      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F76) },
   7699      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F77) },
   7700      1.1  christos     /* 78 */
   7701      1.1  christos     { Bad_Opcode },
   7702      1.1  christos     { Bad_Opcode },
   7703      1.1  christos     { Bad_Opcode },
   7704      1.1  christos     { Bad_Opcode },
   7705      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F7C) },
   7706      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F7D) },
   7707      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F7E) },
   7708      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F7F) },
   7709      1.1  christos     /* 80 */
   7710      1.1  christos     { Bad_Opcode },
   7711      1.1  christos     { Bad_Opcode },
   7712      1.1  christos     { Bad_Opcode },
   7713      1.1  christos     { Bad_Opcode },
   7714      1.1  christos     { Bad_Opcode },
   7715      1.1  christos     { Bad_Opcode },
   7716      1.1  christos     { Bad_Opcode },
   7717      1.1  christos     { Bad_Opcode },
   7718      1.1  christos     /* 88 */
   7719      1.1  christos     { Bad_Opcode },
   7720      1.1  christos     { Bad_Opcode },
   7721      1.1  christos     { Bad_Opcode },
   7722      1.1  christos     { Bad_Opcode },
   7723      1.1  christos     { Bad_Opcode },
   7724      1.1  christos     { Bad_Opcode },
   7725      1.1  christos     { Bad_Opcode },
   7726      1.1  christos     { Bad_Opcode },
   7727      1.1  christos     /* 90 */
   7728      1.1  christos     { Bad_Opcode },
   7729      1.1  christos     { Bad_Opcode },
   7730      1.1  christos     { Bad_Opcode },
   7731      1.1  christos     { Bad_Opcode },
   7732      1.1  christos     { Bad_Opcode },
   7733      1.1  christos     { Bad_Opcode },
   7734      1.1  christos     { Bad_Opcode },
   7735      1.1  christos     { Bad_Opcode },
   7736      1.1  christos     /* 98 */
   7737      1.1  christos     { Bad_Opcode },
   7738      1.1  christos     { Bad_Opcode },
   7739      1.1  christos     { Bad_Opcode },
   7740      1.1  christos     { Bad_Opcode },
   7741      1.1  christos     { Bad_Opcode },
   7742      1.1  christos     { Bad_Opcode },
   7743      1.1  christos     { Bad_Opcode },
   7744      1.1  christos     { Bad_Opcode },
   7745      1.1  christos     /* a0 */
   7746      1.1  christos     { Bad_Opcode },
   7747      1.1  christos     { Bad_Opcode },
   7748      1.1  christos     { Bad_Opcode },
   7749      1.1  christos     { Bad_Opcode },
   7750      1.1  christos     { Bad_Opcode },
   7751      1.1  christos     { Bad_Opcode },
   7752      1.1  christos     { Bad_Opcode },
   7753      1.1  christos     { Bad_Opcode },
   7754      1.1  christos     /* a8 */
   7755      1.1  christos     { Bad_Opcode },
   7756      1.1  christos     { Bad_Opcode },
   7757      1.1  christos     { Bad_Opcode },
   7758      1.1  christos     { Bad_Opcode },
   7759      1.1  christos     { Bad_Opcode },
   7760      1.1  christos     { Bad_Opcode },
   7761      1.1  christos     { REG_TABLE (REG_VEX_0FAE) },
   7762      1.1  christos     { Bad_Opcode },
   7763      1.1  christos     /* b0 */
   7764      1.1  christos     { Bad_Opcode },
   7765      1.1  christos     { Bad_Opcode },
   7766      1.1  christos     { Bad_Opcode },
   7767      1.1  christos     { Bad_Opcode },
   7768      1.1  christos     { Bad_Opcode },
   7769      1.1  christos     { Bad_Opcode },
   7770      1.1  christos     { Bad_Opcode },
   7771      1.1  christos     { Bad_Opcode },
   7772      1.1  christos     /* b8 */
   7773      1.1  christos     { Bad_Opcode },
   7774      1.1  christos     { Bad_Opcode },
   7775      1.1  christos     { Bad_Opcode },
   7776      1.1  christos     { Bad_Opcode },
   7777      1.1  christos     { Bad_Opcode },
   7778      1.1  christos     { Bad_Opcode },
   7779      1.1  christos     { Bad_Opcode },
   7780      1.1  christos     { Bad_Opcode },
   7781      1.1  christos     /* c0 */
   7782      1.1  christos     { Bad_Opcode },
   7783      1.1  christos     { Bad_Opcode },
   7784      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FC2) },
   7785      1.1  christos     { Bad_Opcode },
   7786      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FC4) },
   7787      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FC5) },
   7788      1.1  christos     { "vshufpX",	{ XM, Vex, EXx, Ib } },
   7789      1.1  christos     { Bad_Opcode },
   7790      1.1  christos     /* c8 */
   7791      1.1  christos     { Bad_Opcode },
   7792      1.1  christos     { Bad_Opcode },
   7793      1.1  christos     { Bad_Opcode },
   7794      1.1  christos     { Bad_Opcode },
   7795      1.1  christos     { Bad_Opcode },
   7796      1.1  christos     { Bad_Opcode },
   7797      1.1  christos     { Bad_Opcode },
   7798      1.1  christos     { Bad_Opcode },
   7799      1.1  christos     /* d0 */
   7800      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD0) },
   7801      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD1) },
   7802      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD2) },
   7803      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD3) },
   7804      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD4) },
   7805      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD5) },
   7806      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD6) },
   7807      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD7) },
   7808      1.1  christos     /* d8 */
   7809      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD8) },
   7810      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FD9) },
   7811      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FDA) },
   7812      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FDB) },
   7813      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FDC) },
   7814      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FDD) },
   7815      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FDE) },
   7816      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FDF) },
   7817      1.1  christos     /* e0 */
   7818      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE0) },
   7819      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE1) },
   7820      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE2) },
   7821      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE3) },
   7822      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE4) },
   7823      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE5) },
   7824      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE6) },
   7825      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE7) },
   7826      1.1  christos     /* e8 */
   7827      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE8) },
   7828      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FE9) },
   7829      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FEA) },
   7830      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FEB) },
   7831      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FEC) },
   7832      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FED) },
   7833      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FEE) },
   7834      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FEF) },
   7835      1.1  christos     /* f0 */
   7836      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF0) },
   7837      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF1) },
   7838      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF2) },
   7839      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF3) },
   7840      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF4) },
   7841      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF5) },
   7842      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF6) },
   7843      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF7) },
   7844      1.1  christos     /* f8 */
   7845      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF8) },
   7846      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FF9) },
   7847      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FFA) },
   7848      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FFB) },
   7849      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FFC) },
   7850      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FFD) },
   7851      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0FFE) },
   7852      1.1  christos     { Bad_Opcode },
   7853      1.1  christos   },
   7854      1.1  christos   /* VEX_0F38 */
   7855      1.1  christos   {
   7856      1.1  christos     /* 00 */
   7857      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3800) },
   7858      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3801) },
   7859      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3802) },
   7860      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3803) },
   7861      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3804) },
   7862      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3805) },
   7863      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3806) },
   7864      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3807) },
   7865      1.1  christos     /* 08 */
   7866      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3808) },
   7867      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3809) },
   7868      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F380A) },
   7869      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F380B) },
   7870      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F380C) },
   7871      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F380D) },
   7872      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F380E) },
   7873      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F380F) },
   7874      1.1  christos     /* 10 */
   7875      1.1  christos     { Bad_Opcode },
   7876      1.1  christos     { Bad_Opcode },
   7877      1.1  christos     { Bad_Opcode },
   7878      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3813) },
   7879      1.1  christos     { Bad_Opcode },
   7880      1.1  christos     { Bad_Opcode },
   7881  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3816) },
   7882      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3817) },
   7883      1.1  christos     /* 18 */
   7884      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3818) },
   7885      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3819) },
   7886      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F381A) },
   7887      1.1  christos     { Bad_Opcode },
   7888      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F381C) },
   7889      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F381D) },
   7890      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F381E) },
   7891      1.1  christos     { Bad_Opcode },
   7892      1.1  christos     /* 20 */
   7893      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3820) },
   7894      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3821) },
   7895      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3822) },
   7896      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3823) },
   7897      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3824) },
   7898      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3825) },
   7899      1.1  christos     { Bad_Opcode },
   7900      1.1  christos     { Bad_Opcode },
   7901      1.1  christos     /* 28 */
   7902      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3828) },
   7903      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3829) },
   7904      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F382A) },
   7905      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F382B) },
   7906      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F382C) },
   7907      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F382D) },
   7908      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F382E) },
   7909      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F382F) },
   7910      1.1  christos     /* 30 */
   7911      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3830) },
   7912      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3831) },
   7913      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3832) },
   7914      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3833) },
   7915      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3834) },
   7916      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3835) },
   7917  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3836) },
   7918      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3837) },
   7919      1.1  christos     /* 38 */
   7920      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3838) },
   7921      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3839) },
   7922      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F383A) },
   7923      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F383B) },
   7924      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F383C) },
   7925      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F383D) },
   7926      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F383E) },
   7927      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F383F) },
   7928      1.1  christos     /* 40 */
   7929      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3840) },
   7930      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3841) },
   7931      1.1  christos     { Bad_Opcode },
   7932      1.1  christos     { Bad_Opcode },
   7933      1.1  christos     { Bad_Opcode },
   7934  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3845) },
   7935  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3846) },
   7936  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3847) },
   7937      1.1  christos     /* 48 */
   7938      1.1  christos     { Bad_Opcode },
   7939      1.1  christos     { Bad_Opcode },
   7940      1.1  christos     { Bad_Opcode },
   7941      1.1  christos     { Bad_Opcode },
   7942      1.1  christos     { Bad_Opcode },
   7943      1.1  christos     { Bad_Opcode },
   7944      1.1  christos     { Bad_Opcode },
   7945      1.1  christos     { Bad_Opcode },
   7946      1.1  christos     /* 50 */
   7947      1.1  christos     { Bad_Opcode },
   7948      1.1  christos     { Bad_Opcode },
   7949      1.1  christos     { Bad_Opcode },
   7950      1.1  christos     { Bad_Opcode },
   7951      1.1  christos     { Bad_Opcode },
   7952      1.1  christos     { Bad_Opcode },
   7953      1.1  christos     { Bad_Opcode },
   7954      1.1  christos     { Bad_Opcode },
   7955      1.1  christos     /* 58 */
   7956  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3858) },
   7957  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3859) },
   7958  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F385A) },
   7959      1.1  christos     { Bad_Opcode },
   7960      1.1  christos     { Bad_Opcode },
   7961      1.1  christos     { Bad_Opcode },
   7962      1.1  christos     { Bad_Opcode },
   7963      1.1  christos     { Bad_Opcode },
   7964      1.1  christos     /* 60 */
   7965      1.1  christos     { Bad_Opcode },
   7966      1.1  christos     { Bad_Opcode },
   7967      1.1  christos     { Bad_Opcode },
   7968      1.1  christos     { Bad_Opcode },
   7969      1.1  christos     { Bad_Opcode },
   7970      1.1  christos     { Bad_Opcode },
   7971      1.1  christos     { Bad_Opcode },
   7972      1.1  christos     { Bad_Opcode },
   7973      1.1  christos     /* 68 */
   7974      1.1  christos     { Bad_Opcode },
   7975      1.1  christos     { Bad_Opcode },
   7976      1.1  christos     { Bad_Opcode },
   7977      1.1  christos     { Bad_Opcode },
   7978      1.1  christos     { Bad_Opcode },
   7979      1.1  christos     { Bad_Opcode },
   7980      1.1  christos     { Bad_Opcode },
   7981      1.1  christos     { Bad_Opcode },
   7982      1.1  christos     /* 70 */
   7983      1.1  christos     { Bad_Opcode },
   7984      1.1  christos     { Bad_Opcode },
   7985      1.1  christos     { Bad_Opcode },
   7986      1.1  christos     { Bad_Opcode },
   7987      1.1  christos     { Bad_Opcode },
   7988      1.1  christos     { Bad_Opcode },
   7989      1.1  christos     { Bad_Opcode },
   7990      1.1  christos     { Bad_Opcode },
   7991      1.1  christos     /* 78 */
   7992  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3878) },
   7993  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3879) },
   7994      1.1  christos     { Bad_Opcode },
   7995      1.1  christos     { Bad_Opcode },
   7996      1.1  christos     { Bad_Opcode },
   7997      1.1  christos     { Bad_Opcode },
   7998      1.1  christos     { Bad_Opcode },
   7999      1.1  christos     { Bad_Opcode },
   8000      1.1  christos     /* 80 */
   8001      1.1  christos     { Bad_Opcode },
   8002      1.1  christos     { Bad_Opcode },
   8003      1.1  christos     { Bad_Opcode },
   8004      1.1  christos     { Bad_Opcode },
   8005      1.1  christos     { Bad_Opcode },
   8006      1.1  christos     { Bad_Opcode },
   8007      1.1  christos     { Bad_Opcode },
   8008      1.1  christos     { Bad_Opcode },
   8009      1.1  christos     /* 88 */
   8010      1.1  christos     { Bad_Opcode },
   8011      1.1  christos     { Bad_Opcode },
   8012      1.1  christos     { Bad_Opcode },
   8013      1.1  christos     { Bad_Opcode },
   8014  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F388C) },
   8015      1.1  christos     { Bad_Opcode },
   8016  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F388E) },
   8017      1.1  christos     { Bad_Opcode },
   8018      1.1  christos     /* 90 */
   8019  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3890) },
   8020  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3891) },
   8021  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3892) },
   8022  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3893) },
   8023      1.1  christos     { Bad_Opcode },
   8024      1.1  christos     { Bad_Opcode },
   8025      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3896) },
   8026      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3897) },
   8027      1.1  christos     /* 98 */
   8028      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3898) },
   8029      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3899) },
   8030      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F389A) },
   8031      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F389B) },
   8032      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F389C) },
   8033      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F389D) },
   8034      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F389E) },
   8035      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F389F) },
   8036      1.1  christos     /* a0 */
   8037      1.1  christos     { Bad_Opcode },
   8038      1.1  christos     { Bad_Opcode },
   8039      1.1  christos     { Bad_Opcode },
   8040      1.1  christos     { Bad_Opcode },
   8041      1.1  christos     { Bad_Opcode },
   8042      1.1  christos     { Bad_Opcode },
   8043      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
   8044      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
   8045      1.1  christos     /* a8 */
   8046      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
   8047      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
   8048      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
   8049      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
   8050      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
   8051      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
   8052      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
   8053      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
   8054      1.1  christos     /* b0 */
   8055      1.1  christos     { Bad_Opcode },
   8056      1.1  christos     { Bad_Opcode },
   8057      1.1  christos     { Bad_Opcode },
   8058      1.1  christos     { Bad_Opcode },
   8059      1.1  christos     { Bad_Opcode },
   8060      1.1  christos     { Bad_Opcode },
   8061      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
   8062      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
   8063      1.1  christos     /* b8 */
   8064      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
   8065      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
   8066      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
   8067      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
   8068      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
   8069      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
   8070      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
   8071      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
   8072      1.1  christos     /* c0 */
   8073      1.1  christos     { Bad_Opcode },
   8074      1.1  christos     { Bad_Opcode },
   8075      1.1  christos     { Bad_Opcode },
   8076      1.1  christos     { Bad_Opcode },
   8077      1.1  christos     { Bad_Opcode },
   8078      1.1  christos     { Bad_Opcode },
   8079      1.1  christos     { Bad_Opcode },
   8080      1.1  christos     { Bad_Opcode },
   8081      1.1  christos     /* c8 */
   8082      1.1  christos     { Bad_Opcode },
   8083      1.1  christos     { Bad_Opcode },
   8084      1.1  christos     { Bad_Opcode },
   8085      1.1  christos     { Bad_Opcode },
   8086      1.1  christos     { Bad_Opcode },
   8087      1.1  christos     { Bad_Opcode },
   8088      1.1  christos     { Bad_Opcode },
   8089      1.1  christos     { Bad_Opcode },
   8090      1.1  christos     /* d0 */
   8091      1.1  christos     { Bad_Opcode },
   8092      1.1  christos     { Bad_Opcode },
   8093      1.1  christos     { Bad_Opcode },
   8094      1.1  christos     { Bad_Opcode },
   8095      1.1  christos     { Bad_Opcode },
   8096      1.1  christos     { Bad_Opcode },
   8097      1.1  christos     { Bad_Opcode },
   8098      1.1  christos     { Bad_Opcode },
   8099      1.1  christos     /* d8 */
   8100      1.1  christos     { Bad_Opcode },
   8101      1.1  christos     { Bad_Opcode },
   8102      1.1  christos     { Bad_Opcode },
   8103      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
   8104      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
   8105      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
   8106      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
   8107      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
   8108      1.1  christos     /* e0 */
   8109      1.1  christos     { Bad_Opcode },
   8110      1.1  christos     { Bad_Opcode },
   8111      1.1  christos     { Bad_Opcode },
   8112      1.1  christos     { Bad_Opcode },
   8113      1.1  christos     { Bad_Opcode },
   8114      1.1  christos     { Bad_Opcode },
   8115      1.1  christos     { Bad_Opcode },
   8116      1.1  christos     { Bad_Opcode },
   8117      1.1  christos     /* e8 */
   8118      1.1  christos     { Bad_Opcode },
   8119      1.1  christos     { Bad_Opcode },
   8120      1.1  christos     { Bad_Opcode },
   8121      1.1  christos     { Bad_Opcode },
   8122      1.1  christos     { Bad_Opcode },
   8123      1.1  christos     { Bad_Opcode },
   8124      1.1  christos     { Bad_Opcode },
   8125      1.1  christos     { Bad_Opcode },
   8126      1.1  christos     /* f0 */
   8127      1.1  christos     { Bad_Opcode },
   8128      1.1  christos     { Bad_Opcode },
   8129      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
   8130      1.1  christos     { REG_TABLE (REG_VEX_0F38F3) },
   8131      1.1  christos     { Bad_Opcode },
   8132  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
   8133  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
   8134      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
   8135      1.1  christos     /* f8 */
   8136      1.1  christos     { Bad_Opcode },
   8137      1.1  christos     { Bad_Opcode },
   8138      1.1  christos     { Bad_Opcode },
   8139      1.1  christos     { Bad_Opcode },
   8140      1.1  christos     { Bad_Opcode },
   8141      1.1  christos     { Bad_Opcode },
   8142      1.1  christos     { Bad_Opcode },
   8143      1.1  christos     { Bad_Opcode },
   8144      1.1  christos   },
   8145      1.1  christos   /* VEX_0F3A */
   8146      1.1  christos   {
   8147      1.1  christos     /* 00 */
   8148  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
   8149  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
   8150  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
   8151      1.1  christos     { Bad_Opcode },
   8152      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
   8153      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
   8154      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
   8155      1.1  christos     { Bad_Opcode },
   8156      1.1  christos     /* 08 */
   8157      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
   8158      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
   8159      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
   8160      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
   8161      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
   8162      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
   8163      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
   8164      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
   8165      1.1  christos     /* 10 */
   8166      1.1  christos     { Bad_Opcode },
   8167      1.1  christos     { Bad_Opcode },
   8168      1.1  christos     { Bad_Opcode },
   8169      1.1  christos     { Bad_Opcode },
   8170      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
   8171      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
   8172      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
   8173      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
   8174      1.1  christos     /* 18 */
   8175      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
   8176      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
   8177      1.1  christos     { Bad_Opcode },
   8178      1.1  christos     { Bad_Opcode },
   8179      1.1  christos     { Bad_Opcode },
   8180      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
   8181      1.1  christos     { Bad_Opcode },
   8182      1.1  christos     { Bad_Opcode },
   8183      1.1  christos     /* 20 */
   8184      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
   8185      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
   8186      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
   8187      1.1  christos     { Bad_Opcode },
   8188      1.1  christos     { Bad_Opcode },
   8189      1.1  christos     { Bad_Opcode },
   8190      1.1  christos     { Bad_Opcode },
   8191      1.1  christos     { Bad_Opcode },
   8192      1.1  christos     /* 28 */
   8193      1.1  christos     { Bad_Opcode },
   8194      1.1  christos     { Bad_Opcode },
   8195      1.1  christos     { Bad_Opcode },
   8196      1.1  christos     { Bad_Opcode },
   8197      1.1  christos     { Bad_Opcode },
   8198      1.1  christos     { Bad_Opcode },
   8199      1.1  christos     { Bad_Opcode },
   8200      1.1  christos     { Bad_Opcode },
   8201      1.1  christos     /* 30 */
   8202      1.1  christos     { Bad_Opcode },
   8203      1.1  christos     { Bad_Opcode },
   8204      1.1  christos     { Bad_Opcode },
   8205      1.1  christos     { Bad_Opcode },
   8206      1.1  christos     { Bad_Opcode },
   8207      1.1  christos     { Bad_Opcode },
   8208      1.1  christos     { Bad_Opcode },
   8209      1.1  christos     { Bad_Opcode },
   8210      1.1  christos     /* 38 */
   8211  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
   8212  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
   8213      1.1  christos     { Bad_Opcode },
   8214      1.1  christos     { Bad_Opcode },
   8215      1.1  christos     { Bad_Opcode },
   8216      1.1  christos     { Bad_Opcode },
   8217      1.1  christos     { Bad_Opcode },
   8218      1.1  christos     { Bad_Opcode },
   8219      1.1  christos     /* 40 */
   8220      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
   8221      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
   8222      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
   8223      1.1  christos     { Bad_Opcode },
   8224      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
   8225      1.1  christos     { Bad_Opcode },
   8226  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
   8227      1.1  christos     { Bad_Opcode },
   8228      1.1  christos     /* 48 */
   8229      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
   8230      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
   8231      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
   8232      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
   8233      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
   8234      1.1  christos     { Bad_Opcode },
   8235      1.1  christos     { Bad_Opcode },
   8236      1.1  christos     { Bad_Opcode },
   8237      1.1  christos     /* 50 */
   8238      1.1  christos     { Bad_Opcode },
   8239      1.1  christos     { Bad_Opcode },
   8240      1.1  christos     { Bad_Opcode },
   8241      1.1  christos     { Bad_Opcode },
   8242      1.1  christos     { Bad_Opcode },
   8243      1.1  christos     { Bad_Opcode },
   8244      1.1  christos     { Bad_Opcode },
   8245      1.1  christos     { Bad_Opcode },
   8246      1.1  christos     /* 58 */
   8247      1.1  christos     { Bad_Opcode },
   8248      1.1  christos     { Bad_Opcode },
   8249      1.1  christos     { Bad_Opcode },
   8250      1.1  christos     { Bad_Opcode },
   8251      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
   8252      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
   8253      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
   8254      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
   8255      1.1  christos     /* 60 */
   8256      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
   8257      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
   8258      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
   8259      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
   8260      1.1  christos     { Bad_Opcode },
   8261      1.1  christos     { Bad_Opcode },
   8262      1.1  christos     { Bad_Opcode },
   8263      1.1  christos     { Bad_Opcode },
   8264      1.1  christos     /* 68 */
   8265      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
   8266      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
   8267      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
   8268      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
   8269      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
   8270      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
   8271      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
   8272      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
   8273      1.1  christos     /* 70 */
   8274      1.1  christos     { Bad_Opcode },
   8275      1.1  christos     { Bad_Opcode },
   8276      1.1  christos     { Bad_Opcode },
   8277      1.1  christos     { Bad_Opcode },
   8278      1.1  christos     { Bad_Opcode },
   8279      1.1  christos     { Bad_Opcode },
   8280      1.1  christos     { Bad_Opcode },
   8281      1.1  christos     { Bad_Opcode },
   8282      1.1  christos     /* 78 */
   8283      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
   8284      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
   8285      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
   8286      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
   8287      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
   8288      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
   8289      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
   8290      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
   8291      1.1  christos     /* 80 */
   8292      1.1  christos     { Bad_Opcode },
   8293      1.1  christos     { Bad_Opcode },
   8294      1.1  christos     { Bad_Opcode },
   8295      1.1  christos     { Bad_Opcode },
   8296      1.1  christos     { Bad_Opcode },
   8297      1.1  christos     { Bad_Opcode },
   8298      1.1  christos     { Bad_Opcode },
   8299      1.1  christos     { Bad_Opcode },
   8300      1.1  christos     /* 88 */
   8301      1.1  christos     { Bad_Opcode },
   8302      1.1  christos     { Bad_Opcode },
   8303      1.1  christos     { Bad_Opcode },
   8304      1.1  christos     { Bad_Opcode },
   8305      1.1  christos     { Bad_Opcode },
   8306      1.1  christos     { Bad_Opcode },
   8307      1.1  christos     { Bad_Opcode },
   8308      1.1  christos     { Bad_Opcode },
   8309      1.1  christos     /* 90 */
   8310      1.1  christos     { Bad_Opcode },
   8311      1.1  christos     { Bad_Opcode },
   8312      1.1  christos     { Bad_Opcode },
   8313      1.1  christos     { Bad_Opcode },
   8314      1.1  christos     { Bad_Opcode },
   8315      1.1  christos     { Bad_Opcode },
   8316      1.1  christos     { Bad_Opcode },
   8317      1.1  christos     { Bad_Opcode },
   8318      1.1  christos     /* 98 */
   8319      1.1  christos     { Bad_Opcode },
   8320      1.1  christos     { Bad_Opcode },
   8321      1.1  christos     { Bad_Opcode },
   8322      1.1  christos     { Bad_Opcode },
   8323      1.1  christos     { Bad_Opcode },
   8324      1.1  christos     { Bad_Opcode },
   8325      1.1  christos     { Bad_Opcode },
   8326      1.1  christos     { Bad_Opcode },
   8327      1.1  christos     /* a0 */
   8328      1.1  christos     { Bad_Opcode },
   8329      1.1  christos     { Bad_Opcode },
   8330      1.1  christos     { Bad_Opcode },
   8331      1.1  christos     { Bad_Opcode },
   8332      1.1  christos     { Bad_Opcode },
   8333      1.1  christos     { Bad_Opcode },
   8334      1.1  christos     { Bad_Opcode },
   8335      1.1  christos     { Bad_Opcode },
   8336      1.1  christos     /* a8 */
   8337      1.1  christos     { Bad_Opcode },
   8338      1.1  christos     { Bad_Opcode },
   8339      1.1  christos     { Bad_Opcode },
   8340      1.1  christos     { Bad_Opcode },
   8341      1.1  christos     { Bad_Opcode },
   8342      1.1  christos     { Bad_Opcode },
   8343      1.1  christos     { Bad_Opcode },
   8344      1.1  christos     { Bad_Opcode },
   8345      1.1  christos     /* b0 */
   8346      1.1  christos     { Bad_Opcode },
   8347      1.1  christos     { Bad_Opcode },
   8348      1.1  christos     { Bad_Opcode },
   8349      1.1  christos     { Bad_Opcode },
   8350      1.1  christos     { Bad_Opcode },
   8351      1.1  christos     { Bad_Opcode },
   8352      1.1  christos     { Bad_Opcode },
   8353      1.1  christos     { Bad_Opcode },
   8354      1.1  christos     /* b8 */
   8355      1.1  christos     { Bad_Opcode },
   8356      1.1  christos     { Bad_Opcode },
   8357      1.1  christos     { Bad_Opcode },
   8358      1.1  christos     { Bad_Opcode },
   8359      1.1  christos     { Bad_Opcode },
   8360      1.1  christos     { Bad_Opcode },
   8361      1.1  christos     { Bad_Opcode },
   8362      1.1  christos     { Bad_Opcode },
   8363      1.1  christos     /* c0 */
   8364      1.1  christos     { Bad_Opcode },
   8365      1.1  christos     { Bad_Opcode },
   8366      1.1  christos     { Bad_Opcode },
   8367      1.1  christos     { Bad_Opcode },
   8368      1.1  christos     { Bad_Opcode },
   8369      1.1  christos     { Bad_Opcode },
   8370      1.1  christos     { Bad_Opcode },
   8371      1.1  christos     { Bad_Opcode },
   8372      1.1  christos     /* c8 */
   8373      1.1  christos     { Bad_Opcode },
   8374      1.1  christos     { Bad_Opcode },
   8375      1.1  christos     { Bad_Opcode },
   8376      1.1  christos     { Bad_Opcode },
   8377      1.1  christos     { Bad_Opcode },
   8378      1.1  christos     { Bad_Opcode },
   8379      1.1  christos     { Bad_Opcode },
   8380      1.1  christos     { Bad_Opcode },
   8381      1.1  christos     /* d0 */
   8382      1.1  christos     { Bad_Opcode },
   8383      1.1  christos     { Bad_Opcode },
   8384      1.1  christos     { Bad_Opcode },
   8385      1.1  christos     { Bad_Opcode },
   8386      1.1  christos     { Bad_Opcode },
   8387      1.1  christos     { Bad_Opcode },
   8388      1.1  christos     { Bad_Opcode },
   8389      1.1  christos     { Bad_Opcode },
   8390      1.1  christos     /* d8 */
   8391      1.1  christos     { Bad_Opcode },
   8392      1.1  christos     { Bad_Opcode },
   8393      1.1  christos     { Bad_Opcode },
   8394      1.1  christos     { Bad_Opcode },
   8395      1.1  christos     { Bad_Opcode },
   8396      1.1  christos     { Bad_Opcode },
   8397      1.1  christos     { Bad_Opcode },
   8398      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
   8399      1.1  christos     /* e0 */
   8400      1.1  christos     { Bad_Opcode },
   8401      1.1  christos     { Bad_Opcode },
   8402      1.1  christos     { Bad_Opcode },
   8403      1.1  christos     { Bad_Opcode },
   8404      1.1  christos     { Bad_Opcode },
   8405      1.1  christos     { Bad_Opcode },
   8406      1.1  christos     { Bad_Opcode },
   8407      1.1  christos     { Bad_Opcode },
   8408      1.1  christos     /* e8 */
   8409      1.1  christos     { Bad_Opcode },
   8410      1.1  christos     { Bad_Opcode },
   8411      1.1  christos     { Bad_Opcode },
   8412      1.1  christos     { Bad_Opcode },
   8413      1.1  christos     { Bad_Opcode },
   8414      1.1  christos     { Bad_Opcode },
   8415      1.1  christos     { Bad_Opcode },
   8416      1.1  christos     { Bad_Opcode },
   8417      1.1  christos     /* f0 */
   8418  1.1.1.2  christos     { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
   8419      1.1  christos     { Bad_Opcode },
   8420      1.1  christos     { Bad_Opcode },
   8421      1.1  christos     { Bad_Opcode },
   8422      1.1  christos     { Bad_Opcode },
   8423      1.1  christos     { Bad_Opcode },
   8424      1.1  christos     { Bad_Opcode },
   8425      1.1  christos     { Bad_Opcode },
   8426      1.1  christos     /* f8 */
   8427      1.1  christos     { Bad_Opcode },
   8428      1.1  christos     { Bad_Opcode },
   8429      1.1  christos     { Bad_Opcode },
   8430      1.1  christos     { Bad_Opcode },
   8431      1.1  christos     { Bad_Opcode },
   8432      1.1  christos     { Bad_Opcode },
   8433      1.1  christos     { Bad_Opcode },
   8434      1.1  christos     { Bad_Opcode },
   8435      1.1  christos   },
   8436      1.1  christos };
   8437      1.1  christos 
   8438      1.1  christos static const struct dis386 vex_len_table[][2] = {
   8439      1.1  christos   /* VEX_LEN_0F10_P_1 */
   8440      1.1  christos   {
   8441      1.1  christos     { VEX_W_TABLE (VEX_W_0F10_P_1) },
   8442      1.1  christos     { VEX_W_TABLE (VEX_W_0F10_P_1) },
   8443      1.1  christos   },
   8444      1.1  christos 
   8445      1.1  christos   /* VEX_LEN_0F10_P_3 */
   8446      1.1  christos   {
   8447      1.1  christos     { VEX_W_TABLE (VEX_W_0F10_P_3) },
   8448      1.1  christos     { VEX_W_TABLE (VEX_W_0F10_P_3) },
   8449      1.1  christos   },
   8450      1.1  christos 
   8451      1.1  christos   /* VEX_LEN_0F11_P_1 */
   8452      1.1  christos   {
   8453      1.1  christos     { VEX_W_TABLE (VEX_W_0F11_P_1) },
   8454      1.1  christos     { VEX_W_TABLE (VEX_W_0F11_P_1) },
   8455      1.1  christos   },
   8456      1.1  christos 
   8457      1.1  christos   /* VEX_LEN_0F11_P_3 */
   8458      1.1  christos   {
   8459      1.1  christos     { VEX_W_TABLE (VEX_W_0F11_P_3) },
   8460      1.1  christos     { VEX_W_TABLE (VEX_W_0F11_P_3) },
   8461      1.1  christos   },
   8462      1.1  christos 
   8463      1.1  christos   /* VEX_LEN_0F12_P_0_M_0 */
   8464      1.1  christos   {
   8465      1.1  christos     { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
   8466      1.1  christos   },
   8467      1.1  christos 
   8468      1.1  christos   /* VEX_LEN_0F12_P_0_M_1 */
   8469      1.1  christos   {
   8470      1.1  christos     { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
   8471      1.1  christos   },
   8472      1.1  christos 
   8473      1.1  christos   /* VEX_LEN_0F12_P_2 */
   8474      1.1  christos   {
   8475      1.1  christos     { VEX_W_TABLE (VEX_W_0F12_P_2) },
   8476      1.1  christos   },
   8477      1.1  christos 
   8478      1.1  christos   /* VEX_LEN_0F13_M_0 */
   8479      1.1  christos   {
   8480      1.1  christos     { VEX_W_TABLE (VEX_W_0F13_M_0) },
   8481      1.1  christos   },
   8482      1.1  christos 
   8483      1.1  christos   /* VEX_LEN_0F16_P_0_M_0 */
   8484      1.1  christos   {
   8485      1.1  christos     { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
   8486      1.1  christos   },
   8487      1.1  christos 
   8488      1.1  christos   /* VEX_LEN_0F16_P_0_M_1 */
   8489      1.1  christos   {
   8490      1.1  christos     { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
   8491      1.1  christos   },
   8492      1.1  christos 
   8493      1.1  christos   /* VEX_LEN_0F16_P_2 */
   8494      1.1  christos   {
   8495      1.1  christos     { VEX_W_TABLE (VEX_W_0F16_P_2) },
   8496      1.1  christos   },
   8497      1.1  christos 
   8498      1.1  christos   /* VEX_LEN_0F17_M_0 */
   8499      1.1  christos   {
   8500      1.1  christos     { VEX_W_TABLE (VEX_W_0F17_M_0) },
   8501      1.1  christos   },
   8502      1.1  christos 
   8503      1.1  christos   /* VEX_LEN_0F2A_P_1 */
   8504      1.1  christos   {
   8505      1.1  christos     { "vcvtsi2ss%LQ",	{ XMScalar, VexScalar, Ev } },
   8506      1.1  christos     { "vcvtsi2ss%LQ",	{ XMScalar, VexScalar, Ev } },
   8507      1.1  christos   },
   8508      1.1  christos 
   8509      1.1  christos   /* VEX_LEN_0F2A_P_3 */
   8510      1.1  christos   {
   8511      1.1  christos     { "vcvtsi2sd%LQ",	{ XMScalar, VexScalar, Ev } },
   8512      1.1  christos     { "vcvtsi2sd%LQ",	{ XMScalar, VexScalar, Ev } },
   8513      1.1  christos   },
   8514      1.1  christos 
   8515      1.1  christos   /* VEX_LEN_0F2C_P_1 */
   8516      1.1  christos   {
   8517      1.1  christos     { "vcvttss2siY",	{ Gv, EXdScalar } },
   8518      1.1  christos     { "vcvttss2siY",	{ Gv, EXdScalar } },
   8519      1.1  christos   },
   8520      1.1  christos 
   8521      1.1  christos   /* VEX_LEN_0F2C_P_3 */
   8522      1.1  christos   {
   8523      1.1  christos     { "vcvttsd2siY",	{ Gv, EXqScalar } },
   8524      1.1  christos     { "vcvttsd2siY",	{ Gv, EXqScalar } },
   8525      1.1  christos   },
   8526      1.1  christos 
   8527      1.1  christos   /* VEX_LEN_0F2D_P_1 */
   8528      1.1  christos   {
   8529      1.1  christos     { "vcvtss2siY",	{ Gv, EXdScalar } },
   8530      1.1  christos     { "vcvtss2siY",	{ Gv, EXdScalar } },
   8531      1.1  christos   },
   8532      1.1  christos 
   8533      1.1  christos   /* VEX_LEN_0F2D_P_3 */
   8534      1.1  christos   {
   8535      1.1  christos     { "vcvtsd2siY",	{ Gv, EXqScalar } },
   8536      1.1  christos     { "vcvtsd2siY",	{ Gv, EXqScalar } },
   8537      1.1  christos   },
   8538      1.1  christos 
   8539      1.1  christos   /* VEX_LEN_0F2E_P_0 */
   8540      1.1  christos   {
   8541      1.1  christos     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
   8542      1.1  christos     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
   8543      1.1  christos   },
   8544      1.1  christos 
   8545      1.1  christos   /* VEX_LEN_0F2E_P_2 */
   8546      1.1  christos   {
   8547      1.1  christos     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
   8548      1.1  christos     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
   8549      1.1  christos   },
   8550      1.1  christos 
   8551      1.1  christos   /* VEX_LEN_0F2F_P_0 */
   8552      1.1  christos   {
   8553      1.1  christos     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
   8554      1.1  christos     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
   8555      1.1  christos   },
   8556      1.1  christos 
   8557      1.1  christos   /* VEX_LEN_0F2F_P_2 */
   8558      1.1  christos   {
   8559      1.1  christos     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
   8560      1.1  christos     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
   8561      1.1  christos   },
   8562      1.1  christos 
   8563      1.1  christos   /* VEX_LEN_0F51_P_1 */
   8564      1.1  christos   {
   8565      1.1  christos     { VEX_W_TABLE (VEX_W_0F51_P_1) },
   8566      1.1  christos     { VEX_W_TABLE (VEX_W_0F51_P_1) },
   8567      1.1  christos   },
   8568      1.1  christos 
   8569      1.1  christos   /* VEX_LEN_0F51_P_3 */
   8570      1.1  christos   {
   8571      1.1  christos     { VEX_W_TABLE (VEX_W_0F51_P_3) },
   8572      1.1  christos     { VEX_W_TABLE (VEX_W_0F51_P_3) },
   8573      1.1  christos   },
   8574      1.1  christos 
   8575      1.1  christos   /* VEX_LEN_0F52_P_1 */
   8576      1.1  christos   {
   8577      1.1  christos     { VEX_W_TABLE (VEX_W_0F52_P_1) },
   8578      1.1  christos     { VEX_W_TABLE (VEX_W_0F52_P_1) },
   8579      1.1  christos   },
   8580      1.1  christos 
   8581      1.1  christos   /* VEX_LEN_0F53_P_1 */
   8582      1.1  christos   {
   8583      1.1  christos     { VEX_W_TABLE (VEX_W_0F53_P_1) },
   8584      1.1  christos     { VEX_W_TABLE (VEX_W_0F53_P_1) },
   8585      1.1  christos   },
   8586      1.1  christos 
   8587      1.1  christos   /* VEX_LEN_0F58_P_1 */
   8588      1.1  christos   {
   8589      1.1  christos     { VEX_W_TABLE (VEX_W_0F58_P_1) },
   8590      1.1  christos     { VEX_W_TABLE (VEX_W_0F58_P_1) },
   8591      1.1  christos   },
   8592      1.1  christos 
   8593      1.1  christos   /* VEX_LEN_0F58_P_3 */
   8594      1.1  christos   {
   8595      1.1  christos     { VEX_W_TABLE (VEX_W_0F58_P_3) },
   8596      1.1  christos     { VEX_W_TABLE (VEX_W_0F58_P_3) },
   8597      1.1  christos   },
   8598      1.1  christos 
   8599      1.1  christos   /* VEX_LEN_0F59_P_1 */
   8600      1.1  christos   {
   8601      1.1  christos     { VEX_W_TABLE (VEX_W_0F59_P_1) },
   8602      1.1  christos     { VEX_W_TABLE (VEX_W_0F59_P_1) },
   8603      1.1  christos   },
   8604      1.1  christos 
   8605      1.1  christos   /* VEX_LEN_0F59_P_3 */
   8606      1.1  christos   {
   8607      1.1  christos     { VEX_W_TABLE (VEX_W_0F59_P_3) },
   8608      1.1  christos     { VEX_W_TABLE (VEX_W_0F59_P_3) },
   8609      1.1  christos   },
   8610      1.1  christos 
   8611      1.1  christos   /* VEX_LEN_0F5A_P_1 */
   8612      1.1  christos   {
   8613      1.1  christos     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
   8614      1.1  christos     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
   8615      1.1  christos   },
   8616      1.1  christos 
   8617      1.1  christos   /* VEX_LEN_0F5A_P_3 */
   8618      1.1  christos   {
   8619      1.1  christos     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
   8620      1.1  christos     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
   8621      1.1  christos   },
   8622      1.1  christos 
   8623      1.1  christos   /* VEX_LEN_0F5C_P_1 */
   8624      1.1  christos   {
   8625      1.1  christos     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
   8626      1.1  christos     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
   8627      1.1  christos   },
   8628      1.1  christos 
   8629      1.1  christos   /* VEX_LEN_0F5C_P_3 */
   8630      1.1  christos   {
   8631      1.1  christos     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
   8632      1.1  christos     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
   8633      1.1  christos   },
   8634      1.1  christos 
   8635      1.1  christos   /* VEX_LEN_0F5D_P_1 */
   8636      1.1  christos   {
   8637      1.1  christos     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
   8638      1.1  christos     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
   8639      1.1  christos   },
   8640      1.1  christos 
   8641      1.1  christos   /* VEX_LEN_0F5D_P_3 */
   8642      1.1  christos   {
   8643      1.1  christos     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
   8644      1.1  christos     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
   8645      1.1  christos   },
   8646      1.1  christos 
   8647      1.1  christos   /* VEX_LEN_0F5E_P_1 */
   8648      1.1  christos   {
   8649      1.1  christos     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
   8650      1.1  christos     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
   8651      1.1  christos   },
   8652      1.1  christos 
   8653      1.1  christos   /* VEX_LEN_0F5E_P_3 */
   8654      1.1  christos   {
   8655      1.1  christos     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
   8656      1.1  christos     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
   8657      1.1  christos   },
   8658      1.1  christos 
   8659      1.1  christos   /* VEX_LEN_0F5F_P_1 */
   8660      1.1  christos   {
   8661      1.1  christos     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
   8662      1.1  christos     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
   8663      1.1  christos   },
   8664      1.1  christos 
   8665      1.1  christos   /* VEX_LEN_0F5F_P_3 */
   8666      1.1  christos   {
   8667      1.1  christos     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
   8668      1.1  christos     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
   8669      1.1  christos   },
   8670      1.1  christos 
   8671  1.1.1.2  christos   /* VEX_LEN_0F6E_P_2 */
   8672      1.1  christos   {
   8673  1.1.1.2  christos     { "vmovK",		{ XMScalar, Edq } },
   8674  1.1.1.2  christos     { "vmovK",		{ XMScalar, Edq } },
   8675      1.1  christos   },
   8676      1.1  christos 
   8677  1.1.1.2  christos   /* VEX_LEN_0F7E_P_1 */
   8678      1.1  christos   {
   8679  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
   8680  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
   8681      1.1  christos   },
   8682      1.1  christos 
   8683  1.1.1.2  christos   /* VEX_LEN_0F7E_P_2 */
   8684      1.1  christos   {
   8685  1.1.1.2  christos     { "vmovK",		{ Edq, XMScalar } },
   8686  1.1.1.2  christos     { "vmovK",		{ Edq, XMScalar } },
   8687      1.1  christos   },
   8688      1.1  christos 
   8689  1.1.1.2  christos   /* VEX_LEN_0FAE_R_2_M_0 */
   8690      1.1  christos   {
   8691  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
   8692      1.1  christos   },
   8693      1.1  christos 
   8694  1.1.1.2  christos   /* VEX_LEN_0FAE_R_3_M_0 */
   8695      1.1  christos   {
   8696  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
   8697      1.1  christos   },
   8698      1.1  christos 
   8699  1.1.1.2  christos   /* VEX_LEN_0FC2_P_1 */
   8700      1.1  christos   {
   8701  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
   8702  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
   8703      1.1  christos   },
   8704      1.1  christos 
   8705  1.1.1.2  christos   /* VEX_LEN_0FC2_P_3 */
   8706      1.1  christos   {
   8707  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
   8708  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
   8709      1.1  christos   },
   8710      1.1  christos 
   8711  1.1.1.2  christos   /* VEX_LEN_0FC4_P_2 */
   8712      1.1  christos   {
   8713  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FC4_P_2) },
   8714      1.1  christos   },
   8715      1.1  christos 
   8716  1.1.1.2  christos   /* VEX_LEN_0FC5_P_2 */
   8717      1.1  christos   {
   8718  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FC5_P_2) },
   8719      1.1  christos   },
   8720      1.1  christos 
   8721  1.1.1.2  christos   /* VEX_LEN_0FD6_P_2 */
   8722      1.1  christos   {
   8723  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
   8724  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
   8725      1.1  christos   },
   8726      1.1  christos 
   8727  1.1.1.2  christos   /* VEX_LEN_0FF7_P_2 */
   8728      1.1  christos   {
   8729  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FF7_P_2) },
   8730      1.1  christos   },
   8731      1.1  christos 
   8732  1.1.1.2  christos   /* VEX_LEN_0F3816_P_2 */
   8733      1.1  christos   {
   8734  1.1.1.2  christos     { Bad_Opcode },
   8735  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3816_P_2) },
   8736      1.1  christos   },
   8737      1.1  christos 
   8738  1.1.1.2  christos   /* VEX_LEN_0F3819_P_2 */
   8739      1.1  christos   {
   8740  1.1.1.2  christos     { Bad_Opcode },
   8741  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3819_P_2) },
   8742      1.1  christos   },
   8743      1.1  christos 
   8744  1.1.1.2  christos   /* VEX_LEN_0F381A_P_2_M_0 */
   8745      1.1  christos   {
   8746  1.1.1.2  christos     { Bad_Opcode },
   8747  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
   8748      1.1  christos   },
   8749      1.1  christos 
   8750  1.1.1.2  christos   /* VEX_LEN_0F3836_P_2 */
   8751      1.1  christos   {
   8752  1.1.1.2  christos     { Bad_Opcode },
   8753  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3836_P_2) },
   8754      1.1  christos   },
   8755      1.1  christos 
   8756  1.1.1.2  christos   /* VEX_LEN_0F3841_P_2 */
   8757      1.1  christos   {
   8758  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3841_P_2) },
   8759      1.1  christos   },
   8760      1.1  christos 
   8761  1.1.1.2  christos   /* VEX_LEN_0F385A_P_2_M_0 */
   8762      1.1  christos   {
   8763  1.1.1.2  christos     { Bad_Opcode },
   8764  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
   8765      1.1  christos   },
   8766      1.1  christos 
   8767  1.1.1.2  christos   /* VEX_LEN_0F38DB_P_2 */
   8768      1.1  christos   {
   8769  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
   8770      1.1  christos   },
   8771      1.1  christos 
   8772  1.1.1.2  christos   /* VEX_LEN_0F38DC_P_2 */
   8773      1.1  christos   {
   8774  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
   8775      1.1  christos   },
   8776      1.1  christos 
   8777  1.1.1.2  christos   /* VEX_LEN_0F38DD_P_2 */
   8778      1.1  christos   {
   8779  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
   8780      1.1  christos   },
   8781      1.1  christos 
   8782  1.1.1.2  christos   /* VEX_LEN_0F38DE_P_2 */
   8783      1.1  christos   {
   8784  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
   8785      1.1  christos   },
   8786      1.1  christos 
   8787  1.1.1.2  christos   /* VEX_LEN_0F38DF_P_2 */
   8788      1.1  christos   {
   8789  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
   8790      1.1  christos   },
   8791      1.1  christos 
   8792  1.1.1.2  christos   /* VEX_LEN_0F38F2_P_0 */
   8793      1.1  christos   {
   8794  1.1.1.2  christos     { "andnS",		{ Gdq, VexGdq, Edq } },
   8795      1.1  christos   },
   8796      1.1  christos 
   8797  1.1.1.2  christos   /* VEX_LEN_0F38F3_R_1_P_0 */
   8798      1.1  christos   {
   8799  1.1.1.2  christos     { "blsrS",		{ VexGdq, Edq } },
   8800      1.1  christos   },
   8801      1.1  christos 
   8802  1.1.1.2  christos   /* VEX_LEN_0F38F3_R_2_P_0 */
   8803      1.1  christos   {
   8804  1.1.1.2  christos     { "blsmskS",	{ VexGdq, Edq } },
   8805      1.1  christos   },
   8806      1.1  christos 
   8807  1.1.1.2  christos   /* VEX_LEN_0F38F3_R_3_P_0 */
   8808      1.1  christos   {
   8809  1.1.1.2  christos     { "blsiS",		{ VexGdq, Edq } },
   8810      1.1  christos   },
   8811      1.1  christos 
   8812  1.1.1.2  christos   /* VEX_LEN_0F38F5_P_0 */
   8813      1.1  christos   {
   8814  1.1.1.2  christos     { "bzhiS",		{ Gdq, Edq, VexGdq } },
   8815      1.1  christos   },
   8816      1.1  christos 
   8817  1.1.1.2  christos   /* VEX_LEN_0F38F5_P_1 */
   8818      1.1  christos   {
   8819  1.1.1.2  christos     { "pextS",		{ Gdq, VexGdq, Edq } },
   8820      1.1  christos   },
   8821      1.1  christos 
   8822  1.1.1.2  christos   /* VEX_LEN_0F38F5_P_3 */
   8823      1.1  christos   {
   8824  1.1.1.2  christos     { "pdepS",		{ Gdq, VexGdq, Edq } },
   8825      1.1  christos   },
   8826      1.1  christos 
   8827  1.1.1.2  christos   /* VEX_LEN_0F38F6_P_3 */
   8828      1.1  christos   {
   8829  1.1.1.2  christos     { "mulxS",		{ Gdq, VexGdq, Edq } },
   8830      1.1  christos   },
   8831      1.1  christos 
   8832  1.1.1.2  christos   /* VEX_LEN_0F38F7_P_0 */
   8833      1.1  christos   {
   8834  1.1.1.2  christos     { "bextrS",		{ Gdq, Edq, VexGdq } },
   8835      1.1  christos   },
   8836      1.1  christos 
   8837  1.1.1.2  christos   /* VEX_LEN_0F38F7_P_1 */
   8838      1.1  christos   {
   8839  1.1.1.2  christos     { "sarxS",		{ Gdq, Edq, VexGdq } },
   8840      1.1  christos   },
   8841      1.1  christos 
   8842  1.1.1.2  christos   /* VEX_LEN_0F38F7_P_2 */
   8843      1.1  christos   {
   8844  1.1.1.2  christos     { "shlxS",		{ Gdq, Edq, VexGdq } },
   8845      1.1  christos   },
   8846      1.1  christos 
   8847  1.1.1.2  christos   /* VEX_LEN_0F38F7_P_3 */
   8848      1.1  christos   {
   8849  1.1.1.2  christos     { "shrxS",		{ Gdq, Edq, VexGdq } },
   8850      1.1  christos   },
   8851      1.1  christos 
   8852  1.1.1.2  christos   /* VEX_LEN_0F3A00_P_2 */
   8853      1.1  christos   {
   8854  1.1.1.2  christos     { Bad_Opcode },
   8855  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
   8856      1.1  christos   },
   8857      1.1  christos 
   8858  1.1.1.2  christos   /* VEX_LEN_0F3A01_P_2 */
   8859      1.1  christos   {
   8860  1.1.1.2  christos     { Bad_Opcode },
   8861  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
   8862      1.1  christos   },
   8863      1.1  christos 
   8864  1.1.1.2  christos   /* VEX_LEN_0F3A06_P_2 */
   8865      1.1  christos   {
   8866  1.1.1.2  christos     { Bad_Opcode },
   8867  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
   8868      1.1  christos   },
   8869      1.1  christos 
   8870  1.1.1.2  christos   /* VEX_LEN_0F3A0A_P_2 */
   8871      1.1  christos   {
   8872  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
   8873  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
   8874      1.1  christos   },
   8875      1.1  christos 
   8876  1.1.1.2  christos   /* VEX_LEN_0F3A0B_P_2 */
   8877      1.1  christos   {
   8878  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
   8879  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
   8880      1.1  christos   },
   8881      1.1  christos 
   8882  1.1.1.2  christos   /* VEX_LEN_0F3A14_P_2 */
   8883      1.1  christos   {
   8884  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
   8885      1.1  christos   },
   8886      1.1  christos 
   8887  1.1.1.2  christos   /* VEX_LEN_0F3A15_P_2 */
   8888      1.1  christos   {
   8889  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
   8890      1.1  christos   },
   8891      1.1  christos 
   8892  1.1.1.2  christos   /* VEX_LEN_0F3A16_P_2  */
   8893      1.1  christos   {
   8894  1.1.1.2  christos     { "vpextrK",	{ Edq, XM, Ib } },
   8895      1.1  christos   },
   8896      1.1  christos 
   8897  1.1.1.2  christos   /* VEX_LEN_0F3A17_P_2 */
   8898      1.1  christos   {
   8899  1.1.1.2  christos     { "vextractps",	{ Edqd, XM, Ib } },
   8900      1.1  christos   },
   8901      1.1  christos 
   8902  1.1.1.2  christos   /* VEX_LEN_0F3A18_P_2 */
   8903      1.1  christos   {
   8904  1.1.1.2  christos     { Bad_Opcode },
   8905  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
   8906      1.1  christos   },
   8907      1.1  christos 
   8908  1.1.1.2  christos   /* VEX_LEN_0F3A19_P_2 */
   8909      1.1  christos   {
   8910  1.1.1.2  christos     { Bad_Opcode },
   8911  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
   8912      1.1  christos   },
   8913      1.1  christos 
   8914  1.1.1.2  christos   /* VEX_LEN_0F3A20_P_2 */
   8915      1.1  christos   {
   8916  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
   8917      1.1  christos   },
   8918      1.1  christos 
   8919  1.1.1.2  christos   /* VEX_LEN_0F3A21_P_2 */
   8920      1.1  christos   {
   8921  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
   8922      1.1  christos   },
   8923      1.1  christos 
   8924  1.1.1.2  christos   /* VEX_LEN_0F3A22_P_2 */
   8925      1.1  christos   {
   8926  1.1.1.2  christos     { "vpinsrK",	{ XM, Vex128, Edq, Ib } },
   8927      1.1  christos   },
   8928      1.1  christos 
   8929  1.1.1.2  christos   /* VEX_LEN_0F3A38_P_2 */
   8930      1.1  christos   {
   8931  1.1.1.2  christos     { Bad_Opcode },
   8932  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
   8933      1.1  christos   },
   8934      1.1  christos 
   8935  1.1.1.2  christos   /* VEX_LEN_0F3A39_P_2 */
   8936      1.1  christos   {
   8937  1.1.1.2  christos     { Bad_Opcode },
   8938  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
   8939      1.1  christos   },
   8940      1.1  christos 
   8941  1.1.1.2  christos   /* VEX_LEN_0F3A41_P_2 */
   8942      1.1  christos   {
   8943  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
   8944      1.1  christos   },
   8945      1.1  christos 
   8946  1.1.1.2  christos   /* VEX_LEN_0F3A44_P_2 */
   8947      1.1  christos   {
   8948  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
   8949      1.1  christos   },
   8950      1.1  christos 
   8951  1.1.1.2  christos   /* VEX_LEN_0F3A46_P_2 */
   8952      1.1  christos   {
   8953  1.1.1.2  christos     { Bad_Opcode },
   8954  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
   8955      1.1  christos   },
   8956      1.1  christos 
   8957  1.1.1.2  christos   /* VEX_LEN_0F3A60_P_2 */
   8958      1.1  christos   {
   8959  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
   8960      1.1  christos   },
   8961      1.1  christos 
   8962  1.1.1.2  christos   /* VEX_LEN_0F3A61_P_2 */
   8963      1.1  christos   {
   8964  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
   8965      1.1  christos   },
   8966      1.1  christos 
   8967  1.1.1.2  christos   /* VEX_LEN_0F3A62_P_2 */
   8968      1.1  christos   {
   8969  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
   8970      1.1  christos   },
   8971      1.1  christos 
   8972  1.1.1.2  christos   /* VEX_LEN_0F3A63_P_2 */
   8973      1.1  christos   {
   8974  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
   8975      1.1  christos   },
   8976      1.1  christos 
   8977  1.1.1.2  christos   /* VEX_LEN_0F3A6A_P_2 */
   8978      1.1  christos   {
   8979  1.1.1.2  christos     { "vfmaddss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
   8980      1.1  christos   },
   8981      1.1  christos 
   8982  1.1.1.2  christos   /* VEX_LEN_0F3A6B_P_2 */
   8983      1.1  christos   {
   8984  1.1.1.2  christos     { "vfmaddsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
   8985      1.1  christos   },
   8986      1.1  christos 
   8987  1.1.1.2  christos   /* VEX_LEN_0F3A6E_P_2 */
   8988      1.1  christos   {
   8989  1.1.1.2  christos     { "vfmsubss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
   8990      1.1  christos   },
   8991      1.1  christos 
   8992  1.1.1.2  christos   /* VEX_LEN_0F3A6F_P_2 */
   8993      1.1  christos   {
   8994  1.1.1.2  christos     { "vfmsubsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
   8995      1.1  christos   },
   8996      1.1  christos 
   8997  1.1.1.2  christos   /* VEX_LEN_0F3A7A_P_2 */
   8998      1.1  christos   {
   8999  1.1.1.2  christos     { "vfnmaddss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
   9000      1.1  christos   },
   9001      1.1  christos 
   9002  1.1.1.2  christos   /* VEX_LEN_0F3A7B_P_2 */
   9003      1.1  christos   {
   9004  1.1.1.2  christos     { "vfnmaddsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
   9005      1.1  christos   },
   9006      1.1  christos 
   9007  1.1.1.2  christos   /* VEX_LEN_0F3A7E_P_2 */
   9008      1.1  christos   {
   9009  1.1.1.2  christos     { "vfnmsubss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
   9010      1.1  christos   },
   9011      1.1  christos 
   9012  1.1.1.2  christos   /* VEX_LEN_0F3A7F_P_2 */
   9013      1.1  christos   {
   9014  1.1.1.2  christos     { "vfnmsubsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
   9015      1.1  christos   },
   9016      1.1  christos 
   9017  1.1.1.2  christos   /* VEX_LEN_0F3ADF_P_2 */
   9018      1.1  christos   {
   9019  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
   9020      1.1  christos   },
   9021      1.1  christos 
   9022  1.1.1.2  christos   /* VEX_LEN_0F3AF0_P_3 */
   9023      1.1  christos   {
   9024  1.1.1.2  christos     { "rorxS",		{ Gdq, Edq, Ib } },
   9025      1.1  christos   },
   9026      1.1  christos 
   9027  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_CC */
   9028      1.1  christos   {
   9029  1.1.1.2  christos      { "vpcomb",	{ XM, Vex128, EXx, Ib } },
   9030      1.1  christos   },
   9031      1.1  christos 
   9032  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_CD */
   9033      1.1  christos   {
   9034  1.1.1.2  christos      { "vpcomw",	{ XM, Vex128, EXx, Ib } },
   9035      1.1  christos   },
   9036      1.1  christos 
   9037  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_CE */
   9038      1.1  christos   {
   9039  1.1.1.2  christos      { "vpcomd",	{ XM, Vex128, EXx, Ib } },
   9040      1.1  christos   },
   9041      1.1  christos 
   9042  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_CF */
   9043      1.1  christos   {
   9044  1.1.1.2  christos      { "vpcomq",	{ XM, Vex128, EXx, Ib } },
   9045      1.1  christos   },
   9046      1.1  christos 
   9047  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_EC */
   9048      1.1  christos   {
   9049  1.1.1.2  christos      { "vpcomub",	{ XM, Vex128, EXx, Ib } },
   9050      1.1  christos   },
   9051      1.1  christos 
   9052  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_ED */
   9053      1.1  christos   {
   9054  1.1.1.2  christos      { "vpcomuw",	{ XM, Vex128, EXx, Ib } },
   9055      1.1  christos   },
   9056      1.1  christos 
   9057  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_EE */
   9058      1.1  christos   {
   9059  1.1.1.2  christos      { "vpcomud",	{ XM, Vex128, EXx, Ib } },
   9060      1.1  christos   },
   9061      1.1  christos 
   9062  1.1.1.2  christos   /* VEX_LEN_0FXOP_08_EF */
   9063      1.1  christos   {
   9064  1.1.1.2  christos      { "vpcomuq",	{ XM, Vex128, EXx, Ib } },
   9065      1.1  christos   },
   9066      1.1  christos 
   9067      1.1  christos   /* VEX_LEN_0FXOP_09_80 */
   9068      1.1  christos   {
   9069      1.1  christos     { "vfrczps",	{ XM, EXxmm } },
   9070      1.1  christos     { "vfrczps",	{ XM, EXymmq } },
   9071      1.1  christos   },
   9072      1.1  christos 
   9073      1.1  christos   /* VEX_LEN_0FXOP_09_81 */
   9074      1.1  christos   {
   9075      1.1  christos     { "vfrczpd",	{ XM, EXxmm } },
   9076      1.1  christos     { "vfrczpd",	{ XM, EXymmq } },
   9077      1.1  christos   },
   9078      1.1  christos };
   9079      1.1  christos 
   9080      1.1  christos static const struct dis386 vex_w_table[][2] = {
   9081      1.1  christos   {
   9082      1.1  christos     /* VEX_W_0F10_P_0 */
   9083      1.1  christos     { "vmovups",	{ XM, EXx } },
   9084      1.1  christos   },
   9085      1.1  christos   {
   9086      1.1  christos     /* VEX_W_0F10_P_1 */
   9087      1.1  christos     { "vmovss",		{ XMVexScalar, VexScalar, EXdScalar } },
   9088      1.1  christos   },
   9089      1.1  christos   {
   9090      1.1  christos     /* VEX_W_0F10_P_2 */
   9091      1.1  christos     { "vmovupd",	{ XM, EXx } },
   9092      1.1  christos   },
   9093      1.1  christos   {
   9094      1.1  christos     /* VEX_W_0F10_P_3 */
   9095      1.1  christos     { "vmovsd",		{ XMVexScalar, VexScalar, EXqScalar } },
   9096      1.1  christos   },
   9097      1.1  christos   {
   9098      1.1  christos     /* VEX_W_0F11_P_0 */
   9099      1.1  christos     { "vmovups",	{ EXxS, XM } },
   9100      1.1  christos   },
   9101      1.1  christos   {
   9102      1.1  christos     /* VEX_W_0F11_P_1 */
   9103      1.1  christos     { "vmovss",		{ EXdVexScalarS, VexScalar, XMScalar } },
   9104      1.1  christos   },
   9105      1.1  christos   {
   9106      1.1  christos     /* VEX_W_0F11_P_2 */
   9107      1.1  christos     { "vmovupd",	{ EXxS, XM } },
   9108      1.1  christos   },
   9109      1.1  christos   {
   9110      1.1  christos     /* VEX_W_0F11_P_3 */
   9111      1.1  christos     { "vmovsd",		{ EXqVexScalarS, VexScalar, XMScalar } },
   9112      1.1  christos   },
   9113      1.1  christos   {
   9114      1.1  christos     /* VEX_W_0F12_P_0_M_0 */
   9115      1.1  christos     { "vmovlps",	{ XM, Vex128, EXq } },
   9116      1.1  christos   },
   9117      1.1  christos   {
   9118      1.1  christos     /* VEX_W_0F12_P_0_M_1 */
   9119      1.1  christos     { "vmovhlps",	{ XM, Vex128, EXq } },
   9120      1.1  christos   },
   9121      1.1  christos   {
   9122      1.1  christos     /* VEX_W_0F12_P_1 */
   9123      1.1  christos     { "vmovsldup",	{ XM, EXx } },
   9124      1.1  christos   },
   9125      1.1  christos   {
   9126      1.1  christos     /* VEX_W_0F12_P_2 */
   9127      1.1  christos     { "vmovlpd",	{ XM, Vex128, EXq } },
   9128      1.1  christos   },
   9129      1.1  christos   {
   9130      1.1  christos     /* VEX_W_0F12_P_3 */
   9131      1.1  christos     { "vmovddup",	{ XM, EXymmq } },
   9132      1.1  christos   },
   9133      1.1  christos   {
   9134      1.1  christos     /* VEX_W_0F13_M_0 */
   9135      1.1  christos     { "vmovlpX",	{ EXq, XM } },
   9136      1.1  christos   },
   9137      1.1  christos   {
   9138      1.1  christos     /* VEX_W_0F14 */
   9139      1.1  christos     { "vunpcklpX",	{ XM, Vex, EXx } },
   9140      1.1  christos   },
   9141      1.1  christos   {
   9142      1.1  christos     /* VEX_W_0F15 */
   9143      1.1  christos     { "vunpckhpX",	{ XM, Vex, EXx } },
   9144      1.1  christos   },
   9145      1.1  christos   {
   9146      1.1  christos     /* VEX_W_0F16_P_0_M_0 */
   9147      1.1  christos     { "vmovhps",	{ XM, Vex128, EXq } },
   9148      1.1  christos   },
   9149      1.1  christos   {
   9150      1.1  christos     /* VEX_W_0F16_P_0_M_1 */
   9151      1.1  christos     { "vmovlhps",	{ XM, Vex128, EXq } },
   9152      1.1  christos   },
   9153      1.1  christos   {
   9154      1.1  christos     /* VEX_W_0F16_P_1 */
   9155      1.1  christos     { "vmovshdup",	{ XM, EXx } },
   9156      1.1  christos   },
   9157      1.1  christos   {
   9158      1.1  christos     /* VEX_W_0F16_P_2 */
   9159      1.1  christos     { "vmovhpd",	{ XM, Vex128, EXq } },
   9160      1.1  christos   },
   9161      1.1  christos   {
   9162      1.1  christos     /* VEX_W_0F17_M_0 */
   9163      1.1  christos     { "vmovhpX",	{ EXq, XM } },
   9164      1.1  christos   },
   9165      1.1  christos   {
   9166      1.1  christos     /* VEX_W_0F28 */
   9167      1.1  christos     { "vmovapX",	{ XM, EXx } },
   9168      1.1  christos   },
   9169      1.1  christos   {
   9170      1.1  christos     /* VEX_W_0F29 */
   9171      1.1  christos     { "vmovapX",	{ EXxS, XM } },
   9172      1.1  christos   },
   9173      1.1  christos   {
   9174      1.1  christos     /* VEX_W_0F2B_M_0 */
   9175      1.1  christos     { "vmovntpX",	{ Mx, XM } },
   9176      1.1  christos   },
   9177      1.1  christos   {
   9178      1.1  christos     /* VEX_W_0F2E_P_0 */
   9179  1.1.1.2  christos     { "vucomiss",	{ XMScalar, EXdScalar } },
   9180      1.1  christos   },
   9181      1.1  christos   {
   9182      1.1  christos     /* VEX_W_0F2E_P_2 */
   9183  1.1.1.2  christos     { "vucomisd",	{ XMScalar, EXqScalar } },
   9184      1.1  christos   },
   9185      1.1  christos   {
   9186      1.1  christos     /* VEX_W_0F2F_P_0 */
   9187      1.1  christos     { "vcomiss",	{ XMScalar, EXdScalar } },
   9188      1.1  christos   },
   9189      1.1  christos   {
   9190      1.1  christos     /* VEX_W_0F2F_P_2 */
   9191      1.1  christos     { "vcomisd",	{ XMScalar, EXqScalar } },
   9192      1.1  christos   },
   9193      1.1  christos   {
   9194      1.1  christos     /* VEX_W_0F50_M_0 */
   9195      1.1  christos     { "vmovmskpX",	{ Gdq, XS } },
   9196      1.1  christos   },
   9197      1.1  christos   {
   9198      1.1  christos     /* VEX_W_0F51_P_0 */
   9199      1.1  christos     { "vsqrtps",	{ XM, EXx } },
   9200      1.1  christos   },
   9201      1.1  christos   {
   9202      1.1  christos     /* VEX_W_0F51_P_1 */
   9203      1.1  christos     { "vsqrtss",	{ XMScalar, VexScalar, EXdScalar } },
   9204      1.1  christos   },
   9205      1.1  christos   {
   9206      1.1  christos     /* VEX_W_0F51_P_2  */
   9207      1.1  christos     { "vsqrtpd",	{ XM, EXx } },
   9208      1.1  christos   },
   9209      1.1  christos   {
   9210      1.1  christos     /* VEX_W_0F51_P_3 */
   9211      1.1  christos     { "vsqrtsd",	{ XMScalar, VexScalar, EXqScalar } },
   9212      1.1  christos   },
   9213      1.1  christos   {
   9214      1.1  christos     /* VEX_W_0F52_P_0 */
   9215      1.1  christos     { "vrsqrtps",	{ XM, EXx } },
   9216      1.1  christos   },
   9217      1.1  christos   {
   9218      1.1  christos     /* VEX_W_0F52_P_1 */
   9219      1.1  christos     { "vrsqrtss",	{ XMScalar, VexScalar, EXdScalar } },
   9220      1.1  christos   },
   9221      1.1  christos   {
   9222      1.1  christos     /* VEX_W_0F53_P_0  */
   9223      1.1  christos     { "vrcpps",		{ XM, EXx } },
   9224      1.1  christos   },
   9225      1.1  christos   {
   9226      1.1  christos     /* VEX_W_0F53_P_1  */
   9227      1.1  christos     { "vrcpss",		{ XMScalar, VexScalar, EXdScalar } },
   9228      1.1  christos   },
   9229      1.1  christos   {
   9230      1.1  christos     /* VEX_W_0F58_P_0  */
   9231      1.1  christos     { "vaddps",		{ XM, Vex, EXx } },
   9232      1.1  christos   },
   9233      1.1  christos   {
   9234      1.1  christos     /* VEX_W_0F58_P_1  */
   9235      1.1  christos     { "vaddss",		{ XMScalar, VexScalar, EXdScalar } },
   9236      1.1  christos   },
   9237      1.1  christos   {
   9238      1.1  christos     /* VEX_W_0F58_P_2  */
   9239      1.1  christos     { "vaddpd",		{ XM, Vex, EXx } },
   9240      1.1  christos   },
   9241      1.1  christos   {
   9242      1.1  christos     /* VEX_W_0F58_P_3  */
   9243      1.1  christos     { "vaddsd",		{ XMScalar, VexScalar, EXqScalar } },
   9244      1.1  christos   },
   9245      1.1  christos   {
   9246      1.1  christos     /* VEX_W_0F59_P_0  */
   9247      1.1  christos     { "vmulps",		{ XM, Vex, EXx } },
   9248      1.1  christos   },
   9249      1.1  christos   {
   9250      1.1  christos     /* VEX_W_0F59_P_1  */
   9251      1.1  christos     { "vmulss",		{ XMScalar, VexScalar, EXdScalar } },
   9252      1.1  christos   },
   9253      1.1  christos   {
   9254      1.1  christos     /* VEX_W_0F59_P_2  */
   9255      1.1  christos     { "vmulpd",		{ XM, Vex, EXx } },
   9256      1.1  christos   },
   9257      1.1  christos   {
   9258      1.1  christos     /* VEX_W_0F59_P_3  */
   9259      1.1  christos     { "vmulsd",		{ XMScalar, VexScalar, EXqScalar } },
   9260      1.1  christos   },
   9261      1.1  christos   {
   9262      1.1  christos     /* VEX_W_0F5A_P_0  */
   9263      1.1  christos     { "vcvtps2pd",	{ XM, EXxmmq } },
   9264      1.1  christos   },
   9265      1.1  christos   {
   9266      1.1  christos     /* VEX_W_0F5A_P_1  */
   9267      1.1  christos     { "vcvtss2sd",	{ XMScalar, VexScalar, EXdScalar } },
   9268      1.1  christos   },
   9269      1.1  christos   {
   9270      1.1  christos     /* VEX_W_0F5A_P_3  */
   9271      1.1  christos     { "vcvtsd2ss",	{ XMScalar, VexScalar, EXqScalar } },
   9272      1.1  christos   },
   9273      1.1  christos   {
   9274      1.1  christos     /* VEX_W_0F5B_P_0  */
   9275      1.1  christos     { "vcvtdq2ps",	{ XM, EXx } },
   9276      1.1  christos   },
   9277      1.1  christos   {
   9278      1.1  christos     /* VEX_W_0F5B_P_1  */
   9279      1.1  christos     { "vcvttps2dq",	{ XM, EXx } },
   9280      1.1  christos   },
   9281      1.1  christos   {
   9282      1.1  christos     /* VEX_W_0F5B_P_2  */
   9283      1.1  christos     { "vcvtps2dq",	{ XM, EXx } },
   9284      1.1  christos   },
   9285      1.1  christos   {
   9286      1.1  christos     /* VEX_W_0F5C_P_0  */
   9287      1.1  christos     { "vsubps",		{ XM, Vex, EXx } },
   9288      1.1  christos   },
   9289      1.1  christos   {
   9290      1.1  christos     /* VEX_W_0F5C_P_1  */
   9291      1.1  christos     { "vsubss",		{ XMScalar, VexScalar, EXdScalar } },
   9292      1.1  christos   },
   9293      1.1  christos   {
   9294      1.1  christos     /* VEX_W_0F5C_P_2  */
   9295      1.1  christos     { "vsubpd",		{ XM, Vex, EXx } },
   9296      1.1  christos   },
   9297      1.1  christos   {
   9298      1.1  christos     /* VEX_W_0F5C_P_3  */
   9299      1.1  christos     { "vsubsd",		{ XMScalar, VexScalar, EXqScalar } },
   9300      1.1  christos   },
   9301      1.1  christos   {
   9302      1.1  christos     /* VEX_W_0F5D_P_0  */
   9303      1.1  christos     { "vminps",		{ XM, Vex, EXx } },
   9304      1.1  christos   },
   9305      1.1  christos   {
   9306      1.1  christos     /* VEX_W_0F5D_P_1  */
   9307      1.1  christos     { "vminss",		{ XMScalar, VexScalar, EXdScalar } },
   9308      1.1  christos   },
   9309      1.1  christos   {
   9310      1.1  christos     /* VEX_W_0F5D_P_2  */
   9311      1.1  christos     { "vminpd",		{ XM, Vex, EXx } },
   9312      1.1  christos   },
   9313      1.1  christos   {
   9314      1.1  christos     /* VEX_W_0F5D_P_3  */
   9315      1.1  christos     { "vminsd",		{ XMScalar, VexScalar, EXqScalar } },
   9316      1.1  christos   },
   9317      1.1  christos   {
   9318      1.1  christos     /* VEX_W_0F5E_P_0  */
   9319      1.1  christos     { "vdivps",		{ XM, Vex, EXx } },
   9320      1.1  christos   },
   9321      1.1  christos   {
   9322      1.1  christos     /* VEX_W_0F5E_P_1  */
   9323      1.1  christos     { "vdivss",		{ XMScalar, VexScalar, EXdScalar } },
   9324      1.1  christos   },
   9325      1.1  christos   {
   9326      1.1  christos     /* VEX_W_0F5E_P_2  */
   9327      1.1  christos     { "vdivpd",		{ XM, Vex, EXx } },
   9328      1.1  christos   },
   9329      1.1  christos   {
   9330      1.1  christos     /* VEX_W_0F5E_P_3  */
   9331      1.1  christos     { "vdivsd",		{ XMScalar, VexScalar, EXqScalar } },
   9332      1.1  christos   },
   9333      1.1  christos   {
   9334      1.1  christos     /* VEX_W_0F5F_P_0  */
   9335      1.1  christos     { "vmaxps",		{ XM, Vex, EXx } },
   9336      1.1  christos   },
   9337      1.1  christos   {
   9338      1.1  christos     /* VEX_W_0F5F_P_1  */
   9339      1.1  christos     { "vmaxss",		{ XMScalar, VexScalar, EXdScalar } },
   9340      1.1  christos   },
   9341      1.1  christos   {
   9342      1.1  christos     /* VEX_W_0F5F_P_2  */
   9343      1.1  christos     { "vmaxpd",		{ XM, Vex, EXx } },
   9344      1.1  christos   },
   9345      1.1  christos   {
   9346      1.1  christos     /* VEX_W_0F5F_P_3  */
   9347      1.1  christos     { "vmaxsd",		{ XMScalar, VexScalar, EXqScalar } },
   9348      1.1  christos   },
   9349      1.1  christos   {
   9350      1.1  christos     /* VEX_W_0F60_P_2  */
   9351  1.1.1.2  christos     { "vpunpcklbw",	{ XM, Vex, EXx } },
   9352      1.1  christos   },
   9353      1.1  christos   {
   9354      1.1  christos     /* VEX_W_0F61_P_2  */
   9355  1.1.1.2  christos     { "vpunpcklwd",	{ XM, Vex, EXx } },
   9356      1.1  christos   },
   9357      1.1  christos   {
   9358      1.1  christos     /* VEX_W_0F62_P_2  */
   9359  1.1.1.2  christos     { "vpunpckldq",	{ XM, Vex, EXx } },
   9360      1.1  christos   },
   9361      1.1  christos   {
   9362      1.1  christos     /* VEX_W_0F63_P_2  */
   9363  1.1.1.2  christos     { "vpacksswb",	{ XM, Vex, EXx } },
   9364      1.1  christos   },
   9365      1.1  christos   {
   9366      1.1  christos     /* VEX_W_0F64_P_2  */
   9367  1.1.1.2  christos     { "vpcmpgtb",	{ XM, Vex, EXx } },
   9368      1.1  christos   },
   9369      1.1  christos   {
   9370      1.1  christos     /* VEX_W_0F65_P_2  */
   9371  1.1.1.2  christos     { "vpcmpgtw",	{ XM, Vex, EXx } },
   9372      1.1  christos   },
   9373      1.1  christos   {
   9374      1.1  christos     /* VEX_W_0F66_P_2  */
   9375  1.1.1.2  christos     { "vpcmpgtd",	{ XM, Vex, EXx } },
   9376      1.1  christos   },
   9377      1.1  christos   {
   9378      1.1  christos     /* VEX_W_0F67_P_2  */
   9379  1.1.1.2  christos     { "vpackuswb",	{ XM, Vex, EXx } },
   9380      1.1  christos   },
   9381      1.1  christos   {
   9382      1.1  christos     /* VEX_W_0F68_P_2  */
   9383  1.1.1.2  christos     { "vpunpckhbw",	{ XM, Vex, EXx } },
   9384      1.1  christos   },
   9385      1.1  christos   {
   9386      1.1  christos     /* VEX_W_0F69_P_2  */
   9387  1.1.1.2  christos     { "vpunpckhwd",	{ XM, Vex, EXx } },
   9388      1.1  christos   },
   9389      1.1  christos   {
   9390      1.1  christos     /* VEX_W_0F6A_P_2  */
   9391  1.1.1.2  christos     { "vpunpckhdq",	{ XM, Vex, EXx } },
   9392      1.1  christos   },
   9393      1.1  christos   {
   9394      1.1  christos     /* VEX_W_0F6B_P_2  */
   9395  1.1.1.2  christos     { "vpackssdw",	{ XM, Vex, EXx } },
   9396      1.1  christos   },
   9397      1.1  christos   {
   9398      1.1  christos     /* VEX_W_0F6C_P_2  */
   9399  1.1.1.2  christos     { "vpunpcklqdq",	{ XM, Vex, EXx } },
   9400      1.1  christos   },
   9401      1.1  christos   {
   9402      1.1  christos     /* VEX_W_0F6D_P_2  */
   9403  1.1.1.2  christos     { "vpunpckhqdq",	{ XM, Vex, EXx } },
   9404      1.1  christos   },
   9405      1.1  christos   {
   9406      1.1  christos     /* VEX_W_0F6F_P_1  */
   9407      1.1  christos     { "vmovdqu",	{ XM, EXx } },
   9408      1.1  christos   },
   9409      1.1  christos   {
   9410      1.1  christos     /* VEX_W_0F6F_P_2  */
   9411      1.1  christos     { "vmovdqa",	{ XM, EXx } },
   9412      1.1  christos   },
   9413      1.1  christos   {
   9414      1.1  christos     /* VEX_W_0F70_P_1 */
   9415      1.1  christos     { "vpshufhw",	{ XM, EXx, Ib } },
   9416      1.1  christos   },
   9417      1.1  christos   {
   9418      1.1  christos     /* VEX_W_0F70_P_2 */
   9419      1.1  christos     { "vpshufd",	{ XM, EXx, Ib } },
   9420      1.1  christos   },
   9421      1.1  christos   {
   9422      1.1  christos     /* VEX_W_0F70_P_3 */
   9423      1.1  christos     { "vpshuflw",	{ XM, EXx, Ib } },
   9424      1.1  christos   },
   9425      1.1  christos   {
   9426      1.1  christos     /* VEX_W_0F71_R_2_P_2  */
   9427  1.1.1.2  christos     { "vpsrlw",		{ Vex, XS, Ib } },
   9428      1.1  christos   },
   9429      1.1  christos   {
   9430      1.1  christos     /* VEX_W_0F71_R_4_P_2  */
   9431  1.1.1.2  christos     { "vpsraw",		{ Vex, XS, Ib } },
   9432      1.1  christos   },
   9433      1.1  christos   {
   9434      1.1  christos     /* VEX_W_0F71_R_6_P_2  */
   9435  1.1.1.2  christos     { "vpsllw",		{ Vex, XS, Ib } },
   9436      1.1  christos   },
   9437      1.1  christos   {
   9438      1.1  christos     /* VEX_W_0F72_R_2_P_2  */
   9439  1.1.1.2  christos     { "vpsrld",		{ Vex, XS, Ib } },
   9440      1.1  christos   },
   9441      1.1  christos   {
   9442      1.1  christos     /* VEX_W_0F72_R_4_P_2  */
   9443  1.1.1.2  christos     { "vpsrad",		{ Vex, XS, Ib } },
   9444      1.1  christos   },
   9445      1.1  christos   {
   9446      1.1  christos     /* VEX_W_0F72_R_6_P_2  */
   9447  1.1.1.2  christos     { "vpslld",		{ Vex, XS, Ib } },
   9448      1.1  christos   },
   9449      1.1  christos   {
   9450      1.1  christos     /* VEX_W_0F73_R_2_P_2  */
   9451  1.1.1.2  christos     { "vpsrlq",		{ Vex, XS, Ib } },
   9452      1.1  christos   },
   9453      1.1  christos   {
   9454      1.1  christos     /* VEX_W_0F73_R_3_P_2  */
   9455  1.1.1.2  christos     { "vpsrldq",	{ Vex, XS, Ib } },
   9456      1.1  christos   },
   9457      1.1  christos   {
   9458      1.1  christos     /* VEX_W_0F73_R_6_P_2  */
   9459  1.1.1.2  christos     { "vpsllq",		{ Vex, XS, Ib } },
   9460      1.1  christos   },
   9461      1.1  christos   {
   9462      1.1  christos     /* VEX_W_0F73_R_7_P_2  */
   9463  1.1.1.2  christos     { "vpslldq",	{ Vex, XS, Ib } },
   9464      1.1  christos   },
   9465      1.1  christos   {
   9466      1.1  christos     /* VEX_W_0F74_P_2 */
   9467  1.1.1.2  christos     { "vpcmpeqb",	{ XM, Vex, EXx } },
   9468      1.1  christos   },
   9469      1.1  christos   {
   9470      1.1  christos     /* VEX_W_0F75_P_2 */
   9471  1.1.1.2  christos     { "vpcmpeqw",	{ XM, Vex, EXx } },
   9472      1.1  christos   },
   9473      1.1  christos   {
   9474      1.1  christos     /* VEX_W_0F76_P_2 */
   9475  1.1.1.2  christos     { "vpcmpeqd",	{ XM, Vex, EXx } },
   9476      1.1  christos   },
   9477      1.1  christos   {
   9478      1.1  christos     /* VEX_W_0F77_P_0 */
   9479      1.1  christos     { "",		{ VZERO } },
   9480      1.1  christos   },
   9481      1.1  christos   {
   9482      1.1  christos     /* VEX_W_0F7C_P_2 */
   9483      1.1  christos     { "vhaddpd",	{ XM, Vex, EXx } },
   9484      1.1  christos   },
   9485      1.1  christos   {
   9486      1.1  christos     /* VEX_W_0F7C_P_3 */
   9487      1.1  christos     { "vhaddps",	{ XM, Vex, EXx } },
   9488      1.1  christos   },
   9489      1.1  christos   {
   9490      1.1  christos     /* VEX_W_0F7D_P_2 */
   9491      1.1  christos     { "vhsubpd",	{ XM, Vex, EXx } },
   9492      1.1  christos   },
   9493      1.1  christos   {
   9494      1.1  christos     /* VEX_W_0F7D_P_3 */
   9495      1.1  christos     { "vhsubps",	{ XM, Vex, EXx } },
   9496      1.1  christos   },
   9497      1.1  christos   {
   9498      1.1  christos     /* VEX_W_0F7E_P_1 */
   9499      1.1  christos     { "vmovq",		{ XMScalar, EXqScalar } },
   9500      1.1  christos   },
   9501      1.1  christos   {
   9502      1.1  christos     /* VEX_W_0F7F_P_1 */
   9503      1.1  christos     { "vmovdqu",	{ EXxS, XM } },
   9504      1.1  christos   },
   9505      1.1  christos   {
   9506      1.1  christos     /* VEX_W_0F7F_P_2 */
   9507      1.1  christos     { "vmovdqa",	{ EXxS, XM } },
   9508      1.1  christos   },
   9509      1.1  christos   {
   9510      1.1  christos     /* VEX_W_0FAE_R_2_M_0 */
   9511      1.1  christos     { "vldmxcsr",	{ Md } },
   9512      1.1  christos   },
   9513      1.1  christos   {
   9514      1.1  christos     /* VEX_W_0FAE_R_3_M_0 */
   9515      1.1  christos     { "vstmxcsr",	{ Md } },
   9516      1.1  christos   },
   9517      1.1  christos   {
   9518      1.1  christos     /* VEX_W_0FC2_P_0 */
   9519      1.1  christos     { "vcmpps",		{ XM, Vex, EXx, VCMP } },
   9520      1.1  christos   },
   9521      1.1  christos   {
   9522      1.1  christos     /* VEX_W_0FC2_P_1 */
   9523      1.1  christos     { "vcmpss",		{ XMScalar, VexScalar, EXdScalar, VCMP } },
   9524      1.1  christos   },
   9525      1.1  christos   {
   9526      1.1  christos     /* VEX_W_0FC2_P_2 */
   9527      1.1  christos     { "vcmppd",		{ XM, Vex, EXx, VCMP } },
   9528      1.1  christos   },
   9529      1.1  christos   {
   9530      1.1  christos     /* VEX_W_0FC2_P_3 */
   9531      1.1  christos     { "vcmpsd",		{ XMScalar, VexScalar, EXqScalar, VCMP } },
   9532      1.1  christos   },
   9533      1.1  christos   {
   9534      1.1  christos     /* VEX_W_0FC4_P_2 */
   9535      1.1  christos     { "vpinsrw",	{ XM, Vex128, Edqw, Ib } },
   9536      1.1  christos   },
   9537      1.1  christos   {
   9538      1.1  christos     /* VEX_W_0FC5_P_2 */
   9539      1.1  christos     { "vpextrw",	{ Gdq, XS, Ib } },
   9540      1.1  christos   },
   9541      1.1  christos   {
   9542      1.1  christos     /* VEX_W_0FD0_P_2 */
   9543      1.1  christos     { "vaddsubpd",	{ XM, Vex, EXx } },
   9544      1.1  christos   },
   9545      1.1  christos   {
   9546      1.1  christos     /* VEX_W_0FD0_P_3 */
   9547      1.1  christos     { "vaddsubps",	{ XM, Vex, EXx } },
   9548      1.1  christos   },
   9549      1.1  christos   {
   9550      1.1  christos     /* VEX_W_0FD1_P_2 */
   9551  1.1.1.2  christos     { "vpsrlw",		{ XM, Vex, EXxmm } },
   9552      1.1  christos   },
   9553      1.1  christos   {
   9554      1.1  christos     /* VEX_W_0FD2_P_2 */
   9555  1.1.1.2  christos     { "vpsrld",		{ XM, Vex, EXxmm } },
   9556      1.1  christos   },
   9557      1.1  christos   {
   9558      1.1  christos     /* VEX_W_0FD3_P_2 */
   9559  1.1.1.2  christos     { "vpsrlq",		{ XM, Vex, EXxmm } },
   9560      1.1  christos   },
   9561      1.1  christos   {
   9562      1.1  christos     /* VEX_W_0FD4_P_2 */
   9563  1.1.1.2  christos     { "vpaddq",		{ XM, Vex, EXx } },
   9564      1.1  christos   },
   9565      1.1  christos   {
   9566      1.1  christos     /* VEX_W_0FD5_P_2 */
   9567  1.1.1.2  christos     { "vpmullw",	{ XM, Vex, EXx } },
   9568      1.1  christos   },
   9569      1.1  christos   {
   9570      1.1  christos     /* VEX_W_0FD6_P_2 */
   9571      1.1  christos     { "vmovq",		{ EXqScalarS, XMScalar } },
   9572      1.1  christos   },
   9573      1.1  christos   {
   9574      1.1  christos     /* VEX_W_0FD7_P_2_M_1 */
   9575      1.1  christos     { "vpmovmskb",	{ Gdq, XS } },
   9576      1.1  christos   },
   9577      1.1  christos   {
   9578      1.1  christos     /* VEX_W_0FD8_P_2 */
   9579  1.1.1.2  christos     { "vpsubusb",	{ XM, Vex, EXx } },
   9580      1.1  christos   },
   9581      1.1  christos   {
   9582      1.1  christos     /* VEX_W_0FD9_P_2 */
   9583  1.1.1.2  christos     { "vpsubusw",	{ XM, Vex, EXx } },
   9584      1.1  christos   },
   9585      1.1  christos   {
   9586      1.1  christos     /* VEX_W_0FDA_P_2 */
   9587  1.1.1.2  christos     { "vpminub",	{ XM, Vex, EXx } },
   9588      1.1  christos   },
   9589      1.1  christos   {
   9590      1.1  christos     /* VEX_W_0FDB_P_2 */
   9591  1.1.1.2  christos     { "vpand",		{ XM, Vex, EXx } },
   9592      1.1  christos   },
   9593      1.1  christos   {
   9594      1.1  christos     /* VEX_W_0FDC_P_2 */
   9595  1.1.1.2  christos     { "vpaddusb",	{ XM, Vex, EXx } },
   9596      1.1  christos   },
   9597      1.1  christos   {
   9598      1.1  christos     /* VEX_W_0FDD_P_2 */
   9599  1.1.1.2  christos     { "vpaddusw",	{ XM, Vex, EXx } },
   9600      1.1  christos   },
   9601      1.1  christos   {
   9602      1.1  christos     /* VEX_W_0FDE_P_2 */
   9603  1.1.1.2  christos     { "vpmaxub",	{ XM, Vex, EXx } },
   9604      1.1  christos   },
   9605      1.1  christos   {
   9606      1.1  christos     /* VEX_W_0FDF_P_2 */
   9607  1.1.1.2  christos     { "vpandn",		{ XM, Vex, EXx } },
   9608      1.1  christos   },
   9609      1.1  christos   {
   9610      1.1  christos     /* VEX_W_0FE0_P_2  */
   9611  1.1.1.2  christos     { "vpavgb",		{ XM, Vex, EXx } },
   9612      1.1  christos   },
   9613      1.1  christos   {
   9614      1.1  christos     /* VEX_W_0FE1_P_2  */
   9615  1.1.1.2  christos     { "vpsraw",		{ XM, Vex, EXxmm } },
   9616      1.1  christos   },
   9617      1.1  christos   {
   9618      1.1  christos     /* VEX_W_0FE2_P_2  */
   9619  1.1.1.2  christos     { "vpsrad",		{ XM, Vex, EXxmm } },
   9620      1.1  christos   },
   9621      1.1  christos   {
   9622      1.1  christos     /* VEX_W_0FE3_P_2  */
   9623  1.1.1.2  christos     { "vpavgw",		{ XM, Vex, EXx } },
   9624      1.1  christos   },
   9625      1.1  christos   {
   9626      1.1  christos     /* VEX_W_0FE4_P_2  */
   9627  1.1.1.2  christos     { "vpmulhuw",	{ XM, Vex, EXx } },
   9628      1.1  christos   },
   9629      1.1  christos   {
   9630      1.1  christos     /* VEX_W_0FE5_P_2  */
   9631  1.1.1.2  christos     { "vpmulhw",	{ XM, Vex, EXx } },
   9632      1.1  christos   },
   9633      1.1  christos   {
   9634      1.1  christos     /* VEX_W_0FE6_P_1  */
   9635      1.1  christos     { "vcvtdq2pd",	{ XM, EXxmmq } },
   9636      1.1  christos   },
   9637      1.1  christos   {
   9638      1.1  christos     /* VEX_W_0FE6_P_2  */
   9639      1.1  christos     { "vcvttpd2dq%XY",	{ XMM, EXx } },
   9640      1.1  christos   },
   9641      1.1  christos   {
   9642      1.1  christos     /* VEX_W_0FE6_P_3  */
   9643      1.1  christos     { "vcvtpd2dq%XY",	{ XMM, EXx } },
   9644      1.1  christos   },
   9645      1.1  christos   {
   9646      1.1  christos     /* VEX_W_0FE7_P_2_M_0 */
   9647      1.1  christos     { "vmovntdq",	{ Mx, XM } },
   9648      1.1  christos   },
   9649      1.1  christos   {
   9650      1.1  christos     /* VEX_W_0FE8_P_2  */
   9651  1.1.1.2  christos     { "vpsubsb",	{ XM, Vex, EXx } },
   9652      1.1  christos   },
   9653      1.1  christos   {
   9654      1.1  christos     /* VEX_W_0FE9_P_2  */
   9655  1.1.1.2  christos     { "vpsubsw",	{ XM, Vex, EXx } },
   9656      1.1  christos   },
   9657      1.1  christos   {
   9658      1.1  christos     /* VEX_W_0FEA_P_2  */
   9659  1.1.1.2  christos     { "vpminsw",	{ XM, Vex, EXx } },
   9660      1.1  christos   },
   9661      1.1  christos   {
   9662      1.1  christos     /* VEX_W_0FEB_P_2  */
   9663  1.1.1.2  christos     { "vpor",		{ XM, Vex, EXx } },
   9664      1.1  christos   },
   9665      1.1  christos   {
   9666      1.1  christos     /* VEX_W_0FEC_P_2  */
   9667  1.1.1.2  christos     { "vpaddsb",	{ XM, Vex, EXx } },
   9668      1.1  christos   },
   9669      1.1  christos   {
   9670      1.1  christos     /* VEX_W_0FED_P_2  */
   9671  1.1.1.2  christos     { "vpaddsw",	{ XM, Vex, EXx } },
   9672      1.1  christos   },
   9673      1.1  christos   {
   9674      1.1  christos     /* VEX_W_0FEE_P_2  */
   9675  1.1.1.2  christos     { "vpmaxsw",	{ XM, Vex, EXx } },
   9676      1.1  christos   },
   9677      1.1  christos   {
   9678      1.1  christos     /* VEX_W_0FEF_P_2  */
   9679  1.1.1.2  christos     { "vpxor",		{ XM, Vex, EXx } },
   9680      1.1  christos   },
   9681      1.1  christos   {
   9682      1.1  christos     /* VEX_W_0FF0_P_3_M_0 */
   9683      1.1  christos     { "vlddqu",		{ XM, M } },
   9684      1.1  christos   },
   9685      1.1  christos   {
   9686      1.1  christos     /* VEX_W_0FF1_P_2 */
   9687  1.1.1.2  christos     { "vpsllw",		{ XM, Vex, EXxmm } },
   9688      1.1  christos   },
   9689      1.1  christos   {
   9690      1.1  christos     /* VEX_W_0FF2_P_2 */
   9691  1.1.1.2  christos     { "vpslld",		{ XM, Vex, EXxmm } },
   9692      1.1  christos   },
   9693      1.1  christos   {
   9694      1.1  christos     /* VEX_W_0FF3_P_2 */
   9695  1.1.1.2  christos     { "vpsllq",		{ XM, Vex, EXxmm } },
   9696      1.1  christos   },
   9697      1.1  christos   {
   9698      1.1  christos     /* VEX_W_0FF4_P_2 */
   9699  1.1.1.2  christos     { "vpmuludq",	{ XM, Vex, EXx } },
   9700      1.1  christos   },
   9701      1.1  christos   {
   9702      1.1  christos     /* VEX_W_0FF5_P_2 */
   9703  1.1.1.2  christos     { "vpmaddwd",	{ XM, Vex, EXx } },
   9704      1.1  christos   },
   9705      1.1  christos   {
   9706      1.1  christos     /* VEX_W_0FF6_P_2 */
   9707  1.1.1.2  christos     { "vpsadbw",	{ XM, Vex, EXx } },
   9708      1.1  christos   },
   9709      1.1  christos   {
   9710      1.1  christos     /* VEX_W_0FF7_P_2 */
   9711      1.1  christos     { "vmaskmovdqu",	{ XM, XS } },
   9712      1.1  christos   },
   9713      1.1  christos   {
   9714      1.1  christos     /* VEX_W_0FF8_P_2 */
   9715  1.1.1.2  christos     { "vpsubb",		{ XM, Vex, EXx } },
   9716      1.1  christos   },
   9717      1.1  christos   {
   9718      1.1  christos     /* VEX_W_0FF9_P_2 */
   9719  1.1.1.2  christos     { "vpsubw",		{ XM, Vex, EXx } },
   9720      1.1  christos   },
   9721      1.1  christos   {
   9722      1.1  christos     /* VEX_W_0FFA_P_2 */
   9723  1.1.1.2  christos     { "vpsubd",		{ XM, Vex, EXx } },
   9724      1.1  christos   },
   9725      1.1  christos   {
   9726      1.1  christos     /* VEX_W_0FFB_P_2 */
   9727  1.1.1.2  christos     { "vpsubq",		{ XM, Vex, EXx } },
   9728      1.1  christos   },
   9729      1.1  christos   {
   9730      1.1  christos     /* VEX_W_0FFC_P_2 */
   9731  1.1.1.2  christos     { "vpaddb",		{ XM, Vex, EXx } },
   9732      1.1  christos   },
   9733      1.1  christos   {
   9734      1.1  christos     /* VEX_W_0FFD_P_2 */
   9735  1.1.1.2  christos     { "vpaddw",		{ XM, Vex, EXx } },
   9736      1.1  christos   },
   9737      1.1  christos   {
   9738      1.1  christos     /* VEX_W_0FFE_P_2 */
   9739  1.1.1.2  christos     { "vpaddd",		{ XM, Vex, EXx } },
   9740      1.1  christos   },
   9741      1.1  christos   {
   9742      1.1  christos     /* VEX_W_0F3800_P_2  */
   9743  1.1.1.2  christos     { "vpshufb",	{ XM, Vex, EXx } },
   9744      1.1  christos   },
   9745      1.1  christos   {
   9746      1.1  christos     /* VEX_W_0F3801_P_2  */
   9747  1.1.1.2  christos     { "vphaddw",	{ XM, Vex, EXx } },
   9748      1.1  christos   },
   9749      1.1  christos   {
   9750      1.1  christos     /* VEX_W_0F3802_P_2  */
   9751  1.1.1.2  christos     { "vphaddd",	{ XM, Vex, EXx } },
   9752      1.1  christos   },
   9753      1.1  christos   {
   9754      1.1  christos     /* VEX_W_0F3803_P_2  */
   9755  1.1.1.2  christos     { "vphaddsw",	{ XM, Vex, EXx } },
   9756      1.1  christos   },
   9757      1.1  christos   {
   9758      1.1  christos     /* VEX_W_0F3804_P_2  */
   9759  1.1.1.2  christos     { "vpmaddubsw",	{ XM, Vex, EXx } },
   9760      1.1  christos   },
   9761      1.1  christos   {
   9762      1.1  christos     /* VEX_W_0F3805_P_2  */
   9763  1.1.1.2  christos     { "vphsubw",	{ XM, Vex, EXx } },
   9764      1.1  christos   },
   9765      1.1  christos   {
   9766      1.1  christos     /* VEX_W_0F3806_P_2  */
   9767  1.1.1.2  christos     { "vphsubd",	{ XM, Vex, EXx } },
   9768      1.1  christos   },
   9769      1.1  christos   {
   9770      1.1  christos     /* VEX_W_0F3807_P_2  */
   9771  1.1.1.2  christos     { "vphsubsw",	{ XM, Vex, EXx } },
   9772      1.1  christos   },
   9773      1.1  christos   {
   9774      1.1  christos     /* VEX_W_0F3808_P_2  */
   9775  1.1.1.2  christos     { "vpsignb",	{ XM, Vex, EXx } },
   9776      1.1  christos   },
   9777      1.1  christos   {
   9778      1.1  christos     /* VEX_W_0F3809_P_2  */
   9779  1.1.1.2  christos     { "vpsignw",	{ XM, Vex, EXx } },
   9780      1.1  christos   },
   9781      1.1  christos   {
   9782      1.1  christos     /* VEX_W_0F380A_P_2  */
   9783  1.1.1.2  christos     { "vpsignd",	{ XM, Vex, EXx } },
   9784      1.1  christos   },
   9785      1.1  christos   {
   9786      1.1  christos     /* VEX_W_0F380B_P_2  */
   9787  1.1.1.2  christos     { "vpmulhrsw",	{ XM, Vex, EXx } },
   9788      1.1  christos   },
   9789      1.1  christos   {
   9790      1.1  christos     /* VEX_W_0F380C_P_2  */
   9791      1.1  christos     { "vpermilps",	{ XM, Vex, EXx } },
   9792      1.1  christos   },
   9793      1.1  christos   {
   9794      1.1  christos     /* VEX_W_0F380D_P_2  */
   9795      1.1  christos     { "vpermilpd",	{ XM, Vex, EXx } },
   9796      1.1  christos   },
   9797      1.1  christos   {
   9798      1.1  christos     /* VEX_W_0F380E_P_2  */
   9799      1.1  christos     { "vtestps",	{ XM, EXx } },
   9800      1.1  christos   },
   9801      1.1  christos   {
   9802      1.1  christos     /* VEX_W_0F380F_P_2  */
   9803      1.1  christos     { "vtestpd",	{ XM, EXx } },
   9804      1.1  christos   },
   9805      1.1  christos   {
   9806  1.1.1.2  christos     /* VEX_W_0F3816_P_2  */
   9807  1.1.1.2  christos     { "vpermps",	{ XM, Vex, EXx } },
   9808  1.1.1.2  christos   },
   9809  1.1.1.2  christos   {
   9810      1.1  christos     /* VEX_W_0F3817_P_2 */
   9811      1.1  christos     { "vptest",		{ XM, EXx } },
   9812      1.1  christos   },
   9813      1.1  christos   {
   9814  1.1.1.2  christos     /* VEX_W_0F3818_P_2 */
   9815  1.1.1.2  christos     { "vbroadcastss",	{ XM, EXxmm_md } },
   9816      1.1  christos   },
   9817      1.1  christos   {
   9818  1.1.1.2  christos     /* VEX_W_0F3819_P_2 */
   9819  1.1.1.2  christos     { "vbroadcastsd",	{ XM, EXxmm_mq } },
   9820      1.1  christos   },
   9821      1.1  christos   {
   9822      1.1  christos     /* VEX_W_0F381A_P_2_M_0 */
   9823      1.1  christos     { "vbroadcastf128",	{ XM, Mxmm } },
   9824      1.1  christos   },
   9825      1.1  christos   {
   9826      1.1  christos     /* VEX_W_0F381C_P_2 */
   9827      1.1  christos     { "vpabsb",		{ XM, EXx } },
   9828      1.1  christos   },
   9829      1.1  christos   {
   9830      1.1  christos     /* VEX_W_0F381D_P_2 */
   9831      1.1  christos     { "vpabsw",		{ XM, EXx } },
   9832      1.1  christos   },
   9833      1.1  christos   {
   9834      1.1  christos     /* VEX_W_0F381E_P_2 */
   9835      1.1  christos     { "vpabsd",		{ XM, EXx } },
   9836      1.1  christos   },
   9837      1.1  christos   {
   9838      1.1  christos     /* VEX_W_0F3820_P_2 */
   9839  1.1.1.2  christos     { "vpmovsxbw",	{ XM, EXxmmq } },
   9840      1.1  christos   },
   9841      1.1  christos   {
   9842      1.1  christos     /* VEX_W_0F3821_P_2 */
   9843  1.1.1.2  christos     { "vpmovsxbd",	{ XM, EXxmmqd } },
   9844      1.1  christos   },
   9845      1.1  christos   {
   9846      1.1  christos     /* VEX_W_0F3822_P_2 */
   9847  1.1.1.2  christos     { "vpmovsxbq",	{ XM, EXxmmdw } },
   9848      1.1  christos   },
   9849      1.1  christos   {
   9850      1.1  christos     /* VEX_W_0F3823_P_2 */
   9851  1.1.1.2  christos     { "vpmovsxwd",	{ XM, EXxmmq } },
   9852      1.1  christos   },
   9853      1.1  christos   {
   9854      1.1  christos     /* VEX_W_0F3824_P_2 */
   9855  1.1.1.2  christos     { "vpmovsxwq",	{ XM, EXxmmqd } },
   9856      1.1  christos   },
   9857      1.1  christos   {
   9858      1.1  christos     /* VEX_W_0F3825_P_2 */
   9859  1.1.1.2  christos     { "vpmovsxdq",	{ XM, EXxmmq } },
   9860      1.1  christos   },
   9861      1.1  christos   {
   9862      1.1  christos     /* VEX_W_0F3828_P_2 */
   9863  1.1.1.2  christos     { "vpmuldq",	{ XM, Vex, EXx } },
   9864      1.1  christos   },
   9865      1.1  christos   {
   9866      1.1  christos     /* VEX_W_0F3829_P_2 */
   9867  1.1.1.2  christos     { "vpcmpeqq",	{ XM, Vex, EXx } },
   9868      1.1  christos   },
   9869      1.1  christos   {
   9870      1.1  christos     /* VEX_W_0F382A_P_2_M_0 */
   9871      1.1  christos     { "vmovntdqa",	{ XM, Mx } },
   9872      1.1  christos   },
   9873      1.1  christos   {
   9874      1.1  christos     /* VEX_W_0F382B_P_2 */
   9875  1.1.1.2  christos     { "vpackusdw",	{ XM, Vex, EXx } },
   9876      1.1  christos   },
   9877      1.1  christos   {
   9878      1.1  christos     /* VEX_W_0F382C_P_2_M_0 */
   9879      1.1  christos     { "vmaskmovps",	{ XM, Vex, Mx } },
   9880      1.1  christos   },
   9881      1.1  christos   {
   9882      1.1  christos     /* VEX_W_0F382D_P_2_M_0 */
   9883      1.1  christos     { "vmaskmovpd",	{ XM, Vex, Mx } },
   9884      1.1  christos   },
   9885      1.1  christos   {
   9886      1.1  christos     /* VEX_W_0F382E_P_2_M_0 */
   9887      1.1  christos     { "vmaskmovps",	{ Mx, Vex, XM } },
   9888      1.1  christos   },
   9889      1.1  christos   {
   9890      1.1  christos     /* VEX_W_0F382F_P_2_M_0 */
   9891      1.1  christos     { "vmaskmovpd",	{ Mx, Vex, XM } },
   9892      1.1  christos   },
   9893      1.1  christos   {
   9894      1.1  christos     /* VEX_W_0F3830_P_2 */
   9895  1.1.1.2  christos     { "vpmovzxbw",	{ XM, EXxmmq } },
   9896      1.1  christos   },
   9897      1.1  christos   {
   9898      1.1  christos     /* VEX_W_0F3831_P_2 */
   9899  1.1.1.2  christos     { "vpmovzxbd",	{ XM, EXxmmqd } },
   9900      1.1  christos   },
   9901      1.1  christos   {
   9902      1.1  christos     /* VEX_W_0F3832_P_2 */
   9903  1.1.1.2  christos     { "vpmovzxbq",	{ XM, EXxmmdw } },
   9904      1.1  christos   },
   9905      1.1  christos   {
   9906      1.1  christos     /* VEX_W_0F3833_P_2 */
   9907  1.1.1.2  christos     { "vpmovzxwd",	{ XM, EXxmmq } },
   9908      1.1  christos   },
   9909      1.1  christos   {
   9910      1.1  christos     /* VEX_W_0F3834_P_2 */
   9911  1.1.1.2  christos     { "vpmovzxwq",	{ XM, EXxmmqd } },
   9912      1.1  christos   },
   9913      1.1  christos   {
   9914      1.1  christos     /* VEX_W_0F3835_P_2 */
   9915  1.1.1.2  christos     { "vpmovzxdq",	{ XM, EXxmmq } },
   9916  1.1.1.2  christos   },
   9917  1.1.1.2  christos   {
   9918  1.1.1.2  christos     /* VEX_W_0F3836_P_2  */
   9919  1.1.1.2  christos     { "vpermd",		{ XM, Vex, EXx } },
   9920      1.1  christos   },
   9921      1.1  christos   {
   9922      1.1  christos     /* VEX_W_0F3837_P_2 */
   9923  1.1.1.2  christos     { "vpcmpgtq",	{ XM, Vex, EXx } },
   9924      1.1  christos   },
   9925      1.1  christos   {
   9926      1.1  christos     /* VEX_W_0F3838_P_2 */
   9927  1.1.1.2  christos     { "vpminsb",	{ XM, Vex, EXx } },
   9928      1.1  christos   },
   9929      1.1  christos   {
   9930      1.1  christos     /* VEX_W_0F3839_P_2 */
   9931  1.1.1.2  christos     { "vpminsd",	{ XM, Vex, EXx } },
   9932      1.1  christos   },
   9933      1.1  christos   {
   9934      1.1  christos     /* VEX_W_0F383A_P_2 */
   9935  1.1.1.2  christos     { "vpminuw",	{ XM, Vex, EXx } },
   9936  1.1.1.2  christos   },
   9937  1.1.1.2  christos   {
   9938  1.1.1.2  christos     /* VEX_W_0F383B_P_2 */
   9939  1.1.1.2  christos     { "vpminud",	{ XM, Vex, EXx } },
   9940  1.1.1.2  christos   },
   9941  1.1.1.2  christos   {
   9942  1.1.1.2  christos     /* VEX_W_0F383C_P_2 */
   9943  1.1.1.2  christos     { "vpmaxsb",	{ XM, Vex, EXx } },
   9944  1.1.1.2  christos   },
   9945  1.1.1.2  christos   {
   9946  1.1.1.2  christos     /* VEX_W_0F383D_P_2 */
   9947  1.1.1.2  christos     { "vpmaxsd",	{ XM, Vex, EXx } },
   9948  1.1.1.2  christos   },
   9949  1.1.1.2  christos   {
   9950  1.1.1.2  christos     /* VEX_W_0F383E_P_2 */
   9951  1.1.1.2  christos     { "vpmaxuw",	{ XM, Vex, EXx } },
   9952  1.1.1.2  christos   },
   9953  1.1.1.2  christos   {
   9954  1.1.1.2  christos     /* VEX_W_0F383F_P_2 */
   9955  1.1.1.2  christos     { "vpmaxud",	{ XM, Vex, EXx } },
   9956  1.1.1.2  christos   },
   9957  1.1.1.2  christos   {
   9958  1.1.1.2  christos     /* VEX_W_0F3840_P_2 */
   9959  1.1.1.2  christos     { "vpmulld",	{ XM, Vex, EXx } },
   9960      1.1  christos   },
   9961      1.1  christos   {
   9962  1.1.1.2  christos     /* VEX_W_0F3841_P_2 */
   9963  1.1.1.2  christos     { "vphminposuw",	{ XM, EXx } },
   9964      1.1  christos   },
   9965      1.1  christos   {
   9966  1.1.1.2  christos     /* VEX_W_0F3846_P_2 */
   9967  1.1.1.2  christos     { "vpsravd",	{ XM, Vex, EXx } },
   9968      1.1  christos   },
   9969      1.1  christos   {
   9970  1.1.1.2  christos     /* VEX_W_0F3858_P_2 */
   9971  1.1.1.2  christos     { "vpbroadcastd", { XM, EXxmm_md } },
   9972      1.1  christos   },
   9973      1.1  christos   {
   9974  1.1.1.2  christos     /* VEX_W_0F3859_P_2 */
   9975  1.1.1.2  christos     { "vpbroadcastq",	{ XM, EXxmm_mq } },
   9976      1.1  christos   },
   9977      1.1  christos   {
   9978  1.1.1.2  christos     /* VEX_W_0F385A_P_2_M_0 */
   9979  1.1.1.2  christos     { "vbroadcasti128", { XM, Mxmm } },
   9980      1.1  christos   },
   9981      1.1  christos   {
   9982  1.1.1.2  christos     /* VEX_W_0F3878_P_2 */
   9983  1.1.1.2  christos     { "vpbroadcastb",	{ XM, EXxmm_mb } },
   9984      1.1  christos   },
   9985      1.1  christos   {
   9986  1.1.1.2  christos     /* VEX_W_0F3879_P_2 */
   9987  1.1.1.2  christos     { "vpbroadcastw",	{ XM, EXxmm_mw } },
   9988      1.1  christos   },
   9989      1.1  christos   {
   9990      1.1  christos     /* VEX_W_0F38DB_P_2 */
   9991      1.1  christos     { "vaesimc",	{ XM, EXx } },
   9992      1.1  christos   },
   9993      1.1  christos   {
   9994      1.1  christos     /* VEX_W_0F38DC_P_2 */
   9995      1.1  christos     { "vaesenc",	{ XM, Vex128, EXx } },
   9996      1.1  christos   },
   9997      1.1  christos   {
   9998      1.1  christos     /* VEX_W_0F38DD_P_2 */
   9999      1.1  christos     { "vaesenclast",	{ XM, Vex128, EXx } },
   10000      1.1  christos   },
   10001      1.1  christos   {
   10002      1.1  christos     /* VEX_W_0F38DE_P_2 */
   10003      1.1  christos     { "vaesdec",	{ XM, Vex128, EXx } },
   10004      1.1  christos   },
   10005      1.1  christos   {
   10006      1.1  christos     /* VEX_W_0F38DF_P_2 */
   10007      1.1  christos     { "vaesdeclast",	{ XM, Vex128, EXx } },
   10008      1.1  christos   },
   10009      1.1  christos   {
   10010  1.1.1.2  christos     /* VEX_W_0F3A00_P_2 */
   10011  1.1.1.2  christos     { Bad_Opcode },
   10012  1.1.1.2  christos     { "vpermq",		{ XM, EXx, Ib } },
   10013  1.1.1.2  christos   },
   10014  1.1.1.2  christos   {
   10015  1.1.1.2  christos     /* VEX_W_0F3A01_P_2 */
   10016  1.1.1.2  christos     { Bad_Opcode },
   10017  1.1.1.2  christos     { "vpermpd",	{ XM, EXx, Ib } },
   10018  1.1.1.2  christos   },
   10019  1.1.1.2  christos   {
   10020  1.1.1.2  christos     /* VEX_W_0F3A02_P_2 */
   10021  1.1.1.2  christos     { "vpblendd",	{ XM, Vex, EXx, Ib } },
   10022  1.1.1.2  christos   },
   10023  1.1.1.2  christos   {
   10024      1.1  christos     /* VEX_W_0F3A04_P_2 */
   10025      1.1  christos     { "vpermilps",	{ XM, EXx, Ib } },
   10026      1.1  christos   },
   10027      1.1  christos   {
   10028      1.1  christos     /* VEX_W_0F3A05_P_2 */
   10029      1.1  christos     { "vpermilpd",	{ XM, EXx, Ib } },
   10030      1.1  christos   },
   10031      1.1  christos   {
   10032      1.1  christos     /* VEX_W_0F3A06_P_2 */
   10033      1.1  christos     { "vperm2f128",	{ XM, Vex256, EXx, Ib } },
   10034      1.1  christos   },
   10035      1.1  christos   {
   10036      1.1  christos     /* VEX_W_0F3A08_P_2 */
   10037      1.1  christos     { "vroundps",	{ XM, EXx, Ib } },
   10038      1.1  christos   },
   10039      1.1  christos   {
   10040      1.1  christos     /* VEX_W_0F3A09_P_2 */
   10041      1.1  christos     { "vroundpd",	{ XM, EXx, Ib } },
   10042      1.1  christos   },
   10043      1.1  christos   {
   10044      1.1  christos     /* VEX_W_0F3A0A_P_2 */
   10045      1.1  christos     { "vroundss",	{ XMScalar, VexScalar, EXdScalar, Ib } },
   10046      1.1  christos   },
   10047      1.1  christos   {
   10048      1.1  christos     /* VEX_W_0F3A0B_P_2 */
   10049      1.1  christos     { "vroundsd",	{ XMScalar, VexScalar, EXqScalar, Ib } },
   10050      1.1  christos   },
   10051      1.1  christos   {
   10052      1.1  christos     /* VEX_W_0F3A0C_P_2 */
   10053      1.1  christos     { "vblendps",	{ XM, Vex, EXx, Ib } },
   10054      1.1  christos   },
   10055      1.1  christos   {
   10056      1.1  christos     /* VEX_W_0F3A0D_P_2 */
   10057      1.1  christos     { "vblendpd",	{ XM, Vex, EXx, Ib } },
   10058      1.1  christos   },
   10059      1.1  christos   {
   10060      1.1  christos     /* VEX_W_0F3A0E_P_2 */
   10061  1.1.1.2  christos     { "vpblendw",	{ XM, Vex, EXx, Ib } },
   10062      1.1  christos   },
   10063      1.1  christos   {
   10064      1.1  christos     /* VEX_W_0F3A0F_P_2 */
   10065  1.1.1.2  christos     { "vpalignr",	{ XM, Vex, EXx, Ib } },
   10066      1.1  christos   },
   10067      1.1  christos   {
   10068      1.1  christos     /* VEX_W_0F3A14_P_2 */
   10069      1.1  christos     { "vpextrb",	{ Edqb, XM, Ib } },
   10070      1.1  christos   },
   10071      1.1  christos   {
   10072      1.1  christos     /* VEX_W_0F3A15_P_2 */
   10073      1.1  christos     { "vpextrw",	{ Edqw, XM, Ib } },
   10074      1.1  christos   },
   10075      1.1  christos   {
   10076      1.1  christos     /* VEX_W_0F3A18_P_2 */
   10077      1.1  christos     { "vinsertf128",	{ XM, Vex256, EXxmm, Ib } },
   10078      1.1  christos   },
   10079      1.1  christos   {
   10080      1.1  christos     /* VEX_W_0F3A19_P_2 */
   10081      1.1  christos     { "vextractf128",	{ EXxmm, XM, Ib } },
   10082      1.1  christos   },
   10083      1.1  christos   {
   10084      1.1  christos     /* VEX_W_0F3A20_P_2 */
   10085      1.1  christos     { "vpinsrb",	{ XM, Vex128, Edqb, Ib } },
   10086      1.1  christos   },
   10087      1.1  christos   {
   10088      1.1  christos     /* VEX_W_0F3A21_P_2 */
   10089      1.1  christos     { "vinsertps",	{ XM, Vex128, EXd, Ib } },
   10090      1.1  christos   },
   10091      1.1  christos   {
   10092  1.1.1.2  christos     /* VEX_W_0F3A38_P_2 */
   10093  1.1.1.2  christos     { "vinserti128",	{ XM, Vex256, EXxmm, Ib } },
   10094  1.1.1.2  christos   },
   10095  1.1.1.2  christos   {
   10096  1.1.1.2  christos     /* VEX_W_0F3A39_P_2 */
   10097  1.1.1.2  christos     { "vextracti128",	{ EXxmm, XM, Ib } },
   10098  1.1.1.2  christos   },
   10099  1.1.1.2  christos   {
   10100      1.1  christos     /* VEX_W_0F3A40_P_2 */
   10101      1.1  christos     { "vdpps",		{ XM, Vex, EXx, Ib } },
   10102      1.1  christos   },
   10103      1.1  christos   {
   10104      1.1  christos     /* VEX_W_0F3A41_P_2 */
   10105      1.1  christos     { "vdppd",		{ XM, Vex128, EXx, Ib } },
   10106      1.1  christos   },
   10107      1.1  christos   {
   10108      1.1  christos     /* VEX_W_0F3A42_P_2 */
   10109  1.1.1.2  christos     { "vmpsadbw",	{ XM, Vex, EXx, Ib } },
   10110      1.1  christos   },
   10111      1.1  christos   {
   10112      1.1  christos     /* VEX_W_0F3A44_P_2 */
   10113      1.1  christos     { "vpclmulqdq",	{ XM, Vex128, EXx, PCLMUL } },
   10114      1.1  christos   },
   10115      1.1  christos   {
   10116  1.1.1.2  christos     /* VEX_W_0F3A46_P_2 */
   10117  1.1.1.2  christos     { "vperm2i128",	{ XM, Vex256, EXx, Ib } },
   10118  1.1.1.2  christos   },
   10119  1.1.1.2  christos   {
   10120      1.1  christos     /* VEX_W_0F3A48_P_2 */
   10121      1.1  christos     { "vpermil2ps",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
   10122      1.1  christos     { "vpermil2ps",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
   10123      1.1  christos   },
   10124      1.1  christos   {
   10125      1.1  christos     /* VEX_W_0F3A49_P_2 */
   10126      1.1  christos     { "vpermil2pd",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
   10127      1.1  christos     { "vpermil2pd",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
   10128      1.1  christos   },
   10129      1.1  christos   {
   10130      1.1  christos     /* VEX_W_0F3A4A_P_2 */
   10131      1.1  christos     { "vblendvps",	{ XM, Vex, EXx, XMVexI4 } },
   10132      1.1  christos   },
   10133      1.1  christos   {
   10134      1.1  christos     /* VEX_W_0F3A4B_P_2 */
   10135      1.1  christos     { "vblendvpd",	{ XM, Vex, EXx, XMVexI4 } },
   10136      1.1  christos   },
   10137      1.1  christos   {
   10138      1.1  christos     /* VEX_W_0F3A4C_P_2 */
   10139  1.1.1.2  christos     { "vpblendvb",	{ XM, Vex, EXx, XMVexI4 } },
   10140      1.1  christos   },
   10141      1.1  christos   {
   10142      1.1  christos     /* VEX_W_0F3A60_P_2 */
   10143      1.1  christos     { "vpcmpestrm",	{ XM, EXx, Ib } },
   10144      1.1  christos   },
   10145      1.1  christos   {
   10146      1.1  christos     /* VEX_W_0F3A61_P_2 */
   10147      1.1  christos     { "vpcmpestri",	{ XM, EXx, Ib } },
   10148      1.1  christos   },
   10149      1.1  christos   {
   10150      1.1  christos     /* VEX_W_0F3A62_P_2 */
   10151      1.1  christos     { "vpcmpistrm",	{ XM, EXx, Ib } },
   10152      1.1  christos   },
   10153      1.1  christos   {
   10154      1.1  christos     /* VEX_W_0F3A63_P_2 */
   10155      1.1  christos     { "vpcmpistri",	{ XM, EXx, Ib } },
   10156      1.1  christos   },
   10157      1.1  christos   {
   10158      1.1  christos     /* VEX_W_0F3ADF_P_2 */
   10159      1.1  christos     { "vaeskeygenassist", { XM, EXx, Ib } },
   10160      1.1  christos   },
   10161      1.1  christos };
   10162      1.1  christos 
   10163      1.1  christos static const struct dis386 mod_table[][2] = {
   10164      1.1  christos   {
   10165      1.1  christos     /* MOD_8D */
   10166      1.1  christos     { "leaS",		{ Gv, M } },
   10167      1.1  christos   },
   10168      1.1  christos   {
   10169  1.1.1.2  christos     /* MOD_C6_REG_7 */
   10170  1.1.1.2  christos     { Bad_Opcode },
   10171  1.1.1.2  christos     { RM_TABLE (RM_C6_REG_7) },
   10172  1.1.1.2  christos   },
   10173  1.1.1.2  christos   {
   10174  1.1.1.2  christos     /* MOD_C7_REG_7 */
   10175  1.1.1.2  christos     { Bad_Opcode },
   10176  1.1.1.2  christos     { RM_TABLE (RM_C7_REG_7) },
   10177  1.1.1.2  christos   },
   10178  1.1.1.2  christos   {
   10179      1.1  christos     /* MOD_0F01_REG_0 */
   10180      1.1  christos     { X86_64_TABLE (X86_64_0F01_REG_0) },
   10181      1.1  christos     { RM_TABLE (RM_0F01_REG_0) },
   10182      1.1  christos   },
   10183      1.1  christos   {
   10184      1.1  christos     /* MOD_0F01_REG_1 */
   10185      1.1  christos     { X86_64_TABLE (X86_64_0F01_REG_1) },
   10186      1.1  christos     { RM_TABLE (RM_0F01_REG_1) },
   10187      1.1  christos   },
   10188      1.1  christos   {
   10189      1.1  christos     /* MOD_0F01_REG_2 */
   10190      1.1  christos     { X86_64_TABLE (X86_64_0F01_REG_2) },
   10191      1.1  christos     { RM_TABLE (RM_0F01_REG_2) },
   10192      1.1  christos   },
   10193      1.1  christos   {
   10194      1.1  christos     /* MOD_0F01_REG_3 */
   10195      1.1  christos     { X86_64_TABLE (X86_64_0F01_REG_3) },
   10196      1.1  christos     { RM_TABLE (RM_0F01_REG_3) },
   10197      1.1  christos   },
   10198      1.1  christos   {
   10199      1.1  christos     /* MOD_0F01_REG_7 */
   10200      1.1  christos     { "invlpg",		{ Mb } },
   10201      1.1  christos     { RM_TABLE (RM_0F01_REG_7) },
   10202      1.1  christos   },
   10203      1.1  christos   {
   10204      1.1  christos     /* MOD_0F12_PREFIX_0 */
   10205      1.1  christos     { "movlps",		{ XM, EXq } },
   10206      1.1  christos     { "movhlps",	{ XM, EXq } },
   10207      1.1  christos   },
   10208      1.1  christos   {
   10209      1.1  christos     /* MOD_0F13 */
   10210      1.1  christos     { "movlpX",		{ EXq, XM } },
   10211      1.1  christos   },
   10212      1.1  christos   {
   10213      1.1  christos     /* MOD_0F16_PREFIX_0 */
   10214      1.1  christos     { "movhps",		{ XM, EXq } },
   10215      1.1  christos     { "movlhps",	{ XM, EXq } },
   10216      1.1  christos   },
   10217      1.1  christos   {
   10218      1.1  christos     /* MOD_0F17 */
   10219      1.1  christos     { "movhpX",		{ EXq, XM } },
   10220      1.1  christos   },
   10221      1.1  christos   {
   10222      1.1  christos     /* MOD_0F18_REG_0 */
   10223      1.1  christos     { "prefetchnta",	{ Mb } },
   10224      1.1  christos   },
   10225      1.1  christos   {
   10226      1.1  christos     /* MOD_0F18_REG_1 */
   10227      1.1  christos     { "prefetcht0",	{ Mb } },
   10228      1.1  christos   },
   10229      1.1  christos   {
   10230      1.1  christos     /* MOD_0F18_REG_2 */
   10231      1.1  christos     { "prefetcht1",	{ Mb } },
   10232      1.1  christos   },
   10233      1.1  christos   {
   10234      1.1  christos     /* MOD_0F18_REG_3 */
   10235      1.1  christos     { "prefetcht2",	{ Mb } },
   10236      1.1  christos   },
   10237      1.1  christos   {
   10238  1.1.1.2  christos     /* MOD_0F18_REG_4 */
   10239  1.1.1.2  christos     { "nop/reserved",	{ Mb } },
   10240  1.1.1.2  christos   },
   10241  1.1.1.2  christos   {
   10242  1.1.1.2  christos     /* MOD_0F18_REG_5 */
   10243  1.1.1.2  christos     { "nop/reserved",	{ Mb } },
   10244  1.1.1.2  christos   },
   10245  1.1.1.2  christos   {
   10246  1.1.1.2  christos     /* MOD_0F18_REG_6 */
   10247  1.1.1.2  christos     { "nop/reserved",	{ Mb } },
   10248  1.1.1.2  christos   },
   10249  1.1.1.2  christos   {
   10250  1.1.1.2  christos     /* MOD_0F18_REG_7 */
   10251  1.1.1.2  christos     { "nop/reserved",	{ Mb } },
   10252  1.1.1.2  christos   },
   10253  1.1.1.2  christos   {
   10254      1.1  christos     /* MOD_0F20 */
   10255      1.1  christos     { Bad_Opcode },
   10256      1.1  christos     { "movZ",		{ Rm, Cm } },
   10257      1.1  christos   },
   10258      1.1  christos   {
   10259      1.1  christos     /* MOD_0F21 */
   10260      1.1  christos     { Bad_Opcode },
   10261      1.1  christos     { "movZ",		{ Rm, Dm } },
   10262      1.1  christos   },
   10263      1.1  christos   {
   10264      1.1  christos     /* MOD_0F22 */
   10265      1.1  christos     { Bad_Opcode },
   10266      1.1  christos     { "movZ",		{ Cm, Rm } },
   10267      1.1  christos   },
   10268      1.1  christos   {
   10269      1.1  christos     /* MOD_0F23 */
   10270      1.1  christos     { Bad_Opcode },
   10271      1.1  christos     { "movZ",		{ Dm, Rm } },
   10272      1.1  christos   },
   10273      1.1  christos   {
   10274      1.1  christos     /* MOD_0F24 */
   10275  1.1.1.2  christos     { Bad_Opcode },
   10276      1.1  christos     { "movL",		{ Rd, Td } },
   10277      1.1  christos   },
   10278      1.1  christos   {
   10279      1.1  christos     /* MOD_0F26 */
   10280      1.1  christos     { Bad_Opcode },
   10281      1.1  christos     { "movL",		{ Td, Rd } },
   10282      1.1  christos   },
   10283      1.1  christos   {
   10284      1.1  christos     /* MOD_0F2B_PREFIX_0 */
   10285      1.1  christos     {"movntps",		{ Mx, XM } },
   10286      1.1  christos   },
   10287      1.1  christos   {
   10288      1.1  christos     /* MOD_0F2B_PREFIX_1 */
   10289      1.1  christos     {"movntss",		{ Md, XM } },
   10290      1.1  christos   },
   10291      1.1  christos   {
   10292      1.1  christos     /* MOD_0F2B_PREFIX_2 */
   10293      1.1  christos     {"movntpd",		{ Mx, XM } },
   10294      1.1  christos   },
   10295      1.1  christos   {
   10296      1.1  christos     /* MOD_0F2B_PREFIX_3 */
   10297      1.1  christos     {"movntsd",		{ Mq, XM } },
   10298      1.1  christos   },
   10299      1.1  christos   {
   10300      1.1  christos     /* MOD_0F51 */
   10301      1.1  christos     { Bad_Opcode },
   10302      1.1  christos     { "movmskpX",	{ Gdq, XS } },
   10303      1.1  christos   },
   10304      1.1  christos   {
   10305      1.1  christos     /* MOD_0F71_REG_2 */
   10306      1.1  christos     { Bad_Opcode },
   10307      1.1  christos     { "psrlw",		{ MS, Ib } },
   10308      1.1  christos   },
   10309      1.1  christos   {
   10310      1.1  christos     /* MOD_0F71_REG_4 */
   10311      1.1  christos     { Bad_Opcode },
   10312      1.1  christos     { "psraw",		{ MS, Ib } },
   10313      1.1  christos   },
   10314      1.1  christos   {
   10315      1.1  christos     /* MOD_0F71_REG_6 */
   10316      1.1  christos     { Bad_Opcode },
   10317      1.1  christos     { "psllw",		{ MS, Ib } },
   10318      1.1  christos   },
   10319      1.1  christos   {
   10320      1.1  christos     /* MOD_0F72_REG_2 */
   10321      1.1  christos     { Bad_Opcode },
   10322      1.1  christos     { "psrld",		{ MS, Ib } },
   10323      1.1  christos   },
   10324      1.1  christos   {
   10325      1.1  christos     /* MOD_0F72_REG_4 */
   10326      1.1  christos     { Bad_Opcode },
   10327      1.1  christos     { "psrad",		{ MS, Ib } },
   10328      1.1  christos   },
   10329      1.1  christos   {
   10330      1.1  christos     /* MOD_0F72_REG_6 */
   10331      1.1  christos     { Bad_Opcode },
   10332      1.1  christos     { "pslld",		{ MS, Ib } },
   10333      1.1  christos   },
   10334      1.1  christos   {
   10335      1.1  christos     /* MOD_0F73_REG_2 */
   10336      1.1  christos     { Bad_Opcode },
   10337      1.1  christos     { "psrlq",		{ MS, Ib } },
   10338      1.1  christos   },
   10339      1.1  christos   {
   10340      1.1  christos     /* MOD_0F73_REG_3 */
   10341      1.1  christos     { Bad_Opcode },
   10342      1.1  christos     { PREFIX_TABLE (PREFIX_0F73_REG_3) },
   10343      1.1  christos   },
   10344      1.1  christos   {
   10345      1.1  christos     /* MOD_0F73_REG_6 */
   10346      1.1  christos     { Bad_Opcode },
   10347      1.1  christos     { "psllq",		{ MS, Ib } },
   10348      1.1  christos   },
   10349      1.1  christos   {
   10350      1.1  christos     /* MOD_0F73_REG_7 */
   10351      1.1  christos     { Bad_Opcode },
   10352      1.1  christos     { PREFIX_TABLE (PREFIX_0F73_REG_7) },
   10353      1.1  christos   },
   10354      1.1  christos   {
   10355      1.1  christos     /* MOD_0FAE_REG_0 */
   10356      1.1  christos     { "fxsave",		{ FXSAVE } },
   10357      1.1  christos     { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
   10358      1.1  christos   },
   10359      1.1  christos   {
   10360      1.1  christos     /* MOD_0FAE_REG_1 */
   10361      1.1  christos     { "fxrstor",	{ FXSAVE } },
   10362      1.1  christos     { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
   10363      1.1  christos   },
   10364      1.1  christos   {
   10365      1.1  christos     /* MOD_0FAE_REG_2 */
   10366      1.1  christos     { "ldmxcsr",	{ Md } },
   10367      1.1  christos     { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
   10368      1.1  christos   },
   10369      1.1  christos   {
   10370      1.1  christos     /* MOD_0FAE_REG_3 */
   10371      1.1  christos     { "stmxcsr",	{ Md } },
   10372      1.1  christos     { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
   10373      1.1  christos   },
   10374      1.1  christos   {
   10375      1.1  christos     /* MOD_0FAE_REG_4 */
   10376      1.1  christos     { "xsave",		{ FXSAVE } },
   10377      1.1  christos   },
   10378      1.1  christos   {
   10379      1.1  christos     /* MOD_0FAE_REG_5 */
   10380      1.1  christos     { "xrstor",		{ FXSAVE } },
   10381      1.1  christos     { RM_TABLE (RM_0FAE_REG_5) },
   10382      1.1  christos   },
   10383      1.1  christos   {
   10384      1.1  christos     /* MOD_0FAE_REG_6 */
   10385      1.1  christos     { "xsaveopt",	{ FXSAVE } },
   10386      1.1  christos     { RM_TABLE (RM_0FAE_REG_6) },
   10387      1.1  christos   },
   10388      1.1  christos   {
   10389      1.1  christos     /* MOD_0FAE_REG_7 */
   10390      1.1  christos     { "clflush",	{ Mb } },
   10391      1.1  christos     { RM_TABLE (RM_0FAE_REG_7) },
   10392      1.1  christos   },
   10393      1.1  christos   {
   10394      1.1  christos     /* MOD_0FB2 */
   10395      1.1  christos     { "lssS",		{ Gv, Mp } },
   10396      1.1  christos   },
   10397      1.1  christos   {
   10398      1.1  christos     /* MOD_0FB4 */
   10399      1.1  christos     { "lfsS",		{ Gv, Mp } },
   10400      1.1  christos   },
   10401      1.1  christos   {
   10402      1.1  christos     /* MOD_0FB5 */
   10403      1.1  christos     { "lgsS",		{ Gv, Mp } },
   10404      1.1  christos   },
   10405      1.1  christos   {
   10406      1.1  christos     /* MOD_0FC7_REG_6 */
   10407      1.1  christos     { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
   10408      1.1  christos     { "rdrand",		{ Ev } },
   10409      1.1  christos   },
   10410      1.1  christos   {
   10411      1.1  christos     /* MOD_0FC7_REG_7 */
   10412      1.1  christos     { "vmptrst",	{ Mq } },
   10413  1.1.1.2  christos     { "rdseed",		{ Ev } },
   10414      1.1  christos   },
   10415      1.1  christos   {
   10416      1.1  christos     /* MOD_0FD7 */
   10417      1.1  christos     { Bad_Opcode },
   10418      1.1  christos     { "pmovmskb",	{ Gdq, MS } },
   10419      1.1  christos   },
   10420      1.1  christos   {
   10421      1.1  christos     /* MOD_0FE7_PREFIX_2 */
   10422      1.1  christos     { "movntdq",	{ Mx, XM } },
   10423      1.1  christos   },
   10424      1.1  christos   {
   10425      1.1  christos     /* MOD_0FF0_PREFIX_3 */
   10426      1.1  christos     { "lddqu",		{ XM, M } },
   10427      1.1  christos   },
   10428      1.1  christos   {
   10429      1.1  christos     /* MOD_0F382A_PREFIX_2 */
   10430      1.1  christos     { "movntdqa",	{ XM, Mx } },
   10431      1.1  christos   },
   10432      1.1  christos   {
   10433      1.1  christos     /* MOD_62_32BIT */
   10434      1.1  christos     { "bound{S|}",	{ Gv, Ma } },
   10435      1.1  christos   },
   10436      1.1  christos   {
   10437      1.1  christos     /* MOD_C4_32BIT */
   10438      1.1  christos     { "lesS",		{ Gv, Mp } },
   10439      1.1  christos     { VEX_C4_TABLE (VEX_0F) },
   10440      1.1  christos   },
   10441      1.1  christos   {
   10442      1.1  christos     /* MOD_C5_32BIT */
   10443      1.1  christos     { "ldsS",		{ Gv, Mp } },
   10444      1.1  christos     { VEX_C5_TABLE (VEX_0F) },
   10445      1.1  christos   },
   10446      1.1  christos   {
   10447      1.1  christos     /* MOD_VEX_0F12_PREFIX_0 */
   10448      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
   10449      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
   10450      1.1  christos   },
   10451      1.1  christos   {
   10452      1.1  christos     /* MOD_VEX_0F13 */
   10453      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
   10454      1.1  christos   },
   10455      1.1  christos   {
   10456      1.1  christos     /* MOD_VEX_0F16_PREFIX_0 */
   10457      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
   10458      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
   10459      1.1  christos   },
   10460      1.1  christos   {
   10461      1.1  christos     /* MOD_VEX_0F17 */
   10462      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
   10463      1.1  christos   },
   10464      1.1  christos   {
   10465      1.1  christos     /* MOD_VEX_0F2B */
   10466      1.1  christos     { VEX_W_TABLE (VEX_W_0F2B_M_0) },
   10467      1.1  christos   },
   10468      1.1  christos   {
   10469      1.1  christos     /* MOD_VEX_0F50 */
   10470      1.1  christos     { Bad_Opcode },
   10471      1.1  christos     { VEX_W_TABLE (VEX_W_0F50_M_0) },
   10472      1.1  christos   },
   10473      1.1  christos   {
   10474      1.1  christos     /* MOD_VEX_0F71_REG_2 */
   10475      1.1  christos     { Bad_Opcode },
   10476      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
   10477      1.1  christos   },
   10478      1.1  christos   {
   10479      1.1  christos     /* MOD_VEX_0F71_REG_4 */
   10480      1.1  christos     { Bad_Opcode },
   10481      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
   10482      1.1  christos   },
   10483      1.1  christos   {
   10484      1.1  christos     /* MOD_VEX_0F71_REG_6 */
   10485      1.1  christos     { Bad_Opcode },
   10486      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
   10487      1.1  christos   },
   10488      1.1  christos   {
   10489      1.1  christos     /* MOD_VEX_0F72_REG_2 */
   10490      1.1  christos     { Bad_Opcode },
   10491      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
   10492      1.1  christos   },
   10493      1.1  christos   {
   10494      1.1  christos     /* MOD_VEX_0F72_REG_4 */
   10495      1.1  christos     { Bad_Opcode },
   10496      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
   10497      1.1  christos   },
   10498      1.1  christos   {
   10499      1.1  christos     /* MOD_VEX_0F72_REG_6 */
   10500      1.1  christos     { Bad_Opcode },
   10501      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
   10502      1.1  christos   },
   10503      1.1  christos   {
   10504      1.1  christos     /* MOD_VEX_0F73_REG_2 */
   10505      1.1  christos     { Bad_Opcode },
   10506      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
   10507      1.1  christos   },
   10508      1.1  christos   {
   10509      1.1  christos     /* MOD_VEX_0F73_REG_3 */
   10510      1.1  christos     { Bad_Opcode },
   10511      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
   10512      1.1  christos   },
   10513      1.1  christos   {
   10514      1.1  christos     /* MOD_VEX_0F73_REG_6 */
   10515      1.1  christos     { Bad_Opcode },
   10516      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
   10517      1.1  christos   },
   10518      1.1  christos   {
   10519      1.1  christos     /* MOD_VEX_0F73_REG_7 */
   10520      1.1  christos     { Bad_Opcode },
   10521      1.1  christos     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
   10522      1.1  christos   },
   10523      1.1  christos   {
   10524      1.1  christos     /* MOD_VEX_0FAE_REG_2 */
   10525      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
   10526      1.1  christos   },
   10527      1.1  christos   {
   10528      1.1  christos     /* MOD_VEX_0FAE_REG_3 */
   10529      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
   10530      1.1  christos   },
   10531      1.1  christos   {
   10532      1.1  christos     /* MOD_VEX_0FD7_PREFIX_2 */
   10533      1.1  christos     { Bad_Opcode },
   10534  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
   10535      1.1  christos   },
   10536      1.1  christos   {
   10537      1.1  christos     /* MOD_VEX_0FE7_PREFIX_2 */
   10538      1.1  christos     { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
   10539      1.1  christos   },
   10540      1.1  christos   {
   10541      1.1  christos     /* MOD_VEX_0FF0_PREFIX_3 */
   10542      1.1  christos     { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
   10543      1.1  christos   },
   10544      1.1  christos   {
   10545      1.1  christos     /* MOD_VEX_0F381A_PREFIX_2 */
   10546      1.1  christos     { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
   10547      1.1  christos   },
   10548      1.1  christos   {
   10549      1.1  christos     /* MOD_VEX_0F382A_PREFIX_2 */
   10550  1.1.1.2  christos     { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
   10551      1.1  christos   },
   10552      1.1  christos   {
   10553      1.1  christos     /* MOD_VEX_0F382C_PREFIX_2 */
   10554      1.1  christos     { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
   10555      1.1  christos   },
   10556      1.1  christos   {
   10557      1.1  christos     /* MOD_VEX_0F382D_PREFIX_2 */
   10558      1.1  christos     { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
   10559      1.1  christos   },
   10560      1.1  christos   {
   10561      1.1  christos     /* MOD_VEX_0F382E_PREFIX_2 */
   10562      1.1  christos     { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
   10563      1.1  christos   },
   10564      1.1  christos   {
   10565      1.1  christos     /* MOD_VEX_0F382F_PREFIX_2 */
   10566      1.1  christos     { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
   10567      1.1  christos   },
   10568  1.1.1.2  christos   {
   10569  1.1.1.2  christos     /* MOD_VEX_0F385A_PREFIX_2 */
   10570  1.1.1.2  christos     { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
   10571  1.1.1.2  christos   },
   10572  1.1.1.2  christos   {
   10573  1.1.1.2  christos     /* MOD_VEX_0F388C_PREFIX_2 */
   10574  1.1.1.2  christos     { "vpmaskmov%LW",	{ XM, Vex, Mx } },
   10575  1.1.1.2  christos   },
   10576  1.1.1.2  christos   {
   10577  1.1.1.2  christos     /* MOD_VEX_0F388E_PREFIX_2 */
   10578  1.1.1.2  christos     { "vpmaskmov%LW",	{ Mx, Vex, XM } },
   10579  1.1.1.2  christos   },
   10580      1.1  christos };
   10581      1.1  christos 
   10582      1.1  christos static const struct dis386 rm_table[][8] = {
   10583      1.1  christos   {
   10584  1.1.1.2  christos     /* RM_C6_REG_7 */
   10585  1.1.1.2  christos     { "xabort",		{ Skip_MODRM, Ib } },
   10586  1.1.1.2  christos   },
   10587  1.1.1.2  christos   {
   10588  1.1.1.2  christos     /* RM_C7_REG_7 */
   10589  1.1.1.2  christos     { "xbeginT",	{ Skip_MODRM, Jv } },
   10590  1.1.1.2  christos   },
   10591  1.1.1.2  christos   {
   10592      1.1  christos     /* RM_0F01_REG_0 */
   10593      1.1  christos     { Bad_Opcode },
   10594      1.1  christos     { "vmcall",		{ Skip_MODRM } },
   10595      1.1  christos     { "vmlaunch",	{ Skip_MODRM } },
   10596      1.1  christos     { "vmresume",	{ Skip_MODRM } },
   10597      1.1  christos     { "vmxoff",		{ Skip_MODRM } },
   10598      1.1  christos   },
   10599      1.1  christos   {
   10600      1.1  christos     /* RM_0F01_REG_1 */
   10601      1.1  christos     { "monitor",	{ { OP_Monitor, 0 } } },
   10602      1.1  christos     { "mwait",		{ { OP_Mwait, 0 } } },
   10603  1.1.1.2  christos     { "clac",		{ Skip_MODRM } },
   10604  1.1.1.2  christos     { "stac",		{ Skip_MODRM } },
   10605      1.1  christos   },
   10606      1.1  christos   {
   10607      1.1  christos     /* RM_0F01_REG_2 */
   10608      1.1  christos     { "xgetbv",		{ Skip_MODRM } },
   10609      1.1  christos     { "xsetbv",		{ Skip_MODRM } },
   10610  1.1.1.2  christos     { Bad_Opcode },
   10611  1.1.1.2  christos     { Bad_Opcode },
   10612  1.1.1.2  christos     { "vmfunc",		{ Skip_MODRM } },
   10613  1.1.1.2  christos     { "xend",		{ Skip_MODRM } },
   10614  1.1.1.2  christos     { "xtest",		{ Skip_MODRM } },
   10615  1.1.1.2  christos     { Bad_Opcode },
   10616      1.1  christos   },
   10617      1.1  christos   {
   10618      1.1  christos     /* RM_0F01_REG_3 */
   10619      1.1  christos     { "vmrun",		{ Skip_MODRM } },
   10620      1.1  christos     { "vmmcall",	{ Skip_MODRM } },
   10621      1.1  christos     { "vmload",		{ Skip_MODRM } },
   10622      1.1  christos     { "vmsave",		{ Skip_MODRM } },
   10623      1.1  christos     { "stgi",		{ Skip_MODRM } },
   10624      1.1  christos     { "clgi",		{ Skip_MODRM } },
   10625      1.1  christos     { "skinit",		{ Skip_MODRM } },
   10626      1.1  christos     { "invlpga",	{ Skip_MODRM } },
   10627      1.1  christos   },
   10628      1.1  christos   {
   10629      1.1  christos     /* RM_0F01_REG_7 */
   10630      1.1  christos     { "swapgs",		{ Skip_MODRM } },
   10631      1.1  christos     { "rdtscp",		{ Skip_MODRM } },
   10632      1.1  christos   },
   10633      1.1  christos   {
   10634      1.1  christos     /* RM_0FAE_REG_5 */
   10635      1.1  christos     { "lfence",		{ Skip_MODRM } },
   10636      1.1  christos   },
   10637      1.1  christos   {
   10638      1.1  christos     /* RM_0FAE_REG_6 */
   10639      1.1  christos     { "mfence",		{ Skip_MODRM } },
   10640      1.1  christos   },
   10641      1.1  christos   {
   10642      1.1  christos     /* RM_0FAE_REG_7 */
   10643      1.1  christos     { "sfence",		{ Skip_MODRM } },
   10644      1.1  christos   },
   10645      1.1  christos };
   10646      1.1  christos 
   10647      1.1  christos #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
   10648      1.1  christos 
   10649      1.1  christos /* We use the high bit to indicate different name for the same
   10650      1.1  christos    prefix.  */
   10651      1.1  christos #define ADDR16_PREFIX	(0x67 | 0x100)
   10652      1.1  christos #define ADDR32_PREFIX	(0x67 | 0x200)
   10653      1.1  christos #define DATA16_PREFIX	(0x66 | 0x100)
   10654      1.1  christos #define DATA32_PREFIX	(0x66 | 0x200)
   10655      1.1  christos #define REP_PREFIX	(0xf3 | 0x100)
   10656  1.1.1.2  christos #define XACQUIRE_PREFIX	(0xf2 | 0x200)
   10657  1.1.1.2  christos #define XRELEASE_PREFIX	(0xf3 | 0x400)
   10658      1.1  christos 
   10659      1.1  christos static int
   10660      1.1  christos ckprefix (void)
   10661      1.1  christos {
   10662      1.1  christos   int newrex, i, length;
   10663      1.1  christos   rex = 0;
   10664      1.1  christos   rex_ignored = 0;
   10665      1.1  christos   prefixes = 0;
   10666      1.1  christos   used_prefixes = 0;
   10667      1.1  christos   rex_used = 0;
   10668      1.1  christos   last_lock_prefix = -1;
   10669      1.1  christos   last_repz_prefix = -1;
   10670      1.1  christos   last_repnz_prefix = -1;
   10671      1.1  christos   last_data_prefix = -1;
   10672      1.1  christos   last_addr_prefix = -1;
   10673      1.1  christos   last_rex_prefix = -1;
   10674      1.1  christos   last_seg_prefix = -1;
   10675      1.1  christos   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
   10676      1.1  christos     all_prefixes[i] = 0;
   10677      1.1  christos   i = 0;
   10678      1.1  christos   length = 0;
   10679      1.1  christos   /* The maximum instruction length is 15bytes.  */
   10680      1.1  christos   while (length < MAX_CODE_LENGTH - 1)
   10681      1.1  christos     {
   10682      1.1  christos       FETCH_DATA (the_info, codep + 1);
   10683      1.1  christos       newrex = 0;
   10684      1.1  christos       switch (*codep)
   10685      1.1  christos 	{
   10686      1.1  christos 	/* REX prefixes family.  */
   10687      1.1  christos 	case 0x40:
   10688      1.1  christos 	case 0x41:
   10689      1.1  christos 	case 0x42:
   10690      1.1  christos 	case 0x43:
   10691      1.1  christos 	case 0x44:
   10692      1.1  christos 	case 0x45:
   10693      1.1  christos 	case 0x46:
   10694      1.1  christos 	case 0x47:
   10695      1.1  christos 	case 0x48:
   10696      1.1  christos 	case 0x49:
   10697      1.1  christos 	case 0x4a:
   10698      1.1  christos 	case 0x4b:
   10699      1.1  christos 	case 0x4c:
   10700      1.1  christos 	case 0x4d:
   10701      1.1  christos 	case 0x4e:
   10702      1.1  christos 	case 0x4f:
   10703      1.1  christos 	  if (address_mode == mode_64bit)
   10704      1.1  christos 	    newrex = *codep;
   10705      1.1  christos 	  else
   10706      1.1  christos 	    return 1;
   10707      1.1  christos 	  last_rex_prefix = i;
   10708      1.1  christos 	  break;
   10709      1.1  christos 	case 0xf3:
   10710      1.1  christos 	  prefixes |= PREFIX_REPZ;
   10711      1.1  christos 	  last_repz_prefix = i;
   10712      1.1  christos 	  break;
   10713      1.1  christos 	case 0xf2:
   10714      1.1  christos 	  prefixes |= PREFIX_REPNZ;
   10715      1.1  christos 	  last_repnz_prefix = i;
   10716      1.1  christos 	  break;
   10717      1.1  christos 	case 0xf0:
   10718      1.1  christos 	  prefixes |= PREFIX_LOCK;
   10719      1.1  christos 	  last_lock_prefix = i;
   10720      1.1  christos 	  break;
   10721      1.1  christos 	case 0x2e:
   10722      1.1  christos 	  prefixes |= PREFIX_CS;
   10723      1.1  christos 	  last_seg_prefix = i;
   10724      1.1  christos 	  break;
   10725      1.1  christos 	case 0x36:
   10726      1.1  christos 	  prefixes |= PREFIX_SS;
   10727      1.1  christos 	  last_seg_prefix = i;
   10728      1.1  christos 	  break;
   10729      1.1  christos 	case 0x3e:
   10730      1.1  christos 	  prefixes |= PREFIX_DS;
   10731      1.1  christos 	  last_seg_prefix = i;
   10732      1.1  christos 	  break;
   10733      1.1  christos 	case 0x26:
   10734      1.1  christos 	  prefixes |= PREFIX_ES;
   10735      1.1  christos 	  last_seg_prefix = i;
   10736      1.1  christos 	  break;
   10737      1.1  christos 	case 0x64:
   10738      1.1  christos 	  prefixes |= PREFIX_FS;
   10739      1.1  christos 	  last_seg_prefix = i;
   10740      1.1  christos 	  break;
   10741      1.1  christos 	case 0x65:
   10742      1.1  christos 	  prefixes |= PREFIX_GS;
   10743      1.1  christos 	  last_seg_prefix = i;
   10744      1.1  christos 	  break;
   10745      1.1  christos 	case 0x66:
   10746      1.1  christos 	  prefixes |= PREFIX_DATA;
   10747      1.1  christos 	  last_data_prefix = i;
   10748      1.1  christos 	  break;
   10749      1.1  christos 	case 0x67:
   10750      1.1  christos 	  prefixes |= PREFIX_ADDR;
   10751      1.1  christos 	  last_addr_prefix = i;
   10752      1.1  christos 	  break;
   10753      1.1  christos 	case FWAIT_OPCODE:
   10754      1.1  christos 	  /* fwait is really an instruction.  If there are prefixes
   10755      1.1  christos 	     before the fwait, they belong to the fwait, *not* to the
   10756      1.1  christos 	     following instruction.  */
   10757      1.1  christos 	  if (prefixes || rex)
   10758      1.1  christos 	    {
   10759      1.1  christos 	      prefixes |= PREFIX_FWAIT;
   10760      1.1  christos 	      codep++;
   10761  1.1.1.2  christos 	      /* This ensures that the previous REX prefixes are noticed
   10762  1.1.1.2  christos 		 as unused prefixes, as in the return case below.  */
   10763  1.1.1.2  christos 	      rex_used = rex;
   10764      1.1  christos 	      return 1;
   10765      1.1  christos 	    }
   10766      1.1  christos 	  prefixes = PREFIX_FWAIT;
   10767      1.1  christos 	  break;
   10768      1.1  christos 	default:
   10769      1.1  christos 	  return 1;
   10770      1.1  christos 	}
   10771      1.1  christos       /* Rex is ignored when followed by another prefix.  */
   10772      1.1  christos       if (rex)
   10773      1.1  christos 	{
   10774      1.1  christos 	  rex_used = rex;
   10775      1.1  christos 	  return 1;
   10776      1.1  christos 	}
   10777      1.1  christos       if (*codep != FWAIT_OPCODE)
   10778      1.1  christos 	all_prefixes[i++] = *codep;
   10779      1.1  christos       rex = newrex;
   10780      1.1  christos       codep++;
   10781      1.1  christos       length++;
   10782      1.1  christos     }
   10783      1.1  christos   return 0;
   10784      1.1  christos }
   10785      1.1  christos 
   10786      1.1  christos static int
   10787      1.1  christos seg_prefix (int pref)
   10788      1.1  christos {
   10789      1.1  christos   switch (pref)
   10790      1.1  christos     {
   10791      1.1  christos     case 0x2e:
   10792      1.1  christos       return PREFIX_CS;
   10793      1.1  christos     case 0x36:
   10794      1.1  christos       return PREFIX_SS;
   10795      1.1  christos     case 0x3e:
   10796      1.1  christos       return PREFIX_DS;
   10797      1.1  christos     case 0x26:
   10798      1.1  christos       return PREFIX_ES;
   10799      1.1  christos     case 0x64:
   10800      1.1  christos       return PREFIX_FS;
   10801      1.1  christos     case 0x65:
   10802      1.1  christos       return PREFIX_GS;
   10803      1.1  christos     default:
   10804      1.1  christos       return 0;
   10805      1.1  christos     }
   10806      1.1  christos }
   10807      1.1  christos 
   10808      1.1  christos /* Return the name of the prefix byte PREF, or NULL if PREF is not a
   10809      1.1  christos    prefix byte.  */
   10810      1.1  christos 
   10811      1.1  christos static const char *
   10812      1.1  christos prefix_name (int pref, int sizeflag)
   10813      1.1  christos {
   10814      1.1  christos   static const char *rexes [16] =
   10815      1.1  christos     {
   10816      1.1  christos       "rex",		/* 0x40 */
   10817      1.1  christos       "rex.B",		/* 0x41 */
   10818      1.1  christos       "rex.X",		/* 0x42 */
   10819      1.1  christos       "rex.XB",		/* 0x43 */
   10820      1.1  christos       "rex.R",		/* 0x44 */
   10821      1.1  christos       "rex.RB",		/* 0x45 */
   10822      1.1  christos       "rex.RX",		/* 0x46 */
   10823      1.1  christos       "rex.RXB",	/* 0x47 */
   10824      1.1  christos       "rex.W",		/* 0x48 */
   10825      1.1  christos       "rex.WB",		/* 0x49 */
   10826      1.1  christos       "rex.WX",		/* 0x4a */
   10827      1.1  christos       "rex.WXB",	/* 0x4b */
   10828      1.1  christos       "rex.WR",		/* 0x4c */
   10829      1.1  christos       "rex.WRB",	/* 0x4d */
   10830      1.1  christos       "rex.WRX",	/* 0x4e */
   10831      1.1  christos       "rex.WRXB",	/* 0x4f */
   10832      1.1  christos     };
   10833      1.1  christos 
   10834      1.1  christos   switch (pref)
   10835      1.1  christos     {
   10836      1.1  christos     /* REX prefixes family.  */
   10837      1.1  christos     case 0x40:
   10838      1.1  christos     case 0x41:
   10839      1.1  christos     case 0x42:
   10840      1.1  christos     case 0x43:
   10841      1.1  christos     case 0x44:
   10842      1.1  christos     case 0x45:
   10843      1.1  christos     case 0x46:
   10844      1.1  christos     case 0x47:
   10845      1.1  christos     case 0x48:
   10846      1.1  christos     case 0x49:
   10847      1.1  christos     case 0x4a:
   10848      1.1  christos     case 0x4b:
   10849      1.1  christos     case 0x4c:
   10850      1.1  christos     case 0x4d:
   10851      1.1  christos     case 0x4e:
   10852      1.1  christos     case 0x4f:
   10853      1.1  christos       return rexes [pref - 0x40];
   10854      1.1  christos     case 0xf3:
   10855      1.1  christos       return "repz";
   10856      1.1  christos     case 0xf2:
   10857      1.1  christos       return "repnz";
   10858      1.1  christos     case 0xf0:
   10859      1.1  christos       return "lock";
   10860      1.1  christos     case 0x2e:
   10861      1.1  christos       return "cs";
   10862      1.1  christos     case 0x36:
   10863      1.1  christos       return "ss";
   10864      1.1  christos     case 0x3e:
   10865      1.1  christos       return "ds";
   10866      1.1  christos     case 0x26:
   10867      1.1  christos       return "es";
   10868      1.1  christos     case 0x64:
   10869      1.1  christos       return "fs";
   10870      1.1  christos     case 0x65:
   10871      1.1  christos       return "gs";
   10872      1.1  christos     case 0x66:
   10873      1.1  christos       return (sizeflag & DFLAG) ? "data16" : "data32";
   10874      1.1  christos     case 0x67:
   10875      1.1  christos       if (address_mode == mode_64bit)
   10876      1.1  christos 	return (sizeflag & AFLAG) ? "addr32" : "addr64";
   10877      1.1  christos       else
   10878      1.1  christos 	return (sizeflag & AFLAG) ? "addr16" : "addr32";
   10879      1.1  christos     case FWAIT_OPCODE:
   10880      1.1  christos       return "fwait";
   10881      1.1  christos     case ADDR16_PREFIX:
   10882      1.1  christos       return "addr16";
   10883      1.1  christos     case ADDR32_PREFIX:
   10884      1.1  christos       return "addr32";
   10885      1.1  christos     case DATA16_PREFIX:
   10886      1.1  christos       return "data16";
   10887      1.1  christos     case DATA32_PREFIX:
   10888      1.1  christos       return "data32";
   10889      1.1  christos     case REP_PREFIX:
   10890      1.1  christos       return "rep";
   10891  1.1.1.2  christos     case XACQUIRE_PREFIX:
   10892  1.1.1.2  christos       return "xacquire";
   10893  1.1.1.2  christos     case XRELEASE_PREFIX:
   10894  1.1.1.2  christos       return "xrelease";
   10895      1.1  christos     default:
   10896      1.1  christos       return NULL;
   10897      1.1  christos     }
   10898      1.1  christos }
   10899      1.1  christos 
   10900      1.1  christos static char op_out[MAX_OPERANDS][100];
   10901      1.1  christos static int op_ad, op_index[MAX_OPERANDS];
   10902      1.1  christos static int two_source_ops;
   10903      1.1  christos static bfd_vma op_address[MAX_OPERANDS];
   10904      1.1  christos static bfd_vma op_riprel[MAX_OPERANDS];
   10905      1.1  christos static bfd_vma start_pc;
   10906      1.1  christos 
   10907      1.1  christos /*
   10908      1.1  christos  *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
   10909      1.1  christos  *   (see topic "Redundant prefixes" in the "Differences from 8086"
   10910      1.1  christos  *   section of the "Virtual 8086 Mode" chapter.)
   10911      1.1  christos  * 'pc' should be the address of this instruction, it will
   10912      1.1  christos  *   be used to print the target address if this is a relative jump or call
   10913      1.1  christos  * The function returns the length of this instruction in bytes.
   10914      1.1  christos  */
   10915      1.1  christos 
   10916      1.1  christos static char intel_syntax;
   10917      1.1  christos static char intel_mnemonic = !SYSV386_COMPAT;
   10918      1.1  christos static char open_char;
   10919      1.1  christos static char close_char;
   10920      1.1  christos static char separator_char;
   10921      1.1  christos static char scale_char;
   10922      1.1  christos 
   10923      1.1  christos /* Here for backwards compatibility.  When gdb stops using
   10924      1.1  christos    print_insn_i386_att and print_insn_i386_intel these functions can
   10925      1.1  christos    disappear, and print_insn_i386 be merged into print_insn.  */
   10926      1.1  christos int
   10927      1.1  christos print_insn_i386_att (bfd_vma pc, disassemble_info *info)
   10928      1.1  christos {
   10929      1.1  christos   intel_syntax = 0;
   10930      1.1  christos 
   10931      1.1  christos   return print_insn (pc, info);
   10932      1.1  christos }
   10933      1.1  christos 
   10934      1.1  christos int
   10935      1.1  christos print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
   10936      1.1  christos {
   10937      1.1  christos   intel_syntax = 1;
   10938      1.1  christos 
   10939      1.1  christos   return print_insn (pc, info);
   10940      1.1  christos }
   10941      1.1  christos 
   10942      1.1  christos int
   10943      1.1  christos print_insn_i386 (bfd_vma pc, disassemble_info *info)
   10944      1.1  christos {
   10945      1.1  christos   intel_syntax = -1;
   10946      1.1  christos 
   10947      1.1  christos   return print_insn (pc, info);
   10948      1.1  christos }
   10949      1.1  christos 
   10950      1.1  christos void
   10951      1.1  christos print_i386_disassembler_options (FILE *stream)
   10952      1.1  christos {
   10953      1.1  christos   fprintf (stream, _("\n\
   10954      1.1  christos The following i386/x86-64 specific disassembler options are supported for use\n\
   10955      1.1  christos with the -M switch (multiple options should be separated by commas):\n"));
   10956      1.1  christos 
   10957      1.1  christos   fprintf (stream, _("  x86-64      Disassemble in 64bit mode\n"));
   10958      1.1  christos   fprintf (stream, _("  i386        Disassemble in 32bit mode\n"));
   10959      1.1  christos   fprintf (stream, _("  i8086       Disassemble in 16bit mode\n"));
   10960      1.1  christos   fprintf (stream, _("  att         Display instruction in AT&T syntax\n"));
   10961      1.1  christos   fprintf (stream, _("  intel       Display instruction in Intel syntax\n"));
   10962      1.1  christos   fprintf (stream, _("  att-mnemonic\n"
   10963      1.1  christos 		     "              Display instruction in AT&T mnemonic\n"));
   10964      1.1  christos   fprintf (stream, _("  intel-mnemonic\n"
   10965      1.1  christos 		     "              Display instruction in Intel mnemonic\n"));
   10966      1.1  christos   fprintf (stream, _("  addr64      Assume 64bit address size\n"));
   10967      1.1  christos   fprintf (stream, _("  addr32      Assume 32bit address size\n"));
   10968      1.1  christos   fprintf (stream, _("  addr16      Assume 16bit address size\n"));
   10969      1.1  christos   fprintf (stream, _("  data32      Assume 32bit data size\n"));
   10970      1.1  christos   fprintf (stream, _("  data16      Assume 16bit data size\n"));
   10971      1.1  christos   fprintf (stream, _("  suffix      Always display instruction suffix in AT&T syntax\n"));
   10972      1.1  christos }
   10973      1.1  christos 
   10974      1.1  christos /* Bad opcode.  */
   10975      1.1  christos static const struct dis386 bad_opcode = { "(bad)", { XX } };
   10976      1.1  christos 
   10977      1.1  christos /* Get a pointer to struct dis386 with a valid name.  */
   10978      1.1  christos 
   10979      1.1  christos static const struct dis386 *
   10980      1.1  christos get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
   10981      1.1  christos {
   10982      1.1  christos   int vindex, vex_table_index;
   10983      1.1  christos 
   10984      1.1  christos   if (dp->name != NULL)
   10985      1.1  christos     return dp;
   10986      1.1  christos 
   10987      1.1  christos   switch (dp->op[0].bytemode)
   10988      1.1  christos     {
   10989      1.1  christos     case USE_REG_TABLE:
   10990      1.1  christos       dp = &reg_table[dp->op[1].bytemode][modrm.reg];
   10991      1.1  christos       break;
   10992      1.1  christos 
   10993      1.1  christos     case USE_MOD_TABLE:
   10994      1.1  christos       vindex = modrm.mod == 0x3 ? 1 : 0;
   10995      1.1  christos       dp = &mod_table[dp->op[1].bytemode][vindex];
   10996      1.1  christos       break;
   10997      1.1  christos 
   10998      1.1  christos     case USE_RM_TABLE:
   10999      1.1  christos       dp = &rm_table[dp->op[1].bytemode][modrm.rm];
   11000      1.1  christos       break;
   11001      1.1  christos 
   11002      1.1  christos     case USE_PREFIX_TABLE:
   11003      1.1  christos       if (need_vex)
   11004      1.1  christos 	{
   11005      1.1  christos 	  /* The prefix in VEX is implicit.  */
   11006      1.1  christos 	  switch (vex.prefix)
   11007      1.1  christos 	    {
   11008      1.1  christos 	    case 0:
   11009      1.1  christos 	      vindex = 0;
   11010      1.1  christos 	      break;
   11011      1.1  christos 	    case REPE_PREFIX_OPCODE:
   11012      1.1  christos 	      vindex = 1;
   11013      1.1  christos 	      break;
   11014      1.1  christos 	    case DATA_PREFIX_OPCODE:
   11015      1.1  christos 	      vindex = 2;
   11016      1.1  christos 	      break;
   11017      1.1  christos 	    case REPNE_PREFIX_OPCODE:
   11018      1.1  christos 	      vindex = 3;
   11019      1.1  christos 	      break;
   11020      1.1  christos 	    default:
   11021      1.1  christos 	      abort ();
   11022      1.1  christos 	      break;
   11023      1.1  christos 	    }
   11024      1.1  christos 	}
   11025  1.1.1.2  christos       else
   11026      1.1  christos 	{
   11027      1.1  christos 	  vindex = 0;
   11028      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_REPZ);
   11029      1.1  christos 	  if (prefixes & PREFIX_REPZ)
   11030      1.1  christos 	    {
   11031      1.1  christos 	      vindex = 1;
   11032      1.1  christos 	      all_prefixes[last_repz_prefix] = 0;
   11033      1.1  christos 	    }
   11034      1.1  christos 	  else
   11035      1.1  christos 	    {
   11036      1.1  christos 	      /* We should check PREFIX_REPNZ and PREFIX_REPZ before
   11037      1.1  christos 		 PREFIX_DATA.  */
   11038      1.1  christos 	      used_prefixes |= (prefixes & PREFIX_REPNZ);
   11039      1.1  christos 	      if (prefixes & PREFIX_REPNZ)
   11040      1.1  christos 		{
   11041      1.1  christos 		  vindex = 3;
   11042      1.1  christos 		  all_prefixes[last_repnz_prefix] = 0;
   11043      1.1  christos 		}
   11044      1.1  christos 	      else
   11045      1.1  christos 		{
   11046      1.1  christos 		  used_prefixes |= (prefixes & PREFIX_DATA);
   11047      1.1  christos 		  if (prefixes & PREFIX_DATA)
   11048      1.1  christos 		    {
   11049      1.1  christos 		      vindex = 2;
   11050      1.1  christos 		      all_prefixes[last_data_prefix] = 0;
   11051      1.1  christos 		    }
   11052      1.1  christos 		}
   11053      1.1  christos 	    }
   11054      1.1  christos 	}
   11055      1.1  christos       dp = &prefix_table[dp->op[1].bytemode][vindex];
   11056      1.1  christos       break;
   11057      1.1  christos 
   11058      1.1  christos     case USE_X86_64_TABLE:
   11059      1.1  christos       vindex = address_mode == mode_64bit ? 1 : 0;
   11060      1.1  christos       dp = &x86_64_table[dp->op[1].bytemode][vindex];
   11061      1.1  christos       break;
   11062      1.1  christos 
   11063      1.1  christos     case USE_3BYTE_TABLE:
   11064      1.1  christos       FETCH_DATA (info, codep + 2);
   11065      1.1  christos       vindex = *codep++;
   11066      1.1  christos       dp = &three_byte_table[dp->op[1].bytemode][vindex];
   11067      1.1  christos       modrm.mod = (*codep >> 6) & 3;
   11068      1.1  christos       modrm.reg = (*codep >> 3) & 7;
   11069      1.1  christos       modrm.rm = *codep & 7;
   11070      1.1  christos       break;
   11071      1.1  christos 
   11072      1.1  christos     case USE_VEX_LEN_TABLE:
   11073      1.1  christos       if (!need_vex)
   11074      1.1  christos 	abort ();
   11075      1.1  christos 
   11076      1.1  christos       switch (vex.length)
   11077      1.1  christos 	{
   11078      1.1  christos 	case 128:
   11079      1.1  christos 	  vindex = 0;
   11080      1.1  christos 	  break;
   11081      1.1  christos 	case 256:
   11082      1.1  christos 	  vindex = 1;
   11083      1.1  christos 	  break;
   11084      1.1  christos 	default:
   11085      1.1  christos 	  abort ();
   11086      1.1  christos 	  break;
   11087      1.1  christos 	}
   11088      1.1  christos 
   11089      1.1  christos       dp = &vex_len_table[dp->op[1].bytemode][vindex];
   11090      1.1  christos       break;
   11091      1.1  christos 
   11092      1.1  christos     case USE_XOP_8F_TABLE:
   11093      1.1  christos       FETCH_DATA (info, codep + 3);
   11094      1.1  christos       /* All bits in the REX prefix are ignored.  */
   11095      1.1  christos       rex_ignored = rex;
   11096      1.1  christos       rex = ~(*codep >> 5) & 0x7;
   11097      1.1  christos 
   11098      1.1  christos       /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm".  */
   11099      1.1  christos       switch ((*codep & 0x1f))
   11100      1.1  christos 	{
   11101      1.1  christos 	default:
   11102      1.1  christos 	  dp = &bad_opcode;
   11103      1.1  christos 	  return dp;
   11104      1.1  christos 	case 0x8:
   11105      1.1  christos 	  vex_table_index = XOP_08;
   11106      1.1  christos 	  break;
   11107      1.1  christos 	case 0x9:
   11108      1.1  christos 	  vex_table_index = XOP_09;
   11109      1.1  christos 	  break;
   11110      1.1  christos 	case 0xa:
   11111      1.1  christos 	  vex_table_index = XOP_0A;
   11112      1.1  christos 	  break;
   11113      1.1  christos 	}
   11114      1.1  christos       codep++;
   11115      1.1  christos       vex.w = *codep & 0x80;
   11116      1.1  christos       if (vex.w && address_mode == mode_64bit)
   11117      1.1  christos 	rex |= REX_W;
   11118      1.1  christos 
   11119      1.1  christos       vex.register_specifier = (~(*codep >> 3)) & 0xf;
   11120      1.1  christos       if (address_mode != mode_64bit
   11121      1.1  christos 	  && vex.register_specifier > 0x7)
   11122      1.1  christos 	{
   11123      1.1  christos 	  dp = &bad_opcode;
   11124      1.1  christos 	  return dp;
   11125      1.1  christos 	}
   11126      1.1  christos 
   11127      1.1  christos       vex.length = (*codep & 0x4) ? 256 : 128;
   11128      1.1  christos       switch ((*codep & 0x3))
   11129      1.1  christos 	{
   11130      1.1  christos 	case 0:
   11131      1.1  christos 	  vex.prefix = 0;
   11132      1.1  christos 	  break;
   11133      1.1  christos 	case 1:
   11134      1.1  christos 	  vex.prefix = DATA_PREFIX_OPCODE;
   11135      1.1  christos 	  break;
   11136      1.1  christos 	case 2:
   11137      1.1  christos 	  vex.prefix = REPE_PREFIX_OPCODE;
   11138      1.1  christos 	  break;
   11139      1.1  christos 	case 3:
   11140      1.1  christos 	  vex.prefix = REPNE_PREFIX_OPCODE;
   11141      1.1  christos 	  break;
   11142      1.1  christos 	}
   11143      1.1  christos       need_vex = 1;
   11144      1.1  christos       need_vex_reg = 1;
   11145      1.1  christos       codep++;
   11146      1.1  christos       vindex = *codep++;
   11147      1.1  christos       dp = &xop_table[vex_table_index][vindex];
   11148      1.1  christos 
   11149      1.1  christos       FETCH_DATA (info, codep + 1);
   11150      1.1  christos       modrm.mod = (*codep >> 6) & 3;
   11151      1.1  christos       modrm.reg = (*codep >> 3) & 7;
   11152      1.1  christos       modrm.rm = *codep & 7;
   11153      1.1  christos       break;
   11154      1.1  christos 
   11155      1.1  christos     case USE_VEX_C4_TABLE:
   11156      1.1  christos       FETCH_DATA (info, codep + 3);
   11157      1.1  christos       /* All bits in the REX prefix are ignored.  */
   11158      1.1  christos       rex_ignored = rex;
   11159      1.1  christos       rex = ~(*codep >> 5) & 0x7;
   11160      1.1  christos       switch ((*codep & 0x1f))
   11161      1.1  christos 	{
   11162      1.1  christos 	default:
   11163      1.1  christos 	  dp = &bad_opcode;
   11164      1.1  christos 	  return dp;
   11165      1.1  christos 	case 0x1:
   11166      1.1  christos 	  vex_table_index = VEX_0F;
   11167      1.1  christos 	  break;
   11168      1.1  christos 	case 0x2:
   11169      1.1  christos 	  vex_table_index = VEX_0F38;
   11170      1.1  christos 	  break;
   11171      1.1  christos 	case 0x3:
   11172      1.1  christos 	  vex_table_index = VEX_0F3A;
   11173      1.1  christos 	  break;
   11174      1.1  christos 	}
   11175      1.1  christos       codep++;
   11176      1.1  christos       vex.w = *codep & 0x80;
   11177      1.1  christos       if (vex.w && address_mode == mode_64bit)
   11178      1.1  christos 	rex |= REX_W;
   11179      1.1  christos 
   11180      1.1  christos       vex.register_specifier = (~(*codep >> 3)) & 0xf;
   11181      1.1  christos       if (address_mode != mode_64bit
   11182      1.1  christos 	  && vex.register_specifier > 0x7)
   11183      1.1  christos 	{
   11184      1.1  christos 	  dp = &bad_opcode;
   11185      1.1  christos 	  return dp;
   11186      1.1  christos 	}
   11187      1.1  christos 
   11188      1.1  christos       vex.length = (*codep & 0x4) ? 256 : 128;
   11189      1.1  christos       switch ((*codep & 0x3))
   11190      1.1  christos 	{
   11191      1.1  christos 	case 0:
   11192      1.1  christos 	  vex.prefix = 0;
   11193      1.1  christos 	  break;
   11194      1.1  christos 	case 1:
   11195      1.1  christos 	  vex.prefix = DATA_PREFIX_OPCODE;
   11196      1.1  christos 	  break;
   11197      1.1  christos 	case 2:
   11198      1.1  christos 	  vex.prefix = REPE_PREFIX_OPCODE;
   11199      1.1  christos 	  break;
   11200      1.1  christos 	case 3:
   11201      1.1  christos 	  vex.prefix = REPNE_PREFIX_OPCODE;
   11202      1.1  christos 	  break;
   11203      1.1  christos 	}
   11204      1.1  christos       need_vex = 1;
   11205      1.1  christos       need_vex_reg = 1;
   11206      1.1  christos       codep++;
   11207      1.1  christos       vindex = *codep++;
   11208      1.1  christos       dp = &vex_table[vex_table_index][vindex];
   11209      1.1  christos       /* There is no MODRM byte for VEX [82|77].  */
   11210      1.1  christos       if (vindex != 0x77 && vindex != 0x82)
   11211      1.1  christos 	{
   11212      1.1  christos 	  FETCH_DATA (info, codep + 1);
   11213      1.1  christos 	  modrm.mod = (*codep >> 6) & 3;
   11214      1.1  christos 	  modrm.reg = (*codep >> 3) & 7;
   11215      1.1  christos 	  modrm.rm = *codep & 7;
   11216      1.1  christos 	}
   11217      1.1  christos       break;
   11218      1.1  christos 
   11219      1.1  christos     case USE_VEX_C5_TABLE:
   11220      1.1  christos       FETCH_DATA (info, codep + 2);
   11221      1.1  christos       /* All bits in the REX prefix are ignored.  */
   11222      1.1  christos       rex_ignored = rex;
   11223      1.1  christos       rex = (*codep & 0x80) ? 0 : REX_R;
   11224      1.1  christos 
   11225      1.1  christos       vex.register_specifier = (~(*codep >> 3)) & 0xf;
   11226      1.1  christos       if (address_mode != mode_64bit
   11227      1.1  christos 	  && vex.register_specifier > 0x7)
   11228      1.1  christos 	{
   11229      1.1  christos 	  dp = &bad_opcode;
   11230      1.1  christos 	  return dp;
   11231      1.1  christos 	}
   11232      1.1  christos 
   11233      1.1  christos       vex.w = 0;
   11234      1.1  christos 
   11235      1.1  christos       vex.length = (*codep & 0x4) ? 256 : 128;
   11236      1.1  christos       switch ((*codep & 0x3))
   11237      1.1  christos 	{
   11238      1.1  christos 	case 0:
   11239      1.1  christos 	  vex.prefix = 0;
   11240      1.1  christos 	  break;
   11241      1.1  christos 	case 1:
   11242      1.1  christos 	  vex.prefix = DATA_PREFIX_OPCODE;
   11243      1.1  christos 	  break;
   11244      1.1  christos 	case 2:
   11245      1.1  christos 	  vex.prefix = REPE_PREFIX_OPCODE;
   11246      1.1  christos 	  break;
   11247      1.1  christos 	case 3:
   11248      1.1  christos 	  vex.prefix = REPNE_PREFIX_OPCODE;
   11249      1.1  christos 	  break;
   11250      1.1  christos 	}
   11251      1.1  christos       need_vex = 1;
   11252      1.1  christos       need_vex_reg = 1;
   11253      1.1  christos       codep++;
   11254      1.1  christos       vindex = *codep++;
   11255      1.1  christos       dp = &vex_table[dp->op[1].bytemode][vindex];
   11256      1.1  christos       /* There is no MODRM byte for VEX [82|77].  */
   11257      1.1  christos       if (vindex != 0x77 && vindex != 0x82)
   11258      1.1  christos 	{
   11259      1.1  christos 	  FETCH_DATA (info, codep + 1);
   11260      1.1  christos 	  modrm.mod = (*codep >> 6) & 3;
   11261      1.1  christos 	  modrm.reg = (*codep >> 3) & 7;
   11262      1.1  christos 	  modrm.rm = *codep & 7;
   11263      1.1  christos 	}
   11264      1.1  christos       break;
   11265      1.1  christos 
   11266      1.1  christos     case USE_VEX_W_TABLE:
   11267      1.1  christos       if (!need_vex)
   11268      1.1  christos 	abort ();
   11269      1.1  christos 
   11270      1.1  christos       dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
   11271      1.1  christos       break;
   11272      1.1  christos 
   11273      1.1  christos     case 0:
   11274      1.1  christos       dp = &bad_opcode;
   11275      1.1  christos       break;
   11276      1.1  christos 
   11277      1.1  christos     default:
   11278      1.1  christos       abort ();
   11279      1.1  christos     }
   11280      1.1  christos 
   11281      1.1  christos   if (dp->name != NULL)
   11282      1.1  christos     return dp;
   11283      1.1  christos   else
   11284      1.1  christos     return get_valid_dis386 (dp, info);
   11285      1.1  christos }
   11286      1.1  christos 
   11287      1.1  christos static void
   11288      1.1  christos get_sib (disassemble_info *info)
   11289      1.1  christos {
   11290      1.1  christos   /* If modrm.mod == 3, operand must be register.  */
   11291      1.1  christos   if (need_modrm
   11292      1.1  christos       && address_mode != mode_16bit
   11293      1.1  christos       && modrm.mod != 3
   11294      1.1  christos       && modrm.rm == 4)
   11295      1.1  christos     {
   11296      1.1  christos       FETCH_DATA (info, codep + 2);
   11297      1.1  christos       sib.index = (codep [1] >> 3) & 7;
   11298      1.1  christos       sib.scale = (codep [1] >> 6) & 3;
   11299      1.1  christos       sib.base = codep [1] & 7;
   11300      1.1  christos     }
   11301      1.1  christos }
   11302      1.1  christos 
   11303      1.1  christos static int
   11304      1.1  christos print_insn (bfd_vma pc, disassemble_info *info)
   11305      1.1  christos {
   11306      1.1  christos   const struct dis386 *dp;
   11307      1.1  christos   int i;
   11308      1.1  christos   char *op_txt[MAX_OPERANDS];
   11309      1.1  christos   int needcomma;
   11310      1.1  christos   int sizeflag;
   11311      1.1  christos   const char *p;
   11312      1.1  christos   struct dis_private priv;
   11313      1.1  christos   int prefix_length;
   11314      1.1  christos   int default_prefixes;
   11315      1.1  christos 
   11316  1.1.1.2  christos   priv.orig_sizeflag = AFLAG | DFLAG;
   11317  1.1.1.2  christos   if ((info->mach & bfd_mach_i386_i386) != 0)
   11318      1.1  christos     address_mode = mode_32bit;
   11319      1.1  christos   else if (info->mach == bfd_mach_i386_i8086)
   11320  1.1.1.2  christos     {
   11321  1.1.1.2  christos       address_mode = mode_16bit;
   11322  1.1.1.2  christos       priv.orig_sizeflag = 0;
   11323  1.1.1.2  christos     }
   11324      1.1  christos   else
   11325  1.1.1.2  christos     address_mode = mode_64bit;
   11326  1.1.1.2  christos 
   11327  1.1.1.2  christos   if (intel_syntax == (char) -1)
   11328  1.1.1.2  christos     intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
   11329      1.1  christos 
   11330      1.1  christos   for (p = info->disassembler_options; p != NULL; )
   11331      1.1  christos     {
   11332      1.1  christos       if (CONST_STRNEQ (p, "x86-64"))
   11333      1.1  christos 	{
   11334      1.1  christos 	  address_mode = mode_64bit;
   11335      1.1  christos 	  priv.orig_sizeflag = AFLAG | DFLAG;
   11336      1.1  christos 	}
   11337      1.1  christos       else if (CONST_STRNEQ (p, "i386"))
   11338      1.1  christos 	{
   11339      1.1  christos 	  address_mode = mode_32bit;
   11340      1.1  christos 	  priv.orig_sizeflag = AFLAG | DFLAG;
   11341      1.1  christos 	}
   11342      1.1  christos       else if (CONST_STRNEQ (p, "i8086"))
   11343      1.1  christos 	{
   11344      1.1  christos 	  address_mode = mode_16bit;
   11345      1.1  christos 	  priv.orig_sizeflag = 0;
   11346      1.1  christos 	}
   11347      1.1  christos       else if (CONST_STRNEQ (p, "intel"))
   11348      1.1  christos 	{
   11349      1.1  christos 	  intel_syntax = 1;
   11350      1.1  christos 	  if (CONST_STRNEQ (p + 5, "-mnemonic"))
   11351      1.1  christos 	    intel_mnemonic = 1;
   11352      1.1  christos 	}
   11353      1.1  christos       else if (CONST_STRNEQ (p, "att"))
   11354      1.1  christos 	{
   11355      1.1  christos 	  intel_syntax = 0;
   11356      1.1  christos 	  if (CONST_STRNEQ (p + 3, "-mnemonic"))
   11357      1.1  christos 	    intel_mnemonic = 0;
   11358      1.1  christos 	}
   11359      1.1  christos       else if (CONST_STRNEQ (p, "addr"))
   11360      1.1  christos 	{
   11361      1.1  christos 	  if (address_mode == mode_64bit)
   11362      1.1  christos 	    {
   11363      1.1  christos 	      if (p[4] == '3' && p[5] == '2')
   11364      1.1  christos 		priv.orig_sizeflag &= ~AFLAG;
   11365      1.1  christos 	      else if (p[4] == '6' && p[5] == '4')
   11366      1.1  christos 		priv.orig_sizeflag |= AFLAG;
   11367      1.1  christos 	    }
   11368      1.1  christos 	  else
   11369      1.1  christos 	    {
   11370      1.1  christos 	      if (p[4] == '1' && p[5] == '6')
   11371      1.1  christos 		priv.orig_sizeflag &= ~AFLAG;
   11372      1.1  christos 	      else if (p[4] == '3' && p[5] == '2')
   11373      1.1  christos 		priv.orig_sizeflag |= AFLAG;
   11374      1.1  christos 	    }
   11375      1.1  christos 	}
   11376      1.1  christos       else if (CONST_STRNEQ (p, "data"))
   11377      1.1  christos 	{
   11378      1.1  christos 	  if (p[4] == '1' && p[5] == '6')
   11379      1.1  christos 	    priv.orig_sizeflag &= ~DFLAG;
   11380      1.1  christos 	  else if (p[4] == '3' && p[5] == '2')
   11381      1.1  christos 	    priv.orig_sizeflag |= DFLAG;
   11382      1.1  christos 	}
   11383      1.1  christos       else if (CONST_STRNEQ (p, "suffix"))
   11384      1.1  christos 	priv.orig_sizeflag |= SUFFIX_ALWAYS;
   11385      1.1  christos 
   11386      1.1  christos       p = strchr (p, ',');
   11387      1.1  christos       if (p != NULL)
   11388      1.1  christos 	p++;
   11389      1.1  christos     }
   11390      1.1  christos 
   11391      1.1  christos   if (intel_syntax)
   11392      1.1  christos     {
   11393      1.1  christos       names64 = intel_names64;
   11394      1.1  christos       names32 = intel_names32;
   11395      1.1  christos       names16 = intel_names16;
   11396      1.1  christos       names8 = intel_names8;
   11397      1.1  christos       names8rex = intel_names8rex;
   11398      1.1  christos       names_seg = intel_names_seg;
   11399      1.1  christos       names_mm = intel_names_mm;
   11400      1.1  christos       names_xmm = intel_names_xmm;
   11401      1.1  christos       names_ymm = intel_names_ymm;
   11402      1.1  christos       index64 = intel_index64;
   11403      1.1  christos       index32 = intel_index32;
   11404      1.1  christos       index16 = intel_index16;
   11405      1.1  christos       open_char = '[';
   11406      1.1  christos       close_char = ']';
   11407      1.1  christos       separator_char = '+';
   11408      1.1  christos       scale_char = '*';
   11409      1.1  christos     }
   11410      1.1  christos   else
   11411      1.1  christos     {
   11412      1.1  christos       names64 = att_names64;
   11413      1.1  christos       names32 = att_names32;
   11414      1.1  christos       names16 = att_names16;
   11415      1.1  christos       names8 = att_names8;
   11416      1.1  christos       names8rex = att_names8rex;
   11417      1.1  christos       names_seg = att_names_seg;
   11418      1.1  christos       names_mm = att_names_mm;
   11419      1.1  christos       names_xmm = att_names_xmm;
   11420      1.1  christos       names_ymm = att_names_ymm;
   11421      1.1  christos       index64 = att_index64;
   11422      1.1  christos       index32 = att_index32;
   11423      1.1  christos       index16 = att_index16;
   11424      1.1  christos       open_char = '(';
   11425      1.1  christos       close_char =  ')';
   11426      1.1  christos       separator_char = ',';
   11427      1.1  christos       scale_char = ',';
   11428      1.1  christos     }
   11429      1.1  christos 
   11430      1.1  christos   /* The output looks better if we put 7 bytes on a line, since that
   11431      1.1  christos      puts most long word instructions on a single line.  Use 8 bytes
   11432      1.1  christos      for Intel L1OM.  */
   11433  1.1.1.2  christos   if ((info->mach & bfd_mach_l1om) != 0)
   11434      1.1  christos     info->bytes_per_line = 8;
   11435      1.1  christos   else
   11436      1.1  christos     info->bytes_per_line = 7;
   11437      1.1  christos 
   11438      1.1  christos   info->private_data = &priv;
   11439      1.1  christos   priv.max_fetched = priv.the_buffer;
   11440      1.1  christos   priv.insn_start = pc;
   11441      1.1  christos 
   11442      1.1  christos   obuf[0] = 0;
   11443      1.1  christos   for (i = 0; i < MAX_OPERANDS; ++i)
   11444      1.1  christos     {
   11445      1.1  christos       op_out[i][0] = 0;
   11446      1.1  christos       op_index[i] = -1;
   11447      1.1  christos     }
   11448      1.1  christos 
   11449      1.1  christos   the_info = info;
   11450      1.1  christos   start_pc = pc;
   11451      1.1  christos   start_codep = priv.the_buffer;
   11452      1.1  christos   codep = priv.the_buffer;
   11453      1.1  christos 
   11454      1.1  christos   if (setjmp (priv.bailout) != 0)
   11455      1.1  christos     {
   11456      1.1  christos       const char *name;
   11457      1.1  christos 
   11458      1.1  christos       /* Getting here means we tried for data but didn't get it.  That
   11459      1.1  christos 	 means we have an incomplete instruction of some sort.  Just
   11460      1.1  christos 	 print the first byte as a prefix or a .byte pseudo-op.  */
   11461      1.1  christos       if (codep > priv.the_buffer)
   11462      1.1  christos 	{
   11463      1.1  christos 	  name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
   11464      1.1  christos 	  if (name != NULL)
   11465      1.1  christos 	    (*info->fprintf_func) (info->stream, "%s", name);
   11466      1.1  christos 	  else
   11467      1.1  christos 	    {
   11468      1.1  christos 	      /* Just print the first byte as a .byte instruction.  */
   11469      1.1  christos 	      (*info->fprintf_func) (info->stream, ".byte 0x%x",
   11470      1.1  christos 				     (unsigned int) priv.the_buffer[0]);
   11471      1.1  christos 	    }
   11472      1.1  christos 
   11473      1.1  christos 	  return 1;
   11474      1.1  christos 	}
   11475      1.1  christos 
   11476      1.1  christos       return -1;
   11477      1.1  christos     }
   11478      1.1  christos 
   11479      1.1  christos   obufp = obuf;
   11480      1.1  christos   sizeflag = priv.orig_sizeflag;
   11481      1.1  christos 
   11482      1.1  christos   if (!ckprefix () || rex_used)
   11483      1.1  christos     {
   11484      1.1  christos       /* Too many prefixes or unused REX prefixes.  */
   11485      1.1  christos       for (i = 0;
   11486  1.1.1.2  christos 	   i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
   11487      1.1  christos 	   i++)
   11488  1.1.1.2  christos 	(*info->fprintf_func) (info->stream, "%s%s",
   11489  1.1.1.2  christos 			       i == 0 ? "" : " ",
   11490      1.1  christos 			       prefix_name (all_prefixes[i], sizeflag));
   11491  1.1.1.2  christos       return i;
   11492      1.1  christos     }
   11493      1.1  christos 
   11494      1.1  christos   insn_codep = codep;
   11495      1.1  christos 
   11496      1.1  christos   FETCH_DATA (info, codep + 1);
   11497      1.1  christos   two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
   11498      1.1  christos 
   11499      1.1  christos   if (((prefixes & PREFIX_FWAIT)
   11500      1.1  christos        && ((*codep < 0xd8) || (*codep > 0xdf))))
   11501      1.1  christos     {
   11502      1.1  christos       (*info->fprintf_func) (info->stream, "fwait");
   11503      1.1  christos       return 1;
   11504      1.1  christos     }
   11505      1.1  christos 
   11506      1.1  christos   if (*codep == 0x0f)
   11507      1.1  christos     {
   11508      1.1  christos       unsigned char threebyte;
   11509      1.1  christos       FETCH_DATA (info, codep + 2);
   11510      1.1  christos       threebyte = *++codep;
   11511      1.1  christos       dp = &dis386_twobyte[threebyte];
   11512      1.1  christos       need_modrm = twobyte_has_modrm[*codep];
   11513      1.1  christos       codep++;
   11514      1.1  christos     }
   11515      1.1  christos   else
   11516      1.1  christos     {
   11517      1.1  christos       dp = &dis386[*codep];
   11518      1.1  christos       need_modrm = onebyte_has_modrm[*codep];
   11519      1.1  christos       codep++;
   11520      1.1  christos     }
   11521      1.1  christos 
   11522      1.1  christos   if ((prefixes & PREFIX_REPZ))
   11523      1.1  christos     used_prefixes |= PREFIX_REPZ;
   11524      1.1  christos   if ((prefixes & PREFIX_REPNZ))
   11525      1.1  christos     used_prefixes |= PREFIX_REPNZ;
   11526      1.1  christos   if ((prefixes & PREFIX_LOCK))
   11527      1.1  christos     used_prefixes |= PREFIX_LOCK;
   11528      1.1  christos 
   11529      1.1  christos   default_prefixes = 0;
   11530      1.1  christos   if (prefixes & PREFIX_ADDR)
   11531      1.1  christos     {
   11532      1.1  christos       sizeflag ^= AFLAG;
   11533      1.1  christos       if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
   11534      1.1  christos 	{
   11535      1.1  christos 	  if ((sizeflag & AFLAG) || address_mode == mode_64bit)
   11536      1.1  christos 	    all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
   11537      1.1  christos 	  else
   11538      1.1  christos 	    all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
   11539      1.1  christos 	  default_prefixes |= PREFIX_ADDR;
   11540      1.1  christos 	}
   11541      1.1  christos     }
   11542      1.1  christos 
   11543      1.1  christos   if ((prefixes & PREFIX_DATA))
   11544      1.1  christos     {
   11545      1.1  christos       sizeflag ^= DFLAG;
   11546      1.1  christos       if (dp->op[2].bytemode == cond_jump_mode
   11547      1.1  christos 	  && dp->op[0].bytemode == v_mode
   11548      1.1  christos 	  && !intel_syntax)
   11549      1.1  christos 	{
   11550      1.1  christos 	  if (sizeflag & DFLAG)
   11551      1.1  christos 	    all_prefixes[last_data_prefix] = DATA32_PREFIX;
   11552      1.1  christos 	  else
   11553      1.1  christos 	    all_prefixes[last_data_prefix] = DATA16_PREFIX;
   11554      1.1  christos 	  default_prefixes |= PREFIX_DATA;
   11555      1.1  christos 	}
   11556      1.1  christos       else if (rex & REX_W)
   11557      1.1  christos 	{
   11558      1.1  christos 	  /* REX_W will override PREFIX_DATA.  */
   11559      1.1  christos 	  default_prefixes |= PREFIX_DATA;
   11560      1.1  christos 	}
   11561      1.1  christos     }
   11562      1.1  christos 
   11563      1.1  christos   if (need_modrm)
   11564      1.1  christos     {
   11565      1.1  christos       FETCH_DATA (info, codep + 1);
   11566      1.1  christos       modrm.mod = (*codep >> 6) & 3;
   11567      1.1  christos       modrm.reg = (*codep >> 3) & 7;
   11568      1.1  christos       modrm.rm = *codep & 7;
   11569      1.1  christos     }
   11570      1.1  christos 
   11571      1.1  christos   need_vex = 0;
   11572      1.1  christos   need_vex_reg = 0;
   11573      1.1  christos   vex_w_done = 0;
   11574      1.1  christos 
   11575      1.1  christos   if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
   11576      1.1  christos     {
   11577      1.1  christos       get_sib (info);
   11578      1.1  christos       dofloat (sizeflag);
   11579      1.1  christos     }
   11580      1.1  christos   else
   11581      1.1  christos     {
   11582      1.1  christos       dp = get_valid_dis386 (dp, info);
   11583      1.1  christos       if (dp != NULL && putop (dp->name, sizeflag) == 0)
   11584  1.1.1.2  christos 	{
   11585      1.1  christos 	  get_sib (info);
   11586      1.1  christos 	  for (i = 0; i < MAX_OPERANDS; ++i)
   11587      1.1  christos 	    {
   11588      1.1  christos 	      obufp = op_out[i];
   11589      1.1  christos 	      op_ad = MAX_OPERANDS - 1 - i;
   11590      1.1  christos 	      if (dp->op[i].rtn)
   11591      1.1  christos 		(*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
   11592      1.1  christos 	    }
   11593      1.1  christos 	}
   11594      1.1  christos     }
   11595      1.1  christos 
   11596      1.1  christos   /* See if any prefixes were not used.  If so, print the first one
   11597      1.1  christos      separately.  If we don't do this, we'll wind up printing an
   11598      1.1  christos      instruction stream which does not precisely correspond to the
   11599      1.1  christos      bytes we are disassembling.  */
   11600      1.1  christos   if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
   11601      1.1  christos     {
   11602      1.1  christos       for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
   11603      1.1  christos 	if (all_prefixes[i])
   11604      1.1  christos 	  {
   11605      1.1  christos 	    const char *name;
   11606      1.1  christos 	    name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
   11607      1.1  christos 	    if (name == NULL)
   11608      1.1  christos 	      name = INTERNAL_DISASSEMBLER_ERROR;
   11609      1.1  christos 	    (*info->fprintf_func) (info->stream, "%s", name);
   11610      1.1  christos 	    return 1;
   11611      1.1  christos 	  }
   11612      1.1  christos     }
   11613      1.1  christos 
   11614      1.1  christos   /* Check if the REX prefix is used.  */
   11615      1.1  christos   if (rex_ignored == 0 && (rex ^ rex_used) == 0)
   11616      1.1  christos     all_prefixes[last_rex_prefix] = 0;
   11617      1.1  christos 
   11618      1.1  christos   /* Check if the SEG prefix is used.  */
   11619      1.1  christos   if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
   11620      1.1  christos 		   | PREFIX_FS | PREFIX_GS)) != 0
   11621      1.1  christos       && (used_prefixes
   11622      1.1  christos 	  & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
   11623      1.1  christos     all_prefixes[last_seg_prefix] = 0;
   11624      1.1  christos 
   11625      1.1  christos   /* Check if the ADDR prefix is used.  */
   11626      1.1  christos   if ((prefixes & PREFIX_ADDR) != 0
   11627      1.1  christos       && (used_prefixes & PREFIX_ADDR) != 0)
   11628      1.1  christos     all_prefixes[last_addr_prefix] = 0;
   11629      1.1  christos 
   11630      1.1  christos   /* Check if the DATA prefix is used.  */
   11631      1.1  christos   if ((prefixes & PREFIX_DATA) != 0
   11632      1.1  christos       && (used_prefixes & PREFIX_DATA) != 0)
   11633      1.1  christos     all_prefixes[last_data_prefix] = 0;
   11634      1.1  christos 
   11635      1.1  christos   prefix_length = 0;
   11636      1.1  christos   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
   11637      1.1  christos     if (all_prefixes[i])
   11638      1.1  christos       {
   11639      1.1  christos 	const char *name;
   11640      1.1  christos 	name = prefix_name (all_prefixes[i], sizeflag);
   11641      1.1  christos 	if (name == NULL)
   11642      1.1  christos 	  abort ();
   11643      1.1  christos 	prefix_length += strlen (name) + 1;
   11644      1.1  christos 	(*info->fprintf_func) (info->stream, "%s ", name);
   11645      1.1  christos       }
   11646      1.1  christos 
   11647      1.1  christos   /* Check maximum code length.  */
   11648      1.1  christos   if ((codep - start_codep) > MAX_CODE_LENGTH)
   11649      1.1  christos     {
   11650      1.1  christos       (*info->fprintf_func) (info->stream, "(bad)");
   11651      1.1  christos       return MAX_CODE_LENGTH;
   11652      1.1  christos     }
   11653      1.1  christos 
   11654      1.1  christos   obufp = mnemonicendp;
   11655      1.1  christos   for (i = strlen (obuf) + prefix_length; i < 6; i++)
   11656      1.1  christos     oappend (" ");
   11657      1.1  christos   oappend (" ");
   11658      1.1  christos   (*info->fprintf_func) (info->stream, "%s", obuf);
   11659      1.1  christos 
   11660      1.1  christos   /* The enter and bound instructions are printed with operands in the same
   11661      1.1  christos      order as the intel book; everything else is printed in reverse order.  */
   11662      1.1  christos   if (intel_syntax || two_source_ops)
   11663      1.1  christos     {
   11664      1.1  christos       bfd_vma riprel;
   11665      1.1  christos 
   11666      1.1  christos       for (i = 0; i < MAX_OPERANDS; ++i)
   11667  1.1.1.2  christos 	op_txt[i] = op_out[i];
   11668      1.1  christos 
   11669      1.1  christos       for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
   11670      1.1  christos 	{
   11671  1.1.1.2  christos 	  op_ad = op_index[i];
   11672  1.1.1.2  christos 	  op_index[i] = op_index[MAX_OPERANDS - 1 - i];
   11673  1.1.1.2  christos 	  op_index[MAX_OPERANDS - 1 - i] = op_ad;
   11674      1.1  christos 	  riprel = op_riprel[i];
   11675      1.1  christos 	  op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
   11676      1.1  christos 	  op_riprel[MAX_OPERANDS - 1 - i] = riprel;
   11677      1.1  christos 	}
   11678      1.1  christos     }
   11679      1.1  christos   else
   11680      1.1  christos     {
   11681      1.1  christos       for (i = 0; i < MAX_OPERANDS; ++i)
   11682  1.1.1.2  christos 	op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
   11683      1.1  christos     }
   11684      1.1  christos 
   11685      1.1  christos   needcomma = 0;
   11686      1.1  christos   for (i = 0; i < MAX_OPERANDS; ++i)
   11687      1.1  christos     if (*op_txt[i])
   11688      1.1  christos       {
   11689      1.1  christos 	if (needcomma)
   11690      1.1  christos 	  (*info->fprintf_func) (info->stream, ",");
   11691      1.1  christos 	if (op_index[i] != -1 && !op_riprel[i])
   11692      1.1  christos 	  (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
   11693      1.1  christos 	else
   11694      1.1  christos 	  (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
   11695      1.1  christos 	needcomma = 1;
   11696      1.1  christos       }
   11697      1.1  christos 
   11698      1.1  christos   for (i = 0; i < MAX_OPERANDS; i++)
   11699      1.1  christos     if (op_index[i] != -1 && op_riprel[i])
   11700      1.1  christos       {
   11701      1.1  christos 	(*info->fprintf_func) (info->stream, "        # ");
   11702      1.1  christos 	(*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
   11703      1.1  christos 						+ op_address[op_index[i]]), info);
   11704      1.1  christos 	break;
   11705      1.1  christos       }
   11706      1.1  christos   return codep - priv.the_buffer;
   11707      1.1  christos }
   11708      1.1  christos 
   11709      1.1  christos static const char *float_mem[] = {
   11710      1.1  christos   /* d8 */
   11711      1.1  christos   "fadd{s|}",
   11712      1.1  christos   "fmul{s|}",
   11713      1.1  christos   "fcom{s|}",
   11714      1.1  christos   "fcomp{s|}",
   11715      1.1  christos   "fsub{s|}",
   11716      1.1  christos   "fsubr{s|}",
   11717      1.1  christos   "fdiv{s|}",
   11718      1.1  christos   "fdivr{s|}",
   11719      1.1  christos   /* d9 */
   11720      1.1  christos   "fld{s|}",
   11721      1.1  christos   "(bad)",
   11722      1.1  christos   "fst{s|}",
   11723      1.1  christos   "fstp{s|}",
   11724      1.1  christos   "fldenvIC",
   11725      1.1  christos   "fldcw",
   11726      1.1  christos   "fNstenvIC",
   11727      1.1  christos   "fNstcw",
   11728      1.1  christos   /* da */
   11729      1.1  christos   "fiadd{l|}",
   11730      1.1  christos   "fimul{l|}",
   11731      1.1  christos   "ficom{l|}",
   11732      1.1  christos   "ficomp{l|}",
   11733      1.1  christos   "fisub{l|}",
   11734      1.1  christos   "fisubr{l|}",
   11735      1.1  christos   "fidiv{l|}",
   11736      1.1  christos   "fidivr{l|}",
   11737      1.1  christos   /* db */
   11738      1.1  christos   "fild{l|}",
   11739      1.1  christos   "fisttp{l|}",
   11740      1.1  christos   "fist{l|}",
   11741      1.1  christos   "fistp{l|}",
   11742      1.1  christos   "(bad)",
   11743      1.1  christos   "fld{t||t|}",
   11744      1.1  christos   "(bad)",
   11745      1.1  christos   "fstp{t||t|}",
   11746      1.1  christos   /* dc */
   11747      1.1  christos   "fadd{l|}",
   11748      1.1  christos   "fmul{l|}",
   11749      1.1  christos   "fcom{l|}",
   11750      1.1  christos   "fcomp{l|}",
   11751      1.1  christos   "fsub{l|}",
   11752      1.1  christos   "fsubr{l|}",
   11753      1.1  christos   "fdiv{l|}",
   11754      1.1  christos   "fdivr{l|}",
   11755      1.1  christos   /* dd */
   11756      1.1  christos   "fld{l|}",
   11757      1.1  christos   "fisttp{ll|}",
   11758      1.1  christos   "fst{l||}",
   11759      1.1  christos   "fstp{l|}",
   11760      1.1  christos   "frstorIC",
   11761      1.1  christos   "(bad)",
   11762      1.1  christos   "fNsaveIC",
   11763      1.1  christos   "fNstsw",
   11764      1.1  christos   /* de */
   11765      1.1  christos   "fiadd",
   11766      1.1  christos   "fimul",
   11767      1.1  christos   "ficom",
   11768      1.1  christos   "ficomp",
   11769      1.1  christos   "fisub",
   11770      1.1  christos   "fisubr",
   11771      1.1  christos   "fidiv",
   11772      1.1  christos   "fidivr",
   11773      1.1  christos   /* df */
   11774      1.1  christos   "fild",
   11775      1.1  christos   "fisttp",
   11776      1.1  christos   "fist",
   11777      1.1  christos   "fistp",
   11778      1.1  christos   "fbld",
   11779      1.1  christos   "fild{ll|}",
   11780      1.1  christos   "fbstp",
   11781      1.1  christos   "fistp{ll|}",
   11782      1.1  christos };
   11783      1.1  christos 
   11784      1.1  christos static const unsigned char float_mem_mode[] = {
   11785      1.1  christos   /* d8 */
   11786      1.1  christos   d_mode,
   11787      1.1  christos   d_mode,
   11788      1.1  christos   d_mode,
   11789      1.1  christos   d_mode,
   11790      1.1  christos   d_mode,
   11791      1.1  christos   d_mode,
   11792      1.1  christos   d_mode,
   11793      1.1  christos   d_mode,
   11794      1.1  christos   /* d9 */
   11795      1.1  christos   d_mode,
   11796      1.1  christos   0,
   11797      1.1  christos   d_mode,
   11798      1.1  christos   d_mode,
   11799      1.1  christos   0,
   11800      1.1  christos   w_mode,
   11801      1.1  christos   0,
   11802      1.1  christos   w_mode,
   11803      1.1  christos   /* da */
   11804      1.1  christos   d_mode,
   11805      1.1  christos   d_mode,
   11806      1.1  christos   d_mode,
   11807      1.1  christos   d_mode,
   11808      1.1  christos   d_mode,
   11809      1.1  christos   d_mode,
   11810      1.1  christos   d_mode,
   11811      1.1  christos   d_mode,
   11812      1.1  christos   /* db */
   11813      1.1  christos   d_mode,
   11814      1.1  christos   d_mode,
   11815      1.1  christos   d_mode,
   11816      1.1  christos   d_mode,
   11817      1.1  christos   0,
   11818      1.1  christos   t_mode,
   11819      1.1  christos   0,
   11820      1.1  christos   t_mode,
   11821      1.1  christos   /* dc */
   11822      1.1  christos   q_mode,
   11823      1.1  christos   q_mode,
   11824      1.1  christos   q_mode,
   11825      1.1  christos   q_mode,
   11826      1.1  christos   q_mode,
   11827      1.1  christos   q_mode,
   11828      1.1  christos   q_mode,
   11829      1.1  christos   q_mode,
   11830      1.1  christos   /* dd */
   11831      1.1  christos   q_mode,
   11832      1.1  christos   q_mode,
   11833      1.1  christos   q_mode,
   11834      1.1  christos   q_mode,
   11835      1.1  christos   0,
   11836      1.1  christos   0,
   11837      1.1  christos   0,
   11838      1.1  christos   w_mode,
   11839      1.1  christos   /* de */
   11840      1.1  christos   w_mode,
   11841      1.1  christos   w_mode,
   11842      1.1  christos   w_mode,
   11843      1.1  christos   w_mode,
   11844      1.1  christos   w_mode,
   11845      1.1  christos   w_mode,
   11846      1.1  christos   w_mode,
   11847      1.1  christos   w_mode,
   11848      1.1  christos   /* df */
   11849      1.1  christos   w_mode,
   11850      1.1  christos   w_mode,
   11851      1.1  christos   w_mode,
   11852      1.1  christos   w_mode,
   11853      1.1  christos   t_mode,
   11854      1.1  christos   q_mode,
   11855      1.1  christos   t_mode,
   11856      1.1  christos   q_mode
   11857      1.1  christos };
   11858      1.1  christos 
   11859      1.1  christos #define ST { OP_ST, 0 }
   11860      1.1  christos #define STi { OP_STi, 0 }
   11861      1.1  christos 
   11862      1.1  christos #define FGRPd9_2 NULL, { { NULL, 0 } }
   11863      1.1  christos #define FGRPd9_4 NULL, { { NULL, 1 } }
   11864      1.1  christos #define FGRPd9_5 NULL, { { NULL, 2 } }
   11865      1.1  christos #define FGRPd9_6 NULL, { { NULL, 3 } }
   11866      1.1  christos #define FGRPd9_7 NULL, { { NULL, 4 } }
   11867      1.1  christos #define FGRPda_5 NULL, { { NULL, 5 } }
   11868      1.1  christos #define FGRPdb_4 NULL, { { NULL, 6 } }
   11869      1.1  christos #define FGRPde_3 NULL, { { NULL, 7 } }
   11870      1.1  christos #define FGRPdf_4 NULL, { { NULL, 8 } }
   11871      1.1  christos 
   11872      1.1  christos static const struct dis386 float_reg[][8] = {
   11873      1.1  christos   /* d8 */
   11874      1.1  christos   {
   11875      1.1  christos     { "fadd",	{ ST, STi } },
   11876      1.1  christos     { "fmul",	{ ST, STi } },
   11877      1.1  christos     { "fcom",	{ STi } },
   11878      1.1  christos     { "fcomp",	{ STi } },
   11879      1.1  christos     { "fsub",	{ ST, STi } },
   11880      1.1  christos     { "fsubr",	{ ST, STi } },
   11881      1.1  christos     { "fdiv",	{ ST, STi } },
   11882      1.1  christos     { "fdivr",	{ ST, STi } },
   11883      1.1  christos   },
   11884      1.1  christos   /* d9 */
   11885      1.1  christos   {
   11886      1.1  christos     { "fld",	{ STi } },
   11887      1.1  christos     { "fxch",	{ STi } },
   11888      1.1  christos     { FGRPd9_2 },
   11889      1.1  christos     { Bad_Opcode },
   11890      1.1  christos     { FGRPd9_4 },
   11891      1.1  christos     { FGRPd9_5 },
   11892      1.1  christos     { FGRPd9_6 },
   11893      1.1  christos     { FGRPd9_7 },
   11894      1.1  christos   },
   11895      1.1  christos   /* da */
   11896      1.1  christos   {
   11897      1.1  christos     { "fcmovb",	{ ST, STi } },
   11898      1.1  christos     { "fcmove",	{ ST, STi } },
   11899      1.1  christos     { "fcmovbe",{ ST, STi } },
   11900      1.1  christos     { "fcmovu",	{ ST, STi } },
   11901      1.1  christos     { Bad_Opcode },
   11902      1.1  christos     { FGRPda_5 },
   11903      1.1  christos     { Bad_Opcode },
   11904      1.1  christos     { Bad_Opcode },
   11905      1.1  christos   },
   11906      1.1  christos   /* db */
   11907      1.1  christos   {
   11908      1.1  christos     { "fcmovnb",{ ST, STi } },
   11909      1.1  christos     { "fcmovne",{ ST, STi } },
   11910      1.1  christos     { "fcmovnbe",{ ST, STi } },
   11911      1.1  christos     { "fcmovnu",{ ST, STi } },
   11912      1.1  christos     { FGRPdb_4 },
   11913      1.1  christos     { "fucomi",	{ ST, STi } },
   11914      1.1  christos     { "fcomi",	{ ST, STi } },
   11915      1.1  christos     { Bad_Opcode },
   11916      1.1  christos   },
   11917      1.1  christos   /* dc */
   11918      1.1  christos   {
   11919      1.1  christos     { "fadd",	{ STi, ST } },
   11920      1.1  christos     { "fmul",	{ STi, ST } },
   11921      1.1  christos     { Bad_Opcode },
   11922      1.1  christos     { Bad_Opcode },
   11923      1.1  christos     { "fsub!M",	{ STi, ST } },
   11924      1.1  christos     { "fsubM",	{ STi, ST } },
   11925      1.1  christos     { "fdiv!M",	{ STi, ST } },
   11926      1.1  christos     { "fdivM",	{ STi, ST } },
   11927      1.1  christos   },
   11928      1.1  christos   /* dd */
   11929      1.1  christos   {
   11930      1.1  christos     { "ffree",	{ STi } },
   11931      1.1  christos     { Bad_Opcode },
   11932      1.1  christos     { "fst",	{ STi } },
   11933      1.1  christos     { "fstp",	{ STi } },
   11934      1.1  christos     { "fucom",	{ STi } },
   11935      1.1  christos     { "fucomp",	{ STi } },
   11936      1.1  christos     { Bad_Opcode },
   11937      1.1  christos     { Bad_Opcode },
   11938      1.1  christos   },
   11939      1.1  christos   /* de */
   11940      1.1  christos   {
   11941      1.1  christos     { "faddp",	{ STi, ST } },
   11942      1.1  christos     { "fmulp",	{ STi, ST } },
   11943      1.1  christos     { Bad_Opcode },
   11944      1.1  christos     { FGRPde_3 },
   11945      1.1  christos     { "fsub!Mp", { STi, ST } },
   11946      1.1  christos     { "fsubMp",	{ STi, ST } },
   11947      1.1  christos     { "fdiv!Mp", { STi, ST } },
   11948      1.1  christos     { "fdivMp",	{ STi, ST } },
   11949      1.1  christos   },
   11950      1.1  christos   /* df */
   11951      1.1  christos   {
   11952      1.1  christos     { "ffreep",	{ STi } },
   11953      1.1  christos     { Bad_Opcode },
   11954      1.1  christos     { Bad_Opcode },
   11955      1.1  christos     { Bad_Opcode },
   11956      1.1  christos     { FGRPdf_4 },
   11957      1.1  christos     { "fucomip", { ST, STi } },
   11958      1.1  christos     { "fcomip", { ST, STi } },
   11959      1.1  christos     { Bad_Opcode },
   11960      1.1  christos   },
   11961      1.1  christos };
   11962      1.1  christos 
   11963      1.1  christos static char *fgrps[][8] = {
   11964      1.1  christos   /* d9_2  0 */
   11965      1.1  christos   {
   11966      1.1  christos     "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
   11967      1.1  christos   },
   11968      1.1  christos 
   11969      1.1  christos   /* d9_4  1 */
   11970      1.1  christos   {
   11971      1.1  christos     "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
   11972      1.1  christos   },
   11973      1.1  christos 
   11974      1.1  christos   /* d9_5  2 */
   11975      1.1  christos   {
   11976      1.1  christos     "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
   11977      1.1  christos   },
   11978      1.1  christos 
   11979      1.1  christos   /* d9_6  3 */
   11980      1.1  christos   {
   11981      1.1  christos     "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
   11982      1.1  christos   },
   11983      1.1  christos 
   11984      1.1  christos   /* d9_7  4 */
   11985      1.1  christos   {
   11986      1.1  christos     "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
   11987      1.1  christos   },
   11988      1.1  christos 
   11989      1.1  christos   /* da_5  5 */
   11990      1.1  christos   {
   11991      1.1  christos     "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
   11992      1.1  christos   },
   11993      1.1  christos 
   11994      1.1  christos   /* db_4  6 */
   11995      1.1  christos   {
   11996      1.1  christos     "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
   11997      1.1  christos     "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
   11998      1.1  christos   },
   11999      1.1  christos 
   12000      1.1  christos   /* de_3  7 */
   12001      1.1  christos   {
   12002      1.1  christos     "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
   12003      1.1  christos   },
   12004      1.1  christos 
   12005      1.1  christos   /* df_4  8 */
   12006      1.1  christos   {
   12007      1.1  christos     "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
   12008      1.1  christos   },
   12009      1.1  christos };
   12010      1.1  christos 
   12011      1.1  christos static void
   12012      1.1  christos swap_operand (void)
   12013      1.1  christos {
   12014      1.1  christos   mnemonicendp[0] = '.';
   12015      1.1  christos   mnemonicendp[1] = 's';
   12016      1.1  christos   mnemonicendp += 2;
   12017      1.1  christos }
   12018      1.1  christos 
   12019      1.1  christos static void
   12020      1.1  christos OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
   12021      1.1  christos 	       int sizeflag ATTRIBUTE_UNUSED)
   12022      1.1  christos {
   12023      1.1  christos   /* Skip mod/rm byte.  */
   12024      1.1  christos   MODRM_CHECK;
   12025      1.1  christos   codep++;
   12026      1.1  christos }
   12027      1.1  christos 
   12028      1.1  christos static void
   12029      1.1  christos dofloat (int sizeflag)
   12030      1.1  christos {
   12031      1.1  christos   const struct dis386 *dp;
   12032      1.1  christos   unsigned char floatop;
   12033      1.1  christos 
   12034      1.1  christos   floatop = codep[-1];
   12035      1.1  christos 
   12036      1.1  christos   if (modrm.mod != 3)
   12037      1.1  christos     {
   12038      1.1  christos       int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
   12039      1.1  christos 
   12040      1.1  christos       putop (float_mem[fp_indx], sizeflag);
   12041      1.1  christos       obufp = op_out[0];
   12042      1.1  christos       op_ad = 2;
   12043      1.1  christos       OP_E (float_mem_mode[fp_indx], sizeflag);
   12044      1.1  christos       return;
   12045      1.1  christos     }
   12046      1.1  christos   /* Skip mod/rm byte.  */
   12047      1.1  christos   MODRM_CHECK;
   12048      1.1  christos   codep++;
   12049      1.1  christos 
   12050      1.1  christos   dp = &float_reg[floatop - 0xd8][modrm.reg];
   12051      1.1  christos   if (dp->name == NULL)
   12052      1.1  christos     {
   12053      1.1  christos       putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
   12054      1.1  christos 
   12055      1.1  christos       /* Instruction fnstsw is only one with strange arg.  */
   12056      1.1  christos       if (floatop == 0xdf && codep[-1] == 0xe0)
   12057      1.1  christos 	strcpy (op_out[0], names16[0]);
   12058      1.1  christos     }
   12059      1.1  christos   else
   12060      1.1  christos     {
   12061      1.1  christos       putop (dp->name, sizeflag);
   12062      1.1  christos 
   12063      1.1  christos       obufp = op_out[0];
   12064      1.1  christos       op_ad = 2;
   12065      1.1  christos       if (dp->op[0].rtn)
   12066      1.1  christos 	(*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
   12067      1.1  christos 
   12068      1.1  christos       obufp = op_out[1];
   12069      1.1  christos       op_ad = 1;
   12070      1.1  christos       if (dp->op[1].rtn)
   12071      1.1  christos 	(*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
   12072      1.1  christos     }
   12073      1.1  christos }
   12074      1.1  christos 
   12075      1.1  christos static void
   12076      1.1  christos OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   12077      1.1  christos {
   12078      1.1  christos   oappend ("%st" + intel_syntax);
   12079      1.1  christos }
   12080      1.1  christos 
   12081      1.1  christos static void
   12082      1.1  christos OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   12083      1.1  christos {
   12084      1.1  christos   sprintf (scratchbuf, "%%st(%d)", modrm.rm);
   12085      1.1  christos   oappend (scratchbuf + intel_syntax);
   12086      1.1  christos }
   12087      1.1  christos 
   12088      1.1  christos /* Capital letters in template are macros.  */
   12089      1.1  christos static int
   12090      1.1  christos putop (const char *in_template, int sizeflag)
   12091      1.1  christos {
   12092      1.1  christos   const char *p;
   12093      1.1  christos   int alt = 0;
   12094      1.1  christos   int cond = 1;
   12095      1.1  christos   unsigned int l = 0, len = 1;
   12096      1.1  christos   char last[4];
   12097      1.1  christos 
   12098      1.1  christos #define SAVE_LAST(c)			\
   12099      1.1  christos   if (l < len && l < sizeof (last))	\
   12100      1.1  christos     last[l++] = c;			\
   12101      1.1  christos   else					\
   12102      1.1  christos     abort ();
   12103      1.1  christos 
   12104      1.1  christos   for (p = in_template; *p; p++)
   12105      1.1  christos     {
   12106      1.1  christos       switch (*p)
   12107      1.1  christos 	{
   12108      1.1  christos 	default:
   12109      1.1  christos 	  *obufp++ = *p;
   12110      1.1  christos 	  break;
   12111      1.1  christos 	case '%':
   12112      1.1  christos 	  len++;
   12113      1.1  christos 	  break;
   12114      1.1  christos 	case '!':
   12115      1.1  christos 	  cond = 0;
   12116      1.1  christos 	  break;
   12117      1.1  christos 	case '{':
   12118      1.1  christos 	  alt = 0;
   12119      1.1  christos 	  if (intel_syntax)
   12120      1.1  christos 	    {
   12121      1.1  christos 	      while (*++p != '|')
   12122      1.1  christos 		if (*p == '}' || *p == '\0')
   12123      1.1  christos 		  abort ();
   12124      1.1  christos 	    }
   12125      1.1  christos 	  /* Fall through.  */
   12126      1.1  christos 	case 'I':
   12127      1.1  christos 	  alt = 1;
   12128      1.1  christos 	  continue;
   12129      1.1  christos 	case '|':
   12130      1.1  christos 	  while (*++p != '}')
   12131      1.1  christos 	    {
   12132      1.1  christos 	      if (*p == '\0')
   12133      1.1  christos 		abort ();
   12134      1.1  christos 	    }
   12135      1.1  christos 	  break;
   12136      1.1  christos 	case '}':
   12137      1.1  christos 	  break;
   12138      1.1  christos 	case 'A':
   12139      1.1  christos 	  if (intel_syntax)
   12140      1.1  christos 	    break;
   12141      1.1  christos 	  if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
   12142      1.1  christos 	    *obufp++ = 'b';
   12143      1.1  christos 	  break;
   12144      1.1  christos 	case 'B':
   12145      1.1  christos 	  if (l == 0 && len == 1)
   12146      1.1  christos 	    {
   12147      1.1  christos case_B:
   12148      1.1  christos 	      if (intel_syntax)
   12149      1.1  christos 		break;
   12150      1.1  christos 	      if (sizeflag & SUFFIX_ALWAYS)
   12151      1.1  christos 		*obufp++ = 'b';
   12152      1.1  christos 	    }
   12153      1.1  christos 	  else
   12154      1.1  christos 	    {
   12155      1.1  christos 	      if (l != 1
   12156      1.1  christos 		  || len != 2
   12157      1.1  christos 		  || last[0] != 'L')
   12158      1.1  christos 		{
   12159      1.1  christos 		  SAVE_LAST (*p);
   12160      1.1  christos 		  break;
   12161      1.1  christos 		}
   12162      1.1  christos 
   12163      1.1  christos 	      if (address_mode == mode_64bit
   12164      1.1  christos 		  && !(prefixes & PREFIX_ADDR))
   12165      1.1  christos 		{
   12166      1.1  christos 		  *obufp++ = 'a';
   12167      1.1  christos 		  *obufp++ = 'b';
   12168      1.1  christos 		  *obufp++ = 's';
   12169      1.1  christos 		}
   12170      1.1  christos 
   12171      1.1  christos 	      goto case_B;
   12172      1.1  christos 	    }
   12173      1.1  christos 	  break;
   12174      1.1  christos 	case 'C':
   12175      1.1  christos 	  if (intel_syntax && !alt)
   12176      1.1  christos 	    break;
   12177      1.1  christos 	  if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
   12178      1.1  christos 	    {
   12179      1.1  christos 	      if (sizeflag & DFLAG)
   12180      1.1  christos 		*obufp++ = intel_syntax ? 'd' : 'l';
   12181      1.1  christos 	      else
   12182      1.1  christos 		*obufp++ = intel_syntax ? 'w' : 's';
   12183      1.1  christos 	      used_prefixes |= (prefixes & PREFIX_DATA);
   12184      1.1  christos 	    }
   12185      1.1  christos 	  break;
   12186      1.1  christos 	case 'D':
   12187      1.1  christos 	  if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
   12188      1.1  christos 	    break;
   12189      1.1  christos 	  USED_REX (REX_W);
   12190      1.1  christos 	  if (modrm.mod == 3)
   12191      1.1  christos 	    {
   12192      1.1  christos 	      if (rex & REX_W)
   12193      1.1  christos 		*obufp++ = 'q';
   12194      1.1  christos 	      else
   12195      1.1  christos 		{
   12196      1.1  christos 		  if (sizeflag & DFLAG)
   12197      1.1  christos 		    *obufp++ = intel_syntax ? 'd' : 'l';
   12198      1.1  christos 		  else
   12199      1.1  christos 		    *obufp++ = 'w';
   12200      1.1  christos 		  used_prefixes |= (prefixes & PREFIX_DATA);
   12201      1.1  christos 		}
   12202      1.1  christos 	    }
   12203      1.1  christos 	  else
   12204      1.1  christos 	    *obufp++ = 'w';
   12205      1.1  christos 	  break;
   12206      1.1  christos 	case 'E':		/* For jcxz/jecxz */
   12207      1.1  christos 	  if (address_mode == mode_64bit)
   12208      1.1  christos 	    {
   12209      1.1  christos 	      if (sizeflag & AFLAG)
   12210      1.1  christos 		*obufp++ = 'r';
   12211      1.1  christos 	      else
   12212      1.1  christos 		*obufp++ = 'e';
   12213      1.1  christos 	    }
   12214      1.1  christos 	  else
   12215      1.1  christos 	    if (sizeflag & AFLAG)
   12216      1.1  christos 	      *obufp++ = 'e';
   12217      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_ADDR);
   12218      1.1  christos 	  break;
   12219      1.1  christos 	case 'F':
   12220      1.1  christos 	  if (intel_syntax)
   12221      1.1  christos 	    break;
   12222      1.1  christos 	  if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
   12223      1.1  christos 	    {
   12224      1.1  christos 	      if (sizeflag & AFLAG)
   12225      1.1  christos 		*obufp++ = address_mode == mode_64bit ? 'q' : 'l';
   12226      1.1  christos 	      else
   12227      1.1  christos 		*obufp++ = address_mode == mode_64bit ? 'l' : 'w';
   12228      1.1  christos 	      used_prefixes |= (prefixes & PREFIX_ADDR);
   12229      1.1  christos 	    }
   12230      1.1  christos 	  break;
   12231      1.1  christos 	case 'G':
   12232      1.1  christos 	  if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
   12233      1.1  christos 	    break;
   12234      1.1  christos 	  if ((rex & REX_W) || (sizeflag & DFLAG))
   12235      1.1  christos 	    *obufp++ = 'l';
   12236      1.1  christos 	  else
   12237      1.1  christos 	    *obufp++ = 'w';
   12238      1.1  christos 	  if (!(rex & REX_W))
   12239      1.1  christos 	    used_prefixes |= (prefixes & PREFIX_DATA);
   12240      1.1  christos 	  break;
   12241      1.1  christos 	case 'H':
   12242      1.1  christos 	  if (intel_syntax)
   12243      1.1  christos 	    break;
   12244      1.1  christos 	  if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
   12245      1.1  christos 	      || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
   12246      1.1  christos 	    {
   12247      1.1  christos 	      used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
   12248      1.1  christos 	      *obufp++ = ',';
   12249      1.1  christos 	      *obufp++ = 'p';
   12250      1.1  christos 	      if (prefixes & PREFIX_DS)
   12251      1.1  christos 		*obufp++ = 't';
   12252      1.1  christos 	      else
   12253      1.1  christos 		*obufp++ = 'n';
   12254      1.1  christos 	    }
   12255      1.1  christos 	  break;
   12256      1.1  christos 	case 'J':
   12257      1.1  christos 	  if (intel_syntax)
   12258      1.1  christos 	    break;
   12259      1.1  christos 	  *obufp++ = 'l';
   12260      1.1  christos 	  break;
   12261      1.1  christos 	case 'K':
   12262      1.1  christos 	  USED_REX (REX_W);
   12263      1.1  christos 	  if (rex & REX_W)
   12264      1.1  christos 	    *obufp++ = 'q';
   12265      1.1  christos 	  else
   12266      1.1  christos 	    *obufp++ = 'd';
   12267      1.1  christos 	  break;
   12268      1.1  christos 	case 'Z':
   12269      1.1  christos 	  if (intel_syntax)
   12270      1.1  christos 	    break;
   12271      1.1  christos 	  if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
   12272      1.1  christos 	    {
   12273      1.1  christos 	      *obufp++ = 'q';
   12274      1.1  christos 	      break;
   12275      1.1  christos 	    }
   12276      1.1  christos 	  /* Fall through.  */
   12277      1.1  christos 	  goto case_L;
   12278      1.1  christos 	case 'L':
   12279      1.1  christos 	  if (l != 0 || len != 1)
   12280      1.1  christos 	    {
   12281      1.1  christos 	      SAVE_LAST (*p);
   12282      1.1  christos 	      break;
   12283      1.1  christos 	    }
   12284      1.1  christos case_L:
   12285      1.1  christos 	  if (intel_syntax)
   12286      1.1  christos 	    break;
   12287      1.1  christos 	  if (sizeflag & SUFFIX_ALWAYS)
   12288      1.1  christos 	    *obufp++ = 'l';
   12289      1.1  christos 	  break;
   12290      1.1  christos 	case 'M':
   12291      1.1  christos 	  if (intel_mnemonic != cond)
   12292      1.1  christos 	    *obufp++ = 'r';
   12293      1.1  christos 	  break;
   12294      1.1  christos 	case 'N':
   12295      1.1  christos 	  if ((prefixes & PREFIX_FWAIT) == 0)
   12296      1.1  christos 	    *obufp++ = 'n';
   12297      1.1  christos 	  else
   12298      1.1  christos 	    used_prefixes |= PREFIX_FWAIT;
   12299      1.1  christos 	  break;
   12300      1.1  christos 	case 'O':
   12301      1.1  christos 	  USED_REX (REX_W);
   12302      1.1  christos 	  if (rex & REX_W)
   12303      1.1  christos 	    *obufp++ = 'o';
   12304      1.1  christos 	  else if (intel_syntax && (sizeflag & DFLAG))
   12305      1.1  christos 	    *obufp++ = 'q';
   12306      1.1  christos 	  else
   12307      1.1  christos 	    *obufp++ = 'd';
   12308      1.1  christos 	  if (!(rex & REX_W))
   12309      1.1  christos 	    used_prefixes |= (prefixes & PREFIX_DATA);
   12310      1.1  christos 	  break;
   12311      1.1  christos 	case 'T':
   12312      1.1  christos 	  if (!intel_syntax
   12313      1.1  christos 	      && address_mode == mode_64bit
   12314  1.1.1.2  christos 	      && ((sizeflag & DFLAG) || (rex & REX_W)))
   12315      1.1  christos 	    {
   12316      1.1  christos 	      *obufp++ = 'q';
   12317      1.1  christos 	      break;
   12318      1.1  christos 	    }
   12319      1.1  christos 	  /* Fall through.  */
   12320      1.1  christos 	case 'P':
   12321      1.1  christos 	  if (intel_syntax)
   12322      1.1  christos 	    {
   12323      1.1  christos 	      if ((rex & REX_W) == 0
   12324      1.1  christos 		  && (prefixes & PREFIX_DATA))
   12325      1.1  christos 		{
   12326      1.1  christos 		  if ((sizeflag & DFLAG) == 0)
   12327      1.1  christos 		    *obufp++ = 'w';
   12328      1.1  christos 		   used_prefixes |= (prefixes & PREFIX_DATA);
   12329      1.1  christos 		}
   12330      1.1  christos 	      break;
   12331      1.1  christos 	    }
   12332      1.1  christos 	  if ((prefixes & PREFIX_DATA)
   12333      1.1  christos 	      || (rex & REX_W)
   12334      1.1  christos 	      || (sizeflag & SUFFIX_ALWAYS))
   12335      1.1  christos 	    {
   12336      1.1  christos 	      USED_REX (REX_W);
   12337      1.1  christos 	      if (rex & REX_W)
   12338      1.1  christos 		*obufp++ = 'q';
   12339      1.1  christos 	      else
   12340      1.1  christos 		{
   12341      1.1  christos 		   if (sizeflag & DFLAG)
   12342      1.1  christos 		      *obufp++ = 'l';
   12343      1.1  christos 		   else
   12344      1.1  christos 		     *obufp++ = 'w';
   12345      1.1  christos 		   used_prefixes |= (prefixes & PREFIX_DATA);
   12346      1.1  christos 		}
   12347      1.1  christos 	    }
   12348      1.1  christos 	  break;
   12349      1.1  christos 	case 'U':
   12350      1.1  christos 	  if (intel_syntax)
   12351      1.1  christos 	    break;
   12352  1.1.1.2  christos 	  if (address_mode == mode_64bit
   12353  1.1.1.2  christos 	      && ((sizeflag & DFLAG) || (rex & REX_W)))
   12354      1.1  christos 	    {
   12355      1.1  christos 	      if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
   12356      1.1  christos 		*obufp++ = 'q';
   12357      1.1  christos 	      break;
   12358      1.1  christos 	    }
   12359      1.1  christos 	  /* Fall through.  */
   12360      1.1  christos 	  goto case_Q;
   12361      1.1  christos 	case 'Q':
   12362      1.1  christos 	  if (l == 0 && len == 1)
   12363      1.1  christos 	    {
   12364      1.1  christos case_Q:
   12365      1.1  christos 	      if (intel_syntax && !alt)
   12366      1.1  christos 		break;
   12367      1.1  christos 	      USED_REX (REX_W);
   12368      1.1  christos 	      if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
   12369      1.1  christos 		{
   12370      1.1  christos 		  if (rex & REX_W)
   12371      1.1  christos 		    *obufp++ = 'q';
   12372      1.1  christos 		  else
   12373      1.1  christos 		    {
   12374      1.1  christos 		      if (sizeflag & DFLAG)
   12375      1.1  christos 			*obufp++ = intel_syntax ? 'd' : 'l';
   12376      1.1  christos 		      else
   12377      1.1  christos 			*obufp++ = 'w';
   12378      1.1  christos 		      used_prefixes |= (prefixes & PREFIX_DATA);
   12379      1.1  christos 		    }
   12380      1.1  christos 		}
   12381      1.1  christos 	    }
   12382      1.1  christos 	  else
   12383      1.1  christos 	    {
   12384      1.1  christos 	      if (l != 1 || len != 2 || last[0] != 'L')
   12385      1.1  christos 		{
   12386      1.1  christos 		  SAVE_LAST (*p);
   12387      1.1  christos 		  break;
   12388      1.1  christos 		}
   12389      1.1  christos 	      if (intel_syntax
   12390      1.1  christos 		  || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
   12391      1.1  christos 		break;
   12392      1.1  christos 	      if ((rex & REX_W))
   12393      1.1  christos 		{
   12394      1.1  christos 		  USED_REX (REX_W);
   12395      1.1  christos 		  *obufp++ = 'q';
   12396      1.1  christos 		}
   12397      1.1  christos 	      else
   12398      1.1  christos 		*obufp++ = 'l';
   12399      1.1  christos 	    }
   12400      1.1  christos 	  break;
   12401      1.1  christos 	case 'R':
   12402      1.1  christos 	  USED_REX (REX_W);
   12403      1.1  christos 	  if (rex & REX_W)
   12404      1.1  christos 	    *obufp++ = 'q';
   12405      1.1  christos 	  else if (sizeflag & DFLAG)
   12406      1.1  christos 	    {
   12407      1.1  christos 	      if (intel_syntax)
   12408      1.1  christos 		  *obufp++ = 'd';
   12409      1.1  christos 	      else
   12410      1.1  christos 		  *obufp++ = 'l';
   12411      1.1  christos 	    }
   12412      1.1  christos 	  else
   12413      1.1  christos 	    *obufp++ = 'w';
   12414      1.1  christos 	  if (intel_syntax && !p[1]
   12415      1.1  christos 	      && ((rex & REX_W) || (sizeflag & DFLAG)))
   12416      1.1  christos 	    *obufp++ = 'e';
   12417      1.1  christos 	  if (!(rex & REX_W))
   12418      1.1  christos 	    used_prefixes |= (prefixes & PREFIX_DATA);
   12419      1.1  christos 	  break;
   12420      1.1  christos 	case 'V':
   12421      1.1  christos 	  if (l == 0 && len == 1)
   12422      1.1  christos 	    {
   12423      1.1  christos 	      if (intel_syntax)
   12424      1.1  christos 		break;
   12425  1.1.1.2  christos 	      if (address_mode == mode_64bit
   12426  1.1.1.2  christos 		  && ((sizeflag & DFLAG) || (rex & REX_W)))
   12427      1.1  christos 		{
   12428      1.1  christos 		  if (sizeflag & SUFFIX_ALWAYS)
   12429      1.1  christos 		    *obufp++ = 'q';
   12430      1.1  christos 		  break;
   12431      1.1  christos 		}
   12432      1.1  christos 	    }
   12433      1.1  christos 	  else
   12434      1.1  christos 	    {
   12435      1.1  christos 	      if (l != 1
   12436      1.1  christos 		  || len != 2
   12437      1.1  christos 		  || last[0] != 'L')
   12438      1.1  christos 		{
   12439      1.1  christos 		  SAVE_LAST (*p);
   12440      1.1  christos 		  break;
   12441      1.1  christos 		}
   12442      1.1  christos 
   12443      1.1  christos 	      if (rex & REX_W)
   12444      1.1  christos 		{
   12445      1.1  christos 		  *obufp++ = 'a';
   12446      1.1  christos 		  *obufp++ = 'b';
   12447      1.1  christos 		  *obufp++ = 's';
   12448      1.1  christos 		}
   12449      1.1  christos 	    }
   12450      1.1  christos 	  /* Fall through.  */
   12451      1.1  christos 	  goto case_S;
   12452      1.1  christos 	case 'S':
   12453      1.1  christos 	  if (l == 0 && len == 1)
   12454      1.1  christos 	    {
   12455      1.1  christos case_S:
   12456      1.1  christos 	      if (intel_syntax)
   12457      1.1  christos 		break;
   12458      1.1  christos 	      if (sizeflag & SUFFIX_ALWAYS)
   12459      1.1  christos 		{
   12460      1.1  christos 		  if (rex & REX_W)
   12461      1.1  christos 		    *obufp++ = 'q';
   12462      1.1  christos 		  else
   12463      1.1  christos 		    {
   12464      1.1  christos 		      if (sizeflag & DFLAG)
   12465      1.1  christos 			*obufp++ = 'l';
   12466      1.1  christos 		      else
   12467      1.1  christos 			*obufp++ = 'w';
   12468      1.1  christos 		      used_prefixes |= (prefixes & PREFIX_DATA);
   12469      1.1  christos 		    }
   12470      1.1  christos 		}
   12471      1.1  christos 	    }
   12472      1.1  christos 	  else
   12473      1.1  christos 	    {
   12474      1.1  christos 	      if (l != 1
   12475      1.1  christos 		  || len != 2
   12476      1.1  christos 		  || last[0] != 'L')
   12477      1.1  christos 		{
   12478      1.1  christos 		  SAVE_LAST (*p);
   12479      1.1  christos 		  break;
   12480      1.1  christos 		}
   12481      1.1  christos 
   12482      1.1  christos 	      if (address_mode == mode_64bit
   12483      1.1  christos 		  && !(prefixes & PREFIX_ADDR))
   12484      1.1  christos 		{
   12485      1.1  christos 		  *obufp++ = 'a';
   12486      1.1  christos 		  *obufp++ = 'b';
   12487      1.1  christos 		  *obufp++ = 's';
   12488      1.1  christos 		}
   12489      1.1  christos 
   12490      1.1  christos 	      goto case_S;
   12491      1.1  christos 	    }
   12492      1.1  christos 	  break;
   12493      1.1  christos 	case 'X':
   12494      1.1  christos 	  if (l != 0 || len != 1)
   12495      1.1  christos 	    {
   12496      1.1  christos 	      SAVE_LAST (*p);
   12497      1.1  christos 	      break;
   12498      1.1  christos 	    }
   12499      1.1  christos 	  if (need_vex && vex.prefix)
   12500      1.1  christos 	    {
   12501      1.1  christos 	      if (vex.prefix == DATA_PREFIX_OPCODE)
   12502      1.1  christos 		*obufp++ = 'd';
   12503      1.1  christos 	      else
   12504      1.1  christos 		*obufp++ = 's';
   12505      1.1  christos 	    }
   12506      1.1  christos 	  else
   12507      1.1  christos 	    {
   12508      1.1  christos 	      if (prefixes & PREFIX_DATA)
   12509      1.1  christos 		*obufp++ = 'd';
   12510      1.1  christos 	      else
   12511      1.1  christos 		*obufp++ = 's';
   12512      1.1  christos 	      used_prefixes |= (prefixes & PREFIX_DATA);
   12513      1.1  christos 	    }
   12514      1.1  christos 	  break;
   12515      1.1  christos 	case 'Y':
   12516      1.1  christos 	  if (l == 0 && len == 1)
   12517      1.1  christos 	    {
   12518      1.1  christos 	      if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
   12519      1.1  christos 		break;
   12520      1.1  christos 	      if (rex & REX_W)
   12521      1.1  christos 		{
   12522      1.1  christos 		  USED_REX (REX_W);
   12523      1.1  christos 		  *obufp++ = 'q';
   12524      1.1  christos 		}
   12525      1.1  christos 	      break;
   12526      1.1  christos 	    }
   12527      1.1  christos 	  else
   12528      1.1  christos 	    {
   12529      1.1  christos 	      if (l != 1 || len != 2 || last[0] != 'X')
   12530      1.1  christos 		{
   12531      1.1  christos 		  SAVE_LAST (*p);
   12532      1.1  christos 		  break;
   12533      1.1  christos 		}
   12534      1.1  christos 	      if (!need_vex)
   12535      1.1  christos 		abort ();
   12536      1.1  christos 	      if (intel_syntax
   12537      1.1  christos 		  || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
   12538      1.1  christos 		break;
   12539      1.1  christos 	      switch (vex.length)
   12540      1.1  christos 		{
   12541      1.1  christos 		case 128:
   12542      1.1  christos 		  *obufp++ = 'x';
   12543      1.1  christos 		  break;
   12544      1.1  christos 		case 256:
   12545      1.1  christos 		  *obufp++ = 'y';
   12546      1.1  christos 		  break;
   12547      1.1  christos 		default:
   12548      1.1  christos 		  abort ();
   12549      1.1  christos 		}
   12550      1.1  christos 	    }
   12551      1.1  christos 	  break;
   12552      1.1  christos 	case 'W':
   12553      1.1  christos 	  if (l == 0 && len == 1)
   12554      1.1  christos 	    {
   12555      1.1  christos 	      /* operand size flag for cwtl, cbtw */
   12556      1.1  christos 	      USED_REX (REX_W);
   12557      1.1  christos 	      if (rex & REX_W)
   12558      1.1  christos 		{
   12559      1.1  christos 		  if (intel_syntax)
   12560      1.1  christos 		    *obufp++ = 'd';
   12561      1.1  christos 		  else
   12562      1.1  christos 		    *obufp++ = 'l';
   12563      1.1  christos 		}
   12564      1.1  christos 	      else if (sizeflag & DFLAG)
   12565      1.1  christos 		*obufp++ = 'w';
   12566      1.1  christos 	      else
   12567      1.1  christos 		*obufp++ = 'b';
   12568      1.1  christos 	      if (!(rex & REX_W))
   12569      1.1  christos 		used_prefixes |= (prefixes & PREFIX_DATA);
   12570      1.1  christos 	    }
   12571      1.1  christos 	  else
   12572      1.1  christos 	    {
   12573  1.1.1.2  christos 	      if (l != 1
   12574  1.1.1.2  christos 		  || len != 2
   12575  1.1.1.2  christos 		  || (last[0] != 'X'
   12576  1.1.1.2  christos 		      && last[0] != 'L'))
   12577      1.1  christos 		{
   12578      1.1  christos 		  SAVE_LAST (*p);
   12579      1.1  christos 		  break;
   12580      1.1  christos 		}
   12581      1.1  christos 	      if (!need_vex)
   12582      1.1  christos 		abort ();
   12583  1.1.1.2  christos 	      if (last[0] == 'X')
   12584  1.1.1.2  christos 		*obufp++ = vex.w ? 'd': 's';
   12585  1.1.1.2  christos 	      else
   12586  1.1.1.2  christos 		*obufp++ = vex.w ? 'q': 'd';
   12587      1.1  christos 	    }
   12588      1.1  christos 	  break;
   12589      1.1  christos 	}
   12590      1.1  christos       alt = 0;
   12591      1.1  christos     }
   12592      1.1  christos   *obufp = 0;
   12593      1.1  christos   mnemonicendp = obufp;
   12594      1.1  christos   return 0;
   12595      1.1  christos }
   12596      1.1  christos 
   12597      1.1  christos static void
   12598      1.1  christos oappend (const char *s)
   12599      1.1  christos {
   12600      1.1  christos   obufp = stpcpy (obufp, s);
   12601      1.1  christos }
   12602      1.1  christos 
   12603      1.1  christos static void
   12604      1.1  christos append_seg (void)
   12605      1.1  christos {
   12606      1.1  christos   if (prefixes & PREFIX_CS)
   12607      1.1  christos     {
   12608      1.1  christos       used_prefixes |= PREFIX_CS;
   12609      1.1  christos       oappend ("%cs:" + intel_syntax);
   12610      1.1  christos     }
   12611      1.1  christos   if (prefixes & PREFIX_DS)
   12612      1.1  christos     {
   12613      1.1  christos       used_prefixes |= PREFIX_DS;
   12614      1.1  christos       oappend ("%ds:" + intel_syntax);
   12615      1.1  christos     }
   12616      1.1  christos   if (prefixes & PREFIX_SS)
   12617      1.1  christos     {
   12618      1.1  christos       used_prefixes |= PREFIX_SS;
   12619      1.1  christos       oappend ("%ss:" + intel_syntax);
   12620      1.1  christos     }
   12621      1.1  christos   if (prefixes & PREFIX_ES)
   12622      1.1  christos     {
   12623      1.1  christos       used_prefixes |= PREFIX_ES;
   12624      1.1  christos       oappend ("%es:" + intel_syntax);
   12625      1.1  christos     }
   12626      1.1  christos   if (prefixes & PREFIX_FS)
   12627      1.1  christos     {
   12628      1.1  christos       used_prefixes |= PREFIX_FS;
   12629      1.1  christos       oappend ("%fs:" + intel_syntax);
   12630      1.1  christos     }
   12631      1.1  christos   if (prefixes & PREFIX_GS)
   12632      1.1  christos     {
   12633      1.1  christos       used_prefixes |= PREFIX_GS;
   12634      1.1  christos       oappend ("%gs:" + intel_syntax);
   12635      1.1  christos     }
   12636      1.1  christos }
   12637      1.1  christos 
   12638      1.1  christos static void
   12639      1.1  christos OP_indirE (int bytemode, int sizeflag)
   12640      1.1  christos {
   12641      1.1  christos   if (!intel_syntax)
   12642      1.1  christos     oappend ("*");
   12643      1.1  christos   OP_E (bytemode, sizeflag);
   12644      1.1  christos }
   12645      1.1  christos 
   12646      1.1  christos static void
   12647      1.1  christos print_operand_value (char *buf, int hex, bfd_vma disp)
   12648      1.1  christos {
   12649      1.1  christos   if (address_mode == mode_64bit)
   12650      1.1  christos     {
   12651      1.1  christos       if (hex)
   12652      1.1  christos 	{
   12653      1.1  christos 	  char tmp[30];
   12654      1.1  christos 	  int i;
   12655      1.1  christos 	  buf[0] = '0';
   12656      1.1  christos 	  buf[1] = 'x';
   12657      1.1  christos 	  sprintf_vma (tmp, disp);
   12658      1.1  christos 	  for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
   12659      1.1  christos 	  strcpy (buf + 2, tmp + i);
   12660      1.1  christos 	}
   12661      1.1  christos       else
   12662      1.1  christos 	{
   12663      1.1  christos 	  bfd_signed_vma v = disp;
   12664      1.1  christos 	  char tmp[30];
   12665      1.1  christos 	  int i;
   12666      1.1  christos 	  if (v < 0)
   12667      1.1  christos 	    {
   12668      1.1  christos 	      *(buf++) = '-';
   12669      1.1  christos 	      v = -disp;
   12670      1.1  christos 	      /* Check for possible overflow on 0x8000000000000000.  */
   12671      1.1  christos 	      if (v < 0)
   12672      1.1  christos 		{
   12673      1.1  christos 		  strcpy (buf, "9223372036854775808");
   12674      1.1  christos 		  return;
   12675      1.1  christos 		}
   12676      1.1  christos 	    }
   12677      1.1  christos 	  if (!v)
   12678      1.1  christos 	    {
   12679      1.1  christos 	      strcpy (buf, "0");
   12680      1.1  christos 	      return;
   12681      1.1  christos 	    }
   12682      1.1  christos 
   12683      1.1  christos 	  i = 0;
   12684      1.1  christos 	  tmp[29] = 0;
   12685      1.1  christos 	  while (v)
   12686      1.1  christos 	    {
   12687      1.1  christos 	      tmp[28 - i] = (v % 10) + '0';
   12688      1.1  christos 	      v /= 10;
   12689      1.1  christos 	      i++;
   12690      1.1  christos 	    }
   12691      1.1  christos 	  strcpy (buf, tmp + 29 - i);
   12692      1.1  christos 	}
   12693      1.1  christos     }
   12694      1.1  christos   else
   12695      1.1  christos     {
   12696      1.1  christos       if (hex)
   12697      1.1  christos 	sprintf (buf, "0x%x", (unsigned int) disp);
   12698      1.1  christos       else
   12699      1.1  christos 	sprintf (buf, "%d", (int) disp);
   12700      1.1  christos     }
   12701      1.1  christos }
   12702      1.1  christos 
   12703      1.1  christos /* Put DISP in BUF as signed hex number.  */
   12704      1.1  christos 
   12705      1.1  christos static void
   12706      1.1  christos print_displacement (char *buf, bfd_vma disp)
   12707      1.1  christos {
   12708      1.1  christos   bfd_signed_vma val = disp;
   12709      1.1  christos   char tmp[30];
   12710      1.1  christos   int i, j = 0;
   12711      1.1  christos 
   12712      1.1  christos   if (val < 0)
   12713      1.1  christos     {
   12714      1.1  christos       buf[j++] = '-';
   12715      1.1  christos       val = -disp;
   12716      1.1  christos 
   12717      1.1  christos       /* Check for possible overflow.  */
   12718      1.1  christos       if (val < 0)
   12719      1.1  christos 	{
   12720      1.1  christos 	  switch (address_mode)
   12721      1.1  christos 	    {
   12722      1.1  christos 	    case mode_64bit:
   12723      1.1  christos 	      strcpy (buf + j, "0x8000000000000000");
   12724      1.1  christos 	      break;
   12725      1.1  christos 	    case mode_32bit:
   12726      1.1  christos 	      strcpy (buf + j, "0x80000000");
   12727      1.1  christos 	      break;
   12728      1.1  christos 	    case mode_16bit:
   12729      1.1  christos 	      strcpy (buf + j, "0x8000");
   12730      1.1  christos 	      break;
   12731      1.1  christos 	    }
   12732      1.1  christos 	  return;
   12733      1.1  christos 	}
   12734      1.1  christos     }
   12735      1.1  christos 
   12736      1.1  christos   buf[j++] = '0';
   12737      1.1  christos   buf[j++] = 'x';
   12738      1.1  christos 
   12739      1.1  christos   sprintf_vma (tmp, (bfd_vma) val);
   12740      1.1  christos   for (i = 0; tmp[i] == '0'; i++)
   12741      1.1  christos     continue;
   12742      1.1  christos   if (tmp[i] == '\0')
   12743      1.1  christos     i--;
   12744      1.1  christos   strcpy (buf + j, tmp + i);
   12745      1.1  christos }
   12746      1.1  christos 
   12747      1.1  christos static void
   12748      1.1  christos intel_operand_size (int bytemode, int sizeflag)
   12749      1.1  christos {
   12750      1.1  christos   switch (bytemode)
   12751      1.1  christos     {
   12752      1.1  christos     case b_mode:
   12753      1.1  christos     case b_swap_mode:
   12754      1.1  christos     case dqb_mode:
   12755      1.1  christos       oappend ("BYTE PTR ");
   12756      1.1  christos       break;
   12757      1.1  christos     case w_mode:
   12758      1.1  christos     case dqw_mode:
   12759      1.1  christos       oappend ("WORD PTR ");
   12760      1.1  christos       break;
   12761      1.1  christos     case stack_v_mode:
   12762  1.1.1.2  christos       if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
   12763      1.1  christos 	{
   12764      1.1  christos 	  oappend ("QWORD PTR ");
   12765      1.1  christos 	  break;
   12766      1.1  christos 	}
   12767      1.1  christos       /* FALLTHRU */
   12768      1.1  christos     case v_mode:
   12769      1.1  christos     case v_swap_mode:
   12770      1.1  christos     case dq_mode:
   12771      1.1  christos       USED_REX (REX_W);
   12772      1.1  christos       if (rex & REX_W)
   12773      1.1  christos 	oappend ("QWORD PTR ");
   12774      1.1  christos       else
   12775      1.1  christos 	{
   12776      1.1  christos 	  if ((sizeflag & DFLAG) || bytemode == dq_mode)
   12777      1.1  christos 	    oappend ("DWORD PTR ");
   12778      1.1  christos 	  else
   12779      1.1  christos 	    oappend ("WORD PTR ");
   12780      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   12781      1.1  christos 	}
   12782      1.1  christos       break;
   12783      1.1  christos     case z_mode:
   12784      1.1  christos       if ((rex & REX_W) || (sizeflag & DFLAG))
   12785      1.1  christos 	*obufp++ = 'D';
   12786      1.1  christos       oappend ("WORD PTR ");
   12787      1.1  christos       if (!(rex & REX_W))
   12788      1.1  christos 	used_prefixes |= (prefixes & PREFIX_DATA);
   12789      1.1  christos       break;
   12790      1.1  christos     case a_mode:
   12791      1.1  christos       if (sizeflag & DFLAG)
   12792      1.1  christos 	oappend ("QWORD PTR ");
   12793      1.1  christos       else
   12794      1.1  christos 	oappend ("DWORD PTR ");
   12795      1.1  christos       used_prefixes |= (prefixes & PREFIX_DATA);
   12796      1.1  christos       break;
   12797      1.1  christos     case d_mode:
   12798      1.1  christos     case d_scalar_mode:
   12799      1.1  christos     case d_scalar_swap_mode:
   12800      1.1  christos     case d_swap_mode:
   12801      1.1  christos     case dqd_mode:
   12802      1.1  christos       oappend ("DWORD PTR ");
   12803      1.1  christos       break;
   12804      1.1  christos     case q_mode:
   12805      1.1  christos     case q_scalar_mode:
   12806      1.1  christos     case q_scalar_swap_mode:
   12807      1.1  christos     case q_swap_mode:
   12808      1.1  christos       oappend ("QWORD PTR ");
   12809      1.1  christos       break;
   12810      1.1  christos     case m_mode:
   12811      1.1  christos       if (address_mode == mode_64bit)
   12812      1.1  christos 	oappend ("QWORD PTR ");
   12813      1.1  christos       else
   12814      1.1  christos 	oappend ("DWORD PTR ");
   12815      1.1  christos       break;
   12816      1.1  christos     case f_mode:
   12817      1.1  christos       if (sizeflag & DFLAG)
   12818      1.1  christos 	oappend ("FWORD PTR ");
   12819      1.1  christos       else
   12820      1.1  christos 	oappend ("DWORD PTR ");
   12821      1.1  christos       used_prefixes |= (prefixes & PREFIX_DATA);
   12822      1.1  christos       break;
   12823      1.1  christos     case t_mode:
   12824      1.1  christos       oappend ("TBYTE PTR ");
   12825      1.1  christos       break;
   12826      1.1  christos     case x_mode:
   12827      1.1  christos     case x_swap_mode:
   12828      1.1  christos       if (need_vex)
   12829      1.1  christos 	{
   12830      1.1  christos 	  switch (vex.length)
   12831      1.1  christos 	    {
   12832      1.1  christos 	    case 128:
   12833      1.1  christos 	      oappend ("XMMWORD PTR ");
   12834      1.1  christos 	      break;
   12835      1.1  christos 	    case 256:
   12836      1.1  christos 	      oappend ("YMMWORD PTR ");
   12837      1.1  christos 	      break;
   12838      1.1  christos 	    default:
   12839      1.1  christos 	      abort ();
   12840      1.1  christos 	    }
   12841      1.1  christos 	}
   12842      1.1  christos       else
   12843      1.1  christos 	oappend ("XMMWORD PTR ");
   12844      1.1  christos       break;
   12845      1.1  christos     case xmm_mode:
   12846      1.1  christos       oappend ("XMMWORD PTR ");
   12847      1.1  christos       break;
   12848      1.1  christos     case xmmq_mode:
   12849      1.1  christos       if (!need_vex)
   12850      1.1  christos 	abort ();
   12851      1.1  christos 
   12852      1.1  christos       switch (vex.length)
   12853      1.1  christos 	{
   12854      1.1  christos 	case 128:
   12855      1.1  christos 	  oappend ("QWORD PTR ");
   12856      1.1  christos 	  break;
   12857      1.1  christos 	case 256:
   12858      1.1  christos 	  oappend ("XMMWORD PTR ");
   12859      1.1  christos 	  break;
   12860      1.1  christos 	default:
   12861      1.1  christos 	  abort ();
   12862      1.1  christos 	}
   12863      1.1  christos       break;
   12864  1.1.1.2  christos     case xmm_mb_mode:
   12865  1.1.1.2  christos       if (!need_vex)
   12866  1.1.1.2  christos 	abort ();
   12867  1.1.1.2  christos 
   12868  1.1.1.2  christos       switch (vex.length)
   12869  1.1.1.2  christos 	{
   12870  1.1.1.2  christos 	case 128:
   12871  1.1.1.2  christos 	case 256:
   12872  1.1.1.2  christos 	  oappend ("BYTE PTR ");
   12873  1.1.1.2  christos 	  break;
   12874  1.1.1.2  christos 	default:
   12875  1.1.1.2  christos 	  abort ();
   12876  1.1.1.2  christos 	}
   12877  1.1.1.2  christos       break;
   12878  1.1.1.2  christos     case xmm_mw_mode:
   12879  1.1.1.2  christos       if (!need_vex)
   12880  1.1.1.2  christos 	abort ();
   12881  1.1.1.2  christos 
   12882  1.1.1.2  christos       switch (vex.length)
   12883  1.1.1.2  christos 	{
   12884  1.1.1.2  christos 	case 128:
   12885  1.1.1.2  christos 	case 256:
   12886  1.1.1.2  christos 	  oappend ("WORD PTR ");
   12887  1.1.1.2  christos 	  break;
   12888  1.1.1.2  christos 	default:
   12889  1.1.1.2  christos 	  abort ();
   12890  1.1.1.2  christos 	}
   12891  1.1.1.2  christos       break;
   12892  1.1.1.2  christos     case xmm_md_mode:
   12893  1.1.1.2  christos       if (!need_vex)
   12894  1.1.1.2  christos 	abort ();
   12895  1.1.1.2  christos 
   12896  1.1.1.2  christos       switch (vex.length)
   12897  1.1.1.2  christos 	{
   12898  1.1.1.2  christos 	case 128:
   12899  1.1.1.2  christos 	case 256:
   12900  1.1.1.2  christos 	  oappend ("DWORD PTR ");
   12901  1.1.1.2  christos 	  break;
   12902  1.1.1.2  christos 	default:
   12903  1.1.1.2  christos 	  abort ();
   12904  1.1.1.2  christos 	}
   12905  1.1.1.2  christos       break;
   12906  1.1.1.2  christos     case xmm_mq_mode:
   12907  1.1.1.2  christos       if (!need_vex)
   12908  1.1.1.2  christos 	abort ();
   12909  1.1.1.2  christos 
   12910  1.1.1.2  christos       switch (vex.length)
   12911  1.1.1.2  christos 	{
   12912  1.1.1.2  christos 	case 128:
   12913  1.1.1.2  christos 	case 256:
   12914  1.1.1.2  christos 	  oappend ("QWORD PTR ");
   12915  1.1.1.2  christos 	  break;
   12916  1.1.1.2  christos 	default:
   12917  1.1.1.2  christos 	  abort ();
   12918  1.1.1.2  christos 	}
   12919  1.1.1.2  christos       break;
   12920  1.1.1.2  christos     case xmmdw_mode:
   12921  1.1.1.2  christos       if (!need_vex)
   12922  1.1.1.2  christos 	abort ();
   12923  1.1.1.2  christos 
   12924  1.1.1.2  christos       switch (vex.length)
   12925  1.1.1.2  christos 	{
   12926  1.1.1.2  christos 	case 128:
   12927  1.1.1.2  christos 	  oappend ("WORD PTR ");
   12928  1.1.1.2  christos 	  break;
   12929  1.1.1.2  christos 	case 256:
   12930  1.1.1.2  christos 	  oappend ("DWORD PTR ");
   12931  1.1.1.2  christos 	  break;
   12932  1.1.1.2  christos 	default:
   12933  1.1.1.2  christos 	  abort ();
   12934  1.1.1.2  christos 	}
   12935  1.1.1.2  christos       break;
   12936  1.1.1.2  christos     case xmmqd_mode:
   12937  1.1.1.2  christos       if (!need_vex)
   12938  1.1.1.2  christos 	abort ();
   12939  1.1.1.2  christos 
   12940  1.1.1.2  christos       switch (vex.length)
   12941  1.1.1.2  christos 	{
   12942  1.1.1.2  christos 	case 128:
   12943  1.1.1.2  christos 	  oappend ("DWORD PTR ");
   12944  1.1.1.2  christos 	  break;
   12945  1.1.1.2  christos 	case 256:
   12946  1.1.1.2  christos 	  oappend ("QWORD PTR ");
   12947  1.1.1.2  christos 	  break;
   12948  1.1.1.2  christos 	default:
   12949  1.1.1.2  christos 	  abort ();
   12950  1.1.1.2  christos 	}
   12951  1.1.1.2  christos       break;
   12952      1.1  christos     case ymmq_mode:
   12953      1.1  christos       if (!need_vex)
   12954      1.1  christos 	abort ();
   12955      1.1  christos 
   12956      1.1  christos       switch (vex.length)
   12957      1.1  christos 	{
   12958      1.1  christos 	case 128:
   12959      1.1  christos 	  oappend ("QWORD PTR ");
   12960      1.1  christos 	  break;
   12961      1.1  christos 	case 256:
   12962      1.1  christos 	  oappend ("YMMWORD PTR ");
   12963      1.1  christos 	  break;
   12964      1.1  christos 	default:
   12965      1.1  christos 	  abort ();
   12966      1.1  christos 	}
   12967      1.1  christos       break;
   12968  1.1.1.2  christos     case ymmxmm_mode:
   12969  1.1.1.2  christos       if (!need_vex)
   12970  1.1.1.2  christos 	abort ();
   12971  1.1.1.2  christos 
   12972  1.1.1.2  christos       switch (vex.length)
   12973  1.1.1.2  christos 	{
   12974  1.1.1.2  christos 	case 128:
   12975  1.1.1.2  christos 	case 256:
   12976  1.1.1.2  christos 	  oappend ("XMMWORD PTR ");
   12977  1.1.1.2  christos 	  break;
   12978  1.1.1.2  christos 	default:
   12979  1.1.1.2  christos 	  abort ();
   12980  1.1.1.2  christos 	}
   12981  1.1.1.2  christos       break;
   12982      1.1  christos     case o_mode:
   12983      1.1  christos       oappend ("OWORD PTR ");
   12984      1.1  christos       break;
   12985      1.1  christos     case vex_w_dq_mode:
   12986      1.1  christos     case vex_scalar_w_dq_mode:
   12987  1.1.1.2  christos     case vex_vsib_d_w_dq_mode:
   12988  1.1.1.2  christos     case vex_vsib_q_w_dq_mode:
   12989      1.1  christos       if (!need_vex)
   12990      1.1  christos 	abort ();
   12991      1.1  christos 
   12992      1.1  christos       if (vex.w)
   12993      1.1  christos 	oappend ("QWORD PTR ");
   12994      1.1  christos       else
   12995      1.1  christos 	oappend ("DWORD PTR ");
   12996      1.1  christos       break;
   12997      1.1  christos     default:
   12998      1.1  christos       break;
   12999      1.1  christos     }
   13000      1.1  christos }
   13001      1.1  christos 
   13002      1.1  christos static void
   13003      1.1  christos OP_E_register (int bytemode, int sizeflag)
   13004      1.1  christos {
   13005      1.1  christos   int reg = modrm.rm;
   13006      1.1  christos   const char **names;
   13007      1.1  christos 
   13008      1.1  christos   USED_REX (REX_B);
   13009      1.1  christos   if ((rex & REX_B))
   13010      1.1  christos     reg += 8;
   13011      1.1  christos 
   13012      1.1  christos   if ((sizeflag & SUFFIX_ALWAYS)
   13013      1.1  christos       && (bytemode == b_swap_mode || bytemode == v_swap_mode))
   13014      1.1  christos     swap_operand ();
   13015      1.1  christos 
   13016      1.1  christos   switch (bytemode)
   13017      1.1  christos     {
   13018      1.1  christos     case b_mode:
   13019      1.1  christos     case b_swap_mode:
   13020      1.1  christos       USED_REX (0);
   13021      1.1  christos       if (rex)
   13022      1.1  christos 	names = names8rex;
   13023      1.1  christos       else
   13024      1.1  christos 	names = names8;
   13025      1.1  christos       break;
   13026      1.1  christos     case w_mode:
   13027      1.1  christos       names = names16;
   13028      1.1  christos       break;
   13029      1.1  christos     case d_mode:
   13030      1.1  christos       names = names32;
   13031      1.1  christos       break;
   13032      1.1  christos     case q_mode:
   13033      1.1  christos       names = names64;
   13034      1.1  christos       break;
   13035      1.1  christos     case m_mode:
   13036      1.1  christos       names = address_mode == mode_64bit ? names64 : names32;
   13037      1.1  christos       break;
   13038      1.1  christos     case stack_v_mode:
   13039  1.1.1.2  christos       if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
   13040      1.1  christos 	{
   13041      1.1  christos 	  names = names64;
   13042      1.1  christos 	  break;
   13043      1.1  christos 	}
   13044      1.1  christos       bytemode = v_mode;
   13045      1.1  christos       /* FALLTHRU */
   13046      1.1  christos     case v_mode:
   13047      1.1  christos     case v_swap_mode:
   13048      1.1  christos     case dq_mode:
   13049      1.1  christos     case dqb_mode:
   13050      1.1  christos     case dqd_mode:
   13051      1.1  christos     case dqw_mode:
   13052      1.1  christos       USED_REX (REX_W);
   13053      1.1  christos       if (rex & REX_W)
   13054      1.1  christos 	names = names64;
   13055      1.1  christos       else
   13056      1.1  christos 	{
   13057  1.1.1.2  christos 	  if ((sizeflag & DFLAG)
   13058      1.1  christos 	      || (bytemode != v_mode
   13059      1.1  christos 		  && bytemode != v_swap_mode))
   13060      1.1  christos 	    names = names32;
   13061      1.1  christos 	  else
   13062      1.1  christos 	    names = names16;
   13063      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   13064      1.1  christos 	}
   13065      1.1  christos       break;
   13066      1.1  christos     case 0:
   13067      1.1  christos       return;
   13068      1.1  christos     default:
   13069      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   13070      1.1  christos       return;
   13071      1.1  christos     }
   13072      1.1  christos   oappend (names[reg]);
   13073      1.1  christos }
   13074      1.1  christos 
   13075      1.1  christos static void
   13076      1.1  christos OP_E_memory (int bytemode, int sizeflag)
   13077      1.1  christos {
   13078      1.1  christos   bfd_vma disp = 0;
   13079      1.1  christos   int add = (rex & REX_B) ? 8 : 0;
   13080      1.1  christos   int riprel = 0;
   13081      1.1  christos 
   13082      1.1  christos   USED_REX (REX_B);
   13083      1.1  christos   if (intel_syntax)
   13084      1.1  christos     intel_operand_size (bytemode, sizeflag);
   13085      1.1  christos   append_seg ();
   13086      1.1  christos 
   13087      1.1  christos   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
   13088      1.1  christos     {
   13089      1.1  christos       /* 32/64 bit address mode */
   13090      1.1  christos       int havedisp;
   13091      1.1  christos       int havesib;
   13092      1.1  christos       int havebase;
   13093      1.1  christos       int haveindex;
   13094      1.1  christos       int needindex;
   13095      1.1  christos       int base, rbase;
   13096      1.1  christos       int vindex = 0;
   13097      1.1  christos       int scale = 0;
   13098  1.1.1.2  christos       const char **indexes64 = names64;
   13099  1.1.1.2  christos       const char **indexes32 = names32;
   13100      1.1  christos 
   13101      1.1  christos       havesib = 0;
   13102      1.1  christos       havebase = 1;
   13103      1.1  christos       haveindex = 0;
   13104      1.1  christos       base = modrm.rm;
   13105      1.1  christos 
   13106      1.1  christos       if (base == 4)
   13107      1.1  christos 	{
   13108      1.1  christos 	  havesib = 1;
   13109      1.1  christos 	  vindex = sib.index;
   13110      1.1  christos 	  USED_REX (REX_X);
   13111      1.1  christos 	  if (rex & REX_X)
   13112      1.1  christos 	    vindex += 8;
   13113  1.1.1.2  christos 	  switch (bytemode)
   13114  1.1.1.2  christos 	    {
   13115  1.1.1.2  christos 	    case vex_vsib_d_w_dq_mode:
   13116  1.1.1.2  christos 	    case vex_vsib_q_w_dq_mode:
   13117  1.1.1.2  christos 	      if (!need_vex)
   13118  1.1.1.2  christos 		abort ();
   13119  1.1.1.2  christos 
   13120  1.1.1.2  christos 	      haveindex = 1;
   13121  1.1.1.2  christos 	      switch (vex.length)
   13122  1.1.1.2  christos 		{
   13123  1.1.1.2  christos 		case 128:
   13124  1.1.1.2  christos 		  indexes64 = indexes32 = names_xmm;
   13125  1.1.1.2  christos 		  break;
   13126  1.1.1.2  christos 		case 256:
   13127  1.1.1.2  christos 		  if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
   13128  1.1.1.2  christos 		    indexes64 = indexes32 = names_ymm;
   13129  1.1.1.2  christos 		  else
   13130  1.1.1.2  christos 		    indexes64 = indexes32 = names_xmm;
   13131  1.1.1.2  christos 		  break;
   13132  1.1.1.2  christos 		default:
   13133  1.1.1.2  christos 		  abort ();
   13134  1.1.1.2  christos 		}
   13135  1.1.1.2  christos 	      break;
   13136  1.1.1.2  christos 	    default:
   13137  1.1.1.2  christos 	      haveindex = vindex != 4;
   13138  1.1.1.2  christos 	      break;
   13139  1.1.1.2  christos 	    }
   13140  1.1.1.2  christos 	  scale = sib.scale;
   13141  1.1.1.2  christos 	  base = sib.base;
   13142      1.1  christos 	  codep++;
   13143      1.1  christos 	}
   13144      1.1  christos       rbase = base + add;
   13145      1.1  christos 
   13146      1.1  christos       switch (modrm.mod)
   13147      1.1  christos 	{
   13148      1.1  christos 	case 0:
   13149      1.1  christos 	  if (base == 5)
   13150      1.1  christos 	    {
   13151      1.1  christos 	      havebase = 0;
   13152      1.1  christos 	      if (address_mode == mode_64bit && !havesib)
   13153      1.1  christos 		riprel = 1;
   13154      1.1  christos 	      disp = get32s ();
   13155      1.1  christos 	    }
   13156      1.1  christos 	  break;
   13157      1.1  christos 	case 1:
   13158      1.1  christos 	  FETCH_DATA (the_info, codep + 1);
   13159      1.1  christos 	  disp = *codep++;
   13160      1.1  christos 	  if ((disp & 0x80) != 0)
   13161      1.1  christos 	    disp -= 0x100;
   13162      1.1  christos 	  break;
   13163      1.1  christos 	case 2:
   13164      1.1  christos 	  disp = get32s ();
   13165      1.1  christos 	  break;
   13166      1.1  christos 	}
   13167      1.1  christos 
   13168      1.1  christos       /* In 32bit mode, we need index register to tell [offset] from
   13169      1.1  christos 	 [eiz*1 + offset].  */
   13170      1.1  christos       needindex = (havesib
   13171      1.1  christos 		   && !havebase
   13172      1.1  christos 		   && !haveindex
   13173      1.1  christos 		   && address_mode == mode_32bit);
   13174      1.1  christos       havedisp = (havebase
   13175      1.1  christos 		  || needindex
   13176      1.1  christos 		  || (havesib && (haveindex || scale != 0)));
   13177      1.1  christos 
   13178      1.1  christos       if (!intel_syntax)
   13179      1.1  christos 	if (modrm.mod != 0 || base == 5)
   13180      1.1  christos 	  {
   13181      1.1  christos 	    if (havedisp || riprel)
   13182      1.1  christos 	      print_displacement (scratchbuf, disp);
   13183      1.1  christos 	    else
   13184      1.1  christos 	      print_operand_value (scratchbuf, 1, disp);
   13185      1.1  christos 	    oappend (scratchbuf);
   13186      1.1  christos 	    if (riprel)
   13187      1.1  christos 	      {
   13188      1.1  christos 		set_op (disp, 1);
   13189      1.1  christos 		oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
   13190      1.1  christos 	      }
   13191      1.1  christos 	  }
   13192      1.1  christos 
   13193      1.1  christos       if (havebase || haveindex || riprel)
   13194      1.1  christos 	used_prefixes |= PREFIX_ADDR;
   13195      1.1  christos 
   13196      1.1  christos       if (havedisp || (intel_syntax && riprel))
   13197      1.1  christos 	{
   13198      1.1  christos 	  *obufp++ = open_char;
   13199      1.1  christos 	  if (intel_syntax && riprel)
   13200      1.1  christos 	    {
   13201      1.1  christos 	      set_op (disp, 1);
   13202      1.1  christos 	      oappend (sizeflag & AFLAG ? "rip" : "eip");
   13203      1.1  christos 	    }
   13204      1.1  christos 	  *obufp = '\0';
   13205      1.1  christos 	  if (havebase)
   13206      1.1  christos 	    oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
   13207      1.1  christos 		     ? names64[rbase] : names32[rbase]);
   13208      1.1  christos 	  if (havesib)
   13209      1.1  christos 	    {
   13210      1.1  christos 	      /* ESP/RSP won't allow index.  If base isn't ESP/RSP,
   13211      1.1  christos 		 print index to tell base + index from base.  */
   13212      1.1  christos 	      if (scale != 0
   13213      1.1  christos 		  || needindex
   13214      1.1  christos 		  || haveindex
   13215      1.1  christos 		  || (havebase && base != ESP_REG_NUM))
   13216      1.1  christos 		{
   13217      1.1  christos 		  if (!intel_syntax || havebase)
   13218      1.1  christos 		    {
   13219      1.1  christos 		      *obufp++ = separator_char;
   13220      1.1  christos 		      *obufp = '\0';
   13221      1.1  christos 		    }
   13222      1.1  christos 		  if (haveindex)
   13223  1.1.1.2  christos 		    oappend (address_mode == mode_64bit
   13224      1.1  christos 			     && (sizeflag & AFLAG)
   13225  1.1.1.2  christos 			     ? indexes64[vindex] : indexes32[vindex]);
   13226      1.1  christos 		  else
   13227  1.1.1.2  christos 		    oappend (address_mode == mode_64bit
   13228      1.1  christos 			     && (sizeflag & AFLAG)
   13229      1.1  christos 			     ? index64 : index32);
   13230      1.1  christos 
   13231      1.1  christos 		  *obufp++ = scale_char;
   13232      1.1  christos 		  *obufp = '\0';
   13233      1.1  christos 		  sprintf (scratchbuf, "%d", 1 << scale);
   13234      1.1  christos 		  oappend (scratchbuf);
   13235      1.1  christos 		}
   13236      1.1  christos 	    }
   13237      1.1  christos 	  if (intel_syntax
   13238      1.1  christos 	      && (disp || modrm.mod != 0 || base == 5))
   13239      1.1  christos 	    {
   13240      1.1  christos 	      if (!havedisp || (bfd_signed_vma) disp >= 0)
   13241      1.1  christos 		{
   13242      1.1  christos 		  *obufp++ = '+';
   13243      1.1  christos 		  *obufp = '\0';
   13244      1.1  christos 		}
   13245      1.1  christos 	      else if (modrm.mod != 1 && disp != -disp)
   13246      1.1  christos 		{
   13247      1.1  christos 		  *obufp++ = '-';
   13248      1.1  christos 		  *obufp = '\0';
   13249      1.1  christos 		  disp = - (bfd_signed_vma) disp;
   13250      1.1  christos 		}
   13251      1.1  christos 
   13252      1.1  christos 	      if (havedisp)
   13253      1.1  christos 		print_displacement (scratchbuf, disp);
   13254      1.1  christos 	      else
   13255      1.1  christos 		print_operand_value (scratchbuf, 1, disp);
   13256      1.1  christos 	      oappend (scratchbuf);
   13257      1.1  christos 	    }
   13258      1.1  christos 
   13259      1.1  christos 	  *obufp++ = close_char;
   13260      1.1  christos 	  *obufp = '\0';
   13261      1.1  christos 	}
   13262      1.1  christos       else if (intel_syntax)
   13263      1.1  christos 	{
   13264      1.1  christos 	  if (modrm.mod != 0 || base == 5)
   13265      1.1  christos 	    {
   13266      1.1  christos 	      if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
   13267      1.1  christos 			      | PREFIX_ES | PREFIX_FS | PREFIX_GS))
   13268      1.1  christos 		;
   13269      1.1  christos 	      else
   13270      1.1  christos 		{
   13271      1.1  christos 		  oappend (names_seg[ds_reg - es_reg]);
   13272      1.1  christos 		  oappend (":");
   13273      1.1  christos 		}
   13274      1.1  christos 	      print_operand_value (scratchbuf, 1, disp);
   13275      1.1  christos 	      oappend (scratchbuf);
   13276      1.1  christos 	    }
   13277      1.1  christos 	}
   13278      1.1  christos     }
   13279      1.1  christos   else
   13280      1.1  christos     {
   13281      1.1  christos       /* 16 bit address mode */
   13282      1.1  christos       used_prefixes |= prefixes & PREFIX_ADDR;
   13283      1.1  christos       switch (modrm.mod)
   13284      1.1  christos 	{
   13285      1.1  christos 	case 0:
   13286      1.1  christos 	  if (modrm.rm == 6)
   13287      1.1  christos 	    {
   13288      1.1  christos 	      disp = get16 ();
   13289      1.1  christos 	      if ((disp & 0x8000) != 0)
   13290      1.1  christos 		disp -= 0x10000;
   13291      1.1  christos 	    }
   13292      1.1  christos 	  break;
   13293      1.1  christos 	case 1:
   13294      1.1  christos 	  FETCH_DATA (the_info, codep + 1);
   13295      1.1  christos 	  disp = *codep++;
   13296      1.1  christos 	  if ((disp & 0x80) != 0)
   13297      1.1  christos 	    disp -= 0x100;
   13298      1.1  christos 	  break;
   13299      1.1  christos 	case 2:
   13300      1.1  christos 	  disp = get16 ();
   13301      1.1  christos 	  if ((disp & 0x8000) != 0)
   13302      1.1  christos 	    disp -= 0x10000;
   13303      1.1  christos 	  break;
   13304      1.1  christos 	}
   13305      1.1  christos 
   13306      1.1  christos       if (!intel_syntax)
   13307      1.1  christos 	if (modrm.mod != 0 || modrm.rm == 6)
   13308      1.1  christos 	  {
   13309      1.1  christos 	    print_displacement (scratchbuf, disp);
   13310      1.1  christos 	    oappend (scratchbuf);
   13311      1.1  christos 	  }
   13312      1.1  christos 
   13313      1.1  christos       if (modrm.mod != 0 || modrm.rm != 6)
   13314      1.1  christos 	{
   13315      1.1  christos 	  *obufp++ = open_char;
   13316      1.1  christos 	  *obufp = '\0';
   13317      1.1  christos 	  oappend (index16[modrm.rm]);
   13318      1.1  christos 	  if (intel_syntax
   13319      1.1  christos 	      && (disp || modrm.mod != 0 || modrm.rm == 6))
   13320      1.1  christos 	    {
   13321      1.1  christos 	      if ((bfd_signed_vma) disp >= 0)
   13322      1.1  christos 		{
   13323      1.1  christos 		  *obufp++ = '+';
   13324      1.1  christos 		  *obufp = '\0';
   13325      1.1  christos 		}
   13326      1.1  christos 	      else if (modrm.mod != 1)
   13327      1.1  christos 		{
   13328      1.1  christos 		  *obufp++ = '-';
   13329      1.1  christos 		  *obufp = '\0';
   13330      1.1  christos 		  disp = - (bfd_signed_vma) disp;
   13331      1.1  christos 		}
   13332      1.1  christos 
   13333      1.1  christos 	      print_displacement (scratchbuf, disp);
   13334      1.1  christos 	      oappend (scratchbuf);
   13335      1.1  christos 	    }
   13336      1.1  christos 
   13337      1.1  christos 	  *obufp++ = close_char;
   13338      1.1  christos 	  *obufp = '\0';
   13339      1.1  christos 	}
   13340      1.1  christos       else if (intel_syntax)
   13341      1.1  christos 	{
   13342      1.1  christos 	  if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
   13343      1.1  christos 			  | PREFIX_ES | PREFIX_FS | PREFIX_GS))
   13344      1.1  christos 	    ;
   13345      1.1  christos 	  else
   13346      1.1  christos 	    {
   13347      1.1  christos 	      oappend (names_seg[ds_reg - es_reg]);
   13348      1.1  christos 	      oappend (":");
   13349      1.1  christos 	    }
   13350      1.1  christos 	  print_operand_value (scratchbuf, 1, disp & 0xffff);
   13351      1.1  christos 	  oappend (scratchbuf);
   13352      1.1  christos 	}
   13353      1.1  christos     }
   13354      1.1  christos }
   13355      1.1  christos 
   13356      1.1  christos static void
   13357      1.1  christos OP_E (int bytemode, int sizeflag)
   13358      1.1  christos {
   13359      1.1  christos   /* Skip mod/rm byte.  */
   13360      1.1  christos   MODRM_CHECK;
   13361      1.1  christos   codep++;
   13362      1.1  christos 
   13363      1.1  christos   if (modrm.mod == 3)
   13364      1.1  christos     OP_E_register (bytemode, sizeflag);
   13365      1.1  christos   else
   13366      1.1  christos     OP_E_memory (bytemode, sizeflag);
   13367      1.1  christos }
   13368      1.1  christos 
   13369      1.1  christos static void
   13370      1.1  christos OP_G (int bytemode, int sizeflag)
   13371      1.1  christos {
   13372      1.1  christos   int add = 0;
   13373      1.1  christos   USED_REX (REX_R);
   13374      1.1  christos   if (rex & REX_R)
   13375      1.1  christos     add += 8;
   13376      1.1  christos   switch (bytemode)
   13377      1.1  christos     {
   13378      1.1  christos     case b_mode:
   13379      1.1  christos       USED_REX (0);
   13380      1.1  christos       if (rex)
   13381      1.1  christos 	oappend (names8rex[modrm.reg + add]);
   13382      1.1  christos       else
   13383      1.1  christos 	oappend (names8[modrm.reg + add]);
   13384      1.1  christos       break;
   13385      1.1  christos     case w_mode:
   13386      1.1  christos       oappend (names16[modrm.reg + add]);
   13387      1.1  christos       break;
   13388      1.1  christos     case d_mode:
   13389      1.1  christos       oappend (names32[modrm.reg + add]);
   13390      1.1  christos       break;
   13391      1.1  christos     case q_mode:
   13392      1.1  christos       oappend (names64[modrm.reg + add]);
   13393      1.1  christos       break;
   13394      1.1  christos     case v_mode:
   13395      1.1  christos     case dq_mode:
   13396      1.1  christos     case dqb_mode:
   13397      1.1  christos     case dqd_mode:
   13398      1.1  christos     case dqw_mode:
   13399      1.1  christos       USED_REX (REX_W);
   13400      1.1  christos       if (rex & REX_W)
   13401      1.1  christos 	oappend (names64[modrm.reg + add]);
   13402      1.1  christos       else
   13403      1.1  christos 	{
   13404      1.1  christos 	  if ((sizeflag & DFLAG) || bytemode != v_mode)
   13405      1.1  christos 	    oappend (names32[modrm.reg + add]);
   13406      1.1  christos 	  else
   13407      1.1  christos 	    oappend (names16[modrm.reg + add]);
   13408      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   13409      1.1  christos 	}
   13410      1.1  christos       break;
   13411      1.1  christos     case m_mode:
   13412      1.1  christos       if (address_mode == mode_64bit)
   13413      1.1  christos 	oappend (names64[modrm.reg + add]);
   13414      1.1  christos       else
   13415      1.1  christos 	oappend (names32[modrm.reg + add]);
   13416      1.1  christos       break;
   13417      1.1  christos     default:
   13418      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   13419      1.1  christos       break;
   13420      1.1  christos     }
   13421      1.1  christos }
   13422      1.1  christos 
   13423      1.1  christos static bfd_vma
   13424      1.1  christos get64 (void)
   13425      1.1  christos {
   13426      1.1  christos   bfd_vma x;
   13427      1.1  christos #ifdef BFD64
   13428      1.1  christos   unsigned int a;
   13429      1.1  christos   unsigned int b;
   13430      1.1  christos 
   13431      1.1  christos   FETCH_DATA (the_info, codep + 8);
   13432      1.1  christos   a = *codep++ & 0xff;
   13433      1.1  christos   a |= (*codep++ & 0xff) << 8;
   13434      1.1  christos   a |= (*codep++ & 0xff) << 16;
   13435      1.1  christos   a |= (*codep++ & 0xff) << 24;
   13436      1.1  christos   b = *codep++ & 0xff;
   13437      1.1  christos   b |= (*codep++ & 0xff) << 8;
   13438      1.1  christos   b |= (*codep++ & 0xff) << 16;
   13439      1.1  christos   b |= (*codep++ & 0xff) << 24;
   13440      1.1  christos   x = a + ((bfd_vma) b << 32);
   13441      1.1  christos #else
   13442      1.1  christos   abort ();
   13443      1.1  christos   x = 0;
   13444      1.1  christos #endif
   13445      1.1  christos   return x;
   13446      1.1  christos }
   13447      1.1  christos 
   13448      1.1  christos static bfd_signed_vma
   13449      1.1  christos get32 (void)
   13450      1.1  christos {
   13451      1.1  christos   bfd_signed_vma x = 0;
   13452      1.1  christos 
   13453      1.1  christos   FETCH_DATA (the_info, codep + 4);
   13454      1.1  christos   x = *codep++ & (bfd_signed_vma) 0xff;
   13455      1.1  christos   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
   13456      1.1  christos   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
   13457      1.1  christos   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
   13458      1.1  christos   return x;
   13459      1.1  christos }
   13460      1.1  christos 
   13461      1.1  christos static bfd_signed_vma
   13462      1.1  christos get32s (void)
   13463      1.1  christos {
   13464      1.1  christos   bfd_signed_vma x = 0;
   13465      1.1  christos 
   13466      1.1  christos   FETCH_DATA (the_info, codep + 4);
   13467      1.1  christos   x = *codep++ & (bfd_signed_vma) 0xff;
   13468      1.1  christos   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
   13469      1.1  christos   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
   13470      1.1  christos   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
   13471      1.1  christos 
   13472      1.1  christos   x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
   13473      1.1  christos 
   13474      1.1  christos   return x;
   13475      1.1  christos }
   13476      1.1  christos 
   13477      1.1  christos static int
   13478      1.1  christos get16 (void)
   13479      1.1  christos {
   13480      1.1  christos   int x = 0;
   13481      1.1  christos 
   13482      1.1  christos   FETCH_DATA (the_info, codep + 2);
   13483      1.1  christos   x = *codep++ & 0xff;
   13484      1.1  christos   x |= (*codep++ & 0xff) << 8;
   13485      1.1  christos   return x;
   13486      1.1  christos }
   13487      1.1  christos 
   13488      1.1  christos static void
   13489      1.1  christos set_op (bfd_vma op, int riprel)
   13490      1.1  christos {
   13491      1.1  christos   op_index[op_ad] = op_ad;
   13492      1.1  christos   if (address_mode == mode_64bit)
   13493      1.1  christos     {
   13494      1.1  christos       op_address[op_ad] = op;
   13495      1.1  christos       op_riprel[op_ad] = riprel;
   13496      1.1  christos     }
   13497      1.1  christos   else
   13498      1.1  christos     {
   13499      1.1  christos       /* Mask to get a 32-bit address.  */
   13500      1.1  christos       op_address[op_ad] = op & 0xffffffff;
   13501      1.1  christos       op_riprel[op_ad] = riprel & 0xffffffff;
   13502      1.1  christos     }
   13503      1.1  christos }
   13504      1.1  christos 
   13505      1.1  christos static void
   13506      1.1  christos OP_REG (int code, int sizeflag)
   13507      1.1  christos {
   13508      1.1  christos   const char *s;
   13509      1.1  christos   int add;
   13510  1.1.1.2  christos 
   13511  1.1.1.2  christos   switch (code)
   13512  1.1.1.2  christos     {
   13513  1.1.1.2  christos     case es_reg: case ss_reg: case cs_reg:
   13514  1.1.1.2  christos     case ds_reg: case fs_reg: case gs_reg:
   13515  1.1.1.2  christos       oappend (names_seg[code - es_reg]);
   13516  1.1.1.2  christos       return;
   13517  1.1.1.2  christos     }
   13518  1.1.1.2  christos 
   13519      1.1  christos   USED_REX (REX_B);
   13520      1.1  christos   if (rex & REX_B)
   13521      1.1  christos     add = 8;
   13522      1.1  christos   else
   13523      1.1  christos     add = 0;
   13524      1.1  christos 
   13525      1.1  christos   switch (code)
   13526      1.1  christos     {
   13527      1.1  christos     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
   13528      1.1  christos     case sp_reg: case bp_reg: case si_reg: case di_reg:
   13529      1.1  christos       s = names16[code - ax_reg + add];
   13530      1.1  christos       break;
   13531      1.1  christos     case al_reg: case ah_reg: case cl_reg: case ch_reg:
   13532      1.1  christos     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
   13533      1.1  christos       USED_REX (0);
   13534      1.1  christos       if (rex)
   13535      1.1  christos 	s = names8rex[code - al_reg + add];
   13536      1.1  christos       else
   13537      1.1  christos 	s = names8[code - al_reg];
   13538      1.1  christos       break;
   13539      1.1  christos     case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
   13540      1.1  christos     case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
   13541  1.1.1.2  christos       if (address_mode == mode_64bit
   13542  1.1.1.2  christos 	  && ((sizeflag & DFLAG) || (rex & REX_W)))
   13543      1.1  christos 	{
   13544      1.1  christos 	  s = names64[code - rAX_reg + add];
   13545      1.1  christos 	  break;
   13546      1.1  christos 	}
   13547      1.1  christos       code += eAX_reg - rAX_reg;
   13548      1.1  christos       /* Fall through.  */
   13549      1.1  christos     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
   13550      1.1  christos     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
   13551      1.1  christos       USED_REX (REX_W);
   13552      1.1  christos       if (rex & REX_W)
   13553      1.1  christos 	s = names64[code - eAX_reg + add];
   13554      1.1  christos       else
   13555      1.1  christos 	{
   13556      1.1  christos 	  if (sizeflag & DFLAG)
   13557      1.1  christos 	    s = names32[code - eAX_reg + add];
   13558      1.1  christos 	  else
   13559      1.1  christos 	    s = names16[code - eAX_reg + add];
   13560      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   13561      1.1  christos 	}
   13562      1.1  christos       break;
   13563      1.1  christos     default:
   13564      1.1  christos       s = INTERNAL_DISASSEMBLER_ERROR;
   13565      1.1  christos       break;
   13566      1.1  christos     }
   13567      1.1  christos   oappend (s);
   13568      1.1  christos }
   13569      1.1  christos 
   13570      1.1  christos static void
   13571      1.1  christos OP_IMREG (int code, int sizeflag)
   13572      1.1  christos {
   13573      1.1  christos   const char *s;
   13574      1.1  christos 
   13575      1.1  christos   switch (code)
   13576      1.1  christos     {
   13577      1.1  christos     case indir_dx_reg:
   13578      1.1  christos       if (intel_syntax)
   13579      1.1  christos 	s = "dx";
   13580      1.1  christos       else
   13581      1.1  christos 	s = "(%dx)";
   13582      1.1  christos       break;
   13583      1.1  christos     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
   13584      1.1  christos     case sp_reg: case bp_reg: case si_reg: case di_reg:
   13585      1.1  christos       s = names16[code - ax_reg];
   13586      1.1  christos       break;
   13587      1.1  christos     case es_reg: case ss_reg: case cs_reg:
   13588      1.1  christos     case ds_reg: case fs_reg: case gs_reg:
   13589      1.1  christos       s = names_seg[code - es_reg];
   13590      1.1  christos       break;
   13591      1.1  christos     case al_reg: case ah_reg: case cl_reg: case ch_reg:
   13592      1.1  christos     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
   13593      1.1  christos       USED_REX (0);
   13594      1.1  christos       if (rex)
   13595      1.1  christos 	s = names8rex[code - al_reg];
   13596      1.1  christos       else
   13597      1.1  christos 	s = names8[code - al_reg];
   13598      1.1  christos       break;
   13599      1.1  christos     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
   13600      1.1  christos     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
   13601      1.1  christos       USED_REX (REX_W);
   13602      1.1  christos       if (rex & REX_W)
   13603      1.1  christos 	s = names64[code - eAX_reg];
   13604      1.1  christos       else
   13605      1.1  christos 	{
   13606      1.1  christos 	  if (sizeflag & DFLAG)
   13607      1.1  christos 	    s = names32[code - eAX_reg];
   13608      1.1  christos 	  else
   13609      1.1  christos 	    s = names16[code - eAX_reg];
   13610      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   13611      1.1  christos 	}
   13612      1.1  christos       break;
   13613      1.1  christos     case z_mode_ax_reg:
   13614      1.1  christos       if ((rex & REX_W) || (sizeflag & DFLAG))
   13615      1.1  christos 	s = *names32;
   13616      1.1  christos       else
   13617      1.1  christos 	s = *names16;
   13618      1.1  christos       if (!(rex & REX_W))
   13619      1.1  christos 	used_prefixes |= (prefixes & PREFIX_DATA);
   13620      1.1  christos       break;
   13621      1.1  christos     default:
   13622      1.1  christos       s = INTERNAL_DISASSEMBLER_ERROR;
   13623      1.1  christos       break;
   13624      1.1  christos     }
   13625      1.1  christos   oappend (s);
   13626      1.1  christos }
   13627      1.1  christos 
   13628      1.1  christos static void
   13629      1.1  christos OP_I (int bytemode, int sizeflag)
   13630      1.1  christos {
   13631      1.1  christos   bfd_signed_vma op;
   13632      1.1  christos   bfd_signed_vma mask = -1;
   13633      1.1  christos 
   13634      1.1  christos   switch (bytemode)
   13635      1.1  christos     {
   13636      1.1  christos     case b_mode:
   13637      1.1  christos       FETCH_DATA (the_info, codep + 1);
   13638      1.1  christos       op = *codep++;
   13639      1.1  christos       mask = 0xff;
   13640      1.1  christos       break;
   13641      1.1  christos     case q_mode:
   13642      1.1  christos       if (address_mode == mode_64bit)
   13643      1.1  christos 	{
   13644      1.1  christos 	  op = get32s ();
   13645      1.1  christos 	  break;
   13646      1.1  christos 	}
   13647      1.1  christos       /* Fall through.  */
   13648      1.1  christos     case v_mode:
   13649      1.1  christos       USED_REX (REX_W);
   13650      1.1  christos       if (rex & REX_W)
   13651      1.1  christos 	op = get32s ();
   13652      1.1  christos       else
   13653      1.1  christos 	{
   13654      1.1  christos 	  if (sizeflag & DFLAG)
   13655      1.1  christos 	    {
   13656      1.1  christos 	      op = get32 ();
   13657      1.1  christos 	      mask = 0xffffffff;
   13658      1.1  christos 	    }
   13659      1.1  christos 	  else
   13660      1.1  christos 	    {
   13661      1.1  christos 	      op = get16 ();
   13662      1.1  christos 	      mask = 0xfffff;
   13663      1.1  christos 	    }
   13664      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   13665      1.1  christos 	}
   13666      1.1  christos       break;
   13667      1.1  christos     case w_mode:
   13668      1.1  christos       mask = 0xfffff;
   13669      1.1  christos       op = get16 ();
   13670      1.1  christos       break;
   13671      1.1  christos     case const_1_mode:
   13672      1.1  christos       if (intel_syntax)
   13673  1.1.1.2  christos 	oappend ("1");
   13674      1.1  christos       return;
   13675      1.1  christos     default:
   13676      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   13677      1.1  christos       return;
   13678      1.1  christos     }
   13679      1.1  christos 
   13680      1.1  christos   op &= mask;
   13681      1.1  christos   scratchbuf[0] = '$';
   13682      1.1  christos   print_operand_value (scratchbuf + 1, 1, op);
   13683      1.1  christos   oappend (scratchbuf + intel_syntax);
   13684      1.1  christos   scratchbuf[0] = '\0';
   13685      1.1  christos }
   13686      1.1  christos 
   13687      1.1  christos static void
   13688      1.1  christos OP_I64 (int bytemode, int sizeflag)
   13689      1.1  christos {
   13690      1.1  christos   bfd_signed_vma op;
   13691      1.1  christos   bfd_signed_vma mask = -1;
   13692      1.1  christos 
   13693      1.1  christos   if (address_mode != mode_64bit)
   13694      1.1  christos     {
   13695      1.1  christos       OP_I (bytemode, sizeflag);
   13696      1.1  christos       return;
   13697      1.1  christos     }
   13698      1.1  christos 
   13699      1.1  christos   switch (bytemode)
   13700      1.1  christos     {
   13701      1.1  christos     case b_mode:
   13702      1.1  christos       FETCH_DATA (the_info, codep + 1);
   13703      1.1  christos       op = *codep++;
   13704      1.1  christos       mask = 0xff;
   13705      1.1  christos       break;
   13706      1.1  christos     case v_mode:
   13707      1.1  christos       USED_REX (REX_W);
   13708      1.1  christos       if (rex & REX_W)
   13709      1.1  christos 	op = get64 ();
   13710      1.1  christos       else
   13711      1.1  christos 	{
   13712      1.1  christos 	  if (sizeflag & DFLAG)
   13713      1.1  christos 	    {
   13714      1.1  christos 	      op = get32 ();
   13715      1.1  christos 	      mask = 0xffffffff;
   13716      1.1  christos 	    }
   13717      1.1  christos 	  else
   13718      1.1  christos 	    {
   13719      1.1  christos 	      op = get16 ();
   13720      1.1  christos 	      mask = 0xfffff;
   13721      1.1  christos 	    }
   13722      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   13723      1.1  christos 	}
   13724      1.1  christos       break;
   13725      1.1  christos     case w_mode:
   13726      1.1  christos       mask = 0xfffff;
   13727      1.1  christos       op = get16 ();
   13728      1.1  christos       break;
   13729      1.1  christos     default:
   13730      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   13731      1.1  christos       return;
   13732      1.1  christos     }
   13733      1.1  christos 
   13734      1.1  christos   op &= mask;
   13735      1.1  christos   scratchbuf[0] = '$';
   13736      1.1  christos   print_operand_value (scratchbuf + 1, 1, op);
   13737      1.1  christos   oappend (scratchbuf + intel_syntax);
   13738      1.1  christos   scratchbuf[0] = '\0';
   13739      1.1  christos }
   13740      1.1  christos 
   13741      1.1  christos static void
   13742      1.1  christos OP_sI (int bytemode, int sizeflag)
   13743      1.1  christos {
   13744      1.1  christos   bfd_signed_vma op;
   13745      1.1  christos 
   13746      1.1  christos   switch (bytemode)
   13747      1.1  christos     {
   13748      1.1  christos     case b_mode:
   13749      1.1  christos     case b_T_mode:
   13750      1.1  christos       FETCH_DATA (the_info, codep + 1);
   13751      1.1  christos       op = *codep++;
   13752      1.1  christos       if ((op & 0x80) != 0)
   13753      1.1  christos 	op -= 0x100;
   13754      1.1  christos       if (bytemode == b_T_mode)
   13755      1.1  christos 	{
   13756      1.1  christos 	  if (address_mode != mode_64bit
   13757  1.1.1.2  christos 	      || !((sizeflag & DFLAG) || (rex & REX_W)))
   13758      1.1  christos 	    {
   13759  1.1.1.2  christos 	      /* The operand-size prefix is overridden by a REX prefix.  */
   13760  1.1.1.2  christos 	      if ((sizeflag & DFLAG) || (rex & REX_W))
   13761      1.1  christos 		op &= 0xffffffff;
   13762      1.1  christos 	      else
   13763      1.1  christos 		op &= 0xffff;
   13764      1.1  christos 	  }
   13765      1.1  christos 	}
   13766      1.1  christos       else
   13767      1.1  christos 	{
   13768      1.1  christos 	  if (!(rex & REX_W))
   13769      1.1  christos 	    {
   13770      1.1  christos 	      if (sizeflag & DFLAG)
   13771      1.1  christos 		op &= 0xffffffff;
   13772      1.1  christos 	      else
   13773      1.1  christos 		op &= 0xffff;
   13774      1.1  christos 	    }
   13775      1.1  christos 	}
   13776      1.1  christos       break;
   13777      1.1  christos     case v_mode:
   13778  1.1.1.2  christos       /* The operand-size prefix is overridden by a REX prefix.  */
   13779  1.1.1.2  christos       if ((sizeflag & DFLAG) || (rex & REX_W))
   13780      1.1  christos 	op = get32s ();
   13781      1.1  christos       else
   13782      1.1  christos 	op = get16 ();
   13783      1.1  christos       break;
   13784      1.1  christos     default:
   13785      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   13786      1.1  christos       return;
   13787      1.1  christos     }
   13788      1.1  christos 
   13789      1.1  christos   scratchbuf[0] = '$';
   13790      1.1  christos   print_operand_value (scratchbuf + 1, 1, op);
   13791      1.1  christos   oappend (scratchbuf + intel_syntax);
   13792      1.1  christos }
   13793      1.1  christos 
   13794      1.1  christos static void
   13795      1.1  christos OP_J (int bytemode, int sizeflag)
   13796      1.1  christos {
   13797      1.1  christos   bfd_vma disp;
   13798      1.1  christos   bfd_vma mask = -1;
   13799      1.1  christos   bfd_vma segment = 0;
   13800      1.1  christos 
   13801      1.1  christos   switch (bytemode)
   13802      1.1  christos     {
   13803      1.1  christos     case b_mode:
   13804      1.1  christos       FETCH_DATA (the_info, codep + 1);
   13805      1.1  christos       disp = *codep++;
   13806      1.1  christos       if ((disp & 0x80) != 0)
   13807      1.1  christos 	disp -= 0x100;
   13808      1.1  christos       break;
   13809      1.1  christos     case v_mode:
   13810      1.1  christos       USED_REX (REX_W);
   13811      1.1  christos       if ((sizeflag & DFLAG) || (rex & REX_W))
   13812      1.1  christos 	disp = get32s ();
   13813      1.1  christos       else
   13814      1.1  christos 	{
   13815      1.1  christos 	  disp = get16 ();
   13816      1.1  christos 	  if ((disp & 0x8000) != 0)
   13817      1.1  christos 	    disp -= 0x10000;
   13818      1.1  christos 	  /* In 16bit mode, address is wrapped around at 64k within
   13819      1.1  christos 	     the same segment.  Otherwise, a data16 prefix on a jump
   13820      1.1  christos 	     instruction means that the pc is masked to 16 bits after
   13821      1.1  christos 	     the displacement is added!  */
   13822      1.1  christos 	  mask = 0xffff;
   13823      1.1  christos 	  if ((prefixes & PREFIX_DATA) == 0)
   13824      1.1  christos 	    segment = ((start_pc + codep - start_codep)
   13825      1.1  christos 		       & ~((bfd_vma) 0xffff));
   13826      1.1  christos 	}
   13827      1.1  christos       if (!(rex & REX_W))
   13828      1.1  christos 	used_prefixes |= (prefixes & PREFIX_DATA);
   13829      1.1  christos       break;
   13830      1.1  christos     default:
   13831      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   13832      1.1  christos       return;
   13833      1.1  christos     }
   13834      1.1  christos   disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
   13835      1.1  christos   set_op (disp, 0);
   13836      1.1  christos   print_operand_value (scratchbuf, 1, disp);
   13837      1.1  christos   oappend (scratchbuf);
   13838      1.1  christos }
   13839      1.1  christos 
   13840      1.1  christos static void
   13841      1.1  christos OP_SEG (int bytemode, int sizeflag)
   13842      1.1  christos {
   13843      1.1  christos   if (bytemode == w_mode)
   13844      1.1  christos     oappend (names_seg[modrm.reg]);
   13845      1.1  christos   else
   13846      1.1  christos     OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
   13847      1.1  christos }
   13848      1.1  christos 
   13849      1.1  christos static void
   13850      1.1  christos OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
   13851      1.1  christos {
   13852      1.1  christos   int seg, offset;
   13853      1.1  christos 
   13854      1.1  christos   if (sizeflag & DFLAG)
   13855      1.1  christos     {
   13856      1.1  christos       offset = get32 ();
   13857      1.1  christos       seg = get16 ();
   13858      1.1  christos     }
   13859      1.1  christos   else
   13860      1.1  christos     {
   13861      1.1  christos       offset = get16 ();
   13862      1.1  christos       seg = get16 ();
   13863      1.1  christos     }
   13864      1.1  christos   used_prefixes |= (prefixes & PREFIX_DATA);
   13865      1.1  christos   if (intel_syntax)
   13866      1.1  christos     sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
   13867      1.1  christos   else
   13868      1.1  christos     sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
   13869      1.1  christos   oappend (scratchbuf);
   13870      1.1  christos }
   13871      1.1  christos 
   13872      1.1  christos static void
   13873      1.1  christos OP_OFF (int bytemode, int sizeflag)
   13874      1.1  christos {
   13875      1.1  christos   bfd_vma off;
   13876      1.1  christos 
   13877      1.1  christos   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
   13878      1.1  christos     intel_operand_size (bytemode, sizeflag);
   13879      1.1  christos   append_seg ();
   13880      1.1  christos 
   13881      1.1  christos   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
   13882      1.1  christos     off = get32 ();
   13883      1.1  christos   else
   13884      1.1  christos     off = get16 ();
   13885      1.1  christos 
   13886      1.1  christos   if (intel_syntax)
   13887      1.1  christos     {
   13888      1.1  christos       if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
   13889      1.1  christos 			| PREFIX_ES | PREFIX_FS | PREFIX_GS)))
   13890      1.1  christos 	{
   13891      1.1  christos 	  oappend (names_seg[ds_reg - es_reg]);
   13892      1.1  christos 	  oappend (":");
   13893      1.1  christos 	}
   13894      1.1  christos     }
   13895      1.1  christos   print_operand_value (scratchbuf, 1, off);
   13896      1.1  christos   oappend (scratchbuf);
   13897      1.1  christos }
   13898      1.1  christos 
   13899      1.1  christos static void
   13900      1.1  christos OP_OFF64 (int bytemode, int sizeflag)
   13901      1.1  christos {
   13902      1.1  christos   bfd_vma off;
   13903      1.1  christos 
   13904      1.1  christos   if (address_mode != mode_64bit
   13905      1.1  christos       || (prefixes & PREFIX_ADDR))
   13906      1.1  christos     {
   13907      1.1  christos       OP_OFF (bytemode, sizeflag);
   13908      1.1  christos       return;
   13909      1.1  christos     }
   13910      1.1  christos 
   13911      1.1  christos   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
   13912      1.1  christos     intel_operand_size (bytemode, sizeflag);
   13913      1.1  christos   append_seg ();
   13914      1.1  christos 
   13915      1.1  christos   off = get64 ();
   13916      1.1  christos 
   13917      1.1  christos   if (intel_syntax)
   13918      1.1  christos     {
   13919      1.1  christos       if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
   13920      1.1  christos 			| PREFIX_ES | PREFIX_FS | PREFIX_GS)))
   13921      1.1  christos 	{
   13922      1.1  christos 	  oappend (names_seg[ds_reg - es_reg]);
   13923      1.1  christos 	  oappend (":");
   13924      1.1  christos 	}
   13925      1.1  christos     }
   13926      1.1  christos   print_operand_value (scratchbuf, 1, off);
   13927      1.1  christos   oappend (scratchbuf);
   13928      1.1  christos }
   13929      1.1  christos 
   13930      1.1  christos static void
   13931      1.1  christos ptr_reg (int code, int sizeflag)
   13932      1.1  christos {
   13933      1.1  christos   const char *s;
   13934      1.1  christos 
   13935      1.1  christos   *obufp++ = open_char;
   13936      1.1  christos   used_prefixes |= (prefixes & PREFIX_ADDR);
   13937      1.1  christos   if (address_mode == mode_64bit)
   13938      1.1  christos     {
   13939      1.1  christos       if (!(sizeflag & AFLAG))
   13940      1.1  christos 	s = names32[code - eAX_reg];
   13941      1.1  christos       else
   13942      1.1  christos 	s = names64[code - eAX_reg];
   13943      1.1  christos     }
   13944      1.1  christos   else if (sizeflag & AFLAG)
   13945      1.1  christos     s = names32[code - eAX_reg];
   13946      1.1  christos   else
   13947      1.1  christos     s = names16[code - eAX_reg];
   13948      1.1  christos   oappend (s);
   13949      1.1  christos   *obufp++ = close_char;
   13950      1.1  christos   *obufp = 0;
   13951      1.1  christos }
   13952      1.1  christos 
   13953      1.1  christos static void
   13954      1.1  christos OP_ESreg (int code, int sizeflag)
   13955      1.1  christos {
   13956      1.1  christos   if (intel_syntax)
   13957      1.1  christos     {
   13958      1.1  christos       switch (codep[-1])
   13959      1.1  christos 	{
   13960      1.1  christos 	case 0x6d:	/* insw/insl */
   13961      1.1  christos 	  intel_operand_size (z_mode, sizeflag);
   13962      1.1  christos 	  break;
   13963      1.1  christos 	case 0xa5:	/* movsw/movsl/movsq */
   13964      1.1  christos 	case 0xa7:	/* cmpsw/cmpsl/cmpsq */
   13965      1.1  christos 	case 0xab:	/* stosw/stosl */
   13966      1.1  christos 	case 0xaf:	/* scasw/scasl */
   13967      1.1  christos 	  intel_operand_size (v_mode, sizeflag);
   13968      1.1  christos 	  break;
   13969      1.1  christos 	default:
   13970      1.1  christos 	  intel_operand_size (b_mode, sizeflag);
   13971      1.1  christos 	}
   13972      1.1  christos     }
   13973      1.1  christos   oappend ("%es:" + intel_syntax);
   13974      1.1  christos   ptr_reg (code, sizeflag);
   13975      1.1  christos }
   13976      1.1  christos 
   13977      1.1  christos static void
   13978      1.1  christos OP_DSreg (int code, int sizeflag)
   13979      1.1  christos {
   13980      1.1  christos   if (intel_syntax)
   13981      1.1  christos     {
   13982      1.1  christos       switch (codep[-1])
   13983      1.1  christos 	{
   13984      1.1  christos 	case 0x6f:	/* outsw/outsl */
   13985      1.1  christos 	  intel_operand_size (z_mode, sizeflag);
   13986      1.1  christos 	  break;
   13987      1.1  christos 	case 0xa5:	/* movsw/movsl/movsq */
   13988      1.1  christos 	case 0xa7:	/* cmpsw/cmpsl/cmpsq */
   13989      1.1  christos 	case 0xad:	/* lodsw/lodsl/lodsq */
   13990      1.1  christos 	  intel_operand_size (v_mode, sizeflag);
   13991      1.1  christos 	  break;
   13992      1.1  christos 	default:
   13993      1.1  christos 	  intel_operand_size (b_mode, sizeflag);
   13994      1.1  christos 	}
   13995      1.1  christos     }
   13996      1.1  christos   if ((prefixes
   13997      1.1  christos        & (PREFIX_CS
   13998      1.1  christos 	  | PREFIX_DS
   13999      1.1  christos 	  | PREFIX_SS
   14000      1.1  christos 	  | PREFIX_ES
   14001      1.1  christos 	  | PREFIX_FS
   14002      1.1  christos 	  | PREFIX_GS)) == 0)
   14003      1.1  christos     prefixes |= PREFIX_DS;
   14004      1.1  christos   append_seg ();
   14005      1.1  christos   ptr_reg (code, sizeflag);
   14006      1.1  christos }
   14007      1.1  christos 
   14008      1.1  christos static void
   14009      1.1  christos OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   14010      1.1  christos {
   14011      1.1  christos   int add;
   14012      1.1  christos   if (rex & REX_R)
   14013      1.1  christos     {
   14014      1.1  christos       USED_REX (REX_R);
   14015      1.1  christos       add = 8;
   14016      1.1  christos     }
   14017      1.1  christos   else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
   14018      1.1  christos     {
   14019      1.1  christos       all_prefixes[last_lock_prefix] = 0;
   14020      1.1  christos       used_prefixes |= PREFIX_LOCK;
   14021      1.1  christos       add = 8;
   14022      1.1  christos     }
   14023      1.1  christos   else
   14024      1.1  christos     add = 0;
   14025      1.1  christos   sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
   14026      1.1  christos   oappend (scratchbuf + intel_syntax);
   14027      1.1  christos }
   14028      1.1  christos 
   14029      1.1  christos static void
   14030      1.1  christos OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   14031      1.1  christos {
   14032      1.1  christos   int add;
   14033      1.1  christos   USED_REX (REX_R);
   14034      1.1  christos   if (rex & REX_R)
   14035      1.1  christos     add = 8;
   14036      1.1  christos   else
   14037      1.1  christos     add = 0;
   14038      1.1  christos   if (intel_syntax)
   14039      1.1  christos     sprintf (scratchbuf, "db%d", modrm.reg + add);
   14040      1.1  christos   else
   14041      1.1  christos     sprintf (scratchbuf, "%%db%d", modrm.reg + add);
   14042      1.1  christos   oappend (scratchbuf);
   14043      1.1  christos }
   14044      1.1  christos 
   14045      1.1  christos static void
   14046      1.1  christos OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   14047      1.1  christos {
   14048      1.1  christos   sprintf (scratchbuf, "%%tr%d", modrm.reg);
   14049      1.1  christos   oappend (scratchbuf + intel_syntax);
   14050      1.1  christos }
   14051      1.1  christos 
   14052      1.1  christos static void
   14053      1.1  christos OP_R (int bytemode, int sizeflag)
   14054      1.1  christos {
   14055      1.1  christos   if (modrm.mod == 3)
   14056      1.1  christos     OP_E (bytemode, sizeflag);
   14057      1.1  christos   else
   14058      1.1  christos     BadOp ();
   14059      1.1  christos }
   14060      1.1  christos 
   14061      1.1  christos static void
   14062      1.1  christos OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   14063      1.1  christos {
   14064      1.1  christos   int reg = modrm.reg;
   14065      1.1  christos   const char **names;
   14066      1.1  christos 
   14067      1.1  christos   used_prefixes |= (prefixes & PREFIX_DATA);
   14068      1.1  christos   if (prefixes & PREFIX_DATA)
   14069      1.1  christos     {
   14070      1.1  christos       names = names_xmm;
   14071      1.1  christos       USED_REX (REX_R);
   14072      1.1  christos       if (rex & REX_R)
   14073      1.1  christos 	reg += 8;
   14074      1.1  christos     }
   14075      1.1  christos   else
   14076      1.1  christos     names = names_mm;
   14077      1.1  christos   oappend (names[reg]);
   14078      1.1  christos }
   14079      1.1  christos 
   14080      1.1  christos static void
   14081      1.1  christos OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
   14082      1.1  christos {
   14083      1.1  christos   int reg = modrm.reg;
   14084      1.1  christos   const char **names;
   14085      1.1  christos 
   14086      1.1  christos   USED_REX (REX_R);
   14087      1.1  christos   if (rex & REX_R)
   14088      1.1  christos     reg += 8;
   14089      1.1  christos   if (need_vex
   14090      1.1  christos       && bytemode != xmm_mode
   14091      1.1  christos       && bytemode != scalar_mode)
   14092      1.1  christos     {
   14093      1.1  christos       switch (vex.length)
   14094      1.1  christos 	{
   14095      1.1  christos 	case 128:
   14096      1.1  christos 	  names = names_xmm;
   14097      1.1  christos 	  break;
   14098      1.1  christos 	case 256:
   14099  1.1.1.2  christos 	  if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
   14100  1.1.1.2  christos 	    names = names_ymm;
   14101  1.1.1.2  christos 	  else
   14102  1.1.1.2  christos 	    names = names_xmm;
   14103      1.1  christos 	  break;
   14104      1.1  christos 	default:
   14105      1.1  christos 	  abort ();
   14106      1.1  christos 	}
   14107      1.1  christos     }
   14108      1.1  christos   else
   14109      1.1  christos     names = names_xmm;
   14110      1.1  christos   oappend (names[reg]);
   14111      1.1  christos }
   14112      1.1  christos 
   14113      1.1  christos static void
   14114      1.1  christos OP_EM (int bytemode, int sizeflag)
   14115      1.1  christos {
   14116      1.1  christos   int reg;
   14117      1.1  christos   const char **names;
   14118      1.1  christos 
   14119      1.1  christos   if (modrm.mod != 3)
   14120      1.1  christos     {
   14121      1.1  christos       if (intel_syntax
   14122      1.1  christos 	  && (bytemode == v_mode || bytemode == v_swap_mode))
   14123      1.1  christos 	{
   14124      1.1  christos 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
   14125      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   14126  1.1.1.2  christos 	}
   14127      1.1  christos       OP_E (bytemode, sizeflag);
   14128      1.1  christos       return;
   14129      1.1  christos     }
   14130      1.1  christos 
   14131      1.1  christos   if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
   14132      1.1  christos     swap_operand ();
   14133      1.1  christos 
   14134      1.1  christos   /* Skip mod/rm byte.  */
   14135      1.1  christos   MODRM_CHECK;
   14136      1.1  christos   codep++;
   14137      1.1  christos   used_prefixes |= (prefixes & PREFIX_DATA);
   14138      1.1  christos   reg = modrm.rm;
   14139      1.1  christos   if (prefixes & PREFIX_DATA)
   14140      1.1  christos     {
   14141      1.1  christos       names = names_xmm;
   14142      1.1  christos       USED_REX (REX_B);
   14143      1.1  christos       if (rex & REX_B)
   14144      1.1  christos 	reg += 8;
   14145      1.1  christos     }
   14146      1.1  christos   else
   14147      1.1  christos     names = names_mm;
   14148      1.1  christos   oappend (names[reg]);
   14149      1.1  christos }
   14150      1.1  christos 
   14151      1.1  christos /* cvt* are the only instructions in sse2 which have
   14152      1.1  christos    both SSE and MMX operands and also have 0x66 prefix
   14153      1.1  christos    in their opcode. 0x66 was originally used to differentiate
   14154      1.1  christos    between SSE and MMX instruction(operands). So we have to handle the
   14155      1.1  christos    cvt* separately using OP_EMC and OP_MXC */
   14156      1.1  christos static void
   14157      1.1  christos OP_EMC (int bytemode, int sizeflag)
   14158      1.1  christos {
   14159      1.1  christos   if (modrm.mod != 3)
   14160      1.1  christos     {
   14161      1.1  christos       if (intel_syntax && bytemode == v_mode)
   14162      1.1  christos 	{
   14163      1.1  christos 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
   14164      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   14165  1.1.1.2  christos 	}
   14166      1.1  christos       OP_E (bytemode, sizeflag);
   14167      1.1  christos       return;
   14168      1.1  christos     }
   14169      1.1  christos 
   14170      1.1  christos   /* Skip mod/rm byte.  */
   14171      1.1  christos   MODRM_CHECK;
   14172      1.1  christos   codep++;
   14173      1.1  christos   used_prefixes |= (prefixes & PREFIX_DATA);
   14174      1.1  christos   oappend (names_mm[modrm.rm]);
   14175      1.1  christos }
   14176      1.1  christos 
   14177      1.1  christos static void
   14178      1.1  christos OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   14179      1.1  christos {
   14180      1.1  christos   used_prefixes |= (prefixes & PREFIX_DATA);
   14181      1.1  christos   oappend (names_mm[modrm.reg]);
   14182      1.1  christos }
   14183      1.1  christos 
   14184      1.1  christos static void
   14185      1.1  christos OP_EX (int bytemode, int sizeflag)
   14186      1.1  christos {
   14187      1.1  christos   int reg;
   14188      1.1  christos   const char **names;
   14189      1.1  christos 
   14190      1.1  christos   /* Skip mod/rm byte.  */
   14191      1.1  christos   MODRM_CHECK;
   14192      1.1  christos   codep++;
   14193      1.1  christos 
   14194      1.1  christos   if (modrm.mod != 3)
   14195      1.1  christos     {
   14196      1.1  christos       OP_E_memory (bytemode, sizeflag);
   14197      1.1  christos       return;
   14198      1.1  christos     }
   14199      1.1  christos 
   14200      1.1  christos   reg = modrm.rm;
   14201      1.1  christos   USED_REX (REX_B);
   14202      1.1  christos   if (rex & REX_B)
   14203      1.1  christos     reg += 8;
   14204      1.1  christos 
   14205      1.1  christos   if ((sizeflag & SUFFIX_ALWAYS)
   14206      1.1  christos       && (bytemode == x_swap_mode
   14207      1.1  christos 	  || bytemode == d_swap_mode
   14208  1.1.1.2  christos 	  || bytemode == d_scalar_swap_mode
   14209      1.1  christos 	  || bytemode == q_swap_mode
   14210      1.1  christos 	  || bytemode == q_scalar_swap_mode))
   14211      1.1  christos     swap_operand ();
   14212      1.1  christos 
   14213      1.1  christos   if (need_vex
   14214      1.1  christos       && bytemode != xmm_mode
   14215  1.1.1.2  christos       && bytemode != xmmdw_mode
   14216  1.1.1.2  christos       && bytemode != xmmqd_mode
   14217  1.1.1.2  christos       && bytemode != xmm_mb_mode
   14218  1.1.1.2  christos       && bytemode != xmm_mw_mode
   14219  1.1.1.2  christos       && bytemode != xmm_md_mode
   14220  1.1.1.2  christos       && bytemode != xmm_mq_mode
   14221      1.1  christos       && bytemode != xmmq_mode
   14222      1.1  christos       && bytemode != d_scalar_mode
   14223  1.1.1.2  christos       && bytemode != d_scalar_swap_mode
   14224      1.1  christos       && bytemode != q_scalar_mode
   14225      1.1  christos       && bytemode != q_scalar_swap_mode
   14226      1.1  christos       && bytemode != vex_scalar_w_dq_mode)
   14227      1.1  christos     {
   14228      1.1  christos       switch (vex.length)
   14229      1.1  christos 	{
   14230      1.1  christos 	case 128:
   14231      1.1  christos 	  names = names_xmm;
   14232      1.1  christos 	  break;
   14233      1.1  christos 	case 256:
   14234      1.1  christos 	  names = names_ymm;
   14235      1.1  christos 	  break;
   14236      1.1  christos 	default:
   14237      1.1  christos 	  abort ();
   14238      1.1  christos 	}
   14239      1.1  christos     }
   14240      1.1  christos   else
   14241      1.1  christos     names = names_xmm;
   14242      1.1  christos   oappend (names[reg]);
   14243      1.1  christos }
   14244      1.1  christos 
   14245      1.1  christos static void
   14246      1.1  christos OP_MS (int bytemode, int sizeflag)
   14247      1.1  christos {
   14248      1.1  christos   if (modrm.mod == 3)
   14249      1.1  christos     OP_EM (bytemode, sizeflag);
   14250      1.1  christos   else
   14251      1.1  christos     BadOp ();
   14252      1.1  christos }
   14253      1.1  christos 
   14254      1.1  christos static void
   14255      1.1  christos OP_XS (int bytemode, int sizeflag)
   14256      1.1  christos {
   14257      1.1  christos   if (modrm.mod == 3)
   14258      1.1  christos     OP_EX (bytemode, sizeflag);
   14259      1.1  christos   else
   14260      1.1  christos     BadOp ();
   14261      1.1  christos }
   14262      1.1  christos 
   14263      1.1  christos static void
   14264      1.1  christos OP_M (int bytemode, int sizeflag)
   14265      1.1  christos {
   14266      1.1  christos   if (modrm.mod == 3)
   14267      1.1  christos     /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
   14268      1.1  christos     BadOp ();
   14269      1.1  christos   else
   14270      1.1  christos     OP_E (bytemode, sizeflag);
   14271      1.1  christos }
   14272      1.1  christos 
   14273      1.1  christos static void
   14274      1.1  christos OP_0f07 (int bytemode, int sizeflag)
   14275      1.1  christos {
   14276      1.1  christos   if (modrm.mod != 3 || modrm.rm != 0)
   14277      1.1  christos     BadOp ();
   14278      1.1  christos   else
   14279      1.1  christos     OP_E (bytemode, sizeflag);
   14280      1.1  christos }
   14281      1.1  christos 
   14282      1.1  christos /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
   14283      1.1  christos    32bit mode and "xchg %rax,%rax" in 64bit mode.  */
   14284      1.1  christos 
   14285      1.1  christos static void
   14286      1.1  christos NOP_Fixup1 (int bytemode, int sizeflag)
   14287      1.1  christos {
   14288      1.1  christos   if ((prefixes & PREFIX_DATA) != 0
   14289      1.1  christos       || (rex != 0
   14290      1.1  christos 	  && rex != 0x48
   14291      1.1  christos 	  && address_mode == mode_64bit))
   14292      1.1  christos     OP_REG (bytemode, sizeflag);
   14293      1.1  christos   else
   14294      1.1  christos     strcpy (obuf, "nop");
   14295      1.1  christos }
   14296      1.1  christos 
   14297      1.1  christos static void
   14298      1.1  christos NOP_Fixup2 (int bytemode, int sizeflag)
   14299      1.1  christos {
   14300      1.1  christos   if ((prefixes & PREFIX_DATA) != 0
   14301      1.1  christos       || (rex != 0
   14302      1.1  christos 	  && rex != 0x48
   14303      1.1  christos 	  && address_mode == mode_64bit))
   14304      1.1  christos     OP_IMREG (bytemode, sizeflag);
   14305      1.1  christos }
   14306      1.1  christos 
   14307      1.1  christos static const char *const Suffix3DNow[] = {
   14308      1.1  christos /* 00 */	NULL,		NULL,		NULL,		NULL,
   14309      1.1  christos /* 04 */	NULL,		NULL,		NULL,		NULL,
   14310      1.1  christos /* 08 */	NULL,		NULL,		NULL,		NULL,
   14311      1.1  christos /* 0C */	"pi2fw",	"pi2fd",	NULL,		NULL,
   14312      1.1  christos /* 10 */	NULL,		NULL,		NULL,		NULL,
   14313      1.1  christos /* 14 */	NULL,		NULL,		NULL,		NULL,
   14314      1.1  christos /* 18 */	NULL,		NULL,		NULL,		NULL,
   14315      1.1  christos /* 1C */	"pf2iw",	"pf2id",	NULL,		NULL,
   14316      1.1  christos /* 20 */	NULL,		NULL,		NULL,		NULL,
   14317      1.1  christos /* 24 */	NULL,		NULL,		NULL,		NULL,
   14318      1.1  christos /* 28 */	NULL,		NULL,		NULL,		NULL,
   14319      1.1  christos /* 2C */	NULL,		NULL,		NULL,		NULL,
   14320      1.1  christos /* 30 */	NULL,		NULL,		NULL,		NULL,
   14321      1.1  christos /* 34 */	NULL,		NULL,		NULL,		NULL,
   14322      1.1  christos /* 38 */	NULL,		NULL,		NULL,		NULL,
   14323      1.1  christos /* 3C */	NULL,		NULL,		NULL,		NULL,
   14324      1.1  christos /* 40 */	NULL,		NULL,		NULL,		NULL,
   14325      1.1  christos /* 44 */	NULL,		NULL,		NULL,		NULL,
   14326      1.1  christos /* 48 */	NULL,		NULL,		NULL,		NULL,
   14327      1.1  christos /* 4C */	NULL,		NULL,		NULL,		NULL,
   14328      1.1  christos /* 50 */	NULL,		NULL,		NULL,		NULL,
   14329      1.1  christos /* 54 */	NULL,		NULL,		NULL,		NULL,
   14330      1.1  christos /* 58 */	NULL,		NULL,		NULL,		NULL,
   14331      1.1  christos /* 5C */	NULL,		NULL,		NULL,		NULL,
   14332      1.1  christos /* 60 */	NULL,		NULL,		NULL,		NULL,
   14333      1.1  christos /* 64 */	NULL,		NULL,		NULL,		NULL,
   14334      1.1  christos /* 68 */	NULL,		NULL,		NULL,		NULL,
   14335      1.1  christos /* 6C */	NULL,		NULL,		NULL,		NULL,
   14336      1.1  christos /* 70 */	NULL,		NULL,		NULL,		NULL,
   14337      1.1  christos /* 74 */	NULL,		NULL,		NULL,		NULL,
   14338      1.1  christos /* 78 */	NULL,		NULL,		NULL,		NULL,
   14339      1.1  christos /* 7C */	NULL,		NULL,		NULL,		NULL,
   14340      1.1  christos /* 80 */	NULL,		NULL,		NULL,		NULL,
   14341      1.1  christos /* 84 */	NULL,		NULL,		NULL,		NULL,
   14342      1.1  christos /* 88 */	NULL,		NULL,		"pfnacc",	NULL,
   14343      1.1  christos /* 8C */	NULL,		NULL,		"pfpnacc",	NULL,
   14344      1.1  christos /* 90 */	"pfcmpge",	NULL,		NULL,		NULL,
   14345      1.1  christos /* 94 */	"pfmin",	NULL,		"pfrcp",	"pfrsqrt",
   14346      1.1  christos /* 98 */	NULL,		NULL,		"pfsub",	NULL,
   14347      1.1  christos /* 9C */	NULL,		NULL,		"pfadd",	NULL,
   14348      1.1  christos /* A0 */	"pfcmpgt",	NULL,		NULL,		NULL,
   14349      1.1  christos /* A4 */	"pfmax",	NULL,		"pfrcpit1",	"pfrsqit1",
   14350      1.1  christos /* A8 */	NULL,		NULL,		"pfsubr",	NULL,
   14351      1.1  christos /* AC */	NULL,		NULL,		"pfacc",	NULL,
   14352      1.1  christos /* B0 */	"pfcmpeq",	NULL,		NULL,		NULL,
   14353      1.1  christos /* B4 */	"pfmul",	NULL,		"pfrcpit2",	"pmulhrw",
   14354      1.1  christos /* B8 */	NULL,		NULL,		NULL,		"pswapd",
   14355      1.1  christos /* BC */	NULL,		NULL,		NULL,		"pavgusb",
   14356      1.1  christos /* C0 */	NULL,		NULL,		NULL,		NULL,
   14357      1.1  christos /* C4 */	NULL,		NULL,		NULL,		NULL,
   14358      1.1  christos /* C8 */	NULL,		NULL,		NULL,		NULL,
   14359      1.1  christos /* CC */	NULL,		NULL,		NULL,		NULL,
   14360      1.1  christos /* D0 */	NULL,		NULL,		NULL,		NULL,
   14361      1.1  christos /* D4 */	NULL,		NULL,		NULL,		NULL,
   14362      1.1  christos /* D8 */	NULL,		NULL,		NULL,		NULL,
   14363      1.1  christos /* DC */	NULL,		NULL,		NULL,		NULL,
   14364      1.1  christos /* E0 */	NULL,		NULL,		NULL,		NULL,
   14365      1.1  christos /* E4 */	NULL,		NULL,		NULL,		NULL,
   14366      1.1  christos /* E8 */	NULL,		NULL,		NULL,		NULL,
   14367      1.1  christos /* EC */	NULL,		NULL,		NULL,		NULL,
   14368      1.1  christos /* F0 */	NULL,		NULL,		NULL,		NULL,
   14369      1.1  christos /* F4 */	NULL,		NULL,		NULL,		NULL,
   14370      1.1  christos /* F8 */	NULL,		NULL,		NULL,		NULL,
   14371      1.1  christos /* FC */	NULL,		NULL,		NULL,		NULL,
   14372      1.1  christos };
   14373      1.1  christos 
   14374      1.1  christos static void
   14375      1.1  christos OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   14376      1.1  christos {
   14377      1.1  christos   const char *mnemonic;
   14378      1.1  christos 
   14379      1.1  christos   FETCH_DATA (the_info, codep + 1);
   14380      1.1  christos   /* AMD 3DNow! instructions are specified by an opcode suffix in the
   14381      1.1  christos      place where an 8-bit immediate would normally go.  ie. the last
   14382      1.1  christos      byte of the instruction.  */
   14383      1.1  christos   obufp = mnemonicendp;
   14384      1.1  christos   mnemonic = Suffix3DNow[*codep++ & 0xff];
   14385      1.1  christos   if (mnemonic)
   14386      1.1  christos     oappend (mnemonic);
   14387      1.1  christos   else
   14388      1.1  christos     {
   14389      1.1  christos       /* Since a variable sized modrm/sib chunk is between the start
   14390      1.1  christos 	 of the opcode (0x0f0f) and the opcode suffix, we need to do
   14391      1.1  christos 	 all the modrm processing first, and don't know until now that
   14392      1.1  christos 	 we have a bad opcode.  This necessitates some cleaning up.  */
   14393      1.1  christos       op_out[0][0] = '\0';
   14394      1.1  christos       op_out[1][0] = '\0';
   14395      1.1  christos       BadOp ();
   14396      1.1  christos     }
   14397      1.1  christos   mnemonicendp = obufp;
   14398      1.1  christos }
   14399      1.1  christos 
   14400      1.1  christos static struct op simd_cmp_op[] =
   14401      1.1  christos {
   14402      1.1  christos   { STRING_COMMA_LEN ("eq") },
   14403      1.1  christos   { STRING_COMMA_LEN ("lt") },
   14404      1.1  christos   { STRING_COMMA_LEN ("le") },
   14405      1.1  christos   { STRING_COMMA_LEN ("unord") },
   14406      1.1  christos   { STRING_COMMA_LEN ("neq") },
   14407      1.1  christos   { STRING_COMMA_LEN ("nlt") },
   14408      1.1  christos   { STRING_COMMA_LEN ("nle") },
   14409      1.1  christos   { STRING_COMMA_LEN ("ord") }
   14410      1.1  christos };
   14411      1.1  christos 
   14412      1.1  christos static void
   14413      1.1  christos CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   14414      1.1  christos {
   14415      1.1  christos   unsigned int cmp_type;
   14416      1.1  christos 
   14417      1.1  christos   FETCH_DATA (the_info, codep + 1);
   14418      1.1  christos   cmp_type = *codep++ & 0xff;
   14419      1.1  christos   if (cmp_type < ARRAY_SIZE (simd_cmp_op))
   14420      1.1  christos     {
   14421      1.1  christos       char suffix [3];
   14422      1.1  christos       char *p = mnemonicendp - 2;
   14423      1.1  christos       suffix[0] = p[0];
   14424      1.1  christos       suffix[1] = p[1];
   14425      1.1  christos       suffix[2] = '\0';
   14426      1.1  christos       sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
   14427      1.1  christos       mnemonicendp += simd_cmp_op[cmp_type].len;
   14428      1.1  christos     }
   14429      1.1  christos   else
   14430      1.1  christos     {
   14431      1.1  christos       /* We have a reserved extension byte.  Output it directly.  */
   14432      1.1  christos       scratchbuf[0] = '$';
   14433      1.1  christos       print_operand_value (scratchbuf + 1, 1, cmp_type);
   14434      1.1  christos       oappend (scratchbuf + intel_syntax);
   14435      1.1  christos       scratchbuf[0] = '\0';
   14436      1.1  christos     }
   14437      1.1  christos }
   14438      1.1  christos 
   14439      1.1  christos static void
   14440      1.1  christos OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
   14441      1.1  christos 	  int sizeflag ATTRIBUTE_UNUSED)
   14442      1.1  christos {
   14443      1.1  christos   /* mwait %eax,%ecx  */
   14444      1.1  christos   if (!intel_syntax)
   14445      1.1  christos     {
   14446      1.1  christos       const char **names = (address_mode == mode_64bit
   14447      1.1  christos 			    ? names64 : names32);
   14448      1.1  christos       strcpy (op_out[0], names[0]);
   14449      1.1  christos       strcpy (op_out[1], names[1]);
   14450      1.1  christos       two_source_ops = 1;
   14451      1.1  christos     }
   14452      1.1  christos   /* Skip mod/rm byte.  */
   14453      1.1  christos   MODRM_CHECK;
   14454      1.1  christos   codep++;
   14455      1.1  christos }
   14456      1.1  christos 
   14457      1.1  christos static void
   14458      1.1  christos OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
   14459      1.1  christos 	    int sizeflag ATTRIBUTE_UNUSED)
   14460      1.1  christos {
   14461      1.1  christos   /* monitor %eax,%ecx,%edx"  */
   14462      1.1  christos   if (!intel_syntax)
   14463      1.1  christos     {
   14464      1.1  christos       const char **op1_names;
   14465      1.1  christos       const char **names = (address_mode == mode_64bit
   14466      1.1  christos 			    ? names64 : names32);
   14467      1.1  christos 
   14468      1.1  christos       if (!(prefixes & PREFIX_ADDR))
   14469      1.1  christos 	op1_names = (address_mode == mode_16bit
   14470      1.1  christos 		     ? names16 : names);
   14471      1.1  christos       else
   14472      1.1  christos 	{
   14473      1.1  christos 	  /* Remove "addr16/addr32".  */
   14474      1.1  christos 	  all_prefixes[last_addr_prefix] = 0;
   14475      1.1  christos 	  op1_names = (address_mode != mode_32bit
   14476      1.1  christos 		       ? names32 : names16);
   14477      1.1  christos 	  used_prefixes |= PREFIX_ADDR;
   14478      1.1  christos 	}
   14479      1.1  christos       strcpy (op_out[0], op1_names[0]);
   14480      1.1  christos       strcpy (op_out[1], names[1]);
   14481      1.1  christos       strcpy (op_out[2], names[2]);
   14482      1.1  christos       two_source_ops = 1;
   14483      1.1  christos     }
   14484      1.1  christos   /* Skip mod/rm byte.  */
   14485      1.1  christos   MODRM_CHECK;
   14486      1.1  christos   codep++;
   14487      1.1  christos }
   14488      1.1  christos 
   14489      1.1  christos static void
   14490      1.1  christos BadOp (void)
   14491      1.1  christos {
   14492      1.1  christos   /* Throw away prefixes and 1st. opcode byte.  */
   14493      1.1  christos   codep = insn_codep + 1;
   14494      1.1  christos   oappend ("(bad)");
   14495      1.1  christos }
   14496      1.1  christos 
   14497      1.1  christos static void
   14498      1.1  christos REP_Fixup (int bytemode, int sizeflag)
   14499      1.1  christos {
   14500      1.1  christos   /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
   14501      1.1  christos      lods and stos.  */
   14502      1.1  christos   if (prefixes & PREFIX_REPZ)
   14503      1.1  christos     all_prefixes[last_repz_prefix] = REP_PREFIX;
   14504      1.1  christos 
   14505      1.1  christos   switch (bytemode)
   14506      1.1  christos     {
   14507      1.1  christos     case al_reg:
   14508      1.1  christos     case eAX_reg:
   14509      1.1  christos     case indir_dx_reg:
   14510      1.1  christos       OP_IMREG (bytemode, sizeflag);
   14511      1.1  christos       break;
   14512      1.1  christos     case eDI_reg:
   14513      1.1  christos       OP_ESreg (bytemode, sizeflag);
   14514      1.1  christos       break;
   14515      1.1  christos     case eSI_reg:
   14516      1.1  christos       OP_DSreg (bytemode, sizeflag);
   14517      1.1  christos       break;
   14518      1.1  christos     default:
   14519      1.1  christos       abort ();
   14520      1.1  christos       break;
   14521      1.1  christos     }
   14522      1.1  christos }
   14523      1.1  christos 
   14524  1.1.1.2  christos /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
   14525  1.1.1.2  christos    "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
   14526  1.1.1.2  christos  */
   14527  1.1.1.2  christos 
   14528  1.1.1.2  christos static void
   14529  1.1.1.2  christos HLE_Fixup1 (int bytemode, int sizeflag)
   14530  1.1.1.2  christos {
   14531  1.1.1.2  christos   if (modrm.mod != 3
   14532  1.1.1.2  christos       && (prefixes & PREFIX_LOCK) != 0)
   14533  1.1.1.2  christos     {
   14534  1.1.1.2  christos       if (prefixes & PREFIX_REPZ)
   14535  1.1.1.2  christos 	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
   14536  1.1.1.2  christos       if (prefixes & PREFIX_REPNZ)
   14537  1.1.1.2  christos 	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
   14538  1.1.1.2  christos     }
   14539  1.1.1.2  christos 
   14540  1.1.1.2  christos   OP_E (bytemode, sizeflag);
   14541  1.1.1.2  christos }
   14542  1.1.1.2  christos 
   14543  1.1.1.2  christos /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
   14544  1.1.1.2  christos    "xacquire"/"xrelease" for memory operand.  No check for LOCK prefix.
   14545  1.1.1.2  christos  */
   14546  1.1.1.2  christos 
   14547  1.1.1.2  christos static void
   14548  1.1.1.2  christos HLE_Fixup2 (int bytemode, int sizeflag)
   14549  1.1.1.2  christos {
   14550  1.1.1.2  christos   if (modrm.mod != 3)
   14551  1.1.1.2  christos     {
   14552  1.1.1.2  christos       if (prefixes & PREFIX_REPZ)
   14553  1.1.1.2  christos 	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
   14554  1.1.1.2  christos       if (prefixes & PREFIX_REPNZ)
   14555  1.1.1.2  christos 	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
   14556  1.1.1.2  christos     }
   14557  1.1.1.2  christos 
   14558  1.1.1.2  christos   OP_E (bytemode, sizeflag);
   14559  1.1.1.2  christos }
   14560  1.1.1.2  christos 
   14561  1.1.1.2  christos /* Similar to OP_E.  But the 0xf3 prefixes should be displayed as
   14562  1.1.1.2  christos    "xrelease" for memory operand.  No check for LOCK prefix.   */
   14563  1.1.1.2  christos 
   14564  1.1.1.2  christos static void
   14565  1.1.1.2  christos HLE_Fixup3 (int bytemode, int sizeflag)
   14566  1.1.1.2  christos {
   14567  1.1.1.2  christos   if (modrm.mod != 3
   14568  1.1.1.2  christos       && last_repz_prefix > last_repnz_prefix
   14569  1.1.1.2  christos       && (prefixes & PREFIX_REPZ) != 0)
   14570  1.1.1.2  christos     all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
   14571  1.1.1.2  christos 
   14572  1.1.1.2  christos   OP_E (bytemode, sizeflag);
   14573  1.1.1.2  christos }
   14574  1.1.1.2  christos 
   14575      1.1  christos static void
   14576      1.1  christos CMPXCHG8B_Fixup (int bytemode, int sizeflag)
   14577      1.1  christos {
   14578      1.1  christos   USED_REX (REX_W);
   14579      1.1  christos   if (rex & REX_W)
   14580      1.1  christos     {
   14581      1.1  christos       /* Change cmpxchg8b to cmpxchg16b.  */
   14582      1.1  christos       char *p = mnemonicendp - 2;
   14583      1.1  christos       mnemonicendp = stpcpy (p, "16b");
   14584      1.1  christos       bytemode = o_mode;
   14585      1.1  christos     }
   14586  1.1.1.2  christos   else if ((prefixes & PREFIX_LOCK) != 0)
   14587  1.1.1.2  christos     {
   14588  1.1.1.2  christos       if (prefixes & PREFIX_REPZ)
   14589  1.1.1.2  christos 	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
   14590  1.1.1.2  christos       if (prefixes & PREFIX_REPNZ)
   14591  1.1.1.2  christos 	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
   14592  1.1.1.2  christos     }
   14593  1.1.1.2  christos 
   14594      1.1  christos   OP_M (bytemode, sizeflag);
   14595      1.1  christos }
   14596      1.1  christos 
   14597      1.1  christos static void
   14598      1.1  christos XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
   14599      1.1  christos {
   14600      1.1  christos   const char **names;
   14601      1.1  christos 
   14602      1.1  christos   if (need_vex)
   14603      1.1  christos     {
   14604      1.1  christos       switch (vex.length)
   14605      1.1  christos 	{
   14606      1.1  christos 	case 128:
   14607      1.1  christos 	  names = names_xmm;
   14608      1.1  christos 	  break;
   14609      1.1  christos 	case 256:
   14610      1.1  christos 	  names = names_ymm;
   14611      1.1  christos 	  break;
   14612      1.1  christos 	default:
   14613      1.1  christos 	  abort ();
   14614      1.1  christos 	}
   14615      1.1  christos     }
   14616      1.1  christos   else
   14617      1.1  christos     names = names_xmm;
   14618      1.1  christos   oappend (names[reg]);
   14619      1.1  christos }
   14620      1.1  christos 
   14621      1.1  christos static void
   14622      1.1  christos CRC32_Fixup (int bytemode, int sizeflag)
   14623      1.1  christos {
   14624      1.1  christos   /* Add proper suffix to "crc32".  */
   14625      1.1  christos   char *p = mnemonicendp;
   14626      1.1  christos 
   14627      1.1  christos   switch (bytemode)
   14628      1.1  christos     {
   14629      1.1  christos     case b_mode:
   14630      1.1  christos       if (intel_syntax)
   14631      1.1  christos 	goto skip;
   14632      1.1  christos 
   14633      1.1  christos       *p++ = 'b';
   14634      1.1  christos       break;
   14635      1.1  christos     case v_mode:
   14636      1.1  christos       if (intel_syntax)
   14637      1.1  christos 	goto skip;
   14638      1.1  christos 
   14639      1.1  christos       USED_REX (REX_W);
   14640      1.1  christos       if (rex & REX_W)
   14641      1.1  christos 	*p++ = 'q';
   14642  1.1.1.2  christos       else
   14643      1.1  christos 	{
   14644      1.1  christos 	  if (sizeflag & DFLAG)
   14645      1.1  christos 	    *p++ = 'l';
   14646      1.1  christos 	  else
   14647      1.1  christos 	    *p++ = 'w';
   14648      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   14649      1.1  christos 	}
   14650      1.1  christos       break;
   14651      1.1  christos     default:
   14652      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   14653      1.1  christos       break;
   14654      1.1  christos     }
   14655      1.1  christos   mnemonicendp = p;
   14656      1.1  christos   *p = '\0';
   14657      1.1  christos 
   14658      1.1  christos skip:
   14659      1.1  christos   if (modrm.mod == 3)
   14660      1.1  christos     {
   14661      1.1  christos       int add;
   14662      1.1  christos 
   14663      1.1  christos       /* Skip mod/rm byte.  */
   14664      1.1  christos       MODRM_CHECK;
   14665      1.1  christos       codep++;
   14666      1.1  christos 
   14667      1.1  christos       USED_REX (REX_B);
   14668      1.1  christos       add = (rex & REX_B) ? 8 : 0;
   14669      1.1  christos       if (bytemode == b_mode)
   14670      1.1  christos 	{
   14671      1.1  christos 	  USED_REX (0);
   14672      1.1  christos 	  if (rex)
   14673      1.1  christos 	    oappend (names8rex[modrm.rm + add]);
   14674      1.1  christos 	  else
   14675      1.1  christos 	    oappend (names8[modrm.rm + add]);
   14676      1.1  christos 	}
   14677      1.1  christos       else
   14678      1.1  christos 	{
   14679      1.1  christos 	  USED_REX (REX_W);
   14680      1.1  christos 	  if (rex & REX_W)
   14681      1.1  christos 	    oappend (names64[modrm.rm + add]);
   14682      1.1  christos 	  else if ((prefixes & PREFIX_DATA))
   14683      1.1  christos 	    oappend (names16[modrm.rm + add]);
   14684      1.1  christos 	  else
   14685      1.1  christos 	    oappend (names32[modrm.rm + add]);
   14686      1.1  christos 	}
   14687      1.1  christos     }
   14688      1.1  christos   else
   14689      1.1  christos     OP_E (bytemode, sizeflag);
   14690      1.1  christos }
   14691      1.1  christos 
   14692      1.1  christos static void
   14693      1.1  christos FXSAVE_Fixup (int bytemode, int sizeflag)
   14694      1.1  christos {
   14695      1.1  christos   /* Add proper suffix to "fxsave" and "fxrstor".  */
   14696      1.1  christos   USED_REX (REX_W);
   14697      1.1  christos   if (rex & REX_W)
   14698      1.1  christos     {
   14699      1.1  christos       char *p = mnemonicendp;
   14700      1.1  christos       *p++ = '6';
   14701      1.1  christos       *p++ = '4';
   14702      1.1  christos       *p = '\0';
   14703      1.1  christos       mnemonicendp = p;
   14704      1.1  christos     }
   14705      1.1  christos   OP_M (bytemode, sizeflag);
   14706      1.1  christos }
   14707      1.1  christos 
   14708      1.1  christos /* Display the destination register operand for instructions with
   14709      1.1  christos    VEX. */
   14710      1.1  christos 
   14711      1.1  christos static void
   14712      1.1  christos OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
   14713      1.1  christos {
   14714      1.1  christos   int reg;
   14715      1.1  christos   const char **names;
   14716      1.1  christos 
   14717      1.1  christos   if (!need_vex)
   14718      1.1  christos     abort ();
   14719      1.1  christos 
   14720      1.1  christos   if (!need_vex_reg)
   14721      1.1  christos     return;
   14722      1.1  christos 
   14723      1.1  christos   reg = vex.register_specifier;
   14724      1.1  christos   if (bytemode == vex_scalar_mode)
   14725      1.1  christos     {
   14726      1.1  christos       oappend (names_xmm[reg]);
   14727      1.1  christos       return;
   14728      1.1  christos     }
   14729      1.1  christos 
   14730      1.1  christos   switch (vex.length)
   14731      1.1  christos     {
   14732      1.1  christos     case 128:
   14733      1.1  christos       switch (bytemode)
   14734      1.1  christos 	{
   14735      1.1  christos 	case vex_mode:
   14736      1.1  christos 	case vex128_mode:
   14737  1.1.1.2  christos 	case vex_vsib_q_w_dq_mode:
   14738      1.1  christos 	  names = names_xmm;
   14739      1.1  christos 	  break;
   14740      1.1  christos 	case dq_mode:
   14741      1.1  christos 	  if (vex.w)
   14742      1.1  christos 	    names = names64;
   14743      1.1  christos 	  else
   14744      1.1  christos 	    names = names32;
   14745      1.1  christos 	  break;
   14746      1.1  christos 	default:
   14747      1.1  christos 	  abort ();
   14748      1.1  christos 	  return;
   14749      1.1  christos 	}
   14750      1.1  christos       break;
   14751      1.1  christos     case 256:
   14752      1.1  christos       switch (bytemode)
   14753      1.1  christos 	{
   14754      1.1  christos 	case vex_mode:
   14755      1.1  christos 	case vex256_mode:
   14756  1.1.1.2  christos 	  names = names_ymm;
   14757  1.1.1.2  christos 	  break;
   14758  1.1.1.2  christos 	case vex_vsib_q_w_dq_mode:
   14759  1.1.1.2  christos 	  names = vex.w ? names_ymm : names_xmm;
   14760      1.1  christos 	  break;
   14761      1.1  christos 	default:
   14762      1.1  christos 	  abort ();
   14763      1.1  christos 	  return;
   14764      1.1  christos 	}
   14765      1.1  christos       break;
   14766      1.1  christos     default:
   14767      1.1  christos       abort ();
   14768      1.1  christos       break;
   14769      1.1  christos     }
   14770      1.1  christos   oappend (names[reg]);
   14771      1.1  christos }
   14772      1.1  christos 
   14773      1.1  christos /* Get the VEX immediate byte without moving codep.  */
   14774      1.1  christos 
   14775      1.1  christos static unsigned char
   14776      1.1  christos get_vex_imm8 (int sizeflag, int opnum)
   14777      1.1  christos {
   14778      1.1  christos   int bytes_before_imm = 0;
   14779      1.1  christos 
   14780      1.1  christos   if (modrm.mod != 3)
   14781      1.1  christos     {
   14782      1.1  christos       /* There are SIB/displacement bytes.  */
   14783      1.1  christos       if ((sizeflag & AFLAG) || address_mode == mode_64bit)
   14784  1.1.1.2  christos 	{
   14785      1.1  christos 	  /* 32/64 bit address mode */
   14786  1.1.1.2  christos 	  int base = modrm.rm;
   14787      1.1  christos 
   14788      1.1  christos 	  /* Check SIB byte.  */
   14789  1.1.1.2  christos 	  if (base == 4)
   14790  1.1.1.2  christos 	    {
   14791  1.1.1.2  christos 	      FETCH_DATA (the_info, codep + 1);
   14792  1.1.1.2  christos 	      base = *codep & 7;
   14793  1.1.1.2  christos 	      /* When decoding the third source, don't increase
   14794  1.1.1.2  christos 		 bytes_before_imm as this has already been incremented
   14795  1.1.1.2  christos 		 by one in OP_E_memory while decoding the second
   14796  1.1.1.2  christos 		 source operand.  */
   14797  1.1.1.2  christos 	      if (opnum == 0)
   14798  1.1.1.2  christos 		bytes_before_imm++;
   14799  1.1.1.2  christos 	    }
   14800  1.1.1.2  christos 
   14801  1.1.1.2  christos 	  /* Don't increase bytes_before_imm when decoding the third source,
   14802  1.1.1.2  christos 	     it has already been incremented by OP_E_memory while decoding
   14803  1.1.1.2  christos 	     the second source operand.  */
   14804  1.1.1.2  christos 	  if (opnum == 0)
   14805  1.1.1.2  christos 	    {
   14806  1.1.1.2  christos 	      switch (modrm.mod)
   14807  1.1.1.2  christos 		{
   14808  1.1.1.2  christos 		  case 0:
   14809  1.1.1.2  christos 		    /* When modrm.rm == 5 or modrm.rm == 4 and base in
   14810  1.1.1.2  christos 		       SIB == 5, there is a 4 byte displacement.  */
   14811  1.1.1.2  christos 		    if (base != 5)
   14812  1.1.1.2  christos 		      /* No displacement. */
   14813  1.1.1.2  christos 		      break;
   14814  1.1.1.2  christos 		  case 2:
   14815  1.1.1.2  christos 		    /* 4 byte displacement.  */
   14816  1.1.1.2  christos 		    bytes_before_imm += 4;
   14817  1.1.1.2  christos 		    break;
   14818  1.1.1.2  christos 		  case 1:
   14819  1.1.1.2  christos 		    /* 1 byte displacement.  */
   14820  1.1.1.2  christos 		    bytes_before_imm++;
   14821  1.1.1.2  christos 		    break;
   14822  1.1.1.2  christos 		}
   14823  1.1.1.2  christos 	    }
   14824  1.1.1.2  christos 	}
   14825      1.1  christos       else
   14826      1.1  christos 	{
   14827      1.1  christos 	  /* 16 bit address mode */
   14828  1.1.1.2  christos 	  /* Don't increase bytes_before_imm when decoding the third source,
   14829  1.1.1.2  christos 	     it has already been incremented by OP_E_memory while decoding
   14830  1.1.1.2  christos 	     the second source operand.  */
   14831  1.1.1.2  christos 	  if (opnum == 0)
   14832  1.1.1.2  christos 	    {
   14833      1.1  christos 	      switch (modrm.mod)
   14834      1.1  christos 		{
   14835      1.1  christos 		case 0:
   14836      1.1  christos 		  /* When modrm.rm == 6, there is a 2 byte displacement.  */
   14837      1.1  christos 		  if (modrm.rm != 6)
   14838      1.1  christos 		    /* No displacement. */
   14839      1.1  christos 		    break;
   14840      1.1  christos 		case 2:
   14841      1.1  christos 		  /* 2 byte displacement.  */
   14842      1.1  christos 		  bytes_before_imm += 2;
   14843      1.1  christos 		  break;
   14844      1.1  christos 		case 1:
   14845      1.1  christos 		  /* 1 byte displacement: when decoding the third source,
   14846      1.1  christos 		     don't increase bytes_before_imm as this has already
   14847      1.1  christos 		     been incremented by one in OP_E_memory while decoding
   14848      1.1  christos 		     the second source operand.  */
   14849      1.1  christos 		  if (opnum == 0)
   14850      1.1  christos 		    bytes_before_imm++;
   14851      1.1  christos 
   14852      1.1  christos 		  break;
   14853      1.1  christos 		}
   14854      1.1  christos 	    }
   14855      1.1  christos 	}
   14856      1.1  christos     }
   14857      1.1  christos 
   14858      1.1  christos   FETCH_DATA (the_info, codep + bytes_before_imm + 1);
   14859      1.1  christos   return codep [bytes_before_imm];
   14860      1.1  christos }
   14861      1.1  christos 
   14862      1.1  christos static void
   14863      1.1  christos OP_EX_VexReg (int bytemode, int sizeflag, int reg)
   14864      1.1  christos {
   14865      1.1  christos   const char **names;
   14866      1.1  christos 
   14867      1.1  christos   if (reg == -1 && modrm.mod != 3)
   14868      1.1  christos     {
   14869      1.1  christos       OP_E_memory (bytemode, sizeflag);
   14870      1.1  christos       return;
   14871      1.1  christos     }
   14872      1.1  christos   else
   14873      1.1  christos     {
   14874      1.1  christos       if (reg == -1)
   14875      1.1  christos 	{
   14876      1.1  christos 	  reg = modrm.rm;
   14877      1.1  christos 	  USED_REX (REX_B);
   14878      1.1  christos 	  if (rex & REX_B)
   14879      1.1  christos 	    reg += 8;
   14880      1.1  christos 	}
   14881      1.1  christos       else if (reg > 7 && address_mode != mode_64bit)
   14882      1.1  christos 	BadOp ();
   14883      1.1  christos     }
   14884      1.1  christos 
   14885      1.1  christos   switch (vex.length)
   14886      1.1  christos     {
   14887      1.1  christos     case 128:
   14888      1.1  christos       names = names_xmm;
   14889      1.1  christos       break;
   14890      1.1  christos     case 256:
   14891      1.1  christos       names = names_ymm;
   14892      1.1  christos       break;
   14893      1.1  christos     default:
   14894      1.1  christos       abort ();
   14895      1.1  christos     }
   14896      1.1  christos   oappend (names[reg]);
   14897      1.1  christos }
   14898      1.1  christos 
   14899      1.1  christos static void
   14900      1.1  christos OP_EX_VexImmW (int bytemode, int sizeflag)
   14901      1.1  christos {
   14902      1.1  christos   int reg = -1;
   14903      1.1  christos   static unsigned char vex_imm8;
   14904      1.1  christos 
   14905      1.1  christos   if (vex_w_done == 0)
   14906      1.1  christos     {
   14907      1.1  christos       vex_w_done = 1;
   14908      1.1  christos 
   14909      1.1  christos       /* Skip mod/rm byte.  */
   14910      1.1  christos       MODRM_CHECK;
   14911      1.1  christos       codep++;
   14912      1.1  christos 
   14913      1.1  christos       vex_imm8 = get_vex_imm8 (sizeflag, 0);
   14914      1.1  christos 
   14915      1.1  christos       if (vex.w)
   14916      1.1  christos 	  reg = vex_imm8 >> 4;
   14917      1.1  christos 
   14918      1.1  christos       OP_EX_VexReg (bytemode, sizeflag, reg);
   14919      1.1  christos     }
   14920      1.1  christos   else if (vex_w_done == 1)
   14921      1.1  christos     {
   14922      1.1  christos       vex_w_done = 2;
   14923      1.1  christos 
   14924      1.1  christos       if (!vex.w)
   14925      1.1  christos 	  reg = vex_imm8 >> 4;
   14926      1.1  christos 
   14927      1.1  christos       OP_EX_VexReg (bytemode, sizeflag, reg);
   14928      1.1  christos     }
   14929      1.1  christos   else
   14930      1.1  christos     {
   14931      1.1  christos       /* Output the imm8 directly.  */
   14932      1.1  christos       scratchbuf[0] = '$';
   14933      1.1  christos       print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
   14934      1.1  christos       oappend (scratchbuf + intel_syntax);
   14935      1.1  christos       scratchbuf[0] = '\0';
   14936      1.1  christos       codep++;
   14937      1.1  christos     }
   14938      1.1  christos }
   14939      1.1  christos 
   14940      1.1  christos static void
   14941      1.1  christos OP_Vex_2src (int bytemode, int sizeflag)
   14942      1.1  christos {
   14943      1.1  christos   if (modrm.mod == 3)
   14944      1.1  christos     {
   14945      1.1  christos       int reg = modrm.rm;
   14946      1.1  christos       USED_REX (REX_B);
   14947      1.1  christos       if (rex & REX_B)
   14948      1.1  christos 	reg += 8;
   14949      1.1  christos       oappend (names_xmm[reg]);
   14950      1.1  christos     }
   14951      1.1  christos   else
   14952      1.1  christos     {
   14953      1.1  christos       if (intel_syntax
   14954      1.1  christos 	  && (bytemode == v_mode || bytemode == v_swap_mode))
   14955      1.1  christos 	{
   14956      1.1  christos 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
   14957      1.1  christos 	  used_prefixes |= (prefixes & PREFIX_DATA);
   14958      1.1  christos 	}
   14959      1.1  christos       OP_E (bytemode, sizeflag);
   14960      1.1  christos     }
   14961      1.1  christos }
   14962      1.1  christos 
   14963      1.1  christos static void
   14964      1.1  christos OP_Vex_2src_1 (int bytemode, int sizeflag)
   14965      1.1  christos {
   14966      1.1  christos   if (modrm.mod == 3)
   14967      1.1  christos     {
   14968      1.1  christos       /* Skip mod/rm byte.   */
   14969      1.1  christos       MODRM_CHECK;
   14970      1.1  christos       codep++;
   14971      1.1  christos     }
   14972      1.1  christos 
   14973      1.1  christos   if (vex.w)
   14974      1.1  christos     oappend (names_xmm[vex.register_specifier]);
   14975      1.1  christos   else
   14976      1.1  christos     OP_Vex_2src (bytemode, sizeflag);
   14977      1.1  christos }
   14978      1.1  christos 
   14979      1.1  christos static void
   14980      1.1  christos OP_Vex_2src_2 (int bytemode, int sizeflag)
   14981      1.1  christos {
   14982      1.1  christos   if (vex.w)
   14983      1.1  christos     OP_Vex_2src (bytemode, sizeflag);
   14984      1.1  christos   else
   14985      1.1  christos     oappend (names_xmm[vex.register_specifier]);
   14986      1.1  christos }
   14987      1.1  christos 
   14988      1.1  christos static void
   14989      1.1  christos OP_EX_VexW (int bytemode, int sizeflag)
   14990      1.1  christos {
   14991      1.1  christos   int reg = -1;
   14992      1.1  christos 
   14993      1.1  christos   if (!vex_w_done)
   14994      1.1  christos     {
   14995      1.1  christos       vex_w_done = 1;
   14996      1.1  christos 
   14997      1.1  christos       /* Skip mod/rm byte.  */
   14998      1.1  christos       MODRM_CHECK;
   14999      1.1  christos       codep++;
   15000      1.1  christos 
   15001      1.1  christos       if (vex.w)
   15002      1.1  christos 	reg = get_vex_imm8 (sizeflag, 0) >> 4;
   15003      1.1  christos     }
   15004      1.1  christos   else
   15005      1.1  christos     {
   15006      1.1  christos       if (!vex.w)
   15007      1.1  christos 	reg = get_vex_imm8 (sizeflag, 1) >> 4;
   15008      1.1  christos     }
   15009      1.1  christos 
   15010      1.1  christos   OP_EX_VexReg (bytemode, sizeflag, reg);
   15011      1.1  christos }
   15012      1.1  christos 
   15013      1.1  christos static void
   15014      1.1  christos VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
   15015      1.1  christos 	     int sizeflag ATTRIBUTE_UNUSED)
   15016      1.1  christos {
   15017      1.1  christos   /* Skip the immediate byte and check for invalid bits.  */
   15018      1.1  christos   FETCH_DATA (the_info, codep + 1);
   15019      1.1  christos   if (*codep++ & 0xf)
   15020      1.1  christos     BadOp ();
   15021      1.1  christos }
   15022      1.1  christos 
   15023      1.1  christos static void
   15024      1.1  christos OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
   15025      1.1  christos {
   15026      1.1  christos   int reg;
   15027      1.1  christos   const char **names;
   15028      1.1  christos 
   15029      1.1  christos   FETCH_DATA (the_info, codep + 1);
   15030      1.1  christos   reg = *codep++;
   15031      1.1  christos 
   15032      1.1  christos   if (bytemode != x_mode)
   15033      1.1  christos     abort ();
   15034      1.1  christos 
   15035      1.1  christos   if (reg & 0xf)
   15036      1.1  christos       BadOp ();
   15037      1.1  christos 
   15038      1.1  christos   reg >>= 4;
   15039      1.1  christos   if (reg > 7 && address_mode != mode_64bit)
   15040      1.1  christos     BadOp ();
   15041      1.1  christos 
   15042      1.1  christos   switch (vex.length)
   15043      1.1  christos     {
   15044      1.1  christos     case 128:
   15045      1.1  christos       names = names_xmm;
   15046      1.1  christos       break;
   15047      1.1  christos     case 256:
   15048      1.1  christos       names = names_ymm;
   15049      1.1  christos       break;
   15050      1.1  christos     default:
   15051      1.1  christos       abort ();
   15052      1.1  christos     }
   15053      1.1  christos   oappend (names[reg]);
   15054      1.1  christos }
   15055      1.1  christos 
   15056      1.1  christos static void
   15057      1.1  christos OP_XMM_VexW (int bytemode, int sizeflag)
   15058      1.1  christos {
   15059      1.1  christos   /* Turn off the REX.W bit since it is used for swapping operands
   15060      1.1  christos      now.  */
   15061      1.1  christos   rex &= ~REX_W;
   15062      1.1  christos   OP_XMM (bytemode, sizeflag);
   15063      1.1  christos }
   15064      1.1  christos 
   15065      1.1  christos static void
   15066      1.1  christos OP_EX_Vex (int bytemode, int sizeflag)
   15067      1.1  christos {
   15068      1.1  christos   if (modrm.mod != 3)
   15069      1.1  christos     {
   15070      1.1  christos       if (vex.register_specifier != 0)
   15071      1.1  christos 	BadOp ();
   15072      1.1  christos       need_vex_reg = 0;
   15073      1.1  christos     }
   15074      1.1  christos   OP_EX (bytemode, sizeflag);
   15075      1.1  christos }
   15076      1.1  christos 
   15077      1.1  christos static void
   15078      1.1  christos OP_XMM_Vex (int bytemode, int sizeflag)
   15079      1.1  christos {
   15080      1.1  christos   if (modrm.mod != 3)
   15081      1.1  christos     {
   15082      1.1  christos       if (vex.register_specifier != 0)
   15083      1.1  christos 	BadOp ();
   15084      1.1  christos       need_vex_reg = 0;
   15085      1.1  christos     }
   15086      1.1  christos   OP_XMM (bytemode, sizeflag);
   15087      1.1  christos }
   15088      1.1  christos 
   15089      1.1  christos static void
   15090      1.1  christos VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   15091      1.1  christos {
   15092      1.1  christos   switch (vex.length)
   15093      1.1  christos     {
   15094      1.1  christos     case 128:
   15095      1.1  christos       mnemonicendp = stpcpy (obuf, "vzeroupper");
   15096      1.1  christos       break;
   15097      1.1  christos     case 256:
   15098      1.1  christos       mnemonicendp = stpcpy (obuf, "vzeroall");
   15099      1.1  christos       break;
   15100      1.1  christos     default:
   15101      1.1  christos       abort ();
   15102      1.1  christos     }
   15103      1.1  christos }
   15104      1.1  christos 
   15105      1.1  christos static struct op vex_cmp_op[] =
   15106      1.1  christos {
   15107      1.1  christos   { STRING_COMMA_LEN ("eq") },
   15108      1.1  christos   { STRING_COMMA_LEN ("lt") },
   15109      1.1  christos   { STRING_COMMA_LEN ("le") },
   15110      1.1  christos   { STRING_COMMA_LEN ("unord") },
   15111      1.1  christos   { STRING_COMMA_LEN ("neq") },
   15112      1.1  christos   { STRING_COMMA_LEN ("nlt") },
   15113      1.1  christos   { STRING_COMMA_LEN ("nle") },
   15114      1.1  christos   { STRING_COMMA_LEN ("ord") },
   15115      1.1  christos   { STRING_COMMA_LEN ("eq_uq") },
   15116      1.1  christos   { STRING_COMMA_LEN ("nge") },
   15117      1.1  christos   { STRING_COMMA_LEN ("ngt") },
   15118      1.1  christos   { STRING_COMMA_LEN ("false") },
   15119      1.1  christos   { STRING_COMMA_LEN ("neq_oq") },
   15120      1.1  christos   { STRING_COMMA_LEN ("ge") },
   15121      1.1  christos   { STRING_COMMA_LEN ("gt") },
   15122      1.1  christos   { STRING_COMMA_LEN ("true") },
   15123      1.1  christos   { STRING_COMMA_LEN ("eq_os") },
   15124      1.1  christos   { STRING_COMMA_LEN ("lt_oq") },
   15125      1.1  christos   { STRING_COMMA_LEN ("le_oq") },
   15126      1.1  christos   { STRING_COMMA_LEN ("unord_s") },
   15127      1.1  christos   { STRING_COMMA_LEN ("neq_us") },
   15128      1.1  christos   { STRING_COMMA_LEN ("nlt_uq") },
   15129      1.1  christos   { STRING_COMMA_LEN ("nle_uq") },
   15130      1.1  christos   { STRING_COMMA_LEN ("ord_s") },
   15131      1.1  christos   { STRING_COMMA_LEN ("eq_us") },
   15132      1.1  christos   { STRING_COMMA_LEN ("nge_uq") },
   15133      1.1  christos   { STRING_COMMA_LEN ("ngt_uq") },
   15134      1.1  christos   { STRING_COMMA_LEN ("false_os") },
   15135      1.1  christos   { STRING_COMMA_LEN ("neq_os") },
   15136      1.1  christos   { STRING_COMMA_LEN ("ge_oq") },
   15137      1.1  christos   { STRING_COMMA_LEN ("gt_oq") },
   15138      1.1  christos   { STRING_COMMA_LEN ("true_us") },
   15139      1.1  christos };
   15140      1.1  christos 
   15141      1.1  christos static void
   15142      1.1  christos VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   15143      1.1  christos {
   15144      1.1  christos   unsigned int cmp_type;
   15145      1.1  christos 
   15146      1.1  christos   FETCH_DATA (the_info, codep + 1);
   15147      1.1  christos   cmp_type = *codep++ & 0xff;
   15148      1.1  christos   if (cmp_type < ARRAY_SIZE (vex_cmp_op))
   15149      1.1  christos     {
   15150      1.1  christos       char suffix [3];
   15151      1.1  christos       char *p = mnemonicendp - 2;
   15152      1.1  christos       suffix[0] = p[0];
   15153      1.1  christos       suffix[1] = p[1];
   15154      1.1  christos       suffix[2] = '\0';
   15155      1.1  christos       sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
   15156      1.1  christos       mnemonicendp += vex_cmp_op[cmp_type].len;
   15157      1.1  christos     }
   15158      1.1  christos   else
   15159      1.1  christos     {
   15160      1.1  christos       /* We have a reserved extension byte.  Output it directly.  */
   15161      1.1  christos       scratchbuf[0] = '$';
   15162      1.1  christos       print_operand_value (scratchbuf + 1, 1, cmp_type);
   15163      1.1  christos       oappend (scratchbuf + intel_syntax);
   15164      1.1  christos       scratchbuf[0] = '\0';
   15165      1.1  christos     }
   15166      1.1  christos }
   15167      1.1  christos 
   15168      1.1  christos static const struct op pclmul_op[] =
   15169      1.1  christos {
   15170      1.1  christos   { STRING_COMMA_LEN ("lql") },
   15171      1.1  christos   { STRING_COMMA_LEN ("hql") },
   15172      1.1  christos   { STRING_COMMA_LEN ("lqh") },
   15173      1.1  christos   { STRING_COMMA_LEN ("hqh") }
   15174      1.1  christos };
   15175      1.1  christos 
   15176      1.1  christos static void
   15177      1.1  christos PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
   15178      1.1  christos 	      int sizeflag ATTRIBUTE_UNUSED)
   15179      1.1  christos {
   15180      1.1  christos   unsigned int pclmul_type;
   15181      1.1  christos 
   15182      1.1  christos   FETCH_DATA (the_info, codep + 1);
   15183      1.1  christos   pclmul_type = *codep++ & 0xff;
   15184      1.1  christos   switch (pclmul_type)
   15185      1.1  christos     {
   15186      1.1  christos     case 0x10:
   15187      1.1  christos       pclmul_type = 2;
   15188      1.1  christos       break;
   15189      1.1  christos     case 0x11:
   15190      1.1  christos       pclmul_type = 3;
   15191      1.1  christos       break;
   15192      1.1  christos     default:
   15193      1.1  christos       break;
   15194  1.1.1.2  christos     }
   15195      1.1  christos   if (pclmul_type < ARRAY_SIZE (pclmul_op))
   15196      1.1  christos     {
   15197      1.1  christos       char suffix [4];
   15198      1.1  christos       char *p = mnemonicendp - 3;
   15199      1.1  christos       suffix[0] = p[0];
   15200      1.1  christos       suffix[1] = p[1];
   15201      1.1  christos       suffix[2] = p[2];
   15202      1.1  christos       suffix[3] = '\0';
   15203      1.1  christos       sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
   15204      1.1  christos       mnemonicendp += pclmul_op[pclmul_type].len;
   15205      1.1  christos     }
   15206      1.1  christos   else
   15207      1.1  christos     {
   15208      1.1  christos       /* We have a reserved extension byte.  Output it directly.  */
   15209      1.1  christos       scratchbuf[0] = '$';
   15210      1.1  christos       print_operand_value (scratchbuf + 1, 1, pclmul_type);
   15211      1.1  christos       oappend (scratchbuf + intel_syntax);
   15212      1.1  christos       scratchbuf[0] = '\0';
   15213      1.1  christos     }
   15214      1.1  christos }
   15215      1.1  christos 
   15216      1.1  christos static void
   15217      1.1  christos MOVBE_Fixup (int bytemode, int sizeflag)
   15218      1.1  christos {
   15219      1.1  christos   /* Add proper suffix to "movbe".  */
   15220      1.1  christos   char *p = mnemonicendp;
   15221      1.1  christos 
   15222      1.1  christos   switch (bytemode)
   15223      1.1  christos     {
   15224      1.1  christos     case v_mode:
   15225      1.1  christos       if (intel_syntax)
   15226      1.1  christos 	goto skip;
   15227      1.1  christos 
   15228      1.1  christos       USED_REX (REX_W);
   15229      1.1  christos       if (sizeflag & SUFFIX_ALWAYS)
   15230      1.1  christos 	{
   15231      1.1  christos 	  if (rex & REX_W)
   15232      1.1  christos 	    *p++ = 'q';
   15233      1.1  christos 	  else
   15234      1.1  christos 	    {
   15235      1.1  christos 	      if (sizeflag & DFLAG)
   15236      1.1  christos 		*p++ = 'l';
   15237      1.1  christos 	      else
   15238      1.1  christos 		*p++ = 'w';
   15239      1.1  christos 	      used_prefixes |= (prefixes & PREFIX_DATA);
   15240      1.1  christos 	    }
   15241      1.1  christos 	}
   15242      1.1  christos       break;
   15243      1.1  christos     default:
   15244      1.1  christos       oappend (INTERNAL_DISASSEMBLER_ERROR);
   15245      1.1  christos       break;
   15246      1.1  christos     }
   15247      1.1  christos   mnemonicendp = p;
   15248      1.1  christos   *p = '\0';
   15249      1.1  christos 
   15250      1.1  christos skip:
   15251      1.1  christos   OP_M (bytemode, sizeflag);
   15252      1.1  christos }
   15253      1.1  christos 
   15254      1.1  christos static void
   15255      1.1  christos OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   15256      1.1  christos {
   15257      1.1  christos   int reg;
   15258      1.1  christos   const char **names;
   15259      1.1  christos 
   15260      1.1  christos   /* Skip mod/rm byte.  */
   15261      1.1  christos   MODRM_CHECK;
   15262      1.1  christos   codep++;
   15263      1.1  christos 
   15264      1.1  christos   if (vex.w)
   15265      1.1  christos     names = names64;
   15266      1.1  christos   else
   15267      1.1  christos     names = names32;
   15268      1.1  christos 
   15269      1.1  christos   reg = modrm.rm;
   15270      1.1  christos   USED_REX (REX_B);
   15271      1.1  christos   if (rex & REX_B)
   15272      1.1  christos     reg += 8;
   15273      1.1  christos 
   15274      1.1  christos   oappend (names[reg]);
   15275      1.1  christos }
   15276      1.1  christos 
   15277      1.1  christos static void
   15278      1.1  christos OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
   15279      1.1  christos {
   15280      1.1  christos   const char **names;
   15281      1.1  christos 
   15282      1.1  christos   if (vex.w)
   15283      1.1  christos     names = names64;
   15284      1.1  christos   else
   15285      1.1  christos     names = names32;
   15286      1.1  christos 
   15287      1.1  christos   oappend (names[vex.register_specifier]);
   15288      1.1  christos }
   15289