Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /* Print i386 instructions for GDB, the GNU debugger.
  2.    Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  3.    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
  4.    Free Software Foundation, Inc.
  5.  
  6.    This file is part of the GNU opcodes library.
  7.  
  8.    This library is free software; you can redistribute it and/or modify
  9.    it under the terms of the GNU General Public License as published by
  10.    the Free Software Foundation; either version 3, or (at your option)
  11.    any later version.
  12.  
  13.    It is distributed in the hope that it will be useful, but WITHOUT
  14.    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  15.    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
  16.    License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with this program; if not, write to the Free Software
  20.    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
  21.    MA 02110-1301, USA.  */
  22.  
  23.  
  24. /* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
  25.    July 1988
  26.     modified by John Hassey (hassey@dg-rtp.dg.com)
  27.     x86-64 support added by Jan Hubicka (jh@suse.cz)
  28.     VIA PadLock support by Michal Ludvig (mludvig@suse.cz).  */
  29.  
  30. /* The main tables describing the instructions is essentially a copy
  31.    of the "Opcode Map" chapter (Appendix A) of the Intel 80386
  32.    Programmers Manual.  Usually, there is a capital letter, followed
  33.    by a small letter.  The capital letter tell the addressing mode,
  34.    and the small letter tells about the operand size.  Refer to
  35.    the Intel manual for details.  */
  36.  
  37. #include "sysdep.h"
  38. #include "dis-asm.h"
  39. #include "opintl.h"
  40. #include "opcode/i386.h"
  41. #include "libiberty.h"
  42.  
  43. #include <setjmp.h>
  44.  
  45. static int print_insn (bfd_vma, disassemble_info *);
  46. static void dofloat (int);
  47. static void OP_ST (int, int);
  48. static void OP_STi (int, int);
  49. static int putop (const char *, int);
  50. static void oappend (const char *);
  51. static void append_seg (void);
  52. static void OP_indirE (int, int);
  53. static void print_operand_value (char *, int, bfd_vma);
  54. static void OP_E_register (int, int);
  55. static void OP_E_memory (int, int);
  56. static void print_displacement (char *, bfd_vma);
  57. static void OP_E (int, int);
  58. static void OP_G (int, int);
  59. static bfd_vma get64 (void);
  60. static bfd_signed_vma get32 (void);
  61. static bfd_signed_vma get32s (void);
  62. static int get16 (void);
  63. static void set_op (bfd_vma, int);
  64. static void OP_Skip_MODRM (int, int);
  65. static void OP_REG (int, int);
  66. static void OP_IMREG (int, int);
  67. static void OP_I (int, int);
  68. static void OP_I64 (int, int);
  69. static void OP_sI (int, int);
  70. static void OP_J (int, int);
  71. static void OP_SEG (int, int);
  72. static void OP_DIR (int, int);
  73. static void OP_OFF (int, int);
  74. static void OP_OFF64 (int, int);
  75. static void ptr_reg (int, int);
  76. static void OP_ESreg (int, int);
  77. static void OP_DSreg (int, int);
  78. static void OP_C (int, int);
  79. static void OP_D (int, int);
  80. static void OP_T (int, int);
  81. static void OP_R (int, int);
  82. static void OP_MMX (int, int);
  83. static void OP_XMM (int, int);
  84. static void OP_EM (int, int);
  85. static void OP_EX (int, int);
  86. static void OP_EMC (int,int);
  87. static void OP_MXC (int,int);
  88. static void OP_MS (int, int);
  89. static void OP_XS (int, int);
  90. static void OP_M (int, int);
  91. static void OP_VEX (int, int);
  92. static void OP_EX_Vex (int, int);
  93. static void OP_EX_VexW (int, int);
  94. static void OP_EX_VexImmW (int, int);
  95. static void OP_XMM_Vex (int, int);
  96. static void OP_XMM_VexW (int, int);
  97. static void OP_Rounding (int, int);
  98. static void OP_REG_VexI4 (int, int);
  99. static void PCLMUL_Fixup (int, int);
  100. static void VEXI4_Fixup (int, int);
  101. static void VZERO_Fixup (int, int);
  102. static void VCMP_Fixup (int, int);
  103. static void VPCMP_Fixup (int, int);
  104. static void OP_0f07 (int, int);
  105. static void OP_Monitor (int, int);
  106. static void OP_Mwait (int, int);
  107. static void NOP_Fixup1 (int, int);
  108. static void NOP_Fixup2 (int, int);
  109. static void OP_3DNowSuffix (int, int);
  110. static void CMP_Fixup (int, int);
  111. static void BadOp (void);
  112. static void REP_Fixup (int, int);
  113. static void BND_Fixup (int, int);
  114. static void HLE_Fixup1 (int, int);
  115. static void HLE_Fixup2 (int, int);
  116. static void HLE_Fixup3 (int, int);
  117. static void CMPXCHG8B_Fixup (int, int);
  118. static void XMM_Fixup (int, int);
  119. static void CRC32_Fixup (int, int);
  120. static void FXSAVE_Fixup (int, int);
  121. static void OP_LWPCB_E (int, int);
  122. static void OP_LWP_E (int, int);
  123. static void OP_Vex_2src_1 (int, int);
  124. static void OP_Vex_2src_2 (int, int);
  125.  
  126. static void MOVBE_Fixup (int, int);
  127.  
  128. static void OP_Mask (int, int);
  129.  
  130. struct dis_private {
  131.   /* Points to first byte not fetched.  */
  132.   bfd_byte *max_fetched;
  133.   bfd_byte the_buffer[MAX_MNEM_SIZE];
  134.   bfd_vma insn_start;
  135.   int orig_sizeflag;
  136.   jmp_buf bailout;
  137. };
  138.  
  139. enum address_mode
  140. {
  141.   mode_16bit,
  142.   mode_32bit,
  143.   mode_64bit
  144. };
  145.  
  146. enum address_mode address_mode;
  147.  
  148. /* Flags for the prefixes for the current instruction.  See below.  */
  149. static int prefixes;
  150.  
  151. /* REX prefix the current instruction.  See below.  */
  152. static int rex;
  153. /* Bits of REX we've already used.  */
  154. static int rex_used;
  155. /* REX bits in original REX prefix ignored.  */
  156. static int rex_ignored;
  157. /* Mark parts used in the REX prefix.  When we are testing for
  158.    empty prefix (for 8bit register REX extension), just mask it
  159.    out.  Otherwise test for REX bit is excuse for existence of REX
  160.    only in case value is nonzero.  */
  161. #define USED_REX(value)                                 \
  162.   {                                                     \
  163.     if (value)                                          \
  164.       {                                                 \
  165.         if ((rex & value))                              \
  166.           rex_used |= (value) | REX_OPCODE;             \
  167.       }                                                 \
  168.     else                                                \
  169.       rex_used |= REX_OPCODE;                           \
  170.   }
  171.  
  172. /* Flags for prefixes which we somehow handled when printing the
  173.    current instruction.  */
  174. static int used_prefixes;
  175.  
  176. /* Flags stored in PREFIXES.  */
  177. #define PREFIX_REPZ 1
  178. #define PREFIX_REPNZ 2
  179. #define PREFIX_LOCK 4
  180. #define PREFIX_CS 8
  181. #define PREFIX_SS 0x10
  182. #define PREFIX_DS 0x20
  183. #define PREFIX_ES 0x40
  184. #define PREFIX_FS 0x80
  185. #define PREFIX_GS 0x100
  186. #define PREFIX_DATA 0x200
  187. #define PREFIX_ADDR 0x400
  188. #define PREFIX_FWAIT 0x800
  189.  
  190. /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
  191.    to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
  192.    on error.  */
  193. #define FETCH_DATA(info, addr) \
  194.   ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
  195.    ? 1 : fetch_data ((info), (addr)))
  196.  
  197. static int
  198. fetch_data (struct disassemble_info *info, bfd_byte *addr)
  199. {
  200.   int status;
  201.   struct dis_private *priv = (struct dis_private *) info->private_data;
  202.   bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
  203.  
  204.   if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
  205.     status = (*info->read_memory_func) (start,
  206.                                         priv->max_fetched,
  207.                                         addr - priv->max_fetched,
  208.                                         info);
  209.   else
  210.     status = -1;
  211.   if (status != 0)
  212.     {
  213.       /* If we did manage to read at least one byte, then
  214.          print_insn_i386 will do something sensible.  Otherwise, print
  215.          an error.  We do that here because this is where we know
  216.          STATUS.  */
  217.       if (priv->max_fetched == priv->the_buffer)
  218.         (*info->memory_error_func) (status, start, info);
  219.       longjmp (priv->bailout, 1);
  220.     }
  221.   else
  222.     priv->max_fetched = addr;
  223.   return 1;
  224. }
  225.  
  226. #define XX { NULL, 0 }
  227. #define Bad_Opcode NULL, { { NULL, 0 } }
  228.  
  229. #define Eb { OP_E, b_mode }
  230. #define Ebnd { OP_E, bnd_mode }
  231. #define EbS { OP_E, b_swap_mode }
  232. #define Ev { OP_E, v_mode }
  233. #define Ev_bnd { OP_E, v_bnd_mode }
  234. #define EvS { OP_E, v_swap_mode }
  235. #define Ed { OP_E, d_mode }
  236. #define Edq { OP_E, dq_mode }
  237. #define Edqw { OP_E, dqw_mode }
  238. #define Edqb { OP_E, dqb_mode }
  239. #define Edqd { OP_E, dqd_mode }
  240. #define Eq { OP_E, q_mode }
  241. #define indirEv { OP_indirE, stack_v_mode }
  242. #define indirEp { OP_indirE, f_mode }
  243. #define stackEv { OP_E, stack_v_mode }
  244. #define Em { OP_E, m_mode }
  245. #define Ew { OP_E, w_mode }
  246. #define M { OP_M, 0 }           /* lea, lgdt, etc. */
  247. #define Ma { OP_M, a_mode }
  248. #define Mb { OP_M, b_mode }
  249. #define Md { OP_M, d_mode }
  250. #define Mo { OP_M, o_mode }
  251. #define Mp { OP_M, f_mode }             /* 32 or 48 bit memory operand for LDS, LES etc */
  252. #define Mq { OP_M, q_mode }
  253. #define Mx { OP_M, x_mode }
  254. #define Mxmm { OP_M, xmm_mode }
  255. #define Gb { OP_G, b_mode }
  256. #define Gbnd { OP_G, bnd_mode }
  257. #define Gv { OP_G, v_mode }
  258. #define Gd { OP_G, d_mode }
  259. #define Gdq { OP_G, dq_mode }
  260. #define Gm { OP_G, m_mode }
  261. #define Gw { OP_G, w_mode }
  262. #define Rd { OP_R, d_mode }
  263. #define Rdq { OP_R, dq_mode }
  264. #define Rm { OP_R, m_mode }
  265. #define Ib { OP_I, b_mode }
  266. #define sIb { OP_sI, b_mode }   /* sign extened byte */
  267. #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
  268. #define Iv { OP_I, v_mode }
  269. #define sIv { OP_sI, v_mode }
  270. #define Iq { OP_I, q_mode }
  271. #define Iv64 { OP_I64, v_mode }
  272. #define Iw { OP_I, w_mode }
  273. #define I1 { OP_I, const_1_mode }
  274. #define Jb { OP_J, b_mode }
  275. #define Jv { OP_J, v_mode }
  276. #define Cm { OP_C, m_mode }
  277. #define Dm { OP_D, m_mode }
  278. #define Td { OP_T, d_mode }
  279. #define Skip_MODRM { OP_Skip_MODRM, 0 }
  280.  
  281. #define RMeAX { OP_REG, eAX_reg }
  282. #define RMeBX { OP_REG, eBX_reg }
  283. #define RMeCX { OP_REG, eCX_reg }
  284. #define RMeDX { OP_REG, eDX_reg }
  285. #define RMeSP { OP_REG, eSP_reg }
  286. #define RMeBP { OP_REG, eBP_reg }
  287. #define RMeSI { OP_REG, eSI_reg }
  288. #define RMeDI { OP_REG, eDI_reg }
  289. #define RMrAX { OP_REG, rAX_reg }
  290. #define RMrBX { OP_REG, rBX_reg }
  291. #define RMrCX { OP_REG, rCX_reg }
  292. #define RMrDX { OP_REG, rDX_reg }
  293. #define RMrSP { OP_REG, rSP_reg }
  294. #define RMrBP { OP_REG, rBP_reg }
  295. #define RMrSI { OP_REG, rSI_reg }
  296. #define RMrDI { OP_REG, rDI_reg }
  297. #define RMAL { OP_REG, al_reg }
  298. #define RMCL { OP_REG, cl_reg }
  299. #define RMDL { OP_REG, dl_reg }
  300. #define RMBL { OP_REG, bl_reg }
  301. #define RMAH { OP_REG, ah_reg }
  302. #define RMCH { OP_REG, ch_reg }
  303. #define RMDH { OP_REG, dh_reg }
  304. #define RMBH { OP_REG, bh_reg }
  305. #define RMAX { OP_REG, ax_reg }
  306. #define RMDX { OP_REG, dx_reg }
  307.  
  308. #define eAX { OP_IMREG, eAX_reg }
  309. #define eBX { OP_IMREG, eBX_reg }
  310. #define eCX { OP_IMREG, eCX_reg }
  311. #define eDX { OP_IMREG, eDX_reg }
  312. #define eSP { OP_IMREG, eSP_reg }
  313. #define eBP { OP_IMREG, eBP_reg }
  314. #define eSI { OP_IMREG, eSI_reg }
  315. #define eDI { OP_IMREG, eDI_reg }
  316. #define AL { OP_IMREG, al_reg }
  317. #define CL { OP_IMREG, cl_reg }
  318. #define DL { OP_IMREG, dl_reg }
  319. #define BL { OP_IMREG, bl_reg }
  320. #define AH { OP_IMREG, ah_reg }
  321. #define CH { OP_IMREG, ch_reg }
  322. #define DH { OP_IMREG, dh_reg }
  323. #define BH { OP_IMREG, bh_reg }
  324. #define AX { OP_IMREG, ax_reg }
  325. #define DX { OP_IMREG, dx_reg }
  326. #define zAX { OP_IMREG, z_mode_ax_reg }
  327. #define indirDX { OP_IMREG, indir_dx_reg }
  328.  
  329. #define Sw { OP_SEG, w_mode }
  330. #define Sv { OP_SEG, v_mode }
  331. #define Ap { OP_DIR, 0 }
  332. #define Ob { OP_OFF64, b_mode }
  333. #define Ov { OP_OFF64, v_mode }
  334. #define Xb { OP_DSreg, eSI_reg }
  335. #define Xv { OP_DSreg, eSI_reg }
  336. #define Xz { OP_DSreg, eSI_reg }
  337. #define Yb { OP_ESreg, eDI_reg }
  338. #define Yv { OP_ESreg, eDI_reg }
  339. #define DSBX { OP_DSreg, eBX_reg }
  340.  
  341. #define es { OP_REG, es_reg }
  342. #define ss { OP_REG, ss_reg }
  343. #define cs { OP_REG, cs_reg }
  344. #define ds { OP_REG, ds_reg }
  345. #define fs { OP_REG, fs_reg }
  346. #define gs { OP_REG, gs_reg }
  347.  
  348. #define MX { OP_MMX, 0 }
  349. #define XM { OP_XMM, 0 }
  350. #define XMScalar { OP_XMM, scalar_mode }
  351. #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
  352. #define XMM { OP_XMM, xmm_mode }
  353. #define XMxmmq { OP_XMM, xmmq_mode }
  354. #define EM { OP_EM, v_mode }
  355. #define EMS { OP_EM, v_swap_mode }
  356. #define EMd { OP_EM, d_mode }
  357. #define EMx { OP_EM, x_mode }
  358. #define EXw { OP_EX, w_mode }
  359. #define EXd { OP_EX, d_mode }
  360. #define EXdScalar { OP_EX, d_scalar_mode }
  361. #define EXdS { OP_EX, d_swap_mode }
  362. #define EXdScalarS { OP_EX, d_scalar_swap_mode }
  363. #define EXq { OP_EX, q_mode }
  364. #define EXqScalar { OP_EX, q_scalar_mode }
  365. #define EXqScalarS { OP_EX, q_scalar_swap_mode }
  366. #define EXqS { OP_EX, q_swap_mode }
  367. #define EXx { OP_EX, x_mode }
  368. #define EXxS { OP_EX, x_swap_mode }
  369. #define EXxmm { OP_EX, xmm_mode }
  370. #define EXymm { OP_EX, ymm_mode }
  371. #define EXxmmq { OP_EX, xmmq_mode }
  372. #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
  373. #define EXxmm_mb { OP_EX, xmm_mb_mode }
  374. #define EXxmm_mw { OP_EX, xmm_mw_mode }
  375. #define EXxmm_md { OP_EX, xmm_md_mode }
  376. #define EXxmm_mq { OP_EX, xmm_mq_mode }
  377. #define EXxmm_mdq { OP_EX, xmm_mdq_mode }
  378. #define EXxmmdw { OP_EX, xmmdw_mode }
  379. #define EXxmmqd { OP_EX, xmmqd_mode }
  380. #define EXymmq { OP_EX, ymmq_mode }
  381. #define EXVexWdq { OP_EX, vex_w_dq_mode }
  382. #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
  383. #define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
  384. #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
  385. #define MS { OP_MS, v_mode }
  386. #define XS { OP_XS, v_mode }
  387. #define EMCq { OP_EMC, q_mode }
  388. #define MXC { OP_MXC, 0 }
  389. #define OPSUF { OP_3DNowSuffix, 0 }
  390. #define CMP { CMP_Fixup, 0 }
  391. #define XMM0 { XMM_Fixup, 0 }
  392. #define FXSAVE { FXSAVE_Fixup, 0 }
  393. #define Vex_2src_1 { OP_Vex_2src_1, 0 }
  394. #define Vex_2src_2 { OP_Vex_2src_2, 0 }
  395.  
  396. #define Vex { OP_VEX, vex_mode }
  397. #define VexScalar { OP_VEX, vex_scalar_mode }
  398. #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
  399. #define Vex128 { OP_VEX, vex128_mode }
  400. #define Vex256 { OP_VEX, vex256_mode }
  401. #define VexGdq { OP_VEX, dq_mode }
  402. #define VexI4 { VEXI4_Fixup, 0}
  403. #define EXdVex { OP_EX_Vex, d_mode }
  404. #define EXdVexS { OP_EX_Vex, d_swap_mode }
  405. #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
  406. #define EXqVex { OP_EX_Vex, q_mode }
  407. #define EXqVexS { OP_EX_Vex, q_swap_mode }
  408. #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
  409. #define EXVexW { OP_EX_VexW, x_mode }
  410. #define EXdVexW { OP_EX_VexW, d_mode }
  411. #define EXqVexW { OP_EX_VexW, q_mode }
  412. #define EXVexImmW { OP_EX_VexImmW, x_mode }
  413. #define XMVex { OP_XMM_Vex, 0 }
  414. #define XMVexScalar { OP_XMM_Vex, scalar_mode }
  415. #define XMVexW { OP_XMM_VexW, 0 }
  416. #define XMVexI4 { OP_REG_VexI4, x_mode }
  417. #define PCLMUL { PCLMUL_Fixup, 0 }
  418. #define VZERO { VZERO_Fixup, 0 }
  419. #define VCMP { VCMP_Fixup, 0 }
  420. #define VPCMP { VPCMP_Fixup, 0 }
  421.  
  422. #define EXxEVexR { OP_Rounding, evex_rounding_mode }
  423. #define EXxEVexS { OP_Rounding, evex_sae_mode }
  424.  
  425. #define XMask { OP_Mask, mask_mode }
  426. #define MaskG { OP_G, mask_mode }
  427. #define MaskE { OP_E, mask_mode }
  428. #define MaskR { OP_R, mask_mode }
  429. #define MaskVex { OP_VEX, mask_mode }
  430.  
  431. #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
  432. #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
  433.  
  434. /* Used handle "rep" prefix for string instructions.  */
  435. #define Xbr { REP_Fixup, eSI_reg }
  436. #define Xvr { REP_Fixup, eSI_reg }
  437. #define Ybr { REP_Fixup, eDI_reg }
  438. #define Yvr { REP_Fixup, eDI_reg }
  439. #define Yzr { REP_Fixup, eDI_reg }
  440. #define indirDXr { REP_Fixup, indir_dx_reg }
  441. #define ALr { REP_Fixup, al_reg }
  442. #define eAXr { REP_Fixup, eAX_reg }
  443.  
  444. /* Used handle HLE prefix for lockable instructions.  */
  445. #define Ebh1 { HLE_Fixup1, b_mode }
  446. #define Evh1 { HLE_Fixup1, v_mode }
  447. #define Ebh2 { HLE_Fixup2, b_mode }
  448. #define Evh2 { HLE_Fixup2, v_mode }
  449. #define Ebh3 { HLE_Fixup3, b_mode }
  450. #define Evh3 { HLE_Fixup3, v_mode }
  451.  
  452. #define BND { BND_Fixup, 0 }
  453.  
  454. #define cond_jump_flag { NULL, cond_jump_mode }
  455. #define loop_jcxz_flag { NULL, loop_jcxz_mode }
  456.  
  457. /* bits in sizeflag */
  458. #define SUFFIX_ALWAYS 4
  459. #define AFLAG 2
  460. #define DFLAG 1
  461.  
  462. enum
  463. {
  464.   /* byte operand */
  465.   b_mode = 1,
  466.   /* byte operand with operand swapped */
  467.   b_swap_mode,
  468.   /* byte operand, sign extend like 'T' suffix */
  469.   b_T_mode,
  470.   /* operand size depends on prefixes */
  471.   v_mode,
  472.   /* operand size depends on prefixes with operand swapped */
  473.   v_swap_mode,
  474.   /* word operand */
  475.   w_mode,
  476.   /* double word operand  */
  477.   d_mode,
  478.   /* double word operand with operand swapped */
  479.   d_swap_mode,
  480.   /* quad word operand */
  481.   q_mode,
  482.   /* quad word operand with operand swapped */
  483.   q_swap_mode,
  484.   /* ten-byte operand */
  485.   t_mode,
  486.   /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand.  In EVEX with
  487.      broadcast enabled.  */
  488.   x_mode,
  489.   /* Similar to x_mode, but with different EVEX mem shifts.  */
  490.   evex_x_gscat_mode,
  491.   /* Similar to x_mode, but with disabled broadcast.  */
  492.   evex_x_nobcst_mode,
  493.   /* Similar to x_mode, but with operands swapped and disabled broadcast
  494.      in EVEX.  */
  495.   x_swap_mode,
  496.   /* 16-byte XMM operand */
  497.   xmm_mode,
  498.   /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
  499.      memory operand (depending on vector length).  Broadcast isn't
  500.      allowed.  */
  501.   xmmq_mode,
  502.   /* Same as xmmq_mode, but broadcast is allowed.  */
  503.   evex_half_bcst_xmmq_mode,
  504.   /* XMM register or byte memory operand */
  505.   xmm_mb_mode,
  506.   /* XMM register or word memory operand */
  507.   xmm_mw_mode,
  508.   /* XMM register or double word memory operand */
  509.   xmm_md_mode,
  510.   /* XMM register or quad word memory operand */
  511.   xmm_mq_mode,
  512.   /* XMM register or double/quad word memory operand, depending on
  513.      VEX.W.  */
  514.   xmm_mdq_mode,
  515.   /* 16-byte XMM, word, double word or quad word operand.  */
  516.   xmmdw_mode,
  517.   /* 16-byte XMM, double word, quad word operand or xmm word operand.  */
  518.   xmmqd_mode,
  519.   /* 32-byte YMM operand */
  520.   ymm_mode,
  521.   /* quad word, ymmword or zmmword memory operand.  */
  522.   ymmq_mode,
  523.   /* 32-byte YMM or 16-byte word operand */
  524.   ymmxmm_mode,
  525.   /* d_mode in 32bit, q_mode in 64bit mode.  */
  526.   m_mode,
  527.   /* pair of v_mode operands */
  528.   a_mode,
  529.   cond_jump_mode,
  530.   loop_jcxz_mode,
  531.   v_bnd_mode,
  532.   /* operand size depends on REX prefixes.  */
  533.   dq_mode,
  534.   /* registers like dq_mode, memory like w_mode.  */
  535.   dqw_mode,
  536.   bnd_mode,
  537.   /* 4- or 6-byte pointer operand */
  538.   f_mode,
  539.   const_1_mode,
  540.   /* v_mode for stack-related opcodes.  */
  541.   stack_v_mode,
  542.   /* non-quad operand size depends on prefixes */
  543.   z_mode,
  544.   /* 16-byte operand */
  545.   o_mode,
  546.   /* registers like dq_mode, memory like b_mode.  */
  547.   dqb_mode,
  548.   /* registers like dq_mode, memory like d_mode.  */
  549.   dqd_mode,
  550.   /* normal vex mode */
  551.   vex_mode,
  552.   /* 128bit vex mode */
  553.   vex128_mode,
  554.   /* 256bit vex mode */
  555.   vex256_mode,
  556.   /* operand size depends on the VEX.W bit.  */
  557.   vex_w_dq_mode,
  558.  
  559.   /* Similar to vex_w_dq_mode, with VSIB dword indices.  */
  560.   vex_vsib_d_w_dq_mode,
  561.   /* Similar to vex_w_dq_mode, with VSIB qword indices.  */
  562.   vex_vsib_q_w_dq_mode,
  563.  
  564.   /* scalar, ignore vector length.  */
  565.   scalar_mode,
  566.   /* like d_mode, ignore vector length.  */
  567.   d_scalar_mode,
  568.   /* like d_swap_mode, ignore vector length.  */
  569.   d_scalar_swap_mode,
  570.   /* like q_mode, ignore vector length.  */
  571.   q_scalar_mode,
  572.   /* like q_swap_mode, ignore vector length.  */
  573.   q_scalar_swap_mode,
  574.   /* like vex_mode, ignore vector length.  */
  575.   vex_scalar_mode,
  576.   /* like vex_w_dq_mode, ignore vector length.  */
  577.   vex_scalar_w_dq_mode,
  578.  
  579.   /* Static rounding.  */
  580.   evex_rounding_mode,
  581.   /* Supress all exceptions.  */
  582.   evex_sae_mode,
  583.  
  584.   /* Mask register operand.  */
  585.   mask_mode,
  586.  
  587.   es_reg,
  588.   cs_reg,
  589.   ss_reg,
  590.   ds_reg,
  591.   fs_reg,
  592.   gs_reg,
  593.  
  594.   eAX_reg,
  595.   eCX_reg,
  596.   eDX_reg,
  597.   eBX_reg,
  598.   eSP_reg,
  599.   eBP_reg,
  600.   eSI_reg,
  601.   eDI_reg,
  602.  
  603.   al_reg,
  604.   cl_reg,
  605.   dl_reg,
  606.   bl_reg,
  607.   ah_reg,
  608.   ch_reg,
  609.   dh_reg,
  610.   bh_reg,
  611.  
  612.   ax_reg,
  613.   cx_reg,
  614.   dx_reg,
  615.   bx_reg,
  616.   sp_reg,
  617.   bp_reg,
  618.   si_reg,
  619.   di_reg,
  620.  
  621.   rAX_reg,
  622.   rCX_reg,
  623.   rDX_reg,
  624.   rBX_reg,
  625.   rSP_reg,
  626.   rBP_reg,
  627.   rSI_reg,
  628.   rDI_reg,
  629.  
  630.   z_mode_ax_reg,
  631.   indir_dx_reg
  632. };
  633.  
  634. enum
  635. {
  636.   FLOATCODE = 1,
  637.   USE_REG_TABLE,
  638.   USE_MOD_TABLE,
  639.   USE_RM_TABLE,
  640.   USE_PREFIX_TABLE,
  641.   USE_X86_64_TABLE,
  642.   USE_3BYTE_TABLE,
  643.   USE_XOP_8F_TABLE,
  644.   USE_VEX_C4_TABLE,
  645.   USE_VEX_C5_TABLE,
  646.   USE_VEX_LEN_TABLE,
  647.   USE_VEX_W_TABLE,
  648.   USE_EVEX_TABLE
  649. };
  650.  
  651. #define FLOAT                   NULL, { { NULL, FLOATCODE } }
  652.  
  653. #define DIS386(T, I)            NULL, { { NULL, (T)}, { NULL,  (I) } }
  654. #define REG_TABLE(I)            DIS386 (USE_REG_TABLE, (I))
  655. #define MOD_TABLE(I)            DIS386 (USE_MOD_TABLE, (I))
  656. #define RM_TABLE(I)             DIS386 (USE_RM_TABLE, (I))
  657. #define PREFIX_TABLE(I)         DIS386 (USE_PREFIX_TABLE, (I))
  658. #define X86_64_TABLE(I)         DIS386 (USE_X86_64_TABLE, (I))
  659. #define THREE_BYTE_TABLE(I)     DIS386 (USE_3BYTE_TABLE, (I))
  660. #define XOP_8F_TABLE(I)         DIS386 (USE_XOP_8F_TABLE, (I))
  661. #define VEX_C4_TABLE(I)         DIS386 (USE_VEX_C4_TABLE, (I))
  662. #define VEX_C5_TABLE(I)         DIS386 (USE_VEX_C5_TABLE, (I))
  663. #define VEX_LEN_TABLE(I)        DIS386 (USE_VEX_LEN_TABLE, (I))
  664. #define VEX_W_TABLE(I)          DIS386 (USE_VEX_W_TABLE, (I))
  665. #define EVEX_TABLE(I)           DIS386 (USE_EVEX_TABLE, (I))
  666.  
  667. enum
  668. {
  669.   REG_80 = 0,
  670.   REG_81,
  671.   REG_82,
  672.   REG_8F,
  673.   REG_C0,
  674.   REG_C1,
  675.   REG_C6,
  676.   REG_C7,
  677.   REG_D0,
  678.   REG_D1,
  679.   REG_D2,
  680.   REG_D3,
  681.   REG_F6,
  682.   REG_F7,
  683.   REG_FE,
  684.   REG_FF,
  685.   REG_0F00,
  686.   REG_0F01,
  687.   REG_0F0D,
  688.   REG_0F18,
  689.   REG_0F71,
  690.   REG_0F72,
  691.   REG_0F73,
  692.   REG_0FA6,
  693.   REG_0FA7,
  694.   REG_0FAE,
  695.   REG_0FBA,
  696.   REG_0FC7,
  697.   REG_VEX_0F71,
  698.   REG_VEX_0F72,
  699.   REG_VEX_0F73,
  700.   REG_VEX_0FAE,
  701.   REG_VEX_0F38F3,
  702.   REG_XOP_LWPCB,
  703.   REG_XOP_LWP,
  704.   REG_XOP_TBM_01,
  705.   REG_XOP_TBM_02,
  706.  
  707.   REG_EVEX_0F72,
  708.   REG_EVEX_0F73,
  709.   REG_EVEX_0F38C6,
  710.   REG_EVEX_0F38C7
  711. };
  712.  
  713. enum
  714. {
  715.   MOD_8D = 0,
  716.   MOD_C6_REG_7,
  717.   MOD_C7_REG_7,
  718.   MOD_0F01_REG_0,
  719.   MOD_0F01_REG_1,
  720.   MOD_0F01_REG_2,
  721.   MOD_0F01_REG_3,
  722.   MOD_0F01_REG_7,
  723.   MOD_0F12_PREFIX_0,
  724.   MOD_0F13,
  725.   MOD_0F16_PREFIX_0,
  726.   MOD_0F17,
  727.   MOD_0F18_REG_0,
  728.   MOD_0F18_REG_1,
  729.   MOD_0F18_REG_2,
  730.   MOD_0F18_REG_3,
  731.   MOD_0F18_REG_4,
  732.   MOD_0F18_REG_5,
  733.   MOD_0F18_REG_6,
  734.   MOD_0F18_REG_7,
  735.   MOD_0F1A_PREFIX_0,
  736.   MOD_0F1B_PREFIX_0,
  737.   MOD_0F1B_PREFIX_1,
  738.   MOD_0F20,
  739.   MOD_0F21,
  740.   MOD_0F22,
  741.   MOD_0F23,
  742.   MOD_0F24,
  743.   MOD_0F26,
  744.   MOD_0F2B_PREFIX_0,
  745.   MOD_0F2B_PREFIX_1,
  746.   MOD_0F2B_PREFIX_2,
  747.   MOD_0F2B_PREFIX_3,
  748.   MOD_0F51,
  749.   MOD_0F71_REG_2,
  750.   MOD_0F71_REG_4,
  751.   MOD_0F71_REG_6,
  752.   MOD_0F72_REG_2,
  753.   MOD_0F72_REG_4,
  754.   MOD_0F72_REG_6,
  755.   MOD_0F73_REG_2,
  756.   MOD_0F73_REG_3,
  757.   MOD_0F73_REG_6,
  758.   MOD_0F73_REG_7,
  759.   MOD_0FAE_REG_0,
  760.   MOD_0FAE_REG_1,
  761.   MOD_0FAE_REG_2,
  762.   MOD_0FAE_REG_3,
  763.   MOD_0FAE_REG_4,
  764.   MOD_0FAE_REG_5,
  765.   MOD_0FAE_REG_6,
  766.   MOD_0FAE_REG_7,
  767.   MOD_0FB2,
  768.   MOD_0FB4,
  769.   MOD_0FB5,
  770.   MOD_0FC7_REG_6,
  771.   MOD_0FC7_REG_7,
  772.   MOD_0FD7,
  773.   MOD_0FE7_PREFIX_2,
  774.   MOD_0FF0_PREFIX_3,
  775.   MOD_0F382A_PREFIX_2,
  776.   MOD_62_32BIT,
  777.   MOD_C4_32BIT,
  778.   MOD_C5_32BIT,
  779.   MOD_VEX_0F12_PREFIX_0,
  780.   MOD_VEX_0F13,
  781.   MOD_VEX_0F16_PREFIX_0,
  782.   MOD_VEX_0F17,
  783.   MOD_VEX_0F2B,
  784.   MOD_VEX_0F50,
  785.   MOD_VEX_0F71_REG_2,
  786.   MOD_VEX_0F71_REG_4,
  787.   MOD_VEX_0F71_REG_6,
  788.   MOD_VEX_0F72_REG_2,
  789.   MOD_VEX_0F72_REG_4,
  790.   MOD_VEX_0F72_REG_6,
  791.   MOD_VEX_0F73_REG_2,
  792.   MOD_VEX_0F73_REG_3,
  793.   MOD_VEX_0F73_REG_6,
  794.   MOD_VEX_0F73_REG_7,
  795.   MOD_VEX_0FAE_REG_2,
  796.   MOD_VEX_0FAE_REG_3,
  797.   MOD_VEX_0FD7_PREFIX_2,
  798.   MOD_VEX_0FE7_PREFIX_2,
  799.   MOD_VEX_0FF0_PREFIX_3,
  800.   MOD_VEX_0F381A_PREFIX_2,
  801.   MOD_VEX_0F382A_PREFIX_2,
  802.   MOD_VEX_0F382C_PREFIX_2,
  803.   MOD_VEX_0F382D_PREFIX_2,
  804.   MOD_VEX_0F382E_PREFIX_2,
  805.   MOD_VEX_0F382F_PREFIX_2,
  806.   MOD_VEX_0F385A_PREFIX_2,
  807.   MOD_VEX_0F388C_PREFIX_2,
  808.   MOD_VEX_0F388E_PREFIX_2,
  809.  
  810.   MOD_EVEX_0F10_PREFIX_1,
  811.   MOD_EVEX_0F10_PREFIX_3,
  812.   MOD_EVEX_0F11_PREFIX_1,
  813.   MOD_EVEX_0F11_PREFIX_3,
  814.   MOD_EVEX_0F12_PREFIX_0,
  815.   MOD_EVEX_0F16_PREFIX_0,
  816.   MOD_EVEX_0F38C6_REG_1,
  817.   MOD_EVEX_0F38C6_REG_2,
  818.   MOD_EVEX_0F38C6_REG_5,
  819.   MOD_EVEX_0F38C6_REG_6,
  820.   MOD_EVEX_0F38C7_REG_1,
  821.   MOD_EVEX_0F38C7_REG_2,
  822.   MOD_EVEX_0F38C7_REG_5,
  823.   MOD_EVEX_0F38C7_REG_6
  824. };
  825.  
  826. enum
  827. {
  828.   RM_C6_REG_7 = 0,
  829.   RM_C7_REG_7,
  830.   RM_0F01_REG_0,
  831.   RM_0F01_REG_1,
  832.   RM_0F01_REG_2,
  833.   RM_0F01_REG_3,
  834.   RM_0F01_REG_7,
  835.   RM_0FAE_REG_5,
  836.   RM_0FAE_REG_6,
  837.   RM_0FAE_REG_7
  838. };
  839.  
  840. enum
  841. {
  842.   PREFIX_90 = 0,
  843.   PREFIX_0F10,
  844.   PREFIX_0F11,
  845.   PREFIX_0F12,
  846.   PREFIX_0F16,
  847.   PREFIX_0F1A,
  848.   PREFIX_0F1B,
  849.   PREFIX_0F2A,
  850.   PREFIX_0F2B,
  851.   PREFIX_0F2C,
  852.   PREFIX_0F2D,
  853.   PREFIX_0F2E,
  854.   PREFIX_0F2F,
  855.   PREFIX_0F51,
  856.   PREFIX_0F52,
  857.   PREFIX_0F53,
  858.   PREFIX_0F58,
  859.   PREFIX_0F59,
  860.   PREFIX_0F5A,
  861.   PREFIX_0F5B,
  862.   PREFIX_0F5C,
  863.   PREFIX_0F5D,
  864.   PREFIX_0F5E,
  865.   PREFIX_0F5F,
  866.   PREFIX_0F60,
  867.   PREFIX_0F61,
  868.   PREFIX_0F62,
  869.   PREFIX_0F6C,
  870.   PREFIX_0F6D,
  871.   PREFIX_0F6F,
  872.   PREFIX_0F70,
  873.   PREFIX_0F73_REG_3,
  874.   PREFIX_0F73_REG_7,
  875.   PREFIX_0F78,
  876.   PREFIX_0F79,
  877.   PREFIX_0F7C,
  878.   PREFIX_0F7D,
  879.   PREFIX_0F7E,
  880.   PREFIX_0F7F,
  881.   PREFIX_0FAE_REG_0,
  882.   PREFIX_0FAE_REG_1,
  883.   PREFIX_0FAE_REG_2,
  884.   PREFIX_0FAE_REG_3,
  885.   PREFIX_0FB8,
  886.   PREFIX_0FBC,
  887.   PREFIX_0FBD,
  888.   PREFIX_0FC2,
  889.   PREFIX_0FC3,
  890.   PREFIX_0FC7_REG_6,
  891.   PREFIX_0FD0,
  892.   PREFIX_0FD6,
  893.   PREFIX_0FE6,
  894.   PREFIX_0FE7,
  895.   PREFIX_0FF0,
  896.   PREFIX_0FF7,
  897.   PREFIX_0F3810,
  898.   PREFIX_0F3814,
  899.   PREFIX_0F3815,
  900.   PREFIX_0F3817,
  901.   PREFIX_0F3820,
  902.   PREFIX_0F3821,
  903.   PREFIX_0F3822,
  904.   PREFIX_0F3823,
  905.   PREFIX_0F3824,
  906.   PREFIX_0F3825,
  907.   PREFIX_0F3828,
  908.   PREFIX_0F3829,
  909.   PREFIX_0F382A,
  910.   PREFIX_0F382B,
  911.   PREFIX_0F3830,
  912.   PREFIX_0F3831,
  913.   PREFIX_0F3832,
  914.   PREFIX_0F3833,
  915.   PREFIX_0F3834,
  916.   PREFIX_0F3835,
  917.   PREFIX_0F3837,
  918.   PREFIX_0F3838,
  919.   PREFIX_0F3839,
  920.   PREFIX_0F383A,
  921.   PREFIX_0F383B,
  922.   PREFIX_0F383C,
  923.   PREFIX_0F383D,
  924.   PREFIX_0F383E,
  925.   PREFIX_0F383F,
  926.   PREFIX_0F3840,
  927.   PREFIX_0F3841,
  928.   PREFIX_0F3880,
  929.   PREFIX_0F3881,
  930.   PREFIX_0F3882,
  931.   PREFIX_0F38C8,
  932.   PREFIX_0F38C9,
  933.   PREFIX_0F38CA,
  934.   PREFIX_0F38CB,
  935.   PREFIX_0F38CC,
  936.   PREFIX_0F38CD,
  937.   PREFIX_0F38DB,
  938.   PREFIX_0F38DC,
  939.   PREFIX_0F38DD,
  940.   PREFIX_0F38DE,
  941.   PREFIX_0F38DF,
  942.   PREFIX_0F38F0,
  943.   PREFIX_0F38F1,
  944.   PREFIX_0F38F6,
  945.   PREFIX_0F3A08,
  946.   PREFIX_0F3A09,
  947.   PREFIX_0F3A0A,
  948.   PREFIX_0F3A0B,
  949.   PREFIX_0F3A0C,
  950.   PREFIX_0F3A0D,
  951.   PREFIX_0F3A0E,
  952.   PREFIX_0F3A14,
  953.   PREFIX_0F3A15,
  954.   PREFIX_0F3A16,
  955.   PREFIX_0F3A17,
  956.   PREFIX_0F3A20,
  957.   PREFIX_0F3A21,
  958.   PREFIX_0F3A22,
  959.   PREFIX_0F3A40,
  960.   PREFIX_0F3A41,
  961.   PREFIX_0F3A42,
  962.   PREFIX_0F3A44,
  963.   PREFIX_0F3A60,
  964.   PREFIX_0F3A61,
  965.   PREFIX_0F3A62,
  966.   PREFIX_0F3A63,
  967.   PREFIX_0F3ACC,
  968.   PREFIX_0F3ADF,
  969.   PREFIX_VEX_0F10,
  970.   PREFIX_VEX_0F11,
  971.   PREFIX_VEX_0F12,
  972.   PREFIX_VEX_0F16,
  973.   PREFIX_VEX_0F2A,
  974.   PREFIX_VEX_0F2C,
  975.   PREFIX_VEX_0F2D,
  976.   PREFIX_VEX_0F2E,
  977.   PREFIX_VEX_0F2F,
  978.   PREFIX_VEX_0F41,
  979.   PREFIX_VEX_0F42,
  980.   PREFIX_VEX_0F44,
  981.   PREFIX_VEX_0F45,
  982.   PREFIX_VEX_0F46,
  983.   PREFIX_VEX_0F47,
  984.   PREFIX_VEX_0F4B,
  985.   PREFIX_VEX_0F51,
  986.   PREFIX_VEX_0F52,
  987.   PREFIX_VEX_0F53,
  988.   PREFIX_VEX_0F58,
  989.   PREFIX_VEX_0F59,
  990.   PREFIX_VEX_0F5A,
  991.   PREFIX_VEX_0F5B,
  992.   PREFIX_VEX_0F5C,
  993.   PREFIX_VEX_0F5D,
  994.   PREFIX_VEX_0F5E,
  995.   PREFIX_VEX_0F5F,
  996.   PREFIX_VEX_0F60,
  997.   PREFIX_VEX_0F61,
  998.   PREFIX_VEX_0F62,
  999.   PREFIX_VEX_0F63,
  1000.   PREFIX_VEX_0F64,
  1001.   PREFIX_VEX_0F65,
  1002.   PREFIX_VEX_0F66,
  1003.   PREFIX_VEX_0F67,
  1004.   PREFIX_VEX_0F68,
  1005.   PREFIX_VEX_0F69,
  1006.   PREFIX_VEX_0F6A,
  1007.   PREFIX_VEX_0F6B,
  1008.   PREFIX_VEX_0F6C,
  1009.   PREFIX_VEX_0F6D,
  1010.   PREFIX_VEX_0F6E,
  1011.   PREFIX_VEX_0F6F,
  1012.   PREFIX_VEX_0F70,
  1013.   PREFIX_VEX_0F71_REG_2,
  1014.   PREFIX_VEX_0F71_REG_4,
  1015.   PREFIX_VEX_0F71_REG_6,
  1016.   PREFIX_VEX_0F72_REG_2,
  1017.   PREFIX_VEX_0F72_REG_4,
  1018.   PREFIX_VEX_0F72_REG_6,
  1019.   PREFIX_VEX_0F73_REG_2,
  1020.   PREFIX_VEX_0F73_REG_3,
  1021.   PREFIX_VEX_0F73_REG_6,
  1022.   PREFIX_VEX_0F73_REG_7,
  1023.   PREFIX_VEX_0F74,
  1024.   PREFIX_VEX_0F75,
  1025.   PREFIX_VEX_0F76,
  1026.   PREFIX_VEX_0F77,
  1027.   PREFIX_VEX_0F7C,
  1028.   PREFIX_VEX_0F7D,
  1029.   PREFIX_VEX_0F7E,
  1030.   PREFIX_VEX_0F7F,
  1031.   PREFIX_VEX_0F90,
  1032.   PREFIX_VEX_0F91,
  1033.   PREFIX_VEX_0F92,
  1034.   PREFIX_VEX_0F93,
  1035.   PREFIX_VEX_0F98,
  1036.   PREFIX_VEX_0FC2,
  1037.   PREFIX_VEX_0FC4,
  1038.   PREFIX_VEX_0FC5,
  1039.   PREFIX_VEX_0FD0,
  1040.   PREFIX_VEX_0FD1,
  1041.   PREFIX_VEX_0FD2,
  1042.   PREFIX_VEX_0FD3,
  1043.   PREFIX_VEX_0FD4,
  1044.   PREFIX_VEX_0FD5,
  1045.   PREFIX_VEX_0FD6,
  1046.   PREFIX_VEX_0FD7,
  1047.   PREFIX_VEX_0FD8,
  1048.   PREFIX_VEX_0FD9,
  1049.   PREFIX_VEX_0FDA,
  1050.   PREFIX_VEX_0FDB,
  1051.   PREFIX_VEX_0FDC,
  1052.   PREFIX_VEX_0FDD,
  1053.   PREFIX_VEX_0FDE,
  1054.   PREFIX_VEX_0FDF,
  1055.   PREFIX_VEX_0FE0,
  1056.   PREFIX_VEX_0FE1,
  1057.   PREFIX_VEX_0FE2,
  1058.   PREFIX_VEX_0FE3,
  1059.   PREFIX_VEX_0FE4,
  1060.   PREFIX_VEX_0FE5,
  1061.   PREFIX_VEX_0FE6,
  1062.   PREFIX_VEX_0FE7,
  1063.   PREFIX_VEX_0FE8,
  1064.   PREFIX_VEX_0FE9,
  1065.   PREFIX_VEX_0FEA,
  1066.   PREFIX_VEX_0FEB,
  1067.   PREFIX_VEX_0FEC,
  1068.   PREFIX_VEX_0FED,
  1069.   PREFIX_VEX_0FEE,
  1070.   PREFIX_VEX_0FEF,
  1071.   PREFIX_VEX_0FF0,
  1072.   PREFIX_VEX_0FF1,
  1073.   PREFIX_VEX_0FF2,
  1074.   PREFIX_VEX_0FF3,
  1075.   PREFIX_VEX_0FF4,
  1076.   PREFIX_VEX_0FF5,
  1077.   PREFIX_VEX_0FF6,
  1078.   PREFIX_VEX_0FF7,
  1079.   PREFIX_VEX_0FF8,
  1080.   PREFIX_VEX_0FF9,
  1081.   PREFIX_VEX_0FFA,
  1082.   PREFIX_VEX_0FFB,
  1083.   PREFIX_VEX_0FFC,
  1084.   PREFIX_VEX_0FFD,
  1085.   PREFIX_VEX_0FFE,
  1086.   PREFIX_VEX_0F3800,
  1087.   PREFIX_VEX_0F3801,
  1088.   PREFIX_VEX_0F3802,
  1089.   PREFIX_VEX_0F3803,
  1090.   PREFIX_VEX_0F3804,
  1091.   PREFIX_VEX_0F3805,
  1092.   PREFIX_VEX_0F3806,
  1093.   PREFIX_VEX_0F3807,
  1094.   PREFIX_VEX_0F3808,
  1095.   PREFIX_VEX_0F3809,
  1096.   PREFIX_VEX_0F380A,
  1097.   PREFIX_VEX_0F380B,
  1098.   PREFIX_VEX_0F380C,
  1099.   PREFIX_VEX_0F380D,
  1100.   PREFIX_VEX_0F380E,
  1101.   PREFIX_VEX_0F380F,
  1102.   PREFIX_VEX_0F3813,
  1103.   PREFIX_VEX_0F3816,
  1104.   PREFIX_VEX_0F3817,
  1105.   PREFIX_VEX_0F3818,
  1106.   PREFIX_VEX_0F3819,
  1107.   PREFIX_VEX_0F381A,
  1108.   PREFIX_VEX_0F381C,
  1109.   PREFIX_VEX_0F381D,
  1110.   PREFIX_VEX_0F381E,
  1111.   PREFIX_VEX_0F3820,
  1112.   PREFIX_VEX_0F3821,
  1113.   PREFIX_VEX_0F3822,
  1114.   PREFIX_VEX_0F3823,
  1115.   PREFIX_VEX_0F3824,
  1116.   PREFIX_VEX_0F3825,
  1117.   PREFIX_VEX_0F3828,
  1118.   PREFIX_VEX_0F3829,
  1119.   PREFIX_VEX_0F382A,
  1120.   PREFIX_VEX_0F382B,
  1121.   PREFIX_VEX_0F382C,
  1122.   PREFIX_VEX_0F382D,
  1123.   PREFIX_VEX_0F382E,
  1124.   PREFIX_VEX_0F382F,
  1125.   PREFIX_VEX_0F3830,
  1126.   PREFIX_VEX_0F3831,
  1127.   PREFIX_VEX_0F3832,
  1128.   PREFIX_VEX_0F3833,
  1129.   PREFIX_VEX_0F3834,
  1130.   PREFIX_VEX_0F3835,
  1131.   PREFIX_VEX_0F3836,
  1132.   PREFIX_VEX_0F3837,
  1133.   PREFIX_VEX_0F3838,
  1134.   PREFIX_VEX_0F3839,
  1135.   PREFIX_VEX_0F383A,
  1136.   PREFIX_VEX_0F383B,
  1137.   PREFIX_VEX_0F383C,
  1138.   PREFIX_VEX_0F383D,
  1139.   PREFIX_VEX_0F383E,
  1140.   PREFIX_VEX_0F383F,
  1141.   PREFIX_VEX_0F3840,
  1142.   PREFIX_VEX_0F3841,
  1143.   PREFIX_VEX_0F3845,
  1144.   PREFIX_VEX_0F3846,
  1145.   PREFIX_VEX_0F3847,
  1146.   PREFIX_VEX_0F3858,
  1147.   PREFIX_VEX_0F3859,
  1148.   PREFIX_VEX_0F385A,
  1149.   PREFIX_VEX_0F3878,
  1150.   PREFIX_VEX_0F3879,
  1151.   PREFIX_VEX_0F388C,
  1152.   PREFIX_VEX_0F388E,
  1153.   PREFIX_VEX_0F3890,
  1154.   PREFIX_VEX_0F3891,
  1155.   PREFIX_VEX_0F3892,
  1156.   PREFIX_VEX_0F3893,
  1157.   PREFIX_VEX_0F3896,
  1158.   PREFIX_VEX_0F3897,
  1159.   PREFIX_VEX_0F3898,
  1160.   PREFIX_VEX_0F3899,
  1161.   PREFIX_VEX_0F389A,
  1162.   PREFIX_VEX_0F389B,
  1163.   PREFIX_VEX_0F389C,
  1164.   PREFIX_VEX_0F389D,
  1165.   PREFIX_VEX_0F389E,
  1166.   PREFIX_VEX_0F389F,
  1167.   PREFIX_VEX_0F38A6,
  1168.   PREFIX_VEX_0F38A7,
  1169.   PREFIX_VEX_0F38A8,
  1170.   PREFIX_VEX_0F38A9,
  1171.   PREFIX_VEX_0F38AA,
  1172.   PREFIX_VEX_0F38AB,
  1173.   PREFIX_VEX_0F38AC,
  1174.   PREFIX_VEX_0F38AD,
  1175.   PREFIX_VEX_0F38AE,
  1176.   PREFIX_VEX_0F38AF,
  1177.   PREFIX_VEX_0F38B6,
  1178.   PREFIX_VEX_0F38B7,
  1179.   PREFIX_VEX_0F38B8,
  1180.   PREFIX_VEX_0F38B9,
  1181.   PREFIX_VEX_0F38BA,
  1182.   PREFIX_VEX_0F38BB,
  1183.   PREFIX_VEX_0F38BC,
  1184.   PREFIX_VEX_0F38BD,
  1185.   PREFIX_VEX_0F38BE,
  1186.   PREFIX_VEX_0F38BF,
  1187.   PREFIX_VEX_0F38DB,
  1188.   PREFIX_VEX_0F38DC,
  1189.   PREFIX_VEX_0F38DD,
  1190.   PREFIX_VEX_0F38DE,
  1191.   PREFIX_VEX_0F38DF,
  1192.   PREFIX_VEX_0F38F2,
  1193.   PREFIX_VEX_0F38F3_REG_1,
  1194.   PREFIX_VEX_0F38F3_REG_2,
  1195.   PREFIX_VEX_0F38F3_REG_3,
  1196.   PREFIX_VEX_0F38F5,
  1197.   PREFIX_VEX_0F38F6,
  1198.   PREFIX_VEX_0F38F7,
  1199.   PREFIX_VEX_0F3A00,
  1200.   PREFIX_VEX_0F3A01,
  1201.   PREFIX_VEX_0F3A02,
  1202.   PREFIX_VEX_0F3A04,
  1203.   PREFIX_VEX_0F3A05,
  1204.   PREFIX_VEX_0F3A06,
  1205.   PREFIX_VEX_0F3A08,
  1206.   PREFIX_VEX_0F3A09,
  1207.   PREFIX_VEX_0F3A0A,
  1208.   PREFIX_VEX_0F3A0B,
  1209.   PREFIX_VEX_0F3A0C,
  1210.   PREFIX_VEX_0F3A0D,
  1211.   PREFIX_VEX_0F3A0E,
  1212.   PREFIX_VEX_0F3A0F,
  1213.   PREFIX_VEX_0F3A14,
  1214.   PREFIX_VEX_0F3A15,
  1215.   PREFIX_VEX_0F3A16,
  1216.   PREFIX_VEX_0F3A17,
  1217.   PREFIX_VEX_0F3A18,
  1218.   PREFIX_VEX_0F3A19,
  1219.   PREFIX_VEX_0F3A1D,
  1220.   PREFIX_VEX_0F3A20,
  1221.   PREFIX_VEX_0F3A21,
  1222.   PREFIX_VEX_0F3A22,
  1223.   PREFIX_VEX_0F3A30,
  1224.   PREFIX_VEX_0F3A32,
  1225.   PREFIX_VEX_0F3A38,
  1226.   PREFIX_VEX_0F3A39,
  1227.   PREFIX_VEX_0F3A40,
  1228.   PREFIX_VEX_0F3A41,
  1229.   PREFIX_VEX_0F3A42,
  1230.   PREFIX_VEX_0F3A44,
  1231.   PREFIX_VEX_0F3A46,
  1232.   PREFIX_VEX_0F3A48,
  1233.   PREFIX_VEX_0F3A49,
  1234.   PREFIX_VEX_0F3A4A,
  1235.   PREFIX_VEX_0F3A4B,
  1236.   PREFIX_VEX_0F3A4C,
  1237.   PREFIX_VEX_0F3A5C,
  1238.   PREFIX_VEX_0F3A5D,
  1239.   PREFIX_VEX_0F3A5E,
  1240.   PREFIX_VEX_0F3A5F,
  1241.   PREFIX_VEX_0F3A60,
  1242.   PREFIX_VEX_0F3A61,
  1243.   PREFIX_VEX_0F3A62,
  1244.   PREFIX_VEX_0F3A63,
  1245.   PREFIX_VEX_0F3A68,
  1246.   PREFIX_VEX_0F3A69,
  1247.   PREFIX_VEX_0F3A6A,
  1248.   PREFIX_VEX_0F3A6B,
  1249.   PREFIX_VEX_0F3A6C,
  1250.   PREFIX_VEX_0F3A6D,
  1251.   PREFIX_VEX_0F3A6E,
  1252.   PREFIX_VEX_0F3A6F,
  1253.   PREFIX_VEX_0F3A78,
  1254.   PREFIX_VEX_0F3A79,
  1255.   PREFIX_VEX_0F3A7A,
  1256.   PREFIX_VEX_0F3A7B,
  1257.   PREFIX_VEX_0F3A7C,
  1258.   PREFIX_VEX_0F3A7D,
  1259.   PREFIX_VEX_0F3A7E,
  1260.   PREFIX_VEX_0F3A7F,
  1261.   PREFIX_VEX_0F3ADF,
  1262.   PREFIX_VEX_0F3AF0,
  1263.  
  1264.   PREFIX_EVEX_0F10,
  1265.   PREFIX_EVEX_0F11,
  1266.   PREFIX_EVEX_0F12,
  1267.   PREFIX_EVEX_0F13,
  1268.   PREFIX_EVEX_0F14,
  1269.   PREFIX_EVEX_0F15,
  1270.   PREFIX_EVEX_0F16,
  1271.   PREFIX_EVEX_0F17,
  1272.   PREFIX_EVEX_0F28,
  1273.   PREFIX_EVEX_0F29,
  1274.   PREFIX_EVEX_0F2A,
  1275.   PREFIX_EVEX_0F2B,
  1276.   PREFIX_EVEX_0F2C,
  1277.   PREFIX_EVEX_0F2D,
  1278.   PREFIX_EVEX_0F2E,
  1279.   PREFIX_EVEX_0F2F,
  1280.   PREFIX_EVEX_0F51,
  1281.   PREFIX_EVEX_0F58,
  1282.   PREFIX_EVEX_0F59,
  1283.   PREFIX_EVEX_0F5A,
  1284.   PREFIX_EVEX_0F5B,
  1285.   PREFIX_EVEX_0F5C,
  1286.   PREFIX_EVEX_0F5D,
  1287.   PREFIX_EVEX_0F5E,
  1288.   PREFIX_EVEX_0F5F,
  1289.   PREFIX_EVEX_0F62,
  1290.   PREFIX_EVEX_0F66,
  1291.   PREFIX_EVEX_0F6A,
  1292.   PREFIX_EVEX_0F6C,
  1293.   PREFIX_EVEX_0F6D,
  1294.   PREFIX_EVEX_0F6E,
  1295.   PREFIX_EVEX_0F6F,
  1296.   PREFIX_EVEX_0F70,
  1297.   PREFIX_EVEX_0F72_REG_0,
  1298.   PREFIX_EVEX_0F72_REG_1,
  1299.   PREFIX_EVEX_0F72_REG_2,
  1300.   PREFIX_EVEX_0F72_REG_4,
  1301.   PREFIX_EVEX_0F72_REG_6,
  1302.   PREFIX_EVEX_0F73_REG_2,
  1303.   PREFIX_EVEX_0F73_REG_6,
  1304.   PREFIX_EVEX_0F76,
  1305.   PREFIX_EVEX_0F78,
  1306.   PREFIX_EVEX_0F79,
  1307.   PREFIX_EVEX_0F7A,
  1308.   PREFIX_EVEX_0F7B,
  1309.   PREFIX_EVEX_0F7E,
  1310.   PREFIX_EVEX_0F7F,
  1311.   PREFIX_EVEX_0FC2,
  1312.   PREFIX_EVEX_0FC6,
  1313.   PREFIX_EVEX_0FD2,
  1314.   PREFIX_EVEX_0FD3,
  1315.   PREFIX_EVEX_0FD4,
  1316.   PREFIX_EVEX_0FD6,
  1317.   PREFIX_EVEX_0FDB,
  1318.   PREFIX_EVEX_0FDF,
  1319.   PREFIX_EVEX_0FE2,
  1320.   PREFIX_EVEX_0FE6,
  1321.   PREFIX_EVEX_0FE7,
  1322.   PREFIX_EVEX_0FEB,
  1323.   PREFIX_EVEX_0FEF,
  1324.   PREFIX_EVEX_0FF2,
  1325.   PREFIX_EVEX_0FF3,
  1326.   PREFIX_EVEX_0FF4,
  1327.   PREFIX_EVEX_0FFA,
  1328.   PREFIX_EVEX_0FFB,
  1329.   PREFIX_EVEX_0FFE,
  1330.   PREFIX_EVEX_0F380C,
  1331.   PREFIX_EVEX_0F380D,
  1332.   PREFIX_EVEX_0F3811,
  1333.   PREFIX_EVEX_0F3812,
  1334.   PREFIX_EVEX_0F3813,
  1335.   PREFIX_EVEX_0F3814,
  1336.   PREFIX_EVEX_0F3815,
  1337.   PREFIX_EVEX_0F3816,
  1338.   PREFIX_EVEX_0F3818,
  1339.   PREFIX_EVEX_0F3819,
  1340.   PREFIX_EVEX_0F381A,
  1341.   PREFIX_EVEX_0F381B,
  1342.   PREFIX_EVEX_0F381E,
  1343.   PREFIX_EVEX_0F381F,
  1344.   PREFIX_EVEX_0F3821,
  1345.   PREFIX_EVEX_0F3822,
  1346.   PREFIX_EVEX_0F3823,
  1347.   PREFIX_EVEX_0F3824,
  1348.   PREFIX_EVEX_0F3825,
  1349.   PREFIX_EVEX_0F3827,
  1350.   PREFIX_EVEX_0F3828,
  1351.   PREFIX_EVEX_0F3829,
  1352.   PREFIX_EVEX_0F382A,
  1353.   PREFIX_EVEX_0F382C,
  1354.   PREFIX_EVEX_0F382D,
  1355.   PREFIX_EVEX_0F3831,
  1356.   PREFIX_EVEX_0F3832,
  1357.   PREFIX_EVEX_0F3833,
  1358.   PREFIX_EVEX_0F3834,
  1359.   PREFIX_EVEX_0F3835,
  1360.   PREFIX_EVEX_0F3836,
  1361.   PREFIX_EVEX_0F3837,
  1362.   PREFIX_EVEX_0F3839,
  1363.   PREFIX_EVEX_0F383A,
  1364.   PREFIX_EVEX_0F383B,
  1365.   PREFIX_EVEX_0F383D,
  1366.   PREFIX_EVEX_0F383F,
  1367.   PREFIX_EVEX_0F3840,
  1368.   PREFIX_EVEX_0F3842,
  1369.   PREFIX_EVEX_0F3843,
  1370.   PREFIX_EVEX_0F3844,
  1371.   PREFIX_EVEX_0F3845,
  1372.   PREFIX_EVEX_0F3846,
  1373.   PREFIX_EVEX_0F3847,
  1374.   PREFIX_EVEX_0F384C,
  1375.   PREFIX_EVEX_0F384D,
  1376.   PREFIX_EVEX_0F384E,
  1377.   PREFIX_EVEX_0F384F,
  1378.   PREFIX_EVEX_0F3858,
  1379.   PREFIX_EVEX_0F3859,
  1380.   PREFIX_EVEX_0F385A,
  1381.   PREFIX_EVEX_0F385B,
  1382.   PREFIX_EVEX_0F3864,
  1383.   PREFIX_EVEX_0F3865,
  1384.   PREFIX_EVEX_0F3876,
  1385.   PREFIX_EVEX_0F3877,
  1386.   PREFIX_EVEX_0F387C,
  1387.   PREFIX_EVEX_0F387E,
  1388.   PREFIX_EVEX_0F387F,
  1389.   PREFIX_EVEX_0F3888,
  1390.   PREFIX_EVEX_0F3889,
  1391.   PREFIX_EVEX_0F388A,
  1392.   PREFIX_EVEX_0F388B,
  1393.   PREFIX_EVEX_0F3890,
  1394.   PREFIX_EVEX_0F3891,
  1395.   PREFIX_EVEX_0F3892,
  1396.   PREFIX_EVEX_0F3893,
  1397.   PREFIX_EVEX_0F3896,
  1398.   PREFIX_EVEX_0F3897,
  1399.   PREFIX_EVEX_0F3898,
  1400.   PREFIX_EVEX_0F3899,
  1401.   PREFIX_EVEX_0F389A,
  1402.   PREFIX_EVEX_0F389B,
  1403.   PREFIX_EVEX_0F389C,
  1404.   PREFIX_EVEX_0F389D,
  1405.   PREFIX_EVEX_0F389E,
  1406.   PREFIX_EVEX_0F389F,
  1407.   PREFIX_EVEX_0F38A0,
  1408.   PREFIX_EVEX_0F38A1,
  1409.   PREFIX_EVEX_0F38A2,
  1410.   PREFIX_EVEX_0F38A3,
  1411.   PREFIX_EVEX_0F38A6,
  1412.   PREFIX_EVEX_0F38A7,
  1413.   PREFIX_EVEX_0F38A8,
  1414.   PREFIX_EVEX_0F38A9,
  1415.   PREFIX_EVEX_0F38AA,
  1416.   PREFIX_EVEX_0F38AB,
  1417.   PREFIX_EVEX_0F38AC,
  1418.   PREFIX_EVEX_0F38AD,
  1419.   PREFIX_EVEX_0F38AE,
  1420.   PREFIX_EVEX_0F38AF,
  1421.   PREFIX_EVEX_0F38B6,
  1422.   PREFIX_EVEX_0F38B7,
  1423.   PREFIX_EVEX_0F38B8,
  1424.   PREFIX_EVEX_0F38B9,
  1425.   PREFIX_EVEX_0F38BA,
  1426.   PREFIX_EVEX_0F38BB,
  1427.   PREFIX_EVEX_0F38BC,
  1428.   PREFIX_EVEX_0F38BD,
  1429.   PREFIX_EVEX_0F38BE,
  1430.   PREFIX_EVEX_0F38BF,
  1431.   PREFIX_EVEX_0F38C4,
  1432.   PREFIX_EVEX_0F38C6_REG_1,
  1433.   PREFIX_EVEX_0F38C6_REG_2,
  1434.   PREFIX_EVEX_0F38C6_REG_5,
  1435.   PREFIX_EVEX_0F38C6_REG_6,
  1436.   PREFIX_EVEX_0F38C7_REG_1,
  1437.   PREFIX_EVEX_0F38C7_REG_2,
  1438.   PREFIX_EVEX_0F38C7_REG_5,
  1439.   PREFIX_EVEX_0F38C7_REG_6,
  1440.   PREFIX_EVEX_0F38C8,
  1441.   PREFIX_EVEX_0F38CA,
  1442.   PREFIX_EVEX_0F38CB,
  1443.   PREFIX_EVEX_0F38CC,
  1444.   PREFIX_EVEX_0F38CD,
  1445.  
  1446.   PREFIX_EVEX_0F3A00,
  1447.   PREFIX_EVEX_0F3A01,
  1448.   PREFIX_EVEX_0F3A03,
  1449.   PREFIX_EVEX_0F3A04,
  1450.   PREFIX_EVEX_0F3A05,
  1451.   PREFIX_EVEX_0F3A08,
  1452.   PREFIX_EVEX_0F3A09,
  1453.   PREFIX_EVEX_0F3A0A,
  1454.   PREFIX_EVEX_0F3A0B,
  1455.   PREFIX_EVEX_0F3A17,
  1456.   PREFIX_EVEX_0F3A18,
  1457.   PREFIX_EVEX_0F3A19,
  1458.   PREFIX_EVEX_0F3A1A,
  1459.   PREFIX_EVEX_0F3A1B,
  1460.   PREFIX_EVEX_0F3A1D,
  1461.   PREFIX_EVEX_0F3A1E,
  1462.   PREFIX_EVEX_0F3A1F,
  1463.   PREFIX_EVEX_0F3A21,
  1464.   PREFIX_EVEX_0F3A23,
  1465.   PREFIX_EVEX_0F3A25,
  1466.   PREFIX_EVEX_0F3A26,
  1467.   PREFIX_EVEX_0F3A27,
  1468.   PREFIX_EVEX_0F3A38,
  1469.   PREFIX_EVEX_0F3A39,
  1470.   PREFIX_EVEX_0F3A3A,
  1471.   PREFIX_EVEX_0F3A3B,
  1472.   PREFIX_EVEX_0F3A43,
  1473.   PREFIX_EVEX_0F3A54,
  1474.   PREFIX_EVEX_0F3A55,
  1475. };
  1476.  
  1477. enum
  1478. {
  1479.   X86_64_06 = 0,
  1480.   X86_64_07,
  1481.   X86_64_0D,
  1482.   X86_64_16,
  1483.   X86_64_17,
  1484.   X86_64_1E,
  1485.   X86_64_1F,
  1486.   X86_64_27,
  1487.   X86_64_2F,
  1488.   X86_64_37,
  1489.   X86_64_3F,
  1490.   X86_64_60,
  1491.   X86_64_61,
  1492.   X86_64_62,
  1493.   X86_64_63,
  1494.   X86_64_6D,
  1495.   X86_64_6F,
  1496.   X86_64_9A,
  1497.   X86_64_C4,
  1498.   X86_64_C5,
  1499.   X86_64_CE,
  1500.   X86_64_D4,
  1501.   X86_64_D5,
  1502.   X86_64_EA,
  1503.   X86_64_0F01_REG_0,
  1504.   X86_64_0F01_REG_1,
  1505.   X86_64_0F01_REG_2,
  1506.   X86_64_0F01_REG_3
  1507. };
  1508.  
  1509. enum
  1510. {
  1511.   THREE_BYTE_0F38 = 0,
  1512.   THREE_BYTE_0F3A,
  1513.   THREE_BYTE_0F7A
  1514. };
  1515.  
  1516. enum
  1517. {
  1518.   XOP_08 = 0,
  1519.   XOP_09,
  1520.   XOP_0A
  1521. };
  1522.  
  1523. enum
  1524. {
  1525.   VEX_0F = 0,
  1526.   VEX_0F38,
  1527.   VEX_0F3A
  1528. };
  1529.  
  1530. enum
  1531. {
  1532.   EVEX_0F = 0,
  1533.   EVEX_0F38,
  1534.   EVEX_0F3A
  1535. };
  1536.  
  1537. enum
  1538. {
  1539.   VEX_LEN_0F10_P_1 = 0,
  1540.   VEX_LEN_0F10_P_3,
  1541.   VEX_LEN_0F11_P_1,
  1542.   VEX_LEN_0F11_P_3,
  1543.   VEX_LEN_0F12_P_0_M_0,
  1544.   VEX_LEN_0F12_P_0_M_1,
  1545.   VEX_LEN_0F12_P_2,
  1546.   VEX_LEN_0F13_M_0,
  1547.   VEX_LEN_0F16_P_0_M_0,
  1548.   VEX_LEN_0F16_P_0_M_1,
  1549.   VEX_LEN_0F16_P_2,
  1550.   VEX_LEN_0F17_M_0,
  1551.   VEX_LEN_0F2A_P_1,
  1552.   VEX_LEN_0F2A_P_3,
  1553.   VEX_LEN_0F2C_P_1,
  1554.   VEX_LEN_0F2C_P_3,
  1555.   VEX_LEN_0F2D_P_1,
  1556.   VEX_LEN_0F2D_P_3,
  1557.   VEX_LEN_0F2E_P_0,
  1558.   VEX_LEN_0F2E_P_2,
  1559.   VEX_LEN_0F2F_P_0,
  1560.   VEX_LEN_0F2F_P_2,
  1561.   VEX_LEN_0F41_P_0,
  1562.   VEX_LEN_0F42_P_0,
  1563.   VEX_LEN_0F44_P_0,
  1564.   VEX_LEN_0F45_P_0,
  1565.   VEX_LEN_0F46_P_0,
  1566.   VEX_LEN_0F47_P_0,
  1567.   VEX_LEN_0F4B_P_2,
  1568.   VEX_LEN_0F51_P_1,
  1569.   VEX_LEN_0F51_P_3,
  1570.   VEX_LEN_0F52_P_1,
  1571.   VEX_LEN_0F53_P_1,
  1572.   VEX_LEN_0F58_P_1,
  1573.   VEX_LEN_0F58_P_3,
  1574.   VEX_LEN_0F59_P_1,
  1575.   VEX_LEN_0F59_P_3,
  1576.   VEX_LEN_0F5A_P_1,
  1577.   VEX_LEN_0F5A_P_3,
  1578.   VEX_LEN_0F5C_P_1,
  1579.   VEX_LEN_0F5C_P_3,
  1580.   VEX_LEN_0F5D_P_1,
  1581.   VEX_LEN_0F5D_P_3,
  1582.   VEX_LEN_0F5E_P_1,
  1583.   VEX_LEN_0F5E_P_3,
  1584.   VEX_LEN_0F5F_P_1,
  1585.   VEX_LEN_0F5F_P_3,
  1586.   VEX_LEN_0F6E_P_2,
  1587.   VEX_LEN_0F7E_P_1,
  1588.   VEX_LEN_0F7E_P_2,
  1589.   VEX_LEN_0F90_P_0,
  1590.   VEX_LEN_0F91_P_0,
  1591.   VEX_LEN_0F92_P_0,
  1592.   VEX_LEN_0F93_P_0,
  1593.   VEX_LEN_0F98_P_0,
  1594.   VEX_LEN_0FAE_R_2_M_0,
  1595.   VEX_LEN_0FAE_R_3_M_0,
  1596.   VEX_LEN_0FC2_P_1,
  1597.   VEX_LEN_0FC2_P_3,
  1598.   VEX_LEN_0FC4_P_2,
  1599.   VEX_LEN_0FC5_P_2,
  1600.   VEX_LEN_0FD6_P_2,
  1601.   VEX_LEN_0FF7_P_2,
  1602.   VEX_LEN_0F3816_P_2,
  1603.   VEX_LEN_0F3819_P_2,
  1604.   VEX_LEN_0F381A_P_2_M_0,
  1605.   VEX_LEN_0F3836_P_2,
  1606.   VEX_LEN_0F3841_P_2,
  1607.   VEX_LEN_0F385A_P_2_M_0,
  1608.   VEX_LEN_0F38DB_P_2,
  1609.   VEX_LEN_0F38DC_P_2,
  1610.   VEX_LEN_0F38DD_P_2,
  1611.   VEX_LEN_0F38DE_P_2,
  1612.   VEX_LEN_0F38DF_P_2,
  1613.   VEX_LEN_0F38F2_P_0,
  1614.   VEX_LEN_0F38F3_R_1_P_0,
  1615.   VEX_LEN_0F38F3_R_2_P_0,
  1616.   VEX_LEN_0F38F3_R_3_P_0,
  1617.   VEX_LEN_0F38F5_P_0,
  1618.   VEX_LEN_0F38F5_P_1,
  1619.   VEX_LEN_0F38F5_P_3,
  1620.   VEX_LEN_0F38F6_P_3,
  1621.   VEX_LEN_0F38F7_P_0,
  1622.   VEX_LEN_0F38F7_P_1,
  1623.   VEX_LEN_0F38F7_P_2,
  1624.   VEX_LEN_0F38F7_P_3,
  1625.   VEX_LEN_0F3A00_P_2,
  1626.   VEX_LEN_0F3A01_P_2,
  1627.   VEX_LEN_0F3A06_P_2,
  1628.   VEX_LEN_0F3A0A_P_2,
  1629.   VEX_LEN_0F3A0B_P_2,
  1630.   VEX_LEN_0F3A14_P_2,
  1631.   VEX_LEN_0F3A15_P_2,
  1632.   VEX_LEN_0F3A16_P_2,
  1633.   VEX_LEN_0F3A17_P_2,
  1634.   VEX_LEN_0F3A18_P_2,
  1635.   VEX_LEN_0F3A19_P_2,
  1636.   VEX_LEN_0F3A20_P_2,
  1637.   VEX_LEN_0F3A21_P_2,
  1638.   VEX_LEN_0F3A22_P_2,
  1639.   VEX_LEN_0F3A30_P_2,
  1640.   VEX_LEN_0F3A32_P_2,
  1641.   VEX_LEN_0F3A38_P_2,
  1642.   VEX_LEN_0F3A39_P_2,
  1643.   VEX_LEN_0F3A41_P_2,
  1644.   VEX_LEN_0F3A44_P_2,
  1645.   VEX_LEN_0F3A46_P_2,
  1646.   VEX_LEN_0F3A60_P_2,
  1647.   VEX_LEN_0F3A61_P_2,
  1648.   VEX_LEN_0F3A62_P_2,
  1649.   VEX_LEN_0F3A63_P_2,
  1650.   VEX_LEN_0F3A6A_P_2,
  1651.   VEX_LEN_0F3A6B_P_2,
  1652.   VEX_LEN_0F3A6E_P_2,
  1653.   VEX_LEN_0F3A6F_P_2,
  1654.   VEX_LEN_0F3A7A_P_2,
  1655.   VEX_LEN_0F3A7B_P_2,
  1656.   VEX_LEN_0F3A7E_P_2,
  1657.   VEX_LEN_0F3A7F_P_2,
  1658.   VEX_LEN_0F3ADF_P_2,
  1659.   VEX_LEN_0F3AF0_P_3,
  1660.   VEX_LEN_0FXOP_08_CC,
  1661.   VEX_LEN_0FXOP_08_CD,
  1662.   VEX_LEN_0FXOP_08_CE,
  1663.   VEX_LEN_0FXOP_08_CF,
  1664.   VEX_LEN_0FXOP_08_EC,
  1665.   VEX_LEN_0FXOP_08_ED,
  1666.   VEX_LEN_0FXOP_08_EE,
  1667.   VEX_LEN_0FXOP_08_EF,
  1668.   VEX_LEN_0FXOP_09_80,
  1669.   VEX_LEN_0FXOP_09_81
  1670. };
  1671.  
  1672. enum
  1673. {
  1674.   VEX_W_0F10_P_0 = 0,
  1675.   VEX_W_0F10_P_1,
  1676.   VEX_W_0F10_P_2,
  1677.   VEX_W_0F10_P_3,
  1678.   VEX_W_0F11_P_0,
  1679.   VEX_W_0F11_P_1,
  1680.   VEX_W_0F11_P_2,
  1681.   VEX_W_0F11_P_3,
  1682.   VEX_W_0F12_P_0_M_0,
  1683.   VEX_W_0F12_P_0_M_1,
  1684.   VEX_W_0F12_P_1,
  1685.   VEX_W_0F12_P_2,
  1686.   VEX_W_0F12_P_3,
  1687.   VEX_W_0F13_M_0,
  1688.   VEX_W_0F14,
  1689.   VEX_W_0F15,
  1690.   VEX_W_0F16_P_0_M_0,
  1691.   VEX_W_0F16_P_0_M_1,
  1692.   VEX_W_0F16_P_1,
  1693.   VEX_W_0F16_P_2,
  1694.   VEX_W_0F17_M_0,
  1695.   VEX_W_0F28,
  1696.   VEX_W_0F29,
  1697.   VEX_W_0F2B_M_0,
  1698.   VEX_W_0F2E_P_0,
  1699.   VEX_W_0F2E_P_2,
  1700.   VEX_W_0F2F_P_0,
  1701.   VEX_W_0F2F_P_2,
  1702.   VEX_W_0F41_P_0_LEN_1,
  1703.   VEX_W_0F42_P_0_LEN_1,
  1704.   VEX_W_0F44_P_0_LEN_0,
  1705.   VEX_W_0F45_P_0_LEN_1,
  1706.   VEX_W_0F46_P_0_LEN_1,
  1707.   VEX_W_0F47_P_0_LEN_1,
  1708.   VEX_W_0F4B_P_2_LEN_1,
  1709.   VEX_W_0F50_M_0,
  1710.   VEX_W_0F51_P_0,
  1711.   VEX_W_0F51_P_1,
  1712.   VEX_W_0F51_P_2,
  1713.   VEX_W_0F51_P_3,
  1714.   VEX_W_0F52_P_0,
  1715.   VEX_W_0F52_P_1,
  1716.   VEX_W_0F53_P_0,
  1717.   VEX_W_0F53_P_1,
  1718.   VEX_W_0F58_P_0,
  1719.   VEX_W_0F58_P_1,
  1720.   VEX_W_0F58_P_2,
  1721.   VEX_W_0F58_P_3,
  1722.   VEX_W_0F59_P_0,
  1723.   VEX_W_0F59_P_1,
  1724.   VEX_W_0F59_P_2,
  1725.   VEX_W_0F59_P_3,
  1726.   VEX_W_0F5A_P_0,
  1727.   VEX_W_0F5A_P_1,
  1728.   VEX_W_0F5A_P_3,
  1729.   VEX_W_0F5B_P_0,
  1730.   VEX_W_0F5B_P_1,
  1731.   VEX_W_0F5B_P_2,
  1732.   VEX_W_0F5C_P_0,
  1733.   VEX_W_0F5C_P_1,
  1734.   VEX_W_0F5C_P_2,
  1735.   VEX_W_0F5C_P_3,
  1736.   VEX_W_0F5D_P_0,
  1737.   VEX_W_0F5D_P_1,
  1738.   VEX_W_0F5D_P_2,
  1739.   VEX_W_0F5D_P_3,
  1740.   VEX_W_0F5E_P_0,
  1741.   VEX_W_0F5E_P_1,
  1742.   VEX_W_0F5E_P_2,
  1743.   VEX_W_0F5E_P_3,
  1744.   VEX_W_0F5F_P_0,
  1745.   VEX_W_0F5F_P_1,
  1746.   VEX_W_0F5F_P_2,
  1747.   VEX_W_0F5F_P_3,
  1748.   VEX_W_0F60_P_2,
  1749.   VEX_W_0F61_P_2,
  1750.   VEX_W_0F62_P_2,
  1751.   VEX_W_0F63_P_2,
  1752.   VEX_W_0F64_P_2,
  1753.   VEX_W_0F65_P_2,
  1754.   VEX_W_0F66_P_2,
  1755.   VEX_W_0F67_P_2,
  1756.   VEX_W_0F68_P_2,
  1757.   VEX_W_0F69_P_2,
  1758.   VEX_W_0F6A_P_2,
  1759.   VEX_W_0F6B_P_2,
  1760.   VEX_W_0F6C_P_2,
  1761.   VEX_W_0F6D_P_2,
  1762.   VEX_W_0F6F_P_1,
  1763.   VEX_W_0F6F_P_2,
  1764.   VEX_W_0F70_P_1,
  1765.   VEX_W_0F70_P_2,
  1766.   VEX_W_0F70_P_3,
  1767.   VEX_W_0F71_R_2_P_2,
  1768.   VEX_W_0F71_R_4_P_2,
  1769.   VEX_W_0F71_R_6_P_2,
  1770.   VEX_W_0F72_R_2_P_2,
  1771.   VEX_W_0F72_R_4_P_2,
  1772.   VEX_W_0F72_R_6_P_2,
  1773.   VEX_W_0F73_R_2_P_2,
  1774.   VEX_W_0F73_R_3_P_2,
  1775.   VEX_W_0F73_R_6_P_2,
  1776.   VEX_W_0F73_R_7_P_2,
  1777.   VEX_W_0F74_P_2,
  1778.   VEX_W_0F75_P_2,
  1779.   VEX_W_0F76_P_2,
  1780.   VEX_W_0F77_P_0,
  1781.   VEX_W_0F7C_P_2,
  1782.   VEX_W_0F7C_P_3,
  1783.   VEX_W_0F7D_P_2,
  1784.   VEX_W_0F7D_P_3,
  1785.   VEX_W_0F7E_P_1,
  1786.   VEX_W_0F7F_P_1,
  1787.   VEX_W_0F7F_P_2,
  1788.   VEX_W_0F90_P_0_LEN_0,
  1789.   VEX_W_0F91_P_0_LEN_0,
  1790.   VEX_W_0F92_P_0_LEN_0,
  1791.   VEX_W_0F93_P_0_LEN_0,
  1792.   VEX_W_0F98_P_0_LEN_0,
  1793.   VEX_W_0FAE_R_2_M_0,
  1794.   VEX_W_0FAE_R_3_M_0,
  1795.   VEX_W_0FC2_P_0,
  1796.   VEX_W_0FC2_P_1,
  1797.   VEX_W_0FC2_P_2,
  1798.   VEX_W_0FC2_P_3,
  1799.   VEX_W_0FC4_P_2,
  1800.   VEX_W_0FC5_P_2,
  1801.   VEX_W_0FD0_P_2,
  1802.   VEX_W_0FD0_P_3,
  1803.   VEX_W_0FD1_P_2,
  1804.   VEX_W_0FD2_P_2,
  1805.   VEX_W_0FD3_P_2,
  1806.   VEX_W_0FD4_P_2,
  1807.   VEX_W_0FD5_P_2,
  1808.   VEX_W_0FD6_P_2,
  1809.   VEX_W_0FD7_P_2_M_1,
  1810.   VEX_W_0FD8_P_2,
  1811.   VEX_W_0FD9_P_2,
  1812.   VEX_W_0FDA_P_2,
  1813.   VEX_W_0FDB_P_2,
  1814.   VEX_W_0FDC_P_2,
  1815.   VEX_W_0FDD_P_2,
  1816.   VEX_W_0FDE_P_2,
  1817.   VEX_W_0FDF_P_2,
  1818.   VEX_W_0FE0_P_2,
  1819.   VEX_W_0FE1_P_2,
  1820.   VEX_W_0FE2_P_2,
  1821.   VEX_W_0FE3_P_2,
  1822.   VEX_W_0FE4_P_2,
  1823.   VEX_W_0FE5_P_2,
  1824.   VEX_W_0FE6_P_1,
  1825.   VEX_W_0FE6_P_2,
  1826.   VEX_W_0FE6_P_3,
  1827.   VEX_W_0FE7_P_2_M_0,
  1828.   VEX_W_0FE8_P_2,
  1829.   VEX_W_0FE9_P_2,
  1830.   VEX_W_0FEA_P_2,
  1831.   VEX_W_0FEB_P_2,
  1832.   VEX_W_0FEC_P_2,
  1833.   VEX_W_0FED_P_2,
  1834.   VEX_W_0FEE_P_2,
  1835.   VEX_W_0FEF_P_2,
  1836.   VEX_W_0FF0_P_3_M_0,
  1837.   VEX_W_0FF1_P_2,
  1838.   VEX_W_0FF2_P_2,
  1839.   VEX_W_0FF3_P_2,
  1840.   VEX_W_0FF4_P_2,
  1841.   VEX_W_0FF5_P_2,
  1842.   VEX_W_0FF6_P_2,
  1843.   VEX_W_0FF7_P_2,
  1844.   VEX_W_0FF8_P_2,
  1845.   VEX_W_0FF9_P_2,
  1846.   VEX_W_0FFA_P_2,
  1847.   VEX_W_0FFB_P_2,
  1848.   VEX_W_0FFC_P_2,
  1849.   VEX_W_0FFD_P_2,
  1850.   VEX_W_0FFE_P_2,
  1851.   VEX_W_0F3800_P_2,
  1852.   VEX_W_0F3801_P_2,
  1853.   VEX_W_0F3802_P_2,
  1854.   VEX_W_0F3803_P_2,
  1855.   VEX_W_0F3804_P_2,
  1856.   VEX_W_0F3805_P_2,
  1857.   VEX_W_0F3806_P_2,
  1858.   VEX_W_0F3807_P_2,
  1859.   VEX_W_0F3808_P_2,
  1860.   VEX_W_0F3809_P_2,
  1861.   VEX_W_0F380A_P_2,
  1862.   VEX_W_0F380B_P_2,
  1863.   VEX_W_0F380C_P_2,
  1864.   VEX_W_0F380D_P_2,
  1865.   VEX_W_0F380E_P_2,
  1866.   VEX_W_0F380F_P_2,
  1867.   VEX_W_0F3816_P_2,
  1868.   VEX_W_0F3817_P_2,
  1869.   VEX_W_0F3818_P_2,
  1870.   VEX_W_0F3819_P_2,
  1871.   VEX_W_0F381A_P_2_M_0,
  1872.   VEX_W_0F381C_P_2,
  1873.   VEX_W_0F381D_P_2,
  1874.   VEX_W_0F381E_P_2,
  1875.   VEX_W_0F3820_P_2,
  1876.   VEX_W_0F3821_P_2,
  1877.   VEX_W_0F3822_P_2,
  1878.   VEX_W_0F3823_P_2,
  1879.   VEX_W_0F3824_P_2,
  1880.   VEX_W_0F3825_P_2,
  1881.   VEX_W_0F3828_P_2,
  1882.   VEX_W_0F3829_P_2,
  1883.   VEX_W_0F382A_P_2_M_0,
  1884.   VEX_W_0F382B_P_2,
  1885.   VEX_W_0F382C_P_2_M_0,
  1886.   VEX_W_0F382D_P_2_M_0,
  1887.   VEX_W_0F382E_P_2_M_0,
  1888.   VEX_W_0F382F_P_2_M_0,
  1889.   VEX_W_0F3830_P_2,
  1890.   VEX_W_0F3831_P_2,
  1891.   VEX_W_0F3832_P_2,
  1892.   VEX_W_0F3833_P_2,
  1893.   VEX_W_0F3834_P_2,
  1894.   VEX_W_0F3835_P_2,
  1895.   VEX_W_0F3836_P_2,
  1896.   VEX_W_0F3837_P_2,
  1897.   VEX_W_0F3838_P_2,
  1898.   VEX_W_0F3839_P_2,
  1899.   VEX_W_0F383A_P_2,
  1900.   VEX_W_0F383B_P_2,
  1901.   VEX_W_0F383C_P_2,
  1902.   VEX_W_0F383D_P_2,
  1903.   VEX_W_0F383E_P_2,
  1904.   VEX_W_0F383F_P_2,
  1905.   VEX_W_0F3840_P_2,
  1906.   VEX_W_0F3841_P_2,
  1907.   VEX_W_0F3846_P_2,
  1908.   VEX_W_0F3858_P_2,
  1909.   VEX_W_0F3859_P_2,
  1910.   VEX_W_0F385A_P_2_M_0,
  1911.   VEX_W_0F3878_P_2,
  1912.   VEX_W_0F3879_P_2,
  1913.   VEX_W_0F38DB_P_2,
  1914.   VEX_W_0F38DC_P_2,
  1915.   VEX_W_0F38DD_P_2,
  1916.   VEX_W_0F38DE_P_2,
  1917.   VEX_W_0F38DF_P_2,
  1918.   VEX_W_0F3A00_P_2,
  1919.   VEX_W_0F3A01_P_2,
  1920.   VEX_W_0F3A02_P_2,
  1921.   VEX_W_0F3A04_P_2,
  1922.   VEX_W_0F3A05_P_2,
  1923.   VEX_W_0F3A06_P_2,
  1924.   VEX_W_0F3A08_P_2,
  1925.   VEX_W_0F3A09_P_2,
  1926.   VEX_W_0F3A0A_P_2,
  1927.   VEX_W_0F3A0B_P_2,
  1928.   VEX_W_0F3A0C_P_2,
  1929.   VEX_W_0F3A0D_P_2,
  1930.   VEX_W_0F3A0E_P_2,
  1931.   VEX_W_0F3A0F_P_2,
  1932.   VEX_W_0F3A14_P_2,
  1933.   VEX_W_0F3A15_P_2,
  1934.   VEX_W_0F3A18_P_2,
  1935.   VEX_W_0F3A19_P_2,
  1936.   VEX_W_0F3A20_P_2,
  1937.   VEX_W_0F3A21_P_2,
  1938.   VEX_W_0F3A30_P_2_LEN_0,
  1939.   VEX_W_0F3A32_P_2_LEN_0,
  1940.   VEX_W_0F3A38_P_2,
  1941.   VEX_W_0F3A39_P_2,
  1942.   VEX_W_0F3A40_P_2,
  1943.   VEX_W_0F3A41_P_2,
  1944.   VEX_W_0F3A42_P_2,
  1945.   VEX_W_0F3A44_P_2,
  1946.   VEX_W_0F3A46_P_2,
  1947.   VEX_W_0F3A48_P_2,
  1948.   VEX_W_0F3A49_P_2,
  1949.   VEX_W_0F3A4A_P_2,
  1950.   VEX_W_0F3A4B_P_2,
  1951.   VEX_W_0F3A4C_P_2,
  1952.   VEX_W_0F3A60_P_2,
  1953.   VEX_W_0F3A61_P_2,
  1954.   VEX_W_0F3A62_P_2,
  1955.   VEX_W_0F3A63_P_2,
  1956.   VEX_W_0F3ADF_P_2,
  1957.  
  1958.   EVEX_W_0F10_P_0,
  1959.   EVEX_W_0F10_P_1_M_0,
  1960.   EVEX_W_0F10_P_1_M_1,
  1961.   EVEX_W_0F10_P_2,
  1962.   EVEX_W_0F10_P_3_M_0,
  1963.   EVEX_W_0F10_P_3_M_1,
  1964.   EVEX_W_0F11_P_0,
  1965.   EVEX_W_0F11_P_1_M_0,
  1966.   EVEX_W_0F11_P_1_M_1,
  1967.   EVEX_W_0F11_P_2,
  1968.   EVEX_W_0F11_P_3_M_0,
  1969.   EVEX_W_0F11_P_3_M_1,
  1970.   EVEX_W_0F12_P_0_M_0,
  1971.   EVEX_W_0F12_P_0_M_1,
  1972.   EVEX_W_0F12_P_1,
  1973.   EVEX_W_0F12_P_2,
  1974.   EVEX_W_0F12_P_3,
  1975.   EVEX_W_0F13_P_0,
  1976.   EVEX_W_0F13_P_2,
  1977.   EVEX_W_0F14_P_0,
  1978.   EVEX_W_0F14_P_2,
  1979.   EVEX_W_0F15_P_0,
  1980.   EVEX_W_0F15_P_2,
  1981.   EVEX_W_0F16_P_0_M_0,
  1982.   EVEX_W_0F16_P_0_M_1,
  1983.   EVEX_W_0F16_P_1,
  1984.   EVEX_W_0F16_P_2,
  1985.   EVEX_W_0F17_P_0,
  1986.   EVEX_W_0F17_P_2,
  1987.   EVEX_W_0F28_P_0,
  1988.   EVEX_W_0F28_P_2,
  1989.   EVEX_W_0F29_P_0,
  1990.   EVEX_W_0F29_P_2,
  1991.   EVEX_W_0F2A_P_1,
  1992.   EVEX_W_0F2A_P_3,
  1993.   EVEX_W_0F2B_P_0,
  1994.   EVEX_W_0F2B_P_2,
  1995.   EVEX_W_0F2E_P_0,
  1996.   EVEX_W_0F2E_P_2,
  1997.   EVEX_W_0F2F_P_0,
  1998.   EVEX_W_0F2F_P_2,
  1999.   EVEX_W_0F51_P_0,
  2000.   EVEX_W_0F51_P_1,
  2001.   EVEX_W_0F51_P_2,
  2002.   EVEX_W_0F51_P_3,
  2003.   EVEX_W_0F58_P_0,
  2004.   EVEX_W_0F58_P_1,
  2005.   EVEX_W_0F58_P_2,
  2006.   EVEX_W_0F58_P_3,
  2007.   EVEX_W_0F59_P_0,
  2008.   EVEX_W_0F59_P_1,
  2009.   EVEX_W_0F59_P_2,
  2010.   EVEX_W_0F59_P_3,
  2011.   EVEX_W_0F5A_P_0,
  2012.   EVEX_W_0F5A_P_1,
  2013.   EVEX_W_0F5A_P_2,
  2014.   EVEX_W_0F5A_P_3,
  2015.   EVEX_W_0F5B_P_0,
  2016.   EVEX_W_0F5B_P_1,
  2017.   EVEX_W_0F5B_P_2,
  2018.   EVEX_W_0F5C_P_0,
  2019.   EVEX_W_0F5C_P_1,
  2020.   EVEX_W_0F5C_P_2,
  2021.   EVEX_W_0F5C_P_3,
  2022.   EVEX_W_0F5D_P_0,
  2023.   EVEX_W_0F5D_P_1,
  2024.   EVEX_W_0F5D_P_2,
  2025.   EVEX_W_0F5D_P_3,
  2026.   EVEX_W_0F5E_P_0,
  2027.   EVEX_W_0F5E_P_1,
  2028.   EVEX_W_0F5E_P_2,
  2029.   EVEX_W_0F5E_P_3,
  2030.   EVEX_W_0F5F_P_0,
  2031.   EVEX_W_0F5F_P_1,
  2032.   EVEX_W_0F5F_P_2,
  2033.   EVEX_W_0F5F_P_3,
  2034.   EVEX_W_0F62_P_2,
  2035.   EVEX_W_0F66_P_2,
  2036.   EVEX_W_0F6A_P_2,
  2037.   EVEX_W_0F6C_P_2,
  2038.   EVEX_W_0F6D_P_2,
  2039.   EVEX_W_0F6E_P_2,
  2040.   EVEX_W_0F6F_P_1,
  2041.   EVEX_W_0F6F_P_2,
  2042.   EVEX_W_0F70_P_2,
  2043.   EVEX_W_0F72_R_2_P_2,
  2044.   EVEX_W_0F72_R_6_P_2,
  2045.   EVEX_W_0F73_R_2_P_2,
  2046.   EVEX_W_0F73_R_6_P_2,
  2047.   EVEX_W_0F76_P_2,
  2048.   EVEX_W_0F78_P_0,
  2049.   EVEX_W_0F79_P_0,
  2050.   EVEX_W_0F7A_P_1,
  2051.   EVEX_W_0F7A_P_3,
  2052.   EVEX_W_0F7B_P_1,
  2053.   EVEX_W_0F7B_P_3,
  2054.   EVEX_W_0F7E_P_1,
  2055.   EVEX_W_0F7E_P_2,
  2056.   EVEX_W_0F7F_P_1,
  2057.   EVEX_W_0F7F_P_2,
  2058.   EVEX_W_0FC2_P_0,
  2059.   EVEX_W_0FC2_P_1,
  2060.   EVEX_W_0FC2_P_2,
  2061.   EVEX_W_0FC2_P_3,
  2062.   EVEX_W_0FC6_P_0,
  2063.   EVEX_W_0FC6_P_2,
  2064.   EVEX_W_0FD2_P_2,
  2065.   EVEX_W_0FD3_P_2,
  2066.   EVEX_W_0FD4_P_2,
  2067.   EVEX_W_0FD6_P_2,
  2068.   EVEX_W_0FE6_P_1,
  2069.   EVEX_W_0FE6_P_2,
  2070.   EVEX_W_0FE6_P_3,
  2071.   EVEX_W_0FE7_P_2,
  2072.   EVEX_W_0FF2_P_2,
  2073.   EVEX_W_0FF3_P_2,
  2074.   EVEX_W_0FF4_P_2,
  2075.   EVEX_W_0FFA_P_2,
  2076.   EVEX_W_0FFB_P_2,
  2077.   EVEX_W_0FFE_P_2,
  2078.   EVEX_W_0F380C_P_2,
  2079.   EVEX_W_0F380D_P_2,
  2080.   EVEX_W_0F3811_P_1,
  2081.   EVEX_W_0F3812_P_1,
  2082.   EVEX_W_0F3813_P_1,
  2083.   EVEX_W_0F3813_P_2,
  2084.   EVEX_W_0F3814_P_1,
  2085.   EVEX_W_0F3815_P_1,
  2086.   EVEX_W_0F3818_P_2,
  2087.   EVEX_W_0F3819_P_2,
  2088.   EVEX_W_0F381A_P_2,
  2089.   EVEX_W_0F381B_P_2,
  2090.   EVEX_W_0F381E_P_2,
  2091.   EVEX_W_0F381F_P_2,
  2092.   EVEX_W_0F3821_P_1,
  2093.   EVEX_W_0F3822_P_1,
  2094.   EVEX_W_0F3823_P_1,
  2095.   EVEX_W_0F3824_P_1,
  2096.   EVEX_W_0F3825_P_1,
  2097.   EVEX_W_0F3825_P_2,
  2098.   EVEX_W_0F3828_P_2,
  2099.   EVEX_W_0F3829_P_2,
  2100.   EVEX_W_0F382A_P_1,
  2101.   EVEX_W_0F382A_P_2,
  2102.   EVEX_W_0F3831_P_1,
  2103.   EVEX_W_0F3832_P_1,
  2104.   EVEX_W_0F3833_P_1,
  2105.   EVEX_W_0F3834_P_1,
  2106.   EVEX_W_0F3835_P_1,
  2107.   EVEX_W_0F3835_P_2,
  2108.   EVEX_W_0F3837_P_2,
  2109.   EVEX_W_0F383A_P_1,
  2110.   EVEX_W_0F3840_P_2,
  2111.   EVEX_W_0F3858_P_2,
  2112.   EVEX_W_0F3859_P_2,
  2113.   EVEX_W_0F385A_P_2,
  2114.   EVEX_W_0F385B_P_2,
  2115.   EVEX_W_0F3891_P_2,
  2116.   EVEX_W_0F3893_P_2,
  2117.   EVEX_W_0F38A1_P_2,
  2118.   EVEX_W_0F38A3_P_2,
  2119.   EVEX_W_0F38C7_R_1_P_2,
  2120.   EVEX_W_0F38C7_R_2_P_2,
  2121.   EVEX_W_0F38C7_R_5_P_2,
  2122.   EVEX_W_0F38C7_R_6_P_2,
  2123.  
  2124.   EVEX_W_0F3A00_P_2,
  2125.   EVEX_W_0F3A01_P_2,
  2126.   EVEX_W_0F3A04_P_2,
  2127.   EVEX_W_0F3A05_P_2,
  2128.   EVEX_W_0F3A08_P_2,
  2129.   EVEX_W_0F3A09_P_2,
  2130.   EVEX_W_0F3A0A_P_2,
  2131.   EVEX_W_0F3A0B_P_2,
  2132.   EVEX_W_0F3A18_P_2,
  2133.   EVEX_W_0F3A19_P_2,
  2134.   EVEX_W_0F3A1A_P_2,
  2135.   EVEX_W_0F3A1B_P_2,
  2136.   EVEX_W_0F3A1D_P_2,
  2137.   EVEX_W_0F3A21_P_2,
  2138.   EVEX_W_0F3A23_P_2,
  2139.   EVEX_W_0F3A38_P_2,
  2140.   EVEX_W_0F3A39_P_2,
  2141.   EVEX_W_0F3A3A_P_2,
  2142.   EVEX_W_0F3A3B_P_2,
  2143.   EVEX_W_0F3A43_P_2,
  2144. };
  2145.  
  2146. typedef void (*op_rtn) (int bytemode, int sizeflag);
  2147.  
  2148. struct dis386 {
  2149.   const char *name;
  2150.   struct
  2151.     {
  2152.       op_rtn rtn;
  2153.       int bytemode;
  2154.     } op[MAX_OPERANDS];
  2155. };
  2156.  
  2157. /* Upper case letters in the instruction names here are macros.
  2158.    'A' => print 'b' if no register operands or suffix_always is true
  2159.    'B' => print 'b' if suffix_always is true
  2160.    'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
  2161.           size prefix
  2162.    'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
  2163.           suffix_always is true
  2164.    'E' => print 'e' if 32-bit form of jcxz
  2165.    'F' => print 'w' or 'l' depending on address size prefix (loop insns)
  2166.    'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
  2167.    'H' => print ",pt" or ",pn" branch hint
  2168.    'I' => honor following macro letter even in Intel mode (implemented only
  2169.           for some of the macro letters)
  2170.    'J' => print 'l'
  2171.    'K' => print 'd' or 'q' if rex prefix is present.
  2172.    'L' => print 'l' if suffix_always is true
  2173.    'M' => print 'r' if intel_mnemonic is false.
  2174.    'N' => print 'n' if instruction has no wait "prefix"
  2175.    'O' => print 'd' or 'o' (or 'q' in Intel mode)
  2176.    'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
  2177.           or suffix_always is true.  print 'q' if rex prefix is present.
  2178.    'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
  2179.           is true
  2180.    'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
  2181.    'S' => print 'w', 'l' or 'q' if suffix_always is true
  2182.    'T' => print 'q' in 64bit mode and behave as 'P' otherwise
  2183.    'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
  2184.    'V' => print 'q' in 64bit mode and behave as 'S' otherwise
  2185.    'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
  2186.    'X' => print 's', 'd' depending on data16 prefix (for XMM)
  2187.    'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
  2188.           suffix_always is true.
  2189.    'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
  2190.    '!' => change condition from true to false or from false to true.
  2191.    '%' => add 1 upper case letter to the macro.
  2192.  
  2193.    2 upper case letter macros:
  2194.    "XY" => print 'x' or 'y' if no register operands or suffix_always
  2195.            is true.
  2196.    "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
  2197.    "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
  2198.            or suffix_always is true
  2199.    "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
  2200.    "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
  2201.    "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
  2202.    "LW" => print 'd', 'q' depending on the VEX.W bit
  2203.  
  2204.    Many of the above letters print nothing in Intel mode.  See "putop"
  2205.    for the details.
  2206.  
  2207.    Braces '{' and '}', and vertical bars '|', indicate alternative
  2208.    mnemonic strings for AT&T and Intel.  */
  2209.  
  2210. static const struct dis386 dis386[] = {
  2211.   /* 00 */
  2212.   { "addB",             { Ebh1, Gb } },
  2213.   { "addS",             { Evh1, Gv } },
  2214.   { "addB",             { Gb, EbS } },
  2215.   { "addS",             { Gv, EvS } },
  2216.   { "addB",             { AL, Ib } },
  2217.   { "addS",             { eAX, Iv } },
  2218.   { X86_64_TABLE (X86_64_06) },
  2219.   { X86_64_TABLE (X86_64_07) },
  2220.   /* 08 */
  2221.   { "orB",              { Ebh1, Gb } },
  2222.   { "orS",              { Evh1, Gv } },
  2223.   { "orB",              { Gb, EbS } },
  2224.   { "orS",              { Gv, EvS } },
  2225.   { "orB",              { AL, Ib } },
  2226.   { "orS",              { eAX, Iv } },
  2227.   { X86_64_TABLE (X86_64_0D) },
  2228.   { Bad_Opcode },       /* 0x0f extended opcode escape */
  2229.   /* 10 */
  2230.   { "adcB",             { Ebh1, Gb } },
  2231.   { "adcS",             { Evh1, Gv } },
  2232.   { "adcB",             { Gb, EbS } },
  2233.   { "adcS",             { Gv, EvS } },
  2234.   { "adcB",             { AL, Ib } },
  2235.   { "adcS",             { eAX, Iv } },
  2236.   { X86_64_TABLE (X86_64_16) },
  2237.   { X86_64_TABLE (X86_64_17) },
  2238.   /* 18 */
  2239.   { "sbbB",             { Ebh1, Gb } },
  2240.   { "sbbS",             { Evh1, Gv } },
  2241.   { "sbbB",             { Gb, EbS } },
  2242.   { "sbbS",             { Gv, EvS } },
  2243.   { "sbbB",             { AL, Ib } },
  2244.   { "sbbS",             { eAX, Iv } },
  2245.   { X86_64_TABLE (X86_64_1E) },
  2246.   { X86_64_TABLE (X86_64_1F) },
  2247.   /* 20 */
  2248.   { "andB",             { Ebh1, Gb } },
  2249.   { "andS",             { Evh1, Gv } },
  2250.   { "andB",             { Gb, EbS } },
  2251.   { "andS",             { Gv, EvS } },
  2252.   { "andB",             { AL, Ib } },
  2253.   { "andS",             { eAX, Iv } },
  2254.   { Bad_Opcode },       /* SEG ES prefix */
  2255.   { X86_64_TABLE (X86_64_27) },
  2256.   /* 28 */
  2257.   { "subB",             { Ebh1, Gb } },
  2258.   { "subS",             { Evh1, Gv } },
  2259.   { "subB",             { Gb, EbS } },
  2260.   { "subS",             { Gv, EvS } },
  2261.   { "subB",             { AL, Ib } },
  2262.   { "subS",             { eAX, Iv } },
  2263.   { Bad_Opcode },       /* SEG CS prefix */
  2264.   { X86_64_TABLE (X86_64_2F) },
  2265.   /* 30 */
  2266.   { "xorB",             { Ebh1, Gb } },
  2267.   { "xorS",             { Evh1, Gv } },
  2268.   { "xorB",             { Gb, EbS } },
  2269.   { "xorS",             { Gv, EvS } },
  2270.   { "xorB",             { AL, Ib } },
  2271.   { "xorS",             { eAX, Iv } },
  2272.   { Bad_Opcode },       /* SEG SS prefix */
  2273.   { X86_64_TABLE (X86_64_37) },
  2274.   /* 38 */
  2275.   { "cmpB",             { Eb, Gb } },
  2276.   { "cmpS",             { Ev, Gv } },
  2277.   { "cmpB",             { Gb, EbS } },
  2278.   { "cmpS",             { Gv, EvS } },
  2279.   { "cmpB",             { AL, Ib } },
  2280.   { "cmpS",             { eAX, Iv } },
  2281.   { Bad_Opcode },       /* SEG DS prefix */
  2282.   { X86_64_TABLE (X86_64_3F) },
  2283.   /* 40 */
  2284.   { "inc{S|}",          { RMeAX } },
  2285.   { "inc{S|}",          { RMeCX } },
  2286.   { "inc{S|}",          { RMeDX } },
  2287.   { "inc{S|}",          { RMeBX } },
  2288.   { "inc{S|}",          { RMeSP } },
  2289.   { "inc{S|}",          { RMeBP } },
  2290.   { "inc{S|}",          { RMeSI } },
  2291.   { "inc{S|}",          { RMeDI } },
  2292.   /* 48 */
  2293.   { "dec{S|}",          { RMeAX } },
  2294.   { "dec{S|}",          { RMeCX } },
  2295.   { "dec{S|}",          { RMeDX } },
  2296.   { "dec{S|}",          { RMeBX } },
  2297.   { "dec{S|}",          { RMeSP } },
  2298.   { "dec{S|}",          { RMeBP } },
  2299.   { "dec{S|}",          { RMeSI } },
  2300.   { "dec{S|}",          { RMeDI } },
  2301.   /* 50 */
  2302.   { "pushV",            { RMrAX } },
  2303.   { "pushV",            { RMrCX } },
  2304.   { "pushV",            { RMrDX } },
  2305.   { "pushV",            { RMrBX } },
  2306.   { "pushV",            { RMrSP } },
  2307.   { "pushV",            { RMrBP } },
  2308.   { "pushV",            { RMrSI } },
  2309.   { "pushV",            { RMrDI } },
  2310.   /* 58 */
  2311.   { "popV",             { RMrAX } },
  2312.   { "popV",             { RMrCX } },
  2313.   { "popV",             { RMrDX } },
  2314.   { "popV",             { RMrBX } },
  2315.   { "popV",             { RMrSP } },
  2316.   { "popV",             { RMrBP } },
  2317.   { "popV",             { RMrSI } },
  2318.   { "popV",             { RMrDI } },
  2319.   /* 60 */
  2320.   { X86_64_TABLE (X86_64_60) },
  2321.   { X86_64_TABLE (X86_64_61) },
  2322.   { X86_64_TABLE (X86_64_62) },
  2323.   { X86_64_TABLE (X86_64_63) },
  2324.   { Bad_Opcode },       /* seg fs */
  2325.   { Bad_Opcode },       /* seg gs */
  2326.   { Bad_Opcode },       /* op size prefix */
  2327.   { Bad_Opcode },       /* adr size prefix */
  2328.   /* 68 */
  2329.   { "pushT",            { sIv } },
  2330.   { "imulS",            { Gv, Ev, Iv } },
  2331.   { "pushT",            { sIbT } },
  2332.   { "imulS",            { Gv, Ev, sIb } },
  2333.   { "ins{b|}",          { Ybr, indirDX } },
  2334.   { X86_64_TABLE (X86_64_6D) },
  2335.   { "outs{b|}",         { indirDXr, Xb } },
  2336.   { X86_64_TABLE (X86_64_6F) },
  2337.   /* 70 */
  2338.   { "joH",              { Jb, BND, cond_jump_flag } },
  2339.   { "jnoH",             { Jb, BND, cond_jump_flag } },
  2340.   { "jbH",              { Jb, BND, cond_jump_flag } },
  2341.   { "jaeH",             { Jb, BND, cond_jump_flag } },
  2342.   { "jeH",              { Jb, BND, cond_jump_flag } },
  2343.   { "jneH",             { Jb, BND, cond_jump_flag } },
  2344.   { "jbeH",             { Jb, BND, cond_jump_flag } },
  2345.   { "jaH",              { Jb, BND, cond_jump_flag } },
  2346.   /* 78 */
  2347.   { "jsH",              { Jb, BND, cond_jump_flag } },
  2348.   { "jnsH",             { Jb, BND, cond_jump_flag } },
  2349.   { "jpH",              { Jb, BND, cond_jump_flag } },
  2350.   { "jnpH",             { Jb, BND, cond_jump_flag } },
  2351.   { "jlH",              { Jb, BND, cond_jump_flag } },
  2352.   { "jgeH",             { Jb, BND, cond_jump_flag } },
  2353.   { "jleH",             { Jb, BND, cond_jump_flag } },
  2354.   { "jgH",              { Jb, BND, cond_jump_flag } },
  2355.   /* 80 */
  2356.   { REG_TABLE (REG_80) },
  2357.   { REG_TABLE (REG_81) },
  2358.   { Bad_Opcode },
  2359.   { REG_TABLE (REG_82) },
  2360.   { "testB",            { Eb, Gb } },
  2361.   { "testS",            { Ev, Gv } },
  2362.   { "xchgB",            { Ebh2, Gb } },
  2363.   { "xchgS",            { Evh2, Gv } },
  2364.   /* 88 */
  2365.   { "movB",             { Ebh3, Gb } },
  2366.   { "movS",             { Evh3, Gv } },
  2367.   { "movB",             { Gb, EbS } },
  2368.   { "movS",             { Gv, EvS } },
  2369.   { "movD",             { Sv, Sw } },
  2370.   { MOD_TABLE (MOD_8D) },
  2371.   { "movD",             { Sw, Sv } },
  2372.   { REG_TABLE (REG_8F) },
  2373.   /* 90 */
  2374.   { PREFIX_TABLE (PREFIX_90) },
  2375.   { "xchgS",            { RMeCX, eAX } },
  2376.   { "xchgS",            { RMeDX, eAX } },
  2377.   { "xchgS",            { RMeBX, eAX } },
  2378.   { "xchgS",            { RMeSP, eAX } },
  2379.   { "xchgS",            { RMeBP, eAX } },
  2380.   { "xchgS",            { RMeSI, eAX } },
  2381.   { "xchgS",            { RMeDI, eAX } },
  2382.   /* 98 */
  2383.   { "cW{t|}R",          { XX } },
  2384.   { "cR{t|}O",          { XX } },
  2385.   { X86_64_TABLE (X86_64_9A) },
  2386.   { Bad_Opcode },       /* fwait */
  2387.   { "pushfT",           { XX } },
  2388.   { "popfT",            { XX } },
  2389.   { "sahf",             { XX } },
  2390.   { "lahf",             { XX } },
  2391.   /* a0 */
  2392.   { "mov%LB",           { AL, Ob } },
  2393.   { "mov%LS",           { eAX, Ov } },
  2394.   { "mov%LB",           { Ob, AL } },
  2395.   { "mov%LS",           { Ov, eAX } },
  2396.   { "movs{b|}",         { Ybr, Xb } },
  2397.   { "movs{R|}",         { Yvr, Xv } },
  2398.   { "cmps{b|}",         { Xb, Yb } },
  2399.   { "cmps{R|}",         { Xv, Yv } },
  2400.   /* a8 */
  2401.   { "testB",            { AL, Ib } },
  2402.   { "testS",            { eAX, Iv } },
  2403.   { "stosB",            { Ybr, AL } },
  2404.   { "stosS",            { Yvr, eAX } },
  2405.   { "lodsB",            { ALr, Xb } },
  2406.   { "lodsS",            { eAXr, Xv } },
  2407.   { "scasB",            { AL, Yb } },
  2408.   { "scasS",            { eAX, Yv } },
  2409.   /* b0 */
  2410.   { "movB",             { RMAL, Ib } },
  2411.   { "movB",             { RMCL, Ib } },
  2412.   { "movB",             { RMDL, Ib } },
  2413.   { "movB",             { RMBL, Ib } },
  2414.   { "movB",             { RMAH, Ib } },
  2415.   { "movB",             { RMCH, Ib } },
  2416.   { "movB",             { RMDH, Ib } },
  2417.   { "movB",             { RMBH, Ib } },
  2418.   /* b8 */
  2419.   { "mov%LV",           { RMeAX, Iv64 } },
  2420.   { "mov%LV",           { RMeCX, Iv64 } },
  2421.   { "mov%LV",           { RMeDX, Iv64 } },
  2422.   { "mov%LV",           { RMeBX, Iv64 } },
  2423.   { "mov%LV",           { RMeSP, Iv64 } },
  2424.   { "mov%LV",           { RMeBP, Iv64 } },
  2425.   { "mov%LV",           { RMeSI, Iv64 } },
  2426.   { "mov%LV",           { RMeDI, Iv64 } },
  2427.   /* c0 */
  2428.   { REG_TABLE (REG_C0) },
  2429.   { REG_TABLE (REG_C1) },
  2430.   { "retT",             { Iw, BND } },
  2431.   { "retT",             { BND } },
  2432.   { X86_64_TABLE (X86_64_C4) },
  2433.   { X86_64_TABLE (X86_64_C5) },
  2434.   { REG_TABLE (REG_C6) },
  2435.   { REG_TABLE (REG_C7) },
  2436.   /* c8 */
  2437.   { "enterT",           { Iw, Ib } },
  2438.   { "leaveT",           { XX } },
  2439.   { "Jret{|f}P",        { Iw } },
  2440.   { "Jret{|f}P",        { XX } },
  2441.   { "int3",             { XX } },
  2442.   { "int",              { Ib } },
  2443.   { X86_64_TABLE (X86_64_CE) },
  2444.   { "iretP",            { XX } },
  2445.   /* d0 */
  2446.   { REG_TABLE (REG_D0) },
  2447.   { REG_TABLE (REG_D1) },
  2448.   { REG_TABLE (REG_D2) },
  2449.   { REG_TABLE (REG_D3) },
  2450.   { X86_64_TABLE (X86_64_D4) },
  2451.   { X86_64_TABLE (X86_64_D5) },
  2452.   { Bad_Opcode },
  2453.   { "xlat",             { DSBX } },
  2454.   /* d8 */
  2455.   { FLOAT },
  2456.   { FLOAT },
  2457.   { FLOAT },
  2458.   { FLOAT },
  2459.   { FLOAT },
  2460.   { FLOAT },
  2461.   { FLOAT },
  2462.   { FLOAT },
  2463.   /* e0 */
  2464.   { "loopneFH",         { Jb, XX, loop_jcxz_flag } },
  2465.   { "loopeFH",          { Jb, XX, loop_jcxz_flag } },
  2466.   { "loopFH",           { Jb, XX, loop_jcxz_flag } },
  2467.   { "jEcxzH",           { Jb, XX, loop_jcxz_flag } },
  2468.   { "inB",              { AL, Ib } },
  2469.   { "inG",              { zAX, Ib } },
  2470.   { "outB",             { Ib, AL } },
  2471.   { "outG",             { Ib, zAX } },
  2472.   /* e8 */
  2473.   { "callT",            { Jv, BND } },
  2474.   { "jmpT",             { Jv, BND } },
  2475.   { X86_64_TABLE (X86_64_EA) },
  2476.   { "jmp",              { Jb, BND } },
  2477.   { "inB",              { AL, indirDX } },
  2478.   { "inG",              { zAX, indirDX } },
  2479.   { "outB",             { indirDX, AL } },
  2480.   { "outG",             { indirDX, zAX } },
  2481.   /* f0 */
  2482.   { Bad_Opcode },       /* lock prefix */
  2483.   { "icebp",            { XX } },
  2484.   { Bad_Opcode },       /* repne */
  2485.   { Bad_Opcode },       /* repz */
  2486.   { "hlt",              { XX } },
  2487.   { "cmc",              { XX } },
  2488.   { REG_TABLE (REG_F6) },
  2489.   { REG_TABLE (REG_F7) },
  2490.   /* f8 */
  2491.   { "clc",              { XX } },
  2492.   { "stc",              { XX } },
  2493.   { "cli",              { XX } },
  2494.   { "sti",              { XX } },
  2495.   { "cld",              { XX } },
  2496.   { "std",              { XX } },
  2497.   { REG_TABLE (REG_FE) },
  2498.   { REG_TABLE (REG_FF) },
  2499. };
  2500.  
  2501. static const struct dis386 dis386_twobyte[] = {
  2502.   /* 00 */
  2503.   { REG_TABLE (REG_0F00 ) },
  2504.   { REG_TABLE (REG_0F01 ) },
  2505.   { "larS",             { Gv, Ew } },
  2506.   { "lslS",             { Gv, Ew } },
  2507.   { Bad_Opcode },
  2508.   { "syscall",          { XX } },
  2509.   { "clts",             { XX } },
  2510.   { "sysretP",          { XX } },
  2511.   /* 08 */
  2512.   { "invd",             { XX } },
  2513.   { "wbinvd",           { XX } },
  2514.   { Bad_Opcode },
  2515.   { "ud2",              { XX } },
  2516.   { Bad_Opcode },
  2517.   { REG_TABLE (REG_0F0D) },
  2518.   { "femms",            { XX } },
  2519.   { "",                 { MX, EM, OPSUF } }, /* See OP_3DNowSuffix.  */
  2520.   /* 10 */
  2521.   { PREFIX_TABLE (PREFIX_0F10) },
  2522.   { PREFIX_TABLE (PREFIX_0F11) },
  2523.   { PREFIX_TABLE (PREFIX_0F12) },
  2524.   { MOD_TABLE (MOD_0F13) },
  2525.   { "unpcklpX",         { XM, EXx } },
  2526.   { "unpckhpX",         { XM, EXx } },
  2527.   { PREFIX_TABLE (PREFIX_0F16) },
  2528.   { MOD_TABLE (MOD_0F17) },
  2529.   /* 18 */
  2530.   { REG_TABLE (REG_0F18) },
  2531.   { "nopQ",             { Ev } },
  2532.   { PREFIX_TABLE (PREFIX_0F1A) },
  2533.   { PREFIX_TABLE (PREFIX_0F1B) },
  2534.   { "nopQ",             { Ev } },
  2535.   { "nopQ",             { Ev } },
  2536.   { "nopQ",             { Ev } },
  2537.   { "nopQ",             { Ev } },
  2538.   /* 20 */
  2539.   { MOD_TABLE (MOD_0F20) },
  2540.   { MOD_TABLE (MOD_0F21) },
  2541.   { MOD_TABLE (MOD_0F22) },
  2542.   { MOD_TABLE (MOD_0F23) },
  2543.   { MOD_TABLE (MOD_0F24) },
  2544.   { Bad_Opcode },
  2545.   { MOD_TABLE (MOD_0F26) },
  2546.   { Bad_Opcode },
  2547.   /* 28 */
  2548.   { "movapX",           { XM, EXx } },
  2549.   { "movapX",           { EXxS, XM } },
  2550.   { PREFIX_TABLE (PREFIX_0F2A) },
  2551.   { PREFIX_TABLE (PREFIX_0F2B) },
  2552.   { PREFIX_TABLE (PREFIX_0F2C) },
  2553.   { PREFIX_TABLE (PREFIX_0F2D) },
  2554.   { PREFIX_TABLE (PREFIX_0F2E) },
  2555.   { PREFIX_TABLE (PREFIX_0F2F) },
  2556.   /* 30 */
  2557.   { "wrmsr",            { XX } },
  2558.   { "rdtsc",            { XX } },
  2559.   { "rdmsr",            { XX } },
  2560.   { "rdpmc",            { XX } },
  2561.   { "sysenter",         { XX } },
  2562.   { "sysexit",          { XX } },
  2563.   { Bad_Opcode },
  2564.   { "getsec",           { XX } },
  2565.   /* 38 */
  2566.   { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
  2567.   { Bad_Opcode },
  2568.   { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
  2569.   { Bad_Opcode },
  2570.   { Bad_Opcode },
  2571.   { Bad_Opcode },
  2572.   { Bad_Opcode },
  2573.   { Bad_Opcode },
  2574.   /* 40 */
  2575.   { "cmovoS",           { Gv, Ev } },
  2576.   { "cmovnoS",          { Gv, Ev } },
  2577.   { "cmovbS",           { Gv, Ev } },
  2578.   { "cmovaeS",          { Gv, Ev } },
  2579.   { "cmoveS",           { Gv, Ev } },
  2580.   { "cmovneS",          { Gv, Ev } },
  2581.   { "cmovbeS",          { Gv, Ev } },
  2582.   { "cmovaS",           { Gv, Ev } },
  2583.   /* 48 */
  2584.   { "cmovsS",           { Gv, Ev } },
  2585.   { "cmovnsS",          { Gv, Ev } },
  2586.   { "cmovpS",           { Gv, Ev } },
  2587.   { "cmovnpS",          { Gv, Ev } },
  2588.   { "cmovlS",           { Gv, Ev } },
  2589.   { "cmovgeS",          { Gv, Ev } },
  2590.   { "cmovleS",          { Gv, Ev } },
  2591.   { "cmovgS",           { Gv, Ev } },
  2592.   /* 50 */
  2593.   { MOD_TABLE (MOD_0F51) },
  2594.   { PREFIX_TABLE (PREFIX_0F51) },
  2595.   { PREFIX_TABLE (PREFIX_0F52) },
  2596.   { PREFIX_TABLE (PREFIX_0F53) },
  2597.   { "andpX",            { XM, EXx } },
  2598.   { "andnpX",           { XM, EXx } },
  2599.   { "orpX",             { XM, EXx } },
  2600.   { "xorpX",            { XM, EXx } },
  2601.   /* 58 */
  2602.   { PREFIX_TABLE (PREFIX_0F58) },
  2603.   { PREFIX_TABLE (PREFIX_0F59) },
  2604.   { PREFIX_TABLE (PREFIX_0F5A) },
  2605.   { PREFIX_TABLE (PREFIX_0F5B) },
  2606.   { PREFIX_TABLE (PREFIX_0F5C) },
  2607.   { PREFIX_TABLE (PREFIX_0F5D) },
  2608.   { PREFIX_TABLE (PREFIX_0F5E) },
  2609.   { PREFIX_TABLE (PREFIX_0F5F) },
  2610.   /* 60 */
  2611.   { PREFIX_TABLE (PREFIX_0F60) },
  2612.   { PREFIX_TABLE (PREFIX_0F61) },
  2613.   { PREFIX_TABLE (PREFIX_0F62) },
  2614.   { "packsswb",         { MX, EM } },
  2615.   { "pcmpgtb",          { MX, EM } },
  2616.   { "pcmpgtw",          { MX, EM } },
  2617.   { "pcmpgtd",          { MX, EM } },
  2618.   { "packuswb",         { MX, EM } },
  2619.   /* 68 */
  2620.   { "punpckhbw",        { MX, EM } },
  2621.   { "punpckhwd",        { MX, EM } },
  2622.   { "punpckhdq",        { MX, EM } },
  2623.   { "packssdw",         { MX, EM } },
  2624.   { PREFIX_TABLE (PREFIX_0F6C) },
  2625.   { PREFIX_TABLE (PREFIX_0F6D) },
  2626.   { "movK",             { MX, Edq } },
  2627.   { PREFIX_TABLE (PREFIX_0F6F) },
  2628.   /* 70 */
  2629.   { PREFIX_TABLE (PREFIX_0F70) },
  2630.   { REG_TABLE (REG_0F71) },
  2631.   { REG_TABLE (REG_0F72) },
  2632.   { REG_TABLE (REG_0F73) },
  2633.   { "pcmpeqb",          { MX, EM } },
  2634.   { "pcmpeqw",          { MX, EM } },
  2635.   { "pcmpeqd",          { MX, EM } },
  2636.   { "emms",             { XX } },
  2637.   /* 78 */
  2638.   { PREFIX_TABLE (PREFIX_0F78) },
  2639.   { PREFIX_TABLE (PREFIX_0F79) },
  2640.   { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
  2641.   { Bad_Opcode },
  2642.   { PREFIX_TABLE (PREFIX_0F7C) },
  2643.   { PREFIX_TABLE (PREFIX_0F7D) },
  2644.   { PREFIX_TABLE (PREFIX_0F7E) },
  2645.   { PREFIX_TABLE (PREFIX_0F7F) },
  2646.   /* 80 */
  2647.   { "joH",              { Jv, BND, cond_jump_flag } },
  2648.   { "jnoH",             { Jv, BND, cond_jump_flag } },
  2649.   { "jbH",              { Jv, BND, cond_jump_flag } },
  2650.   { "jaeH",             { Jv, BND, cond_jump_flag } },
  2651.   { "jeH",              { Jv, BND, cond_jump_flag } },
  2652.   { "jneH",             { Jv, BND, cond_jump_flag } },
  2653.   { "jbeH",             { Jv, BND, cond_jump_flag } },
  2654.   { "jaH",              { Jv, BND, cond_jump_flag } },
  2655.   /* 88 */
  2656.   { "jsH",              { Jv, BND, cond_jump_flag } },
  2657.   { "jnsH",             { Jv, BND, cond_jump_flag } },
  2658.   { "jpH",              { Jv, BND, cond_jump_flag } },
  2659.   { "jnpH",             { Jv, BND, cond_jump_flag } },
  2660.   { "jlH",              { Jv, BND, cond_jump_flag } },
  2661.   { "jgeH",             { Jv, BND, cond_jump_flag } },
  2662.   { "jleH",             { Jv, BND, cond_jump_flag } },
  2663.   { "jgH",              { Jv, BND, cond_jump_flag } },
  2664.   /* 90 */
  2665.   { "seto",             { Eb } },
  2666.   { "setno",            { Eb } },
  2667.   { "setb",             { Eb } },
  2668.   { "setae",            { Eb } },
  2669.   { "sete",             { Eb } },
  2670.   { "setne",            { Eb } },
  2671.   { "setbe",            { Eb } },
  2672.   { "seta",             { Eb } },
  2673.   /* 98 */
  2674.   { "sets",             { Eb } },
  2675.   { "setns",            { Eb } },
  2676.   { "setp",             { Eb } },
  2677.   { "setnp",            { Eb } },
  2678.   { "setl",             { Eb } },
  2679.   { "setge",            { Eb } },
  2680.   { "setle",            { Eb } },
  2681.   { "setg",             { Eb } },
  2682.   /* a0 */
  2683.   { "pushT",            { fs } },
  2684.   { "popT",             { fs } },
  2685.   { "cpuid",            { XX } },
  2686.   { "btS",              { Ev, Gv } },
  2687.   { "shldS",            { Ev, Gv, Ib } },
  2688.   { "shldS",            { Ev, Gv, CL } },
  2689.   { REG_TABLE (REG_0FA6) },
  2690.   { REG_TABLE (REG_0FA7) },
  2691.   /* a8 */
  2692.   { "pushT",            { gs } },
  2693.   { "popT",             { gs } },
  2694.   { "rsm",              { XX } },
  2695.   { "btsS",             { Evh1, Gv } },
  2696.   { "shrdS",            { Ev, Gv, Ib } },
  2697.   { "shrdS",            { Ev, Gv, CL } },
  2698.   { REG_TABLE (REG_0FAE) },
  2699.   { "imulS",            { Gv, Ev } },
  2700.   /* b0 */
  2701.   { "cmpxchgB",         { Ebh1, Gb } },
  2702.   { "cmpxchgS",         { Evh1, Gv } },
  2703.   { MOD_TABLE (MOD_0FB2) },
  2704.   { "btrS",             { Evh1, Gv } },
  2705.   { MOD_TABLE (MOD_0FB4) },
  2706.   { MOD_TABLE (MOD_0FB5) },
  2707.   { "movz{bR|x}",       { Gv, Eb } },
  2708.   { "movz{wR|x}",       { Gv, Ew } }, /* yes, there really is movzww ! */
  2709.   /* b8 */
  2710.   { PREFIX_TABLE (PREFIX_0FB8) },
  2711.   { "ud1",              { XX } },
  2712.   { REG_TABLE (REG_0FBA) },
  2713.   { "btcS",             { Evh1, Gv } },
  2714.   { PREFIX_TABLE (PREFIX_0FBC) },
  2715.   { PREFIX_TABLE (PREFIX_0FBD) },
  2716.   { "movs{bR|x}",       { Gv, Eb } },
  2717.   { "movs{wR|x}",       { Gv, Ew } }, /* yes, there really is movsww ! */
  2718.   /* c0 */
  2719.   { "xaddB",            { Ebh1, Gb } },
  2720.   { "xaddS",            { Evh1, Gv } },
  2721.   { PREFIX_TABLE (PREFIX_0FC2) },
  2722.   { PREFIX_TABLE (PREFIX_0FC3) },
  2723.   { "pinsrw",           { MX, Edqw, Ib } },
  2724.   { "pextrw",           { Gdq, MS, Ib } },
  2725.   { "shufpX",           { XM, EXx, Ib } },
  2726.   { REG_TABLE (REG_0FC7) },
  2727.   /* c8 */
  2728.   { "bswap",            { RMeAX } },
  2729.   { "bswap",            { RMeCX } },
  2730.   { "bswap",            { RMeDX } },
  2731.   { "bswap",            { RMeBX } },
  2732.   { "bswap",            { RMeSP } },
  2733.   { "bswap",            { RMeBP } },
  2734.   { "bswap",            { RMeSI } },
  2735.   { "bswap",            { RMeDI } },
  2736.   /* d0 */
  2737.   { PREFIX_TABLE (PREFIX_0FD0) },
  2738.   { "psrlw",            { MX, EM } },
  2739.   { "psrld",            { MX, EM } },
  2740.   { "psrlq",            { MX, EM } },
  2741.   { "paddq",            { MX, EM } },
  2742.   { "pmullw",           { MX, EM } },
  2743.   { PREFIX_TABLE (PREFIX_0FD6) },
  2744.   { MOD_TABLE (MOD_0FD7) },
  2745.   /* d8 */
  2746.   { "psubusb",          { MX, EM } },
  2747.   { "psubusw",          { MX, EM } },
  2748.   { "pminub",           { MX, EM } },
  2749.   { "pand",             { MX, EM } },
  2750.   { "paddusb",          { MX, EM } },
  2751.   { "paddusw",          { MX, EM } },
  2752.   { "pmaxub",           { MX, EM } },
  2753.   { "pandn",            { MX, EM } },
  2754.   /* e0 */
  2755.   { "pavgb",            { MX, EM } },
  2756.   { "psraw",            { MX, EM } },
  2757.   { "psrad",            { MX, EM } },
  2758.   { "pavgw",            { MX, EM } },
  2759.   { "pmulhuw",          { MX, EM } },
  2760.   { "pmulhw",           { MX, EM } },
  2761.   { PREFIX_TABLE (PREFIX_0FE6) },
  2762.   { PREFIX_TABLE (PREFIX_0FE7) },
  2763.   /* e8 */
  2764.   { "psubsb",           { MX, EM } },
  2765.   { "psubsw",           { MX, EM } },
  2766.   { "pminsw",           { MX, EM } },
  2767.   { "por",              { MX, EM } },
  2768.   { "paddsb",           { MX, EM } },
  2769.   { "paddsw",           { MX, EM } },
  2770.   { "pmaxsw",           { MX, EM } },
  2771.   { "pxor",             { MX, EM } },
  2772.   /* f0 */
  2773.   { PREFIX_TABLE (PREFIX_0FF0) },
  2774.   { "psllw",            { MX, EM } },
  2775.   { "pslld",            { MX, EM } },
  2776.   { "psllq",            { MX, EM } },
  2777.   { "pmuludq",          { MX, EM } },
  2778.   { "pmaddwd",          { MX, EM } },
  2779.   { "psadbw",           { MX, EM } },
  2780.   { PREFIX_TABLE (PREFIX_0FF7) },
  2781.   /* f8 */
  2782.   { "psubb",            { MX, EM } },
  2783.   { "psubw",            { MX, EM } },
  2784.   { "psubd",            { MX, EM } },
  2785.   { "psubq",            { MX, EM } },
  2786.   { "paddb",            { MX, EM } },
  2787.   { "paddw",            { MX, EM } },
  2788.   { "paddd",            { MX, EM } },
  2789.   { Bad_Opcode },
  2790. };
  2791.  
  2792. static const unsigned char onebyte_has_modrm[256] = {
  2793.   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
  2794.   /*       -------------------------------        */
  2795.   /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
  2796.   /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
  2797.   /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
  2798.   /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
  2799.   /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
  2800.   /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
  2801.   /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
  2802.   /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
  2803.   /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
  2804.   /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
  2805.   /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
  2806.   /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
  2807.   /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
  2808.   /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
  2809.   /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
  2810.   /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1  /* f0 */
  2811.   /*       -------------------------------        */
  2812.   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
  2813. };
  2814.  
  2815. static const unsigned char twobyte_has_modrm[256] = {
  2816.   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
  2817.   /*       -------------------------------        */
  2818.   /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
  2819.   /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
  2820.   /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
  2821.   /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
  2822.   /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
  2823.   /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
  2824.   /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
  2825.   /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
  2826.   /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
  2827.   /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
  2828.   /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
  2829.   /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
  2830.   /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
  2831.   /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
  2832.   /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
  2833.   /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0  /* ff */
  2834.   /*       -------------------------------        */
  2835.   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
  2836. };
  2837.  
  2838. static char obuf[100];
  2839. static char *obufp;
  2840. static char *mnemonicendp;
  2841. static char scratchbuf[100];
  2842. static unsigned char *start_codep;
  2843. static unsigned char *insn_codep;
  2844. static unsigned char *codep;
  2845. static int last_lock_prefix;
  2846. static int last_repz_prefix;
  2847. static int last_repnz_prefix;
  2848. static int last_data_prefix;
  2849. static int last_addr_prefix;
  2850. static int last_rex_prefix;
  2851. static int last_seg_prefix;
  2852. #define MAX_CODE_LENGTH 15
  2853. /* We can up to 14 prefixes since the maximum instruction length is
  2854.    15bytes.  */
  2855. static int all_prefixes[MAX_CODE_LENGTH - 1];
  2856. static disassemble_info *the_info;
  2857. static struct
  2858.   {
  2859.     int mod;
  2860.     int reg;
  2861.     int rm;
  2862.   }
  2863. modrm;
  2864. static unsigned char need_modrm;
  2865. static struct
  2866.   {
  2867.     int scale;
  2868.     int index;
  2869.     int base;
  2870.   }
  2871. sib;
  2872. static struct
  2873.   {
  2874.     int register_specifier;
  2875.     int length;
  2876.     int prefix;
  2877.     int w;
  2878.     int evex;
  2879.     int r;
  2880.     int v;
  2881.     int mask_register_specifier;
  2882.     int zeroing;
  2883.     int ll;
  2884.     int b;
  2885.   }
  2886. vex;
  2887. static unsigned char need_vex;
  2888. static unsigned char need_vex_reg;
  2889. static unsigned char vex_w_done;
  2890.  
  2891. struct op
  2892.   {
  2893.     const char *name;
  2894.     unsigned int len;
  2895.   };
  2896.  
  2897. /* If we are accessing mod/rm/reg without need_modrm set, then the
  2898.    values are stale.  Hitting this abort likely indicates that you
  2899.    need to update onebyte_has_modrm or twobyte_has_modrm.  */
  2900. #define MODRM_CHECK  if (!need_modrm) abort ()
  2901.  
  2902. static const char **names64;
  2903. static const char **names32;
  2904. static const char **names16;
  2905. static const char **names8;
  2906. static const char **names8rex;
  2907. static const char **names_seg;
  2908. static const char *index64;
  2909. static const char *index32;
  2910. static const char **index16;
  2911. static const char **names_bnd;
  2912.  
  2913. static const char *intel_names64[] = {
  2914.   "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
  2915.   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
  2916. };
  2917. static const char *intel_names32[] = {
  2918.   "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
  2919.   "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
  2920. };
  2921. static const char *intel_names16[] = {
  2922.   "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
  2923.   "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
  2924. };
  2925. static const char *intel_names8[] = {
  2926.   "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
  2927. };
  2928. static const char *intel_names8rex[] = {
  2929.   "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
  2930.   "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
  2931. };
  2932. static const char *intel_names_seg[] = {
  2933.   "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
  2934. };
  2935. static const char *intel_index64 = "riz";
  2936. static const char *intel_index32 = "eiz";
  2937. static const char *intel_index16[] = {
  2938.   "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
  2939. };
  2940.  
  2941. static const char *att_names64[] = {
  2942.   "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
  2943.   "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
  2944. };
  2945. static const char *att_names32[] = {
  2946.   "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
  2947.   "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
  2948. };
  2949. static const char *att_names16[] = {
  2950.   "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
  2951.   "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
  2952. };
  2953. static const char *att_names8[] = {
  2954.   "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
  2955. };
  2956. static const char *att_names8rex[] = {
  2957.   "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
  2958.   "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
  2959. };
  2960. static const char *att_names_seg[] = {
  2961.   "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
  2962. };
  2963. static const char *att_index64 = "%riz";
  2964. static const char *att_index32 = "%eiz";
  2965. static const char *att_index16[] = {
  2966.   "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
  2967. };
  2968.  
  2969. static const char **names_mm;
  2970. static const char *intel_names_mm[] = {
  2971.   "mm0", "mm1", "mm2", "mm3",
  2972.   "mm4", "mm5", "mm6", "mm7"
  2973. };
  2974. static const char *att_names_mm[] = {
  2975.   "%mm0", "%mm1", "%mm2", "%mm3",
  2976.   "%mm4", "%mm5", "%mm6", "%mm7"
  2977. };
  2978.  
  2979. static const char *intel_names_bnd[] = {
  2980.   "bnd0", "bnd1", "bnd2", "bnd3"
  2981. };
  2982.  
  2983. static const char *att_names_bnd[] = {
  2984.   "%bnd0", "%bnd1", "%bnd2", "%bnd3"
  2985. };
  2986.  
  2987. static const char **names_xmm;
  2988. static const char *intel_names_xmm[] = {
  2989.   "xmm0", "xmm1", "xmm2", "xmm3",
  2990.   "xmm4", "xmm5", "xmm6", "xmm7",
  2991.   "xmm8", "xmm9", "xmm10", "xmm11",
  2992.   "xmm12", "xmm13", "xmm14", "xmm15",
  2993.   "xmm16", "xmm17", "xmm18", "xmm19",
  2994.   "xmm20", "xmm21", "xmm22", "xmm23",
  2995.   "xmm24", "xmm25", "xmm26", "xmm27",
  2996.   "xmm28", "xmm29", "xmm30", "xmm31"
  2997. };
  2998. static const char *att_names_xmm[] = {
  2999.   "%xmm0", "%xmm1", "%xmm2", "%xmm3",
  3000.   "%xmm4", "%xmm5", "%xmm6", "%xmm7",
  3001.   "%xmm8", "%xmm9", "%xmm10", "%xmm11",
  3002.   "%xmm12", "%xmm13", "%xmm14", "%xmm15",
  3003.   "%xmm16", "%xmm17", "%xmm18", "%xmm19",
  3004.   "%xmm20", "%xmm21", "%xmm22", "%xmm23",
  3005.   "%xmm24", "%xmm25", "%xmm26", "%xmm27",
  3006.   "%xmm28", "%xmm29", "%xmm30", "%xmm31"
  3007. };
  3008.  
  3009. static const char **names_ymm;
  3010. static const char *intel_names_ymm[] = {
  3011.   "ymm0", "ymm1", "ymm2", "ymm3",
  3012.   "ymm4", "ymm5", "ymm6", "ymm7",
  3013.   "ymm8", "ymm9", "ymm10", "ymm11",
  3014.   "ymm12", "ymm13", "ymm14", "ymm15",
  3015.   "ymm16", "ymm17", "ymm18", "ymm19",
  3016.   "ymm20", "ymm21", "ymm22", "ymm23",
  3017.   "ymm24", "ymm25", "ymm26", "ymm27",
  3018.   "ymm28", "ymm29", "ymm30", "ymm31"
  3019. };
  3020. static const char *att_names_ymm[] = {
  3021.   "%ymm0", "%ymm1", "%ymm2", "%ymm3",
  3022.   "%ymm4", "%ymm5", "%ymm6", "%ymm7",
  3023.   "%ymm8", "%ymm9", "%ymm10", "%ymm11",
  3024.   "%ymm12", "%ymm13", "%ymm14", "%ymm15",
  3025.   "%ymm16", "%ymm17", "%ymm18", "%ymm19",
  3026.   "%ymm20", "%ymm21", "%ymm22", "%ymm23",
  3027.   "%ymm24", "%ymm25", "%ymm26", "%ymm27",
  3028.   "%ymm28", "%ymm29", "%ymm30", "%ymm31"
  3029. };
  3030.  
  3031. static const char **names_zmm;
  3032. static const char *intel_names_zmm[] = {
  3033.   "zmm0", "zmm1", "zmm2", "zmm3",
  3034.   "zmm4", "zmm5", "zmm6", "zmm7",
  3035.   "zmm8", "zmm9", "zmm10", "zmm11",
  3036.   "zmm12", "zmm13", "zmm14", "zmm15",
  3037.   "zmm16", "zmm17", "zmm18", "zmm19",
  3038.   "zmm20", "zmm21", "zmm22", "zmm23",
  3039.   "zmm24", "zmm25", "zmm26", "zmm27",
  3040.   "zmm28", "zmm29", "zmm30", "zmm31"
  3041. };
  3042. static const char *att_names_zmm[] = {
  3043.   "%zmm0", "%zmm1", "%zmm2", "%zmm3",
  3044.   "%zmm4", "%zmm5", "%zmm6", "%zmm7",
  3045.   "%zmm8", "%zmm9", "%zmm10", "%zmm11",
  3046.   "%zmm12", "%zmm13", "%zmm14", "%zmm15",
  3047.   "%zmm16", "%zmm17", "%zmm18", "%zmm19",
  3048.   "%zmm20", "%zmm21", "%zmm22", "%zmm23",
  3049.   "%zmm24", "%zmm25", "%zmm26", "%zmm27",
  3050.   "%zmm28", "%zmm29", "%zmm30", "%zmm31"
  3051. };
  3052.  
  3053. static const char **names_mask;
  3054. static const char *intel_names_mask[] = {
  3055.   "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
  3056. };
  3057. static const char *att_names_mask[] = {
  3058.   "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
  3059. };
  3060.  
  3061. static const char *names_rounding[] =
  3062. {
  3063.   "{rn-sae}",
  3064.   "{rd-sae}",
  3065.   "{ru-sae}",
  3066.   "{rz-sae}"
  3067. };
  3068.  
  3069. static const struct dis386 reg_table[][8] = {
  3070.   /* REG_80 */
  3071.   {
  3072.     { "addA",   { Ebh1, Ib } },
  3073.     { "orA",    { Ebh1, Ib } },
  3074.     { "adcA",   { Ebh1, Ib } },
  3075.     { "sbbA",   { Ebh1, Ib } },
  3076.     { "andA",   { Ebh1, Ib } },
  3077.     { "subA",   { Ebh1, Ib } },
  3078.     { "xorA",   { Ebh1, Ib } },
  3079.     { "cmpA",   { Eb, Ib } },
  3080.   },
  3081.   /* REG_81 */
  3082.   {
  3083.     { "addQ",   { Evh1, Iv } },
  3084.     { "orQ",    { Evh1, Iv } },
  3085.     { "adcQ",   { Evh1, Iv } },
  3086.     { "sbbQ",   { Evh1, Iv } },
  3087.     { "andQ",   { Evh1, Iv } },
  3088.     { "subQ",   { Evh1, Iv } },
  3089.     { "xorQ",   { Evh1, Iv } },
  3090.     { "cmpQ",   { Ev, Iv } },
  3091.   },
  3092.   /* REG_82 */
  3093.   {
  3094.     { "addQ",   { Evh1, sIb } },
  3095.     { "orQ",    { Evh1, sIb } },
  3096.     { "adcQ",   { Evh1, sIb } },
  3097.     { "sbbQ",   { Evh1, sIb } },
  3098.     { "andQ",   { Evh1, sIb } },
  3099.     { "subQ",   { Evh1, sIb } },
  3100.     { "xorQ",   { Evh1, sIb } },
  3101.     { "cmpQ",   { Ev, sIb } },
  3102.   },
  3103.   /* REG_8F */
  3104.   {
  3105.     { "popU",   { stackEv } },
  3106.     { XOP_8F_TABLE (XOP_09) },
  3107.     { Bad_Opcode },
  3108.     { Bad_Opcode },
  3109.     { Bad_Opcode },
  3110.     { XOP_8F_TABLE (XOP_09) },
  3111.   },
  3112.   /* REG_C0 */
  3113.   {
  3114.     { "rolA",   { Eb, Ib } },
  3115.     { "rorA",   { Eb, Ib } },
  3116.     { "rclA",   { Eb, Ib } },
  3117.     { "rcrA",   { Eb, Ib } },
  3118.     { "shlA",   { Eb, Ib } },
  3119.     { "shrA",   { Eb, Ib } },
  3120.     { Bad_Opcode },
  3121.     { "sarA",   { Eb, Ib } },
  3122.   },
  3123.   /* REG_C1 */
  3124.   {
  3125.     { "rolQ",   { Ev, Ib } },
  3126.     { "rorQ",   { Ev, Ib } },
  3127.     { "rclQ",   { Ev, Ib } },
  3128.     { "rcrQ",   { Ev, Ib } },
  3129.     { "shlQ",   { Ev, Ib } },
  3130.     { "shrQ",   { Ev, Ib } },
  3131.     { Bad_Opcode },
  3132.     { "sarQ",   { Ev, Ib } },
  3133.   },
  3134.   /* REG_C6 */
  3135.   {
  3136.     { "movA",   { Ebh3, Ib } },
  3137.     { Bad_Opcode },
  3138.     { Bad_Opcode },
  3139.     { Bad_Opcode },
  3140.     { Bad_Opcode },
  3141.     { Bad_Opcode },
  3142.     { Bad_Opcode },
  3143.     { MOD_TABLE (MOD_C6_REG_7) },
  3144.   },
  3145.   /* REG_C7 */
  3146.   {
  3147.     { "movQ",   { Evh3, Iv } },
  3148.     { Bad_Opcode },
  3149.     { Bad_Opcode },
  3150.     { Bad_Opcode },
  3151.     { Bad_Opcode },
  3152.     { Bad_Opcode },
  3153.     { Bad_Opcode },
  3154.     { MOD_TABLE (MOD_C7_REG_7) },
  3155.   },
  3156.   /* REG_D0 */
  3157.   {
  3158.     { "rolA",   { Eb, I1 } },
  3159.     { "rorA",   { Eb, I1 } },
  3160.     { "rclA",   { Eb, I1 } },
  3161.     { "rcrA",   { Eb, I1 } },
  3162.     { "shlA",   { Eb, I1 } },
  3163.     { "shrA",   { Eb, I1 } },
  3164.     { Bad_Opcode },
  3165.     { "sarA",   { Eb, I1 } },
  3166.   },
  3167.   /* REG_D1 */
  3168.   {
  3169.     { "rolQ",   { Ev, I1 } },
  3170.     { "rorQ",   { Ev, I1 } },
  3171.     { "rclQ",   { Ev, I1 } },
  3172.     { "rcrQ",   { Ev, I1 } },
  3173.     { "shlQ",   { Ev, I1 } },
  3174.     { "shrQ",   { Ev, I1 } },
  3175.     { Bad_Opcode },
  3176.     { "sarQ",   { Ev, I1 } },
  3177.   },
  3178.   /* REG_D2 */
  3179.   {
  3180.     { "rolA",   { Eb, CL } },
  3181.     { "rorA",   { Eb, CL } },
  3182.     { "rclA",   { Eb, CL } },
  3183.     { "rcrA",   { Eb, CL } },
  3184.     { "shlA",   { Eb, CL } },
  3185.     { "shrA",   { Eb, CL } },
  3186.     { Bad_Opcode },
  3187.     { "sarA",   { Eb, CL } },
  3188.   },
  3189.   /* REG_D3 */
  3190.   {
  3191.     { "rolQ",   { Ev, CL } },
  3192.     { "rorQ",   { Ev, CL } },
  3193.     { "rclQ",   { Ev, CL } },
  3194.     { "rcrQ",   { Ev, CL } },
  3195.     { "shlQ",   { Ev, CL } },
  3196.     { "shrQ",   { Ev, CL } },
  3197.     { Bad_Opcode },
  3198.     { "sarQ",   { Ev, CL } },
  3199.   },
  3200.   /* REG_F6 */
  3201.   {
  3202.     { "testA",  { Eb, Ib } },
  3203.     { Bad_Opcode },
  3204.     { "notA",   { Ebh1 } },
  3205.     { "negA",   { Ebh1 } },
  3206.     { "mulA",   { Eb } },       /* Don't print the implicit %al register,  */
  3207.     { "imulA",  { Eb } },       /* to distinguish these opcodes from other */
  3208.     { "divA",   { Eb } },       /* mul/imul opcodes.  Do the same for div  */
  3209.     { "idivA",  { Eb } },       /* and idiv for consistency.               */
  3210.   },
  3211.   /* REG_F7 */
  3212.   {
  3213.     { "testQ",  { Ev, Iv } },
  3214.     { Bad_Opcode },
  3215.     { "notQ",   { Evh1 } },
  3216.     { "negQ",   { Evh1 } },
  3217.     { "mulQ",   { Ev } },       /* Don't print the implicit register.  */
  3218.     { "imulQ",  { Ev } },
  3219.     { "divQ",   { Ev } },
  3220.     { "idivQ",  { Ev } },
  3221.   },
  3222.   /* REG_FE */
  3223.   {
  3224.     { "incA",   { Ebh1 } },
  3225.     { "decA",   { Ebh1 } },
  3226.   },
  3227.   /* REG_FF */
  3228.   {
  3229.     { "incQ",   { Evh1 } },
  3230.     { "decQ",   { Evh1 } },
  3231.     { "call{T|}", { indirEv, BND } },
  3232.     { "Jcall{T|}", { indirEp } },
  3233.     { "jmp{T|}", { indirEv, BND } },
  3234.     { "Jjmp{T|}", { indirEp } },
  3235.     { "pushU",  { stackEv } },
  3236.     { Bad_Opcode },
  3237.   },
  3238.   /* REG_0F00 */
  3239.   {
  3240.     { "sldtD",  { Sv } },
  3241.     { "strD",   { Sv } },
  3242.     { "lldt",   { Ew } },
  3243.     { "ltr",    { Ew } },
  3244.     { "verr",   { Ew } },
  3245.     { "verw",   { Ew } },
  3246.     { Bad_Opcode },
  3247.     { Bad_Opcode },
  3248.   },
  3249.   /* REG_0F01 */
  3250.   {
  3251.     { MOD_TABLE (MOD_0F01_REG_0) },
  3252.     { MOD_TABLE (MOD_0F01_REG_1) },
  3253.     { MOD_TABLE (MOD_0F01_REG_2) },
  3254.     { MOD_TABLE (MOD_0F01_REG_3) },
  3255.     { "smswD",  { Sv } },
  3256.     { Bad_Opcode },
  3257.     { "lmsw",   { Ew } },
  3258.     { MOD_TABLE (MOD_0F01_REG_7) },
  3259.   },
  3260.   /* REG_0F0D */
  3261.   {
  3262.     { "prefetch",       { Mb } },
  3263.     { "prefetchw",      { Mb } },
  3264.     { "prefetchwt1",    { Mb } },
  3265.     { "prefetch",       { Mb } },
  3266.     { "prefetch",       { Mb } },
  3267.     { "prefetch",       { Mb } },
  3268.     { "prefetch",       { Mb } },
  3269.     { "prefetch",       { Mb } },
  3270.   },
  3271.   /* REG_0F18 */
  3272.   {
  3273.     { MOD_TABLE (MOD_0F18_REG_0) },
  3274.     { MOD_TABLE (MOD_0F18_REG_1) },
  3275.     { MOD_TABLE (MOD_0F18_REG_2) },
  3276.     { MOD_TABLE (MOD_0F18_REG_3) },
  3277.     { MOD_TABLE (MOD_0F18_REG_4) },
  3278.     { MOD_TABLE (MOD_0F18_REG_5) },
  3279.     { MOD_TABLE (MOD_0F18_REG_6) },
  3280.     { MOD_TABLE (MOD_0F18_REG_7) },
  3281.   },
  3282.   /* REG_0F71 */
  3283.   {
  3284.     { Bad_Opcode },
  3285.     { Bad_Opcode },
  3286.     { MOD_TABLE (MOD_0F71_REG_2) },
  3287.     { Bad_Opcode },
  3288.     { MOD_TABLE (MOD_0F71_REG_4) },
  3289.     { Bad_Opcode },
  3290.     { MOD_TABLE (MOD_0F71_REG_6) },
  3291.   },
  3292.   /* REG_0F72 */
  3293.   {
  3294.     { Bad_Opcode },
  3295.     { Bad_Opcode },
  3296.     { MOD_TABLE (MOD_0F72_REG_2) },
  3297.     { Bad_Opcode },
  3298.     { MOD_TABLE (MOD_0F72_REG_4) },
  3299.     { Bad_Opcode },
  3300.     { MOD_TABLE (MOD_0F72_REG_6) },
  3301.   },
  3302.   /* REG_0F73 */
  3303.   {
  3304.     { Bad_Opcode },
  3305.     { Bad_Opcode },
  3306.     { MOD_TABLE (MOD_0F73_REG_2) },
  3307.     { MOD_TABLE (MOD_0F73_REG_3) },
  3308.     { Bad_Opcode },
  3309.     { Bad_Opcode },
  3310.     { MOD_TABLE (MOD_0F73_REG_6) },
  3311.     { MOD_TABLE (MOD_0F73_REG_7) },
  3312.   },
  3313.   /* REG_0FA6 */
  3314.   {
  3315.     { "montmul",        { { OP_0f07, 0 } } },
  3316.     { "xsha1",          { { OP_0f07, 0 } } },
  3317.     { "xsha256",        { { OP_0f07, 0 } } },
  3318.   },
  3319.   /* REG_0FA7 */
  3320.   {
  3321.     { "xstore-rng",     { { OP_0f07, 0 } } },
  3322.     { "xcrypt-ecb",     { { OP_0f07, 0 } } },
  3323.     { "xcrypt-cbc",     { { OP_0f07, 0 } } },
  3324.     { "xcrypt-ctr",     { { OP_0f07, 0 } } },
  3325.     { "xcrypt-cfb",     { { OP_0f07, 0 } } },
  3326.     { "xcrypt-ofb",     { { OP_0f07, 0 } } },
  3327.   },
  3328.   /* REG_0FAE */
  3329.   {
  3330.     { MOD_TABLE (MOD_0FAE_REG_0) },
  3331.     { MOD_TABLE (MOD_0FAE_REG_1) },
  3332.     { MOD_TABLE (MOD_0FAE_REG_2) },
  3333.     { MOD_TABLE (MOD_0FAE_REG_3) },
  3334.     { MOD_TABLE (MOD_0FAE_REG_4) },
  3335.     { MOD_TABLE (MOD_0FAE_REG_5) },
  3336.     { MOD_TABLE (MOD_0FAE_REG_6) },
  3337.     { MOD_TABLE (MOD_0FAE_REG_7) },
  3338.   },
  3339.   /* REG_0FBA */
  3340.   {
  3341.     { Bad_Opcode },
  3342.     { Bad_Opcode },
  3343.     { Bad_Opcode },
  3344.     { Bad_Opcode },
  3345.     { "btQ",    { Ev, Ib } },
  3346.     { "btsQ",   { Evh1, Ib } },
  3347.     { "btrQ",   { Evh1, Ib } },
  3348.     { "btcQ",   { Evh1, Ib } },
  3349.   },
  3350.   /* REG_0FC7 */
  3351.   {
  3352.     { Bad_Opcode },
  3353.     { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
  3354.     { Bad_Opcode },
  3355.     { Bad_Opcode },
  3356.     { Bad_Opcode },
  3357.     { Bad_Opcode },
  3358.     { MOD_TABLE (MOD_0FC7_REG_6) },
  3359.     { MOD_TABLE (MOD_0FC7_REG_7) },
  3360.   },
  3361.   /* REG_VEX_0F71 */
  3362.   {
  3363.     { Bad_Opcode },
  3364.     { Bad_Opcode },
  3365.     { MOD_TABLE (MOD_VEX_0F71_REG_2) },
  3366.     { Bad_Opcode },
  3367.     { MOD_TABLE (MOD_VEX_0F71_REG_4) },
  3368.     { Bad_Opcode },
  3369.     { MOD_TABLE (MOD_VEX_0F71_REG_6) },
  3370.   },
  3371.   /* REG_VEX_0F72 */
  3372.   {
  3373.     { Bad_Opcode },
  3374.     { Bad_Opcode },
  3375.     { MOD_TABLE (MOD_VEX_0F72_REG_2) },
  3376.     { Bad_Opcode },
  3377.     { MOD_TABLE (MOD_VEX_0F72_REG_4) },
  3378.     { Bad_Opcode },
  3379.     { MOD_TABLE (MOD_VEX_0F72_REG_6) },
  3380.   },
  3381.   /* REG_VEX_0F73 */
  3382.   {
  3383.     { Bad_Opcode },
  3384.     { Bad_Opcode },
  3385.     { MOD_TABLE (MOD_VEX_0F73_REG_2) },
  3386.     { MOD_TABLE (MOD_VEX_0F73_REG_3) },
  3387.     { Bad_Opcode },
  3388.     { Bad_Opcode },
  3389.     { MOD_TABLE (MOD_VEX_0F73_REG_6) },
  3390.     { MOD_TABLE (MOD_VEX_0F73_REG_7) },
  3391.   },
  3392.   /* REG_VEX_0FAE */
  3393.   {
  3394.     { Bad_Opcode },
  3395.     { Bad_Opcode },
  3396.     { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
  3397.     { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
  3398.   },
  3399.   /* REG_VEX_0F38F3 */
  3400.   {
  3401.     { Bad_Opcode },
  3402.     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
  3403.     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
  3404.     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
  3405.   },
  3406.   /* REG_XOP_LWPCB */
  3407.   {
  3408.     { "llwpcb", { { OP_LWPCB_E, 0 } } },
  3409.     { "slwpcb", { { OP_LWPCB_E, 0 } } },
  3410.   },
  3411.   /* REG_XOP_LWP */
  3412.   {
  3413.     { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
  3414.     { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
  3415.   },
  3416.   /* REG_XOP_TBM_01 */
  3417.   {
  3418.     { Bad_Opcode },
  3419.     { "blcfill",        { { OP_LWP_E, 0 }, Ev } },
  3420.     { "blsfill",        { { OP_LWP_E, 0 }, Ev } },
  3421.     { "blcs",   { { OP_LWP_E, 0 }, Ev } },
  3422.     { "tzmsk",  { { OP_LWP_E, 0 }, Ev } },
  3423.     { "blcic",  { { OP_LWP_E, 0 }, Ev } },
  3424.     { "blsic",  { { OP_LWP_E, 0 }, Ev } },
  3425.     { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
  3426.   },
  3427.   /* REG_XOP_TBM_02 */
  3428.   {
  3429.     { Bad_Opcode },
  3430.     { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
  3431.     { Bad_Opcode },
  3432.     { Bad_Opcode },
  3433.     { Bad_Opcode },
  3434.     { Bad_Opcode },
  3435.     { "blci",   { { OP_LWP_E, 0 }, Ev } },
  3436.   },
  3437. #define NEED_REG_TABLE
  3438. #include "i386-dis-evex.h"
  3439. #undef NEED_REG_TABLE
  3440. };
  3441.  
  3442. static const struct dis386 prefix_table[][4] = {
  3443.   /* PREFIX_90 */
  3444.   {
  3445.     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
  3446.     { "pause", { XX } },
  3447.     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
  3448.   },
  3449.  
  3450.   /* PREFIX_0F10 */
  3451.   {
  3452.     { "movups", { XM, EXx } },
  3453.     { "movss",  { XM, EXd } },
  3454.     { "movupd", { XM, EXx } },
  3455.     { "movsd",  { XM, EXq } },
  3456.   },
  3457.  
  3458.   /* PREFIX_0F11 */
  3459.   {
  3460.     { "movups", { EXxS, XM } },
  3461.     { "movss",  { EXdS, XM } },
  3462.     { "movupd", { EXxS, XM } },
  3463.     { "movsd",  { EXqS, XM } },
  3464.   },
  3465.  
  3466.   /* PREFIX_0F12 */
  3467.   {
  3468.     { MOD_TABLE (MOD_0F12_PREFIX_0) },
  3469.     { "movsldup", { XM, EXx } },
  3470.     { "movlpd", { XM, EXq } },
  3471.     { "movddup", { XM, EXq } },
  3472.   },
  3473.  
  3474.   /* PREFIX_0F16 */
  3475.   {
  3476.     { MOD_TABLE (MOD_0F16_PREFIX_0) },
  3477.     { "movshdup", { XM, EXx } },
  3478.     { "movhpd", { XM, EXq } },
  3479.   },
  3480.  
  3481.   /* PREFIX_0F1A */
  3482.   {
  3483.     { MOD_TABLE (MOD_0F1A_PREFIX_0) },
  3484.     { "bndcl",  { Gbnd, Ev_bnd } },
  3485.     { "bndmov", { Gbnd, Ebnd } },
  3486.     { "bndcu",  { Gbnd, Ev_bnd } },
  3487.   },
  3488.  
  3489.   /* PREFIX_0F1B */
  3490.   {
  3491.     { MOD_TABLE (MOD_0F1B_PREFIX_0) },
  3492.     { MOD_TABLE (MOD_0F1B_PREFIX_1) },
  3493.     { "bndmov", { Ebnd, Gbnd } },
  3494.     { "bndcn",  { Gbnd, Ev_bnd } },
  3495.   },
  3496.  
  3497.   /* PREFIX_0F2A */
  3498.   {
  3499.     { "cvtpi2ps", { XM, EMCq } },
  3500.     { "cvtsi2ss%LQ", { XM, Ev } },
  3501.     { "cvtpi2pd", { XM, EMCq } },
  3502.     { "cvtsi2sd%LQ", { XM, Ev } },
  3503.   },
  3504.  
  3505.   /* PREFIX_0F2B */
  3506.   {
  3507.     { MOD_TABLE (MOD_0F2B_PREFIX_0) },
  3508.     { MOD_TABLE (MOD_0F2B_PREFIX_1) },
  3509.     { MOD_TABLE (MOD_0F2B_PREFIX_2) },
  3510.     { MOD_TABLE (MOD_0F2B_PREFIX_3) },
  3511.   },
  3512.  
  3513.   /* PREFIX_0F2C */
  3514.   {
  3515.     { "cvttps2pi", { MXC, EXq } },
  3516.     { "cvttss2siY", { Gv, EXd } },
  3517.     { "cvttpd2pi", { MXC, EXx } },
  3518.     { "cvttsd2siY", { Gv, EXq } },
  3519.   },
  3520.  
  3521.   /* PREFIX_0F2D */
  3522.   {
  3523.     { "cvtps2pi", { MXC, EXq } },
  3524.     { "cvtss2siY", { Gv, EXd } },
  3525.     { "cvtpd2pi", { MXC, EXx } },
  3526.     { "cvtsd2siY", { Gv, EXq } },
  3527.   },
  3528.  
  3529.   /* PREFIX_0F2E */
  3530.   {
  3531.     { "ucomiss",{ XM, EXd } },
  3532.     { Bad_Opcode },
  3533.     { "ucomisd",{ XM, EXq } },
  3534.   },
  3535.  
  3536.   /* PREFIX_0F2F */
  3537.   {
  3538.     { "comiss", { XM, EXd } },
  3539.     { Bad_Opcode },
  3540.     { "comisd", { XM, EXq } },
  3541.   },
  3542.  
  3543.   /* PREFIX_0F51 */
  3544.   {
  3545.     { "sqrtps", { XM, EXx } },
  3546.     { "sqrtss", { XM, EXd } },
  3547.     { "sqrtpd", { XM, EXx } },
  3548.     { "sqrtsd", { XM, EXq } },
  3549.   },
  3550.  
  3551.   /* PREFIX_0F52 */
  3552.   {
  3553.     { "rsqrtps",{ XM, EXx } },
  3554.     { "rsqrtss",{ XM, EXd } },
  3555.   },
  3556.  
  3557.   /* PREFIX_0F53 */
  3558.   {
  3559.     { "rcpps",  { XM, EXx } },
  3560.     { "rcpss",  { XM, EXd } },
  3561.   },
  3562.  
  3563.   /* PREFIX_0F58 */
  3564.   {
  3565.     { "addps", { XM, EXx } },
  3566.     { "addss", { XM, EXd } },
  3567.     { "addpd", { XM, EXx } },
  3568.     { "addsd", { XM, EXq } },
  3569.   },
  3570.  
  3571.   /* PREFIX_0F59 */
  3572.   {
  3573.     { "mulps",  { XM, EXx } },
  3574.     { "mulss",  { XM, EXd } },
  3575.     { "mulpd",  { XM, EXx } },
  3576.     { "mulsd",  { XM, EXq } },
  3577.   },
  3578.  
  3579.   /* PREFIX_0F5A */
  3580.   {
  3581.     { "cvtps2pd", { XM, EXq } },
  3582.     { "cvtss2sd", { XM, EXd } },
  3583.     { "cvtpd2ps", { XM, EXx } },
  3584.     { "cvtsd2ss", { XM, EXq } },
  3585.   },
  3586.  
  3587.   /* PREFIX_0F5B */
  3588.   {
  3589.     { "cvtdq2ps", { XM, EXx } },
  3590.     { "cvttps2dq", { XM, EXx } },
  3591.     { "cvtps2dq", { XM, EXx } },
  3592.   },
  3593.  
  3594.   /* PREFIX_0F5C */
  3595.   {
  3596.     { "subps",  { XM, EXx } },
  3597.     { "subss",  { XM, EXd } },
  3598.     { "subpd",  { XM, EXx } },
  3599.     { "subsd",  { XM, EXq } },
  3600.   },
  3601.  
  3602.   /* PREFIX_0F5D */
  3603.   {
  3604.     { "minps",  { XM, EXx } },
  3605.     { "minss",  { XM, EXd } },
  3606.     { "minpd",  { XM, EXx } },
  3607.     { "minsd",  { XM, EXq } },
  3608.   },
  3609.  
  3610.   /* PREFIX_0F5E */
  3611.   {
  3612.     { "divps",  { XM, EXx } },
  3613.     { "divss",  { XM, EXd } },
  3614.     { "divpd",  { XM, EXx } },
  3615.     { "divsd",  { XM, EXq } },
  3616.   },
  3617.  
  3618.   /* PREFIX_0F5F */
  3619.   {
  3620.     { "maxps",  { XM, EXx } },
  3621.     { "maxss",  { XM, EXd } },
  3622.     { "maxpd",  { XM, EXx } },
  3623.     { "maxsd",  { XM, EXq } },
  3624.   },
  3625.  
  3626.   /* PREFIX_0F60 */
  3627.   {
  3628.     { "punpcklbw",{ MX, EMd } },
  3629.     { Bad_Opcode },
  3630.     { "punpcklbw",{ MX, EMx } },
  3631.   },
  3632.  
  3633.   /* PREFIX_0F61 */
  3634.   {
  3635.     { "punpcklwd",{ MX, EMd } },
  3636.     { Bad_Opcode },
  3637.     { "punpcklwd",{ MX, EMx } },
  3638.   },
  3639.  
  3640.   /* PREFIX_0F62 */
  3641.   {
  3642.     { "punpckldq",{ MX, EMd } },
  3643.     { Bad_Opcode },
  3644.     { "punpckldq",{ MX, EMx } },
  3645.   },
  3646.  
  3647.   /* PREFIX_0F6C */
  3648.   {
  3649.     { Bad_Opcode },
  3650.     { Bad_Opcode },
  3651.     { "punpcklqdq", { XM, EXx } },
  3652.   },
  3653.  
  3654.   /* PREFIX_0F6D */
  3655.   {
  3656.     { Bad_Opcode },
  3657.     { Bad_Opcode },
  3658.     { "punpckhqdq", { XM, EXx } },
  3659.   },
  3660.  
  3661.   /* PREFIX_0F6F */
  3662.   {
  3663.     { "movq",   { MX, EM } },
  3664.     { "movdqu", { XM, EXx } },
  3665.     { "movdqa", { XM, EXx } },
  3666.   },
  3667.  
  3668.   /* PREFIX_0F70 */
  3669.   {
  3670.     { "pshufw", { MX, EM, Ib } },
  3671.     { "pshufhw",{ XM, EXx, Ib } },
  3672.     { "pshufd", { XM, EXx, Ib } },
  3673.     { "pshuflw",{ XM, EXx, Ib } },
  3674.   },
  3675.  
  3676.   /* PREFIX_0F73_REG_3 */
  3677.   {
  3678.     { Bad_Opcode },
  3679.     { Bad_Opcode },
  3680.     { "psrldq", { XS, Ib } },
  3681.   },
  3682.  
  3683.   /* PREFIX_0F73_REG_7 */
  3684.   {
  3685.     { Bad_Opcode },
  3686.     { Bad_Opcode },
  3687.     { "pslldq", { XS, Ib } },
  3688.   },
  3689.  
  3690.   /* PREFIX_0F78 */
  3691.   {
  3692.     {"vmread",  { Em, Gm } },
  3693.     { Bad_Opcode },
  3694.     {"extrq",   { XS, Ib, Ib } },
  3695.     {"insertq", { XM, XS, Ib, Ib } },
  3696.   },
  3697.  
  3698.   /* PREFIX_0F79 */
  3699.   {
  3700.     {"vmwrite", { Gm, Em } },
  3701.     { Bad_Opcode },
  3702.     {"extrq",   { XM, XS } },
  3703.     {"insertq", { XM, XS } },
  3704.   },
  3705.  
  3706.   /* PREFIX_0F7C */
  3707.   {
  3708.     { Bad_Opcode },
  3709.     { Bad_Opcode },
  3710.     { "haddpd", { XM, EXx } },
  3711.     { "haddps", { XM, EXx } },
  3712.   },
  3713.  
  3714.   /* PREFIX_0F7D */
  3715.   {
  3716.     { Bad_Opcode },
  3717.     { Bad_Opcode },
  3718.     { "hsubpd", { XM, EXx } },
  3719.     { "hsubps", { XM, EXx } },
  3720.   },
  3721.  
  3722.   /* PREFIX_0F7E */
  3723.   {
  3724.     { "movK",   { Edq, MX } },
  3725.     { "movq",   { XM, EXq } },
  3726.     { "movK",   { Edq, XM } },
  3727.   },
  3728.  
  3729.   /* PREFIX_0F7F */
  3730.   {
  3731.     { "movq",   { EMS, MX } },
  3732.     { "movdqu", { EXxS, XM } },
  3733.     { "movdqa", { EXxS, XM } },
  3734.   },
  3735.  
  3736.   /* PREFIX_0FAE_REG_0 */
  3737.   {
  3738.     { Bad_Opcode },
  3739.     { "rdfsbase", { Ev } },
  3740.   },
  3741.  
  3742.   /* PREFIX_0FAE_REG_1 */
  3743.   {
  3744.     { Bad_Opcode },
  3745.     { "rdgsbase", { Ev } },
  3746.   },
  3747.  
  3748.   /* PREFIX_0FAE_REG_2 */
  3749.   {
  3750.     { Bad_Opcode },
  3751.     { "wrfsbase", { Ev } },
  3752.   },
  3753.  
  3754.   /* PREFIX_0FAE_REG_3 */
  3755.   {
  3756.     { Bad_Opcode },
  3757.     { "wrgsbase", { Ev } },
  3758.   },
  3759.  
  3760.   /* PREFIX_0FB8 */
  3761.   {
  3762.     { Bad_Opcode },
  3763.     { "popcntS", { Gv, Ev } },
  3764.   },
  3765.  
  3766.   /* PREFIX_0FBC */
  3767.   {
  3768.     { "bsfS",   { Gv, Ev } },
  3769.     { "tzcntS", { Gv, Ev } },
  3770.     { "bsfS",   { Gv, Ev } },
  3771.   },
  3772.  
  3773.   /* PREFIX_0FBD */
  3774.   {
  3775.     { "bsrS",   { Gv, Ev } },
  3776.     { "lzcntS", { Gv, Ev } },
  3777.     { "bsrS",   { Gv, Ev } },
  3778.   },
  3779.  
  3780.   /* PREFIX_0FC2 */
  3781.   {
  3782.     { "cmpps",  { XM, EXx, CMP } },
  3783.     { "cmpss",  { XM, EXd, CMP } },
  3784.     { "cmppd",  { XM, EXx, CMP } },
  3785.     { "cmpsd",  { XM, EXq, CMP } },
  3786.   },
  3787.  
  3788.   /* PREFIX_0FC3 */
  3789.   {
  3790.     { "movntiS", { Ma, Gv } },
  3791.   },
  3792.  
  3793.   /* PREFIX_0FC7_REG_6 */
  3794.   {
  3795.     { "vmptrld",{ Mq } },
  3796.     { "vmxon",  { Mq } },
  3797.     { "vmclear",{ Mq } },
  3798.   },
  3799.  
  3800.   /* PREFIX_0FD0 */
  3801.   {
  3802.     { Bad_Opcode },
  3803.     { Bad_Opcode },
  3804.     { "addsubpd", { XM, EXx } },
  3805.     { "addsubps", { XM, EXx } },
  3806.   },
  3807.  
  3808.   /* PREFIX_0FD6 */
  3809.   {
  3810.     { Bad_Opcode },
  3811.     { "movq2dq",{ XM, MS } },
  3812.     { "movq",   { EXqS, XM } },
  3813.     { "movdq2q",{ MX, XS } },
  3814.   },
  3815.  
  3816.   /* PREFIX_0FE6 */
  3817.   {
  3818.     { Bad_Opcode },
  3819.     { "cvtdq2pd", { XM, EXq } },
  3820.     { "cvttpd2dq", { XM, EXx } },
  3821.     { "cvtpd2dq", { XM, EXx } },
  3822.   },
  3823.  
  3824.   /* PREFIX_0FE7 */
  3825.   {
  3826.     { "movntq", { Mq, MX } },
  3827.     { Bad_Opcode },
  3828.     { MOD_TABLE (MOD_0FE7_PREFIX_2) },
  3829.   },
  3830.  
  3831.   /* PREFIX_0FF0 */
  3832.   {
  3833.     { Bad_Opcode },
  3834.     { Bad_Opcode },
  3835.     { Bad_Opcode },
  3836.     { MOD_TABLE (MOD_0FF0_PREFIX_3) },
  3837.   },
  3838.  
  3839.   /* PREFIX_0FF7 */
  3840.   {
  3841.     { "maskmovq", { MX, MS } },
  3842.     { Bad_Opcode },
  3843.     { "maskmovdqu", { XM, XS } },
  3844.   },
  3845.  
  3846.   /* PREFIX_0F3810 */
  3847.   {
  3848.     { Bad_Opcode },
  3849.     { Bad_Opcode },
  3850.     { "pblendvb", { XM, EXx, XMM0 } },
  3851.   },
  3852.  
  3853.   /* PREFIX_0F3814 */
  3854.   {
  3855.     { Bad_Opcode },
  3856.     { Bad_Opcode },
  3857.     { "blendvps", { XM, EXx, XMM0 } },
  3858.   },
  3859.  
  3860.   /* PREFIX_0F3815 */
  3861.   {
  3862.     { Bad_Opcode },
  3863.     { Bad_Opcode },
  3864.     { "blendvpd", { XM, EXx, XMM0 } },
  3865.   },
  3866.  
  3867.   /* PREFIX_0F3817 */
  3868.   {
  3869.     { Bad_Opcode },
  3870.     { Bad_Opcode },
  3871.     { "ptest",  { XM, EXx } },
  3872.   },
  3873.  
  3874.   /* PREFIX_0F3820 */
  3875.   {
  3876.     { Bad_Opcode },
  3877.     { Bad_Opcode },
  3878.     { "pmovsxbw", { XM, EXq } },
  3879.   },
  3880.  
  3881.   /* PREFIX_0F3821 */
  3882.   {
  3883.     { Bad_Opcode },
  3884.     { Bad_Opcode },
  3885.     { "pmovsxbd", { XM, EXd } },
  3886.   },
  3887.  
  3888.   /* PREFIX_0F3822 */
  3889.   {
  3890.     { Bad_Opcode },
  3891.     { Bad_Opcode },
  3892.     { "pmovsxbq", { XM, EXw } },
  3893.   },
  3894.  
  3895.   /* PREFIX_0F3823 */
  3896.   {
  3897.     { Bad_Opcode },
  3898.     { Bad_Opcode },
  3899.     { "pmovsxwd", { XM, EXq } },
  3900.   },
  3901.  
  3902.   /* PREFIX_0F3824 */
  3903.   {
  3904.     { Bad_Opcode },
  3905.     { Bad_Opcode },
  3906.     { "pmovsxwq", { XM, EXd } },
  3907.   },
  3908.  
  3909.   /* PREFIX_0F3825 */
  3910.   {
  3911.     { Bad_Opcode },
  3912.     { Bad_Opcode },
  3913.     { "pmovsxdq", { XM, EXq } },
  3914.   },
  3915.  
  3916.   /* PREFIX_0F3828 */
  3917.   {
  3918.     { Bad_Opcode },
  3919.     { Bad_Opcode },
  3920.     { "pmuldq", { XM, EXx } },
  3921.   },
  3922.  
  3923.   /* PREFIX_0F3829 */
  3924.   {
  3925.     { Bad_Opcode },
  3926.     { Bad_Opcode },
  3927.     { "pcmpeqq", { XM, EXx } },
  3928.   },
  3929.  
  3930.   /* PREFIX_0F382A */
  3931.   {
  3932.     { Bad_Opcode },
  3933.     { Bad_Opcode },
  3934.     { MOD_TABLE (MOD_0F382A_PREFIX_2) },
  3935.   },
  3936.  
  3937.   /* PREFIX_0F382B */
  3938.   {
  3939.     { Bad_Opcode },
  3940.     { Bad_Opcode },
  3941.     { "packusdw", { XM, EXx } },
  3942.   },
  3943.  
  3944.   /* PREFIX_0F3830 */
  3945.   {
  3946.     { Bad_Opcode },
  3947.     { Bad_Opcode },
  3948.     { "pmovzxbw", { XM, EXq } },
  3949.   },
  3950.  
  3951.   /* PREFIX_0F3831 */
  3952.   {
  3953.     { Bad_Opcode },
  3954.     { Bad_Opcode },
  3955.     { "pmovzxbd", { XM, EXd } },
  3956.   },
  3957.  
  3958.   /* PREFIX_0F3832 */
  3959.   {
  3960.     { Bad_Opcode },
  3961.     { Bad_Opcode },
  3962.     { "pmovzxbq", { XM, EXw } },
  3963.   },
  3964.  
  3965.   /* PREFIX_0F3833 */
  3966.   {
  3967.     { Bad_Opcode },
  3968.     { Bad_Opcode },
  3969.     { "pmovzxwd", { XM, EXq } },
  3970.   },
  3971.  
  3972.   /* PREFIX_0F3834 */
  3973.   {
  3974.     { Bad_Opcode },
  3975.     { Bad_Opcode },
  3976.     { "pmovzxwq", { XM, EXd } },
  3977.   },
  3978.  
  3979.   /* PREFIX_0F3835 */
  3980.   {
  3981.     { Bad_Opcode },
  3982.     { Bad_Opcode },
  3983.     { "pmovzxdq", { XM, EXq } },
  3984.   },
  3985.  
  3986.   /* PREFIX_0F3837 */
  3987.   {
  3988.     { Bad_Opcode },
  3989.     { Bad_Opcode },
  3990.     { "pcmpgtq", { XM, EXx } },
  3991.   },
  3992.  
  3993.   /* PREFIX_0F3838 */
  3994.   {
  3995.     { Bad_Opcode },
  3996.     { Bad_Opcode },
  3997.     { "pminsb", { XM, EXx } },
  3998.   },
  3999.  
  4000.   /* PREFIX_0F3839 */
  4001.   {
  4002.     { Bad_Opcode },
  4003.     { Bad_Opcode },
  4004.     { "pminsd", { XM, EXx } },
  4005.   },
  4006.  
  4007.   /* PREFIX_0F383A */
  4008.   {
  4009.     { Bad_Opcode },
  4010.     { Bad_Opcode },
  4011.     { "pminuw", { XM, EXx } },
  4012.   },
  4013.  
  4014.   /* PREFIX_0F383B */
  4015.   {
  4016.     { Bad_Opcode },
  4017.     { Bad_Opcode },
  4018.     { "pminud", { XM, EXx } },
  4019.   },
  4020.  
  4021.   /* PREFIX_0F383C */
  4022.   {
  4023.     { Bad_Opcode },
  4024.     { Bad_Opcode },
  4025.     { "pmaxsb", { XM, EXx } },
  4026.   },
  4027.  
  4028.   /* PREFIX_0F383D */
  4029.   {
  4030.     { Bad_Opcode },
  4031.     { Bad_Opcode },
  4032.     { "pmaxsd", { XM, EXx } },
  4033.   },
  4034.  
  4035.   /* PREFIX_0F383E */
  4036.   {
  4037.     { Bad_Opcode },
  4038.     { Bad_Opcode },
  4039.     { "pmaxuw", { XM, EXx } },
  4040.   },
  4041.  
  4042.   /* PREFIX_0F383F */
  4043.   {
  4044.     { Bad_Opcode },
  4045.     { Bad_Opcode },
  4046.     { "pmaxud", { XM, EXx } },
  4047.   },
  4048.  
  4049.   /* PREFIX_0F3840 */
  4050.   {
  4051.     { Bad_Opcode },
  4052.     { Bad_Opcode },
  4053.     { "pmulld", { XM, EXx } },
  4054.   },
  4055.  
  4056.   /* PREFIX_0F3841 */
  4057.   {
  4058.     { Bad_Opcode },
  4059.     { Bad_Opcode },
  4060.     { "phminposuw", { XM, EXx } },
  4061.   },
  4062.  
  4063.   /* PREFIX_0F3880 */
  4064.   {
  4065.     { Bad_Opcode },
  4066.     { Bad_Opcode },
  4067.     { "invept", { Gm, Mo } },
  4068.   },
  4069.  
  4070.   /* PREFIX_0F3881 */
  4071.   {
  4072.     { Bad_Opcode },
  4073.     { Bad_Opcode },
  4074.     { "invvpid", { Gm, Mo } },
  4075.   },
  4076.  
  4077.   /* PREFIX_0F3882 */
  4078.   {
  4079.     { Bad_Opcode },
  4080.     { Bad_Opcode },
  4081.     { "invpcid", { Gm, M } },
  4082.   },
  4083.  
  4084.   /* PREFIX_0F38C8 */
  4085.   {
  4086.     { "sha1nexte", { XM, EXxmm } },
  4087.   },
  4088.  
  4089.   /* PREFIX_0F38C9 */
  4090.   {
  4091.     { "sha1msg1", { XM, EXxmm } },
  4092.   },
  4093.  
  4094.   /* PREFIX_0F38CA */
  4095.   {
  4096.     { "sha1msg2", { XM, EXxmm } },
  4097.   },
  4098.  
  4099.   /* PREFIX_0F38CB */
  4100.   {
  4101.     { "sha256rnds2", { XM, EXxmm, XMM0 } },
  4102.   },
  4103.  
  4104.   /* PREFIX_0F38CC */
  4105.   {
  4106.     { "sha256msg1", { XM, EXxmm } },
  4107.   },
  4108.  
  4109.   /* PREFIX_0F38CD */
  4110.   {
  4111.     { "sha256msg2", { XM, EXxmm } },
  4112.   },
  4113.  
  4114.   /* PREFIX_0F38DB */
  4115.   {
  4116.     { Bad_Opcode },
  4117.     { Bad_Opcode },
  4118.     { "aesimc", { XM, EXx } },
  4119.   },
  4120.  
  4121.   /* PREFIX_0F38DC */
  4122.   {
  4123.     { Bad_Opcode },
  4124.     { Bad_Opcode },
  4125.     { "aesenc", { XM, EXx } },
  4126.   },
  4127.  
  4128.   /* PREFIX_0F38DD */
  4129.   {
  4130.     { Bad_Opcode },
  4131.     { Bad_Opcode },
  4132.     { "aesenclast", { XM, EXx } },
  4133.   },
  4134.  
  4135.   /* PREFIX_0F38DE */
  4136.   {
  4137.     { Bad_Opcode },
  4138.     { Bad_Opcode },
  4139.     { "aesdec", { XM, EXx } },
  4140.   },
  4141.  
  4142.   /* PREFIX_0F38DF */
  4143.   {
  4144.     { Bad_Opcode },
  4145.     { Bad_Opcode },
  4146.     { "aesdeclast", { XM, EXx } },
  4147.   },
  4148.  
  4149.   /* PREFIX_0F38F0 */
  4150.   {
  4151.     { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
  4152.     { Bad_Opcode },
  4153.     { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
  4154.     { "crc32",  { Gdq, { CRC32_Fixup, b_mode } } },
  4155.   },
  4156.  
  4157.   /* PREFIX_0F38F1 */
  4158.   {
  4159.     { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
  4160.     { Bad_Opcode },
  4161.     { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
  4162.     { "crc32",  { Gdq, { CRC32_Fixup, v_mode } } },
  4163.   },
  4164.  
  4165.   /* PREFIX_0F38F6 */
  4166.   {
  4167.     { Bad_Opcode },
  4168.     { "adoxS",  { Gdq, Edq} },
  4169.     { "adcxS",  { Gdq, Edq} },
  4170.     { Bad_Opcode },
  4171.   },
  4172.  
  4173.   /* PREFIX_0F3A08 */
  4174.   {
  4175.     { Bad_Opcode },
  4176.     { Bad_Opcode },
  4177.     { "roundps", { XM, EXx, Ib } },
  4178.   },
  4179.  
  4180.   /* PREFIX_0F3A09 */
  4181.   {
  4182.     { Bad_Opcode },
  4183.     { Bad_Opcode },
  4184.     { "roundpd", { XM, EXx, Ib } },
  4185.   },
  4186.  
  4187.   /* PREFIX_0F3A0A */
  4188.   {
  4189.     { Bad_Opcode },
  4190.     { Bad_Opcode },
  4191.     { "roundss", { XM, EXd, Ib } },
  4192.   },
  4193.  
  4194.   /* PREFIX_0F3A0B */
  4195.   {
  4196.     { Bad_Opcode },
  4197.     { Bad_Opcode },
  4198.     { "roundsd", { XM, EXq, Ib } },
  4199.   },
  4200.  
  4201.   /* PREFIX_0F3A0C */
  4202.   {
  4203.     { Bad_Opcode },
  4204.     { Bad_Opcode },
  4205.     { "blendps", { XM, EXx, Ib } },
  4206.   },
  4207.  
  4208.   /* PREFIX_0F3A0D */
  4209.   {
  4210.     { Bad_Opcode },
  4211.     { Bad_Opcode },
  4212.     { "blendpd", { XM, EXx, Ib } },
  4213.   },
  4214.  
  4215.   /* PREFIX_0F3A0E */
  4216.   {
  4217.     { Bad_Opcode },
  4218.     { Bad_Opcode },
  4219.     { "pblendw", { XM, EXx, Ib } },
  4220.   },
  4221.  
  4222.   /* PREFIX_0F3A14 */
  4223.   {
  4224.     { Bad_Opcode },
  4225.     { Bad_Opcode },
  4226.     { "pextrb", { Edqb, XM, Ib } },
  4227.   },
  4228.  
  4229.   /* PREFIX_0F3A15 */
  4230.   {
  4231.     { Bad_Opcode },
  4232.     { Bad_Opcode },
  4233.     { "pextrw", { Edqw, XM, Ib } },
  4234.   },
  4235.  
  4236.   /* PREFIX_0F3A16 */
  4237.   {
  4238.     { Bad_Opcode },
  4239.     { Bad_Opcode },
  4240.     { "pextrK", { Edq, XM, Ib } },
  4241.   },
  4242.  
  4243.   /* PREFIX_0F3A17 */
  4244.   {
  4245.     { Bad_Opcode },
  4246.     { Bad_Opcode },
  4247.     { "extractps", { Edqd, XM, Ib } },
  4248.   },
  4249.  
  4250.   /* PREFIX_0F3A20 */
  4251.   {
  4252.     { Bad_Opcode },
  4253.     { Bad_Opcode },
  4254.     { "pinsrb", { XM, Edqb, Ib } },
  4255.   },
  4256.  
  4257.   /* PREFIX_0F3A21 */
  4258.   {
  4259.     { Bad_Opcode },
  4260.     { Bad_Opcode },
  4261.     { "insertps", { XM, EXd, Ib } },
  4262.   },
  4263.  
  4264.   /* PREFIX_0F3A22 */
  4265.   {
  4266.     { Bad_Opcode },
  4267.     { Bad_Opcode },
  4268.     { "pinsrK", { XM, Edq, Ib } },
  4269.   },
  4270.  
  4271.   /* PREFIX_0F3A40 */
  4272.   {
  4273.     { Bad_Opcode },
  4274.     { Bad_Opcode },
  4275.     { "dpps",   { XM, EXx, Ib } },
  4276.   },
  4277.  
  4278.   /* PREFIX_0F3A41 */
  4279.   {
  4280.     { Bad_Opcode },
  4281.     { Bad_Opcode },
  4282.     { "dppd",   { XM, EXx, Ib } },
  4283.   },
  4284.  
  4285.   /* PREFIX_0F3A42 */
  4286.   {
  4287.     { Bad_Opcode },
  4288.     { Bad_Opcode },
  4289.     { "mpsadbw", { XM, EXx, Ib } },
  4290.   },
  4291.  
  4292.   /* PREFIX_0F3A44 */
  4293.   {
  4294.     { Bad_Opcode },
  4295.     { Bad_Opcode },
  4296.     { "pclmulqdq", { XM, EXx, PCLMUL } },
  4297.   },
  4298.  
  4299.   /* PREFIX_0F3A60 */
  4300.   {
  4301.     { Bad_Opcode },
  4302.     { Bad_Opcode },
  4303.     { "pcmpestrm", { XM, EXx, Ib } },
  4304.   },
  4305.  
  4306.   /* PREFIX_0F3A61 */
  4307.   {
  4308.     { Bad_Opcode },
  4309.     { Bad_Opcode },
  4310.     { "pcmpestri", { XM, EXx, Ib } },
  4311.   },
  4312.  
  4313.   /* PREFIX_0F3A62 */
  4314.   {
  4315.     { Bad_Opcode },
  4316.     { Bad_Opcode },
  4317.     { "pcmpistrm", { XM, EXx, Ib } },
  4318.   },
  4319.  
  4320.   /* PREFIX_0F3A63 */
  4321.   {
  4322.     { Bad_Opcode },
  4323.     { Bad_Opcode },
  4324.     { "pcmpistri", { XM, EXx, Ib } },
  4325.   },
  4326.  
  4327.   /* PREFIX_0F3ACC */
  4328.   {
  4329.     { "sha1rnds4", { XM, EXxmm, Ib } },
  4330.   },
  4331.  
  4332.   /* PREFIX_0F3ADF */
  4333.   {
  4334.     { Bad_Opcode },
  4335.     { Bad_Opcode },
  4336.     { "aeskeygenassist", { XM, EXx, Ib } },
  4337.   },
  4338.  
  4339.   /* PREFIX_VEX_0F10 */
  4340.   {
  4341.     { VEX_W_TABLE (VEX_W_0F10_P_0) },
  4342.     { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
  4343.     { VEX_W_TABLE (VEX_W_0F10_P_2) },
  4344.     { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
  4345.   },
  4346.  
  4347.   /* PREFIX_VEX_0F11 */
  4348.   {
  4349.     { VEX_W_TABLE (VEX_W_0F11_P_0) },
  4350.     { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
  4351.     { VEX_W_TABLE (VEX_W_0F11_P_2) },
  4352.     { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
  4353.   },
  4354.  
  4355.   /* PREFIX_VEX_0F12 */
  4356.   {
  4357.     { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
  4358.     { VEX_W_TABLE (VEX_W_0F12_P_1) },
  4359.     { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
  4360.     { VEX_W_TABLE (VEX_W_0F12_P_3) },
  4361.   },
  4362.  
  4363.   /* PREFIX_VEX_0F16 */
  4364.   {
  4365.     { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
  4366.     { VEX_W_TABLE (VEX_W_0F16_P_1) },
  4367.     { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
  4368.   },
  4369.  
  4370.   /* PREFIX_VEX_0F2A */
  4371.   {
  4372.     { Bad_Opcode },
  4373.     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
  4374.     { Bad_Opcode },
  4375.     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
  4376.   },
  4377.  
  4378.   /* PREFIX_VEX_0F2C */
  4379.   {
  4380.     { Bad_Opcode },
  4381.     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
  4382.     { Bad_Opcode },
  4383.     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
  4384.   },
  4385.  
  4386.   /* PREFIX_VEX_0F2D */
  4387.   {
  4388.     { Bad_Opcode },
  4389.     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
  4390.     { Bad_Opcode },
  4391.     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
  4392.   },
  4393.  
  4394.   /* PREFIX_VEX_0F2E */
  4395.   {
  4396.     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
  4397.     { Bad_Opcode },
  4398.     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
  4399.   },
  4400.  
  4401.   /* PREFIX_VEX_0F2F */
  4402.   {
  4403.     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
  4404.     { Bad_Opcode },
  4405.     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
  4406.   },
  4407.  
  4408.   /* PREFIX_VEX_0F41 */
  4409.   {
  4410.     { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
  4411.   },
  4412.  
  4413.   /* PREFIX_VEX_0F42 */
  4414.   {
  4415.     { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
  4416.   },
  4417.  
  4418.   /* PREFIX_VEX_0F44 */
  4419.   {
  4420.     { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
  4421.   },
  4422.  
  4423.   /* PREFIX_VEX_0F45 */
  4424.   {
  4425.     { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
  4426.   },
  4427.  
  4428.   /* PREFIX_VEX_0F46 */
  4429.   {
  4430.     { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
  4431.   },
  4432.  
  4433.   /* PREFIX_VEX_0F47 */
  4434.   {
  4435.     { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
  4436.   },
  4437.  
  4438.   /* PREFIX_VEX_0F4B */
  4439.   {
  4440.     { Bad_Opcode },
  4441.     { Bad_Opcode },
  4442.     { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
  4443.   },
  4444.  
  4445.   /* PREFIX_VEX_0F51 */
  4446.   {
  4447.     { VEX_W_TABLE (VEX_W_0F51_P_0) },
  4448.     { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
  4449.     { VEX_W_TABLE (VEX_W_0F51_P_2) },
  4450.     { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
  4451.   },
  4452.  
  4453.   /* PREFIX_VEX_0F52 */
  4454.   {
  4455.     { VEX_W_TABLE (VEX_W_0F52_P_0) },
  4456.     { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
  4457.   },
  4458.  
  4459.   /* PREFIX_VEX_0F53 */
  4460.   {
  4461.     { VEX_W_TABLE (VEX_W_0F53_P_0) },
  4462.     { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
  4463.   },
  4464.  
  4465.   /* PREFIX_VEX_0F58 */
  4466.   {
  4467.     { VEX_W_TABLE (VEX_W_0F58_P_0) },
  4468.     { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
  4469.     { VEX_W_TABLE (VEX_W_0F58_P_2) },
  4470.     { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
  4471.   },
  4472.  
  4473.   /* PREFIX_VEX_0F59 */
  4474.   {
  4475.     { VEX_W_TABLE (VEX_W_0F59_P_0) },
  4476.     { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
  4477.     { VEX_W_TABLE (VEX_W_0F59_P_2) },
  4478.     { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
  4479.   },
  4480.  
  4481.   /* PREFIX_VEX_0F5A */
  4482.   {
  4483.     { VEX_W_TABLE (VEX_W_0F5A_P_0) },
  4484.     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
  4485.     { "vcvtpd2ps%XY", { XMM, EXx } },
  4486.     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
  4487.   },
  4488.  
  4489.   /* PREFIX_VEX_0F5B */
  4490.   {
  4491.     { VEX_W_TABLE (VEX_W_0F5B_P_0) },
  4492.     { VEX_W_TABLE (VEX_W_0F5B_P_1) },
  4493.     { VEX_W_TABLE (VEX_W_0F5B_P_2) },
  4494.   },
  4495.  
  4496.   /* PREFIX_VEX_0F5C */
  4497.   {
  4498.     { VEX_W_TABLE (VEX_W_0F5C_P_0) },
  4499.     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
  4500.     { VEX_W_TABLE (VEX_W_0F5C_P_2) },
  4501.     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
  4502.   },
  4503.  
  4504.   /* PREFIX_VEX_0F5D */
  4505.   {
  4506.     { VEX_W_TABLE (VEX_W_0F5D_P_0) },
  4507.     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
  4508.     { VEX_W_TABLE (VEX_W_0F5D_P_2) },
  4509.     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
  4510.   },
  4511.  
  4512.   /* PREFIX_VEX_0F5E */
  4513.   {
  4514.     { VEX_W_TABLE (VEX_W_0F5E_P_0) },
  4515.     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
  4516.     { VEX_W_TABLE (VEX_W_0F5E_P_2) },
  4517.     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
  4518.   },
  4519.  
  4520.   /* PREFIX_VEX_0F5F */
  4521.   {
  4522.     { VEX_W_TABLE (VEX_W_0F5F_P_0) },
  4523.     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
  4524.     { VEX_W_TABLE (VEX_W_0F5F_P_2) },
  4525.     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
  4526.   },
  4527.  
  4528.   /* PREFIX_VEX_0F60 */
  4529.   {
  4530.     { Bad_Opcode },
  4531.     { Bad_Opcode },
  4532.     { VEX_W_TABLE (VEX_W_0F60_P_2) },
  4533.   },
  4534.  
  4535.   /* PREFIX_VEX_0F61 */
  4536.   {
  4537.     { Bad_Opcode },
  4538.     { Bad_Opcode },
  4539.     { VEX_W_TABLE (VEX_W_0F61_P_2) },
  4540.   },
  4541.  
  4542.   /* PREFIX_VEX_0F62 */
  4543.   {
  4544.     { Bad_Opcode },
  4545.     { Bad_Opcode },
  4546.     { VEX_W_TABLE (VEX_W_0F62_P_2) },
  4547.   },
  4548.  
  4549.   /* PREFIX_VEX_0F63 */
  4550.   {
  4551.     { Bad_Opcode },
  4552.     { Bad_Opcode },
  4553.     { VEX_W_TABLE (VEX_W_0F63_P_2) },
  4554.   },
  4555.  
  4556.   /* PREFIX_VEX_0F64 */
  4557.   {
  4558.     { Bad_Opcode },
  4559.     { Bad_Opcode },
  4560.     { VEX_W_TABLE (VEX_W_0F64_P_2) },
  4561.   },
  4562.  
  4563.   /* PREFIX_VEX_0F65 */
  4564.   {
  4565.     { Bad_Opcode },
  4566.     { Bad_Opcode },
  4567.     { VEX_W_TABLE (VEX_W_0F65_P_2) },
  4568.   },
  4569.  
  4570.   /* PREFIX_VEX_0F66 */
  4571.   {
  4572.     { Bad_Opcode },
  4573.     { Bad_Opcode },
  4574.     { VEX_W_TABLE (VEX_W_0F66_P_2) },
  4575.   },
  4576.  
  4577.   /* PREFIX_VEX_0F67 */
  4578.   {
  4579.     { Bad_Opcode },
  4580.     { Bad_Opcode },
  4581.     { VEX_W_TABLE (VEX_W_0F67_P_2) },
  4582.   },
  4583.  
  4584.   /* PREFIX_VEX_0F68 */
  4585.   {
  4586.     { Bad_Opcode },
  4587.     { Bad_Opcode },
  4588.     { VEX_W_TABLE (VEX_W_0F68_P_2) },
  4589.   },
  4590.  
  4591.   /* PREFIX_VEX_0F69 */
  4592.   {
  4593.     { Bad_Opcode },
  4594.     { Bad_Opcode },
  4595.     { VEX_W_TABLE (VEX_W_0F69_P_2) },
  4596.   },
  4597.  
  4598.   /* PREFIX_VEX_0F6A */
  4599.   {
  4600.     { Bad_Opcode },
  4601.     { Bad_Opcode },
  4602.     { VEX_W_TABLE (VEX_W_0F6A_P_2) },
  4603.   },
  4604.  
  4605.   /* PREFIX_VEX_0F6B */
  4606.   {
  4607.     { Bad_Opcode },
  4608.     { Bad_Opcode },
  4609.     { VEX_W_TABLE (VEX_W_0F6B_P_2) },
  4610.   },
  4611.  
  4612.   /* PREFIX_VEX_0F6C */
  4613.   {
  4614.     { Bad_Opcode },
  4615.     { Bad_Opcode },
  4616.     { VEX_W_TABLE (VEX_W_0F6C_P_2) },
  4617.   },
  4618.  
  4619.   /* PREFIX_VEX_0F6D */
  4620.   {
  4621.     { Bad_Opcode },
  4622.     { Bad_Opcode },
  4623.     { VEX_W_TABLE (VEX_W_0F6D_P_2) },
  4624.   },
  4625.  
  4626.   /* PREFIX_VEX_0F6E */
  4627.   {
  4628.     { Bad_Opcode },
  4629.     { Bad_Opcode },
  4630.     { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
  4631.   },
  4632.  
  4633.   /* PREFIX_VEX_0F6F */
  4634.   {
  4635.     { Bad_Opcode },
  4636.     { VEX_W_TABLE (VEX_W_0F6F_P_1) },
  4637.     { VEX_W_TABLE (VEX_W_0F6F_P_2) },
  4638.   },
  4639.  
  4640.   /* PREFIX_VEX_0F70 */
  4641.   {
  4642.     { Bad_Opcode },
  4643.     { VEX_W_TABLE (VEX_W_0F70_P_1) },
  4644.     { VEX_W_TABLE (VEX_W_0F70_P_2) },
  4645.     { VEX_W_TABLE (VEX_W_0F70_P_3) },
  4646.   },
  4647.  
  4648.   /* PREFIX_VEX_0F71_REG_2 */
  4649.   {
  4650.     { Bad_Opcode },
  4651.     { Bad_Opcode },
  4652.     { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
  4653.   },
  4654.  
  4655.   /* PREFIX_VEX_0F71_REG_4 */
  4656.   {
  4657.     { Bad_Opcode },
  4658.     { Bad_Opcode },
  4659.     { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
  4660.   },
  4661.  
  4662.   /* PREFIX_VEX_0F71_REG_6 */
  4663.   {
  4664.     { Bad_Opcode },
  4665.     { Bad_Opcode },
  4666.     { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
  4667.   },
  4668.  
  4669.   /* PREFIX_VEX_0F72_REG_2 */
  4670.   {
  4671.     { Bad_Opcode },
  4672.     { Bad_Opcode },
  4673.     { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
  4674.   },
  4675.  
  4676.   /* PREFIX_VEX_0F72_REG_4 */
  4677.   {
  4678.     { Bad_Opcode },
  4679.     { Bad_Opcode },
  4680.     { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
  4681.   },
  4682.  
  4683.   /* PREFIX_VEX_0F72_REG_6 */
  4684.   {
  4685.     { Bad_Opcode },
  4686.     { Bad_Opcode },
  4687.     { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
  4688.   },
  4689.  
  4690.   /* PREFIX_VEX_0F73_REG_2 */
  4691.   {
  4692.     { Bad_Opcode },
  4693.     { Bad_Opcode },
  4694.     { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
  4695.   },
  4696.  
  4697.   /* PREFIX_VEX_0F73_REG_3 */
  4698.   {
  4699.     { Bad_Opcode },
  4700.     { Bad_Opcode },
  4701.     { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
  4702.   },
  4703.  
  4704.   /* PREFIX_VEX_0F73_REG_6 */
  4705.   {
  4706.     { Bad_Opcode },
  4707.     { Bad_Opcode },
  4708.     { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
  4709.   },
  4710.  
  4711.   /* PREFIX_VEX_0F73_REG_7 */
  4712.   {
  4713.     { Bad_Opcode },
  4714.     { Bad_Opcode },
  4715.     { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
  4716.   },
  4717.  
  4718.   /* PREFIX_VEX_0F74 */
  4719.   {
  4720.     { Bad_Opcode },
  4721.     { Bad_Opcode },
  4722.     { VEX_W_TABLE (VEX_W_0F74_P_2) },
  4723.   },
  4724.  
  4725.   /* PREFIX_VEX_0F75 */
  4726.   {
  4727.     { Bad_Opcode },
  4728.     { Bad_Opcode },
  4729.     { VEX_W_TABLE (VEX_W_0F75_P_2) },
  4730.   },
  4731.  
  4732.   /* PREFIX_VEX_0F76 */
  4733.   {
  4734.     { Bad_Opcode },
  4735.     { Bad_Opcode },
  4736.     { VEX_W_TABLE (VEX_W_0F76_P_2) },
  4737.   },
  4738.  
  4739.   /* PREFIX_VEX_0F77 */
  4740.   {
  4741.     { VEX_W_TABLE (VEX_W_0F77_P_0) },
  4742.   },
  4743.  
  4744.   /* PREFIX_VEX_0F7C */
  4745.   {
  4746.     { Bad_Opcode },
  4747.     { Bad_Opcode },
  4748.     { VEX_W_TABLE (VEX_W_0F7C_P_2) },
  4749.     { VEX_W_TABLE (VEX_W_0F7C_P_3) },
  4750.   },
  4751.  
  4752.   /* PREFIX_VEX_0F7D */
  4753.   {
  4754.     { Bad_Opcode },
  4755.     { Bad_Opcode },
  4756.     { VEX_W_TABLE (VEX_W_0F7D_P_2) },
  4757.     { VEX_W_TABLE (VEX_W_0F7D_P_3) },
  4758.   },
  4759.  
  4760.   /* PREFIX_VEX_0F7E */
  4761.   {
  4762.     { Bad_Opcode },
  4763.     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
  4764.     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
  4765.   },
  4766.  
  4767.   /* PREFIX_VEX_0F7F */
  4768.   {
  4769.     { Bad_Opcode },
  4770.     { VEX_W_TABLE (VEX_W_0F7F_P_1) },
  4771.     { VEX_W_TABLE (VEX_W_0F7F_P_2) },
  4772.   },
  4773.  
  4774.   /* PREFIX_VEX_0F90 */
  4775.   {
  4776.     { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
  4777.   },
  4778.  
  4779.   /* PREFIX_VEX_0F91 */
  4780.   {
  4781.     { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
  4782.   },
  4783.  
  4784.   /* PREFIX_VEX_0F92 */
  4785.   {
  4786.     { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
  4787.   },
  4788.  
  4789.   /* PREFIX_VEX_0F93 */
  4790.   {
  4791.     { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
  4792.   },
  4793.  
  4794.   /* PREFIX_VEX_0F98 */
  4795.   {
  4796.     { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
  4797.   },
  4798.  
  4799.   /* PREFIX_VEX_0FC2 */
  4800.   {
  4801.     { VEX_W_TABLE (VEX_W_0FC2_P_0) },
  4802.     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
  4803.     { VEX_W_TABLE (VEX_W_0FC2_P_2) },
  4804.     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
  4805.   },
  4806.  
  4807.   /* PREFIX_VEX_0FC4 */
  4808.   {
  4809.     { Bad_Opcode },
  4810.     { Bad_Opcode },
  4811.     { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
  4812.   },
  4813.  
  4814.   /* PREFIX_VEX_0FC5 */
  4815.   {
  4816.     { Bad_Opcode },
  4817.     { Bad_Opcode },
  4818.     { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
  4819.   },
  4820.  
  4821.   /* PREFIX_VEX_0FD0 */
  4822.   {
  4823.     { Bad_Opcode },
  4824.     { Bad_Opcode },
  4825.     { VEX_W_TABLE (VEX_W_0FD0_P_2) },
  4826.     { VEX_W_TABLE (VEX_W_0FD0_P_3) },
  4827.   },
  4828.  
  4829.   /* PREFIX_VEX_0FD1 */
  4830.   {
  4831.     { Bad_Opcode },
  4832.     { Bad_Opcode },
  4833.     { VEX_W_TABLE (VEX_W_0FD1_P_2) },
  4834.   },
  4835.  
  4836.   /* PREFIX_VEX_0FD2 */
  4837.   {
  4838.     { Bad_Opcode },
  4839.     { Bad_Opcode },
  4840.     { VEX_W_TABLE (VEX_W_0FD2_P_2) },
  4841.   },
  4842.  
  4843.   /* PREFIX_VEX_0FD3 */
  4844.   {
  4845.     { Bad_Opcode },
  4846.     { Bad_Opcode },
  4847.     { VEX_W_TABLE (VEX_W_0FD3_P_2) },
  4848.   },
  4849.  
  4850.   /* PREFIX_VEX_0FD4 */
  4851.   {
  4852.     { Bad_Opcode },
  4853.     { Bad_Opcode },
  4854.     { VEX_W_TABLE (VEX_W_0FD4_P_2) },
  4855.   },
  4856.  
  4857.   /* PREFIX_VEX_0FD5 */
  4858.   {
  4859.     { Bad_Opcode },
  4860.     { Bad_Opcode },
  4861.     { VEX_W_TABLE (VEX_W_0FD5_P_2) },
  4862.   },
  4863.  
  4864.   /* PREFIX_VEX_0FD6 */
  4865.   {
  4866.     { Bad_Opcode },
  4867.     { Bad_Opcode },
  4868.     { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
  4869.   },
  4870.  
  4871.   /* PREFIX_VEX_0FD7 */
  4872.   {
  4873.     { Bad_Opcode },
  4874.     { Bad_Opcode },
  4875.     { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
  4876.   },
  4877.  
  4878.   /* PREFIX_VEX_0FD8 */
  4879.   {
  4880.     { Bad_Opcode },
  4881.     { Bad_Opcode },
  4882.     { VEX_W_TABLE (VEX_W_0FD8_P_2) },
  4883.   },
  4884.  
  4885.   /* PREFIX_VEX_0FD9 */
  4886.   {
  4887.     { Bad_Opcode },
  4888.     { Bad_Opcode },
  4889.     { VEX_W_TABLE (VEX_W_0FD9_P_2) },
  4890.   },
  4891.  
  4892.   /* PREFIX_VEX_0FDA */
  4893.   {
  4894.     { Bad_Opcode },
  4895.     { Bad_Opcode },
  4896.     { VEX_W_TABLE (VEX_W_0FDA_P_2) },
  4897.   },
  4898.  
  4899.   /* PREFIX_VEX_0FDB */
  4900.   {
  4901.     { Bad_Opcode },
  4902.     { Bad_Opcode },
  4903.     { VEX_W_TABLE (VEX_W_0FDB_P_2) },
  4904.   },
  4905.  
  4906.   /* PREFIX_VEX_0FDC */
  4907.   {
  4908.     { Bad_Opcode },
  4909.     { Bad_Opcode },
  4910.     { VEX_W_TABLE (VEX_W_0FDC_P_2) },
  4911.   },
  4912.  
  4913.   /* PREFIX_VEX_0FDD */
  4914.   {
  4915.     { Bad_Opcode },
  4916.     { Bad_Opcode },
  4917.     { VEX_W_TABLE (VEX_W_0FDD_P_2) },
  4918.   },
  4919.  
  4920.   /* PREFIX_VEX_0FDE */
  4921.   {
  4922.     { Bad_Opcode },
  4923.     { Bad_Opcode },
  4924.     { VEX_W_TABLE (VEX_W_0FDE_P_2) },
  4925.   },
  4926.  
  4927.   /* PREFIX_VEX_0FDF */
  4928.   {
  4929.     { Bad_Opcode },
  4930.     { Bad_Opcode },
  4931.     { VEX_W_TABLE (VEX_W_0FDF_P_2) },
  4932.   },
  4933.  
  4934.   /* PREFIX_VEX_0FE0 */
  4935.   {
  4936.     { Bad_Opcode },
  4937.     { Bad_Opcode },
  4938.     { VEX_W_TABLE (VEX_W_0FE0_P_2) },
  4939.   },
  4940.  
  4941.   /* PREFIX_VEX_0FE1 */
  4942.   {
  4943.     { Bad_Opcode },
  4944.     { Bad_Opcode },
  4945.     { VEX_W_TABLE (VEX_W_0FE1_P_2) },
  4946.   },
  4947.  
  4948.   /* PREFIX_VEX_0FE2 */
  4949.   {
  4950.     { Bad_Opcode },
  4951.     { Bad_Opcode },
  4952.     { VEX_W_TABLE (VEX_W_0FE2_P_2) },
  4953.   },
  4954.  
  4955.   /* PREFIX_VEX_0FE3 */
  4956.   {
  4957.     { Bad_Opcode },
  4958.     { Bad_Opcode },
  4959.     { VEX_W_TABLE (VEX_W_0FE3_P_2) },
  4960.   },
  4961.  
  4962.   /* PREFIX_VEX_0FE4 */
  4963.   {
  4964.     { Bad_Opcode },
  4965.     { Bad_Opcode },
  4966.     { VEX_W_TABLE (VEX_W_0FE4_P_2) },
  4967.   },
  4968.  
  4969.   /* PREFIX_VEX_0FE5 */
  4970.   {
  4971.     { Bad_Opcode },
  4972.     { Bad_Opcode },
  4973.     { VEX_W_TABLE (VEX_W_0FE5_P_2) },
  4974.   },
  4975.  
  4976.   /* PREFIX_VEX_0FE6 */
  4977.   {
  4978.     { Bad_Opcode },
  4979.     { VEX_W_TABLE (VEX_W_0FE6_P_1) },
  4980.     { VEX_W_TABLE (VEX_W_0FE6_P_2) },
  4981.     { VEX_W_TABLE (VEX_W_0FE6_P_3) },
  4982.   },
  4983.  
  4984.   /* PREFIX_VEX_0FE7 */
  4985.   {
  4986.     { Bad_Opcode },
  4987.     { Bad_Opcode },
  4988.     { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
  4989.   },
  4990.  
  4991.   /* PREFIX_VEX_0FE8 */
  4992.   {
  4993.     { Bad_Opcode },
  4994.     { Bad_Opcode },
  4995.     { VEX_W_TABLE (VEX_W_0FE8_P_2) },
  4996.   },
  4997.  
  4998.   /* PREFIX_VEX_0FE9 */
  4999.   {
  5000.     { Bad_Opcode },
  5001.     { Bad_Opcode },
  5002.     { VEX_W_TABLE (VEX_W_0FE9_P_2) },
  5003.   },
  5004.  
  5005.   /* PREFIX_VEX_0FEA */
  5006.   {
  5007.     { Bad_Opcode },
  5008.     { Bad_Opcode },
  5009.     { VEX_W_TABLE (VEX_W_0FEA_P_2) },
  5010.   },
  5011.  
  5012.   /* PREFIX_VEX_0FEB */
  5013.   {
  5014.     { Bad_Opcode },
  5015.     { Bad_Opcode },
  5016.     { VEX_W_TABLE (VEX_W_0FEB_P_2) },
  5017.   },
  5018.  
  5019.   /* PREFIX_VEX_0FEC */
  5020.   {
  5021.     { Bad_Opcode },
  5022.     { Bad_Opcode },
  5023.     { VEX_W_TABLE (VEX_W_0FEC_P_2) },
  5024.   },
  5025.  
  5026.   /* PREFIX_VEX_0FED */
  5027.   {
  5028.     { Bad_Opcode },
  5029.     { Bad_Opcode },
  5030.     { VEX_W_TABLE (VEX_W_0FED_P_2) },
  5031.   },
  5032.  
  5033.   /* PREFIX_VEX_0FEE */
  5034.   {
  5035.     { Bad_Opcode },
  5036.     { Bad_Opcode },
  5037.     { VEX_W_TABLE (VEX_W_0FEE_P_2) },
  5038.   },
  5039.  
  5040.   /* PREFIX_VEX_0FEF */
  5041.   {
  5042.     { Bad_Opcode },
  5043.     { Bad_Opcode },
  5044.     { VEX_W_TABLE (VEX_W_0FEF_P_2) },
  5045.   },
  5046.  
  5047.   /* PREFIX_VEX_0FF0 */
  5048.   {
  5049.     { Bad_Opcode },
  5050.     { Bad_Opcode },
  5051.     { Bad_Opcode },
  5052.     { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
  5053.   },
  5054.  
  5055.   /* PREFIX_VEX_0FF1 */
  5056.   {
  5057.     { Bad_Opcode },
  5058.     { Bad_Opcode },
  5059.     { VEX_W_TABLE (VEX_W_0FF1_P_2) },
  5060.   },
  5061.  
  5062.   /* PREFIX_VEX_0FF2 */
  5063.   {
  5064.     { Bad_Opcode },
  5065.     { Bad_Opcode },
  5066.     { VEX_W_TABLE (VEX_W_0FF2_P_2) },
  5067.   },
  5068.  
  5069.   /* PREFIX_VEX_0FF3 */
  5070.   {
  5071.     { Bad_Opcode },
  5072.     { Bad_Opcode },
  5073.     { VEX_W_TABLE (VEX_W_0FF3_P_2) },
  5074.   },
  5075.  
  5076.   /* PREFIX_VEX_0FF4 */
  5077.   {
  5078.     { Bad_Opcode },
  5079.     { Bad_Opcode },
  5080.     { VEX_W_TABLE (VEX_W_0FF4_P_2) },
  5081.   },
  5082.  
  5083.   /* PREFIX_VEX_0FF5 */
  5084.   {
  5085.     { Bad_Opcode },
  5086.     { Bad_Opcode },
  5087.     { VEX_W_TABLE (VEX_W_0FF5_P_2) },
  5088.   },
  5089.  
  5090.   /* PREFIX_VEX_0FF6 */
  5091.   {
  5092.     { Bad_Opcode },
  5093.     { Bad_Opcode },
  5094.     { VEX_W_TABLE (VEX_W_0FF6_P_2) },
  5095.   },
  5096.  
  5097.   /* PREFIX_VEX_0FF7 */
  5098.   {
  5099.     { Bad_Opcode },
  5100.     { Bad_Opcode },
  5101.     { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
  5102.   },
  5103.  
  5104.   /* PREFIX_VEX_0FF8 */
  5105.   {
  5106.     { Bad_Opcode },
  5107.     { Bad_Opcode },
  5108.     { VEX_W_TABLE (VEX_W_0FF8_P_2) },
  5109.   },
  5110.  
  5111.   /* PREFIX_VEX_0FF9 */
  5112.   {
  5113.     { Bad_Opcode },
  5114.     { Bad_Opcode },
  5115.     { VEX_W_TABLE (VEX_W_0FF9_P_2) },
  5116.   },
  5117.  
  5118.   /* PREFIX_VEX_0FFA */
  5119.   {
  5120.     { Bad_Opcode },
  5121.     { Bad_Opcode },
  5122.     { VEX_W_TABLE (VEX_W_0FFA_P_2) },
  5123.   },
  5124.  
  5125.   /* PREFIX_VEX_0FFB */
  5126.   {
  5127.     { Bad_Opcode },
  5128.     { Bad_Opcode },
  5129.     { VEX_W_TABLE (VEX_W_0FFB_P_2) },
  5130.   },
  5131.  
  5132.   /* PREFIX_VEX_0FFC */
  5133.   {
  5134.     { Bad_Opcode },
  5135.     { Bad_Opcode },
  5136.     { VEX_W_TABLE (VEX_W_0FFC_P_2) },
  5137.   },
  5138.  
  5139.   /* PREFIX_VEX_0FFD */
  5140.   {
  5141.     { Bad_Opcode },
  5142.     { Bad_Opcode },
  5143.     { VEX_W_TABLE (VEX_W_0FFD_P_2) },
  5144.   },
  5145.  
  5146.   /* PREFIX_VEX_0FFE */
  5147.   {
  5148.     { Bad_Opcode },
  5149.     { Bad_Opcode },
  5150.     { VEX_W_TABLE (VEX_W_0FFE_P_2) },
  5151.   },
  5152.  
  5153.   /* PREFIX_VEX_0F3800 */
  5154.   {
  5155.     { Bad_Opcode },
  5156.     { Bad_Opcode },
  5157.     { VEX_W_TABLE (VEX_W_0F3800_P_2) },
  5158.   },
  5159.  
  5160.   /* PREFIX_VEX_0F3801 */
  5161.   {
  5162.     { Bad_Opcode },
  5163.     { Bad_Opcode },
  5164.     { VEX_W_TABLE (VEX_W_0F3801_P_2) },
  5165.   },
  5166.  
  5167.   /* PREFIX_VEX_0F3802 */
  5168.   {
  5169.     { Bad_Opcode },
  5170.     { Bad_Opcode },
  5171.     { VEX_W_TABLE (VEX_W_0F3802_P_2) },
  5172.   },
  5173.  
  5174.   /* PREFIX_VEX_0F3803 */
  5175.   {
  5176.     { Bad_Opcode },
  5177.     { Bad_Opcode },
  5178.     { VEX_W_TABLE (VEX_W_0F3803_P_2) },
  5179.   },
  5180.  
  5181.   /* PREFIX_VEX_0F3804 */
  5182.   {
  5183.     { Bad_Opcode },
  5184.     { Bad_Opcode },
  5185.     { VEX_W_TABLE (VEX_W_0F3804_P_2) },
  5186.   },
  5187.  
  5188.   /* PREFIX_VEX_0F3805 */
  5189.   {
  5190.     { Bad_Opcode },
  5191.     { Bad_Opcode },
  5192.     { VEX_W_TABLE (VEX_W_0F3805_P_2) },
  5193.   },
  5194.  
  5195.   /* PREFIX_VEX_0F3806 */
  5196.   {
  5197.     { Bad_Opcode },
  5198.     { Bad_Opcode },
  5199.     { VEX_W_TABLE (VEX_W_0F3806_P_2) },
  5200.   },
  5201.  
  5202.   /* PREFIX_VEX_0F3807 */
  5203.   {
  5204.     { Bad_Opcode },
  5205.     { Bad_Opcode },
  5206.     { VEX_W_TABLE (VEX_W_0F3807_P_2) },
  5207.   },
  5208.  
  5209.   /* PREFIX_VEX_0F3808 */
  5210.   {
  5211.     { Bad_Opcode },
  5212.     { Bad_Opcode },
  5213.     { VEX_W_TABLE (VEX_W_0F3808_P_2) },
  5214.   },
  5215.  
  5216.   /* PREFIX_VEX_0F3809 */
  5217.   {
  5218.     { Bad_Opcode },
  5219.     { Bad_Opcode },
  5220.     { VEX_W_TABLE (VEX_W_0F3809_P_2) },
  5221.   },
  5222.  
  5223.   /* PREFIX_VEX_0F380A */
  5224.   {
  5225.     { Bad_Opcode },
  5226.     { Bad_Opcode },
  5227.     { VEX_W_TABLE (VEX_W_0F380A_P_2) },
  5228.   },
  5229.  
  5230.   /* PREFIX_VEX_0F380B */
  5231.   {
  5232.     { Bad_Opcode },
  5233.     { Bad_Opcode },
  5234.     { VEX_W_TABLE (VEX_W_0F380B_P_2) },
  5235.   },
  5236.  
  5237.   /* PREFIX_VEX_0F380C */
  5238.   {
  5239.     { Bad_Opcode },
  5240.     { Bad_Opcode },
  5241.     { VEX_W_TABLE (VEX_W_0F380C_P_2) },
  5242.   },
  5243.  
  5244.   /* PREFIX_VEX_0F380D */
  5245.   {
  5246.     { Bad_Opcode },
  5247.     { Bad_Opcode },
  5248.     { VEX_W_TABLE (VEX_W_0F380D_P_2) },
  5249.   },
  5250.  
  5251.   /* PREFIX_VEX_0F380E */
  5252.   {
  5253.     { Bad_Opcode },
  5254.     { Bad_Opcode },
  5255.     { VEX_W_TABLE (VEX_W_0F380E_P_2) },
  5256.   },
  5257.  
  5258.   /* PREFIX_VEX_0F380F */
  5259.   {
  5260.     { Bad_Opcode },
  5261.     { Bad_Opcode },
  5262.     { VEX_W_TABLE (VEX_W_0F380F_P_2) },
  5263.   },
  5264.  
  5265.   /* PREFIX_VEX_0F3813 */
  5266.   {
  5267.     { Bad_Opcode },
  5268.     { Bad_Opcode },
  5269.     { "vcvtph2ps", { XM, EXxmmq } },
  5270.   },
  5271.  
  5272.   /* PREFIX_VEX_0F3816 */
  5273.   {
  5274.     { Bad_Opcode },
  5275.     { Bad_Opcode },
  5276.     { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
  5277.   },
  5278.  
  5279.   /* PREFIX_VEX_0F3817 */
  5280.   {
  5281.     { Bad_Opcode },
  5282.     { Bad_Opcode },
  5283.     { VEX_W_TABLE (VEX_W_0F3817_P_2) },
  5284.   },
  5285.  
  5286.   /* PREFIX_VEX_0F3818 */
  5287.   {
  5288.     { Bad_Opcode },
  5289.     { Bad_Opcode },
  5290.     { VEX_W_TABLE (VEX_W_0F3818_P_2) },
  5291.   },
  5292.  
  5293.   /* PREFIX_VEX_0F3819 */
  5294.   {
  5295.     { Bad_Opcode },
  5296.     { Bad_Opcode },
  5297.     { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
  5298.   },
  5299.  
  5300.   /* PREFIX_VEX_0F381A */
  5301.   {
  5302.     { Bad_Opcode },
  5303.     { Bad_Opcode },
  5304.     { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
  5305.   },
  5306.  
  5307.   /* PREFIX_VEX_0F381C */
  5308.   {
  5309.     { Bad_Opcode },
  5310.     { Bad_Opcode },
  5311.     { VEX_W_TABLE (VEX_W_0F381C_P_2) },
  5312.   },
  5313.  
  5314.   /* PREFIX_VEX_0F381D */
  5315.   {
  5316.     { Bad_Opcode },
  5317.     { Bad_Opcode },
  5318.     { VEX_W_TABLE (VEX_W_0F381D_P_2) },
  5319.   },
  5320.  
  5321.   /* PREFIX_VEX_0F381E */
  5322.   {
  5323.     { Bad_Opcode },
  5324.     { Bad_Opcode },
  5325.     { VEX_W_TABLE (VEX_W_0F381E_P_2) },
  5326.   },
  5327.  
  5328.   /* PREFIX_VEX_0F3820 */
  5329.   {
  5330.     { Bad_Opcode },
  5331.     { Bad_Opcode },
  5332.     { VEX_W_TABLE (VEX_W_0F3820_P_2) },
  5333.   },
  5334.  
  5335.   /* PREFIX_VEX_0F3821 */
  5336.   {
  5337.     { Bad_Opcode },
  5338.     { Bad_Opcode },
  5339.     { VEX_W_TABLE (VEX_W_0F3821_P_2) },
  5340.   },
  5341.  
  5342.   /* PREFIX_VEX_0F3822 */
  5343.   {
  5344.     { Bad_Opcode },
  5345.     { Bad_Opcode },
  5346.     { VEX_W_TABLE (VEX_W_0F3822_P_2) },
  5347.   },
  5348.  
  5349.   /* PREFIX_VEX_0F3823 */
  5350.   {
  5351.     { Bad_Opcode },
  5352.     { Bad_Opcode },
  5353.     { VEX_W_TABLE (VEX_W_0F3823_P_2) },
  5354.   },
  5355.  
  5356.   /* PREFIX_VEX_0F3824 */
  5357.   {
  5358.     { Bad_Opcode },
  5359.     { Bad_Opcode },
  5360.     { VEX_W_TABLE (VEX_W_0F3824_P_2) },
  5361.   },
  5362.  
  5363.   /* PREFIX_VEX_0F3825 */
  5364.   {
  5365.     { Bad_Opcode },
  5366.     { Bad_Opcode },
  5367.     { VEX_W_TABLE (VEX_W_0F3825_P_2) },
  5368.   },
  5369.  
  5370.   /* PREFIX_VEX_0F3828 */
  5371.   {
  5372.     { Bad_Opcode },
  5373.     { Bad_Opcode },
  5374.     { VEX_W_TABLE (VEX_W_0F3828_P_2) },
  5375.   },
  5376.  
  5377.   /* PREFIX_VEX_0F3829 */
  5378.   {
  5379.     { Bad_Opcode },
  5380.     { Bad_Opcode },
  5381.     { VEX_W_TABLE (VEX_W_0F3829_P_2) },
  5382.   },
  5383.  
  5384.   /* PREFIX_VEX_0F382A */
  5385.   {
  5386.     { Bad_Opcode },
  5387.     { Bad_Opcode },
  5388.     { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
  5389.   },
  5390.  
  5391.   /* PREFIX_VEX_0F382B */
  5392.   {
  5393.     { Bad_Opcode },
  5394.     { Bad_Opcode },
  5395.     { VEX_W_TABLE (VEX_W_0F382B_P_2) },
  5396.   },
  5397.  
  5398.   /* PREFIX_VEX_0F382C */
  5399.   {
  5400.     { Bad_Opcode },
  5401.     { Bad_Opcode },
  5402.      { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
  5403.   },
  5404.  
  5405.   /* PREFIX_VEX_0F382D */
  5406.   {
  5407.     { Bad_Opcode },
  5408.     { Bad_Opcode },
  5409.      { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
  5410.   },
  5411.  
  5412.   /* PREFIX_VEX_0F382E */
  5413.   {
  5414.     { Bad_Opcode },
  5415.     { Bad_Opcode },
  5416.      { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
  5417.   },
  5418.  
  5419.   /* PREFIX_VEX_0F382F */
  5420.   {
  5421.     { Bad_Opcode },
  5422.     { Bad_Opcode },
  5423.      { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
  5424.   },
  5425.  
  5426.   /* PREFIX_VEX_0F3830 */
  5427.   {
  5428.     { Bad_Opcode },
  5429.     { Bad_Opcode },
  5430.     { VEX_W_TABLE (VEX_W_0F3830_P_2) },
  5431.   },
  5432.  
  5433.   /* PREFIX_VEX_0F3831 */
  5434.   {
  5435.     { Bad_Opcode },
  5436.     { Bad_Opcode },
  5437.     { VEX_W_TABLE (VEX_W_0F3831_P_2) },
  5438.   },
  5439.  
  5440.   /* PREFIX_VEX_0F3832 */
  5441.   {
  5442.     { Bad_Opcode },
  5443.     { Bad_Opcode },
  5444.     { VEX_W_TABLE (VEX_W_0F3832_P_2) },
  5445.   },
  5446.  
  5447.   /* PREFIX_VEX_0F3833 */
  5448.   {
  5449.     { Bad_Opcode },
  5450.     { Bad_Opcode },
  5451.     { VEX_W_TABLE (VEX_W_0F3833_P_2) },
  5452.   },
  5453.  
  5454.   /* PREFIX_VEX_0F3834 */
  5455.   {
  5456.     { Bad_Opcode },
  5457.     { Bad_Opcode },
  5458.     { VEX_W_TABLE (VEX_W_0F3834_P_2) },
  5459.   },
  5460.  
  5461.   /* PREFIX_VEX_0F3835 */
  5462.   {
  5463.     { Bad_Opcode },
  5464.     { Bad_Opcode },
  5465.     { VEX_W_TABLE (VEX_W_0F3835_P_2) },
  5466.   },
  5467.  
  5468.   /* PREFIX_VEX_0F3836 */
  5469.   {
  5470.     { Bad_Opcode },
  5471.     { Bad_Opcode },
  5472.     { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
  5473.   },
  5474.  
  5475.   /* PREFIX_VEX_0F3837 */
  5476.   {
  5477.     { Bad_Opcode },
  5478.     { Bad_Opcode },
  5479.     { VEX_W_TABLE (VEX_W_0F3837_P_2) },
  5480.   },
  5481.  
  5482.   /* PREFIX_VEX_0F3838 */
  5483.   {
  5484.     { Bad_Opcode },
  5485.     { Bad_Opcode },
  5486.     { VEX_W_TABLE (VEX_W_0F3838_P_2) },
  5487.   },
  5488.  
  5489.   /* PREFIX_VEX_0F3839 */
  5490.   {
  5491.     { Bad_Opcode },
  5492.     { Bad_Opcode },
  5493.     { VEX_W_TABLE (VEX_W_0F3839_P_2) },
  5494.   },
  5495.  
  5496.   /* PREFIX_VEX_0F383A */
  5497.   {
  5498.     { Bad_Opcode },
  5499.     { Bad_Opcode },
  5500.     { VEX_W_TABLE (VEX_W_0F383A_P_2) },
  5501.   },
  5502.  
  5503.   /* PREFIX_VEX_0F383B */
  5504.   {
  5505.     { Bad_Opcode },
  5506.     { Bad_Opcode },
  5507.     { VEX_W_TABLE (VEX_W_0F383B_P_2) },
  5508.   },
  5509.  
  5510.   /* PREFIX_VEX_0F383C */
  5511.   {
  5512.     { Bad_Opcode },
  5513.     { Bad_Opcode },
  5514.     { VEX_W_TABLE (VEX_W_0F383C_P_2) },
  5515.   },
  5516.  
  5517.   /* PREFIX_VEX_0F383D */
  5518.   {
  5519.     { Bad_Opcode },
  5520.     { Bad_Opcode },
  5521.     { VEX_W_TABLE (VEX_W_0F383D_P_2) },
  5522.   },
  5523.  
  5524.   /* PREFIX_VEX_0F383E */
  5525.   {
  5526.     { Bad_Opcode },
  5527.     { Bad_Opcode },
  5528.     { VEX_W_TABLE (VEX_W_0F383E_P_2) },
  5529.   },
  5530.  
  5531.   /* PREFIX_VEX_0F383F */
  5532.   {
  5533.     { Bad_Opcode },
  5534.     { Bad_Opcode },
  5535.     { VEX_W_TABLE (VEX_W_0F383F_P_2) },
  5536.   },
  5537.  
  5538.   /* PREFIX_VEX_0F3840 */
  5539.   {
  5540.     { Bad_Opcode },
  5541.     { Bad_Opcode },
  5542.     { VEX_W_TABLE (VEX_W_0F3840_P_2) },
  5543.   },
  5544.  
  5545.   /* PREFIX_VEX_0F3841 */
  5546.   {
  5547.     { Bad_Opcode },
  5548.     { Bad_Opcode },
  5549.     { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
  5550.   },
  5551.  
  5552.   /* PREFIX_VEX_0F3845 */
  5553.   {
  5554.     { Bad_Opcode },
  5555.     { Bad_Opcode },
  5556.     { "vpsrlv%LW", { XM, Vex, EXx } },
  5557.   },
  5558.  
  5559.   /* PREFIX_VEX_0F3846 */
  5560.   {
  5561.     { Bad_Opcode },
  5562.     { Bad_Opcode },
  5563.     { VEX_W_TABLE (VEX_W_0F3846_P_2) },
  5564.   },
  5565.  
  5566.   /* PREFIX_VEX_0F3847 */
  5567.   {
  5568.     { Bad_Opcode },
  5569.     { Bad_Opcode },
  5570.     { "vpsllv%LW", { XM, Vex, EXx } },
  5571.   },
  5572.  
  5573.   /* PREFIX_VEX_0F3858 */
  5574.   {
  5575.     { Bad_Opcode },
  5576.     { Bad_Opcode },
  5577.     { VEX_W_TABLE (VEX_W_0F3858_P_2) },
  5578.   },
  5579.  
  5580.   /* PREFIX_VEX_0F3859 */
  5581.   {
  5582.     { Bad_Opcode },
  5583.     { Bad_Opcode },
  5584.     { VEX_W_TABLE (VEX_W_0F3859_P_2) },
  5585.   },
  5586.  
  5587.   /* PREFIX_VEX_0F385A */
  5588.   {
  5589.     { Bad_Opcode },
  5590.     { Bad_Opcode },
  5591.     { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
  5592.   },
  5593.  
  5594.   /* PREFIX_VEX_0F3878 */
  5595.   {
  5596.     { Bad_Opcode },
  5597.     { Bad_Opcode },
  5598.     { VEX_W_TABLE (VEX_W_0F3878_P_2) },
  5599.   },
  5600.  
  5601.   /* PREFIX_VEX_0F3879 */
  5602.   {
  5603.     { Bad_Opcode },
  5604.     { Bad_Opcode },
  5605.     { VEX_W_TABLE (VEX_W_0F3879_P_2) },
  5606.   },
  5607.  
  5608.   /* PREFIX_VEX_0F388C */
  5609.   {
  5610.     { Bad_Opcode },
  5611.     { Bad_Opcode },
  5612.     { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
  5613.   },
  5614.  
  5615.   /* PREFIX_VEX_0F388E */
  5616.   {
  5617.     { Bad_Opcode },
  5618.     { Bad_Opcode },
  5619.     { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
  5620.   },
  5621.  
  5622.   /* PREFIX_VEX_0F3890 */
  5623.   {
  5624.     { Bad_Opcode },
  5625.     { Bad_Opcode },
  5626.     { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
  5627.   },
  5628.  
  5629.   /* PREFIX_VEX_0F3891 */
  5630.   {
  5631.     { Bad_Opcode },
  5632.     { Bad_Opcode },
  5633.     { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
  5634.   },
  5635.  
  5636.   /* PREFIX_VEX_0F3892 */
  5637.   {
  5638.     { Bad_Opcode },
  5639.     { Bad_Opcode },
  5640.     { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
  5641.   },
  5642.  
  5643.   /* PREFIX_VEX_0F3893 */
  5644.   {
  5645.     { Bad_Opcode },
  5646.     { Bad_Opcode },
  5647.     { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
  5648.   },
  5649.  
  5650.   /* PREFIX_VEX_0F3896 */
  5651.   {
  5652.     { Bad_Opcode },
  5653.     { Bad_Opcode },
  5654.     { "vfmaddsub132p%XW", { XM, Vex, EXx } },
  5655.   },
  5656.  
  5657.   /* PREFIX_VEX_0F3897 */
  5658.   {
  5659.     { Bad_Opcode },
  5660.     { Bad_Opcode },
  5661.     { "vfmsubadd132p%XW", { XM, Vex, EXx } },
  5662.   },
  5663.  
  5664.   /* PREFIX_VEX_0F3898 */
  5665.   {
  5666.     { Bad_Opcode },
  5667.     { Bad_Opcode },
  5668.     { "vfmadd132p%XW", { XM, Vex, EXx } },
  5669.   },
  5670.  
  5671.   /* PREFIX_VEX_0F3899 */
  5672.   {
  5673.     { Bad_Opcode },
  5674.     { Bad_Opcode },
  5675.     { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5676.   },
  5677.  
  5678.   /* PREFIX_VEX_0F389A */
  5679.   {
  5680.     { Bad_Opcode },
  5681.     { Bad_Opcode },
  5682.     { "vfmsub132p%XW", { XM, Vex, EXx } },
  5683.   },
  5684.  
  5685.   /* PREFIX_VEX_0F389B */
  5686.   {
  5687.     { Bad_Opcode },
  5688.     { Bad_Opcode },
  5689.     { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5690.   },
  5691.  
  5692.   /* PREFIX_VEX_0F389C */
  5693.   {
  5694.     { Bad_Opcode },
  5695.     { Bad_Opcode },
  5696.     { "vfnmadd132p%XW", { XM, Vex, EXx } },
  5697.   },
  5698.  
  5699.   /* PREFIX_VEX_0F389D */
  5700.   {
  5701.     { Bad_Opcode },
  5702.     { Bad_Opcode },
  5703.     { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5704.   },
  5705.  
  5706.   /* PREFIX_VEX_0F389E */
  5707.   {
  5708.     { Bad_Opcode },
  5709.     { Bad_Opcode },
  5710.     { "vfnmsub132p%XW", { XM, Vex, EXx } },
  5711.   },
  5712.  
  5713.   /* PREFIX_VEX_0F389F */
  5714.   {
  5715.     { Bad_Opcode },
  5716.     { Bad_Opcode },
  5717.     { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5718.   },
  5719.  
  5720.   /* PREFIX_VEX_0F38A6 */
  5721.   {
  5722.     { Bad_Opcode },
  5723.     { Bad_Opcode },
  5724.     { "vfmaddsub213p%XW", { XM, Vex, EXx } },
  5725.     { Bad_Opcode },
  5726.   },
  5727.  
  5728.   /* PREFIX_VEX_0F38A7 */
  5729.   {
  5730.     { Bad_Opcode },
  5731.     { Bad_Opcode },
  5732.     { "vfmsubadd213p%XW", { XM, Vex, EXx } },
  5733.   },
  5734.  
  5735.   /* PREFIX_VEX_0F38A8 */
  5736.   {
  5737.     { Bad_Opcode },
  5738.     { Bad_Opcode },
  5739.     { "vfmadd213p%XW", { XM, Vex, EXx } },
  5740.   },
  5741.  
  5742.   /* PREFIX_VEX_0F38A9 */
  5743.   {
  5744.     { Bad_Opcode },
  5745.     { Bad_Opcode },
  5746.     { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5747.   },
  5748.  
  5749.   /* PREFIX_VEX_0F38AA */
  5750.   {
  5751.     { Bad_Opcode },
  5752.     { Bad_Opcode },
  5753.     { "vfmsub213p%XW", { XM, Vex, EXx } },
  5754.   },
  5755.  
  5756.   /* PREFIX_VEX_0F38AB */
  5757.   {
  5758.     { Bad_Opcode },
  5759.     { Bad_Opcode },
  5760.     { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5761.   },
  5762.  
  5763.   /* PREFIX_VEX_0F38AC */
  5764.   {
  5765.     { Bad_Opcode },
  5766.     { Bad_Opcode },
  5767.     { "vfnmadd213p%XW", { XM, Vex, EXx } },
  5768.   },
  5769.  
  5770.   /* PREFIX_VEX_0F38AD */
  5771.   {
  5772.     { Bad_Opcode },
  5773.     { Bad_Opcode },
  5774.     { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5775.   },
  5776.  
  5777.   /* PREFIX_VEX_0F38AE */
  5778.   {
  5779.     { Bad_Opcode },
  5780.     { Bad_Opcode },
  5781.     { "vfnmsub213p%XW", { XM, Vex, EXx } },
  5782.   },
  5783.  
  5784.   /* PREFIX_VEX_0F38AF */
  5785.   {
  5786.     { Bad_Opcode },
  5787.     { Bad_Opcode },
  5788.     { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5789.   },
  5790.  
  5791.   /* PREFIX_VEX_0F38B6 */
  5792.   {
  5793.     { Bad_Opcode },
  5794.     { Bad_Opcode },
  5795.     { "vfmaddsub231p%XW", { XM, Vex, EXx } },
  5796.   },
  5797.  
  5798.   /* PREFIX_VEX_0F38B7 */
  5799.   {
  5800.     { Bad_Opcode },
  5801.     { Bad_Opcode },
  5802.     { "vfmsubadd231p%XW", { XM, Vex, EXx } },
  5803.   },
  5804.  
  5805.   /* PREFIX_VEX_0F38B8 */
  5806.   {
  5807.     { Bad_Opcode },
  5808.     { Bad_Opcode },
  5809.     { "vfmadd231p%XW", { XM, Vex, EXx } },
  5810.   },
  5811.  
  5812.   /* PREFIX_VEX_0F38B9 */
  5813.   {
  5814.     { Bad_Opcode },
  5815.     { Bad_Opcode },
  5816.     { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5817.   },
  5818.  
  5819.   /* PREFIX_VEX_0F38BA */
  5820.   {
  5821.     { Bad_Opcode },
  5822.     { Bad_Opcode },
  5823.     { "vfmsub231p%XW", { XM, Vex, EXx } },
  5824.   },
  5825.  
  5826.   /* PREFIX_VEX_0F38BB */
  5827.   {
  5828.     { Bad_Opcode },
  5829.     { Bad_Opcode },
  5830.     { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5831.   },
  5832.  
  5833.   /* PREFIX_VEX_0F38BC */
  5834.   {
  5835.     { Bad_Opcode },
  5836.     { Bad_Opcode },
  5837.     { "vfnmadd231p%XW", { XM, Vex, EXx } },
  5838.   },
  5839.  
  5840.   /* PREFIX_VEX_0F38BD */
  5841.   {
  5842.     { Bad_Opcode },
  5843.     { Bad_Opcode },
  5844.     { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5845.   },
  5846.  
  5847.   /* PREFIX_VEX_0F38BE */
  5848.   {
  5849.     { Bad_Opcode },
  5850.     { Bad_Opcode },
  5851.     { "vfnmsub231p%XW", { XM, Vex, EXx } },
  5852.   },
  5853.  
  5854.   /* PREFIX_VEX_0F38BF */
  5855.   {
  5856.     { Bad_Opcode },
  5857.     { Bad_Opcode },
  5858.     { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
  5859.   },
  5860.  
  5861.   /* PREFIX_VEX_0F38DB */
  5862.   {
  5863.     { Bad_Opcode },
  5864.     { Bad_Opcode },
  5865.     { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
  5866.   },
  5867.  
  5868.   /* PREFIX_VEX_0F38DC */
  5869.   {
  5870.     { Bad_Opcode },
  5871.     { Bad_Opcode },
  5872.     { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
  5873.   },
  5874.  
  5875.   /* PREFIX_VEX_0F38DD */
  5876.   {
  5877.     { Bad_Opcode },
  5878.     { Bad_Opcode },
  5879.     { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
  5880.   },
  5881.  
  5882.   /* PREFIX_VEX_0F38DE */
  5883.   {
  5884.     { Bad_Opcode },
  5885.     { Bad_Opcode },
  5886.     { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
  5887.   },
  5888.  
  5889.   /* PREFIX_VEX_0F38DF */
  5890.   {
  5891.     { Bad_Opcode },
  5892.     { Bad_Opcode },
  5893.     { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
  5894.   },
  5895.  
  5896.   /* PREFIX_VEX_0F38F2 */
  5897.   {
  5898.     { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
  5899.   },
  5900.  
  5901.   /* PREFIX_VEX_0F38F3_REG_1 */
  5902.   {
  5903.     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
  5904.   },
  5905.  
  5906.   /* PREFIX_VEX_0F38F3_REG_2 */
  5907.   {
  5908.     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
  5909.   },
  5910.  
  5911.   /* PREFIX_VEX_0F38F3_REG_3 */
  5912.   {
  5913.     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
  5914.   },
  5915.  
  5916.   /* PREFIX_VEX_0F38F5 */
  5917.   {
  5918.     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
  5919.     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
  5920.     { Bad_Opcode },
  5921.     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
  5922.   },
  5923.  
  5924.   /* PREFIX_VEX_0F38F6 */
  5925.   {
  5926.     { Bad_Opcode },
  5927.     { Bad_Opcode },
  5928.     { Bad_Opcode },
  5929.     { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
  5930.   },
  5931.  
  5932.   /* PREFIX_VEX_0F38F7 */
  5933.   {
  5934.     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
  5935.     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
  5936.     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
  5937.     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
  5938.   },
  5939.  
  5940.   /* PREFIX_VEX_0F3A00 */
  5941.   {
  5942.     { Bad_Opcode },
  5943.     { Bad_Opcode },
  5944.     { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
  5945.   },
  5946.  
  5947.   /* PREFIX_VEX_0F3A01 */
  5948.   {
  5949.     { Bad_Opcode },
  5950.     { Bad_Opcode },
  5951.     { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
  5952.   },
  5953.  
  5954.   /* PREFIX_VEX_0F3A02 */
  5955.   {
  5956.     { Bad_Opcode },
  5957.     { Bad_Opcode },
  5958.     { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
  5959.   },
  5960.  
  5961.   /* PREFIX_VEX_0F3A04 */
  5962.   {
  5963.     { Bad_Opcode },
  5964.     { Bad_Opcode },
  5965.     { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
  5966.   },
  5967.  
  5968.   /* PREFIX_VEX_0F3A05 */
  5969.   {
  5970.     { Bad_Opcode },
  5971.     { Bad_Opcode },
  5972.     { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
  5973.   },
  5974.  
  5975.   /* PREFIX_VEX_0F3A06 */
  5976.   {
  5977.     { Bad_Opcode },
  5978.     { Bad_Opcode },
  5979.     { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
  5980.   },
  5981.  
  5982.   /* PREFIX_VEX_0F3A08 */
  5983.   {
  5984.     { Bad_Opcode },
  5985.     { Bad_Opcode },
  5986.     { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
  5987.   },
  5988.  
  5989.   /* PREFIX_VEX_0F3A09 */
  5990.   {
  5991.     { Bad_Opcode },
  5992.     { Bad_Opcode },
  5993.     { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
  5994.   },
  5995.  
  5996.   /* PREFIX_VEX_0F3A0A */
  5997.   {
  5998.     { Bad_Opcode },
  5999.     { Bad_Opcode },
  6000.     { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
  6001.   },
  6002.  
  6003.   /* PREFIX_VEX_0F3A0B */
  6004.   {
  6005.     { Bad_Opcode },
  6006.     { Bad_Opcode },
  6007.     { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
  6008.   },
  6009.  
  6010.   /* PREFIX_VEX_0F3A0C */
  6011.   {
  6012.     { Bad_Opcode },
  6013.     { Bad_Opcode },
  6014.     { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
  6015.   },
  6016.  
  6017.   /* PREFIX_VEX_0F3A0D */
  6018.   {
  6019.     { Bad_Opcode },
  6020.     { Bad_Opcode },
  6021.     { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
  6022.   },
  6023.  
  6024.   /* PREFIX_VEX_0F3A0E */
  6025.   {
  6026.     { Bad_Opcode },
  6027.     { Bad_Opcode },
  6028.     { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
  6029.   },
  6030.  
  6031.   /* PREFIX_VEX_0F3A0F */
  6032.   {
  6033.     { Bad_Opcode },
  6034.     { Bad_Opcode },
  6035.     { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
  6036.   },
  6037.  
  6038.   /* PREFIX_VEX_0F3A14 */
  6039.   {
  6040.     { Bad_Opcode },
  6041.     { Bad_Opcode },
  6042.     { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
  6043.   },
  6044.  
  6045.   /* PREFIX_VEX_0F3A15 */
  6046.   {
  6047.     { Bad_Opcode },
  6048.     { Bad_Opcode },
  6049.     { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
  6050.   },
  6051.  
  6052.   /* PREFIX_VEX_0F3A16 */
  6053.   {
  6054.     { Bad_Opcode },
  6055.     { Bad_Opcode },
  6056.     { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
  6057.   },
  6058.  
  6059.   /* PREFIX_VEX_0F3A17 */
  6060.   {
  6061.     { Bad_Opcode },
  6062.     { Bad_Opcode },
  6063.     { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
  6064.   },
  6065.  
  6066.   /* PREFIX_VEX_0F3A18 */
  6067.   {
  6068.     { Bad_Opcode },
  6069.     { Bad_Opcode },
  6070.     { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
  6071.   },
  6072.  
  6073.   /* PREFIX_VEX_0F3A19 */
  6074.   {
  6075.     { Bad_Opcode },
  6076.     { Bad_Opcode },
  6077.     { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
  6078.   },
  6079.  
  6080.   /* PREFIX_VEX_0F3A1D */
  6081.   {
  6082.     { Bad_Opcode },
  6083.     { Bad_Opcode },
  6084.     { "vcvtps2ph", { EXxmmq, XM, Ib } },
  6085.   },
  6086.  
  6087.   /* PREFIX_VEX_0F3A20 */
  6088.   {
  6089.     { Bad_Opcode },
  6090.     { Bad_Opcode },
  6091.     { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
  6092.   },
  6093.  
  6094.   /* PREFIX_VEX_0F3A21 */
  6095.   {
  6096.     { Bad_Opcode },
  6097.     { Bad_Opcode },
  6098.     { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
  6099.   },
  6100.  
  6101.   /* PREFIX_VEX_0F3A22 */
  6102.   {
  6103.     { Bad_Opcode },
  6104.     { Bad_Opcode },
  6105.     { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
  6106.   },
  6107.  
  6108.   /* PREFIX_VEX_0F3A30 */
  6109.   {
  6110.     { Bad_Opcode },
  6111.     { Bad_Opcode },
  6112.     { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
  6113.   },
  6114.  
  6115.   /* PREFIX_VEX_0F3A32 */
  6116.   {
  6117.     { Bad_Opcode },
  6118.     { Bad_Opcode },
  6119.     { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
  6120.   },
  6121.  
  6122.   /* PREFIX_VEX_0F3A38 */
  6123.   {
  6124.     { Bad_Opcode },
  6125.     { Bad_Opcode },
  6126.     { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
  6127.   },
  6128.  
  6129.   /* PREFIX_VEX_0F3A39 */
  6130.   {
  6131.     { Bad_Opcode },
  6132.     { Bad_Opcode },
  6133.     { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
  6134.   },
  6135.  
  6136.   /* PREFIX_VEX_0F3A40 */
  6137.   {
  6138.     { Bad_Opcode },
  6139.     { Bad_Opcode },
  6140.     { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
  6141.   },
  6142.  
  6143.   /* PREFIX_VEX_0F3A41 */
  6144.   {
  6145.     { Bad_Opcode },
  6146.     { Bad_Opcode },
  6147.     { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
  6148.   },
  6149.  
  6150.   /* PREFIX_VEX_0F3A42 */
  6151.   {
  6152.     { Bad_Opcode },
  6153.     { Bad_Opcode },
  6154.     { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
  6155.   },
  6156.  
  6157.   /* PREFIX_VEX_0F3A44 */
  6158.   {
  6159.     { Bad_Opcode },
  6160.     { Bad_Opcode },
  6161.     { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
  6162.   },
  6163.  
  6164.   /* PREFIX_VEX_0F3A46 */
  6165.   {
  6166.     { Bad_Opcode },
  6167.     { Bad_Opcode },
  6168.     { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
  6169.   },
  6170.  
  6171.   /* PREFIX_VEX_0F3A48 */
  6172.   {
  6173.     { Bad_Opcode },
  6174.     { Bad_Opcode },
  6175.     { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
  6176.   },
  6177.  
  6178.   /* PREFIX_VEX_0F3A49 */
  6179.   {
  6180.     { Bad_Opcode },
  6181.     { Bad_Opcode },
  6182.     { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
  6183.   },
  6184.  
  6185.   /* PREFIX_VEX_0F3A4A */
  6186.   {
  6187.     { Bad_Opcode },
  6188.     { Bad_Opcode },
  6189.     { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
  6190.   },
  6191.  
  6192.   /* PREFIX_VEX_0F3A4B */
  6193.   {
  6194.     { Bad_Opcode },
  6195.     { Bad_Opcode },
  6196.     { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
  6197.   },
  6198.  
  6199.   /* PREFIX_VEX_0F3A4C */
  6200.   {
  6201.     { Bad_Opcode },
  6202.     { Bad_Opcode },
  6203.     { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
  6204.   },
  6205.  
  6206.   /* PREFIX_VEX_0F3A5C */
  6207.   {
  6208.     { Bad_Opcode },
  6209.     { Bad_Opcode },
  6210.     { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6211.   },
  6212.  
  6213.   /* PREFIX_VEX_0F3A5D */
  6214.   {
  6215.     { Bad_Opcode },
  6216.     { Bad_Opcode },
  6217.     { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6218.   },
  6219.  
  6220.   /* PREFIX_VEX_0F3A5E */
  6221.   {
  6222.     { Bad_Opcode },
  6223.     { Bad_Opcode },
  6224.     { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6225.   },
  6226.  
  6227.   /* PREFIX_VEX_0F3A5F */
  6228.   {
  6229.     { Bad_Opcode },
  6230.     { Bad_Opcode },
  6231.     { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6232.   },
  6233.  
  6234.   /* PREFIX_VEX_0F3A60 */
  6235.   {
  6236.     { Bad_Opcode },
  6237.     { Bad_Opcode },
  6238.     { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
  6239.     { Bad_Opcode },
  6240.   },
  6241.  
  6242.   /* PREFIX_VEX_0F3A61 */
  6243.   {
  6244.     { Bad_Opcode },
  6245.     { Bad_Opcode },
  6246.     { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
  6247.   },
  6248.  
  6249.   /* PREFIX_VEX_0F3A62 */
  6250.   {
  6251.     { Bad_Opcode },
  6252.     { Bad_Opcode },
  6253.     { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
  6254.   },
  6255.  
  6256.   /* PREFIX_VEX_0F3A63 */
  6257.   {
  6258.     { Bad_Opcode },
  6259.     { Bad_Opcode },
  6260.     { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
  6261.   },
  6262.  
  6263.   /* PREFIX_VEX_0F3A68 */
  6264.   {
  6265.     { Bad_Opcode },
  6266.     { Bad_Opcode },
  6267.     { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6268.   },
  6269.  
  6270.   /* PREFIX_VEX_0F3A69 */
  6271.   {
  6272.     { Bad_Opcode },
  6273.     { Bad_Opcode },
  6274.     { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6275.   },
  6276.  
  6277.   /* PREFIX_VEX_0F3A6A */
  6278.   {
  6279.     { Bad_Opcode },
  6280.     { Bad_Opcode },
  6281.     { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
  6282.   },
  6283.  
  6284.   /* PREFIX_VEX_0F3A6B */
  6285.   {
  6286.     { Bad_Opcode },
  6287.     { Bad_Opcode },
  6288.     { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
  6289.   },
  6290.  
  6291.   /* PREFIX_VEX_0F3A6C */
  6292.   {
  6293.     { Bad_Opcode },
  6294.     { Bad_Opcode },
  6295.     { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6296.   },
  6297.  
  6298.   /* PREFIX_VEX_0F3A6D */
  6299.   {
  6300.     { Bad_Opcode },
  6301.     { Bad_Opcode },
  6302.     { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6303.   },
  6304.  
  6305.   /* PREFIX_VEX_0F3A6E */
  6306.   {
  6307.     { Bad_Opcode },
  6308.     { Bad_Opcode },
  6309.     { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
  6310.   },
  6311.  
  6312.   /* PREFIX_VEX_0F3A6F */
  6313.   {
  6314.     { Bad_Opcode },
  6315.     { Bad_Opcode },
  6316.     { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
  6317.   },
  6318.  
  6319.   /* PREFIX_VEX_0F3A78 */
  6320.   {
  6321.     { Bad_Opcode },
  6322.     { Bad_Opcode },
  6323.     { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6324.   },
  6325.  
  6326.   /* PREFIX_VEX_0F3A79 */
  6327.   {
  6328.     { Bad_Opcode },
  6329.     { Bad_Opcode },
  6330.     { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6331.   },
  6332.  
  6333.   /* PREFIX_VEX_0F3A7A */
  6334.   {
  6335.     { Bad_Opcode },
  6336.     { Bad_Opcode },
  6337.     { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
  6338.   },
  6339.  
  6340.   /* PREFIX_VEX_0F3A7B */
  6341.   {
  6342.     { Bad_Opcode },
  6343.     { Bad_Opcode },
  6344.     { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
  6345.   },
  6346.  
  6347.   /* PREFIX_VEX_0F3A7C */
  6348.   {
  6349.     { Bad_Opcode },
  6350.     { Bad_Opcode },
  6351.     { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6352.     { Bad_Opcode },
  6353.   },
  6354.  
  6355.   /* PREFIX_VEX_0F3A7D */
  6356.   {
  6357.     { Bad_Opcode },
  6358.     { Bad_Opcode },
  6359.     { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  6360.   },
  6361.  
  6362.   /* PREFIX_VEX_0F3A7E */
  6363.   {
  6364.     { Bad_Opcode },
  6365.     { Bad_Opcode },
  6366.     { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
  6367.   },
  6368.  
  6369.   /* PREFIX_VEX_0F3A7F */
  6370.   {
  6371.     { Bad_Opcode },
  6372.     { Bad_Opcode },
  6373.     { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
  6374.   },
  6375.  
  6376.   /* PREFIX_VEX_0F3ADF */
  6377.   {
  6378.     { Bad_Opcode },
  6379.     { Bad_Opcode },
  6380.     { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
  6381.   },
  6382.  
  6383.   /* PREFIX_VEX_0F3AF0 */
  6384.   {
  6385.     { Bad_Opcode },
  6386.     { Bad_Opcode },
  6387.     { Bad_Opcode },
  6388.     { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
  6389.   },
  6390.  
  6391. #define NEED_PREFIX_TABLE
  6392. #include "i386-dis-evex.h"
  6393. #undef NEED_PREFIX_TABLE
  6394. };
  6395.  
  6396. static const struct dis386 x86_64_table[][2] = {
  6397.   /* X86_64_06 */
  6398.   {
  6399.     { "pushP", { es } },
  6400.   },
  6401.  
  6402.   /* X86_64_07 */
  6403.   {
  6404.     { "popP", { es } },
  6405.   },
  6406.  
  6407.   /* X86_64_0D */
  6408.   {
  6409.     { "pushP", { cs } },
  6410.   },
  6411.  
  6412.   /* X86_64_16 */
  6413.   {
  6414.     { "pushP", { ss } },
  6415.   },
  6416.  
  6417.   /* X86_64_17 */
  6418.   {
  6419.     { "popP", { ss } },
  6420.   },
  6421.  
  6422.   /* X86_64_1E */
  6423.   {
  6424.     { "pushP", { ds } },
  6425.   },
  6426.  
  6427.   /* X86_64_1F */
  6428.   {
  6429.     { "popP", { ds } },
  6430.   },
  6431.  
  6432.   /* X86_64_27 */
  6433.   {
  6434.     { "daa", { XX } },
  6435.   },
  6436.  
  6437.   /* X86_64_2F */
  6438.   {
  6439.     { "das", { XX } },
  6440.   },
  6441.  
  6442.   /* X86_64_37 */
  6443.   {
  6444.     { "aaa", { XX } },
  6445.   },
  6446.  
  6447.   /* X86_64_3F */
  6448.   {
  6449.     { "aas", { XX } },
  6450.   },
  6451.  
  6452.   /* X86_64_60 */
  6453.   {
  6454.     { "pushaP", { XX } },
  6455.   },
  6456.  
  6457.   /* X86_64_61 */
  6458.   {
  6459.     { "popaP", { XX } },
  6460.   },
  6461.  
  6462.   /* X86_64_62 */
  6463.   {
  6464.     { MOD_TABLE (MOD_62_32BIT) },
  6465.     { EVEX_TABLE (EVEX_0F) },
  6466.   },
  6467.  
  6468.   /* X86_64_63 */
  6469.   {
  6470.     { "arpl", { Ew, Gw } },
  6471.     { "movs{lq|xd}", { Gv, Ed } },
  6472.   },
  6473.  
  6474.   /* X86_64_6D */
  6475.   {
  6476.     { "ins{R|}", { Yzr, indirDX } },
  6477.     { "ins{G|}", { Yzr, indirDX } },
  6478.   },
  6479.  
  6480.   /* X86_64_6F */
  6481.   {
  6482.     { "outs{R|}", { indirDXr, Xz } },
  6483.     { "outs{G|}", { indirDXr, Xz } },
  6484.   },
  6485.  
  6486.   /* X86_64_9A */
  6487.   {
  6488.     { "Jcall{T|}", { Ap } },
  6489.   },
  6490.  
  6491.   /* X86_64_C4 */
  6492.   {
  6493.     { MOD_TABLE (MOD_C4_32BIT) },
  6494.     { VEX_C4_TABLE (VEX_0F) },
  6495.   },
  6496.  
  6497.   /* X86_64_C5 */
  6498.   {
  6499.     { MOD_TABLE (MOD_C5_32BIT) },
  6500.     { VEX_C5_TABLE (VEX_0F) },
  6501.   },
  6502.  
  6503.   /* X86_64_CE */
  6504.   {
  6505.     { "into", { XX } },
  6506.   },
  6507.  
  6508.   /* X86_64_D4 */
  6509.   {
  6510.     { "aam", { Ib } },
  6511.   },
  6512.  
  6513.   /* X86_64_D5 */
  6514.   {
  6515.     { "aad", { Ib } },
  6516.   },
  6517.  
  6518.   /* X86_64_EA */
  6519.   {
  6520.     { "Jjmp{T|}", { Ap } },
  6521.   },
  6522.  
  6523.   /* X86_64_0F01_REG_0 */
  6524.   {
  6525.     { "sgdt{Q|IQ}", { M } },
  6526.     { "sgdt", { M } },
  6527.   },
  6528.  
  6529.   /* X86_64_0F01_REG_1 */
  6530.   {
  6531.     { "sidt{Q|IQ}", { M } },
  6532.     { "sidt", { M } },
  6533.   },
  6534.  
  6535.   /* X86_64_0F01_REG_2 */
  6536.   {
  6537.     { "lgdt{Q|Q}", { M } },
  6538.     { "lgdt", { M } },
  6539.   },
  6540.  
  6541.   /* X86_64_0F01_REG_3 */
  6542.   {
  6543.     { "lidt{Q|Q}", { M } },
  6544.     { "lidt", { M } },
  6545.   },
  6546. };
  6547.  
  6548. static const struct dis386 three_byte_table[][256] = {
  6549.  
  6550.   /* THREE_BYTE_0F38 */
  6551.   {
  6552.     /* 00 */
  6553.     { "pshufb",         { MX, EM } },
  6554.     { "phaddw",         { MX, EM } },
  6555.     { "phaddd",         { MX, EM } },
  6556.     { "phaddsw",        { MX, EM } },
  6557.     { "pmaddubsw",      { MX, EM } },
  6558.     { "phsubw",         { MX, EM } },
  6559.     { "phsubd",         { MX, EM } },
  6560.     { "phsubsw",        { MX, EM } },
  6561.     /* 08 */
  6562.     { "psignb",         { MX, EM } },
  6563.     { "psignw",         { MX, EM } },
  6564.     { "psignd",         { MX, EM } },
  6565.     { "pmulhrsw",       { MX, EM } },
  6566.     { Bad_Opcode },
  6567.     { Bad_Opcode },
  6568.     { Bad_Opcode },
  6569.     { Bad_Opcode },
  6570.     /* 10 */
  6571.     { PREFIX_TABLE (PREFIX_0F3810) },
  6572.     { Bad_Opcode },
  6573.     { Bad_Opcode },
  6574.     { Bad_Opcode },
  6575.     { PREFIX_TABLE (PREFIX_0F3814) },
  6576.     { PREFIX_TABLE (PREFIX_0F3815) },
  6577.     { Bad_Opcode },
  6578.     { PREFIX_TABLE (PREFIX_0F3817) },
  6579.     /* 18 */
  6580.     { Bad_Opcode },
  6581.     { Bad_Opcode },
  6582.     { Bad_Opcode },
  6583.     { Bad_Opcode },
  6584.     { "pabsb",          { MX, EM } },
  6585.     { "pabsw",          { MX, EM } },
  6586.     { "pabsd",          { MX, EM } },
  6587.     { Bad_Opcode },
  6588.     /* 20 */
  6589.     { PREFIX_TABLE (PREFIX_0F3820) },
  6590.     { PREFIX_TABLE (PREFIX_0F3821) },
  6591.     { PREFIX_TABLE (PREFIX_0F3822) },
  6592.     { PREFIX_TABLE (PREFIX_0F3823) },
  6593.     { PREFIX_TABLE (PREFIX_0F3824) },
  6594.     { PREFIX_TABLE (PREFIX_0F3825) },
  6595.     { Bad_Opcode },
  6596.     { Bad_Opcode },
  6597.     /* 28 */
  6598.     { PREFIX_TABLE (PREFIX_0F3828) },
  6599.     { PREFIX_TABLE (PREFIX_0F3829) },
  6600.     { PREFIX_TABLE (PREFIX_0F382A) },
  6601.     { PREFIX_TABLE (PREFIX_0F382B) },
  6602.     { Bad_Opcode },
  6603.     { Bad_Opcode },
  6604.     { Bad_Opcode },
  6605.     { Bad_Opcode },
  6606.     /* 30 */
  6607.     { PREFIX_TABLE (PREFIX_0F3830) },
  6608.     { PREFIX_TABLE (PREFIX_0F3831) },
  6609.     { PREFIX_TABLE (PREFIX_0F3832) },
  6610.     { PREFIX_TABLE (PREFIX_0F3833) },
  6611.     { PREFIX_TABLE (PREFIX_0F3834) },
  6612.     { PREFIX_TABLE (PREFIX_0F3835) },
  6613.     { Bad_Opcode },
  6614.     { PREFIX_TABLE (PREFIX_0F3837) },
  6615.     /* 38 */
  6616.     { PREFIX_TABLE (PREFIX_0F3838) },
  6617.     { PREFIX_TABLE (PREFIX_0F3839) },
  6618.     { PREFIX_TABLE (PREFIX_0F383A) },
  6619.     { PREFIX_TABLE (PREFIX_0F383B) },
  6620.     { PREFIX_TABLE (PREFIX_0F383C) },
  6621.     { PREFIX_TABLE (PREFIX_0F383D) },
  6622.     { PREFIX_TABLE (PREFIX_0F383E) },
  6623.     { PREFIX_TABLE (PREFIX_0F383F) },
  6624.     /* 40 */
  6625.     { PREFIX_TABLE (PREFIX_0F3840) },
  6626.     { PREFIX_TABLE (PREFIX_0F3841) },
  6627.     { Bad_Opcode },
  6628.     { Bad_Opcode },
  6629.     { Bad_Opcode },
  6630.     { Bad_Opcode },
  6631.     { Bad_Opcode },
  6632.     { Bad_Opcode },
  6633.     /* 48 */
  6634.     { Bad_Opcode },
  6635.     { Bad_Opcode },
  6636.     { Bad_Opcode },
  6637.     { Bad_Opcode },
  6638.     { Bad_Opcode },
  6639.     { Bad_Opcode },
  6640.     { Bad_Opcode },
  6641.     { Bad_Opcode },
  6642.     /* 50 */
  6643.     { Bad_Opcode },
  6644.     { Bad_Opcode },
  6645.     { Bad_Opcode },
  6646.     { Bad_Opcode },
  6647.     { Bad_Opcode },
  6648.     { Bad_Opcode },
  6649.     { Bad_Opcode },
  6650.     { Bad_Opcode },
  6651.     /* 58 */
  6652.     { Bad_Opcode },
  6653.     { Bad_Opcode },
  6654.     { Bad_Opcode },
  6655.     { Bad_Opcode },
  6656.     { Bad_Opcode },
  6657.     { Bad_Opcode },
  6658.     { Bad_Opcode },
  6659.     { Bad_Opcode },
  6660.     /* 60 */
  6661.     { Bad_Opcode },
  6662.     { Bad_Opcode },
  6663.     { Bad_Opcode },
  6664.     { Bad_Opcode },
  6665.     { Bad_Opcode },
  6666.     { Bad_Opcode },
  6667.     { Bad_Opcode },
  6668.     { Bad_Opcode },
  6669.     /* 68 */
  6670.     { Bad_Opcode },
  6671.     { Bad_Opcode },
  6672.     { Bad_Opcode },
  6673.     { Bad_Opcode },
  6674.     { Bad_Opcode },
  6675.     { Bad_Opcode },
  6676.     { Bad_Opcode },
  6677.     { Bad_Opcode },
  6678.     /* 70 */
  6679.     { Bad_Opcode },
  6680.     { Bad_Opcode },
  6681.     { Bad_Opcode },
  6682.     { Bad_Opcode },
  6683.     { Bad_Opcode },
  6684.     { Bad_Opcode },
  6685.     { Bad_Opcode },
  6686.     { Bad_Opcode },
  6687.     /* 78 */
  6688.     { Bad_Opcode },
  6689.     { Bad_Opcode },
  6690.     { Bad_Opcode },
  6691.     { Bad_Opcode },
  6692.     { Bad_Opcode },
  6693.     { Bad_Opcode },
  6694.     { Bad_Opcode },
  6695.     { Bad_Opcode },
  6696.     /* 80 */
  6697.     { PREFIX_TABLE (PREFIX_0F3880) },
  6698.     { PREFIX_TABLE (PREFIX_0F3881) },
  6699.     { PREFIX_TABLE (PREFIX_0F3882) },
  6700.     { Bad_Opcode },
  6701.     { Bad_Opcode },
  6702.     { Bad_Opcode },
  6703.     { Bad_Opcode },
  6704.     { Bad_Opcode },
  6705.     /* 88 */
  6706.     { Bad_Opcode },
  6707.     { Bad_Opcode },
  6708.     { Bad_Opcode },
  6709.     { Bad_Opcode },
  6710.     { Bad_Opcode },
  6711.     { Bad_Opcode },
  6712.     { Bad_Opcode },
  6713.     { Bad_Opcode },
  6714.     /* 90 */
  6715.     { Bad_Opcode },
  6716.     { Bad_Opcode },
  6717.     { Bad_Opcode },
  6718.     { Bad_Opcode },
  6719.     { Bad_Opcode },
  6720.     { Bad_Opcode },
  6721.     { Bad_Opcode },
  6722.     { Bad_Opcode },
  6723.     /* 98 */
  6724.     { Bad_Opcode },
  6725.     { Bad_Opcode },
  6726.     { Bad_Opcode },
  6727.     { Bad_Opcode },
  6728.     { Bad_Opcode },
  6729.     { Bad_Opcode },
  6730.     { Bad_Opcode },
  6731.     { Bad_Opcode },
  6732.     /* a0 */
  6733.     { Bad_Opcode },
  6734.     { Bad_Opcode },
  6735.     { Bad_Opcode },
  6736.     { Bad_Opcode },
  6737.     { Bad_Opcode },
  6738.     { Bad_Opcode },
  6739.     { Bad_Opcode },
  6740.     { Bad_Opcode },
  6741.     /* a8 */
  6742.     { Bad_Opcode },
  6743.     { Bad_Opcode },
  6744.     { Bad_Opcode },
  6745.     { Bad_Opcode },
  6746.     { Bad_Opcode },
  6747.     { Bad_Opcode },
  6748.     { Bad_Opcode },
  6749.     { Bad_Opcode },
  6750.     /* b0 */
  6751.     { Bad_Opcode },
  6752.     { Bad_Opcode },
  6753.     { Bad_Opcode },
  6754.     { Bad_Opcode },
  6755.     { Bad_Opcode },
  6756.     { Bad_Opcode },
  6757.     { Bad_Opcode },
  6758.     { Bad_Opcode },
  6759.     /* b8 */
  6760.     { Bad_Opcode },
  6761.     { Bad_Opcode },
  6762.     { Bad_Opcode },
  6763.     { Bad_Opcode },
  6764.     { Bad_Opcode },
  6765.     { Bad_Opcode },
  6766.     { Bad_Opcode },
  6767.     { Bad_Opcode },
  6768.     /* c0 */
  6769.     { Bad_Opcode },
  6770.     { Bad_Opcode },
  6771.     { Bad_Opcode },
  6772.     { Bad_Opcode },
  6773.     { Bad_Opcode },
  6774.     { Bad_Opcode },
  6775.     { Bad_Opcode },
  6776.     { Bad_Opcode },
  6777.     /* c8 */
  6778.     { PREFIX_TABLE (PREFIX_0F38C8) },
  6779.     { PREFIX_TABLE (PREFIX_0F38C9) },
  6780.     { PREFIX_TABLE (PREFIX_0F38CA) },
  6781.     { PREFIX_TABLE (PREFIX_0F38CB) },
  6782.     { PREFIX_TABLE (PREFIX_0F38CC) },
  6783.     { PREFIX_TABLE (PREFIX_0F38CD) },
  6784.     { Bad_Opcode },
  6785.     { Bad_Opcode },
  6786.     /* d0 */
  6787.     { Bad_Opcode },
  6788.     { Bad_Opcode },
  6789.     { Bad_Opcode },
  6790.     { Bad_Opcode },
  6791.     { Bad_Opcode },
  6792.     { Bad_Opcode },
  6793.     { Bad_Opcode },
  6794.     { Bad_Opcode },
  6795.     /* d8 */
  6796.     { Bad_Opcode },
  6797.     { Bad_Opcode },
  6798.     { Bad_Opcode },
  6799.     { PREFIX_TABLE (PREFIX_0F38DB) },
  6800.     { PREFIX_TABLE (PREFIX_0F38DC) },
  6801.     { PREFIX_TABLE (PREFIX_0F38DD) },
  6802.     { PREFIX_TABLE (PREFIX_0F38DE) },
  6803.     { PREFIX_TABLE (PREFIX_0F38DF) },
  6804.     /* e0 */
  6805.     { Bad_Opcode },
  6806.     { Bad_Opcode },
  6807.     { Bad_Opcode },
  6808.     { Bad_Opcode },
  6809.     { Bad_Opcode },
  6810.     { Bad_Opcode },
  6811.     { Bad_Opcode },
  6812.     { Bad_Opcode },
  6813.     /* e8 */
  6814.     { Bad_Opcode },
  6815.     { Bad_Opcode },
  6816.     { Bad_Opcode },
  6817.     { Bad_Opcode },
  6818.     { Bad_Opcode },
  6819.     { Bad_Opcode },
  6820.     { Bad_Opcode },
  6821.     { Bad_Opcode },
  6822.     /* f0 */
  6823.     { PREFIX_TABLE (PREFIX_0F38F0) },
  6824.     { PREFIX_TABLE (PREFIX_0F38F1) },
  6825.     { Bad_Opcode },
  6826.     { Bad_Opcode },
  6827.     { Bad_Opcode },
  6828.     { Bad_Opcode },
  6829.     { PREFIX_TABLE (PREFIX_0F38F6) },
  6830.     { Bad_Opcode },
  6831.     /* f8 */
  6832.     { Bad_Opcode },
  6833.     { Bad_Opcode },
  6834.     { Bad_Opcode },
  6835.     { Bad_Opcode },
  6836.     { Bad_Opcode },
  6837.     { Bad_Opcode },
  6838.     { Bad_Opcode },
  6839.     { Bad_Opcode },
  6840.   },
  6841.   /* THREE_BYTE_0F3A */
  6842.   {
  6843.     /* 00 */
  6844.     { Bad_Opcode },
  6845.     { Bad_Opcode },
  6846.     { Bad_Opcode },
  6847.     { Bad_Opcode },
  6848.     { Bad_Opcode },
  6849.     { Bad_Opcode },
  6850.     { Bad_Opcode },
  6851.     { Bad_Opcode },
  6852.     /* 08 */
  6853.     { PREFIX_TABLE (PREFIX_0F3A08) },
  6854.     { PREFIX_TABLE (PREFIX_0F3A09) },
  6855.     { PREFIX_TABLE (PREFIX_0F3A0A) },
  6856.     { PREFIX_TABLE (PREFIX_0F3A0B) },
  6857.     { PREFIX_TABLE (PREFIX_0F3A0C) },
  6858.     { PREFIX_TABLE (PREFIX_0F3A0D) },
  6859.     { PREFIX_TABLE (PREFIX_0F3A0E) },
  6860.     { "palignr",        { MX, EM, Ib } },
  6861.     /* 10 */
  6862.     { Bad_Opcode },
  6863.     { Bad_Opcode },
  6864.     { Bad_Opcode },
  6865.     { Bad_Opcode },
  6866.     { PREFIX_TABLE (PREFIX_0F3A14) },
  6867.     { PREFIX_TABLE (PREFIX_0F3A15) },
  6868.     { PREFIX_TABLE (PREFIX_0F3A16) },
  6869.     { PREFIX_TABLE (PREFIX_0F3A17) },
  6870.     /* 18 */
  6871.     { Bad_Opcode },
  6872.     { Bad_Opcode },
  6873.     { Bad_Opcode },
  6874.     { Bad_Opcode },
  6875.     { Bad_Opcode },
  6876.     { Bad_Opcode },
  6877.     { Bad_Opcode },
  6878.     { Bad_Opcode },
  6879.     /* 20 */
  6880.     { PREFIX_TABLE (PREFIX_0F3A20) },
  6881.     { PREFIX_TABLE (PREFIX_0F3A21) },
  6882.     { PREFIX_TABLE (PREFIX_0F3A22) },
  6883.     { Bad_Opcode },
  6884.     { Bad_Opcode },
  6885.     { Bad_Opcode },
  6886.     { Bad_Opcode },
  6887.     { Bad_Opcode },
  6888.     /* 28 */
  6889.     { Bad_Opcode },
  6890.     { Bad_Opcode },
  6891.     { Bad_Opcode },
  6892.     { Bad_Opcode },
  6893.     { Bad_Opcode },
  6894.     { Bad_Opcode },
  6895.     { Bad_Opcode },
  6896.     { Bad_Opcode },
  6897.     /* 30 */
  6898.     { Bad_Opcode },
  6899.     { Bad_Opcode },
  6900.     { Bad_Opcode },
  6901.     { Bad_Opcode },
  6902.     { Bad_Opcode },
  6903.     { Bad_Opcode },
  6904.     { Bad_Opcode },
  6905.     { Bad_Opcode },
  6906.     /* 38 */
  6907.     { Bad_Opcode },
  6908.     { Bad_Opcode },
  6909.     { Bad_Opcode },
  6910.     { Bad_Opcode },
  6911.     { Bad_Opcode },
  6912.     { Bad_Opcode },
  6913.     { Bad_Opcode },
  6914.     { Bad_Opcode },
  6915.     /* 40 */
  6916.     { PREFIX_TABLE (PREFIX_0F3A40) },
  6917.     { PREFIX_TABLE (PREFIX_0F3A41) },
  6918.     { PREFIX_TABLE (PREFIX_0F3A42) },
  6919.     { Bad_Opcode },
  6920.     { PREFIX_TABLE (PREFIX_0F3A44) },
  6921.     { Bad_Opcode },
  6922.     { Bad_Opcode },
  6923.     { Bad_Opcode },
  6924.     /* 48 */
  6925.     { Bad_Opcode },
  6926.     { Bad_Opcode },
  6927.     { Bad_Opcode },
  6928.     { Bad_Opcode },
  6929.     { Bad_Opcode },
  6930.     { Bad_Opcode },
  6931.     { Bad_Opcode },
  6932.     { Bad_Opcode },
  6933.     /* 50 */
  6934.     { Bad_Opcode },
  6935.     { Bad_Opcode },
  6936.     { Bad_Opcode },
  6937.     { Bad_Opcode },
  6938.     { Bad_Opcode },
  6939.     { Bad_Opcode },
  6940.     { Bad_Opcode },
  6941.     { Bad_Opcode },
  6942.     /* 58 */
  6943.     { Bad_Opcode },
  6944.     { Bad_Opcode },
  6945.     { Bad_Opcode },
  6946.     { Bad_Opcode },
  6947.     { Bad_Opcode },
  6948.     { Bad_Opcode },
  6949.     { Bad_Opcode },
  6950.     { Bad_Opcode },
  6951.     /* 60 */
  6952.     { PREFIX_TABLE (PREFIX_0F3A60) },
  6953.     { PREFIX_TABLE (PREFIX_0F3A61) },
  6954.     { PREFIX_TABLE (PREFIX_0F3A62) },
  6955.     { PREFIX_TABLE (PREFIX_0F3A63) },
  6956.     { Bad_Opcode },
  6957.     { Bad_Opcode },
  6958.     { Bad_Opcode },
  6959.     { Bad_Opcode },
  6960.     /* 68 */
  6961.     { Bad_Opcode },
  6962.     { Bad_Opcode },
  6963.     { Bad_Opcode },
  6964.     { Bad_Opcode },
  6965.     { Bad_Opcode },
  6966.     { Bad_Opcode },
  6967.     { Bad_Opcode },
  6968.     { Bad_Opcode },
  6969.     /* 70 */
  6970.     { Bad_Opcode },
  6971.     { Bad_Opcode },
  6972.     { Bad_Opcode },
  6973.     { Bad_Opcode },
  6974.     { Bad_Opcode },
  6975.     { Bad_Opcode },
  6976.     { Bad_Opcode },
  6977.     { Bad_Opcode },
  6978.     /* 78 */
  6979.     { Bad_Opcode },
  6980.     { Bad_Opcode },
  6981.     { Bad_Opcode },
  6982.     { Bad_Opcode },
  6983.     { Bad_Opcode },
  6984.     { Bad_Opcode },
  6985.     { Bad_Opcode },
  6986.     { Bad_Opcode },
  6987.     /* 80 */
  6988.     { Bad_Opcode },
  6989.     { Bad_Opcode },
  6990.     { Bad_Opcode },
  6991.     { Bad_Opcode },
  6992.     { Bad_Opcode },
  6993.     { Bad_Opcode },
  6994.     { Bad_Opcode },
  6995.     { Bad_Opcode },
  6996.     /* 88 */
  6997.     { Bad_Opcode },
  6998.     { Bad_Opcode },
  6999.     { Bad_Opcode },
  7000.     { Bad_Opcode },
  7001.     { Bad_Opcode },
  7002.     { Bad_Opcode },
  7003.     { Bad_Opcode },
  7004.     { Bad_Opcode },
  7005.     /* 90 */
  7006.     { Bad_Opcode },
  7007.     { Bad_Opcode },
  7008.     { Bad_Opcode },
  7009.     { Bad_Opcode },
  7010.     { Bad_Opcode },
  7011.     { Bad_Opcode },
  7012.     { Bad_Opcode },
  7013.     { Bad_Opcode },
  7014.     /* 98 */
  7015.     { Bad_Opcode },
  7016.     { Bad_Opcode },
  7017.     { Bad_Opcode },
  7018.     { Bad_Opcode },
  7019.     { Bad_Opcode },
  7020.     { Bad_Opcode },
  7021.     { Bad_Opcode },
  7022.     { Bad_Opcode },
  7023.     /* a0 */
  7024.     { Bad_Opcode },
  7025.     { Bad_Opcode },
  7026.     { Bad_Opcode },
  7027.     { Bad_Opcode },
  7028.     { Bad_Opcode },
  7029.     { Bad_Opcode },
  7030.     { Bad_Opcode },
  7031.     { Bad_Opcode },
  7032.     /* a8 */
  7033.     { Bad_Opcode },
  7034.     { Bad_Opcode },
  7035.     { Bad_Opcode },
  7036.     { Bad_Opcode },
  7037.     { Bad_Opcode },
  7038.     { Bad_Opcode },
  7039.     { Bad_Opcode },
  7040.     { Bad_Opcode },
  7041.     /* b0 */
  7042.     { Bad_Opcode },
  7043.     { Bad_Opcode },
  7044.     { Bad_Opcode },
  7045.     { Bad_Opcode },
  7046.     { Bad_Opcode },
  7047.     { Bad_Opcode },
  7048.     { Bad_Opcode },
  7049.     { Bad_Opcode },
  7050.     /* b8 */
  7051.     { Bad_Opcode },
  7052.     { Bad_Opcode },
  7053.     { Bad_Opcode },
  7054.     { Bad_Opcode },
  7055.     { Bad_Opcode },
  7056.     { Bad_Opcode },
  7057.     { Bad_Opcode },
  7058.     { Bad_Opcode },
  7059.     /* c0 */
  7060.     { Bad_Opcode },
  7061.     { Bad_Opcode },
  7062.     { Bad_Opcode },
  7063.     { Bad_Opcode },
  7064.     { Bad_Opcode },
  7065.     { Bad_Opcode },
  7066.     { Bad_Opcode },
  7067.     { Bad_Opcode },
  7068.     /* c8 */
  7069.     { Bad_Opcode },
  7070.     { Bad_Opcode },
  7071.     { Bad_Opcode },
  7072.     { Bad_Opcode },
  7073.     { PREFIX_TABLE (PREFIX_0F3ACC) },
  7074.     { Bad_Opcode },
  7075.     { Bad_Opcode },
  7076.     { Bad_Opcode },
  7077.     /* d0 */
  7078.     { Bad_Opcode },
  7079.     { Bad_Opcode },
  7080.     { Bad_Opcode },
  7081.     { Bad_Opcode },
  7082.     { Bad_Opcode },
  7083.     { Bad_Opcode },
  7084.     { Bad_Opcode },
  7085.     { Bad_Opcode },
  7086.     /* d8 */
  7087.     { Bad_Opcode },
  7088.     { Bad_Opcode },
  7089.     { Bad_Opcode },
  7090.     { Bad_Opcode },
  7091.     { Bad_Opcode },
  7092.     { Bad_Opcode },
  7093.     { Bad_Opcode },
  7094.     { PREFIX_TABLE (PREFIX_0F3ADF) },
  7095.     /* e0 */
  7096.     { Bad_Opcode },
  7097.     { Bad_Opcode },
  7098.     { Bad_Opcode },
  7099.     { Bad_Opcode },
  7100.     { Bad_Opcode },
  7101.     { Bad_Opcode },
  7102.     { Bad_Opcode },
  7103.     { Bad_Opcode },
  7104.     /* e8 */
  7105.     { Bad_Opcode },
  7106.     { Bad_Opcode },
  7107.     { Bad_Opcode },
  7108.     { Bad_Opcode },
  7109.     { Bad_Opcode },
  7110.     { Bad_Opcode },
  7111.     { Bad_Opcode },
  7112.     { Bad_Opcode },
  7113.     /* f0 */
  7114.     { Bad_Opcode },
  7115.     { Bad_Opcode },
  7116.     { Bad_Opcode },
  7117.     { Bad_Opcode },
  7118.     { Bad_Opcode },
  7119.     { Bad_Opcode },
  7120.     { Bad_Opcode },
  7121.     { Bad_Opcode },
  7122.     /* f8 */
  7123.     { Bad_Opcode },
  7124.     { Bad_Opcode },
  7125.     { Bad_Opcode },
  7126.     { Bad_Opcode },
  7127.     { Bad_Opcode },
  7128.     { Bad_Opcode },
  7129.     { Bad_Opcode },
  7130.     { Bad_Opcode },
  7131.   },
  7132.  
  7133.   /* THREE_BYTE_0F7A */
  7134.   {
  7135.     /* 00 */
  7136.     { Bad_Opcode },
  7137.     { Bad_Opcode },
  7138.     { Bad_Opcode },
  7139.     { Bad_Opcode },
  7140.     { Bad_Opcode },
  7141.     { Bad_Opcode },
  7142.     { Bad_Opcode },
  7143.     { Bad_Opcode },
  7144.     /* 08 */
  7145.     { Bad_Opcode },
  7146.     { Bad_Opcode },
  7147.     { Bad_Opcode },
  7148.     { Bad_Opcode },
  7149.     { Bad_Opcode },
  7150.     { Bad_Opcode },
  7151.     { Bad_Opcode },
  7152.     { Bad_Opcode },
  7153.     /* 10 */
  7154.     { Bad_Opcode },
  7155.     { Bad_Opcode },
  7156.     { Bad_Opcode },
  7157.     { Bad_Opcode },
  7158.     { Bad_Opcode },
  7159.     { Bad_Opcode },
  7160.     { Bad_Opcode },
  7161.     { Bad_Opcode },
  7162.     /* 18 */
  7163.     { Bad_Opcode },
  7164.     { Bad_Opcode },
  7165.     { Bad_Opcode },
  7166.     { Bad_Opcode },
  7167.     { Bad_Opcode },
  7168.     { Bad_Opcode },
  7169.     { Bad_Opcode },
  7170.     { Bad_Opcode },
  7171.     /* 20 */
  7172.     { "ptest",          { XX } },
  7173.     { Bad_Opcode },
  7174.     { Bad_Opcode },
  7175.     { Bad_Opcode },
  7176.     { Bad_Opcode },
  7177.     { Bad_Opcode },
  7178.     { Bad_Opcode },
  7179.     { Bad_Opcode },
  7180.     /* 28 */
  7181.     { Bad_Opcode },
  7182.     { Bad_Opcode },
  7183.     { Bad_Opcode },
  7184.     { Bad_Opcode },
  7185.     { Bad_Opcode },
  7186.     { Bad_Opcode },
  7187.     { Bad_Opcode },
  7188.     { Bad_Opcode },
  7189.     /* 30 */
  7190.     { Bad_Opcode },
  7191.     { Bad_Opcode },
  7192.     { Bad_Opcode },
  7193.     { Bad_Opcode },
  7194.     { Bad_Opcode },
  7195.     { Bad_Opcode },
  7196.     { Bad_Opcode },
  7197.     { Bad_Opcode },
  7198.     /* 38 */
  7199.     { Bad_Opcode },
  7200.     { Bad_Opcode },
  7201.     { Bad_Opcode },
  7202.     { Bad_Opcode },
  7203.     { Bad_Opcode },
  7204.     { Bad_Opcode },
  7205.     { Bad_Opcode },
  7206.     { Bad_Opcode },
  7207.     /* 40 */
  7208.     { Bad_Opcode },
  7209.     { "phaddbw",        { XM, EXq } },
  7210.     { "phaddbd",        { XM, EXq } },
  7211.     { "phaddbq",        { XM, EXq } },
  7212.     { Bad_Opcode },
  7213.     { Bad_Opcode },
  7214.     { "phaddwd",        { XM, EXq } },
  7215.     { "phaddwq",        { XM, EXq } },
  7216.     /* 48 */
  7217.     { Bad_Opcode },
  7218.     { Bad_Opcode },
  7219.     { Bad_Opcode },
  7220.     { "phadddq",        { XM, EXq } },
  7221.     { Bad_Opcode },
  7222.     { Bad_Opcode },
  7223.     { Bad_Opcode },
  7224.     { Bad_Opcode },
  7225.     /* 50 */
  7226.     { Bad_Opcode },
  7227.     { "phaddubw",       { XM, EXq } },
  7228.     { "phaddubd",       { XM, EXq } },
  7229.     { "phaddubq",       { XM, EXq } },
  7230.     { Bad_Opcode },
  7231.     { Bad_Opcode },
  7232.     { "phadduwd",       { XM, EXq } },
  7233.     { "phadduwq",       { XM, EXq } },
  7234.     /* 58 */
  7235.     { Bad_Opcode },
  7236.     { Bad_Opcode },
  7237.     { Bad_Opcode },
  7238.     { "phaddudq",       { XM, EXq } },
  7239.     { Bad_Opcode },
  7240.     { Bad_Opcode },
  7241.     { Bad_Opcode },
  7242.     { Bad_Opcode },
  7243.     /* 60 */
  7244.     { Bad_Opcode },
  7245.     { "phsubbw",        { XM, EXq } },
  7246.     { "phsubbd",        { XM, EXq } },
  7247.     { "phsubbq",        { XM, EXq } },
  7248.     { Bad_Opcode },
  7249.     { Bad_Opcode },
  7250.     { Bad_Opcode },
  7251.     { Bad_Opcode },
  7252.     /* 68 */
  7253.     { Bad_Opcode },
  7254.     { Bad_Opcode },
  7255.     { Bad_Opcode },
  7256.     { Bad_Opcode },
  7257.     { Bad_Opcode },
  7258.     { Bad_Opcode },
  7259.     { Bad_Opcode },
  7260.     { Bad_Opcode },
  7261.     /* 70 */
  7262.     { Bad_Opcode },
  7263.     { Bad_Opcode },
  7264.     { Bad_Opcode },
  7265.     { Bad_Opcode },
  7266.     { Bad_Opcode },
  7267.     { Bad_Opcode },
  7268.     { Bad_Opcode },
  7269.     { Bad_Opcode },
  7270.     /* 78 */
  7271.     { Bad_Opcode },
  7272.     { Bad_Opcode },
  7273.     { Bad_Opcode },
  7274.     { Bad_Opcode },
  7275.     { Bad_Opcode },
  7276.     { Bad_Opcode },
  7277.     { Bad_Opcode },
  7278.     { Bad_Opcode },
  7279.     /* 80 */
  7280.     { Bad_Opcode },
  7281.     { Bad_Opcode },
  7282.     { Bad_Opcode },
  7283.     { Bad_Opcode },
  7284.     { Bad_Opcode },
  7285.     { Bad_Opcode },
  7286.     { Bad_Opcode },
  7287.     { Bad_Opcode },
  7288.     /* 88 */
  7289.     { Bad_Opcode },
  7290.     { Bad_Opcode },
  7291.     { Bad_Opcode },
  7292.     { Bad_Opcode },
  7293.     { Bad_Opcode },
  7294.     { Bad_Opcode },
  7295.     { Bad_Opcode },
  7296.     { Bad_Opcode },
  7297.     /* 90 */
  7298.     { Bad_Opcode },
  7299.     { Bad_Opcode },
  7300.     { Bad_Opcode },
  7301.     { Bad_Opcode },
  7302.     { Bad_Opcode },
  7303.     { Bad_Opcode },
  7304.     { Bad_Opcode },
  7305.     { Bad_Opcode },
  7306.     /* 98 */
  7307.     { Bad_Opcode },
  7308.     { Bad_Opcode },
  7309.     { Bad_Opcode },
  7310.     { Bad_Opcode },
  7311.     { Bad_Opcode },
  7312.     { Bad_Opcode },
  7313.     { Bad_Opcode },
  7314.     { Bad_Opcode },
  7315.     /* a0 */
  7316.     { Bad_Opcode },
  7317.     { Bad_Opcode },
  7318.     { Bad_Opcode },
  7319.     { Bad_Opcode },
  7320.     { Bad_Opcode },
  7321.     { Bad_Opcode },
  7322.     { Bad_Opcode },
  7323.     { Bad_Opcode },
  7324.     /* a8 */
  7325.     { Bad_Opcode },
  7326.     { Bad_Opcode },
  7327.     { Bad_Opcode },
  7328.     { Bad_Opcode },
  7329.     { Bad_Opcode },
  7330.     { Bad_Opcode },
  7331.     { Bad_Opcode },
  7332.     { Bad_Opcode },
  7333.     /* b0 */
  7334.     { Bad_Opcode },
  7335.     { Bad_Opcode },
  7336.     { Bad_Opcode },
  7337.     { Bad_Opcode },
  7338.     { Bad_Opcode },
  7339.     { Bad_Opcode },
  7340.     { Bad_Opcode },
  7341.     { Bad_Opcode },
  7342.     /* b8 */
  7343.     { Bad_Opcode },
  7344.     { Bad_Opcode },
  7345.     { Bad_Opcode },
  7346.     { Bad_Opcode },
  7347.     { Bad_Opcode },
  7348.     { Bad_Opcode },
  7349.     { Bad_Opcode },
  7350.     { Bad_Opcode },
  7351.     /* c0 */
  7352.     { Bad_Opcode },
  7353.     { Bad_Opcode },
  7354.     { Bad_Opcode },
  7355.     { Bad_Opcode },
  7356.     { Bad_Opcode },
  7357.     { Bad_Opcode },
  7358.     { Bad_Opcode },
  7359.     { Bad_Opcode },
  7360.     /* c8 */
  7361.     { Bad_Opcode },
  7362.     { Bad_Opcode },
  7363.     { Bad_Opcode },
  7364.     { Bad_Opcode },
  7365.     { Bad_Opcode },
  7366.     { Bad_Opcode },
  7367.     { Bad_Opcode },
  7368.     { Bad_Opcode },
  7369.     /* d0 */
  7370.     { Bad_Opcode },
  7371.     { Bad_Opcode },
  7372.     { Bad_Opcode },
  7373.     { Bad_Opcode },
  7374.     { Bad_Opcode },
  7375.     { Bad_Opcode },
  7376.     { Bad_Opcode },
  7377.     { Bad_Opcode },
  7378.     /* d8 */
  7379.     { Bad_Opcode },
  7380.     { Bad_Opcode },
  7381.     { Bad_Opcode },
  7382.     { Bad_Opcode },
  7383.     { Bad_Opcode },
  7384.     { Bad_Opcode },
  7385.     { Bad_Opcode },
  7386.     { Bad_Opcode },
  7387.     /* e0 */
  7388.     { Bad_Opcode },
  7389.     { Bad_Opcode },
  7390.     { Bad_Opcode },
  7391.     { Bad_Opcode },
  7392.     { Bad_Opcode },
  7393.     { Bad_Opcode },
  7394.     { Bad_Opcode },
  7395.     { Bad_Opcode },
  7396.     /* e8 */
  7397.     { Bad_Opcode },
  7398.     { Bad_Opcode },
  7399.     { Bad_Opcode },
  7400.     { Bad_Opcode },
  7401.     { Bad_Opcode },
  7402.     { Bad_Opcode },
  7403.     { Bad_Opcode },
  7404.     { Bad_Opcode },
  7405.     /* f0 */
  7406.     { Bad_Opcode },
  7407.     { Bad_Opcode },
  7408.     { Bad_Opcode },
  7409.     { Bad_Opcode },
  7410.     { Bad_Opcode },
  7411.     { Bad_Opcode },
  7412.     { Bad_Opcode },
  7413.     { Bad_Opcode },
  7414.     /* f8 */
  7415.     { Bad_Opcode },
  7416.     { Bad_Opcode },
  7417.     { Bad_Opcode },
  7418.     { Bad_Opcode },
  7419.     { Bad_Opcode },
  7420.     { Bad_Opcode },
  7421.     { Bad_Opcode },
  7422.     { Bad_Opcode },
  7423.   },
  7424. };
  7425.  
  7426. static const struct dis386 xop_table[][256] = {
  7427.   /* XOP_08 */
  7428.   {
  7429.     /* 00 */
  7430.     { Bad_Opcode },
  7431.     { Bad_Opcode },
  7432.     { Bad_Opcode },
  7433.     { Bad_Opcode },
  7434.     { Bad_Opcode },
  7435.     { Bad_Opcode },
  7436.     { Bad_Opcode },
  7437.     { Bad_Opcode },
  7438.     /* 08 */
  7439.     { Bad_Opcode },
  7440.     { Bad_Opcode },
  7441.     { Bad_Opcode },
  7442.     { Bad_Opcode },
  7443.     { Bad_Opcode },
  7444.     { Bad_Opcode },
  7445.     { Bad_Opcode },
  7446.     { Bad_Opcode },
  7447.     /* 10 */
  7448.     { Bad_Opcode },
  7449.     { Bad_Opcode },
  7450.     { Bad_Opcode },
  7451.     { Bad_Opcode },
  7452.     { Bad_Opcode },
  7453.     { Bad_Opcode },
  7454.     { Bad_Opcode },
  7455.     { Bad_Opcode },
  7456.     /* 18 */
  7457.     { Bad_Opcode },
  7458.     { Bad_Opcode },
  7459.     { Bad_Opcode },
  7460.     { Bad_Opcode },
  7461.     { Bad_Opcode },
  7462.     { Bad_Opcode },
  7463.     { Bad_Opcode },
  7464.     { Bad_Opcode },
  7465.     /* 20 */
  7466.     { Bad_Opcode },
  7467.     { Bad_Opcode },
  7468.     { Bad_Opcode },
  7469.     { Bad_Opcode },
  7470.     { Bad_Opcode },
  7471.     { Bad_Opcode },
  7472.     { Bad_Opcode },
  7473.     { Bad_Opcode },
  7474.     /* 28 */
  7475.     { Bad_Opcode },
  7476.     { Bad_Opcode },
  7477.     { Bad_Opcode },
  7478.     { Bad_Opcode },
  7479.     { Bad_Opcode },
  7480.     { Bad_Opcode },
  7481.     { Bad_Opcode },
  7482.     { Bad_Opcode },
  7483.     /* 30 */
  7484.     { Bad_Opcode },
  7485.     { Bad_Opcode },
  7486.     { Bad_Opcode },
  7487.     { Bad_Opcode },
  7488.     { Bad_Opcode },
  7489.     { Bad_Opcode },
  7490.     { Bad_Opcode },
  7491.     { Bad_Opcode },
  7492.     /* 38 */
  7493.     { Bad_Opcode },
  7494.     { Bad_Opcode },
  7495.     { Bad_Opcode },
  7496.     { Bad_Opcode },
  7497.     { Bad_Opcode },
  7498.     { Bad_Opcode },
  7499.     { Bad_Opcode },
  7500.     { Bad_Opcode },
  7501.     /* 40 */
  7502.     { Bad_Opcode },
  7503.     { Bad_Opcode },
  7504.     { Bad_Opcode },
  7505.     { Bad_Opcode },
  7506.     { Bad_Opcode },
  7507.     { Bad_Opcode },
  7508.     { Bad_Opcode },
  7509.     { Bad_Opcode },
  7510.     /* 48 */
  7511.     { Bad_Opcode },
  7512.     { Bad_Opcode },
  7513.     { Bad_Opcode },
  7514.     { Bad_Opcode },
  7515.     { Bad_Opcode },
  7516.     { Bad_Opcode },
  7517.     { Bad_Opcode },
  7518.     { Bad_Opcode },
  7519.     /* 50 */
  7520.     { Bad_Opcode },
  7521.     { Bad_Opcode },
  7522.     { Bad_Opcode },
  7523.     { Bad_Opcode },
  7524.     { Bad_Opcode },
  7525.     { Bad_Opcode },
  7526.     { Bad_Opcode },
  7527.     { Bad_Opcode },
  7528.     /* 58 */
  7529.     { Bad_Opcode },
  7530.     { Bad_Opcode },
  7531.     { Bad_Opcode },
  7532.     { Bad_Opcode },
  7533.     { Bad_Opcode },
  7534.     { Bad_Opcode },
  7535.     { Bad_Opcode },
  7536.     { Bad_Opcode },
  7537.     /* 60 */
  7538.     { Bad_Opcode },
  7539.     { Bad_Opcode },
  7540.     { Bad_Opcode },
  7541.     { Bad_Opcode },
  7542.     { Bad_Opcode },
  7543.     { Bad_Opcode },
  7544.     { Bad_Opcode },
  7545.     { Bad_Opcode },
  7546.     /* 68 */
  7547.     { Bad_Opcode },
  7548.     { Bad_Opcode },
  7549.     { Bad_Opcode },
  7550.     { Bad_Opcode },
  7551.     { Bad_Opcode },
  7552.     { Bad_Opcode },
  7553.     { Bad_Opcode },
  7554.     { Bad_Opcode },
  7555.     /* 70 */
  7556.     { Bad_Opcode },
  7557.     { Bad_Opcode },
  7558.     { Bad_Opcode },
  7559.     { Bad_Opcode },
  7560.     { Bad_Opcode },
  7561.     { Bad_Opcode },
  7562.     { Bad_Opcode },
  7563.     { Bad_Opcode },
  7564.     /* 78 */
  7565.     { Bad_Opcode },
  7566.     { Bad_Opcode },
  7567.     { Bad_Opcode },
  7568.     { Bad_Opcode },
  7569.     { Bad_Opcode },
  7570.     { Bad_Opcode },
  7571.     { Bad_Opcode },
  7572.     { Bad_Opcode },
  7573.     /* 80 */
  7574.     { Bad_Opcode },
  7575.     { Bad_Opcode },
  7576.     { Bad_Opcode },
  7577.     { Bad_Opcode },
  7578.     { Bad_Opcode },
  7579.     { "vpmacssww",      { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7580.     { "vpmacsswd",      { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7581.     { "vpmacssdql",     { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7582.     /* 88 */
  7583.     { Bad_Opcode },
  7584.     { Bad_Opcode },
  7585.     { Bad_Opcode },
  7586.     { Bad_Opcode },
  7587.     { Bad_Opcode },
  7588.     { Bad_Opcode },
  7589.     { "vpmacssdd",      { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7590.     { "vpmacssdqh",     { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7591.     /* 90 */
  7592.     { Bad_Opcode },
  7593.     { Bad_Opcode },
  7594.     { Bad_Opcode },
  7595.     { Bad_Opcode },
  7596.     { Bad_Opcode },
  7597.     { "vpmacsww",       { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7598.     { "vpmacswd",       { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7599.     { "vpmacsdql",      { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7600.     /* 98 */
  7601.     { Bad_Opcode },
  7602.     { Bad_Opcode },
  7603.     { Bad_Opcode },
  7604.     { Bad_Opcode },
  7605.     { Bad_Opcode },
  7606.     { Bad_Opcode },
  7607.     { "vpmacsdd",       { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7608.     { "vpmacsdqh",      { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7609.     /* a0 */
  7610.     { Bad_Opcode },
  7611.     { Bad_Opcode },
  7612.     { "vpcmov",         { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7613.     { "vpperm",         { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7614.     { Bad_Opcode },
  7615.     { Bad_Opcode },
  7616.     { "vpmadcsswd",     { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7617.     { Bad_Opcode },
  7618.     /* a8 */
  7619.     { Bad_Opcode },
  7620.     { Bad_Opcode },
  7621.     { Bad_Opcode },
  7622.     { Bad_Opcode },
  7623.     { Bad_Opcode },
  7624.     { Bad_Opcode },
  7625.     { Bad_Opcode },
  7626.     { Bad_Opcode },
  7627.     /* b0 */
  7628.     { Bad_Opcode },
  7629.     { Bad_Opcode },
  7630.     { Bad_Opcode },
  7631.     { Bad_Opcode },
  7632.     { Bad_Opcode },
  7633.     { Bad_Opcode },
  7634.     { "vpmadcswd",      { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
  7635.     { Bad_Opcode },
  7636.     /* b8 */
  7637.     { Bad_Opcode },
  7638.     { Bad_Opcode },
  7639.     { Bad_Opcode },
  7640.     { Bad_Opcode },
  7641.     { Bad_Opcode },
  7642.     { Bad_Opcode },
  7643.     { Bad_Opcode },
  7644.     { Bad_Opcode },
  7645.     /* c0 */
  7646.     { "vprotb",         { XM, Vex_2src_1, Ib } },
  7647.     { "vprotw",         { XM, Vex_2src_1, Ib } },
  7648.     { "vprotd",         { XM, Vex_2src_1, Ib } },
  7649.     { "vprotq",         { XM, Vex_2src_1, Ib } },
  7650.     { Bad_Opcode },
  7651.     { Bad_Opcode },
  7652.     { Bad_Opcode },
  7653.     { Bad_Opcode },
  7654.     /* c8 */
  7655.     { Bad_Opcode },
  7656.     { Bad_Opcode },
  7657.     { Bad_Opcode },
  7658.     { Bad_Opcode },
  7659.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
  7660.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
  7661.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
  7662.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
  7663.     /* d0 */
  7664.     { Bad_Opcode },
  7665.     { Bad_Opcode },
  7666.     { Bad_Opcode },
  7667.     { Bad_Opcode },
  7668.     { Bad_Opcode },
  7669.     { Bad_Opcode },
  7670.     { Bad_Opcode },
  7671.     { Bad_Opcode },
  7672.     /* d8 */
  7673.     { Bad_Opcode },
  7674.     { Bad_Opcode },
  7675.     { Bad_Opcode },
  7676.     { Bad_Opcode },
  7677.     { Bad_Opcode },
  7678.     { Bad_Opcode },
  7679.     { Bad_Opcode },
  7680.     { Bad_Opcode },
  7681.     /* e0 */
  7682.     { Bad_Opcode },
  7683.     { Bad_Opcode },
  7684.     { Bad_Opcode },
  7685.     { Bad_Opcode },
  7686.     { Bad_Opcode },
  7687.     { Bad_Opcode },
  7688.     { Bad_Opcode },
  7689.     { Bad_Opcode },
  7690.     /* e8 */
  7691.     { Bad_Opcode },
  7692.     { Bad_Opcode },
  7693.     { Bad_Opcode },
  7694.     { Bad_Opcode },
  7695.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
  7696.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
  7697.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
  7698.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
  7699.     /* f0 */
  7700.     { Bad_Opcode },
  7701.     { Bad_Opcode },
  7702.     { Bad_Opcode },
  7703.     { Bad_Opcode },
  7704.     { Bad_Opcode },
  7705.     { Bad_Opcode },
  7706.     { Bad_Opcode },
  7707.     { Bad_Opcode },
  7708.     /* f8 */
  7709.     { Bad_Opcode },
  7710.     { Bad_Opcode },
  7711.     { Bad_Opcode },
  7712.     { Bad_Opcode },
  7713.     { Bad_Opcode },
  7714.     { Bad_Opcode },
  7715.     { Bad_Opcode },
  7716.     { Bad_Opcode },
  7717.   },
  7718.   /* XOP_09 */
  7719.   {
  7720.     /* 00 */
  7721.     { Bad_Opcode },
  7722.     { REG_TABLE (REG_XOP_TBM_01) },
  7723.     { REG_TABLE (REG_XOP_TBM_02) },
  7724.     { Bad_Opcode },
  7725.     { Bad_Opcode },
  7726.     { Bad_Opcode },
  7727.     { Bad_Opcode },
  7728.     { Bad_Opcode },
  7729.     /* 08 */
  7730.     { Bad_Opcode },
  7731.     { Bad_Opcode },
  7732.     { Bad_Opcode },
  7733.     { Bad_Opcode },
  7734.     { Bad_Opcode },
  7735.     { Bad_Opcode },
  7736.     { Bad_Opcode },
  7737.     { Bad_Opcode },
  7738.     /* 10 */
  7739.     { Bad_Opcode },
  7740.     { Bad_Opcode },
  7741.     { REG_TABLE (REG_XOP_LWPCB) },
  7742.     { Bad_Opcode },
  7743.     { Bad_Opcode },
  7744.     { Bad_Opcode },
  7745.     { Bad_Opcode },
  7746.     { Bad_Opcode },
  7747.     /* 18 */
  7748.     { Bad_Opcode },
  7749.     { Bad_Opcode },
  7750.     { Bad_Opcode },
  7751.     { Bad_Opcode },
  7752.     { Bad_Opcode },
  7753.     { Bad_Opcode },
  7754.     { Bad_Opcode },
  7755.     { Bad_Opcode },
  7756.     /* 20 */
  7757.     { Bad_Opcode },
  7758.     { Bad_Opcode },
  7759.     { Bad_Opcode },
  7760.     { Bad_Opcode },
  7761.     { Bad_Opcode },
  7762.     { Bad_Opcode },
  7763.     { Bad_Opcode },
  7764.     { Bad_Opcode },
  7765.     /* 28 */
  7766.     { Bad_Opcode },
  7767.     { Bad_Opcode },
  7768.     { Bad_Opcode },
  7769.     { Bad_Opcode },
  7770.     { Bad_Opcode },
  7771.     { Bad_Opcode },
  7772.     { Bad_Opcode },
  7773.     { Bad_Opcode },
  7774.     /* 30 */
  7775.     { Bad_Opcode },
  7776.     { Bad_Opcode },
  7777.     { Bad_Opcode },
  7778.     { Bad_Opcode },
  7779.     { Bad_Opcode },
  7780.     { Bad_Opcode },
  7781.     { Bad_Opcode },
  7782.     { Bad_Opcode },
  7783.     /* 38 */
  7784.     { Bad_Opcode },
  7785.     { Bad_Opcode },
  7786.     { Bad_Opcode },
  7787.     { Bad_Opcode },
  7788.     { Bad_Opcode },
  7789.     { Bad_Opcode },
  7790.     { Bad_Opcode },
  7791.     { Bad_Opcode },
  7792.     /* 40 */
  7793.     { Bad_Opcode },
  7794.     { Bad_Opcode },
  7795.     { Bad_Opcode },
  7796.     { Bad_Opcode },
  7797.     { Bad_Opcode },
  7798.     { Bad_Opcode },
  7799.     { Bad_Opcode },
  7800.     { Bad_Opcode },
  7801.     /* 48 */
  7802.     { Bad_Opcode },
  7803.     { Bad_Opcode },
  7804.     { Bad_Opcode },
  7805.     { Bad_Opcode },
  7806.     { Bad_Opcode },
  7807.     { Bad_Opcode },
  7808.     { Bad_Opcode },
  7809.     { Bad_Opcode },
  7810.     /* 50 */
  7811.     { Bad_Opcode },
  7812.     { Bad_Opcode },
  7813.     { Bad_Opcode },
  7814.     { Bad_Opcode },
  7815.     { Bad_Opcode },
  7816.     { Bad_Opcode },
  7817.     { Bad_Opcode },
  7818.     { Bad_Opcode },
  7819.     /* 58 */
  7820.     { Bad_Opcode },
  7821.     { Bad_Opcode },
  7822.     { Bad_Opcode },
  7823.     { Bad_Opcode },
  7824.     { Bad_Opcode },
  7825.     { Bad_Opcode },
  7826.     { Bad_Opcode },
  7827.     { Bad_Opcode },
  7828.     /* 60 */
  7829.     { Bad_Opcode },
  7830.     { Bad_Opcode },
  7831.     { Bad_Opcode },
  7832.     { Bad_Opcode },
  7833.     { Bad_Opcode },
  7834.     { Bad_Opcode },
  7835.     { Bad_Opcode },
  7836.     { Bad_Opcode },
  7837.     /* 68 */
  7838.     { Bad_Opcode },
  7839.     { Bad_Opcode },
  7840.     { Bad_Opcode },
  7841.     { Bad_Opcode },
  7842.     { Bad_Opcode },
  7843.     { Bad_Opcode },
  7844.     { Bad_Opcode },
  7845.     { Bad_Opcode },
  7846.     /* 70 */
  7847.     { Bad_Opcode },
  7848.     { Bad_Opcode },
  7849.     { Bad_Opcode },
  7850.     { Bad_Opcode },
  7851.     { Bad_Opcode },
  7852.     { Bad_Opcode },
  7853.     { Bad_Opcode },
  7854.     { Bad_Opcode },
  7855.     /* 78 */
  7856.     { Bad_Opcode },
  7857.     { Bad_Opcode },
  7858.     { Bad_Opcode },
  7859.     { Bad_Opcode },
  7860.     { Bad_Opcode },
  7861.     { Bad_Opcode },
  7862.     { Bad_Opcode },
  7863.     { Bad_Opcode },
  7864.     /* 80 */
  7865.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
  7866.     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
  7867.     { "vfrczss",        { XM, EXd } },
  7868.     { "vfrczsd",        { XM, EXq } },
  7869.     { Bad_Opcode },
  7870.     { Bad_Opcode },
  7871.     { Bad_Opcode },
  7872.     { Bad_Opcode },
  7873.     /* 88 */
  7874.     { Bad_Opcode },
  7875.     { Bad_Opcode },
  7876.     { Bad_Opcode },
  7877.     { Bad_Opcode },
  7878.     { Bad_Opcode },
  7879.     { Bad_Opcode },
  7880.     { Bad_Opcode },
  7881.     { Bad_Opcode },
  7882.     /* 90 */
  7883.     { "vprotb",         { XM, Vex_2src_1, Vex_2src_2 } },
  7884.     { "vprotw",         { XM, Vex_2src_1, Vex_2src_2 } },
  7885.     { "vprotd",         { XM, Vex_2src_1, Vex_2src_2 } },
  7886.     { "vprotq",         { XM, Vex_2src_1, Vex_2src_2 } },
  7887.     { "vpshlb",         { XM, Vex_2src_1, Vex_2src_2 } },
  7888.     { "vpshlw",         { XM, Vex_2src_1, Vex_2src_2 } },
  7889.     { "vpshld",         { XM, Vex_2src_1, Vex_2src_2 } },
  7890.     { "vpshlq",         { XM, Vex_2src_1, Vex_2src_2 } },
  7891.     /* 98 */
  7892.     { "vpshab",         { XM, Vex_2src_1, Vex_2src_2 } },
  7893.     { "vpshaw",         { XM, Vex_2src_1, Vex_2src_2 } },
  7894.     { "vpshad",         { XM, Vex_2src_1, Vex_2src_2 } },
  7895.     { "vpshaq",         { XM, Vex_2src_1, Vex_2src_2 } },
  7896.     { Bad_Opcode },
  7897.     { Bad_Opcode },
  7898.     { Bad_Opcode },
  7899.     { Bad_Opcode },
  7900.     /* a0 */
  7901.     { Bad_Opcode },
  7902.     { Bad_Opcode },
  7903.     { Bad_Opcode },
  7904.     { Bad_Opcode },
  7905.     { Bad_Opcode },
  7906.     { Bad_Opcode },
  7907.     { Bad_Opcode },
  7908.     { Bad_Opcode },
  7909.     /* a8 */
  7910.     { Bad_Opcode },
  7911.     { Bad_Opcode },
  7912.     { Bad_Opcode },
  7913.     { Bad_Opcode },
  7914.     { Bad_Opcode },
  7915.     { Bad_Opcode },
  7916.     { Bad_Opcode },
  7917.     { Bad_Opcode },
  7918.     /* b0 */
  7919.     { Bad_Opcode },
  7920.     { Bad_Opcode },
  7921.     { Bad_Opcode },
  7922.     { Bad_Opcode },
  7923.     { Bad_Opcode },
  7924.     { Bad_Opcode },
  7925.     { Bad_Opcode },
  7926.     { Bad_Opcode },
  7927.     /* b8 */
  7928.     { Bad_Opcode },
  7929.     { Bad_Opcode },
  7930.     { Bad_Opcode },
  7931.     { Bad_Opcode },
  7932.     { Bad_Opcode },
  7933.     { Bad_Opcode },
  7934.     { Bad_Opcode },
  7935.     { Bad_Opcode },
  7936.     /* c0 */
  7937.     { Bad_Opcode },
  7938.     { "vphaddbw",       { XM, EXxmm } },
  7939.     { "vphaddbd",       { XM, EXxmm } },
  7940.     { "vphaddbq",       { XM, EXxmm } },
  7941.     { Bad_Opcode },
  7942.     { Bad_Opcode },
  7943.     { "vphaddwd",       { XM, EXxmm } },
  7944.     { "vphaddwq",       { XM, EXxmm } },
  7945.     /* c8 */
  7946.     { Bad_Opcode },
  7947.     { Bad_Opcode },
  7948.     { Bad_Opcode },
  7949.     { "vphadddq",       { XM, EXxmm } },
  7950.     { Bad_Opcode },
  7951.     { Bad_Opcode },
  7952.     { Bad_Opcode },
  7953.     { Bad_Opcode },
  7954.     /* d0 */
  7955.     { Bad_Opcode },
  7956.     { "vphaddubw",      { XM, EXxmm } },
  7957.     { "vphaddubd",      { XM, EXxmm } },
  7958.     { "vphaddubq",      { XM, EXxmm } },
  7959.     { Bad_Opcode },
  7960.     { Bad_Opcode },
  7961.     { "vphadduwd",      { XM, EXxmm } },
  7962.     { "vphadduwq",      { XM, EXxmm } },
  7963.     /* d8 */
  7964.     { Bad_Opcode },
  7965.     { Bad_Opcode },
  7966.     { Bad_Opcode },
  7967.     { "vphaddudq",      { XM, EXxmm } },
  7968.     { Bad_Opcode },
  7969.     { Bad_Opcode },
  7970.     { Bad_Opcode },
  7971.     { Bad_Opcode },
  7972.     /* e0 */
  7973.     { Bad_Opcode },
  7974.     { "vphsubbw",       { XM, EXxmm } },
  7975.     { "vphsubwd",       { XM, EXxmm } },
  7976.     { "vphsubdq",       { XM, EXxmm } },
  7977.     { Bad_Opcode },
  7978.     { Bad_Opcode },
  7979.     { Bad_Opcode },
  7980.     { Bad_Opcode },
  7981.     /* e8 */
  7982.     { Bad_Opcode },
  7983.     { Bad_Opcode },
  7984.     { Bad_Opcode },
  7985.     { Bad_Opcode },
  7986.     { Bad_Opcode },
  7987.     { Bad_Opcode },
  7988.     { Bad_Opcode },
  7989.     { Bad_Opcode },
  7990.     /* f0 */
  7991.     { Bad_Opcode },
  7992.     { Bad_Opcode },
  7993.     { Bad_Opcode },
  7994.     { Bad_Opcode },
  7995.     { Bad_Opcode },
  7996.     { Bad_Opcode },
  7997.     { Bad_Opcode },
  7998.     { Bad_Opcode },
  7999.     /* f8 */
  8000.     { Bad_Opcode },
  8001.     { Bad_Opcode },
  8002.     { Bad_Opcode },
  8003.     { Bad_Opcode },
  8004.     { Bad_Opcode },
  8005.     { Bad_Opcode },
  8006.     { Bad_Opcode },
  8007.     { Bad_Opcode },
  8008.   },
  8009.   /* XOP_0A */
  8010.   {
  8011.     /* 00 */
  8012.     { Bad_Opcode },
  8013.     { Bad_Opcode },
  8014.     { Bad_Opcode },
  8015.     { Bad_Opcode },
  8016.     { Bad_Opcode },
  8017.     { Bad_Opcode },
  8018.     { Bad_Opcode },
  8019.     { Bad_Opcode },
  8020.     /* 08 */
  8021.     { Bad_Opcode },
  8022.     { Bad_Opcode },
  8023.     { Bad_Opcode },
  8024.     { Bad_Opcode },
  8025.     { Bad_Opcode },
  8026.     { Bad_Opcode },
  8027.     { Bad_Opcode },
  8028.     { Bad_Opcode },
  8029.     /* 10 */
  8030.     { "bextr",  { Gv, Ev, Iq } },
  8031.     { Bad_Opcode },
  8032.     { REG_TABLE (REG_XOP_LWP) },
  8033.     { Bad_Opcode },
  8034.     { Bad_Opcode },
  8035.     { Bad_Opcode },
  8036.     { Bad_Opcode },
  8037.     { Bad_Opcode },
  8038.     /* 18 */
  8039.     { Bad_Opcode },
  8040.     { Bad_Opcode },
  8041.     { Bad_Opcode },
  8042.     { Bad_Opcode },
  8043.     { Bad_Opcode },
  8044.     { Bad_Opcode },
  8045.     { Bad_Opcode },
  8046.     { Bad_Opcode },
  8047.     /* 20 */
  8048.     { Bad_Opcode },
  8049.     { Bad_Opcode },
  8050.     { Bad_Opcode },
  8051.     { Bad_Opcode },
  8052.     { Bad_Opcode },
  8053.     { Bad_Opcode },
  8054.     { Bad_Opcode },
  8055.     { Bad_Opcode },
  8056.     /* 28 */
  8057.     { Bad_Opcode },
  8058.     { Bad_Opcode },
  8059.     { Bad_Opcode },
  8060.     { Bad_Opcode },
  8061.     { Bad_Opcode },
  8062.     { Bad_Opcode },
  8063.     { Bad_Opcode },
  8064.     { Bad_Opcode },
  8065.     /* 30 */
  8066.     { Bad_Opcode },
  8067.     { Bad_Opcode },
  8068.     { Bad_Opcode },
  8069.     { Bad_Opcode },
  8070.     { Bad_Opcode },
  8071.     { Bad_Opcode },
  8072.     { Bad_Opcode },
  8073.     { Bad_Opcode },
  8074.     /* 38 */
  8075.     { Bad_Opcode },
  8076.     { Bad_Opcode },
  8077.     { Bad_Opcode },
  8078.     { Bad_Opcode },
  8079.     { Bad_Opcode },
  8080.     { Bad_Opcode },
  8081.     { Bad_Opcode },
  8082.     { Bad_Opcode },
  8083.     /* 40 */
  8084.     { Bad_Opcode },
  8085.     { Bad_Opcode },
  8086.     { Bad_Opcode },
  8087.     { Bad_Opcode },
  8088.     { Bad_Opcode },
  8089.     { Bad_Opcode },
  8090.     { Bad_Opcode },
  8091.     { Bad_Opcode },
  8092.     /* 48 */
  8093.     { Bad_Opcode },
  8094.     { Bad_Opcode },
  8095.     { Bad_Opcode },
  8096.     { Bad_Opcode },
  8097.     { Bad_Opcode },
  8098.     { Bad_Opcode },
  8099.     { Bad_Opcode },
  8100.     { Bad_Opcode },
  8101.     /* 50 */
  8102.     { Bad_Opcode },
  8103.     { Bad_Opcode },
  8104.     { Bad_Opcode },
  8105.     { Bad_Opcode },
  8106.     { Bad_Opcode },
  8107.     { Bad_Opcode },
  8108.     { Bad_Opcode },
  8109.     { Bad_Opcode },
  8110.     /* 58 */
  8111.     { Bad_Opcode },
  8112.     { Bad_Opcode },
  8113.     { Bad_Opcode },
  8114.     { Bad_Opcode },
  8115.     { Bad_Opcode },
  8116.     { Bad_Opcode },
  8117.     { Bad_Opcode },
  8118.     { Bad_Opcode },
  8119.     /* 60 */
  8120.     { Bad_Opcode },
  8121.     { Bad_Opcode },
  8122.     { Bad_Opcode },
  8123.     { Bad_Opcode },
  8124.     { Bad_Opcode },
  8125.     { Bad_Opcode },
  8126.     { Bad_Opcode },
  8127.     { Bad_Opcode },
  8128.     /* 68 */
  8129.     { Bad_Opcode },
  8130.     { Bad_Opcode },
  8131.     { Bad_Opcode },
  8132.     { Bad_Opcode },
  8133.     { Bad_Opcode },
  8134.     { Bad_Opcode },
  8135.     { Bad_Opcode },
  8136.     { Bad_Opcode },
  8137.     /* 70 */
  8138.     { Bad_Opcode },
  8139.     { Bad_Opcode },
  8140.     { Bad_Opcode },
  8141.     { Bad_Opcode },
  8142.     { Bad_Opcode },
  8143.     { Bad_Opcode },
  8144.     { Bad_Opcode },
  8145.     { Bad_Opcode },
  8146.     /* 78 */
  8147.     { Bad_Opcode },
  8148.     { Bad_Opcode },
  8149.     { Bad_Opcode },
  8150.     { Bad_Opcode },
  8151.     { Bad_Opcode },
  8152.     { Bad_Opcode },
  8153.     { Bad_Opcode },
  8154.     { Bad_Opcode },
  8155.     /* 80 */
  8156.     { Bad_Opcode },
  8157.     { Bad_Opcode },
  8158.     { Bad_Opcode },
  8159.     { Bad_Opcode },
  8160.     { Bad_Opcode },
  8161.     { Bad_Opcode },
  8162.     { Bad_Opcode },
  8163.     { Bad_Opcode },
  8164.     /* 88 */
  8165.     { Bad_Opcode },
  8166.     { Bad_Opcode },
  8167.     { Bad_Opcode },
  8168.     { Bad_Opcode },
  8169.     { Bad_Opcode },
  8170.     { Bad_Opcode },
  8171.     { Bad_Opcode },
  8172.     { Bad_Opcode },
  8173.     /* 90 */
  8174.     { Bad_Opcode },
  8175.     { Bad_Opcode },
  8176.     { Bad_Opcode },
  8177.     { Bad_Opcode },
  8178.     { Bad_Opcode },
  8179.     { Bad_Opcode },
  8180.     { Bad_Opcode },
  8181.     { Bad_Opcode },
  8182.     /* 98 */
  8183.     { Bad_Opcode },
  8184.     { Bad_Opcode },
  8185.     { Bad_Opcode },
  8186.     { Bad_Opcode },
  8187.     { Bad_Opcode },
  8188.     { Bad_Opcode },
  8189.     { Bad_Opcode },
  8190.     { Bad_Opcode },
  8191.     /* a0 */
  8192.     { Bad_Opcode },
  8193.     { Bad_Opcode },
  8194.     { Bad_Opcode },
  8195.     { Bad_Opcode },
  8196.     { Bad_Opcode },
  8197.     { Bad_Opcode },
  8198.     { Bad_Opcode },
  8199.     { Bad_Opcode },
  8200.     /* a8 */
  8201.     { Bad_Opcode },
  8202.     { Bad_Opcode },
  8203.     { Bad_Opcode },
  8204.     { Bad_Opcode },
  8205.     { Bad_Opcode },
  8206.     { Bad_Opcode },
  8207.     { Bad_Opcode },
  8208.     { Bad_Opcode },
  8209.     /* b0 */
  8210.     { Bad_Opcode },
  8211.     { Bad_Opcode },
  8212.     { Bad_Opcode },
  8213.     { Bad_Opcode },
  8214.     { Bad_Opcode },
  8215.     { Bad_Opcode },
  8216.     { Bad_Opcode },
  8217.     { Bad_Opcode },
  8218.     /* b8 */
  8219.     { Bad_Opcode },
  8220.     { Bad_Opcode },
  8221.     { Bad_Opcode },
  8222.     { Bad_Opcode },
  8223.     { Bad_Opcode },
  8224.     { Bad_Opcode },
  8225.     { Bad_Opcode },
  8226.     { Bad_Opcode },
  8227.     /* c0 */
  8228.     { Bad_Opcode },
  8229.     { Bad_Opcode },
  8230.     { Bad_Opcode },
  8231.     { Bad_Opcode },
  8232.     { Bad_Opcode },
  8233.     { Bad_Opcode },
  8234.     { Bad_Opcode },
  8235.     { Bad_Opcode },
  8236.     /* c8 */
  8237.     { Bad_Opcode },
  8238.     { Bad_Opcode },
  8239.     { Bad_Opcode },
  8240.     { Bad_Opcode },
  8241.     { Bad_Opcode },
  8242.     { Bad_Opcode },
  8243.     { Bad_Opcode },
  8244.     { Bad_Opcode },
  8245.     /* d0 */
  8246.     { Bad_Opcode },
  8247.     { Bad_Opcode },
  8248.     { Bad_Opcode },
  8249.     { Bad_Opcode },
  8250.     { Bad_Opcode },
  8251.     { Bad_Opcode },
  8252.     { Bad_Opcode },
  8253.     { Bad_Opcode },
  8254.     /* d8 */
  8255.     { Bad_Opcode },
  8256.     { Bad_Opcode },
  8257.     { Bad_Opcode },
  8258.     { Bad_Opcode },
  8259.     { Bad_Opcode },
  8260.     { Bad_Opcode },
  8261.     { Bad_Opcode },
  8262.     { Bad_Opcode },
  8263.     /* e0 */
  8264.     { Bad_Opcode },
  8265.     { Bad_Opcode },
  8266.     { Bad_Opcode },
  8267.     { Bad_Opcode },
  8268.     { Bad_Opcode },
  8269.     { Bad_Opcode },
  8270.     { Bad_Opcode },
  8271.     { Bad_Opcode },
  8272.     /* e8 */
  8273.     { Bad_Opcode },
  8274.     { Bad_Opcode },
  8275.     { Bad_Opcode },
  8276.     { Bad_Opcode },
  8277.     { Bad_Opcode },
  8278.     { Bad_Opcode },
  8279.     { Bad_Opcode },
  8280.     { Bad_Opcode },
  8281.     /* f0 */
  8282.     { Bad_Opcode },
  8283.     { Bad_Opcode },
  8284.     { Bad_Opcode },
  8285.     { Bad_Opcode },
  8286.     { Bad_Opcode },
  8287.     { Bad_Opcode },
  8288.     { Bad_Opcode },
  8289.     { Bad_Opcode },
  8290.     /* f8 */
  8291.     { Bad_Opcode },
  8292.     { Bad_Opcode },
  8293.     { Bad_Opcode },
  8294.     { Bad_Opcode },
  8295.     { Bad_Opcode },
  8296.     { Bad_Opcode },
  8297.     { Bad_Opcode },
  8298.     { Bad_Opcode },
  8299.   },
  8300. };
  8301.  
  8302. static const struct dis386 vex_table[][256] = {
  8303.   /* VEX_0F */
  8304.   {
  8305.     /* 00 */
  8306.     { Bad_Opcode },
  8307.     { Bad_Opcode },
  8308.     { Bad_Opcode },
  8309.     { Bad_Opcode },
  8310.     { Bad_Opcode },
  8311.     { Bad_Opcode },
  8312.     { Bad_Opcode },
  8313.     { Bad_Opcode },
  8314.     /* 08 */
  8315.     { Bad_Opcode },
  8316.     { Bad_Opcode },
  8317.     { Bad_Opcode },
  8318.     { Bad_Opcode },
  8319.     { Bad_Opcode },
  8320.     { Bad_Opcode },
  8321.     { Bad_Opcode },
  8322.     { Bad_Opcode },
  8323.     /* 10 */
  8324.     { PREFIX_TABLE (PREFIX_VEX_0F10) },
  8325.     { PREFIX_TABLE (PREFIX_VEX_0F11) },
  8326.     { PREFIX_TABLE (PREFIX_VEX_0F12) },
  8327.     { MOD_TABLE (MOD_VEX_0F13) },
  8328.     { VEX_W_TABLE (VEX_W_0F14) },
  8329.     { VEX_W_TABLE (VEX_W_0F15) },
  8330.     { PREFIX_TABLE (PREFIX_VEX_0F16) },
  8331.     { MOD_TABLE (MOD_VEX_0F17) },
  8332.     /* 18 */
  8333.     { Bad_Opcode },
  8334.     { Bad_Opcode },
  8335.     { Bad_Opcode },
  8336.     { Bad_Opcode },
  8337.     { Bad_Opcode },
  8338.     { Bad_Opcode },
  8339.     { Bad_Opcode },
  8340.     { Bad_Opcode },
  8341.     /* 20 */
  8342.     { Bad_Opcode },
  8343.     { Bad_Opcode },
  8344.     { Bad_Opcode },
  8345.     { Bad_Opcode },
  8346.     { Bad_Opcode },
  8347.     { Bad_Opcode },
  8348.     { Bad_Opcode },
  8349.     { Bad_Opcode },
  8350.     /* 28 */
  8351.     { VEX_W_TABLE (VEX_W_0F28) },
  8352.     { VEX_W_TABLE (VEX_W_0F29) },
  8353.     { PREFIX_TABLE (PREFIX_VEX_0F2A) },
  8354.     { MOD_TABLE (MOD_VEX_0F2B) },
  8355.     { PREFIX_TABLE (PREFIX_VEX_0F2C) },
  8356.     { PREFIX_TABLE (PREFIX_VEX_0F2D) },
  8357.     { PREFIX_TABLE (PREFIX_VEX_0F2E) },
  8358.     { PREFIX_TABLE (PREFIX_VEX_0F2F) },
  8359.     /* 30 */
  8360.     { Bad_Opcode },
  8361.     { Bad_Opcode },
  8362.     { Bad_Opcode },
  8363.     { Bad_Opcode },
  8364.     { Bad_Opcode },
  8365.     { Bad_Opcode },
  8366.     { Bad_Opcode },
  8367.     { Bad_Opcode },
  8368.     /* 38 */
  8369.     { Bad_Opcode },
  8370.     { Bad_Opcode },
  8371.     { Bad_Opcode },
  8372.     { Bad_Opcode },
  8373.     { Bad_Opcode },
  8374.     { Bad_Opcode },
  8375.     { Bad_Opcode },
  8376.     { Bad_Opcode },
  8377.     /* 40 */
  8378.     { Bad_Opcode },
  8379.     { PREFIX_TABLE (PREFIX_VEX_0F41) },
  8380.     { PREFIX_TABLE (PREFIX_VEX_0F42) },
  8381.     { Bad_Opcode },
  8382.     { PREFIX_TABLE (PREFIX_VEX_0F44) },
  8383.     { PREFIX_TABLE (PREFIX_VEX_0F45) },
  8384.     { PREFIX_TABLE (PREFIX_VEX_0F46) },
  8385.     { PREFIX_TABLE (PREFIX_VEX_0F47) },
  8386.     /* 48 */
  8387.     { Bad_Opcode },
  8388.     { Bad_Opcode },
  8389.     { Bad_Opcode },
  8390.     { PREFIX_TABLE (PREFIX_VEX_0F4B) },
  8391.     { Bad_Opcode },
  8392.     { Bad_Opcode },
  8393.     { Bad_Opcode },
  8394.     { Bad_Opcode },
  8395.     /* 50 */
  8396.     { MOD_TABLE (MOD_VEX_0F50) },
  8397.     { PREFIX_TABLE (PREFIX_VEX_0F51) },
  8398.     { PREFIX_TABLE (PREFIX_VEX_0F52) },
  8399.     { PREFIX_TABLE (PREFIX_VEX_0F53) },
  8400.     { "vandpX",         { XM, Vex, EXx } },
  8401.     { "vandnpX",        { XM, Vex, EXx } },
  8402.     { "vorpX",          { XM, Vex, EXx } },
  8403.     { "vxorpX",         { XM, Vex, EXx } },
  8404.     /* 58 */
  8405.     { PREFIX_TABLE (PREFIX_VEX_0F58) },
  8406.     { PREFIX_TABLE (PREFIX_VEX_0F59) },
  8407.     { PREFIX_TABLE (PREFIX_VEX_0F5A) },
  8408.     { PREFIX_TABLE (PREFIX_VEX_0F5B) },
  8409.     { PREFIX_TABLE (PREFIX_VEX_0F5C) },
  8410.     { PREFIX_TABLE (PREFIX_VEX_0F5D) },
  8411.     { PREFIX_TABLE (PREFIX_VEX_0F5E) },
  8412.     { PREFIX_TABLE (PREFIX_VEX_0F5F) },
  8413.     /* 60 */
  8414.     { PREFIX_TABLE (PREFIX_VEX_0F60) },
  8415.     { PREFIX_TABLE (PREFIX_VEX_0F61) },
  8416.     { PREFIX_TABLE (PREFIX_VEX_0F62) },
  8417.     { PREFIX_TABLE (PREFIX_VEX_0F63) },
  8418.     { PREFIX_TABLE (PREFIX_VEX_0F64) },
  8419.     { PREFIX_TABLE (PREFIX_VEX_0F65) },
  8420.     { PREFIX_TABLE (PREFIX_VEX_0F66) },
  8421.     { PREFIX_TABLE (PREFIX_VEX_0F67) },
  8422.     /* 68 */
  8423.     { PREFIX_TABLE (PREFIX_VEX_0F68) },
  8424.     { PREFIX_TABLE (PREFIX_VEX_0F69) },
  8425.     { PREFIX_TABLE (PREFIX_VEX_0F6A) },
  8426.     { PREFIX_TABLE (PREFIX_VEX_0F6B) },
  8427.     { PREFIX_TABLE (PREFIX_VEX_0F6C) },
  8428.     { PREFIX_TABLE (PREFIX_VEX_0F6D) },
  8429.     { PREFIX_TABLE (PREFIX_VEX_0F6E) },
  8430.     { PREFIX_TABLE (PREFIX_VEX_0F6F) },
  8431.     /* 70 */
  8432.     { PREFIX_TABLE (PREFIX_VEX_0F70) },
  8433.     { REG_TABLE (REG_VEX_0F71) },
  8434.     { REG_TABLE (REG_VEX_0F72) },
  8435.     { REG_TABLE (REG_VEX_0F73) },
  8436.     { PREFIX_TABLE (PREFIX_VEX_0F74) },
  8437.     { PREFIX_TABLE (PREFIX_VEX_0F75) },
  8438.     { PREFIX_TABLE (PREFIX_VEX_0F76) },
  8439.     { PREFIX_TABLE (PREFIX_VEX_0F77) },
  8440.     /* 78 */
  8441.     { Bad_Opcode },
  8442.     { Bad_Opcode },
  8443.     { Bad_Opcode },
  8444.     { Bad_Opcode },
  8445.     { PREFIX_TABLE (PREFIX_VEX_0F7C) },
  8446.     { PREFIX_TABLE (PREFIX_VEX_0F7D) },
  8447.     { PREFIX_TABLE (PREFIX_VEX_0F7E) },
  8448.     { PREFIX_TABLE (PREFIX_VEX_0F7F) },
  8449.     /* 80 */
  8450.     { Bad_Opcode },
  8451.     { Bad_Opcode },
  8452.     { Bad_Opcode },
  8453.     { Bad_Opcode },
  8454.     { Bad_Opcode },
  8455.     { Bad_Opcode },
  8456.     { Bad_Opcode },
  8457.     { Bad_Opcode },
  8458.     /* 88 */
  8459.     { Bad_Opcode },
  8460.     { Bad_Opcode },
  8461.     { Bad_Opcode },
  8462.     { Bad_Opcode },
  8463.     { Bad_Opcode },
  8464.     { Bad_Opcode },
  8465.     { Bad_Opcode },
  8466.     { Bad_Opcode },
  8467.     /* 90 */
  8468.     { PREFIX_TABLE (PREFIX_VEX_0F90) },
  8469.     { PREFIX_TABLE (PREFIX_VEX_0F91) },
  8470.     { PREFIX_TABLE (PREFIX_VEX_0F92) },
  8471.     { PREFIX_TABLE (PREFIX_VEX_0F93) },
  8472.     { Bad_Opcode },
  8473.     { Bad_Opcode },
  8474.     { Bad_Opcode },
  8475.     { Bad_Opcode },
  8476.     /* 98 */
  8477.     { PREFIX_TABLE (PREFIX_VEX_0F98) },
  8478.     { Bad_Opcode },
  8479.     { Bad_Opcode },
  8480.     { Bad_Opcode },
  8481.     { Bad_Opcode },
  8482.     { Bad_Opcode },
  8483.     { Bad_Opcode },
  8484.     { Bad_Opcode },
  8485.     /* a0 */
  8486.     { Bad_Opcode },
  8487.     { Bad_Opcode },
  8488.     { Bad_Opcode },
  8489.     { Bad_Opcode },
  8490.     { Bad_Opcode },
  8491.     { Bad_Opcode },
  8492.     { Bad_Opcode },
  8493.     { Bad_Opcode },
  8494.     /* a8 */
  8495.     { Bad_Opcode },
  8496.     { Bad_Opcode },
  8497.     { Bad_Opcode },
  8498.     { Bad_Opcode },
  8499.     { Bad_Opcode },
  8500.     { Bad_Opcode },
  8501.     { REG_TABLE (REG_VEX_0FAE) },
  8502.     { Bad_Opcode },
  8503.     /* b0 */
  8504.     { Bad_Opcode },
  8505.     { Bad_Opcode },
  8506.     { Bad_Opcode },
  8507.     { Bad_Opcode },
  8508.     { Bad_Opcode },
  8509.     { Bad_Opcode },
  8510.     { Bad_Opcode },
  8511.     { Bad_Opcode },
  8512.     /* b8 */
  8513.     { Bad_Opcode },
  8514.     { Bad_Opcode },
  8515.     { Bad_Opcode },
  8516.     { Bad_Opcode },
  8517.     { Bad_Opcode },
  8518.     { Bad_Opcode },
  8519.     { Bad_Opcode },
  8520.     { Bad_Opcode },
  8521.     /* c0 */
  8522.     { Bad_Opcode },
  8523.     { Bad_Opcode },
  8524.     { PREFIX_TABLE (PREFIX_VEX_0FC2) },
  8525.     { Bad_Opcode },
  8526.     { PREFIX_TABLE (PREFIX_VEX_0FC4) },
  8527.     { PREFIX_TABLE (PREFIX_VEX_0FC5) },
  8528.     { "vshufpX",        { XM, Vex, EXx, Ib } },
  8529.     { Bad_Opcode },
  8530.     /* c8 */
  8531.     { Bad_Opcode },
  8532.     { Bad_Opcode },
  8533.     { Bad_Opcode },
  8534.     { Bad_Opcode },
  8535.     { Bad_Opcode },
  8536.     { Bad_Opcode },
  8537.     { Bad_Opcode },
  8538.     { Bad_Opcode },
  8539.     /* d0 */
  8540.     { PREFIX_TABLE (PREFIX_VEX_0FD0) },
  8541.     { PREFIX_TABLE (PREFIX_VEX_0FD1) },
  8542.     { PREFIX_TABLE (PREFIX_VEX_0FD2) },
  8543.     { PREFIX_TABLE (PREFIX_VEX_0FD3) },
  8544.     { PREFIX_TABLE (PREFIX_VEX_0FD4) },
  8545.     { PREFIX_TABLE (PREFIX_VEX_0FD5) },
  8546.     { PREFIX_TABLE (PREFIX_VEX_0FD6) },
  8547.     { PREFIX_TABLE (PREFIX_VEX_0FD7) },
  8548.     /* d8 */
  8549.     { PREFIX_TABLE (PREFIX_VEX_0FD8) },
  8550.     { PREFIX_TABLE (PREFIX_VEX_0FD9) },
  8551.     { PREFIX_TABLE (PREFIX_VEX_0FDA) },
  8552.     { PREFIX_TABLE (PREFIX_VEX_0FDB) },
  8553.     { PREFIX_TABLE (PREFIX_VEX_0FDC) },
  8554.     { PREFIX_TABLE (PREFIX_VEX_0FDD) },
  8555.     { PREFIX_TABLE (PREFIX_VEX_0FDE) },
  8556.     { PREFIX_TABLE (PREFIX_VEX_0FDF) },
  8557.     /* e0 */
  8558.     { PREFIX_TABLE (PREFIX_VEX_0FE0) },
  8559.     { PREFIX_TABLE (PREFIX_VEX_0FE1) },
  8560.     { PREFIX_TABLE (PREFIX_VEX_0FE2) },
  8561.     { PREFIX_TABLE (PREFIX_VEX_0FE3) },
  8562.     { PREFIX_TABLE (PREFIX_VEX_0FE4) },
  8563.     { PREFIX_TABLE (PREFIX_VEX_0FE5) },
  8564.     { PREFIX_TABLE (PREFIX_VEX_0FE6) },
  8565.     { PREFIX_TABLE (PREFIX_VEX_0FE7) },
  8566.     /* e8 */
  8567.     { PREFIX_TABLE (PREFIX_VEX_0FE8) },
  8568.     { PREFIX_TABLE (PREFIX_VEX_0FE9) },
  8569.     { PREFIX_TABLE (PREFIX_VEX_0FEA) },
  8570.     { PREFIX_TABLE (PREFIX_VEX_0FEB) },
  8571.     { PREFIX_TABLE (PREFIX_VEX_0FEC) },
  8572.     { PREFIX_TABLE (PREFIX_VEX_0FED) },
  8573.     { PREFIX_TABLE (PREFIX_VEX_0FEE) },
  8574.     { PREFIX_TABLE (PREFIX_VEX_0FEF) },
  8575.     /* f0 */
  8576.     { PREFIX_TABLE (PREFIX_VEX_0FF0) },
  8577.     { PREFIX_TABLE (PREFIX_VEX_0FF1) },
  8578.     { PREFIX_TABLE (PREFIX_VEX_0FF2) },
  8579.     { PREFIX_TABLE (PREFIX_VEX_0FF3) },
  8580.     { PREFIX_TABLE (PREFIX_VEX_0FF4) },
  8581.     { PREFIX_TABLE (PREFIX_VEX_0FF5) },
  8582.     { PREFIX_TABLE (PREFIX_VEX_0FF6) },
  8583.     { PREFIX_TABLE (PREFIX_VEX_0FF7) },
  8584.     /* f8 */
  8585.     { PREFIX_TABLE (PREFIX_VEX_0FF8) },
  8586.     { PREFIX_TABLE (PREFIX_VEX_0FF9) },
  8587.     { PREFIX_TABLE (PREFIX_VEX_0FFA) },
  8588.     { PREFIX_TABLE (PREFIX_VEX_0FFB) },
  8589.     { PREFIX_TABLE (PREFIX_VEX_0FFC) },
  8590.     { PREFIX_TABLE (PREFIX_VEX_0FFD) },
  8591.     { PREFIX_TABLE (PREFIX_VEX_0FFE) },
  8592.     { Bad_Opcode },
  8593.   },
  8594.   /* VEX_0F38 */
  8595.   {
  8596.     /* 00 */
  8597.     { PREFIX_TABLE (PREFIX_VEX_0F3800) },
  8598.     { PREFIX_TABLE (PREFIX_VEX_0F3801) },
  8599.     { PREFIX_TABLE (PREFIX_VEX_0F3802) },
  8600.     { PREFIX_TABLE (PREFIX_VEX_0F3803) },
  8601.     { PREFIX_TABLE (PREFIX_VEX_0F3804) },
  8602.     { PREFIX_TABLE (PREFIX_VEX_0F3805) },
  8603.     { PREFIX_TABLE (PREFIX_VEX_0F3806) },
  8604.     { PREFIX_TABLE (PREFIX_VEX_0F3807) },
  8605.     /* 08 */
  8606.     { PREFIX_TABLE (PREFIX_VEX_0F3808) },
  8607.     { PREFIX_TABLE (PREFIX_VEX_0F3809) },
  8608.     { PREFIX_TABLE (PREFIX_VEX_0F380A) },
  8609.     { PREFIX_TABLE (PREFIX_VEX_0F380B) },
  8610.     { PREFIX_TABLE (PREFIX_VEX_0F380C) },
  8611.     { PREFIX_TABLE (PREFIX_VEX_0F380D) },
  8612.     { PREFIX_TABLE (PREFIX_VEX_0F380E) },
  8613.     { PREFIX_TABLE (PREFIX_VEX_0F380F) },
  8614.     /* 10 */
  8615.     { Bad_Opcode },
  8616.     { Bad_Opcode },
  8617.     { Bad_Opcode },
  8618.     { PREFIX_TABLE (PREFIX_VEX_0F3813) },
  8619.     { Bad_Opcode },
  8620.     { Bad_Opcode },
  8621.     { PREFIX_TABLE (PREFIX_VEX_0F3816) },
  8622.     { PREFIX_TABLE (PREFIX_VEX_0F3817) },
  8623.     /* 18 */
  8624.     { PREFIX_TABLE (PREFIX_VEX_0F3818) },
  8625.     { PREFIX_TABLE (PREFIX_VEX_0F3819) },
  8626.     { PREFIX_TABLE (PREFIX_VEX_0F381A) },
  8627.     { Bad_Opcode },
  8628.     { PREFIX_TABLE (PREFIX_VEX_0F381C) },
  8629.     { PREFIX_TABLE (PREFIX_VEX_0F381D) },
  8630.     { PREFIX_TABLE (PREFIX_VEX_0F381E) },
  8631.     { Bad_Opcode },
  8632.     /* 20 */
  8633.     { PREFIX_TABLE (PREFIX_VEX_0F3820) },
  8634.     { PREFIX_TABLE (PREFIX_VEX_0F3821) },
  8635.     { PREFIX_TABLE (PREFIX_VEX_0F3822) },
  8636.     { PREFIX_TABLE (PREFIX_VEX_0F3823) },
  8637.     { PREFIX_TABLE (PREFIX_VEX_0F3824) },
  8638.     { PREFIX_TABLE (PREFIX_VEX_0F3825) },
  8639.     { Bad_Opcode },
  8640.     { Bad_Opcode },
  8641.     /* 28 */
  8642.     { PREFIX_TABLE (PREFIX_VEX_0F3828) },
  8643.     { PREFIX_TABLE (PREFIX_VEX_0F3829) },
  8644.     { PREFIX_TABLE (PREFIX_VEX_0F382A) },
  8645.     { PREFIX_TABLE (PREFIX_VEX_0F382B) },
  8646.     { PREFIX_TABLE (PREFIX_VEX_0F382C) },
  8647.     { PREFIX_TABLE (PREFIX_VEX_0F382D) },
  8648.     { PREFIX_TABLE (PREFIX_VEX_0F382E) },
  8649.     { PREFIX_TABLE (PREFIX_VEX_0F382F) },
  8650.     /* 30 */
  8651.     { PREFIX_TABLE (PREFIX_VEX_0F3830) },
  8652.     { PREFIX_TABLE (PREFIX_VEX_0F3831) },
  8653.     { PREFIX_TABLE (PREFIX_VEX_0F3832) },
  8654.     { PREFIX_TABLE (PREFIX_VEX_0F3833) },
  8655.     { PREFIX_TABLE (PREFIX_VEX_0F3834) },
  8656.     { PREFIX_TABLE (PREFIX_VEX_0F3835) },
  8657.     { PREFIX_TABLE (PREFIX_VEX_0F3836) },
  8658.     { PREFIX_TABLE (PREFIX_VEX_0F3837) },
  8659.     /* 38 */
  8660.     { PREFIX_TABLE (PREFIX_VEX_0F3838) },
  8661.     { PREFIX_TABLE (PREFIX_VEX_0F3839) },
  8662.     { PREFIX_TABLE (PREFIX_VEX_0F383A) },
  8663.     { PREFIX_TABLE (PREFIX_VEX_0F383B) },
  8664.     { PREFIX_TABLE (PREFIX_VEX_0F383C) },
  8665.     { PREFIX_TABLE (PREFIX_VEX_0F383D) },
  8666.     { PREFIX_TABLE (PREFIX_VEX_0F383E) },
  8667.     { PREFIX_TABLE (PREFIX_VEX_0F383F) },
  8668.     /* 40 */
  8669.     { PREFIX_TABLE (PREFIX_VEX_0F3840) },
  8670.     { PREFIX_TABLE (PREFIX_VEX_0F3841) },
  8671.     { Bad_Opcode },
  8672.     { Bad_Opcode },
  8673.     { Bad_Opcode },
  8674.     { PREFIX_TABLE (PREFIX_VEX_0F3845) },
  8675.     { PREFIX_TABLE (PREFIX_VEX_0F3846) },
  8676.     { PREFIX_TABLE (PREFIX_VEX_0F3847) },
  8677.     /* 48 */
  8678.     { Bad_Opcode },
  8679.     { Bad_Opcode },
  8680.     { Bad_Opcode },
  8681.     { Bad_Opcode },
  8682.     { Bad_Opcode },
  8683.     { Bad_Opcode },
  8684.     { Bad_Opcode },
  8685.     { Bad_Opcode },
  8686.     /* 50 */
  8687.     { Bad_Opcode },
  8688.     { Bad_Opcode },
  8689.     { Bad_Opcode },
  8690.     { Bad_Opcode },
  8691.     { Bad_Opcode },
  8692.     { Bad_Opcode },
  8693.     { Bad_Opcode },
  8694.     { Bad_Opcode },
  8695.     /* 58 */
  8696.     { PREFIX_TABLE (PREFIX_VEX_0F3858) },
  8697.     { PREFIX_TABLE (PREFIX_VEX_0F3859) },
  8698.     { PREFIX_TABLE (PREFIX_VEX_0F385A) },
  8699.     { Bad_Opcode },
  8700.     { Bad_Opcode },
  8701.     { Bad_Opcode },
  8702.     { Bad_Opcode },
  8703.     { Bad_Opcode },
  8704.     /* 60 */
  8705.     { Bad_Opcode },
  8706.     { Bad_Opcode },
  8707.     { Bad_Opcode },
  8708.     { Bad_Opcode },
  8709.     { Bad_Opcode },
  8710.     { Bad_Opcode },
  8711.     { Bad_Opcode },
  8712.     { Bad_Opcode },
  8713.     /* 68 */
  8714.     { Bad_Opcode },
  8715.     { Bad_Opcode },
  8716.     { Bad_Opcode },
  8717.     { Bad_Opcode },
  8718.     { Bad_Opcode },
  8719.     { Bad_Opcode },
  8720.     { Bad_Opcode },
  8721.     { Bad_Opcode },
  8722.     /* 70 */
  8723.     { Bad_Opcode },
  8724.     { Bad_Opcode },
  8725.     { Bad_Opcode },
  8726.     { Bad_Opcode },
  8727.     { Bad_Opcode },
  8728.     { Bad_Opcode },
  8729.     { Bad_Opcode },
  8730.     { Bad_Opcode },
  8731.     /* 78 */
  8732.     { PREFIX_TABLE (PREFIX_VEX_0F3878) },
  8733.     { PREFIX_TABLE (PREFIX_VEX_0F3879) },
  8734.     { Bad_Opcode },
  8735.     { Bad_Opcode },
  8736.     { Bad_Opcode },
  8737.     { Bad_Opcode },
  8738.     { Bad_Opcode },
  8739.     { Bad_Opcode },
  8740.     /* 80 */
  8741.     { Bad_Opcode },
  8742.     { Bad_Opcode },
  8743.     { Bad_Opcode },
  8744.     { Bad_Opcode },
  8745.     { Bad_Opcode },
  8746.     { Bad_Opcode },
  8747.     { Bad_Opcode },
  8748.     { Bad_Opcode },
  8749.     /* 88 */
  8750.     { Bad_Opcode },
  8751.     { Bad_Opcode },
  8752.     { Bad_Opcode },
  8753.     { Bad_Opcode },
  8754.     { PREFIX_TABLE (PREFIX_VEX_0F388C) },
  8755.     { Bad_Opcode },
  8756.     { PREFIX_TABLE (PREFIX_VEX_0F388E) },
  8757.     { Bad_Opcode },
  8758.     /* 90 */
  8759.     { PREFIX_TABLE (PREFIX_VEX_0F3890) },
  8760.     { PREFIX_TABLE (PREFIX_VEX_0F3891) },
  8761.     { PREFIX_TABLE (PREFIX_VEX_0F3892) },
  8762.     { PREFIX_TABLE (PREFIX_VEX_0F3893) },
  8763.     { Bad_Opcode },
  8764.     { Bad_Opcode },
  8765.     { PREFIX_TABLE (PREFIX_VEX_0F3896) },
  8766.     { PREFIX_TABLE (PREFIX_VEX_0F3897) },
  8767.     /* 98 */
  8768.     { PREFIX_TABLE (PREFIX_VEX_0F3898) },
  8769.     { PREFIX_TABLE (PREFIX_VEX_0F3899) },
  8770.     { PREFIX_TABLE (PREFIX_VEX_0F389A) },
  8771.     { PREFIX_TABLE (PREFIX_VEX_0F389B) },
  8772.     { PREFIX_TABLE (PREFIX_VEX_0F389C) },
  8773.     { PREFIX_TABLE (PREFIX_VEX_0F389D) },
  8774.     { PREFIX_TABLE (PREFIX_VEX_0F389E) },
  8775.     { PREFIX_TABLE (PREFIX_VEX_0F389F) },
  8776.     /* a0 */
  8777.     { Bad_Opcode },
  8778.     { Bad_Opcode },
  8779.     { Bad_Opcode },
  8780.     { Bad_Opcode },
  8781.     { Bad_Opcode },
  8782.     { Bad_Opcode },
  8783.     { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
  8784.     { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
  8785.     /* a8 */
  8786.     { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
  8787.     { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
  8788.     { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
  8789.     { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
  8790.     { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
  8791.     { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
  8792.     { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
  8793.     { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
  8794.     /* b0 */
  8795.     { Bad_Opcode },
  8796.     { Bad_Opcode },
  8797.     { Bad_Opcode },
  8798.     { Bad_Opcode },
  8799.     { Bad_Opcode },
  8800.     { Bad_Opcode },
  8801.     { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
  8802.     { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
  8803.     /* b8 */
  8804.     { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
  8805.     { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
  8806.     { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
  8807.     { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
  8808.     { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
  8809.     { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
  8810.     { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
  8811.     { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
  8812.     /* c0 */
  8813.     { Bad_Opcode },
  8814.     { Bad_Opcode },
  8815.     { Bad_Opcode },
  8816.     { Bad_Opcode },
  8817.     { Bad_Opcode },
  8818.     { Bad_Opcode },
  8819.     { Bad_Opcode },
  8820.     { Bad_Opcode },
  8821.     /* c8 */
  8822.     { Bad_Opcode },
  8823.     { Bad_Opcode },
  8824.     { Bad_Opcode },
  8825.     { Bad_Opcode },
  8826.     { Bad_Opcode },
  8827.     { Bad_Opcode },
  8828.     { Bad_Opcode },
  8829.     { Bad_Opcode },
  8830.     /* d0 */
  8831.     { Bad_Opcode },
  8832.     { Bad_Opcode },
  8833.     { Bad_Opcode },
  8834.     { Bad_Opcode },
  8835.     { Bad_Opcode },
  8836.     { Bad_Opcode },
  8837.     { Bad_Opcode },
  8838.     { Bad_Opcode },
  8839.     /* d8 */
  8840.     { Bad_Opcode },
  8841.     { Bad_Opcode },
  8842.     { Bad_Opcode },
  8843.     { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
  8844.     { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
  8845.     { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
  8846.     { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
  8847.     { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
  8848.     /* e0 */
  8849.     { Bad_Opcode },
  8850.     { Bad_Opcode },
  8851.     { Bad_Opcode },
  8852.     { Bad_Opcode },
  8853.     { Bad_Opcode },
  8854.     { Bad_Opcode },
  8855.     { Bad_Opcode },
  8856.     { Bad_Opcode },
  8857.     /* e8 */
  8858.     { Bad_Opcode },
  8859.     { Bad_Opcode },
  8860.     { Bad_Opcode },
  8861.     { Bad_Opcode },
  8862.     { Bad_Opcode },
  8863.     { Bad_Opcode },
  8864.     { Bad_Opcode },
  8865.     { Bad_Opcode },
  8866.     /* f0 */
  8867.     { Bad_Opcode },
  8868.     { Bad_Opcode },
  8869.     { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
  8870.     { REG_TABLE (REG_VEX_0F38F3) },
  8871.     { Bad_Opcode },
  8872.     { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
  8873.     { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
  8874.     { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
  8875.     /* f8 */
  8876.     { Bad_Opcode },
  8877.     { Bad_Opcode },
  8878.     { Bad_Opcode },
  8879.     { Bad_Opcode },
  8880.     { Bad_Opcode },
  8881.     { Bad_Opcode },
  8882.     { Bad_Opcode },
  8883.     { Bad_Opcode },
  8884.   },
  8885.   /* VEX_0F3A */
  8886.   {
  8887.     /* 00 */
  8888.     { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
  8889.     { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
  8890.     { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
  8891.     { Bad_Opcode },
  8892.     { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
  8893.     { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
  8894.     { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
  8895.     { Bad_Opcode },
  8896.     /* 08 */
  8897.     { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
  8898.     { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
  8899.     { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
  8900.     { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
  8901.     { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
  8902.     { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
  8903.     { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
  8904.     { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
  8905.     /* 10 */
  8906.     { Bad_Opcode },
  8907.     { Bad_Opcode },
  8908.     { Bad_Opcode },
  8909.     { Bad_Opcode },
  8910.     { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
  8911.     { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
  8912.     { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
  8913.     { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
  8914.     /* 18 */
  8915.     { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
  8916.     { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
  8917.     { Bad_Opcode },
  8918.     { Bad_Opcode },
  8919.     { Bad_Opcode },
  8920.     { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
  8921.     { Bad_Opcode },
  8922.     { Bad_Opcode },
  8923.     /* 20 */
  8924.     { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
  8925.     { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
  8926.     { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
  8927.     { Bad_Opcode },
  8928.     { Bad_Opcode },
  8929.     { Bad_Opcode },
  8930.     { Bad_Opcode },
  8931.     { Bad_Opcode },
  8932.     /* 28 */
  8933.     { Bad_Opcode },
  8934.     { Bad_Opcode },
  8935.     { Bad_Opcode },
  8936.     { Bad_Opcode },
  8937.     { Bad_Opcode },
  8938.     { Bad_Opcode },
  8939.     { Bad_Opcode },
  8940.     { Bad_Opcode },
  8941.     /* 30 */
  8942.     { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
  8943.     { Bad_Opcode },
  8944.     { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
  8945.     { Bad_Opcode },
  8946.     { Bad_Opcode },
  8947.     { Bad_Opcode },
  8948.     { Bad_Opcode },
  8949.     { Bad_Opcode },
  8950.     /* 38 */
  8951.     { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
  8952.     { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
  8953.     { Bad_Opcode },
  8954.     { Bad_Opcode },
  8955.     { Bad_Opcode },
  8956.     { Bad_Opcode },
  8957.     { Bad_Opcode },
  8958.     { Bad_Opcode },
  8959.     /* 40 */
  8960.     { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
  8961.     { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
  8962.     { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
  8963.     { Bad_Opcode },
  8964.     { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
  8965.     { Bad_Opcode },
  8966.     { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
  8967.     { Bad_Opcode },
  8968.     /* 48 */
  8969.     { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
  8970.     { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
  8971.     { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
  8972.     { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
  8973.     { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
  8974.     { Bad_Opcode },
  8975.     { Bad_Opcode },
  8976.     { Bad_Opcode },
  8977.     /* 50 */
  8978.     { Bad_Opcode },
  8979.     { Bad_Opcode },
  8980.     { Bad_Opcode },
  8981.     { Bad_Opcode },
  8982.     { Bad_Opcode },
  8983.     { Bad_Opcode },
  8984.     { Bad_Opcode },
  8985.     { Bad_Opcode },
  8986.     /* 58 */
  8987.     { Bad_Opcode },
  8988.     { Bad_Opcode },
  8989.     { Bad_Opcode },
  8990.     { Bad_Opcode },
  8991.     { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
  8992.     { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
  8993.     { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
  8994.     { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
  8995.     /* 60 */
  8996.     { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
  8997.     { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
  8998.     { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
  8999.     { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
  9000.     { Bad_Opcode },
  9001.     { Bad_Opcode },
  9002.     { Bad_Opcode },
  9003.     { Bad_Opcode },
  9004.     /* 68 */
  9005.     { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
  9006.     { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
  9007.     { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
  9008.     { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
  9009.     { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
  9010.     { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
  9011.     { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
  9012.     { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
  9013.     /* 70 */
  9014.     { Bad_Opcode },
  9015.     { Bad_Opcode },
  9016.     { Bad_Opcode },
  9017.     { Bad_Opcode },
  9018.     { Bad_Opcode },
  9019.     { Bad_Opcode },
  9020.     { Bad_Opcode },
  9021.     { Bad_Opcode },
  9022.     /* 78 */
  9023.     { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
  9024.     { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
  9025.     { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
  9026.     { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
  9027.     { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
  9028.     { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
  9029.     { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
  9030.     { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
  9031.     /* 80 */
  9032.     { Bad_Opcode },
  9033.     { Bad_Opcode },
  9034.     { Bad_Opcode },
  9035.     { Bad_Opcode },
  9036.     { Bad_Opcode },
  9037.     { Bad_Opcode },
  9038.     { Bad_Opcode },
  9039.     { Bad_Opcode },
  9040.     /* 88 */
  9041.     { Bad_Opcode },
  9042.     { Bad_Opcode },
  9043.     { Bad_Opcode },
  9044.     { Bad_Opcode },
  9045.     { Bad_Opcode },
  9046.     { Bad_Opcode },
  9047.     { Bad_Opcode },
  9048.     { Bad_Opcode },
  9049.     /* 90 */
  9050.     { Bad_Opcode },
  9051.     { Bad_Opcode },
  9052.     { Bad_Opcode },
  9053.     { Bad_Opcode },
  9054.     { Bad_Opcode },
  9055.     { Bad_Opcode },
  9056.     { Bad_Opcode },
  9057.     { Bad_Opcode },
  9058.     /* 98 */
  9059.     { Bad_Opcode },
  9060.     { Bad_Opcode },
  9061.     { Bad_Opcode },
  9062.     { Bad_Opcode },
  9063.     { Bad_Opcode },
  9064.     { Bad_Opcode },
  9065.     { Bad_Opcode },
  9066.     { Bad_Opcode },
  9067.     /* a0 */
  9068.     { Bad_Opcode },
  9069.     { Bad_Opcode },
  9070.     { Bad_Opcode },
  9071.     { Bad_Opcode },
  9072.     { Bad_Opcode },
  9073.     { Bad_Opcode },
  9074.     { Bad_Opcode },
  9075.     { Bad_Opcode },
  9076.     /* a8 */
  9077.     { Bad_Opcode },
  9078.     { Bad_Opcode },
  9079.     { Bad_Opcode },
  9080.     { Bad_Opcode },
  9081.     { Bad_Opcode },
  9082.     { Bad_Opcode },
  9083.     { Bad_Opcode },
  9084.     { Bad_Opcode },
  9085.     /* b0 */
  9086.     { Bad_Opcode },
  9087.     { Bad_Opcode },
  9088.     { Bad_Opcode },
  9089.     { Bad_Opcode },
  9090.     { Bad_Opcode },
  9091.     { Bad_Opcode },
  9092.     { Bad_Opcode },
  9093.     { Bad_Opcode },
  9094.     /* b8 */
  9095.     { Bad_Opcode },
  9096.     { Bad_Opcode },
  9097.     { Bad_Opcode },
  9098.     { Bad_Opcode },
  9099.     { Bad_Opcode },
  9100.     { Bad_Opcode },
  9101.     { Bad_Opcode },
  9102.     { Bad_Opcode },
  9103.     /* c0 */
  9104.     { Bad_Opcode },
  9105.     { Bad_Opcode },
  9106.     { Bad_Opcode },
  9107.     { Bad_Opcode },
  9108.     { Bad_Opcode },
  9109.     { Bad_Opcode },
  9110.     { Bad_Opcode },
  9111.     { Bad_Opcode },
  9112.     /* c8 */
  9113.     { Bad_Opcode },
  9114.     { Bad_Opcode },
  9115.     { Bad_Opcode },
  9116.     { Bad_Opcode },
  9117.     { Bad_Opcode },
  9118.     { Bad_Opcode },
  9119.     { Bad_Opcode },
  9120.     { Bad_Opcode },
  9121.     /* d0 */
  9122.     { Bad_Opcode },
  9123.     { Bad_Opcode },
  9124.     { Bad_Opcode },
  9125.     { Bad_Opcode },
  9126.     { Bad_Opcode },
  9127.     { Bad_Opcode },
  9128.     { Bad_Opcode },
  9129.     { Bad_Opcode },
  9130.     /* d8 */
  9131.     { Bad_Opcode },
  9132.     { Bad_Opcode },
  9133.     { Bad_Opcode },
  9134.     { Bad_Opcode },
  9135.     { Bad_Opcode },
  9136.     { Bad_Opcode },
  9137.     { Bad_Opcode },
  9138.     { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
  9139.     /* e0 */
  9140.     { Bad_Opcode },
  9141.     { Bad_Opcode },
  9142.     { Bad_Opcode },
  9143.     { Bad_Opcode },
  9144.     { Bad_Opcode },
  9145.     { Bad_Opcode },
  9146.     { Bad_Opcode },
  9147.     { Bad_Opcode },
  9148.     /* e8 */
  9149.     { Bad_Opcode },
  9150.     { Bad_Opcode },
  9151.     { Bad_Opcode },
  9152.     { Bad_Opcode },
  9153.     { Bad_Opcode },
  9154.     { Bad_Opcode },
  9155.     { Bad_Opcode },
  9156.     { Bad_Opcode },
  9157.     /* f0 */
  9158.     { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
  9159.     { Bad_Opcode },
  9160.     { Bad_Opcode },
  9161.     { Bad_Opcode },
  9162.     { Bad_Opcode },
  9163.     { Bad_Opcode },
  9164.     { Bad_Opcode },
  9165.     { Bad_Opcode },
  9166.     /* f8 */
  9167.     { Bad_Opcode },
  9168.     { Bad_Opcode },
  9169.     { Bad_Opcode },
  9170.     { Bad_Opcode },
  9171.     { Bad_Opcode },
  9172.     { Bad_Opcode },
  9173.     { Bad_Opcode },
  9174.     { Bad_Opcode },
  9175.   },
  9176. };
  9177.  
  9178. #define NEED_OPCODE_TABLE
  9179. #include "i386-dis-evex.h"
  9180. #undef NEED_OPCODE_TABLE
  9181. static const struct dis386 vex_len_table[][2] = {
  9182.   /* VEX_LEN_0F10_P_1 */
  9183.   {
  9184.     { VEX_W_TABLE (VEX_W_0F10_P_1) },
  9185.     { VEX_W_TABLE (VEX_W_0F10_P_1) },
  9186.   },
  9187.  
  9188.   /* VEX_LEN_0F10_P_3 */
  9189.   {
  9190.     { VEX_W_TABLE (VEX_W_0F10_P_3) },
  9191.     { VEX_W_TABLE (VEX_W_0F10_P_3) },
  9192.   },
  9193.  
  9194.   /* VEX_LEN_0F11_P_1 */
  9195.   {
  9196.     { VEX_W_TABLE (VEX_W_0F11_P_1) },
  9197.     { VEX_W_TABLE (VEX_W_0F11_P_1) },
  9198.   },
  9199.  
  9200.   /* VEX_LEN_0F11_P_3 */
  9201.   {
  9202.     { VEX_W_TABLE (VEX_W_0F11_P_3) },
  9203.     { VEX_W_TABLE (VEX_W_0F11_P_3) },
  9204.   },
  9205.  
  9206.   /* VEX_LEN_0F12_P_0_M_0 */
  9207.   {
  9208.     { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
  9209.   },
  9210.  
  9211.   /* VEX_LEN_0F12_P_0_M_1 */
  9212.   {
  9213.     { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
  9214.   },
  9215.  
  9216.   /* VEX_LEN_0F12_P_2 */
  9217.   {
  9218.     { VEX_W_TABLE (VEX_W_0F12_P_2) },
  9219.   },
  9220.  
  9221.   /* VEX_LEN_0F13_M_0 */
  9222.   {
  9223.     { VEX_W_TABLE (VEX_W_0F13_M_0) },
  9224.   },
  9225.  
  9226.   /* VEX_LEN_0F16_P_0_M_0 */
  9227.   {
  9228.     { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
  9229.   },
  9230.  
  9231.   /* VEX_LEN_0F16_P_0_M_1 */
  9232.   {
  9233.     { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
  9234.   },
  9235.  
  9236.   /* VEX_LEN_0F16_P_2 */
  9237.   {
  9238.     { VEX_W_TABLE (VEX_W_0F16_P_2) },
  9239.   },
  9240.  
  9241.   /* VEX_LEN_0F17_M_0 */
  9242.   {
  9243.     { VEX_W_TABLE (VEX_W_0F17_M_0) },
  9244.   },
  9245.  
  9246.   /* VEX_LEN_0F2A_P_1 */
  9247.   {
  9248.     { "vcvtsi2ss%LQ",   { XMScalar, VexScalar, Ev } },
  9249.     { "vcvtsi2ss%LQ",   { XMScalar, VexScalar, Ev } },
  9250.   },
  9251.  
  9252.   /* VEX_LEN_0F2A_P_3 */
  9253.   {
  9254.     { "vcvtsi2sd%LQ",   { XMScalar, VexScalar, Ev } },
  9255.     { "vcvtsi2sd%LQ",   { XMScalar, VexScalar, Ev } },
  9256.   },
  9257.  
  9258.   /* VEX_LEN_0F2C_P_1 */
  9259.   {
  9260.     { "vcvttss2siY",    { Gv, EXdScalar } },
  9261.     { "vcvttss2siY",    { Gv, EXdScalar } },
  9262.   },
  9263.  
  9264.   /* VEX_LEN_0F2C_P_3 */
  9265.   {
  9266.     { "vcvttsd2siY",    { Gv, EXqScalar } },
  9267.     { "vcvttsd2siY",    { Gv, EXqScalar } },
  9268.   },
  9269.  
  9270.   /* VEX_LEN_0F2D_P_1 */
  9271.   {
  9272.     { "vcvtss2siY",     { Gv, EXdScalar } },
  9273.     { "vcvtss2siY",     { Gv, EXdScalar } },
  9274.   },
  9275.  
  9276.   /* VEX_LEN_0F2D_P_3 */
  9277.   {
  9278.     { "vcvtsd2siY",     { Gv, EXqScalar } },
  9279.     { "vcvtsd2siY",     { Gv, EXqScalar } },
  9280.   },
  9281.  
  9282.   /* VEX_LEN_0F2E_P_0 */
  9283.   {
  9284.     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
  9285.     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
  9286.   },
  9287.  
  9288.   /* VEX_LEN_0F2E_P_2 */
  9289.   {
  9290.     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
  9291.     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
  9292.   },
  9293.  
  9294.   /* VEX_LEN_0F2F_P_0 */
  9295.   {
  9296.     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
  9297.     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
  9298.   },
  9299.  
  9300.   /* VEX_LEN_0F2F_P_2 */
  9301.   {
  9302.     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
  9303.     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
  9304.   },
  9305.  
  9306.   /* VEX_LEN_0F41_P_0 */
  9307.   {
  9308.     { Bad_Opcode },
  9309.     { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
  9310.   },
  9311.   /* VEX_LEN_0F42_P_0 */
  9312.   {
  9313.     { Bad_Opcode },
  9314.     { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
  9315.   },
  9316.   /* VEX_LEN_0F44_P_0 */
  9317.   {
  9318.     { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
  9319.   },
  9320.   /* VEX_LEN_0F45_P_0 */
  9321.   {
  9322.     { Bad_Opcode },
  9323.     { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
  9324.   },
  9325.   /* VEX_LEN_0F46_P_0 */
  9326.   {
  9327.     { Bad_Opcode },
  9328.     { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
  9329.   },
  9330.   /* VEX_LEN_0F47_P_0 */
  9331.   {
  9332.     { Bad_Opcode },
  9333.     { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
  9334.   },
  9335.   /* VEX_LEN_0F4B_P_2 */
  9336.   {
  9337.     { Bad_Opcode },
  9338.     { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
  9339.   },
  9340.  
  9341.   /* VEX_LEN_0F51_P_1 */
  9342.   {
  9343.     { VEX_W_TABLE (VEX_W_0F51_P_1) },
  9344.     { VEX_W_TABLE (VEX_W_0F51_P_1) },
  9345.   },
  9346.  
  9347.   /* VEX_LEN_0F51_P_3 */
  9348.   {
  9349.     { VEX_W_TABLE (VEX_W_0F51_P_3) },
  9350.     { VEX_W_TABLE (VEX_W_0F51_P_3) },
  9351.   },
  9352.  
  9353.   /* VEX_LEN_0F52_P_1 */
  9354.   {
  9355.     { VEX_W_TABLE (VEX_W_0F52_P_1) },
  9356.     { VEX_W_TABLE (VEX_W_0F52_P_1) },
  9357.   },
  9358.  
  9359.   /* VEX_LEN_0F53_P_1 */
  9360.   {
  9361.     { VEX_W_TABLE (VEX_W_0F53_P_1) },
  9362.     { VEX_W_TABLE (VEX_W_0F53_P_1) },
  9363.   },
  9364.  
  9365.   /* VEX_LEN_0F58_P_1 */
  9366.   {
  9367.     { VEX_W_TABLE (VEX_W_0F58_P_1) },
  9368.     { VEX_W_TABLE (VEX_W_0F58_P_1) },
  9369.   },
  9370.  
  9371.   /* VEX_LEN_0F58_P_3 */
  9372.   {
  9373.     { VEX_W_TABLE (VEX_W_0F58_P_3) },
  9374.     { VEX_W_TABLE (VEX_W_0F58_P_3) },
  9375.   },
  9376.  
  9377.   /* VEX_LEN_0F59_P_1 */
  9378.   {
  9379.     { VEX_W_TABLE (VEX_W_0F59_P_1) },
  9380.     { VEX_W_TABLE (VEX_W_0F59_P_1) },
  9381.   },
  9382.  
  9383.   /* VEX_LEN_0F59_P_3 */
  9384.   {
  9385.     { VEX_W_TABLE (VEX_W_0F59_P_3) },
  9386.     { VEX_W_TABLE (VEX_W_0F59_P_3) },
  9387.   },
  9388.  
  9389.   /* VEX_LEN_0F5A_P_1 */
  9390.   {
  9391.     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
  9392.     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
  9393.   },
  9394.  
  9395.   /* VEX_LEN_0F5A_P_3 */
  9396.   {
  9397.     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
  9398.     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
  9399.   },
  9400.  
  9401.   /* VEX_LEN_0F5C_P_1 */
  9402.   {
  9403.     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
  9404.     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
  9405.   },
  9406.  
  9407.   /* VEX_LEN_0F5C_P_3 */
  9408.   {
  9409.     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
  9410.     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
  9411.   },
  9412.  
  9413.   /* VEX_LEN_0F5D_P_1 */
  9414.   {
  9415.     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
  9416.     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
  9417.   },
  9418.  
  9419.   /* VEX_LEN_0F5D_P_3 */
  9420.   {
  9421.     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
  9422.     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
  9423.   },
  9424.  
  9425.   /* VEX_LEN_0F5E_P_1 */
  9426.   {
  9427.     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
  9428.     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
  9429.   },
  9430.  
  9431.   /* VEX_LEN_0F5E_P_3 */
  9432.   {
  9433.     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
  9434.     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
  9435.   },
  9436.  
  9437.   /* VEX_LEN_0F5F_P_1 */
  9438.   {
  9439.     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
  9440.     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
  9441.   },
  9442.  
  9443.   /* VEX_LEN_0F5F_P_3 */
  9444.   {
  9445.     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
  9446.     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
  9447.   },
  9448.  
  9449.   /* VEX_LEN_0F6E_P_2 */
  9450.   {
  9451.     { "vmovK",          { XMScalar, Edq } },
  9452.     { "vmovK",          { XMScalar, Edq } },
  9453.   },
  9454.  
  9455.   /* VEX_LEN_0F7E_P_1 */
  9456.   {
  9457.     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
  9458.     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
  9459.   },
  9460.  
  9461.   /* VEX_LEN_0F7E_P_2 */
  9462.   {
  9463.     { "vmovK",          { Edq, XMScalar } },
  9464.     { "vmovK",          { Edq, XMScalar } },
  9465.   },
  9466.  
  9467.   /* VEX_LEN_0F90_P_0 */
  9468.   {
  9469.     { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
  9470.   },
  9471.  
  9472.   /* VEX_LEN_0F91_P_0 */
  9473.   {
  9474.     { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
  9475.   },
  9476.  
  9477.   /* VEX_LEN_0F92_P_0 */
  9478.   {
  9479.     { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
  9480.   },
  9481.  
  9482.   /* VEX_LEN_0F93_P_0 */
  9483.   {
  9484.     { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
  9485.   },
  9486.  
  9487.   /* VEX_LEN_0F98_P_0 */
  9488.   {
  9489.     { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
  9490.   },
  9491.  
  9492.   /* VEX_LEN_0FAE_R_2_M_0 */
  9493.   {
  9494.     { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
  9495.   },
  9496.  
  9497.   /* VEX_LEN_0FAE_R_3_M_0 */
  9498.   {
  9499.     { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
  9500.   },
  9501.  
  9502.   /* VEX_LEN_0FC2_P_1 */
  9503.   {
  9504.     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
  9505.     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
  9506.   },
  9507.  
  9508.   /* VEX_LEN_0FC2_P_3 */
  9509.   {
  9510.     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
  9511.     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
  9512.   },
  9513.  
  9514.   /* VEX_LEN_0FC4_P_2 */
  9515.   {
  9516.     { VEX_W_TABLE (VEX_W_0FC4_P_2) },
  9517.   },
  9518.  
  9519.   /* VEX_LEN_0FC5_P_2 */
  9520.   {
  9521.     { VEX_W_TABLE (VEX_W_0FC5_P_2) },
  9522.   },
  9523.  
  9524.   /* VEX_LEN_0FD6_P_2 */
  9525.   {
  9526.     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
  9527.     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
  9528.   },
  9529.  
  9530.   /* VEX_LEN_0FF7_P_2 */
  9531.   {
  9532.     { VEX_W_TABLE (VEX_W_0FF7_P_2) },
  9533.   },
  9534.  
  9535.   /* VEX_LEN_0F3816_P_2 */
  9536.   {
  9537.     { Bad_Opcode },
  9538.     { VEX_W_TABLE (VEX_W_0F3816_P_2) },
  9539.   },
  9540.  
  9541.   /* VEX_LEN_0F3819_P_2 */
  9542.   {
  9543.     { Bad_Opcode },
  9544.     { VEX_W_TABLE (VEX_W_0F3819_P_2) },
  9545.   },
  9546.  
  9547.   /* VEX_LEN_0F381A_P_2_M_0 */
  9548.   {
  9549.     { Bad_Opcode },
  9550.     { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
  9551.   },
  9552.  
  9553.   /* VEX_LEN_0F3836_P_2 */
  9554.   {
  9555.     { Bad_Opcode },
  9556.     { VEX_W_TABLE (VEX_W_0F3836_P_2) },
  9557.   },
  9558.  
  9559.   /* VEX_LEN_0F3841_P_2 */
  9560.   {
  9561.     { VEX_W_TABLE (VEX_W_0F3841_P_2) },
  9562.   },
  9563.  
  9564.   /* VEX_LEN_0F385A_P_2_M_0 */
  9565.   {
  9566.     { Bad_Opcode },
  9567.     { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
  9568.   },
  9569.  
  9570.   /* VEX_LEN_0F38DB_P_2 */
  9571.   {
  9572.     { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
  9573.   },
  9574.  
  9575.   /* VEX_LEN_0F38DC_P_2 */
  9576.   {
  9577.     { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
  9578.   },
  9579.  
  9580.   /* VEX_LEN_0F38DD_P_2 */
  9581.   {
  9582.     { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
  9583.   },
  9584.  
  9585.   /* VEX_LEN_0F38DE_P_2 */
  9586.   {
  9587.     { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
  9588.   },
  9589.  
  9590.   /* VEX_LEN_0F38DF_P_2 */
  9591.   {
  9592.     { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
  9593.   },
  9594.  
  9595.   /* VEX_LEN_0F38F2_P_0 */
  9596.   {
  9597.     { "andnS",          { Gdq, VexGdq, Edq } },
  9598.   },
  9599.  
  9600.   /* VEX_LEN_0F38F3_R_1_P_0 */
  9601.   {
  9602.     { "blsrS",          { VexGdq, Edq } },
  9603.   },
  9604.  
  9605.   /* VEX_LEN_0F38F3_R_2_P_0 */
  9606.   {
  9607.     { "blsmskS",        { VexGdq, Edq } },
  9608.   },
  9609.  
  9610.   /* VEX_LEN_0F38F3_R_3_P_0 */
  9611.   {
  9612.     { "blsiS",          { VexGdq, Edq } },
  9613.   },
  9614.  
  9615.   /* VEX_LEN_0F38F5_P_0 */
  9616.   {
  9617.     { "bzhiS",          { Gdq, Edq, VexGdq } },
  9618.   },
  9619.  
  9620.   /* VEX_LEN_0F38F5_P_1 */
  9621.   {
  9622.     { "pextS",          { Gdq, VexGdq, Edq } },
  9623.   },
  9624.  
  9625.   /* VEX_LEN_0F38F5_P_3 */
  9626.   {
  9627.     { "pdepS",          { Gdq, VexGdq, Edq } },
  9628.   },
  9629.  
  9630.   /* VEX_LEN_0F38F6_P_3 */
  9631.   {
  9632.     { "mulxS",          { Gdq, VexGdq, Edq } },
  9633.   },
  9634.  
  9635.   /* VEX_LEN_0F38F7_P_0 */
  9636.   {
  9637.     { "bextrS",         { Gdq, Edq, VexGdq } },
  9638.   },
  9639.  
  9640.   /* VEX_LEN_0F38F7_P_1 */
  9641.   {
  9642.     { "sarxS",          { Gdq, Edq, VexGdq } },
  9643.   },
  9644.  
  9645.   /* VEX_LEN_0F38F7_P_2 */
  9646.   {
  9647.     { "shlxS",          { Gdq, Edq, VexGdq } },
  9648.   },
  9649.  
  9650.   /* VEX_LEN_0F38F7_P_3 */
  9651.   {
  9652.     { "shrxS",          { Gdq, Edq, VexGdq } },
  9653.   },
  9654.  
  9655.   /* VEX_LEN_0F3A00_P_2 */
  9656.   {
  9657.     { Bad_Opcode },
  9658.     { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
  9659.   },
  9660.  
  9661.   /* VEX_LEN_0F3A01_P_2 */
  9662.   {
  9663.     { Bad_Opcode },
  9664.     { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
  9665.   },
  9666.  
  9667.   /* VEX_LEN_0F3A06_P_2 */
  9668.   {
  9669.     { Bad_Opcode },
  9670.     { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
  9671.   },
  9672.  
  9673.   /* VEX_LEN_0F3A0A_P_2 */
  9674.   {
  9675.     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
  9676.     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
  9677.   },
  9678.  
  9679.   /* VEX_LEN_0F3A0B_P_2 */
  9680.   {
  9681.     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
  9682.     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
  9683.   },
  9684.  
  9685.   /* VEX_LEN_0F3A14_P_2 */
  9686.   {
  9687.     { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
  9688.   },
  9689.  
  9690.   /* VEX_LEN_0F3A15_P_2 */
  9691.   {
  9692.     { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
  9693.   },
  9694.  
  9695.   /* VEX_LEN_0F3A16_P_2  */
  9696.   {
  9697.     { "vpextrK",        { Edq, XM, Ib } },
  9698.   },
  9699.  
  9700.   /* VEX_LEN_0F3A17_P_2 */
  9701.   {
  9702.     { "vextractps",     { Edqd, XM, Ib } },
  9703.   },
  9704.  
  9705.   /* VEX_LEN_0F3A18_P_2 */
  9706.   {
  9707.     { Bad_Opcode },
  9708.     { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
  9709.   },
  9710.  
  9711.   /* VEX_LEN_0F3A19_P_2 */
  9712.   {
  9713.     { Bad_Opcode },
  9714.     { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
  9715.   },
  9716.  
  9717.   /* VEX_LEN_0F3A20_P_2 */
  9718.   {
  9719.     { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
  9720.   },
  9721.  
  9722.   /* VEX_LEN_0F3A21_P_2 */
  9723.   {
  9724.     { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
  9725.   },
  9726.  
  9727.   /* VEX_LEN_0F3A22_P_2 */
  9728.   {
  9729.     { "vpinsrK",        { XM, Vex128, Edq, Ib } },
  9730.   },
  9731.  
  9732.   /* VEX_LEN_0F3A30_P_2 */
  9733.   {
  9734.     { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
  9735.   },
  9736.  
  9737.   /* VEX_LEN_0F3A32_P_2 */
  9738.   {
  9739.     { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
  9740.   },
  9741.  
  9742.   /* VEX_LEN_0F3A38_P_2 */
  9743.   {
  9744.     { Bad_Opcode },
  9745.     { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
  9746.   },
  9747.  
  9748.   /* VEX_LEN_0F3A39_P_2 */
  9749.   {
  9750.     { Bad_Opcode },
  9751.     { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
  9752.   },
  9753.  
  9754.   /* VEX_LEN_0F3A41_P_2 */
  9755.   {
  9756.     { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
  9757.   },
  9758.  
  9759.   /* VEX_LEN_0F3A44_P_2 */
  9760.   {
  9761.     { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
  9762.   },
  9763.  
  9764.   /* VEX_LEN_0F3A46_P_2 */
  9765.   {
  9766.     { Bad_Opcode },
  9767.     { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
  9768.   },
  9769.  
  9770.   /* VEX_LEN_0F3A60_P_2 */
  9771.   {
  9772.     { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
  9773.   },
  9774.  
  9775.   /* VEX_LEN_0F3A61_P_2 */
  9776.   {
  9777.     { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
  9778.   },
  9779.  
  9780.   /* VEX_LEN_0F3A62_P_2 */
  9781.   {
  9782.     { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
  9783.   },
  9784.  
  9785.   /* VEX_LEN_0F3A63_P_2 */
  9786.   {
  9787.     { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
  9788.   },
  9789.  
  9790.   /* VEX_LEN_0F3A6A_P_2 */
  9791.   {
  9792.     { "vfmaddss",       { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
  9793.   },
  9794.  
  9795.   /* VEX_LEN_0F3A6B_P_2 */
  9796.   {
  9797.     { "vfmaddsd",       { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
  9798.   },
  9799.  
  9800.   /* VEX_LEN_0F3A6E_P_2 */
  9801.   {
  9802.     { "vfmsubss",       { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
  9803.   },
  9804.  
  9805.   /* VEX_LEN_0F3A6F_P_2 */
  9806.   {
  9807.     { "vfmsubsd",       { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
  9808.   },
  9809.  
  9810.   /* VEX_LEN_0F3A7A_P_2 */
  9811.   {
  9812.     { "vfnmaddss",      { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
  9813.   },
  9814.  
  9815.   /* VEX_LEN_0F3A7B_P_2 */
  9816.   {
  9817.     { "vfnmaddsd",      { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
  9818.   },
  9819.  
  9820.   /* VEX_LEN_0F3A7E_P_2 */
  9821.   {
  9822.     { "vfnmsubss",      { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
  9823.   },
  9824.  
  9825.   /* VEX_LEN_0F3A7F_P_2 */
  9826.   {
  9827.     { "vfnmsubsd",      { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
  9828.   },
  9829.  
  9830.   /* VEX_LEN_0F3ADF_P_2 */
  9831.   {
  9832.     { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
  9833.   },
  9834.  
  9835.   /* VEX_LEN_0F3AF0_P_3 */
  9836.   {
  9837.     { "rorxS",          { Gdq, Edq, Ib } },
  9838.   },
  9839.  
  9840.   /* VEX_LEN_0FXOP_08_CC */
  9841.   {
  9842.      { "vpcomb",        { XM, Vex128, EXx, Ib } },
  9843.   },
  9844.  
  9845.   /* VEX_LEN_0FXOP_08_CD */
  9846.   {
  9847.      { "vpcomw",        { XM, Vex128, EXx, Ib } },
  9848.   },
  9849.  
  9850.   /* VEX_LEN_0FXOP_08_CE */
  9851.   {
  9852.      { "vpcomd",        { XM, Vex128, EXx, Ib } },
  9853.   },
  9854.  
  9855.   /* VEX_LEN_0FXOP_08_CF */
  9856.   {
  9857.      { "vpcomq",        { XM, Vex128, EXx, Ib } },
  9858.   },
  9859.  
  9860.   /* VEX_LEN_0FXOP_08_EC */
  9861.   {
  9862.      { "vpcomub",       { XM, Vex128, EXx, Ib } },
  9863.   },
  9864.  
  9865.   /* VEX_LEN_0FXOP_08_ED */
  9866.   {
  9867.      { "vpcomuw",       { XM, Vex128, EXx, Ib } },
  9868.   },
  9869.  
  9870.   /* VEX_LEN_0FXOP_08_EE */
  9871.   {
  9872.      { "vpcomud",       { XM, Vex128, EXx, Ib } },
  9873.   },
  9874.  
  9875.   /* VEX_LEN_0FXOP_08_EF */
  9876.   {
  9877.      { "vpcomuq",       { XM, Vex128, EXx, Ib } },
  9878.   },
  9879.  
  9880.   /* VEX_LEN_0FXOP_09_80 */
  9881.   {
  9882.     { "vfrczps",        { XM, EXxmm } },
  9883.     { "vfrczps",        { XM, EXymmq } },
  9884.   },
  9885.  
  9886.   /* VEX_LEN_0FXOP_09_81 */
  9887.   {
  9888.     { "vfrczpd",        { XM, EXxmm } },
  9889.     { "vfrczpd",        { XM, EXymmq } },
  9890.   },
  9891. };
  9892.  
  9893. static const struct dis386 vex_w_table[][2] = {
  9894.   {
  9895.     /* VEX_W_0F10_P_0 */
  9896.     { "vmovups",        { XM, EXx } },
  9897.   },
  9898.   {
  9899.     /* VEX_W_0F10_P_1 */
  9900.     { "vmovss",         { XMVexScalar, VexScalar, EXdScalar } },
  9901.   },
  9902.   {
  9903.     /* VEX_W_0F10_P_2 */
  9904.     { "vmovupd",        { XM, EXx } },
  9905.   },
  9906.   {
  9907.     /* VEX_W_0F10_P_3 */
  9908.     { "vmovsd",         { XMVexScalar, VexScalar, EXqScalar } },
  9909.   },
  9910.   {
  9911.     /* VEX_W_0F11_P_0 */
  9912.     { "vmovups",        { EXxS, XM } },
  9913.   },
  9914.   {
  9915.     /* VEX_W_0F11_P_1 */
  9916.     { "vmovss",         { EXdVexScalarS, VexScalar, XMScalar } },
  9917.   },
  9918.   {
  9919.     /* VEX_W_0F11_P_2 */
  9920.     { "vmovupd",        { EXxS, XM } },
  9921.   },
  9922.   {
  9923.     /* VEX_W_0F11_P_3 */
  9924.     { "vmovsd",         { EXqVexScalarS, VexScalar, XMScalar } },
  9925.   },
  9926.   {
  9927.     /* VEX_W_0F12_P_0_M_0 */
  9928.     { "vmovlps",        { XM, Vex128, EXq } },
  9929.   },
  9930.   {
  9931.     /* VEX_W_0F12_P_0_M_1 */
  9932.     { "vmovhlps",       { XM, Vex128, EXq } },
  9933.   },
  9934.   {
  9935.     /* VEX_W_0F12_P_1 */
  9936.     { "vmovsldup",      { XM, EXx } },
  9937.   },
  9938.   {
  9939.     /* VEX_W_0F12_P_2 */
  9940.     { "vmovlpd",        { XM, Vex128, EXq } },
  9941.   },
  9942.   {
  9943.     /* VEX_W_0F12_P_3 */
  9944.     { "vmovddup",       { XM, EXymmq } },
  9945.   },
  9946.   {
  9947.     /* VEX_W_0F13_M_0 */
  9948.     { "vmovlpX",        { EXq, XM } },
  9949.   },
  9950.   {
  9951.     /* VEX_W_0F14 */
  9952.     { "vunpcklpX",      { XM, Vex, EXx } },
  9953.   },
  9954.   {
  9955.     /* VEX_W_0F15 */
  9956.     { "vunpckhpX",      { XM, Vex, EXx } },
  9957.   },
  9958.   {
  9959.     /* VEX_W_0F16_P_0_M_0 */
  9960.     { "vmovhps",        { XM, Vex128, EXq } },
  9961.   },
  9962.   {
  9963.     /* VEX_W_0F16_P_0_M_1 */
  9964.     { "vmovlhps",       { XM, Vex128, EXq } },
  9965.   },
  9966.   {
  9967.     /* VEX_W_0F16_P_1 */
  9968.     { "vmovshdup",      { XM, EXx } },
  9969.   },
  9970.   {
  9971.     /* VEX_W_0F16_P_2 */
  9972.     { "vmovhpd",        { XM, Vex128, EXq } },
  9973.   },
  9974.   {
  9975.     /* VEX_W_0F17_M_0 */
  9976.     { "vmovhpX",        { EXq, XM } },
  9977.   },
  9978.   {
  9979.     /* VEX_W_0F28 */
  9980.     { "vmovapX",        { XM, EXx } },
  9981.   },
  9982.   {
  9983.     /* VEX_W_0F29 */
  9984.     { "vmovapX",        { EXxS, XM } },
  9985.   },
  9986.   {
  9987.     /* VEX_W_0F2B_M_0 */
  9988.     { "vmovntpX",       { Mx, XM } },
  9989.   },
  9990.   {
  9991.     /* VEX_W_0F2E_P_0 */
  9992.     { "vucomiss",       { XMScalar, EXdScalar } },
  9993.   },
  9994.   {
  9995.     /* VEX_W_0F2E_P_2 */
  9996.     { "vucomisd",       { XMScalar, EXqScalar } },
  9997.   },
  9998.   {
  9999.     /* VEX_W_0F2F_P_0 */
  10000.     { "vcomiss",        { XMScalar, EXdScalar } },
  10001.   },
  10002.   {
  10003.     /* VEX_W_0F2F_P_2 */
  10004.     { "vcomisd",        { XMScalar, EXqScalar } },
  10005.   },
  10006.   {
  10007.     /* VEX_W_0F41_P_0_LEN_1 */
  10008.     { "kandw",          { MaskG, MaskVex, MaskR } },
  10009.   },
  10010.   {
  10011.     /* VEX_W_0F42_P_0_LEN_1 */
  10012.     { "kandnw",         { MaskG, MaskVex, MaskR } },
  10013.   },
  10014.   {
  10015.     /* VEX_W_0F44_P_0_LEN_0 */
  10016.     { "knotw",          { MaskG, MaskR } },
  10017.   },
  10018.   {
  10019.     /* VEX_W_0F45_P_0_LEN_1 */
  10020.     { "korw",           { MaskG, MaskVex, MaskR } },
  10021.   },
  10022.   {
  10023.     /* VEX_W_0F46_P_0_LEN_1 */
  10024.     { "kxnorw",         { MaskG, MaskVex, MaskR } },
  10025.   },
  10026.   {
  10027.     /* VEX_W_0F47_P_0_LEN_1 */
  10028.     { "kxorw",          { MaskG, MaskVex, MaskR } },
  10029.   },
  10030.   {
  10031.     /* VEX_W_0F4B_P_2_LEN_1 */
  10032.     { "kunpckbw",       { MaskG, MaskVex, MaskR } },
  10033.   },
  10034.   {
  10035.     /* VEX_W_0F50_M_0 */
  10036.     { "vmovmskpX",      { Gdq, XS } },
  10037.   },
  10038.   {
  10039.     /* VEX_W_0F51_P_0 */
  10040.     { "vsqrtps",        { XM, EXx } },
  10041.   },
  10042.   {
  10043.     /* VEX_W_0F51_P_1 */
  10044.     { "vsqrtss",        { XMScalar, VexScalar, EXdScalar } },
  10045.   },
  10046.   {
  10047.     /* VEX_W_0F51_P_2  */
  10048.     { "vsqrtpd",        { XM, EXx } },
  10049.   },
  10050.   {
  10051.     /* VEX_W_0F51_P_3 */
  10052.     { "vsqrtsd",        { XMScalar, VexScalar, EXqScalar } },
  10053.   },
  10054.   {
  10055.     /* VEX_W_0F52_P_0 */
  10056.     { "vrsqrtps",       { XM, EXx } },
  10057.   },
  10058.   {
  10059.     /* VEX_W_0F52_P_1 */
  10060.     { "vrsqrtss",       { XMScalar, VexScalar, EXdScalar } },
  10061.   },
  10062.   {
  10063.     /* VEX_W_0F53_P_0  */
  10064.     { "vrcpps",         { XM, EXx } },
  10065.   },
  10066.   {
  10067.     /* VEX_W_0F53_P_1  */
  10068.     { "vrcpss",         { XMScalar, VexScalar, EXdScalar } },
  10069.   },
  10070.   {
  10071.     /* VEX_W_0F58_P_0  */
  10072.     { "vaddps",         { XM, Vex, EXx } },
  10073.   },
  10074.   {
  10075.     /* VEX_W_0F58_P_1  */
  10076.     { "vaddss",         { XMScalar, VexScalar, EXdScalar } },
  10077.   },
  10078.   {
  10079.     /* VEX_W_0F58_P_2  */
  10080.     { "vaddpd",         { XM, Vex, EXx } },
  10081.   },
  10082.   {
  10083.     /* VEX_W_0F58_P_3  */
  10084.     { "vaddsd",         { XMScalar, VexScalar, EXqScalar } },
  10085.   },
  10086.   {
  10087.     /* VEX_W_0F59_P_0  */
  10088.     { "vmulps",         { XM, Vex, EXx } },
  10089.   },
  10090.   {
  10091.     /* VEX_W_0F59_P_1  */
  10092.     { "vmulss",         { XMScalar, VexScalar, EXdScalar } },
  10093.   },
  10094.   {
  10095.     /* VEX_W_0F59_P_2  */
  10096.     { "vmulpd",         { XM, Vex, EXx } },
  10097.   },
  10098.   {
  10099.     /* VEX_W_0F59_P_3  */
  10100.     { "vmulsd",         { XMScalar, VexScalar, EXqScalar } },
  10101.   },
  10102.   {
  10103.     /* VEX_W_0F5A_P_0  */
  10104.     { "vcvtps2pd",      { XM, EXxmmq } },
  10105.   },
  10106.   {
  10107.     /* VEX_W_0F5A_P_1  */
  10108.     { "vcvtss2sd",      { XMScalar, VexScalar, EXdScalar } },
  10109.   },
  10110.   {
  10111.     /* VEX_W_0F5A_P_3  */
  10112.     { "vcvtsd2ss",      { XMScalar, VexScalar, EXqScalar } },
  10113.   },
  10114.   {
  10115.     /* VEX_W_0F5B_P_0  */
  10116.     { "vcvtdq2ps",      { XM, EXx } },
  10117.   },
  10118.   {
  10119.     /* VEX_W_0F5B_P_1  */
  10120.     { "vcvttps2dq",     { XM, EXx } },
  10121.   },
  10122.   {
  10123.     /* VEX_W_0F5B_P_2  */
  10124.     { "vcvtps2dq",      { XM, EXx } },
  10125.   },
  10126.   {
  10127.     /* VEX_W_0F5C_P_0  */
  10128.     { "vsubps",         { XM, Vex, EXx } },
  10129.   },
  10130.   {
  10131.     /* VEX_W_0F5C_P_1  */
  10132.     { "vsubss",         { XMScalar, VexScalar, EXdScalar } },
  10133.   },
  10134.   {
  10135.     /* VEX_W_0F5C_P_2  */
  10136.     { "vsubpd",         { XM, Vex, EXx } },
  10137.   },
  10138.   {
  10139.     /* VEX_W_0F5C_P_3  */
  10140.     { "vsubsd",         { XMScalar, VexScalar, EXqScalar } },
  10141.   },
  10142.   {
  10143.     /* VEX_W_0F5D_P_0  */
  10144.     { "vminps",         { XM, Vex, EXx } },
  10145.   },
  10146.   {
  10147.     /* VEX_W_0F5D_P_1  */
  10148.     { "vminss",         { XMScalar, VexScalar, EXdScalar } },
  10149.   },
  10150.   {
  10151.     /* VEX_W_0F5D_P_2  */
  10152.     { "vminpd",         { XM, Vex, EXx } },
  10153.   },
  10154.   {
  10155.     /* VEX_W_0F5D_P_3  */
  10156.     { "vminsd",         { XMScalar, VexScalar, EXqScalar } },
  10157.   },
  10158.   {
  10159.     /* VEX_W_0F5E_P_0  */
  10160.     { "vdivps",         { XM, Vex, EXx } },
  10161.   },
  10162.   {
  10163.     /* VEX_W_0F5E_P_1  */
  10164.     { "vdivss",         { XMScalar, VexScalar, EXdScalar } },
  10165.   },
  10166.   {
  10167.     /* VEX_W_0F5E_P_2  */
  10168.     { "vdivpd",         { XM, Vex, EXx } },
  10169.   },
  10170.   {
  10171.     /* VEX_W_0F5E_P_3  */
  10172.     { "vdivsd",         { XMScalar, VexScalar, EXqScalar } },
  10173.   },
  10174.   {
  10175.     /* VEX_W_0F5F_P_0  */
  10176.     { "vmaxps",         { XM, Vex, EXx } },
  10177.   },
  10178.   {
  10179.     /* VEX_W_0F5F_P_1  */
  10180.     { "vmaxss",         { XMScalar, VexScalar, EXdScalar } },
  10181.   },
  10182.   {
  10183.     /* VEX_W_0F5F_P_2  */
  10184.     { "vmaxpd",         { XM, Vex, EXx } },
  10185.   },
  10186.   {
  10187.     /* VEX_W_0F5F_P_3  */
  10188.     { "vmaxsd",         { XMScalar, VexScalar, EXqScalar } },
  10189.   },
  10190.   {
  10191.     /* VEX_W_0F60_P_2  */
  10192.     { "vpunpcklbw",     { XM, Vex, EXx } },
  10193.   },
  10194.   {
  10195.     /* VEX_W_0F61_P_2  */
  10196.     { "vpunpcklwd",     { XM, Vex, EXx } },
  10197.   },
  10198.   {
  10199.     /* VEX_W_0F62_P_2  */
  10200.     { "vpunpckldq",     { XM, Vex, EXx } },
  10201.   },
  10202.   {
  10203.     /* VEX_W_0F63_P_2  */
  10204.     { "vpacksswb",      { XM, Vex, EXx } },
  10205.   },
  10206.   {
  10207.     /* VEX_W_0F64_P_2  */
  10208.     { "vpcmpgtb",       { XM, Vex, EXx } },
  10209.   },
  10210.   {
  10211.     /* VEX_W_0F65_P_2  */
  10212.     { "vpcmpgtw",       { XM, Vex, EXx } },
  10213.   },
  10214.   {
  10215.     /* VEX_W_0F66_P_2  */
  10216.     { "vpcmpgtd",       { XM, Vex, EXx } },
  10217.   },
  10218.   {
  10219.     /* VEX_W_0F67_P_2  */
  10220.     { "vpackuswb",      { XM, Vex, EXx } },
  10221.   },
  10222.   {
  10223.     /* VEX_W_0F68_P_2  */
  10224.     { "vpunpckhbw",     { XM, Vex, EXx } },
  10225.   },
  10226.   {
  10227.     /* VEX_W_0F69_P_2  */
  10228.     { "vpunpckhwd",     { XM, Vex, EXx } },
  10229.   },
  10230.   {
  10231.     /* VEX_W_0F6A_P_2  */
  10232.     { "vpunpckhdq",     { XM, Vex, EXx } },
  10233.   },
  10234.   {
  10235.     /* VEX_W_0F6B_P_2  */
  10236.     { "vpackssdw",      { XM, Vex, EXx } },
  10237.   },
  10238.   {
  10239.     /* VEX_W_0F6C_P_2  */
  10240.     { "vpunpcklqdq",    { XM, Vex, EXx } },
  10241.   },
  10242.   {
  10243.     /* VEX_W_0F6D_P_2  */
  10244.     { "vpunpckhqdq",    { XM, Vex, EXx } },
  10245.   },
  10246.   {
  10247.     /* VEX_W_0F6F_P_1  */
  10248.     { "vmovdqu",        { XM, EXx } },
  10249.   },
  10250.   {
  10251.     /* VEX_W_0F6F_P_2  */
  10252.     { "vmovdqa",        { XM, EXx } },
  10253.   },
  10254.   {
  10255.     /* VEX_W_0F70_P_1 */
  10256.     { "vpshufhw",       { XM, EXx, Ib } },
  10257.   },
  10258.   {
  10259.     /* VEX_W_0F70_P_2 */
  10260.     { "vpshufd",        { XM, EXx, Ib } },
  10261.   },
  10262.   {
  10263.     /* VEX_W_0F70_P_3 */
  10264.     { "vpshuflw",       { XM, EXx, Ib } },
  10265.   },
  10266.   {
  10267.     /* VEX_W_0F71_R_2_P_2  */
  10268.     { "vpsrlw",         { Vex, XS, Ib } },
  10269.   },
  10270.   {
  10271.     /* VEX_W_0F71_R_4_P_2  */
  10272.     { "vpsraw",         { Vex, XS, Ib } },
  10273.   },
  10274.   {
  10275.     /* VEX_W_0F71_R_6_P_2  */
  10276.     { "vpsllw",         { Vex, XS, Ib } },
  10277.   },
  10278.   {
  10279.     /* VEX_W_0F72_R_2_P_2  */
  10280.     { "vpsrld",         { Vex, XS, Ib } },
  10281.   },
  10282.   {
  10283.     /* VEX_W_0F72_R_4_P_2  */
  10284.     { "vpsrad",         { Vex, XS, Ib } },
  10285.   },
  10286.   {
  10287.     /* VEX_W_0F72_R_6_P_2  */
  10288.     { "vpslld",         { Vex, XS, Ib } },
  10289.   },
  10290.   {
  10291.     /* VEX_W_0F73_R_2_P_2  */
  10292.     { "vpsrlq",         { Vex, XS, Ib } },
  10293.   },
  10294.   {
  10295.     /* VEX_W_0F73_R_3_P_2  */
  10296.     { "vpsrldq",        { Vex, XS, Ib } },
  10297.   },
  10298.   {
  10299.     /* VEX_W_0F73_R_6_P_2  */
  10300.     { "vpsllq",         { Vex, XS, Ib } },
  10301.   },
  10302.   {
  10303.     /* VEX_W_0F73_R_7_P_2  */
  10304.     { "vpslldq",        { Vex, XS, Ib } },
  10305.   },
  10306.   {
  10307.     /* VEX_W_0F74_P_2 */
  10308.     { "vpcmpeqb",       { XM, Vex, EXx } },
  10309.   },
  10310.   {
  10311.     /* VEX_W_0F75_P_2 */
  10312.     { "vpcmpeqw",       { XM, Vex, EXx } },
  10313.   },
  10314.   {
  10315.     /* VEX_W_0F76_P_2 */
  10316.     { "vpcmpeqd",       { XM, Vex, EXx } },
  10317.   },
  10318.   {
  10319.     /* VEX_W_0F77_P_0 */
  10320.     { "",               { VZERO } },
  10321.   },
  10322.   {
  10323.     /* VEX_W_0F7C_P_2 */
  10324.     { "vhaddpd",        { XM, Vex, EXx } },
  10325.   },
  10326.   {
  10327.     /* VEX_W_0F7C_P_3 */
  10328.     { "vhaddps",        { XM, Vex, EXx } },
  10329.   },
  10330.   {
  10331.     /* VEX_W_0F7D_P_2 */
  10332.     { "vhsubpd",        { XM, Vex, EXx } },
  10333.   },
  10334.   {
  10335.     /* VEX_W_0F7D_P_3 */
  10336.     { "vhsubps",        { XM, Vex, EXx } },
  10337.   },
  10338.   {
  10339.     /* VEX_W_0F7E_P_1 */
  10340.     { "vmovq",          { XMScalar, EXqScalar } },
  10341.   },
  10342.   {
  10343.     /* VEX_W_0F7F_P_1 */
  10344.     { "vmovdqu",        { EXxS, XM } },
  10345.   },
  10346.   {
  10347.     /* VEX_W_0F7F_P_2 */
  10348.     { "vmovdqa",        { EXxS, XM } },
  10349.   },
  10350.   {
  10351.     /* VEX_W_0F90_P_0_LEN_0 */
  10352.     { "kmovw",          { MaskG, MaskE } },
  10353.   },
  10354.   {
  10355.     /* VEX_W_0F91_P_0_LEN_0 */
  10356.     { "kmovw",          { Ew, MaskG } },
  10357.   },
  10358.   {
  10359.     /* VEX_W_0F92_P_0_LEN_0 */
  10360.     { "kmovw",          { MaskG, Rdq } },
  10361.   },
  10362.   {
  10363.     /* VEX_W_0F93_P_0_LEN_0 */
  10364.     { "kmovw",          { Gdq, MaskR } },
  10365.   },
  10366.   {
  10367.     /* VEX_W_0F98_P_0_LEN_0 */
  10368.     { "kortestw",       { MaskG, MaskR } },
  10369.   },
  10370.   {
  10371.     /* VEX_W_0FAE_R_2_M_0 */
  10372.     { "vldmxcsr",       { Md } },
  10373.   },
  10374.   {
  10375.     /* VEX_W_0FAE_R_3_M_0 */
  10376.     { "vstmxcsr",       { Md } },
  10377.   },
  10378.   {
  10379.     /* VEX_W_0FC2_P_0 */
  10380.     { "vcmpps",         { XM, Vex, EXx, VCMP } },
  10381.   },
  10382.   {
  10383.     /* VEX_W_0FC2_P_1 */
  10384.     { "vcmpss",         { XMScalar, VexScalar, EXdScalar, VCMP } },
  10385.   },
  10386.   {
  10387.     /* VEX_W_0FC2_P_2 */
  10388.     { "vcmppd",         { XM, Vex, EXx, VCMP } },
  10389.   },
  10390.   {
  10391.     /* VEX_W_0FC2_P_3 */
  10392.     { "vcmpsd",         { XMScalar, VexScalar, EXqScalar, VCMP } },
  10393.   },
  10394.   {
  10395.     /* VEX_W_0FC4_P_2 */
  10396.     { "vpinsrw",        { XM, Vex128, Edqw, Ib } },
  10397.   },
  10398.   {
  10399.     /* VEX_W_0FC5_P_2 */
  10400.     { "vpextrw",        { Gdq, XS, Ib } },
  10401.   },
  10402.   {
  10403.     /* VEX_W_0FD0_P_2 */
  10404.     { "vaddsubpd",      { XM, Vex, EXx } },
  10405.   },
  10406.   {
  10407.     /* VEX_W_0FD0_P_3 */
  10408.     { "vaddsubps",      { XM, Vex, EXx } },
  10409.   },
  10410.   {
  10411.     /* VEX_W_0FD1_P_2 */
  10412.     { "vpsrlw",         { XM, Vex, EXxmm } },
  10413.   },
  10414.   {
  10415.     /* VEX_W_0FD2_P_2 */
  10416.     { "vpsrld",         { XM, Vex, EXxmm } },
  10417.   },
  10418.   {
  10419.     /* VEX_W_0FD3_P_2 */
  10420.     { "vpsrlq",         { XM, Vex, EXxmm } },
  10421.   },
  10422.   {
  10423.     /* VEX_W_0FD4_P_2 */
  10424.     { "vpaddq",         { XM, Vex, EXx } },
  10425.   },
  10426.   {
  10427.     /* VEX_W_0FD5_P_2 */
  10428.     { "vpmullw",        { XM, Vex, EXx } },
  10429.   },
  10430.   {
  10431.     /* VEX_W_0FD6_P_2 */
  10432.     { "vmovq",          { EXqScalarS, XMScalar } },
  10433.   },
  10434.   {
  10435.     /* VEX_W_0FD7_P_2_M_1 */
  10436.     { "vpmovmskb",      { Gdq, XS } },
  10437.   },
  10438.   {
  10439.     /* VEX_W_0FD8_P_2 */
  10440.     { "vpsubusb",       { XM, Vex, EXx } },
  10441.   },
  10442.   {
  10443.     /* VEX_W_0FD9_P_2 */
  10444.     { "vpsubusw",       { XM, Vex, EXx } },
  10445.   },
  10446.   {
  10447.     /* VEX_W_0FDA_P_2 */
  10448.     { "vpminub",        { XM, Vex, EXx } },
  10449.   },
  10450.   {
  10451.     /* VEX_W_0FDB_P_2 */
  10452.     { "vpand",          { XM, Vex, EXx } },
  10453.   },
  10454.   {
  10455.     /* VEX_W_0FDC_P_2 */
  10456.     { "vpaddusb",       { XM, Vex, EXx } },
  10457.   },
  10458.   {
  10459.     /* VEX_W_0FDD_P_2 */
  10460.     { "vpaddusw",       { XM, Vex, EXx } },
  10461.   },
  10462.   {
  10463.     /* VEX_W_0FDE_P_2 */
  10464.     { "vpmaxub",        { XM, Vex, EXx } },
  10465.   },
  10466.   {
  10467.     /* VEX_W_0FDF_P_2 */
  10468.     { "vpandn",         { XM, Vex, EXx } },
  10469.   },
  10470.   {
  10471.     /* VEX_W_0FE0_P_2  */
  10472.     { "vpavgb",         { XM, Vex, EXx } },
  10473.   },
  10474.   {
  10475.     /* VEX_W_0FE1_P_2  */
  10476.     { "vpsraw",         { XM, Vex, EXxmm } },
  10477.   },
  10478.   {
  10479.     /* VEX_W_0FE2_P_2  */
  10480.     { "vpsrad",         { XM, Vex, EXxmm } },
  10481.   },
  10482.   {
  10483.     /* VEX_W_0FE3_P_2  */
  10484.     { "vpavgw",         { XM, Vex, EXx } },
  10485.   },
  10486.   {
  10487.     /* VEX_W_0FE4_P_2  */
  10488.     { "vpmulhuw",       { XM, Vex, EXx } },
  10489.   },
  10490.   {
  10491.     /* VEX_W_0FE5_P_2  */
  10492.     { "vpmulhw",        { XM, Vex, EXx } },
  10493.   },
  10494.   {
  10495.     /* VEX_W_0FE6_P_1  */
  10496.     { "vcvtdq2pd",      { XM, EXxmmq } },
  10497.   },
  10498.   {
  10499.     /* VEX_W_0FE6_P_2  */
  10500.     { "vcvttpd2dq%XY",  { XMM, EXx } },
  10501.   },
  10502.   {
  10503.     /* VEX_W_0FE6_P_3  */
  10504.     { "vcvtpd2dq%XY",   { XMM, EXx } },
  10505.   },
  10506.   {
  10507.     /* VEX_W_0FE7_P_2_M_0 */
  10508.     { "vmovntdq",       { Mx, XM } },
  10509.   },
  10510.   {
  10511.     /* VEX_W_0FE8_P_2  */
  10512.     { "vpsubsb",        { XM, Vex, EXx } },
  10513.   },
  10514.   {
  10515.     /* VEX_W_0FE9_P_2  */
  10516.     { "vpsubsw",        { XM, Vex, EXx } },
  10517.   },
  10518.   {
  10519.     /* VEX_W_0FEA_P_2  */
  10520.     { "vpminsw",        { XM, Vex, EXx } },
  10521.   },
  10522.   {
  10523.     /* VEX_W_0FEB_P_2  */
  10524.     { "vpor",           { XM, Vex, EXx } },
  10525.   },
  10526.   {
  10527.     /* VEX_W_0FEC_P_2  */
  10528.     { "vpaddsb",        { XM, Vex, EXx } },
  10529.   },
  10530.   {
  10531.     /* VEX_W_0FED_P_2  */
  10532.     { "vpaddsw",        { XM, Vex, EXx } },
  10533.   },
  10534.   {
  10535.     /* VEX_W_0FEE_P_2  */
  10536.     { "vpmaxsw",        { XM, Vex, EXx } },
  10537.   },
  10538.   {
  10539.     /* VEX_W_0FEF_P_2  */
  10540.     { "vpxor",          { XM, Vex, EXx } },
  10541.   },
  10542.   {
  10543.     /* VEX_W_0FF0_P_3_M_0 */
  10544.     { "vlddqu",         { XM, M } },
  10545.   },
  10546.   {
  10547.     /* VEX_W_0FF1_P_2 */
  10548.     { "vpsllw",         { XM, Vex, EXxmm } },
  10549.   },
  10550.   {
  10551.     /* VEX_W_0FF2_P_2 */
  10552.     { "vpslld",         { XM, Vex, EXxmm } },
  10553.   },
  10554.   {
  10555.     /* VEX_W_0FF3_P_2 */
  10556.     { "vpsllq",         { XM, Vex, EXxmm } },
  10557.   },
  10558.   {
  10559.     /* VEX_W_0FF4_P_2 */
  10560.     { "vpmuludq",       { XM, Vex, EXx } },
  10561.   },
  10562.   {
  10563.     /* VEX_W_0FF5_P_2 */
  10564.     { "vpmaddwd",       { XM, Vex, EXx } },
  10565.   },
  10566.   {
  10567.     /* VEX_W_0FF6_P_2 */
  10568.     { "vpsadbw",        { XM, Vex, EXx } },
  10569.   },
  10570.   {
  10571.     /* VEX_W_0FF7_P_2 */
  10572.     { "vmaskmovdqu",    { XM, XS } },
  10573.   },
  10574.   {
  10575.     /* VEX_W_0FF8_P_2 */
  10576.     { "vpsubb",         { XM, Vex, EXx } },
  10577.   },
  10578.   {
  10579.     /* VEX_W_0FF9_P_2 */
  10580.     { "vpsubw",         { XM, Vex, EXx } },
  10581.   },
  10582.   {
  10583.     /* VEX_W_0FFA_P_2 */
  10584.     { "vpsubd",         { XM, Vex, EXx } },
  10585.   },
  10586.   {
  10587.     /* VEX_W_0FFB_P_2 */
  10588.     { "vpsubq",         { XM, Vex, EXx } },
  10589.   },
  10590.   {
  10591.     /* VEX_W_0FFC_P_2 */
  10592.     { "vpaddb",         { XM, Vex, EXx } },
  10593.   },
  10594.   {
  10595.     /* VEX_W_0FFD_P_2 */
  10596.     { "vpaddw",         { XM, Vex, EXx } },
  10597.   },
  10598.   {
  10599.     /* VEX_W_0FFE_P_2 */
  10600.     { "vpaddd",         { XM, Vex, EXx } },
  10601.   },
  10602.   {
  10603.     /* VEX_W_0F3800_P_2  */
  10604.     { "vpshufb",        { XM, Vex, EXx } },
  10605.   },
  10606.   {
  10607.     /* VEX_W_0F3801_P_2  */
  10608.     { "vphaddw",        { XM, Vex, EXx } },
  10609.   },
  10610.   {
  10611.     /* VEX_W_0F3802_P_2  */
  10612.     { "vphaddd",        { XM, Vex, EXx } },
  10613.   },
  10614.   {
  10615.     /* VEX_W_0F3803_P_2  */
  10616.     { "vphaddsw",       { XM, Vex, EXx } },
  10617.   },
  10618.   {
  10619.     /* VEX_W_0F3804_P_2  */
  10620.     { "vpmaddubsw",     { XM, Vex, EXx } },
  10621.   },
  10622.   {
  10623.     /* VEX_W_0F3805_P_2  */
  10624.     { "vphsubw",        { XM, Vex, EXx } },
  10625.   },
  10626.   {
  10627.     /* VEX_W_0F3806_P_2  */
  10628.     { "vphsubd",        { XM, Vex, EXx } },
  10629.   },
  10630.   {
  10631.     /* VEX_W_0F3807_P_2  */
  10632.     { "vphsubsw",       { XM, Vex, EXx } },
  10633.   },
  10634.   {
  10635.     /* VEX_W_0F3808_P_2  */
  10636.     { "vpsignb",        { XM, Vex, EXx } },
  10637.   },
  10638.   {
  10639.     /* VEX_W_0F3809_P_2  */
  10640.     { "vpsignw",        { XM, Vex, EXx } },
  10641.   },
  10642.   {
  10643.     /* VEX_W_0F380A_P_2  */
  10644.     { "vpsignd",        { XM, Vex, EXx } },
  10645.   },
  10646.   {
  10647.     /* VEX_W_0F380B_P_2  */
  10648.     { "vpmulhrsw",      { XM, Vex, EXx } },
  10649.   },
  10650.   {
  10651.     /* VEX_W_0F380C_P_2  */
  10652.     { "vpermilps",      { XM, Vex, EXx } },
  10653.   },
  10654.   {
  10655.     /* VEX_W_0F380D_P_2  */
  10656.     { "vpermilpd",      { XM, Vex, EXx } },
  10657.   },
  10658.   {
  10659.     /* VEX_W_0F380E_P_2  */
  10660.     { "vtestps",        { XM, EXx } },
  10661.   },
  10662.   {
  10663.     /* VEX_W_0F380F_P_2  */
  10664.     { "vtestpd",        { XM, EXx } },
  10665.   },
  10666.   {
  10667.     /* VEX_W_0F3816_P_2  */
  10668.     { "vpermps",        { XM, Vex, EXx } },
  10669.   },
  10670.   {
  10671.     /* VEX_W_0F3817_P_2 */
  10672.     { "vptest",         { XM, EXx } },
  10673.   },
  10674.   {
  10675.     /* VEX_W_0F3818_P_2 */
  10676.     { "vbroadcastss",   { XM, EXxmm_md } },
  10677.   },
  10678.   {
  10679.     /* VEX_W_0F3819_P_2 */
  10680.     { "vbroadcastsd",   { XM, EXxmm_mq } },
  10681.   },
  10682.   {
  10683.     /* VEX_W_0F381A_P_2_M_0 */
  10684.     { "vbroadcastf128", { XM, Mxmm } },
  10685.   },
  10686.   {
  10687.     /* VEX_W_0F381C_P_2 */
  10688.     { "vpabsb",         { XM, EXx } },
  10689.   },
  10690.   {
  10691.     /* VEX_W_0F381D_P_2 */
  10692.     { "vpabsw",         { XM, EXx } },
  10693.   },
  10694.   {
  10695.     /* VEX_W_0F381E_P_2 */
  10696.     { "vpabsd",         { XM, EXx } },
  10697.   },
  10698.   {
  10699.     /* VEX_W_0F3820_P_2 */
  10700.     { "vpmovsxbw",      { XM, EXxmmq } },
  10701.   },
  10702.   {
  10703.     /* VEX_W_0F3821_P_2 */
  10704.     { "vpmovsxbd",      { XM, EXxmmqd } },
  10705.   },
  10706.   {
  10707.     /* VEX_W_0F3822_P_2 */
  10708.     { "vpmovsxbq",      { XM, EXxmmdw } },
  10709.   },
  10710.   {
  10711.     /* VEX_W_0F3823_P_2 */
  10712.     { "vpmovsxwd",      { XM, EXxmmq } },
  10713.   },
  10714.   {
  10715.     /* VEX_W_0F3824_P_2 */
  10716.     { "vpmovsxwq",      { XM, EXxmmqd } },
  10717.   },
  10718.   {
  10719.     /* VEX_W_0F3825_P_2 */
  10720.     { "vpmovsxdq",      { XM, EXxmmq } },
  10721.   },
  10722.   {
  10723.     /* VEX_W_0F3828_P_2 */
  10724.     { "vpmuldq",        { XM, Vex, EXx } },
  10725.   },
  10726.   {
  10727.     /* VEX_W_0F3829_P_2 */
  10728.     { "vpcmpeqq",       { XM, Vex, EXx } },
  10729.   },
  10730.   {
  10731.     /* VEX_W_0F382A_P_2_M_0 */
  10732.     { "vmovntdqa",      { XM, Mx } },
  10733.   },
  10734.   {
  10735.     /* VEX_W_0F382B_P_2 */
  10736.     { "vpackusdw",      { XM, Vex, EXx } },
  10737.   },
  10738.   {
  10739.     /* VEX_W_0F382C_P_2_M_0 */
  10740.     { "vmaskmovps",     { XM, Vex, Mx } },
  10741.   },
  10742.   {
  10743.     /* VEX_W_0F382D_P_2_M_0 */
  10744.     { "vmaskmovpd",     { XM, Vex, Mx } },
  10745.   },
  10746.   {
  10747.     /* VEX_W_0F382E_P_2_M_0 */
  10748.     { "vmaskmovps",     { Mx, Vex, XM } },
  10749.   },
  10750.   {
  10751.     /* VEX_W_0F382F_P_2_M_0 */
  10752.     { "vmaskmovpd",     { Mx, Vex, XM } },
  10753.   },
  10754.   {
  10755.     /* VEX_W_0F3830_P_2 */
  10756.     { "vpmovzxbw",      { XM, EXxmmq } },
  10757.   },
  10758.   {
  10759.     /* VEX_W_0F3831_P_2 */
  10760.     { "vpmovzxbd",      { XM, EXxmmqd } },
  10761.   },
  10762.   {
  10763.     /* VEX_W_0F3832_P_2 */
  10764.     { "vpmovzxbq",      { XM, EXxmmdw } },
  10765.   },
  10766.   {
  10767.     /* VEX_W_0F3833_P_2 */
  10768.     { "vpmovzxwd",      { XM, EXxmmq } },
  10769.   },
  10770.   {
  10771.     /* VEX_W_0F3834_P_2 */
  10772.     { "vpmovzxwq",      { XM, EXxmmqd } },
  10773.   },
  10774.   {
  10775.     /* VEX_W_0F3835_P_2 */
  10776.     { "vpmovzxdq",      { XM, EXxmmq } },
  10777.   },
  10778.   {
  10779.     /* VEX_W_0F3836_P_2  */
  10780.     { "vpermd",         { XM, Vex, EXx } },
  10781.   },
  10782.   {
  10783.     /* VEX_W_0F3837_P_2 */
  10784.     { "vpcmpgtq",       { XM, Vex, EXx } },
  10785.   },
  10786.   {
  10787.     /* VEX_W_0F3838_P_2 */
  10788.     { "vpminsb",        { XM, Vex, EXx } },
  10789.   },
  10790.   {
  10791.     /* VEX_W_0F3839_P_2 */
  10792.     { "vpminsd",        { XM, Vex, EXx } },
  10793.   },
  10794.   {
  10795.     /* VEX_W_0F383A_P_2 */
  10796.     { "vpminuw",        { XM, Vex, EXx } },
  10797.   },
  10798.   {
  10799.     /* VEX_W_0F383B_P_2 */
  10800.     { "vpminud",        { XM, Vex, EXx } },
  10801.   },
  10802.   {
  10803.     /* VEX_W_0F383C_P_2 */
  10804.     { "vpmaxsb",        { XM, Vex, EXx } },
  10805.   },
  10806.   {
  10807.     /* VEX_W_0F383D_P_2 */
  10808.     { "vpmaxsd",        { XM, Vex, EXx } },
  10809.   },
  10810.   {
  10811.     /* VEX_W_0F383E_P_2 */
  10812.     { "vpmaxuw",        { XM, Vex, EXx } },
  10813.   },
  10814.   {
  10815.     /* VEX_W_0F383F_P_2 */
  10816.     { "vpmaxud",        { XM, Vex, EXx } },
  10817.   },
  10818.   {
  10819.     /* VEX_W_0F3840_P_2 */
  10820.     { "vpmulld",        { XM, Vex, EXx } },
  10821.   },
  10822.   {
  10823.     /* VEX_W_0F3841_P_2 */
  10824.     { "vphminposuw",    { XM, EXx } },
  10825.   },
  10826.   {
  10827.     /* VEX_W_0F3846_P_2 */
  10828.     { "vpsravd",        { XM, Vex, EXx } },
  10829.   },
  10830.   {
  10831.     /* VEX_W_0F3858_P_2 */
  10832.     { "vpbroadcastd", { XM, EXxmm_md } },
  10833.   },
  10834.   {
  10835.     /* VEX_W_0F3859_P_2 */
  10836.     { "vpbroadcastq",   { XM, EXxmm_mq } },
  10837.   },
  10838.   {
  10839.     /* VEX_W_0F385A_P_2_M_0 */
  10840.     { "vbroadcasti128", { XM, Mxmm } },
  10841.   },
  10842.   {
  10843.     /* VEX_W_0F3878_P_2 */
  10844.     { "vpbroadcastb",   { XM, EXxmm_mb } },
  10845.   },
  10846.   {
  10847.     /* VEX_W_0F3879_P_2 */
  10848.     { "vpbroadcastw",   { XM, EXxmm_mw } },
  10849.   },
  10850.   {
  10851.     /* VEX_W_0F38DB_P_2 */
  10852.     { "vaesimc",        { XM, EXx } },
  10853.   },
  10854.   {
  10855.     /* VEX_W_0F38DC_P_2 */
  10856.     { "vaesenc",        { XM, Vex128, EXx } },
  10857.   },
  10858.   {
  10859.     /* VEX_W_0F38DD_P_2 */
  10860.     { "vaesenclast",    { XM, Vex128, EXx } },
  10861.   },
  10862.   {
  10863.     /* VEX_W_0F38DE_P_2 */
  10864.     { "vaesdec",        { XM, Vex128, EXx } },
  10865.   },
  10866.   {
  10867.     /* VEX_W_0F38DF_P_2 */
  10868.     { "vaesdeclast",    { XM, Vex128, EXx } },
  10869.   },
  10870.   {
  10871.     /* VEX_W_0F3A00_P_2 */
  10872.     { Bad_Opcode },
  10873.     { "vpermq",         { XM, EXx, Ib } },
  10874.   },
  10875.   {
  10876.     /* VEX_W_0F3A01_P_2 */
  10877.     { Bad_Opcode },
  10878.     { "vpermpd",        { XM, EXx, Ib } },
  10879.   },
  10880.   {
  10881.     /* VEX_W_0F3A02_P_2 */
  10882.     { "vpblendd",       { XM, Vex, EXx, Ib } },
  10883.   },
  10884.   {
  10885.     /* VEX_W_0F3A04_P_2 */
  10886.     { "vpermilps",      { XM, EXx, Ib } },
  10887.   },
  10888.   {
  10889.     /* VEX_W_0F3A05_P_2 */
  10890.     { "vpermilpd",      { XM, EXx, Ib } },
  10891.   },
  10892.   {
  10893.     /* VEX_W_0F3A06_P_2 */
  10894.     { "vperm2f128",     { XM, Vex256, EXx, Ib } },
  10895.   },
  10896.   {
  10897.     /* VEX_W_0F3A08_P_2 */
  10898.     { "vroundps",       { XM, EXx, Ib } },
  10899.   },
  10900.   {
  10901.     /* VEX_W_0F3A09_P_2 */
  10902.     { "vroundpd",       { XM, EXx, Ib } },
  10903.   },
  10904.   {
  10905.     /* VEX_W_0F3A0A_P_2 */
  10906.     { "vroundss",       { XMScalar, VexScalar, EXdScalar, Ib } },
  10907.   },
  10908.   {
  10909.     /* VEX_W_0F3A0B_P_2 */
  10910.     { "vroundsd",       { XMScalar, VexScalar, EXqScalar, Ib } },
  10911.   },
  10912.   {
  10913.     /* VEX_W_0F3A0C_P_2 */
  10914.     { "vblendps",       { XM, Vex, EXx, Ib } },
  10915.   },
  10916.   {
  10917.     /* VEX_W_0F3A0D_P_2 */
  10918.     { "vblendpd",       { XM, Vex, EXx, Ib } },
  10919.   },
  10920.   {
  10921.     /* VEX_W_0F3A0E_P_2 */
  10922.     { "vpblendw",       { XM, Vex, EXx, Ib } },
  10923.   },
  10924.   {
  10925.     /* VEX_W_0F3A0F_P_2 */
  10926.     { "vpalignr",       { XM, Vex, EXx, Ib } },
  10927.   },
  10928.   {
  10929.     /* VEX_W_0F3A14_P_2 */
  10930.     { "vpextrb",        { Edqb, XM, Ib } },
  10931.   },
  10932.   {
  10933.     /* VEX_W_0F3A15_P_2 */
  10934.     { "vpextrw",        { Edqw, XM, Ib } },
  10935.   },
  10936.   {
  10937.     /* VEX_W_0F3A18_P_2 */
  10938.     { "vinsertf128",    { XM, Vex256, EXxmm, Ib } },
  10939.   },
  10940.   {
  10941.     /* VEX_W_0F3A19_P_2 */
  10942.     { "vextractf128",   { EXxmm, XM, Ib } },
  10943.   },
  10944.   {
  10945.     /* VEX_W_0F3A20_P_2 */
  10946.     { "vpinsrb",        { XM, Vex128, Edqb, Ib } },
  10947.   },
  10948.   {
  10949.     /* VEX_W_0F3A21_P_2 */
  10950.     { "vinsertps",      { XM, Vex128, EXd, Ib } },
  10951.   },
  10952.   {
  10953.     /* VEX_W_0F3A30_P_2 */
  10954.     { Bad_Opcode },
  10955.     { "kshiftrw",       { MaskG, MaskR, Ib } },
  10956.   },
  10957.   {
  10958.     /* VEX_W_0F3A32_P_2 */
  10959.     { Bad_Opcode },
  10960.     { "kshiftlw",       { MaskG, MaskR, Ib } },
  10961.   },
  10962.   {
  10963.     /* VEX_W_0F3A38_P_2 */
  10964.     { "vinserti128",    { XM, Vex256, EXxmm, Ib } },
  10965.   },
  10966.   {
  10967.     /* VEX_W_0F3A39_P_2 */
  10968.     { "vextracti128",   { EXxmm, XM, Ib } },
  10969.   },
  10970.   {
  10971.     /* VEX_W_0F3A40_P_2 */
  10972.     { "vdpps",          { XM, Vex, EXx, Ib } },
  10973.   },
  10974.   {
  10975.     /* VEX_W_0F3A41_P_2 */
  10976.     { "vdppd",          { XM, Vex128, EXx, Ib } },
  10977.   },
  10978.   {
  10979.     /* VEX_W_0F3A42_P_2 */
  10980.     { "vmpsadbw",       { XM, Vex, EXx, Ib } },
  10981.   },
  10982.   {
  10983.     /* VEX_W_0F3A44_P_2 */
  10984.     { "vpclmulqdq",     { XM, Vex128, EXx, PCLMUL } },
  10985.   },
  10986.   {
  10987.     /* VEX_W_0F3A46_P_2 */
  10988.     { "vperm2i128",     { XM, Vex256, EXx, Ib } },
  10989.   },
  10990.   {
  10991.     /* VEX_W_0F3A48_P_2 */
  10992.     { "vpermil2ps",     { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
  10993.     { "vpermil2ps",     { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
  10994.   },
  10995.   {
  10996.     /* VEX_W_0F3A49_P_2 */
  10997.     { "vpermil2pd",     { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
  10998.     { "vpermil2pd",     { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
  10999.   },
  11000.   {
  11001.     /* VEX_W_0F3A4A_P_2 */
  11002.     { "vblendvps",      { XM, Vex, EXx, XMVexI4 } },
  11003.   },
  11004.   {
  11005.     /* VEX_W_0F3A4B_P_2 */
  11006.     { "vblendvpd",      { XM, Vex, EXx, XMVexI4 } },
  11007.   },
  11008.   {
  11009.     /* VEX_W_0F3A4C_P_2 */
  11010.     { "vpblendvb",      { XM, Vex, EXx, XMVexI4 } },
  11011.   },
  11012.   {
  11013.     /* VEX_W_0F3A60_P_2 */
  11014.     { "vpcmpestrm",     { XM, EXx, Ib } },
  11015.   },
  11016.   {
  11017.     /* VEX_W_0F3A61_P_2 */
  11018.     { "vpcmpestri",     { XM, EXx, Ib } },
  11019.   },
  11020.   {
  11021.     /* VEX_W_0F3A62_P_2 */
  11022.     { "vpcmpistrm",     { XM, EXx, Ib } },
  11023.   },
  11024.   {
  11025.     /* VEX_W_0F3A63_P_2 */
  11026.     { "vpcmpistri",     { XM, EXx, Ib } },
  11027.   },
  11028.   {
  11029.     /* VEX_W_0F3ADF_P_2 */
  11030.     { "vaeskeygenassist", { XM, EXx, Ib } },
  11031.   },
  11032. #define NEED_VEX_W_TABLE
  11033. #include "i386-dis-evex.h"
  11034. #undef NEED_VEX_W_TABLE
  11035. };
  11036.  
  11037. static const struct dis386 mod_table[][2] = {
  11038.   {
  11039.     /* MOD_8D */
  11040.     { "leaS",           { Gv, M } },
  11041.   },
  11042.   {
  11043.     /* MOD_C6_REG_7 */
  11044.     { Bad_Opcode },
  11045.     { RM_TABLE (RM_C6_REG_7) },
  11046.   },
  11047.   {
  11048.     /* MOD_C7_REG_7 */
  11049.     { Bad_Opcode },
  11050.     { RM_TABLE (RM_C7_REG_7) },
  11051.   },
  11052.   {
  11053.     /* MOD_0F01_REG_0 */
  11054.     { X86_64_TABLE (X86_64_0F01_REG_0) },
  11055.     { RM_TABLE (RM_0F01_REG_0) },
  11056.   },
  11057.   {
  11058.     /* MOD_0F01_REG_1 */
  11059.     { X86_64_TABLE (X86_64_0F01_REG_1) },
  11060.     { RM_TABLE (RM_0F01_REG_1) },
  11061.   },
  11062.   {
  11063.     /* MOD_0F01_REG_2 */
  11064.     { X86_64_TABLE (X86_64_0F01_REG_2) },
  11065.     { RM_TABLE (RM_0F01_REG_2) },
  11066.   },
  11067.   {
  11068.     /* MOD_0F01_REG_3 */
  11069.     { X86_64_TABLE (X86_64_0F01_REG_3) },
  11070.     { RM_TABLE (RM_0F01_REG_3) },
  11071.   },
  11072.   {
  11073.     /* MOD_0F01_REG_7 */
  11074.     { "invlpg",         { Mb } },
  11075.     { RM_TABLE (RM_0F01_REG_7) },
  11076.   },
  11077.   {
  11078.     /* MOD_0F12_PREFIX_0 */
  11079.     { "movlps",         { XM, EXq } },
  11080.     { "movhlps",        { XM, EXq } },
  11081.   },
  11082.   {
  11083.     /* MOD_0F13 */
  11084.     { "movlpX",         { EXq, XM } },
  11085.   },
  11086.   {
  11087.     /* MOD_0F16_PREFIX_0 */
  11088.     { "movhps",         { XM, EXq } },
  11089.     { "movlhps",        { XM, EXq } },
  11090.   },
  11091.   {
  11092.     /* MOD_0F17 */
  11093.     { "movhpX",         { EXq, XM } },
  11094.   },
  11095.   {
  11096.     /* MOD_0F18_REG_0 */
  11097.     { "prefetchnta",    { Mb } },
  11098.   },
  11099.   {
  11100.     /* MOD_0F18_REG_1 */
  11101.     { "prefetcht0",     { Mb } },
  11102.   },
  11103.   {
  11104.     /* MOD_0F18_REG_2 */
  11105.     { "prefetcht1",     { Mb } },
  11106.   },
  11107.   {
  11108.     /* MOD_0F18_REG_3 */
  11109.     { "prefetcht2",     { Mb } },
  11110.   },
  11111.   {
  11112.     /* MOD_0F18_REG_4 */
  11113.     { "nop/reserved",   { Mb } },
  11114.   },
  11115.   {
  11116.     /* MOD_0F18_REG_5 */
  11117.     { "nop/reserved",   { Mb } },
  11118.   },
  11119.   {
  11120.     /* MOD_0F18_REG_6 */
  11121.     { "nop/reserved",   { Mb } },
  11122.   },
  11123.   {
  11124.     /* MOD_0F18_REG_7 */
  11125.     { "nop/reserved",   { Mb } },
  11126.   },
  11127.   {
  11128.     /* MOD_0F1A_PREFIX_0 */
  11129.     { "bndldx",         { Gbnd, Ev_bnd } },
  11130.     { "nopQ",           { Ev } },
  11131.   },
  11132.   {
  11133.     /* MOD_0F1B_PREFIX_0 */
  11134.     { "bndstx",         { Ev_bnd, Gbnd } },
  11135.     { "nopQ",           { Ev } },
  11136.   },
  11137.   {
  11138.     /* MOD_0F1B_PREFIX_1 */
  11139.     { "bndmk",          { Gbnd, Ev_bnd } },
  11140.     { "nopQ",           { Ev } },
  11141.   },
  11142.   {
  11143.     /* MOD_0F20 */
  11144.     { Bad_Opcode },
  11145.     { "movZ",           { Rm, Cm } },
  11146.   },
  11147.   {
  11148.     /* MOD_0F21 */
  11149.     { Bad_Opcode },
  11150.     { "movZ",           { Rm, Dm } },
  11151.   },
  11152.   {
  11153.     /* MOD_0F22 */
  11154.     { Bad_Opcode },
  11155.     { "movZ",           { Cm, Rm } },
  11156.   },
  11157.   {
  11158.     /* MOD_0F23 */
  11159.     { Bad_Opcode },
  11160.     { "movZ",           { Dm, Rm } },
  11161.   },
  11162.   {
  11163.     /* MOD_0F24 */
  11164.     { Bad_Opcode },
  11165.     { "movL",           { Rd, Td } },
  11166.   },
  11167.   {
  11168.     /* MOD_0F26 */
  11169.     { Bad_Opcode },
  11170.     { "movL",           { Td, Rd } },
  11171.   },
  11172.   {
  11173.     /* MOD_0F2B_PREFIX_0 */
  11174.     {"movntps",         { Mx, XM } },
  11175.   },
  11176.   {
  11177.     /* MOD_0F2B_PREFIX_1 */
  11178.     {"movntss",         { Md, XM } },
  11179.   },
  11180.   {
  11181.     /* MOD_0F2B_PREFIX_2 */
  11182.     {"movntpd",         { Mx, XM } },
  11183.   },
  11184.   {
  11185.     /* MOD_0F2B_PREFIX_3 */
  11186.     {"movntsd",         { Mq, XM } },
  11187.   },
  11188.   {
  11189.     /* MOD_0F51 */
  11190.     { Bad_Opcode },
  11191.     { "movmskpX",       { Gdq, XS } },
  11192.   },
  11193.   {
  11194.     /* MOD_0F71_REG_2 */
  11195.     { Bad_Opcode },
  11196.     { "psrlw",          { MS, Ib } },
  11197.   },
  11198.   {
  11199.     /* MOD_0F71_REG_4 */
  11200.     { Bad_Opcode },
  11201.     { "psraw",          { MS, Ib } },
  11202.   },
  11203.   {
  11204.     /* MOD_0F71_REG_6 */
  11205.     { Bad_Opcode },
  11206.     { "psllw",          { MS, Ib } },
  11207.   },
  11208.   {
  11209.     /* MOD_0F72_REG_2 */
  11210.     { Bad_Opcode },
  11211.     { "psrld",          { MS, Ib } },
  11212.   },
  11213.   {
  11214.     /* MOD_0F72_REG_4 */
  11215.     { Bad_Opcode },
  11216.     { "psrad",          { MS, Ib } },
  11217.   },
  11218.   {
  11219.     /* MOD_0F72_REG_6 */
  11220.     { Bad_Opcode },
  11221.     { "pslld",          { MS, Ib } },
  11222.   },
  11223.   {
  11224.     /* MOD_0F73_REG_2 */
  11225.     { Bad_Opcode },
  11226.     { "psrlq",          { MS, Ib } },
  11227.   },
  11228.   {
  11229.     /* MOD_0F73_REG_3 */
  11230.     { Bad_Opcode },
  11231.     { PREFIX_TABLE (PREFIX_0F73_REG_3) },
  11232.   },
  11233.   {
  11234.     /* MOD_0F73_REG_6 */
  11235.     { Bad_Opcode },
  11236.     { "psllq",          { MS, Ib } },
  11237.   },
  11238.   {
  11239.     /* MOD_0F73_REG_7 */
  11240.     { Bad_Opcode },
  11241.     { PREFIX_TABLE (PREFIX_0F73_REG_7) },
  11242.   },
  11243.   {
  11244.     /* MOD_0FAE_REG_0 */
  11245.     { "fxsave",         { FXSAVE } },
  11246.     { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
  11247.   },
  11248.   {
  11249.     /* MOD_0FAE_REG_1 */
  11250.     { "fxrstor",        { FXSAVE } },
  11251.     { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
  11252.   },
  11253.   {
  11254.     /* MOD_0FAE_REG_2 */
  11255.     { "ldmxcsr",        { Md } },
  11256.     { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
  11257.   },
  11258.   {
  11259.     /* MOD_0FAE_REG_3 */
  11260.     { "stmxcsr",        { Md } },
  11261.     { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
  11262.   },
  11263.   {
  11264.     /* MOD_0FAE_REG_4 */
  11265.     { "xsave",          { FXSAVE } },
  11266.   },
  11267.   {
  11268.     /* MOD_0FAE_REG_5 */
  11269.     { "xrstor",         { FXSAVE } },
  11270.     { RM_TABLE (RM_0FAE_REG_5) },
  11271.   },
  11272.   {
  11273.     /* MOD_0FAE_REG_6 */
  11274.     { "xsaveopt",       { FXSAVE } },
  11275.     { RM_TABLE (RM_0FAE_REG_6) },
  11276.   },
  11277.   {
  11278.     /* MOD_0FAE_REG_7 */
  11279.     { "clflush",        { Mb } },
  11280.     { RM_TABLE (RM_0FAE_REG_7) },
  11281.   },
  11282.   {
  11283.     /* MOD_0FB2 */
  11284.     { "lssS",           { Gv, Mp } },
  11285.   },
  11286.   {
  11287.     /* MOD_0FB4 */
  11288.     { "lfsS",           { Gv, Mp } },
  11289.   },
  11290.   {
  11291.     /* MOD_0FB5 */
  11292.     { "lgsS",           { Gv, Mp } },
  11293.   },
  11294.   {
  11295.     /* MOD_0FC7_REG_6 */
  11296.     { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
  11297.     { "rdrand",         { Ev } },
  11298.   },
  11299.   {
  11300.     /* MOD_0FC7_REG_7 */
  11301.     { "vmptrst",        { Mq } },
  11302.     { "rdseed",         { Ev } },
  11303.   },
  11304.   {
  11305.     /* MOD_0FD7 */
  11306.     { Bad_Opcode },
  11307.     { "pmovmskb",       { Gdq, MS } },
  11308.   },
  11309.   {
  11310.     /* MOD_0FE7_PREFIX_2 */
  11311.     { "movntdq",        { Mx, XM } },
  11312.   },
  11313.   {
  11314.     /* MOD_0FF0_PREFIX_3 */
  11315.     { "lddqu",          { XM, M } },
  11316.   },
  11317.   {
  11318.     /* MOD_0F382A_PREFIX_2 */
  11319.     { "movntdqa",       { XM, Mx } },
  11320.   },
  11321.   {
  11322.     /* MOD_62_32BIT */
  11323.     { "bound{S|}",      { Gv, Ma } },
  11324.     { EVEX_TABLE (EVEX_0F) },
  11325.   },
  11326.   {
  11327.     /* MOD_C4_32BIT */
  11328.     { "lesS",           { Gv, Mp } },
  11329.     { VEX_C4_TABLE (VEX_0F) },
  11330.   },
  11331.   {
  11332.     /* MOD_C5_32BIT */
  11333.     { "ldsS",           { Gv, Mp } },
  11334.     { VEX_C5_TABLE (VEX_0F) },
  11335.   },
  11336.   {
  11337.     /* MOD_VEX_0F12_PREFIX_0 */
  11338.     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
  11339.     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
  11340.   },
  11341.   {
  11342.     /* MOD_VEX_0F13 */
  11343.     { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
  11344.   },
  11345.   {
  11346.     /* MOD_VEX_0F16_PREFIX_0 */
  11347.     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
  11348.     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
  11349.   },
  11350.   {
  11351.     /* MOD_VEX_0F17 */
  11352.     { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
  11353.   },
  11354.   {
  11355.     /* MOD_VEX_0F2B */
  11356.     { VEX_W_TABLE (VEX_W_0F2B_M_0) },
  11357.   },
  11358.   {
  11359.     /* MOD_VEX_0F50 */
  11360.     { Bad_Opcode },
  11361.     { VEX_W_TABLE (VEX_W_0F50_M_0) },
  11362.   },
  11363.   {
  11364.     /* MOD_VEX_0F71_REG_2 */
  11365.     { Bad_Opcode },
  11366.     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
  11367.   },
  11368.   {
  11369.     /* MOD_VEX_0F71_REG_4 */
  11370.     { Bad_Opcode },
  11371.     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
  11372.   },
  11373.   {
  11374.     /* MOD_VEX_0F71_REG_6 */
  11375.     { Bad_Opcode },
  11376.     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
  11377.   },
  11378.   {
  11379.     /* MOD_VEX_0F72_REG_2 */
  11380.     { Bad_Opcode },
  11381.     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
  11382.   },
  11383.   {
  11384.     /* MOD_VEX_0F72_REG_4 */
  11385.     { Bad_Opcode },
  11386.     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
  11387.   },
  11388.   {
  11389.     /* MOD_VEX_0F72_REG_6 */
  11390.     { Bad_Opcode },
  11391.     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
  11392.   },
  11393.   {
  11394.     /* MOD_VEX_0F73_REG_2 */
  11395.     { Bad_Opcode },
  11396.     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
  11397.   },
  11398.   {
  11399.     /* MOD_VEX_0F73_REG_3 */
  11400.     { Bad_Opcode },
  11401.     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
  11402.   },
  11403.   {
  11404.     /* MOD_VEX_0F73_REG_6 */
  11405.     { Bad_Opcode },
  11406.     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
  11407.   },
  11408.   {
  11409.     /* MOD_VEX_0F73_REG_7 */
  11410.     { Bad_Opcode },
  11411.     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
  11412.   },
  11413.   {
  11414.     /* MOD_VEX_0FAE_REG_2 */
  11415.     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
  11416.   },
  11417.   {
  11418.     /* MOD_VEX_0FAE_REG_3 */
  11419.     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
  11420.   },
  11421.   {
  11422.     /* MOD_VEX_0FD7_PREFIX_2 */
  11423.     { Bad_Opcode },
  11424.     { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
  11425.   },
  11426.   {
  11427.     /* MOD_VEX_0FE7_PREFIX_2 */
  11428.     { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
  11429.   },
  11430.   {
  11431.     /* MOD_VEX_0FF0_PREFIX_3 */
  11432.     { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
  11433.   },
  11434.   {
  11435.     /* MOD_VEX_0F381A_PREFIX_2 */
  11436.     { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
  11437.   },
  11438.   {
  11439.     /* MOD_VEX_0F382A_PREFIX_2 */
  11440.     { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
  11441.   },
  11442.   {
  11443.     /* MOD_VEX_0F382C_PREFIX_2 */
  11444.     { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
  11445.   },
  11446.   {
  11447.     /* MOD_VEX_0F382D_PREFIX_2 */
  11448.     { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
  11449.   },
  11450.   {
  11451.     /* MOD_VEX_0F382E_PREFIX_2 */
  11452.     { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
  11453.   },
  11454.   {
  11455.     /* MOD_VEX_0F382F_PREFIX_2 */
  11456.     { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
  11457.   },
  11458.   {
  11459.     /* MOD_VEX_0F385A_PREFIX_2 */
  11460.     { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
  11461.   },
  11462.   {
  11463.     /* MOD_VEX_0F388C_PREFIX_2 */
  11464.     { "vpmaskmov%LW",   { XM, Vex, Mx } },
  11465.   },
  11466.   {
  11467.     /* MOD_VEX_0F388E_PREFIX_2 */
  11468.     { "vpmaskmov%LW",   { Mx, Vex, XM } },
  11469.   },
  11470. #define NEED_MOD_TABLE
  11471. #include "i386-dis-evex.h"
  11472. #undef NEED_MOD_TABLE
  11473. };
  11474.  
  11475. static const struct dis386 rm_table[][8] = {
  11476.   {
  11477.     /* RM_C6_REG_7 */
  11478.     { "xabort",         { Skip_MODRM, Ib } },
  11479.   },
  11480.   {
  11481.     /* RM_C7_REG_7 */
  11482.     { "xbeginT",        { Skip_MODRM, Jv } },
  11483.   },
  11484.   {
  11485.     /* RM_0F01_REG_0 */
  11486.     { Bad_Opcode },
  11487.     { "vmcall",         { Skip_MODRM } },
  11488.     { "vmlaunch",       { Skip_MODRM } },
  11489.     { "vmresume",       { Skip_MODRM } },
  11490.     { "vmxoff",         { Skip_MODRM } },
  11491.   },
  11492.   {
  11493.     /* RM_0F01_REG_1 */
  11494.     { "monitor",        { { OP_Monitor, 0 } } },
  11495.     { "mwait",          { { OP_Mwait, 0 } } },
  11496.     { "clac",           { Skip_MODRM } },
  11497.     { "stac",           { Skip_MODRM } },
  11498.   },
  11499.   {
  11500.     /* RM_0F01_REG_2 */
  11501.     { "xgetbv",         { Skip_MODRM } },
  11502.     { "xsetbv",         { Skip_MODRM } },
  11503.     { Bad_Opcode },
  11504.     { Bad_Opcode },
  11505.     { "vmfunc",         { Skip_MODRM } },
  11506.     { "xend",           { Skip_MODRM } },
  11507.     { "xtest",          { Skip_MODRM } },
  11508.     { Bad_Opcode },
  11509.   },
  11510.   {
  11511.     /* RM_0F01_REG_3 */
  11512.     { "vmrun",          { Skip_MODRM } },
  11513.     { "vmmcall",        { Skip_MODRM } },
  11514.     { "vmload",         { Skip_MODRM } },
  11515.     { "vmsave",         { Skip_MODRM } },
  11516.     { "stgi",           { Skip_MODRM } },
  11517.     { "clgi",           { Skip_MODRM } },
  11518.     { "skinit",         { Skip_MODRM } },
  11519.     { "invlpga",        { Skip_MODRM } },
  11520.   },
  11521.   {
  11522.     /* RM_0F01_REG_7 */
  11523.     { "swapgs",         { Skip_MODRM } },
  11524.     { "rdtscp",         { Skip_MODRM } },
  11525.   },
  11526.   {
  11527.     /* RM_0FAE_REG_5 */
  11528.     { "lfence",         { Skip_MODRM } },
  11529.   },
  11530.   {
  11531.     /* RM_0FAE_REG_6 */
  11532.     { "mfence",         { Skip_MODRM } },
  11533.   },
  11534.   {
  11535.     /* RM_0FAE_REG_7 */
  11536.     { "sfence",         { Skip_MODRM } },
  11537.   },
  11538. };
  11539.  
  11540. #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
  11541.  
  11542. /* We use the high bit to indicate different name for the same
  11543.    prefix.  */
  11544. #define ADDR16_PREFIX   (0x67 | 0x100)
  11545. #define ADDR32_PREFIX   (0x67 | 0x200)
  11546. #define DATA16_PREFIX   (0x66 | 0x100)
  11547. #define DATA32_PREFIX   (0x66 | 0x200)
  11548. #define REP_PREFIX      (0xf3 | 0x100)
  11549. #define XACQUIRE_PREFIX (0xf2 | 0x200)
  11550. #define XRELEASE_PREFIX (0xf3 | 0x400)
  11551. #define BND_PREFIX      (0xf2 | 0x400)
  11552.  
  11553. static int
  11554. ckprefix (void)
  11555. {
  11556.   int newrex, i, length;
  11557.   rex = 0;
  11558.   rex_ignored = 0;
  11559.   prefixes = 0;
  11560.   used_prefixes = 0;
  11561.   rex_used = 0;
  11562.   last_lock_prefix = -1;
  11563.   last_repz_prefix = -1;
  11564.   last_repnz_prefix = -1;
  11565.   last_data_prefix = -1;
  11566.   last_addr_prefix = -1;
  11567.   last_rex_prefix = -1;
  11568.   last_seg_prefix = -1;
  11569.   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
  11570.     all_prefixes[i] = 0;
  11571.   i = 0;
  11572.   length = 0;
  11573.   /* The maximum instruction length is 15bytes.  */
  11574.   while (length < MAX_CODE_LENGTH - 1)
  11575.     {
  11576.       FETCH_DATA (the_info, codep + 1);
  11577.       newrex = 0;
  11578.       switch (*codep)
  11579.         {
  11580.         /* REX prefixes family.  */
  11581.         case 0x40:
  11582.         case 0x41:
  11583.         case 0x42:
  11584.         case 0x43:
  11585.         case 0x44:
  11586.         case 0x45:
  11587.         case 0x46:
  11588.         case 0x47:
  11589.         case 0x48:
  11590.         case 0x49:
  11591.         case 0x4a:
  11592.         case 0x4b:
  11593.         case 0x4c:
  11594.         case 0x4d:
  11595.         case 0x4e:
  11596.         case 0x4f:
  11597.           if (address_mode == mode_64bit)
  11598.             newrex = *codep;
  11599.           else
  11600.             return 1;
  11601.           last_rex_prefix = i;
  11602.           break;
  11603.         case 0xf3:
  11604.           prefixes |= PREFIX_REPZ;
  11605.           last_repz_prefix = i;
  11606.           break;
  11607.         case 0xf2:
  11608.           prefixes |= PREFIX_REPNZ;
  11609.           last_repnz_prefix = i;
  11610.           break;
  11611.         case 0xf0:
  11612.           prefixes |= PREFIX_LOCK;
  11613.           last_lock_prefix = i;
  11614.           break;
  11615.         case 0x2e:
  11616.           prefixes |= PREFIX_CS;
  11617.           last_seg_prefix = i;
  11618.           break;
  11619.         case 0x36:
  11620.           prefixes |= PREFIX_SS;
  11621.           last_seg_prefix = i;
  11622.           break;
  11623.         case 0x3e:
  11624.           prefixes |= PREFIX_DS;
  11625.           last_seg_prefix = i;
  11626.           break;
  11627.         case 0x26:
  11628.           prefixes |= PREFIX_ES;
  11629.           last_seg_prefix = i;
  11630.           break;
  11631.         case 0x64:
  11632.           prefixes |= PREFIX_FS;
  11633.           last_seg_prefix = i;
  11634.           break;
  11635.         case 0x65:
  11636.           prefixes |= PREFIX_GS;
  11637.           last_seg_prefix = i;
  11638.           break;
  11639.         case 0x66:
  11640.           prefixes |= PREFIX_DATA;
  11641.           last_data_prefix = i;
  11642.           break;
  11643.         case 0x67:
  11644.           prefixes |= PREFIX_ADDR;
  11645.           last_addr_prefix = i;
  11646.           break;
  11647.         case FWAIT_OPCODE:
  11648.           /* fwait is really an instruction.  If there are prefixes
  11649.              before the fwait, they belong to the fwait, *not* to the
  11650.              following instruction.  */
  11651.           if (prefixes || rex)
  11652.             {
  11653.               prefixes |= PREFIX_FWAIT;
  11654.               codep++;
  11655.               /* This ensures that the previous REX prefixes are noticed
  11656.                  as unused prefixes, as in the return case below.  */
  11657.               rex_used = rex;
  11658.               return 1;
  11659.             }
  11660.           prefixes = PREFIX_FWAIT;
  11661.           break;
  11662.         default:
  11663.           return 1;
  11664.         }
  11665.       /* Rex is ignored when followed by another prefix.  */
  11666.       if (rex)
  11667.         {
  11668.           rex_used = rex;
  11669.           return 1;
  11670.         }
  11671.       if (*codep != FWAIT_OPCODE)
  11672.         all_prefixes[i++] = *codep;
  11673.       rex = newrex;
  11674.       codep++;
  11675.       length++;
  11676.     }
  11677.   return 0;
  11678. }
  11679.  
  11680. static int
  11681. seg_prefix (int pref)
  11682. {
  11683.   switch (pref)
  11684.     {
  11685.     case 0x2e:
  11686.       return PREFIX_CS;
  11687.     case 0x36:
  11688.       return PREFIX_SS;
  11689.     case 0x3e:
  11690.       return PREFIX_DS;
  11691.     case 0x26:
  11692.       return PREFIX_ES;
  11693.     case 0x64:
  11694.       return PREFIX_FS;
  11695.     case 0x65:
  11696.       return PREFIX_GS;
  11697.     default:
  11698.       return 0;
  11699.     }
  11700. }
  11701.  
  11702. /* Return the name of the prefix byte PREF, or NULL if PREF is not a
  11703.    prefix byte.  */
  11704.  
  11705. static const char *
  11706. prefix_name (int pref, int sizeflag)
  11707. {
  11708.   static const char *rexes [16] =
  11709.     {
  11710.       "rex",            /* 0x40 */
  11711.       "rex.B",          /* 0x41 */
  11712.       "rex.X",          /* 0x42 */
  11713.       "rex.XB",         /* 0x43 */
  11714.       "rex.R",          /* 0x44 */
  11715.       "rex.RB",         /* 0x45 */
  11716.       "rex.RX",         /* 0x46 */
  11717.       "rex.RXB",        /* 0x47 */
  11718.       "rex.W",          /* 0x48 */
  11719.       "rex.WB",         /* 0x49 */
  11720.       "rex.WX",         /* 0x4a */
  11721.       "rex.WXB",        /* 0x4b */
  11722.       "rex.WR",         /* 0x4c */
  11723.       "rex.WRB",        /* 0x4d */
  11724.       "rex.WRX",        /* 0x4e */
  11725.       "rex.WRXB",       /* 0x4f */
  11726.     };
  11727.  
  11728.   switch (pref)
  11729.     {
  11730.     /* REX prefixes family.  */
  11731.     case 0x40:
  11732.     case 0x41:
  11733.     case 0x42:
  11734.     case 0x43:
  11735.     case 0x44:
  11736.     case 0x45:
  11737.     case 0x46:
  11738.     case 0x47:
  11739.     case 0x48:
  11740.     case 0x49:
  11741.     case 0x4a:
  11742.     case 0x4b:
  11743.     case 0x4c:
  11744.     case 0x4d:
  11745.     case 0x4e:
  11746.     case 0x4f:
  11747.       return rexes [pref - 0x40];
  11748.     case 0xf3:
  11749.       return "repz";
  11750.     case 0xf2:
  11751.       return "repnz";
  11752.     case 0xf0:
  11753.       return "lock";
  11754.     case 0x2e:
  11755.       return "cs";
  11756.     case 0x36:
  11757.       return "ss";
  11758.     case 0x3e:
  11759.       return "ds";
  11760.     case 0x26:
  11761.       return "es";
  11762.     case 0x64:
  11763.       return "fs";
  11764.     case 0x65:
  11765.       return "gs";
  11766.     case 0x66:
  11767.       return (sizeflag & DFLAG) ? "data16" : "data32";
  11768.     case 0x67:
  11769.       if (address_mode == mode_64bit)
  11770.         return (sizeflag & AFLAG) ? "addr32" : "addr64";
  11771.       else
  11772.         return (sizeflag & AFLAG) ? "addr16" : "addr32";
  11773.     case FWAIT_OPCODE:
  11774.       return "fwait";
  11775.     case ADDR16_PREFIX:
  11776.       return "addr16";
  11777.     case ADDR32_PREFIX:
  11778.       return "addr32";
  11779.     case DATA16_PREFIX:
  11780.       return "data16";
  11781.     case DATA32_PREFIX:
  11782.       return "data32";
  11783.     case REP_PREFIX:
  11784.       return "rep";
  11785.     case XACQUIRE_PREFIX:
  11786.       return "xacquire";
  11787.     case XRELEASE_PREFIX:
  11788.       return "xrelease";
  11789.     case BND_PREFIX:
  11790.       return "bnd";
  11791.     default:
  11792.       return NULL;
  11793.     }
  11794. }
  11795.  
  11796. static char op_out[MAX_OPERANDS][100];
  11797. static int op_ad, op_index[MAX_OPERANDS];
  11798. static int two_source_ops;
  11799. static bfd_vma op_address[MAX_OPERANDS];
  11800. static bfd_vma op_riprel[MAX_OPERANDS];
  11801. static bfd_vma start_pc;
  11802.  
  11803. /*
  11804.  *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
  11805.  *   (see topic "Redundant prefixes" in the "Differences from 8086"
  11806.  *   section of the "Virtual 8086 Mode" chapter.)
  11807.  * 'pc' should be the address of this instruction, it will
  11808.  *   be used to print the target address if this is a relative jump or call
  11809.  * The function returns the length of this instruction in bytes.
  11810.  */
  11811.  
  11812. static char intel_syntax;
  11813. static char intel_mnemonic = !SYSV386_COMPAT;
  11814. static char open_char;
  11815. static char close_char;
  11816. static char separator_char;
  11817. static char scale_char;
  11818.  
  11819. /* Here for backwards compatibility.  When gdb stops using
  11820.    print_insn_i386_att and print_insn_i386_intel these functions can
  11821.    disappear, and print_insn_i386 be merged into print_insn.  */
  11822. int
  11823. print_insn_i386_att (bfd_vma pc, disassemble_info *info)
  11824. {
  11825.   intel_syntax = 0;
  11826.  
  11827.   return print_insn (pc, info);
  11828. }
  11829.  
  11830. int
  11831. print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
  11832. {
  11833.   intel_syntax = 1;
  11834.  
  11835.   return print_insn (pc, info);
  11836. }
  11837.  
  11838. int
  11839. print_insn_i386 (bfd_vma pc, disassemble_info *info)
  11840. {
  11841.   intel_syntax = -1;
  11842.  
  11843.   return print_insn (pc, info);
  11844. }
  11845.  
  11846. void
  11847. print_i386_disassembler_options (FILE *stream)
  11848. {
  11849.   fprintf (stream, _("\n\
  11850. The following i386/x86-64 specific disassembler options are supported for use\n\
  11851. with the -M switch (multiple options should be separated by commas):\n"));
  11852.  
  11853.   fprintf (stream, _("  x86-64      Disassemble in 64bit mode\n"));
  11854.   fprintf (stream, _("  i386        Disassemble in 32bit mode\n"));
  11855.   fprintf (stream, _("  i8086       Disassemble in 16bit mode\n"));
  11856.   fprintf (stream, _("  att         Display instruction in AT&T syntax\n"));
  11857.   fprintf (stream, _("  intel       Display instruction in Intel syntax\n"));
  11858.   fprintf (stream, _("  att-mnemonic\n"
  11859.                      "              Display instruction in AT&T mnemonic\n"));
  11860.   fprintf (stream, _("  intel-mnemonic\n"
  11861.                      "              Display instruction in Intel mnemonic\n"));
  11862.   fprintf (stream, _("  addr64      Assume 64bit address size\n"));
  11863.   fprintf (stream, _("  addr32      Assume 32bit address size\n"));
  11864.   fprintf (stream, _("  addr16      Assume 16bit address size\n"));
  11865.   fprintf (stream, _("  data32      Assume 32bit data size\n"));
  11866.   fprintf (stream, _("  data16      Assume 16bit data size\n"));
  11867.   fprintf (stream, _("  suffix      Always display instruction suffix in AT&T syntax\n"));
  11868. }
  11869.  
  11870. /* Bad opcode.  */
  11871. static const struct dis386 bad_opcode = { "(bad)", { XX } };
  11872.  
  11873. /* Get a pointer to struct dis386 with a valid name.  */
  11874.  
  11875. static const struct dis386 *
  11876. get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
  11877. {
  11878.   int vindex, vex_table_index;
  11879.  
  11880.   if (dp->name != NULL)
  11881.     return dp;
  11882.  
  11883.   switch (dp->op[0].bytemode)
  11884.     {
  11885.     case USE_REG_TABLE:
  11886.       dp = &reg_table[dp->op[1].bytemode][modrm.reg];
  11887.       break;
  11888.  
  11889.     case USE_MOD_TABLE:
  11890.       vindex = modrm.mod == 0x3 ? 1 : 0;
  11891.       dp = &mod_table[dp->op[1].bytemode][vindex];
  11892.       break;
  11893.  
  11894.     case USE_RM_TABLE:
  11895.       dp = &rm_table[dp->op[1].bytemode][modrm.rm];
  11896.       break;
  11897.  
  11898.     case USE_PREFIX_TABLE:
  11899.       if (need_vex)
  11900.         {
  11901.           /* The prefix in VEX is implicit.  */
  11902.           switch (vex.prefix)
  11903.             {
  11904.             case 0:
  11905.               vindex = 0;
  11906.               break;
  11907.             case REPE_PREFIX_OPCODE:
  11908.               vindex = 1;
  11909.               break;
  11910.             case DATA_PREFIX_OPCODE:
  11911.               vindex = 2;
  11912.               break;
  11913.             case REPNE_PREFIX_OPCODE:
  11914.               vindex = 3;
  11915.               break;
  11916.             default:
  11917.               abort ();
  11918.               break;
  11919.             }
  11920.         }
  11921.       else
  11922.         {
  11923.           vindex = 0;
  11924.           used_prefixes |= (prefixes & PREFIX_REPZ);
  11925.           if (prefixes & PREFIX_REPZ)
  11926.             {
  11927.               vindex = 1;
  11928.               all_prefixes[last_repz_prefix] = 0;
  11929.             }
  11930.           else
  11931.             {
  11932.               /* We should check PREFIX_REPNZ and PREFIX_REPZ before
  11933.                  PREFIX_DATA.  */
  11934.               used_prefixes |= (prefixes & PREFIX_REPNZ);
  11935.               if (prefixes & PREFIX_REPNZ)
  11936.                 {
  11937.                   vindex = 3;
  11938.                   all_prefixes[last_repnz_prefix] = 0;
  11939.                 }
  11940.               else
  11941.                 {
  11942.                   used_prefixes |= (prefixes & PREFIX_DATA);
  11943.                   if (prefixes & PREFIX_DATA)
  11944.                     {
  11945.                       vindex = 2;
  11946.                       all_prefixes[last_data_prefix] = 0;
  11947.                     }
  11948.                 }
  11949.             }
  11950.         }
  11951.       dp = &prefix_table[dp->op[1].bytemode][vindex];
  11952.       break;
  11953.  
  11954.     case USE_X86_64_TABLE:
  11955.       vindex = address_mode == mode_64bit ? 1 : 0;
  11956.       dp = &x86_64_table[dp->op[1].bytemode][vindex];
  11957.       break;
  11958.  
  11959.     case USE_3BYTE_TABLE:
  11960.       FETCH_DATA (info, codep + 2);
  11961.       vindex = *codep++;
  11962.       dp = &three_byte_table[dp->op[1].bytemode][vindex];
  11963.       modrm.mod = (*codep >> 6) & 3;
  11964.       modrm.reg = (*codep >> 3) & 7;
  11965.       modrm.rm = *codep & 7;
  11966.       break;
  11967.  
  11968.     case USE_VEX_LEN_TABLE:
  11969.       if (!need_vex)
  11970.         abort ();
  11971.  
  11972.       switch (vex.length)
  11973.         {
  11974.         case 128:
  11975.           vindex = 0;
  11976.           break;
  11977.         case 256:
  11978.           vindex = 1;
  11979.           break;
  11980.         default:
  11981.           abort ();
  11982.           break;
  11983.         }
  11984.  
  11985.       dp = &vex_len_table[dp->op[1].bytemode][vindex];
  11986.       break;
  11987.  
  11988.     case USE_XOP_8F_TABLE:
  11989.       FETCH_DATA (info, codep + 3);
  11990.       /* All bits in the REX prefix are ignored.  */
  11991.       rex_ignored = rex;
  11992.       rex = ~(*codep >> 5) & 0x7;
  11993.  
  11994.       /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm".  */
  11995.       switch ((*codep & 0x1f))
  11996.         {
  11997.         default:
  11998.           dp = &bad_opcode;
  11999.           return dp;
  12000.         case 0x8:
  12001.           vex_table_index = XOP_08;
  12002.           break;
  12003.         case 0x9:
  12004.           vex_table_index = XOP_09;
  12005.           break;
  12006.         case 0xa:
  12007.           vex_table_index = XOP_0A;
  12008.           break;
  12009.         }
  12010.       codep++;
  12011.       vex.w = *codep & 0x80;
  12012.       if (vex.w && address_mode == mode_64bit)
  12013.         rex |= REX_W;
  12014.  
  12015.       vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12016.       if (address_mode != mode_64bit
  12017.           && vex.register_specifier > 0x7)
  12018.         {
  12019.           dp = &bad_opcode;
  12020.           return dp;
  12021.         }
  12022.  
  12023.       vex.length = (*codep & 0x4) ? 256 : 128;
  12024.       switch ((*codep & 0x3))
  12025.         {
  12026.         case 0:
  12027.           vex.prefix = 0;
  12028.           break;
  12029.         case 1:
  12030.           vex.prefix = DATA_PREFIX_OPCODE;
  12031.           break;
  12032.         case 2:
  12033.           vex.prefix = REPE_PREFIX_OPCODE;
  12034.           break;
  12035.         case 3:
  12036.           vex.prefix = REPNE_PREFIX_OPCODE;
  12037.           break;
  12038.         }
  12039.       need_vex = 1;
  12040.       need_vex_reg = 1;
  12041.       codep++;
  12042.       vindex = *codep++;
  12043.       dp = &xop_table[vex_table_index][vindex];
  12044.  
  12045.       FETCH_DATA (info, codep + 1);
  12046.       modrm.mod = (*codep >> 6) & 3;
  12047.       modrm.reg = (*codep >> 3) & 7;
  12048.       modrm.rm = *codep & 7;
  12049.       break;
  12050.  
  12051.     case USE_VEX_C4_TABLE:
  12052.       /* VEX prefix.  */
  12053.       FETCH_DATA (info, codep + 3);
  12054.       /* All bits in the REX prefix are ignored.  */
  12055.       rex_ignored = rex;
  12056.       rex = ~(*codep >> 5) & 0x7;
  12057.       switch ((*codep & 0x1f))
  12058.         {
  12059.         default:
  12060.           dp = &bad_opcode;
  12061.           return dp;
  12062.         case 0x1:
  12063.           vex_table_index = VEX_0F;
  12064.           break;
  12065.         case 0x2:
  12066.           vex_table_index = VEX_0F38;
  12067.           break;
  12068.         case 0x3:
  12069.           vex_table_index = VEX_0F3A;
  12070.           break;
  12071.         }
  12072.       codep++;
  12073.       vex.w = *codep & 0x80;
  12074.       if (vex.w && address_mode == mode_64bit)
  12075.         rex |= REX_W;
  12076.  
  12077.       vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12078.       if (address_mode != mode_64bit
  12079.           && vex.register_specifier > 0x7)
  12080.         {
  12081.           dp = &bad_opcode;
  12082.           return dp;
  12083.         }
  12084.  
  12085.       vex.length = (*codep & 0x4) ? 256 : 128;
  12086.       switch ((*codep & 0x3))
  12087.         {
  12088.         case 0:
  12089.           vex.prefix = 0;
  12090.           break;
  12091.         case 1:
  12092.           vex.prefix = DATA_PREFIX_OPCODE;
  12093.           break;
  12094.         case 2:
  12095.           vex.prefix = REPE_PREFIX_OPCODE;
  12096.           break;
  12097.         case 3:
  12098.           vex.prefix = REPNE_PREFIX_OPCODE;
  12099.           break;
  12100.         }
  12101.       need_vex = 1;
  12102.       need_vex_reg = 1;
  12103.       codep++;
  12104.       vindex = *codep++;
  12105.       dp = &vex_table[vex_table_index][vindex];
  12106.       /* There is no MODRM byte for VEX [82|77].  */
  12107.       if (vindex != 0x77 && vindex != 0x82)
  12108.         {
  12109.           FETCH_DATA (info, codep + 1);
  12110.           modrm.mod = (*codep >> 6) & 3;
  12111.           modrm.reg = (*codep >> 3) & 7;
  12112.           modrm.rm = *codep & 7;
  12113.         }
  12114.       break;
  12115.  
  12116.     case USE_VEX_C5_TABLE:
  12117.       /* VEX prefix.  */
  12118.       FETCH_DATA (info, codep + 2);
  12119.       /* All bits in the REX prefix are ignored.  */
  12120.       rex_ignored = rex;
  12121.       rex = (*codep & 0x80) ? 0 : REX_R;
  12122.  
  12123.       vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12124.       if (address_mode != mode_64bit
  12125.           && vex.register_specifier > 0x7)
  12126.         {
  12127.           dp = &bad_opcode;
  12128.           return dp;
  12129.         }
  12130.  
  12131.       vex.w = 0;
  12132.  
  12133.       vex.length = (*codep & 0x4) ? 256 : 128;
  12134.       switch ((*codep & 0x3))
  12135.         {
  12136.         case 0:
  12137.           vex.prefix = 0;
  12138.           break;
  12139.         case 1:
  12140.           vex.prefix = DATA_PREFIX_OPCODE;
  12141.           break;
  12142.         case 2:
  12143.           vex.prefix = REPE_PREFIX_OPCODE;
  12144.           break;
  12145.         case 3:
  12146.           vex.prefix = REPNE_PREFIX_OPCODE;
  12147.           break;
  12148.         }
  12149.       need_vex = 1;
  12150.       need_vex_reg = 1;
  12151.       codep++;
  12152.       vindex = *codep++;
  12153.       dp = &vex_table[dp->op[1].bytemode][vindex];
  12154.       /* There is no MODRM byte for VEX [82|77].  */
  12155.       if (vindex != 0x77 && vindex != 0x82)
  12156.         {
  12157.           FETCH_DATA (info, codep + 1);
  12158.           modrm.mod = (*codep >> 6) & 3;
  12159.           modrm.reg = (*codep >> 3) & 7;
  12160.           modrm.rm = *codep & 7;
  12161.         }
  12162.       break;
  12163.  
  12164.     case USE_VEX_W_TABLE:
  12165.       if (!need_vex)
  12166.         abort ();
  12167.  
  12168.       dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
  12169.       break;
  12170.  
  12171.     case USE_EVEX_TABLE:
  12172.       two_source_ops = 0;
  12173.       /* EVEX prefix.  */
  12174.       vex.evex = 1;
  12175.       FETCH_DATA (info, codep + 4);
  12176.       /* All bits in the REX prefix are ignored.  */
  12177.       rex_ignored = rex;
  12178.       /* The first byte after 0x62.  */
  12179.       rex = ~(*codep >> 5) & 0x7;
  12180.       vex.r = *codep & 0x10;
  12181.       switch ((*codep & 0xf))
  12182.         {
  12183.         default:
  12184.           return &bad_opcode;
  12185.         case 0x1:
  12186.           vex_table_index = EVEX_0F;
  12187.           break;
  12188.         case 0x2:
  12189.           vex_table_index = EVEX_0F38;
  12190.           break;
  12191.         case 0x3:
  12192.           vex_table_index = EVEX_0F3A;
  12193.           break;
  12194.         }
  12195.  
  12196.       /* The second byte after 0x62.  */
  12197.       codep++;
  12198.       vex.w = *codep & 0x80;
  12199.       if (vex.w && address_mode == mode_64bit)
  12200.         rex |= REX_W;
  12201.  
  12202.       vex.register_specifier = (~(*codep >> 3)) & 0xf;
  12203.       if (address_mode != mode_64bit)
  12204.         {
  12205.           /* In 16/32-bit mode silently ignore following bits.  */
  12206.           rex &= ~REX_B;
  12207.           vex.r = 1;
  12208.           vex.v = 1;
  12209.           vex.register_specifier &= 0x7;
  12210.         }
  12211.  
  12212.       /* The U bit.  */
  12213.       if (!(*codep & 0x4))
  12214.         return &bad_opcode;
  12215.  
  12216.       switch ((*codep & 0x3))
  12217.         {
  12218.         case 0:
  12219.           vex.prefix = 0;
  12220.           break;
  12221.         case 1:
  12222.           vex.prefix = DATA_PREFIX_OPCODE;
  12223.           break;
  12224.         case 2:
  12225.           vex.prefix = REPE_PREFIX_OPCODE;
  12226.           break;
  12227.         case 3:
  12228.           vex.prefix = REPNE_PREFIX_OPCODE;
  12229.           break;
  12230.         }
  12231.  
  12232.       /* The third byte after 0x62.  */
  12233.       codep++;
  12234.  
  12235.       /* Remember the static rounding bits.  */
  12236.       vex.ll = (*codep >> 5) & 3;
  12237.       vex.b = (*codep & 0x10) != 0;
  12238.  
  12239.       vex.v = *codep & 0x8;
  12240.       vex.mask_register_specifier = *codep & 0x7;
  12241.       vex.zeroing = *codep & 0x80;
  12242.  
  12243.       need_vex = 1;
  12244.       need_vex_reg = 1;
  12245.       codep++;
  12246.       vindex = *codep++;
  12247.       dp = &evex_table[vex_table_index][vindex];
  12248.       FETCH_DATA (info, codep + 1);
  12249.       modrm.mod = (*codep >> 6) & 3;
  12250.       modrm.reg = (*codep >> 3) & 7;
  12251.       modrm.rm = *codep & 7;
  12252.  
  12253.       /* Set vector length.  */
  12254.       if (modrm.mod == 3 && vex.b)
  12255.         vex.length = 512;
  12256.       else
  12257.         {
  12258.           switch (vex.ll)
  12259.             {
  12260.             case 0x0:
  12261.               vex.length = 128;
  12262.               break;
  12263.             case 0x1:
  12264.               vex.length = 256;
  12265.               break;
  12266.             case 0x2:
  12267.               vex.length = 512;
  12268.               break;
  12269.             default:
  12270.               return &bad_opcode;
  12271.             }
  12272.         }
  12273.       break;
  12274.  
  12275.     case 0:
  12276.       dp = &bad_opcode;
  12277.       break;
  12278.  
  12279.     default:
  12280.       abort ();
  12281.     }
  12282.  
  12283.   if (dp->name != NULL)
  12284.     return dp;
  12285.   else
  12286.     return get_valid_dis386 (dp, info);
  12287. }
  12288.  
  12289. static void
  12290. get_sib (disassemble_info *info, int sizeflag)
  12291. {
  12292.   /* If modrm.mod == 3, operand must be register.  */
  12293.   if (need_modrm
  12294.       && ((sizeflag & AFLAG) || address_mode == mode_64bit)
  12295.       && modrm.mod != 3
  12296.       && modrm.rm == 4)
  12297.     {
  12298.       FETCH_DATA (info, codep + 2);
  12299.       sib.index = (codep [1] >> 3) & 7;
  12300.       sib.scale = (codep [1] >> 6) & 3;
  12301.       sib.base = codep [1] & 7;
  12302.     }
  12303. }
  12304.  
  12305. static int
  12306. print_insn (bfd_vma pc, disassemble_info *info)
  12307. {
  12308.   const struct dis386 *dp;
  12309.   int i;
  12310.   char *op_txt[MAX_OPERANDS];
  12311.   int needcomma;
  12312.   int sizeflag;
  12313.   const char *p;
  12314.   struct dis_private priv;
  12315.   int prefix_length;
  12316.   int default_prefixes;
  12317.  
  12318.   priv.orig_sizeflag = AFLAG | DFLAG;
  12319.   if ((info->mach & bfd_mach_i386_i386) != 0)
  12320.     address_mode = mode_32bit;
  12321.   else if (info->mach == bfd_mach_i386_i8086)
  12322.     {
  12323.       address_mode = mode_16bit;
  12324.       priv.orig_sizeflag = 0;
  12325.     }
  12326.   else
  12327.     address_mode = mode_64bit;
  12328.  
  12329.   if (intel_syntax == (char) -1)
  12330.     intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
  12331.  
  12332.   for (p = info->disassembler_options; p != NULL; )
  12333.     {
  12334.       if (CONST_STRNEQ (p, "x86-64"))
  12335.         {
  12336.           address_mode = mode_64bit;
  12337.           priv.orig_sizeflag = AFLAG | DFLAG;
  12338.         }
  12339.       else if (CONST_STRNEQ (p, "i386"))
  12340.         {
  12341.           address_mode = mode_32bit;
  12342.           priv.orig_sizeflag = AFLAG | DFLAG;
  12343.         }
  12344.       else if (CONST_STRNEQ (p, "i8086"))
  12345.         {
  12346.           address_mode = mode_16bit;
  12347.           priv.orig_sizeflag = 0;
  12348.         }
  12349.       else if (CONST_STRNEQ (p, "intel"))
  12350.         {
  12351.           intel_syntax = 1;
  12352.           if (CONST_STRNEQ (p + 5, "-mnemonic"))
  12353.             intel_mnemonic = 1;
  12354.         }
  12355.       else if (CONST_STRNEQ (p, "att"))
  12356.         {
  12357.           intel_syntax = 0;
  12358.           if (CONST_STRNEQ (p + 3, "-mnemonic"))
  12359.             intel_mnemonic = 0;
  12360.         }
  12361.       else if (CONST_STRNEQ (p, "addr"))
  12362.         {
  12363.           if (address_mode == mode_64bit)
  12364.             {
  12365.               if (p[4] == '3' && p[5] == '2')
  12366.                 priv.orig_sizeflag &= ~AFLAG;
  12367.               else if (p[4] == '6' && p[5] == '4')
  12368.                 priv.orig_sizeflag |= AFLAG;
  12369.             }
  12370.           else
  12371.             {
  12372.               if (p[4] == '1' && p[5] == '6')
  12373.                 priv.orig_sizeflag &= ~AFLAG;
  12374.               else if (p[4] == '3' && p[5] == '2')
  12375.                 priv.orig_sizeflag |= AFLAG;
  12376.             }
  12377.         }
  12378.       else if (CONST_STRNEQ (p, "data"))
  12379.         {
  12380.           if (p[4] == '1' && p[5] == '6')
  12381.             priv.orig_sizeflag &= ~DFLAG;
  12382.           else if (p[4] == '3' && p[5] == '2')
  12383.             priv.orig_sizeflag |= DFLAG;
  12384.         }
  12385.       else if (CONST_STRNEQ (p, "suffix"))
  12386.         priv.orig_sizeflag |= SUFFIX_ALWAYS;
  12387.  
  12388.       p = strchr (p, ',');
  12389.       if (p != NULL)
  12390.         p++;
  12391.     }
  12392.  
  12393.   if (intel_syntax)
  12394.     {
  12395.       names64 = intel_names64;
  12396.       names32 = intel_names32;
  12397.       names16 = intel_names16;
  12398.       names8 = intel_names8;
  12399.       names8rex = intel_names8rex;
  12400.       names_seg = intel_names_seg;
  12401.       names_mm = intel_names_mm;
  12402.       names_bnd = intel_names_bnd;
  12403.       names_xmm = intel_names_xmm;
  12404.       names_ymm = intel_names_ymm;
  12405.       names_zmm = intel_names_zmm;
  12406.       index64 = intel_index64;
  12407.       index32 = intel_index32;
  12408.       names_mask = intel_names_mask;
  12409.       index16 = intel_index16;
  12410.       open_char = '[';
  12411.       close_char = ']';
  12412.       separator_char = '+';
  12413.       scale_char = '*';
  12414.     }
  12415.   else
  12416.     {
  12417.       names64 = att_names64;
  12418.       names32 = att_names32;
  12419.       names16 = att_names16;
  12420.       names8 = att_names8;
  12421.       names8rex = att_names8rex;
  12422.       names_seg = att_names_seg;
  12423.       names_mm = att_names_mm;
  12424.       names_bnd = att_names_bnd;
  12425.       names_xmm = att_names_xmm;
  12426.       names_ymm = att_names_ymm;
  12427.       names_zmm = att_names_zmm;
  12428.       index64 = att_index64;
  12429.       index32 = att_index32;
  12430.       names_mask = att_names_mask;
  12431.       index16 = att_index16;
  12432.       open_char = '(';
  12433.       close_char =  ')';
  12434.       separator_char = ',';
  12435.       scale_char = ',';
  12436.     }
  12437.  
  12438.   /* The output looks better if we put 7 bytes on a line, since that
  12439.      puts most long word instructions on a single line.  Use 8 bytes
  12440.      for Intel L1OM.  */
  12441.   if ((info->mach & bfd_mach_l1om) != 0)
  12442.     info->bytes_per_line = 8;
  12443.   else
  12444.     info->bytes_per_line = 7;
  12445.  
  12446.   info->private_data = &priv;
  12447.   priv.max_fetched = priv.the_buffer;
  12448.   priv.insn_start = pc;
  12449.  
  12450.   obuf[0] = 0;
  12451.   for (i = 0; i < MAX_OPERANDS; ++i)
  12452.     {
  12453.       op_out[i][0] = 0;
  12454.       op_index[i] = -1;
  12455.     }
  12456.  
  12457.   the_info = info;
  12458.   start_pc = pc;
  12459.   start_codep = priv.the_buffer;
  12460.   codep = priv.the_buffer;
  12461.  
  12462.   if (setjmp (priv.bailout) != 0)
  12463.     {
  12464.       const char *name;
  12465.  
  12466.       /* Getting here means we tried for data but didn't get it.  That
  12467.          means we have an incomplete instruction of some sort.  Just
  12468.          print the first byte as a prefix or a .byte pseudo-op.  */
  12469.       if (codep > priv.the_buffer)
  12470.         {
  12471.           name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
  12472.           if (name != NULL)
  12473.             (*info->fprintf_func) (info->stream, "%s", name);
  12474.           else
  12475.             {
  12476.               /* Just print the first byte as a .byte instruction.  */
  12477.               (*info->fprintf_func) (info->stream, ".byte 0x%x",
  12478.                                      (unsigned int) priv.the_buffer[0]);
  12479.             }
  12480.  
  12481.           return 1;
  12482.         }
  12483.  
  12484.       return -1;
  12485.     }
  12486.  
  12487.   obufp = obuf;
  12488.   sizeflag = priv.orig_sizeflag;
  12489.  
  12490.   if (!ckprefix () || rex_used)
  12491.     {
  12492.       /* Too many prefixes or unused REX prefixes.  */
  12493.       for (i = 0;
  12494.            i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
  12495.            i++)
  12496.         (*info->fprintf_func) (info->stream, "%s%s",
  12497.                                i == 0 ? "" : " ",
  12498.                                prefix_name (all_prefixes[i], sizeflag));
  12499.       return i;
  12500.     }
  12501.  
  12502.   insn_codep = codep;
  12503.  
  12504.   FETCH_DATA (info, codep + 1);
  12505.   two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
  12506.  
  12507.   if (((prefixes & PREFIX_FWAIT)
  12508.        && ((*codep < 0xd8) || (*codep > 0xdf))))
  12509.     {
  12510.       (*info->fprintf_func) (info->stream, "fwait");
  12511.       return 1;
  12512.     }
  12513.  
  12514.   if (*codep == 0x0f)
  12515.     {
  12516.       unsigned char threebyte;
  12517.       FETCH_DATA (info, codep + 2);
  12518.       threebyte = *++codep;
  12519.       dp = &dis386_twobyte[threebyte];
  12520.       need_modrm = twobyte_has_modrm[*codep];
  12521.       codep++;
  12522.     }
  12523.   else
  12524.     {
  12525.       dp = &dis386[*codep];
  12526.       need_modrm = onebyte_has_modrm[*codep];
  12527.       codep++;
  12528.     }
  12529.  
  12530.   if ((prefixes & PREFIX_REPZ))
  12531.     used_prefixes |= PREFIX_REPZ;
  12532.   if ((prefixes & PREFIX_REPNZ))
  12533.     used_prefixes |= PREFIX_REPNZ;
  12534.   if ((prefixes & PREFIX_LOCK))
  12535.     used_prefixes |= PREFIX_LOCK;
  12536.  
  12537.   default_prefixes = 0;
  12538.   if (prefixes & PREFIX_ADDR)
  12539.     {
  12540.       sizeflag ^= AFLAG;
  12541.       if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
  12542.         {
  12543.           if ((sizeflag & AFLAG) || address_mode == mode_64bit)
  12544.             all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
  12545.           else
  12546.             all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
  12547.           default_prefixes |= PREFIX_ADDR;
  12548.         }
  12549.     }
  12550.  
  12551.   if ((prefixes & PREFIX_DATA))
  12552.     {
  12553.       sizeflag ^= DFLAG;
  12554.       if (dp->op[2].bytemode == cond_jump_mode
  12555.           && dp->op[0].bytemode == v_mode
  12556.           && !intel_syntax)
  12557.         {
  12558.           if (sizeflag & DFLAG)
  12559.             all_prefixes[last_data_prefix] = DATA32_PREFIX;
  12560.           else
  12561.             all_prefixes[last_data_prefix] = DATA16_PREFIX;
  12562.           default_prefixes |= PREFIX_DATA;
  12563.         }
  12564.       else if (rex & REX_W)
  12565.         {
  12566.           /* REX_W will override PREFIX_DATA.  */
  12567.           default_prefixes |= PREFIX_DATA;
  12568.         }
  12569.     }
  12570.  
  12571.   if (need_modrm)
  12572.     {
  12573.       FETCH_DATA (info, codep + 1);
  12574.       modrm.mod = (*codep >> 6) & 3;
  12575.       modrm.reg = (*codep >> 3) & 7;
  12576.       modrm.rm = *codep & 7;
  12577.     }
  12578.  
  12579.   need_vex = 0;
  12580.   need_vex_reg = 0;
  12581.   vex_w_done = 0;
  12582.   vex.evex = 0;
  12583.  
  12584.   if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
  12585.     {
  12586.       get_sib (info, sizeflag);
  12587.       dofloat (sizeflag);
  12588.     }
  12589.   else
  12590.     {
  12591.       dp = get_valid_dis386 (dp, info);
  12592.       if (dp != NULL && putop (dp->name, sizeflag) == 0)
  12593.         {
  12594.           get_sib (info, sizeflag);
  12595.           for (i = 0; i < MAX_OPERANDS; ++i)
  12596.             {
  12597.               obufp = op_out[i];
  12598.               op_ad = MAX_OPERANDS - 1 - i;
  12599.               if (dp->op[i].rtn)
  12600.                 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
  12601.               /* For EVEX instruction after the last operand masking
  12602.                  should be printed.  */
  12603.               if (i == 0 && vex.evex)
  12604.                 {
  12605.                   /* Don't print {%k0}.  */
  12606.                   if (vex.mask_register_specifier)
  12607.                     {
  12608.                       oappend ("{");
  12609.                       oappend (names_mask[vex.mask_register_specifier]);
  12610.                       oappend ("}");
  12611.                     }
  12612.                   if (vex.zeroing)
  12613.                     oappend ("{z}");
  12614.                 }
  12615.             }
  12616.         }
  12617.     }
  12618.  
  12619.   /* See if any prefixes were not used.  If so, print the first one
  12620.      separately.  If we don't do this, we'll wind up printing an
  12621.      instruction stream which does not precisely correspond to the
  12622.      bytes we are disassembling.  */
  12623.   if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
  12624.     {
  12625.       for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
  12626.         if (all_prefixes[i])
  12627.           {
  12628.             const char *name;
  12629.             name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
  12630.             if (name == NULL)
  12631.               name = INTERNAL_DISASSEMBLER_ERROR;
  12632.             (*info->fprintf_func) (info->stream, "%s", name);
  12633.             return 1;
  12634.           }
  12635.     }
  12636.  
  12637.   /* Check if the REX prefix is used.  */
  12638.   if (rex_ignored == 0 && (rex ^ rex_used) == 0)
  12639.     all_prefixes[last_rex_prefix] = 0;
  12640.  
  12641.   /* Check if the SEG prefix is used.  */
  12642.   if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
  12643.                    | PREFIX_FS | PREFIX_GS)) != 0
  12644.       && (used_prefixes
  12645.           & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
  12646.     all_prefixes[last_seg_prefix] = 0;
  12647.  
  12648.   /* Check if the ADDR prefix is used.  */
  12649.   if ((prefixes & PREFIX_ADDR) != 0
  12650.       && (used_prefixes & PREFIX_ADDR) != 0)
  12651.     all_prefixes[last_addr_prefix] = 0;
  12652.  
  12653.   /* Check if the DATA prefix is used.  */
  12654.   if ((prefixes & PREFIX_DATA) != 0
  12655.       && (used_prefixes & PREFIX_DATA) != 0)
  12656.     all_prefixes[last_data_prefix] = 0;
  12657.  
  12658.   prefix_length = 0;
  12659.   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
  12660.     if (all_prefixes[i])
  12661.       {
  12662.         const char *name;
  12663.         name = prefix_name (all_prefixes[i], sizeflag);
  12664.         if (name == NULL)
  12665.           abort ();
  12666.         prefix_length += strlen (name) + 1;
  12667.         (*info->fprintf_func) (info->stream, "%s ", name);
  12668.       }
  12669.  
  12670.   /* Check maximum code length.  */
  12671.   if ((codep - start_codep) > MAX_CODE_LENGTH)
  12672.     {
  12673.       (*info->fprintf_func) (info->stream, "(bad)");
  12674.       return MAX_CODE_LENGTH;
  12675.     }
  12676.  
  12677.   obufp = mnemonicendp;
  12678.   for (i = strlen (obuf) + prefix_length; i < 6; i++)
  12679.     oappend (" ");
  12680.   oappend (" ");
  12681.   (*info->fprintf_func) (info->stream, "%s", obuf);
  12682.  
  12683.   /* The enter and bound instructions are printed with operands in the same
  12684.      order as the intel book; everything else is printed in reverse order.  */
  12685.   if (intel_syntax || two_source_ops)
  12686.     {
  12687.       bfd_vma riprel;
  12688.  
  12689.       for (i = 0; i < MAX_OPERANDS; ++i)
  12690.         op_txt[i] = op_out[i];
  12691.  
  12692.       for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
  12693.         {
  12694.           op_ad = op_index[i];
  12695.           op_index[i] = op_index[MAX_OPERANDS - 1 - i];
  12696.           op_index[MAX_OPERANDS - 1 - i] = op_ad;
  12697.           riprel = op_riprel[i];
  12698.           op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
  12699.           op_riprel[MAX_OPERANDS - 1 - i] = riprel;
  12700.         }
  12701.     }
  12702.   else
  12703.     {
  12704.       for (i = 0; i < MAX_OPERANDS; ++i)
  12705.         op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
  12706.     }
  12707.  
  12708.   needcomma = 0;
  12709.   for (i = 0; i < MAX_OPERANDS; ++i)
  12710.     if (*op_txt[i])
  12711.       {
  12712.         if (needcomma)
  12713.           (*info->fprintf_func) (info->stream, ",");
  12714.         if (op_index[i] != -1 && !op_riprel[i])
  12715.           (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
  12716.         else
  12717.           (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
  12718.         needcomma = 1;
  12719.       }
  12720.  
  12721.   for (i = 0; i < MAX_OPERANDS; i++)
  12722.     if (op_index[i] != -1 && op_riprel[i])
  12723.       {
  12724.         (*info->fprintf_func) (info->stream, "        # ");
  12725.         (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
  12726.                                                 + op_address[op_index[i]]), info);
  12727.         break;
  12728.       }
  12729.   return codep - priv.the_buffer;
  12730. }
  12731.  
  12732. static const char *float_mem[] = {
  12733.   /* d8 */
  12734.   "fadd{s|}",
  12735.   "fmul{s|}",
  12736.   "fcom{s|}",
  12737.   "fcomp{s|}",
  12738.   "fsub{s|}",
  12739.   "fsubr{s|}",
  12740.   "fdiv{s|}",
  12741.   "fdivr{s|}",
  12742.   /* d9 */
  12743.   "fld{s|}",
  12744.   "(bad)",
  12745.   "fst{s|}",
  12746.   "fstp{s|}",
  12747.   "fldenvIC",
  12748.   "fldcw",
  12749.   "fNstenvIC",
  12750.   "fNstcw",
  12751.   /* da */
  12752.   "fiadd{l|}",
  12753.   "fimul{l|}",
  12754.   "ficom{l|}",
  12755.   "ficomp{l|}",
  12756.   "fisub{l|}",
  12757.   "fisubr{l|}",
  12758.   "fidiv{l|}",
  12759.   "fidivr{l|}",
  12760.   /* db */
  12761.   "fild{l|}",
  12762.   "fisttp{l|}",
  12763.   "fist{l|}",
  12764.   "fistp{l|}",
  12765.   "(bad)",
  12766.   "fld{t||t|}",
  12767.   "(bad)",
  12768.   "fstp{t||t|}",
  12769.   /* dc */
  12770.   "fadd{l|}",
  12771.   "fmul{l|}",
  12772.   "fcom{l|}",
  12773.   "fcomp{l|}",
  12774.   "fsub{l|}",
  12775.   "fsubr{l|}",
  12776.   "fdiv{l|}",
  12777.   "fdivr{l|}",
  12778.   /* dd */
  12779.   "fld{l|}",
  12780.   "fisttp{ll|}",
  12781.   "fst{l||}",
  12782.   "fstp{l|}",
  12783.   "frstorIC",
  12784.   "(bad)",
  12785.   "fNsaveIC",
  12786.   "fNstsw",
  12787.   /* de */
  12788.   "fiadd",
  12789.   "fimul",
  12790.   "ficom",
  12791.   "ficomp",
  12792.   "fisub",
  12793.   "fisubr",
  12794.   "fidiv",
  12795.   "fidivr",
  12796.   /* df */
  12797.   "fild",
  12798.   "fisttp",
  12799.   "fist",
  12800.   "fistp",
  12801.   "fbld",
  12802.   "fild{ll|}",
  12803.   "fbstp",
  12804.   "fistp{ll|}",
  12805. };
  12806.  
  12807. static const unsigned char float_mem_mode[] = {
  12808.   /* d8 */
  12809.   d_mode,
  12810.   d_mode,
  12811.   d_mode,
  12812.   d_mode,
  12813.   d_mode,
  12814.   d_mode,
  12815.   d_mode,
  12816.   d_mode,
  12817.   /* d9 */
  12818.   d_mode,
  12819.   0,
  12820.   d_mode,
  12821.   d_mode,
  12822.   0,
  12823.   w_mode,
  12824.   0,
  12825.   w_mode,
  12826.   /* da */
  12827.   d_mode,
  12828.   d_mode,
  12829.   d_mode,
  12830.   d_mode,
  12831.   d_mode,
  12832.   d_mode,
  12833.   d_mode,
  12834.   d_mode,
  12835.   /* db */
  12836.   d_mode,
  12837.   d_mode,
  12838.   d_mode,
  12839.   d_mode,
  12840.   0,
  12841.   t_mode,
  12842.   0,
  12843.   t_mode,
  12844.   /* dc */
  12845.   q_mode,
  12846.   q_mode,
  12847.   q_mode,
  12848.   q_mode,
  12849.   q_mode,
  12850.   q_mode,
  12851.   q_mode,
  12852.   q_mode,
  12853.   /* dd */
  12854.   q_mode,
  12855.   q_mode,
  12856.   q_mode,
  12857.   q_mode,
  12858.   0,
  12859.   0,
  12860.   0,
  12861.   w_mode,
  12862.   /* de */
  12863.   w_mode,
  12864.   w_mode,
  12865.   w_mode,
  12866.   w_mode,
  12867.   w_mode,
  12868.   w_mode,
  12869.   w_mode,
  12870.   w_mode,
  12871.   /* df */
  12872.   w_mode,
  12873.   w_mode,
  12874.   w_mode,
  12875.   w_mode,
  12876.   t_mode,
  12877.   q_mode,
  12878.   t_mode,
  12879.   q_mode
  12880. };
  12881.  
  12882. #define ST { OP_ST, 0 }
  12883. #define STi { OP_STi, 0 }
  12884.  
  12885. #define FGRPd9_2 NULL, { { NULL, 0 } }
  12886. #define FGRPd9_4 NULL, { { NULL, 1 } }
  12887. #define FGRPd9_5 NULL, { { NULL, 2 } }
  12888. #define FGRPd9_6 NULL, { { NULL, 3 } }
  12889. #define FGRPd9_7 NULL, { { NULL, 4 } }
  12890. #define FGRPda_5 NULL, { { NULL, 5 } }
  12891. #define FGRPdb_4 NULL, { { NULL, 6 } }
  12892. #define FGRPde_3 NULL, { { NULL, 7 } }
  12893. #define FGRPdf_4 NULL, { { NULL, 8 } }
  12894.  
  12895. static const struct dis386 float_reg[][8] = {
  12896.   /* d8 */
  12897.   {
  12898.     { "fadd",   { ST, STi } },
  12899.     { "fmul",   { ST, STi } },
  12900.     { "fcom",   { STi } },
  12901.     { "fcomp",  { STi } },
  12902.     { "fsub",   { ST, STi } },
  12903.     { "fsubr",  { ST, STi } },
  12904.     { "fdiv",   { ST, STi } },
  12905.     { "fdivr",  { ST, STi } },
  12906.   },
  12907.   /* d9 */
  12908.   {
  12909.     { "fld",    { STi } },
  12910.     { "fxch",   { STi } },
  12911.     { FGRPd9_2 },
  12912.     { Bad_Opcode },
  12913.     { FGRPd9_4 },
  12914.     { FGRPd9_5 },
  12915.     { FGRPd9_6 },
  12916.     { FGRPd9_7 },
  12917.   },
  12918.   /* da */
  12919.   {
  12920.     { "fcmovb", { ST, STi } },
  12921.     { "fcmove", { ST, STi } },
  12922.     { "fcmovbe",{ ST, STi } },
  12923.     { "fcmovu", { ST, STi } },
  12924.     { Bad_Opcode },
  12925.     { FGRPda_5 },
  12926.     { Bad_Opcode },
  12927.     { Bad_Opcode },
  12928.   },
  12929.   /* db */
  12930.   {
  12931.     { "fcmovnb",{ ST, STi } },
  12932.     { "fcmovne",{ ST, STi } },
  12933.     { "fcmovnbe",{ ST, STi } },
  12934.     { "fcmovnu",{ ST, STi } },
  12935.     { FGRPdb_4 },
  12936.     { "fucomi", { ST, STi } },
  12937.     { "fcomi",  { ST, STi } },
  12938.     { Bad_Opcode },
  12939.   },
  12940.   /* dc */
  12941.   {
  12942.     { "fadd",   { STi, ST } },
  12943.     { "fmul",   { STi, ST } },
  12944.     { Bad_Opcode },
  12945.     { Bad_Opcode },
  12946.     { "fsub!M", { STi, ST } },
  12947.     { "fsubM",  { STi, ST } },
  12948.     { "fdiv!M", { STi, ST } },
  12949.     { "fdivM",  { STi, ST } },
  12950.   },
  12951.   /* dd */
  12952.   {
  12953.     { "ffree",  { STi } },
  12954.     { Bad_Opcode },
  12955.     { "fst",    { STi } },
  12956.     { "fstp",   { STi } },
  12957.     { "fucom",  { STi } },
  12958.     { "fucomp", { STi } },
  12959.     { Bad_Opcode },
  12960.     { Bad_Opcode },
  12961.   },
  12962.   /* de */
  12963.   {
  12964.     { "faddp",  { STi, ST } },
  12965.     { "fmulp",  { STi, ST } },
  12966.     { Bad_Opcode },
  12967.     { FGRPde_3 },
  12968.     { "fsub!Mp", { STi, ST } },
  12969.     { "fsubMp", { STi, ST } },
  12970.     { "fdiv!Mp", { STi, ST } },
  12971.     { "fdivMp", { STi, ST } },
  12972.   },
  12973.   /* df */
  12974.   {
  12975.     { "ffreep", { STi } },
  12976.     { Bad_Opcode },
  12977.     { Bad_Opcode },
  12978.     { Bad_Opcode },
  12979.     { FGRPdf_4 },
  12980.     { "fucomip", { ST, STi } },
  12981.     { "fcomip", { ST, STi } },
  12982.     { Bad_Opcode },
  12983.   },
  12984. };
  12985.  
  12986. static char *fgrps[][8] = {
  12987.   /* d9_2  0 */
  12988.   {
  12989.     "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  12990.   },
  12991.  
  12992.   /* d9_4  1 */
  12993.   {
  12994.     "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
  12995.   },
  12996.  
  12997.   /* d9_5  2 */
  12998.   {
  12999.     "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
  13000.   },
  13001.  
  13002.   /* d9_6  3 */
  13003.   {
  13004.     "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
  13005.   },
  13006.  
  13007.   /* d9_7  4 */
  13008.   {
  13009.     "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
  13010.   },
  13011.  
  13012.   /* da_5  5 */
  13013.   {
  13014.     "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  13015.   },
  13016.  
  13017.   /* db_4  6 */
  13018.   {
  13019.     "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
  13020.     "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
  13021.   },
  13022.  
  13023.   /* de_3  7 */
  13024.   {
  13025.     "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  13026.   },
  13027.  
  13028.   /* df_4  8 */
  13029.   {
  13030.     "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
  13031.   },
  13032. };
  13033.  
  13034. static void
  13035. swap_operand (void)
  13036. {
  13037.   mnemonicendp[0] = '.';
  13038.   mnemonicendp[1] = 's';
  13039.   mnemonicendp += 2;
  13040. }
  13041.  
  13042. static void
  13043. OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
  13044.                int sizeflag ATTRIBUTE_UNUSED)
  13045. {
  13046.   /* Skip mod/rm byte.  */
  13047.   MODRM_CHECK;
  13048.   codep++;
  13049. }
  13050.  
  13051. static void
  13052. dofloat (int sizeflag)
  13053. {
  13054.   const struct dis386 *dp;
  13055.   unsigned char floatop;
  13056.  
  13057.   floatop = codep[-1];
  13058.  
  13059.   if (modrm.mod != 3)
  13060.     {
  13061.       int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
  13062.  
  13063.       putop (float_mem[fp_indx], sizeflag);
  13064.       obufp = op_out[0];
  13065.       op_ad = 2;
  13066.       OP_E (float_mem_mode[fp_indx], sizeflag);
  13067.       return;
  13068.     }
  13069.   /* Skip mod/rm byte.  */
  13070.   MODRM_CHECK;
  13071.   codep++;
  13072.  
  13073.   dp = &float_reg[floatop - 0xd8][modrm.reg];
  13074.   if (dp->name == NULL)
  13075.     {
  13076.       putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
  13077.  
  13078.       /* Instruction fnstsw is only one with strange arg.  */
  13079.       if (floatop == 0xdf && codep[-1] == 0xe0)
  13080.         strcpy (op_out[0], names16[0]);
  13081.     }
  13082.   else
  13083.     {
  13084.       putop (dp->name, sizeflag);
  13085.  
  13086.       obufp = op_out[0];
  13087.       op_ad = 2;
  13088.       if (dp->op[0].rtn)
  13089.         (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
  13090.  
  13091.       obufp = op_out[1];
  13092.       op_ad = 1;
  13093.       if (dp->op[1].rtn)
  13094.         (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
  13095.     }
  13096. }
  13097.  
  13098. /* Like oappend (below), but S is a string starting with '%'.
  13099.    In Intel syntax, the '%' is elided.  */
  13100. static void
  13101. oappend_maybe_intel (const char *s)
  13102. {
  13103.   oappend (s + intel_syntax);
  13104. }
  13105.  
  13106. static void
  13107. OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  13108. {
  13109.   oappend_maybe_intel ("%st");
  13110. }
  13111.  
  13112. static void
  13113. OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  13114. {
  13115.   sprintf (scratchbuf, "%%st(%d)", modrm.rm);
  13116.   oappend_maybe_intel (scratchbuf);
  13117. }
  13118.  
  13119. /* Capital letters in template are macros.  */
  13120. static int
  13121. putop (const char *in_template, int sizeflag)
  13122. {
  13123.   const char *p;
  13124.   int alt = 0;
  13125.   int cond = 1;
  13126.   unsigned int l = 0, len = 1;
  13127.   char last[4];
  13128.  
  13129. #define SAVE_LAST(c)                    \
  13130.   if (l < len && l < sizeof (last))     \
  13131.     last[l++] = c;                      \
  13132.   else                                  \
  13133.     abort ();
  13134.  
  13135.   for (p = in_template; *p; p++)
  13136.     {
  13137.       switch (*p)
  13138.         {
  13139.         default:
  13140.           *obufp++ = *p;
  13141.           break;
  13142.         case '%':
  13143.           len++;
  13144.           break;
  13145.         case '!':
  13146.           cond = 0;
  13147.           break;
  13148.         case '{':
  13149.           alt = 0;
  13150.           if (intel_syntax)
  13151.             {
  13152.               while (*++p != '|')
  13153.                 if (*p == '}' || *p == '\0')
  13154.                   abort ();
  13155.             }
  13156.           /* Fall through.  */
  13157.         case 'I':
  13158.           alt = 1;
  13159.           continue;
  13160.         case '|':
  13161.           while (*++p != '}')
  13162.             {
  13163.               if (*p == '\0')
  13164.                 abort ();
  13165.             }
  13166.           break;
  13167.         case '}':
  13168.           break;
  13169.         case 'A':
  13170.           if (intel_syntax)
  13171.             break;
  13172.           if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
  13173.             *obufp++ = 'b';
  13174.           break;
  13175.         case 'B':
  13176.           if (l == 0 && len == 1)
  13177.             {
  13178. case_B:
  13179.               if (intel_syntax)
  13180.                 break;
  13181.               if (sizeflag & SUFFIX_ALWAYS)
  13182.                 *obufp++ = 'b';
  13183.             }
  13184.           else
  13185.             {
  13186.               if (l != 1
  13187.                   || len != 2
  13188.                   || last[0] != 'L')
  13189.                 {
  13190.                   SAVE_LAST (*p);
  13191.                   break;
  13192.                 }
  13193.  
  13194.               if (address_mode == mode_64bit
  13195.                   && !(prefixes & PREFIX_ADDR))
  13196.                 {
  13197.                   *obufp++ = 'a';
  13198.                   *obufp++ = 'b';
  13199.                   *obufp++ = 's';
  13200.                 }
  13201.  
  13202.               goto case_B;
  13203.             }
  13204.           break;
  13205.         case 'C':
  13206.           if (intel_syntax && !alt)
  13207.             break;
  13208.           if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
  13209.             {
  13210.               if (sizeflag & DFLAG)
  13211.                 *obufp++ = intel_syntax ? 'd' : 'l';
  13212.               else
  13213.                 *obufp++ = intel_syntax ? 'w' : 's';
  13214.               used_prefixes |= (prefixes & PREFIX_DATA);
  13215.             }
  13216.           break;
  13217.         case 'D':
  13218.           if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
  13219.             break;
  13220.           USED_REX (REX_W);
  13221.           if (modrm.mod == 3)
  13222.             {
  13223.               if (rex & REX_W)
  13224.                 *obufp++ = 'q';
  13225.               else
  13226.                 {
  13227.                   if (sizeflag & DFLAG)
  13228.                     *obufp++ = intel_syntax ? 'd' : 'l';
  13229.                   else
  13230.                     *obufp++ = 'w';
  13231.                   used_prefixes |= (prefixes & PREFIX_DATA);
  13232.                 }
  13233.             }
  13234.           else
  13235.             *obufp++ = 'w';
  13236.           break;
  13237.         case 'E':               /* For jcxz/jecxz */
  13238.           if (address_mode == mode_64bit)
  13239.             {
  13240.               if (sizeflag & AFLAG)
  13241.                 *obufp++ = 'r';
  13242.               else
  13243.                 *obufp++ = 'e';
  13244.             }
  13245.           else
  13246.             if (sizeflag & AFLAG)
  13247.               *obufp++ = 'e';
  13248.           used_prefixes |= (prefixes & PREFIX_ADDR);
  13249.           break;
  13250.         case 'F':
  13251.           if (intel_syntax)
  13252.             break;
  13253.           if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
  13254.             {
  13255.               if (sizeflag & AFLAG)
  13256.                 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
  13257.               else
  13258.                 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
  13259.               used_prefixes |= (prefixes & PREFIX_ADDR);
  13260.             }
  13261.           break;
  13262.         case 'G':
  13263.           if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
  13264.             break;
  13265.           if ((rex & REX_W) || (sizeflag & DFLAG))
  13266.             *obufp++ = 'l';
  13267.           else
  13268.             *obufp++ = 'w';
  13269.           if (!(rex & REX_W))
  13270.             used_prefixes |= (prefixes & PREFIX_DATA);
  13271.           break;
  13272.         case 'H':
  13273.           if (intel_syntax)
  13274.             break;
  13275.           if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
  13276.               || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
  13277.             {
  13278.               used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
  13279.               *obufp++ = ',';
  13280.               *obufp++ = 'p';
  13281.               if (prefixes & PREFIX_DS)
  13282.                 *obufp++ = 't';
  13283.               else
  13284.                 *obufp++ = 'n';
  13285.             }
  13286.           break;
  13287.         case 'J':
  13288.           if (intel_syntax)
  13289.             break;
  13290.           *obufp++ = 'l';
  13291.           break;
  13292.         case 'K':
  13293.           USED_REX (REX_W);
  13294.           if (rex & REX_W)
  13295.             *obufp++ = 'q';
  13296.           else
  13297.             *obufp++ = 'd';
  13298.           break;
  13299.         case 'Z':
  13300.           if (intel_syntax)
  13301.             break;
  13302.           if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
  13303.             {
  13304.               *obufp++ = 'q';
  13305.               break;
  13306.             }
  13307.           /* Fall through.  */
  13308.           goto case_L;
  13309.         case 'L':
  13310.           if (l != 0 || len != 1)
  13311.             {
  13312.               SAVE_LAST (*p);
  13313.               break;
  13314.             }
  13315. case_L:
  13316.           if (intel_syntax)
  13317.             break;
  13318.           if (sizeflag & SUFFIX_ALWAYS)
  13319.             *obufp++ = 'l';
  13320.           break;
  13321.         case 'M':
  13322.           if (intel_mnemonic != cond)
  13323.             *obufp++ = 'r';
  13324.           break;
  13325.         case 'N':
  13326.           if ((prefixes & PREFIX_FWAIT) == 0)
  13327.             *obufp++ = 'n';
  13328.           else
  13329.             used_prefixes |= PREFIX_FWAIT;
  13330.           break;
  13331.         case 'O':
  13332.           USED_REX (REX_W);
  13333.           if (rex & REX_W)
  13334.             *obufp++ = 'o';
  13335.           else if (intel_syntax && (sizeflag & DFLAG))
  13336.             *obufp++ = 'q';
  13337.           else
  13338.             *obufp++ = 'd';
  13339.           if (!(rex & REX_W))
  13340.             used_prefixes |= (prefixes & PREFIX_DATA);
  13341.           break;
  13342.         case 'T':
  13343.           if (!intel_syntax
  13344.               && address_mode == mode_64bit
  13345.               && ((sizeflag & DFLAG) || (rex & REX_W)))
  13346.             {
  13347.               *obufp++ = 'q';
  13348.               break;
  13349.             }
  13350.           /* Fall through.  */
  13351.         case 'P':
  13352.           if (intel_syntax)
  13353.             {
  13354.               if ((rex & REX_W) == 0
  13355.                   && (prefixes & PREFIX_DATA))
  13356.                 {
  13357.                   if ((sizeflag & DFLAG) == 0)
  13358.                     *obufp++ = 'w';
  13359.                    used_prefixes |= (prefixes & PREFIX_DATA);
  13360.                 }
  13361.               break;
  13362.             }
  13363.           if ((prefixes & PREFIX_DATA)
  13364.               || (rex & REX_W)
  13365.               || (sizeflag & SUFFIX_ALWAYS))
  13366.             {
  13367.               USED_REX (REX_W);
  13368.               if (rex & REX_W)
  13369.                 *obufp++ = 'q';
  13370.               else
  13371.                 {
  13372.                    if (sizeflag & DFLAG)
  13373.                       *obufp++ = 'l';
  13374.                    else
  13375.                      *obufp++ = 'w';
  13376.                    used_prefixes |= (prefixes & PREFIX_DATA);
  13377.                 }
  13378.             }
  13379.           break;
  13380.         case 'U':
  13381.           if (intel_syntax)
  13382.             break;
  13383.           if (address_mode == mode_64bit
  13384.               && ((sizeflag & DFLAG) || (rex & REX_W)))
  13385.             {
  13386.               if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
  13387.                 *obufp++ = 'q';
  13388.               break;
  13389.             }
  13390.           /* Fall through.  */
  13391.           goto case_Q;
  13392.         case 'Q':
  13393.           if (l == 0 && len == 1)
  13394.             {
  13395. case_Q:
  13396.               if (intel_syntax && !alt)
  13397.                 break;
  13398.               USED_REX (REX_W);
  13399.               if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
  13400.                 {
  13401.                   if (rex & REX_W)
  13402.                     *obufp++ = 'q';
  13403.                   else
  13404.                     {
  13405.                       if (sizeflag & DFLAG)
  13406.                         *obufp++ = intel_syntax ? 'd' : 'l';
  13407.                       else
  13408.                         *obufp++ = 'w';
  13409.                       used_prefixes |= (prefixes & PREFIX_DATA);
  13410.                     }
  13411.                 }
  13412.             }
  13413.           else
  13414.             {
  13415.               if (l != 1 || len != 2 || last[0] != 'L')
  13416.                 {
  13417.                   SAVE_LAST (*p);
  13418.                   break;
  13419.                 }
  13420.               if (intel_syntax
  13421.                   || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
  13422.                 break;
  13423.               if ((rex & REX_W))
  13424.                 {
  13425.                   USED_REX (REX_W);
  13426.                   *obufp++ = 'q';
  13427.                 }
  13428.               else
  13429.                 *obufp++ = 'l';
  13430.             }
  13431.           break;
  13432.         case 'R':
  13433.           USED_REX (REX_W);
  13434.           if (rex & REX_W)
  13435.             *obufp++ = 'q';
  13436.           else if (sizeflag & DFLAG)
  13437.             {
  13438.               if (intel_syntax)
  13439.                   *obufp++ = 'd';
  13440.               else
  13441.                   *obufp++ = 'l';
  13442.             }
  13443.           else
  13444.             *obufp++ = 'w';
  13445.           if (intel_syntax && !p[1]
  13446.               && ((rex & REX_W) || (sizeflag & DFLAG)))
  13447.             *obufp++ = 'e';
  13448.           if (!(rex & REX_W))
  13449.             used_prefixes |= (prefixes & PREFIX_DATA);
  13450.           break;
  13451.         case 'V':
  13452.           if (l == 0 && len == 1)
  13453.             {
  13454.               if (intel_syntax)
  13455.                 break;
  13456.               if (address_mode == mode_64bit
  13457.                   && ((sizeflag & DFLAG) || (rex & REX_W)))
  13458.                 {
  13459.                   if (sizeflag & SUFFIX_ALWAYS)
  13460.                     *obufp++ = 'q';
  13461.                   break;
  13462.                 }
  13463.             }
  13464.           else
  13465.             {
  13466.               if (l != 1
  13467.                   || len != 2
  13468.                   || last[0] != 'L')
  13469.                 {
  13470.                   SAVE_LAST (*p);
  13471.                   break;
  13472.                 }
  13473.  
  13474.               if (rex & REX_W)
  13475.                 {
  13476.                   *obufp++ = 'a';
  13477.                   *obufp++ = 'b';
  13478.                   *obufp++ = 's';
  13479.                 }
  13480.             }
  13481.           /* Fall through.  */
  13482.           goto case_S;
  13483.         case 'S':
  13484.           if (l == 0 && len == 1)
  13485.             {
  13486. case_S:
  13487.               if (intel_syntax)
  13488.                 break;
  13489.               if (sizeflag & SUFFIX_ALWAYS)
  13490.                 {
  13491.                   if (rex & REX_W)
  13492.                     *obufp++ = 'q';
  13493.                   else
  13494.                     {
  13495.                       if (sizeflag & DFLAG)
  13496.                         *obufp++ = 'l';
  13497.                       else
  13498.                         *obufp++ = 'w';
  13499.                       used_prefixes |= (prefixes & PREFIX_DATA);
  13500.                     }
  13501.                 }
  13502.             }
  13503.           else
  13504.             {
  13505.               if (l != 1
  13506.                   || len != 2
  13507.                   || last[0] != 'L')
  13508.                 {
  13509.                   SAVE_LAST (*p);
  13510.                   break;
  13511.                 }
  13512.  
  13513.               if (address_mode == mode_64bit
  13514.                   && !(prefixes & PREFIX_ADDR))
  13515.                 {
  13516.                   *obufp++ = 'a';
  13517.                   *obufp++ = 'b';
  13518.                   *obufp++ = 's';
  13519.                 }
  13520.  
  13521.               goto case_S;
  13522.             }
  13523.           break;
  13524.         case 'X':
  13525.           if (l != 0 || len != 1)
  13526.             {
  13527.               SAVE_LAST (*p);
  13528.               break;
  13529.             }
  13530.           if (need_vex && vex.prefix)
  13531.             {
  13532.               if (vex.prefix == DATA_PREFIX_OPCODE)
  13533.                 *obufp++ = 'd';
  13534.               else
  13535.                 *obufp++ = 's';
  13536.             }
  13537.           else
  13538.             {
  13539.               if (prefixes & PREFIX_DATA)
  13540.                 *obufp++ = 'd';
  13541.               else
  13542.                 *obufp++ = 's';
  13543.               used_prefixes |= (prefixes & PREFIX_DATA);
  13544.             }
  13545.           break;
  13546.         case 'Y':
  13547.           if (l == 0 && len == 1)
  13548.             {
  13549.               if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
  13550.                 break;
  13551.               if (rex & REX_W)
  13552.                 {
  13553.                   USED_REX (REX_W);
  13554.                   *obufp++ = 'q';
  13555.                 }
  13556.               break;
  13557.             }
  13558.           else
  13559.             {
  13560.               if (l != 1 || len != 2 || last[0] != 'X')
  13561.                 {
  13562.                   SAVE_LAST (*p);
  13563.                   break;
  13564.                 }
  13565.               if (!need_vex)
  13566.                 abort ();
  13567.               if (intel_syntax
  13568.                   || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
  13569.                 break;
  13570.               switch (vex.length)
  13571.                 {
  13572.                 case 128:
  13573.                   *obufp++ = 'x';
  13574.                   break;
  13575.                 case 256:
  13576.                   *obufp++ = 'y';
  13577.                   break;
  13578.                 default:
  13579.                   abort ();
  13580.                 }
  13581.             }
  13582.           break;
  13583.         case 'W':
  13584.           if (l == 0 && len == 1)
  13585.             {
  13586.               /* operand size flag for cwtl, cbtw */
  13587.               USED_REX (REX_W);
  13588.               if (rex & REX_W)
  13589.                 {
  13590.                   if (intel_syntax)
  13591.                     *obufp++ = 'd';
  13592.                   else
  13593.                     *obufp++ = 'l';
  13594.                 }
  13595.               else if (sizeflag & DFLAG)
  13596.                 *obufp++ = 'w';
  13597.               else
  13598.                 *obufp++ = 'b';
  13599.               if (!(rex & REX_W))
  13600.                 used_prefixes |= (prefixes & PREFIX_DATA);
  13601.             }
  13602.           else
  13603.             {
  13604.               if (l != 1
  13605.                   || len != 2
  13606.                   || (last[0] != 'X'
  13607.                       && last[0] != 'L'))
  13608.                 {
  13609.                   SAVE_LAST (*p);
  13610.                   break;
  13611.                 }
  13612.               if (!need_vex)
  13613.                 abort ();
  13614.               if (last[0] == 'X')
  13615.                 *obufp++ = vex.w ? 'd': 's';
  13616.               else
  13617.                 *obufp++ = vex.w ? 'q': 'd';
  13618.             }
  13619.           break;
  13620.         }
  13621.       alt = 0;
  13622.     }
  13623.   *obufp = 0;
  13624.   mnemonicendp = obufp;
  13625.   return 0;
  13626. }
  13627.  
  13628. static void
  13629. oappend (const char *s)
  13630. {
  13631.   obufp = stpcpy (obufp, s);
  13632. }
  13633.  
  13634. static void
  13635. append_seg (void)
  13636. {
  13637.   if (prefixes & PREFIX_CS)
  13638.     {
  13639.       used_prefixes |= PREFIX_CS;
  13640.       oappend_maybe_intel ("%cs:");
  13641.     }
  13642.   if (prefixes & PREFIX_DS)
  13643.     {
  13644.       used_prefixes |= PREFIX_DS;
  13645.       oappend_maybe_intel ("%ds:");
  13646.     }
  13647.   if (prefixes & PREFIX_SS)
  13648.     {
  13649.       used_prefixes |= PREFIX_SS;
  13650.       oappend_maybe_intel ("%ss:");
  13651.     }
  13652.   if (prefixes & PREFIX_ES)
  13653.     {
  13654.       used_prefixes |= PREFIX_ES;
  13655.       oappend_maybe_intel ("%es:");
  13656.     }
  13657.   if (prefixes & PREFIX_FS)
  13658.     {
  13659.       used_prefixes |= PREFIX_FS;
  13660.       oappend_maybe_intel ("%fs:");
  13661.     }
  13662.   if (prefixes & PREFIX_GS)
  13663.     {
  13664.       used_prefixes |= PREFIX_GS;
  13665.       oappend_maybe_intel ("%gs:");
  13666.     }
  13667. }
  13668.  
  13669. static void
  13670. OP_indirE (int bytemode, int sizeflag)
  13671. {
  13672.   if (!intel_syntax)
  13673.     oappend ("*");
  13674.   OP_E (bytemode, sizeflag);
  13675. }
  13676.  
  13677. static void
  13678. print_operand_value (char *buf, int hex, bfd_vma disp)
  13679. {
  13680.   if (address_mode == mode_64bit)
  13681.     {
  13682.       if (hex)
  13683.         {
  13684.           char tmp[30];
  13685.           int i;
  13686.           buf[0] = '0';
  13687.           buf[1] = 'x';
  13688.           sprintf_vma (tmp, disp);
  13689.           for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
  13690.           strcpy (buf + 2, tmp + i);
  13691.         }
  13692.       else
  13693.         {
  13694.           bfd_signed_vma v = disp;
  13695.           char tmp[30];
  13696.           int i;
  13697.           if (v < 0)
  13698.             {
  13699.               *(buf++) = '-';
  13700.               v = -disp;
  13701.               /* Check for possible overflow on 0x8000000000000000.  */
  13702.               if (v < 0)
  13703.                 {
  13704.                   strcpy (buf, "9223372036854775808");
  13705.                   return;
  13706.                 }
  13707.             }
  13708.           if (!v)
  13709.             {
  13710.               strcpy (buf, "0");
  13711.               return;
  13712.             }
  13713.  
  13714.           i = 0;
  13715.           tmp[29] = 0;
  13716.           while (v)
  13717.             {
  13718.               tmp[28 - i] = (v % 10) + '0';
  13719.               v /= 10;
  13720.               i++;
  13721.             }
  13722.           strcpy (buf, tmp + 29 - i);
  13723.         }
  13724.     }
  13725.   else
  13726.     {
  13727.       if (hex)
  13728.         sprintf (buf, "0x%x", (unsigned int) disp);
  13729.       else
  13730.         sprintf (buf, "%d", (int) disp);
  13731.     }
  13732. }
  13733.  
  13734. /* Put DISP in BUF as signed hex number.  */
  13735.  
  13736. static void
  13737. print_displacement (char *buf, bfd_vma disp)
  13738. {
  13739.   bfd_signed_vma val = disp;
  13740.   char tmp[30];
  13741.   int i, j = 0;
  13742.  
  13743.   if (val < 0)
  13744.     {
  13745.       buf[j++] = '-';
  13746.       val = -disp;
  13747.  
  13748.       /* Check for possible overflow.  */
  13749.       if (val < 0)
  13750.         {
  13751.           switch (address_mode)
  13752.             {
  13753.             case mode_64bit:
  13754.               strcpy (buf + j, "0x8000000000000000");
  13755.               break;
  13756.             case mode_32bit:
  13757.               strcpy (buf + j, "0x80000000");
  13758.               break;
  13759.             case mode_16bit:
  13760.               strcpy (buf + j, "0x8000");
  13761.               break;
  13762.             }
  13763.           return;
  13764.         }
  13765.     }
  13766.  
  13767.   buf[j++] = '0';
  13768.   buf[j++] = 'x';
  13769.  
  13770.   sprintf_vma (tmp, (bfd_vma) val);
  13771.   for (i = 0; tmp[i] == '0'; i++)
  13772.     continue;
  13773.   if (tmp[i] == '\0')
  13774.     i--;
  13775.   strcpy (buf + j, tmp + i);
  13776. }
  13777.  
  13778. static void
  13779. intel_operand_size (int bytemode, int sizeflag)
  13780. {
  13781.   if (vex.evex
  13782.       && vex.b
  13783.       && (bytemode == x_mode
  13784.           || bytemode == evex_half_bcst_xmmq_mode))
  13785.     {
  13786.       if (vex.w)
  13787.         oappend ("QWORD PTR ");
  13788.       else
  13789.         oappend ("DWORD PTR ");
  13790.       return;
  13791.     }
  13792.   switch (bytemode)
  13793.     {
  13794.     case b_mode:
  13795.     case b_swap_mode:
  13796.     case dqb_mode:
  13797.       oappend ("BYTE PTR ");
  13798.       break;
  13799.     case w_mode:
  13800.     case dqw_mode:
  13801.       oappend ("WORD PTR ");
  13802.       break;
  13803.     case stack_v_mode:
  13804.       if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
  13805.         {
  13806.           oappend ("QWORD PTR ");
  13807.           break;
  13808.         }
  13809.       /* FALLTHRU */
  13810.     case v_mode:
  13811.     case v_swap_mode:
  13812.     case dq_mode:
  13813.       USED_REX (REX_W);
  13814.       if (rex & REX_W)
  13815.         oappend ("QWORD PTR ");
  13816.       else
  13817.         {
  13818.           if ((sizeflag & DFLAG) || bytemode == dq_mode)
  13819.             oappend ("DWORD PTR ");
  13820.           else
  13821.             oappend ("WORD PTR ");
  13822.           used_prefixes |= (prefixes & PREFIX_DATA);
  13823.         }
  13824.       break;
  13825.     case z_mode:
  13826.       if ((rex & REX_W) || (sizeflag & DFLAG))
  13827.         *obufp++ = 'D';
  13828.       oappend ("WORD PTR ");
  13829.       if (!(rex & REX_W))
  13830.         used_prefixes |= (prefixes & PREFIX_DATA);
  13831.       break;
  13832.     case a_mode:
  13833.       if (sizeflag & DFLAG)
  13834.         oappend ("QWORD PTR ");
  13835.       else
  13836.         oappend ("DWORD PTR ");
  13837.       used_prefixes |= (prefixes & PREFIX_DATA);
  13838.       break;
  13839.     case d_mode:
  13840.     case d_scalar_mode:
  13841.     case d_scalar_swap_mode:
  13842.     case d_swap_mode:
  13843.     case dqd_mode:
  13844.       oappend ("DWORD PTR ");
  13845.       break;
  13846.     case q_mode:
  13847.     case q_scalar_mode:
  13848.     case q_scalar_swap_mode:
  13849.     case q_swap_mode:
  13850.       oappend ("QWORD PTR ");
  13851.       break;
  13852.     case m_mode:
  13853.       if (address_mode == mode_64bit)
  13854.         oappend ("QWORD PTR ");
  13855.       else
  13856.         oappend ("DWORD PTR ");
  13857.       break;
  13858.     case f_mode:
  13859.       if (sizeflag & DFLAG)
  13860.         oappend ("FWORD PTR ");
  13861.       else
  13862.         oappend ("DWORD PTR ");
  13863.       used_prefixes |= (prefixes & PREFIX_DATA);
  13864.       break;
  13865.     case t_mode:
  13866.       oappend ("TBYTE PTR ");
  13867.       break;
  13868.     case x_mode:
  13869.     case x_swap_mode:
  13870.     case evex_x_gscat_mode:
  13871.     case evex_x_nobcst_mode:
  13872.       if (need_vex)
  13873.         {
  13874.           switch (vex.length)
  13875.             {
  13876.             case 128:
  13877.               oappend ("XMMWORD PTR ");
  13878.               break;
  13879.             case 256:
  13880.               oappend ("YMMWORD PTR ");
  13881.               break;
  13882.             case 512:
  13883.               oappend ("ZMMWORD PTR ");
  13884.               break;
  13885.             default:
  13886.               abort ();
  13887.             }
  13888.         }
  13889.       else
  13890.         oappend ("XMMWORD PTR ");
  13891.       break;
  13892.     case xmm_mode:
  13893.       oappend ("XMMWORD PTR ");
  13894.       break;
  13895.     case ymm_mode:
  13896.       oappend ("YMMWORD PTR ");
  13897.       break;
  13898.     case xmmq_mode:
  13899.     case evex_half_bcst_xmmq_mode:
  13900.       if (!need_vex)
  13901.         abort ();
  13902.  
  13903.       switch (vex.length)
  13904.         {
  13905.         case 128:
  13906.           oappend ("QWORD PTR ");
  13907.           break;
  13908.         case 256:
  13909.           oappend ("XMMWORD PTR ");
  13910.           break;
  13911.         case 512:
  13912.           oappend ("YMMWORD PTR ");
  13913.           break;
  13914.         default:
  13915.           abort ();
  13916.         }
  13917.       break;
  13918.     case xmm_mb_mode:
  13919.       if (!need_vex)
  13920.         abort ();
  13921.  
  13922.       switch (vex.length)
  13923.         {
  13924.         case 128:
  13925.         case 256:
  13926.         case 512:
  13927.           oappend ("BYTE PTR ");
  13928.           break;
  13929.         default:
  13930.           abort ();
  13931.         }
  13932.       break;
  13933.     case xmm_mw_mode:
  13934.       if (!need_vex)
  13935.         abort ();
  13936.  
  13937.       switch (vex.length)
  13938.         {
  13939.         case 128:
  13940.         case 256:
  13941.         case 512:
  13942.           oappend ("WORD PTR ");
  13943.           break;
  13944.         default:
  13945.           abort ();
  13946.         }
  13947.       break;
  13948.     case xmm_md_mode:
  13949.       if (!need_vex)
  13950.         abort ();
  13951.  
  13952.       switch (vex.length)
  13953.         {
  13954.         case 128:
  13955.         case 256:
  13956.         case 512:
  13957.           oappend ("DWORD PTR ");
  13958.           break;
  13959.         default:
  13960.           abort ();
  13961.         }
  13962.       break;
  13963.     case xmm_mq_mode:
  13964.       if (!need_vex)
  13965.         abort ();
  13966.  
  13967.       switch (vex.length)
  13968.         {
  13969.         case 128:
  13970.         case 256:
  13971.         case 512:
  13972.           oappend ("QWORD PTR ");
  13973.           break;
  13974.         default:
  13975.           abort ();
  13976.         }
  13977.       break;
  13978.     case xmmdw_mode:
  13979.       if (!need_vex)
  13980.         abort ();
  13981.  
  13982.       switch (vex.length)
  13983.         {
  13984.         case 128:
  13985.           oappend ("WORD PTR ");
  13986.           break;
  13987.         case 256:
  13988.           oappend ("DWORD PTR ");
  13989.           break;
  13990.         case 512:
  13991.           oappend ("QWORD PTR ");
  13992.           break;
  13993.         default:
  13994.           abort ();
  13995.         }
  13996.       break;
  13997.     case xmmqd_mode:
  13998.       if (!need_vex)
  13999.         abort ();
  14000.  
  14001.       switch (vex.length)
  14002.         {
  14003.         case 128:
  14004.           oappend ("DWORD PTR ");
  14005.           break;
  14006.         case 256:
  14007.           oappend ("QWORD PTR ");
  14008.           break;
  14009.         case 512:
  14010.           oappend ("XMMWORD PTR ");
  14011.           break;
  14012.         default:
  14013.           abort ();
  14014.         }
  14015.       break;
  14016.     case ymmq_mode:
  14017.       if (!need_vex)
  14018.         abort ();
  14019.  
  14020.       switch (vex.length)
  14021.         {
  14022.         case 128:
  14023.           oappend ("QWORD PTR ");
  14024.           break;
  14025.         case 256:
  14026.           oappend ("YMMWORD PTR ");
  14027.           break;
  14028.         case 512:
  14029.           oappend ("ZMMWORD PTR ");
  14030.           break;
  14031.         default:
  14032.           abort ();
  14033.         }
  14034.       break;
  14035.     case ymmxmm_mode:
  14036.       if (!need_vex)
  14037.         abort ();
  14038.  
  14039.       switch (vex.length)
  14040.         {
  14041.         case 128:
  14042.         case 256:
  14043.           oappend ("XMMWORD PTR ");
  14044.           break;
  14045.         default:
  14046.           abort ();
  14047.         }
  14048.       break;
  14049.     case o_mode:
  14050.       oappend ("OWORD PTR ");
  14051.       break;
  14052.     case xmm_mdq_mode:
  14053.     case vex_w_dq_mode:
  14054.     case vex_scalar_w_dq_mode:
  14055.       if (!need_vex)
  14056.         abort ();
  14057.  
  14058.       if (vex.w)
  14059.         oappend ("QWORD PTR ");
  14060.       else
  14061.         oappend ("DWORD PTR ");
  14062.       break;
  14063.     case vex_vsib_d_w_dq_mode:
  14064.     case vex_vsib_q_w_dq_mode:
  14065.       if (!need_vex)
  14066.         abort ();
  14067.  
  14068.       if (!vex.evex)
  14069.         {
  14070.           if (vex.w)
  14071.             oappend ("QWORD PTR ");
  14072.           else
  14073.             oappend ("DWORD PTR ");
  14074.         }
  14075.       else
  14076.         {
  14077.           if (vex.length != 512)
  14078.             abort ();
  14079.           oappend ("ZMMWORD PTR ");
  14080.         }
  14081.       break;
  14082.     case mask_mode:
  14083.       if (!need_vex)
  14084.         abort ();
  14085.       /* Currently the only instructions, which allows either mask or
  14086.          memory operand, are AVX512's KMOVW instructions.  They need
  14087.          Word-sized operand.  */
  14088.       if (vex.w || vex.length != 128)
  14089.         abort ();
  14090.       oappend ("WORD PTR ");
  14091.       break;
  14092.     case v_bnd_mode:
  14093.     default:
  14094.       break;
  14095.     }
  14096. }
  14097.  
  14098. static void
  14099. OP_E_register (int bytemode, int sizeflag)
  14100. {
  14101.   int reg = modrm.rm;
  14102.   const char **names;
  14103.  
  14104.   USED_REX (REX_B);
  14105.   if ((rex & REX_B))
  14106.     reg += 8;
  14107.  
  14108.   if ((sizeflag & SUFFIX_ALWAYS)
  14109.       && (bytemode == b_swap_mode || bytemode == v_swap_mode))
  14110.     swap_operand ();
  14111.  
  14112.   switch (bytemode)
  14113.     {
  14114.     case b_mode:
  14115.     case b_swap_mode:
  14116.       USED_REX (0);
  14117.       if (rex)
  14118.         names = names8rex;
  14119.       else
  14120.         names = names8;
  14121.       break;
  14122.     case w_mode:
  14123.       names = names16;
  14124.       break;
  14125.     case d_mode:
  14126.       names = names32;
  14127.       break;
  14128.     case q_mode:
  14129.       names = names64;
  14130.       break;
  14131.     case m_mode:
  14132.     case v_bnd_mode:
  14133.       names = address_mode == mode_64bit ? names64 : names32;
  14134.       break;
  14135.     case bnd_mode:
  14136.       names = names_bnd;
  14137.       break;
  14138.     case stack_v_mode:
  14139.       if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
  14140.         {
  14141.           names = names64;
  14142.           break;
  14143.         }
  14144.       bytemode = v_mode;
  14145.       /* FALLTHRU */
  14146.     case v_mode:
  14147.     case v_swap_mode:
  14148.     case dq_mode:
  14149.     case dqb_mode:
  14150.     case dqd_mode:
  14151.     case dqw_mode:
  14152.       USED_REX (REX_W);
  14153.       if (rex & REX_W)
  14154.         names = names64;
  14155.       else
  14156.         {
  14157.           if ((sizeflag & DFLAG)
  14158.               || (bytemode != v_mode
  14159.                   && bytemode != v_swap_mode))
  14160.             names = names32;
  14161.           else
  14162.             names = names16;
  14163.           used_prefixes |= (prefixes & PREFIX_DATA);
  14164.         }
  14165.       break;
  14166.     case mask_mode:
  14167.       names = names_mask;
  14168.       break;
  14169.     case 0:
  14170.       return;
  14171.     default:
  14172.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  14173.       return;
  14174.     }
  14175.   oappend (names[reg]);
  14176. }
  14177.  
  14178. static void
  14179. OP_E_memory (int bytemode, int sizeflag)
  14180. {
  14181.   bfd_vma disp = 0;
  14182.   int add = (rex & REX_B) ? 8 : 0;
  14183.   int riprel = 0;
  14184.   int shift;
  14185.  
  14186.   if (vex.evex)
  14187.     {
  14188.       /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0.  */
  14189.       if (vex.b
  14190.           && bytemode != x_mode
  14191.           && bytemode != evex_half_bcst_xmmq_mode)
  14192.         {
  14193.           BadOp ();
  14194.           return;
  14195.         }
  14196.       switch (bytemode)
  14197.         {
  14198.         case vex_vsib_d_w_dq_mode:
  14199.         case evex_x_gscat_mode:
  14200.         case xmm_mdq_mode:
  14201.           shift = vex.w ? 3 : 2;
  14202.           break;
  14203.         case vex_vsib_q_w_dq_mode:
  14204.           shift = 3;
  14205.           break;
  14206.         case x_mode:
  14207.         case evex_half_bcst_xmmq_mode:
  14208.           if (vex.b)
  14209.             {
  14210.               shift = vex.w ? 3 : 2;
  14211.               break;
  14212.             }
  14213.           /* Fall through if vex.b == 0.  */
  14214.         case xmmqd_mode:
  14215.         case xmmdw_mode:
  14216.         case xmmq_mode:
  14217.         case ymmq_mode:
  14218.         case evex_x_nobcst_mode:
  14219.         case x_swap_mode:
  14220.           switch (vex.length)
  14221.             {
  14222.             case 128:
  14223.               shift = 4;
  14224.               break;
  14225.             case 256:
  14226.               shift = 5;
  14227.               break;
  14228.             case 512:
  14229.               shift = 6;
  14230.               break;
  14231.             default:
  14232.               abort ();
  14233.             }
  14234.           break;
  14235.         case ymm_mode:
  14236.           shift = 5;
  14237.           break;
  14238.         case xmm_mode:
  14239.           shift = 4;
  14240.           break;
  14241.         case xmm_mq_mode:
  14242.         case q_mode:
  14243.         case q_scalar_mode:
  14244.         case q_swap_mode:
  14245.         case q_scalar_swap_mode:
  14246.           shift = 3;
  14247.           break;
  14248.         case dqd_mode:
  14249.         case xmm_md_mode:
  14250.         case d_mode:
  14251.         case d_scalar_mode:
  14252.         case d_swap_mode:
  14253.         case d_scalar_swap_mode:
  14254.           shift = 2;
  14255.           break;
  14256.         case xmm_mw_mode:
  14257.           shift = 1;
  14258.           break;
  14259.         case xmm_mb_mode:
  14260.           shift = 0;
  14261.           break;
  14262.         default:
  14263.           abort ();
  14264.         }
  14265.       /* Make necessary corrections to shift for modes that need it.
  14266.          For these modes we currently have shift 4, 5 or 6 depending on
  14267.          vex.length (it corresponds to xmmword, ymmword or zmmword
  14268.          operand).  We might want to make it 3, 4 or 5 (e.g. for
  14269.          xmmq_mode).  In case of broadcast enabled the corrections
  14270.          aren't needed, as element size is always 32 or 64 bits.  */
  14271.       if (bytemode == xmmq_mode
  14272.           || (bytemode == evex_half_bcst_xmmq_mode
  14273.               && !vex.b))
  14274.         shift -= 1;
  14275.       else if (bytemode == xmmqd_mode)
  14276.         shift -= 2;
  14277.       else if (bytemode == xmmdw_mode)
  14278.         shift -= 3;
  14279.     }
  14280.   else
  14281.     shift = 0;
  14282.  
  14283.   USED_REX (REX_B);
  14284.   if (intel_syntax)
  14285.     intel_operand_size (bytemode, sizeflag);
  14286.   append_seg ();
  14287.  
  14288.   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
  14289.     {
  14290.       /* 32/64 bit address mode */
  14291.       int havedisp;
  14292.       int havesib;
  14293.       int havebase;
  14294.       int haveindex;
  14295.       int needindex;
  14296.       int base, rbase;
  14297.       int vindex = 0;
  14298.       int scale = 0;
  14299.       int addr32flag = !((sizeflag & AFLAG)
  14300.                          || bytemode == v_bnd_mode
  14301.                          || bytemode == bnd_mode);
  14302.       const char **indexes64 = names64;
  14303.       const char **indexes32 = names32;
  14304.  
  14305.       havesib = 0;
  14306.       havebase = 1;
  14307.       haveindex = 0;
  14308.       base = modrm.rm;
  14309.  
  14310.       if (base == 4)
  14311.         {
  14312.           havesib = 1;
  14313.           vindex = sib.index;
  14314.           USED_REX (REX_X);
  14315.           if (rex & REX_X)
  14316.             vindex += 8;
  14317.           switch (bytemode)
  14318.             {
  14319.             case vex_vsib_d_w_dq_mode:
  14320.             case vex_vsib_q_w_dq_mode:
  14321.               if (!need_vex)
  14322.                 abort ();
  14323.               if (vex.evex)
  14324.                 {
  14325.                   if (!vex.v)
  14326.                     vindex += 16;
  14327.                 }
  14328.  
  14329.               haveindex = 1;
  14330.               switch (vex.length)
  14331.                 {
  14332.                 case 128:
  14333.                   indexes64 = indexes32 = names_xmm;
  14334.                   break;
  14335.                 case 256:
  14336.                   if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
  14337.                     indexes64 = indexes32 = names_ymm;
  14338.                   else
  14339.                     indexes64 = indexes32 = names_xmm;
  14340.                   break;
  14341.                 case 512:
  14342.                   if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
  14343.                     indexes64 = indexes32 = names_zmm;
  14344.                   else
  14345.                     indexes64 = indexes32 = names_ymm;
  14346.                   break;
  14347.                 default:
  14348.                   abort ();
  14349.                 }
  14350.               break;
  14351.             default:
  14352.               haveindex = vindex != 4;
  14353.               break;
  14354.             }
  14355.           scale = sib.scale;
  14356.           base = sib.base;
  14357.           codep++;
  14358.         }
  14359.       rbase = base + add;
  14360.  
  14361.       switch (modrm.mod)
  14362.         {
  14363.         case 0:
  14364.           if (base == 5)
  14365.             {
  14366.               havebase = 0;
  14367.               if (address_mode == mode_64bit && !havesib)
  14368.                 riprel = 1;
  14369.               disp = get32s ();
  14370.             }
  14371.           break;
  14372.         case 1:
  14373.           FETCH_DATA (the_info, codep + 1);
  14374.           disp = *codep++;
  14375.           if ((disp & 0x80) != 0)
  14376.             disp -= 0x100;
  14377.           if (vex.evex && shift > 0)
  14378.             disp <<= shift;
  14379.           break;
  14380.         case 2:
  14381.           disp = get32s ();
  14382.           break;
  14383.         }
  14384.  
  14385.       /* In 32bit mode, we need index register to tell [offset] from
  14386.          [eiz*1 + offset].  */
  14387.       needindex = (havesib
  14388.                    && !havebase
  14389.                    && !haveindex
  14390.                    && address_mode == mode_32bit);
  14391.       havedisp = (havebase
  14392.                   || needindex
  14393.                   || (havesib && (haveindex || scale != 0)));
  14394.  
  14395.       if (!intel_syntax)
  14396.         if (modrm.mod != 0 || base == 5)
  14397.           {
  14398.             if (havedisp || riprel)
  14399.               print_displacement (scratchbuf, disp);
  14400.             else
  14401.               print_operand_value (scratchbuf, 1, disp);
  14402.             oappend (scratchbuf);
  14403.             if (riprel)
  14404.               {
  14405.                 set_op (disp, 1);
  14406.                 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
  14407.               }
  14408.           }
  14409.  
  14410.       if ((havebase || haveindex || riprel)
  14411.           && (bytemode != v_bnd_mode)
  14412.           && (bytemode != bnd_mode))
  14413.         used_prefixes |= PREFIX_ADDR;
  14414.  
  14415.       if (havedisp || (intel_syntax && riprel))
  14416.         {
  14417.           *obufp++ = open_char;
  14418.           if (intel_syntax && riprel)
  14419.             {
  14420.               set_op (disp, 1);
  14421.               oappend (sizeflag & AFLAG ? "rip" : "eip");
  14422.             }
  14423.           *obufp = '\0';
  14424.           if (havebase)
  14425.             oappend (address_mode == mode_64bit && !addr32flag
  14426.                      ? names64[rbase] : names32[rbase]);
  14427.           if (havesib)
  14428.             {
  14429.               /* ESP/RSP won't allow index.  If base isn't ESP/RSP,
  14430.                  print index to tell base + index from base.  */
  14431.               if (scale != 0
  14432.                   || needindex
  14433.                   || haveindex
  14434.                   || (havebase && base != ESP_REG_NUM))
  14435.                 {
  14436.                   if (!intel_syntax || havebase)
  14437.                     {
  14438.                       *obufp++ = separator_char;
  14439.                       *obufp = '\0';
  14440.                     }
  14441.                   if (haveindex)
  14442.                     oappend (address_mode == mode_64bit && !addr32flag
  14443.                              ? indexes64[vindex] : indexes32[vindex]);
  14444.                   else
  14445.                     oappend (address_mode == mode_64bit && !addr32flag
  14446.                              ? index64 : index32);
  14447.  
  14448.                   *obufp++ = scale_char;
  14449.                   *obufp = '\0';
  14450.                   sprintf (scratchbuf, "%d", 1 << scale);
  14451.                   oappend (scratchbuf);
  14452.                 }
  14453.             }
  14454.           if (intel_syntax
  14455.               && (disp || modrm.mod != 0 || base == 5))
  14456.             {
  14457.               if (!havedisp || (bfd_signed_vma) disp >= 0)
  14458.                 {
  14459.                   *obufp++ = '+';
  14460.                   *obufp = '\0';
  14461.                 }
  14462.               else if (modrm.mod != 1 && disp != -disp)
  14463.                 {
  14464.                   *obufp++ = '-';
  14465.                   *obufp = '\0';
  14466.                   disp = - (bfd_signed_vma) disp;
  14467.                 }
  14468.  
  14469.               if (havedisp)
  14470.                 print_displacement (scratchbuf, disp);
  14471.               else
  14472.                 print_operand_value (scratchbuf, 1, disp);
  14473.               oappend (scratchbuf);
  14474.             }
  14475.  
  14476.           *obufp++ = close_char;
  14477.           *obufp = '\0';
  14478.         }
  14479.       else if (intel_syntax)
  14480.         {
  14481.           if (modrm.mod != 0 || base == 5)
  14482.             {
  14483.               if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
  14484.                               | PREFIX_ES | PREFIX_FS | PREFIX_GS))
  14485.                 ;
  14486.               else
  14487.                 {
  14488.                   oappend (names_seg[ds_reg - es_reg]);
  14489.                   oappend (":");
  14490.                 }
  14491.               print_operand_value (scratchbuf, 1, disp);
  14492.               oappend (scratchbuf);
  14493.             }
  14494.         }
  14495.     }
  14496.   else
  14497.     {
  14498.       /* 16 bit address mode */
  14499.       used_prefixes |= prefixes & PREFIX_ADDR;
  14500.       switch (modrm.mod)
  14501.         {
  14502.         case 0:
  14503.           if (modrm.rm == 6)
  14504.             {
  14505.               disp = get16 ();
  14506.               if ((disp & 0x8000) != 0)
  14507.                 disp -= 0x10000;
  14508.             }
  14509.           break;
  14510.         case 1:
  14511.           FETCH_DATA (the_info, codep + 1);
  14512.           disp = *codep++;
  14513.           if ((disp & 0x80) != 0)
  14514.             disp -= 0x100;
  14515.           break;
  14516.         case 2:
  14517.           disp = get16 ();
  14518.           if ((disp & 0x8000) != 0)
  14519.             disp -= 0x10000;
  14520.           break;
  14521.         }
  14522.  
  14523.       if (!intel_syntax)
  14524.         if (modrm.mod != 0 || modrm.rm == 6)
  14525.           {
  14526.             print_displacement (scratchbuf, disp);
  14527.             oappend (scratchbuf);
  14528.           }
  14529.  
  14530.       if (modrm.mod != 0 || modrm.rm != 6)
  14531.         {
  14532.           *obufp++ = open_char;
  14533.           *obufp = '\0';
  14534.           oappend (index16[modrm.rm]);
  14535.           if (intel_syntax
  14536.               && (disp || modrm.mod != 0 || modrm.rm == 6))
  14537.             {
  14538.               if ((bfd_signed_vma) disp >= 0)
  14539.                 {
  14540.                   *obufp++ = '+';
  14541.                   *obufp = '\0';
  14542.                 }
  14543.               else if (modrm.mod != 1)
  14544.                 {
  14545.                   *obufp++ = '-';
  14546.                   *obufp = '\0';
  14547.                   disp = - (bfd_signed_vma) disp;
  14548.                 }
  14549.  
  14550.               print_displacement (scratchbuf, disp);
  14551.               oappend (scratchbuf);
  14552.             }
  14553.  
  14554.           *obufp++ = close_char;
  14555.           *obufp = '\0';
  14556.         }
  14557.       else if (intel_syntax)
  14558.         {
  14559.           if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
  14560.                           | PREFIX_ES | PREFIX_FS | PREFIX_GS))
  14561.             ;
  14562.           else
  14563.             {
  14564.               oappend (names_seg[ds_reg - es_reg]);
  14565.               oappend (":");
  14566.             }
  14567.           print_operand_value (scratchbuf, 1, disp & 0xffff);
  14568.           oappend (scratchbuf);
  14569.         }
  14570.     }
  14571.   if (vex.evex && vex.b
  14572.       && (bytemode == x_mode
  14573.           || bytemode == evex_half_bcst_xmmq_mode))
  14574.     {
  14575.       if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
  14576.         oappend ("{1to8}");
  14577.       else
  14578.         oappend ("{1to16}");
  14579.     }
  14580. }
  14581.  
  14582. static void
  14583. OP_E (int bytemode, int sizeflag)
  14584. {
  14585.   /* Skip mod/rm byte.  */
  14586.   MODRM_CHECK;
  14587.   codep++;
  14588.  
  14589.   if (modrm.mod == 3)
  14590.     OP_E_register (bytemode, sizeflag);
  14591.   else
  14592.     OP_E_memory (bytemode, sizeflag);
  14593. }
  14594.  
  14595. static void
  14596. OP_G (int bytemode, int sizeflag)
  14597. {
  14598.   int add = 0;
  14599.   USED_REX (REX_R);
  14600.   if (rex & REX_R)
  14601.     add += 8;
  14602.   switch (bytemode)
  14603.     {
  14604.     case b_mode:
  14605.       USED_REX (0);
  14606.       if (rex)
  14607.         oappend (names8rex[modrm.reg + add]);
  14608.       else
  14609.         oappend (names8[modrm.reg + add]);
  14610.       break;
  14611.     case w_mode:
  14612.       oappend (names16[modrm.reg + add]);
  14613.       break;
  14614.     case d_mode:
  14615.       oappend (names32[modrm.reg + add]);
  14616.       break;
  14617.     case q_mode:
  14618.       oappend (names64[modrm.reg + add]);
  14619.       break;
  14620.     case bnd_mode:
  14621.       oappend (names_bnd[modrm.reg]);
  14622.       break;
  14623.     case v_mode:
  14624.     case dq_mode:
  14625.     case dqb_mode:
  14626.     case dqd_mode:
  14627.     case dqw_mode:
  14628.       USED_REX (REX_W);
  14629.       if (rex & REX_W)
  14630.         oappend (names64[modrm.reg + add]);
  14631.       else
  14632.         {
  14633.           if ((sizeflag & DFLAG) || bytemode != v_mode)
  14634.             oappend (names32[modrm.reg + add]);
  14635.           else
  14636.             oappend (names16[modrm.reg + add]);
  14637.           used_prefixes |= (prefixes & PREFIX_DATA);
  14638.         }
  14639.       break;
  14640.     case m_mode:
  14641.       if (address_mode == mode_64bit)
  14642.         oappend (names64[modrm.reg + add]);
  14643.       else
  14644.         oappend (names32[modrm.reg + add]);
  14645.       break;
  14646.     case mask_mode:
  14647.       oappend (names_mask[modrm.reg + add]);
  14648.       break;
  14649.     default:
  14650.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  14651.       break;
  14652.     }
  14653. }
  14654.  
  14655. static bfd_vma
  14656. get64 (void)
  14657. {
  14658.   bfd_vma x;
  14659. #ifdef BFD64
  14660.   unsigned int a;
  14661.   unsigned int b;
  14662.  
  14663.   FETCH_DATA (the_info, codep + 8);
  14664.   a = *codep++ & 0xff;
  14665.   a |= (*codep++ & 0xff) << 8;
  14666.   a |= (*codep++ & 0xff) << 16;
  14667.   a |= (*codep++ & 0xff) << 24;
  14668.   b = *codep++ & 0xff;
  14669.   b |= (*codep++ & 0xff) << 8;
  14670.   b |= (*codep++ & 0xff) << 16;
  14671.   b |= (*codep++ & 0xff) << 24;
  14672.   x = a + ((bfd_vma) b << 32);
  14673. #else
  14674.   abort ();
  14675.   x = 0;
  14676. #endif
  14677.   return x;
  14678. }
  14679.  
  14680. static bfd_signed_vma
  14681. get32 (void)
  14682. {
  14683.   bfd_signed_vma x = 0;
  14684.  
  14685.   FETCH_DATA (the_info, codep + 4);
  14686.   x = *codep++ & (bfd_signed_vma) 0xff;
  14687.   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
  14688.   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
  14689.   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
  14690.   return x;
  14691. }
  14692.  
  14693. static bfd_signed_vma
  14694. get32s (void)
  14695. {
  14696.   bfd_signed_vma x = 0;
  14697.  
  14698.   FETCH_DATA (the_info, codep + 4);
  14699.   x = *codep++ & (bfd_signed_vma) 0xff;
  14700.   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
  14701.   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
  14702.   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
  14703.  
  14704.   x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
  14705.  
  14706.   return x;
  14707. }
  14708.  
  14709. static int
  14710. get16 (void)
  14711. {
  14712.   int x = 0;
  14713.  
  14714.   FETCH_DATA (the_info, codep + 2);
  14715.   x = *codep++ & 0xff;
  14716.   x |= (*codep++ & 0xff) << 8;
  14717.   return x;
  14718. }
  14719.  
  14720. static void
  14721. set_op (bfd_vma op, int riprel)
  14722. {
  14723.   op_index[op_ad] = op_ad;
  14724.   if (address_mode == mode_64bit)
  14725.     {
  14726.       op_address[op_ad] = op;
  14727.       op_riprel[op_ad] = riprel;
  14728.     }
  14729.   else
  14730.     {
  14731.       /* Mask to get a 32-bit address.  */
  14732.       op_address[op_ad] = op & 0xffffffff;
  14733.       op_riprel[op_ad] = riprel & 0xffffffff;
  14734.     }
  14735. }
  14736.  
  14737. static void
  14738. OP_REG (int code, int sizeflag)
  14739. {
  14740.   const char *s;
  14741.   int add;
  14742.  
  14743.   switch (code)
  14744.     {
  14745.     case es_reg: case ss_reg: case cs_reg:
  14746.     case ds_reg: case fs_reg: case gs_reg:
  14747.       oappend (names_seg[code - es_reg]);
  14748.       return;
  14749.     }
  14750.  
  14751.   USED_REX (REX_B);
  14752.   if (rex & REX_B)
  14753.     add = 8;
  14754.   else
  14755.     add = 0;
  14756.  
  14757.   switch (code)
  14758.     {
  14759.     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
  14760.     case sp_reg: case bp_reg: case si_reg: case di_reg:
  14761.       s = names16[code - ax_reg + add];
  14762.       break;
  14763.     case al_reg: case ah_reg: case cl_reg: case ch_reg:
  14764.     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
  14765.       USED_REX (0);
  14766.       if (rex)
  14767.         s = names8rex[code - al_reg + add];
  14768.       else
  14769.         s = names8[code - al_reg];
  14770.       break;
  14771.     case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
  14772.     case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
  14773.       if (address_mode == mode_64bit
  14774.           && ((sizeflag & DFLAG) || (rex & REX_W)))
  14775.         {
  14776.           s = names64[code - rAX_reg + add];
  14777.           break;
  14778.         }
  14779.       code += eAX_reg - rAX_reg;
  14780.       /* Fall through.  */
  14781.     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
  14782.     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
  14783.       USED_REX (REX_W);
  14784.       if (rex & REX_W)
  14785.         s = names64[code - eAX_reg + add];
  14786.       else
  14787.         {
  14788.           if (sizeflag & DFLAG)
  14789.             s = names32[code - eAX_reg + add];
  14790.           else
  14791.             s = names16[code - eAX_reg + add];
  14792.           used_prefixes |= (prefixes & PREFIX_DATA);
  14793.         }
  14794.       break;
  14795.     default:
  14796.       s = INTERNAL_DISASSEMBLER_ERROR;
  14797.       break;
  14798.     }
  14799.   oappend (s);
  14800. }
  14801.  
  14802. static void
  14803. OP_IMREG (int code, int sizeflag)
  14804. {
  14805.   const char *s;
  14806.  
  14807.   switch (code)
  14808.     {
  14809.     case indir_dx_reg:
  14810.       if (intel_syntax)
  14811.         s = "dx";
  14812.       else
  14813.         s = "(%dx)";
  14814.       break;
  14815.     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
  14816.     case sp_reg: case bp_reg: case si_reg: case di_reg:
  14817.       s = names16[code - ax_reg];
  14818.       break;
  14819.     case es_reg: case ss_reg: case cs_reg:
  14820.     case ds_reg: case fs_reg: case gs_reg:
  14821.       s = names_seg[code - es_reg];
  14822.       break;
  14823.     case al_reg: case ah_reg: case cl_reg: case ch_reg:
  14824.     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
  14825.       USED_REX (0);
  14826.       if (rex)
  14827.         s = names8rex[code - al_reg];
  14828.       else
  14829.         s = names8[code - al_reg];
  14830.       break;
  14831.     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
  14832.     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
  14833.       USED_REX (REX_W);
  14834.       if (rex & REX_W)
  14835.         s = names64[code - eAX_reg];
  14836.       else
  14837.         {
  14838.           if (sizeflag & DFLAG)
  14839.             s = names32[code - eAX_reg];
  14840.           else
  14841.             s = names16[code - eAX_reg];
  14842.           used_prefixes |= (prefixes & PREFIX_DATA);
  14843.         }
  14844.       break;
  14845.     case z_mode_ax_reg:
  14846.       if ((rex & REX_W) || (sizeflag & DFLAG))
  14847.         s = *names32;
  14848.       else
  14849.         s = *names16;
  14850.       if (!(rex & REX_W))
  14851.         used_prefixes |= (prefixes & PREFIX_DATA);
  14852.       break;
  14853.     default:
  14854.       s = INTERNAL_DISASSEMBLER_ERROR;
  14855.       break;
  14856.     }
  14857.   oappend (s);
  14858. }
  14859.  
  14860. static void
  14861. OP_I (int bytemode, int sizeflag)
  14862. {
  14863.   bfd_signed_vma op;
  14864.   bfd_signed_vma mask = -1;
  14865.  
  14866.   switch (bytemode)
  14867.     {
  14868.     case b_mode:
  14869.       FETCH_DATA (the_info, codep + 1);
  14870.       op = *codep++;
  14871.       mask = 0xff;
  14872.       break;
  14873.     case q_mode:
  14874.       if (address_mode == mode_64bit)
  14875.         {
  14876.           op = get32s ();
  14877.           break;
  14878.         }
  14879.       /* Fall through.  */
  14880.     case v_mode:
  14881.       USED_REX (REX_W);
  14882.       if (rex & REX_W)
  14883.         op = get32s ();
  14884.       else
  14885.         {
  14886.           if (sizeflag & DFLAG)
  14887.             {
  14888.               op = get32 ();
  14889.               mask = 0xffffffff;
  14890.             }
  14891.           else
  14892.             {
  14893.               op = get16 ();
  14894.               mask = 0xfffff;
  14895.             }
  14896.           used_prefixes |= (prefixes & PREFIX_DATA);
  14897.         }
  14898.       break;
  14899.     case w_mode:
  14900.       mask = 0xfffff;
  14901.       op = get16 ();
  14902.       break;
  14903.     case const_1_mode:
  14904.       if (intel_syntax)
  14905.         oappend ("1");
  14906.       return;
  14907.     default:
  14908.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  14909.       return;
  14910.     }
  14911.  
  14912.   op &= mask;
  14913.   scratchbuf[0] = '$';
  14914.   print_operand_value (scratchbuf + 1, 1, op);
  14915.   oappend_maybe_intel (scratchbuf);
  14916.   scratchbuf[0] = '\0';
  14917. }
  14918.  
  14919. static void
  14920. OP_I64 (int bytemode, int sizeflag)
  14921. {
  14922.   bfd_signed_vma op;
  14923.   bfd_signed_vma mask = -1;
  14924.  
  14925.   if (address_mode != mode_64bit)
  14926.     {
  14927.       OP_I (bytemode, sizeflag);
  14928.       return;
  14929.     }
  14930.  
  14931.   switch (bytemode)
  14932.     {
  14933.     case b_mode:
  14934.       FETCH_DATA (the_info, codep + 1);
  14935.       op = *codep++;
  14936.       mask = 0xff;
  14937.       break;
  14938.     case v_mode:
  14939.       USED_REX (REX_W);
  14940.       if (rex & REX_W)
  14941.         op = get64 ();
  14942.       else
  14943.         {
  14944.           if (sizeflag & DFLAG)
  14945.             {
  14946.               op = get32 ();
  14947.               mask = 0xffffffff;
  14948.             }
  14949.           else
  14950.             {
  14951.               op = get16 ();
  14952.               mask = 0xfffff;
  14953.             }
  14954.           used_prefixes |= (prefixes & PREFIX_DATA);
  14955.         }
  14956.       break;
  14957.     case w_mode:
  14958.       mask = 0xfffff;
  14959.       op = get16 ();
  14960.       break;
  14961.     default:
  14962.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  14963.       return;
  14964.     }
  14965.  
  14966.   op &= mask;
  14967.   scratchbuf[0] = '$';
  14968.   print_operand_value (scratchbuf + 1, 1, op);
  14969.   oappend_maybe_intel (scratchbuf);
  14970.   scratchbuf[0] = '\0';
  14971. }
  14972.  
  14973. static void
  14974. OP_sI (int bytemode, int sizeflag)
  14975. {
  14976.   bfd_signed_vma op;
  14977.  
  14978.   switch (bytemode)
  14979.     {
  14980.     case b_mode:
  14981.     case b_T_mode:
  14982.       FETCH_DATA (the_info, codep + 1);
  14983.       op = *codep++;
  14984.       if ((op & 0x80) != 0)
  14985.         op -= 0x100;
  14986.       if (bytemode == b_T_mode)
  14987.         {
  14988.           if (address_mode != mode_64bit
  14989.               || !((sizeflag & DFLAG) || (rex & REX_W)))
  14990.             {
  14991.               /* The operand-size prefix is overridden by a REX prefix.  */
  14992.               if ((sizeflag & DFLAG) || (rex & REX_W))
  14993.                 op &= 0xffffffff;
  14994.               else
  14995.                 op &= 0xffff;
  14996.           }
  14997.         }
  14998.       else
  14999.         {
  15000.           if (!(rex & REX_W))
  15001.             {
  15002.               if (sizeflag & DFLAG)
  15003.                 op &= 0xffffffff;
  15004.               else
  15005.                 op &= 0xffff;
  15006.             }
  15007.         }
  15008.       break;
  15009.     case v_mode:
  15010.       /* The operand-size prefix is overridden by a REX prefix.  */
  15011.       if ((sizeflag & DFLAG) || (rex & REX_W))
  15012.         op = get32s ();
  15013.       else
  15014.         op = get16 ();
  15015.       break;
  15016.     default:
  15017.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  15018.       return;
  15019.     }
  15020.  
  15021.   scratchbuf[0] = '$';
  15022.   print_operand_value (scratchbuf + 1, 1, op);
  15023.   oappend_maybe_intel (scratchbuf);
  15024. }
  15025.  
  15026. static void
  15027. OP_J (int bytemode, int sizeflag)
  15028. {
  15029.   bfd_vma disp;
  15030.   bfd_vma mask = -1;
  15031.   bfd_vma segment = 0;
  15032.  
  15033.   switch (bytemode)
  15034.     {
  15035.     case b_mode:
  15036.       FETCH_DATA (the_info, codep + 1);
  15037.       disp = *codep++;
  15038.       if ((disp & 0x80) != 0)
  15039.         disp -= 0x100;
  15040.       break;
  15041.     case v_mode:
  15042.       USED_REX (REX_W);
  15043.       if ((sizeflag & DFLAG) || (rex & REX_W))
  15044.         disp = get32s ();
  15045.       else
  15046.         {
  15047.           disp = get16 ();
  15048.           if ((disp & 0x8000) != 0)
  15049.             disp -= 0x10000;
  15050.           /* In 16bit mode, address is wrapped around at 64k within
  15051.              the same segment.  Otherwise, a data16 prefix on a jump
  15052.              instruction means that the pc is masked to 16 bits after
  15053.              the displacement is added!  */
  15054.           mask = 0xffff;
  15055.           if ((prefixes & PREFIX_DATA) == 0)
  15056.             segment = ((start_pc + codep - start_codep)
  15057.                        & ~((bfd_vma) 0xffff));
  15058.         }
  15059.       if (!(rex & REX_W))
  15060.         used_prefixes |= (prefixes & PREFIX_DATA);
  15061.       break;
  15062.     default:
  15063.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  15064.       return;
  15065.     }
  15066.   disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
  15067.   set_op (disp, 0);
  15068.   print_operand_value (scratchbuf, 1, disp);
  15069.   oappend (scratchbuf);
  15070. }
  15071.  
  15072. static void
  15073. OP_SEG (int bytemode, int sizeflag)
  15074. {
  15075.   if (bytemode == w_mode)
  15076.     oappend (names_seg[modrm.reg]);
  15077.   else
  15078.     OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
  15079. }
  15080.  
  15081. static void
  15082. OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
  15083. {
  15084.   int seg, offset;
  15085.  
  15086.   if (sizeflag & DFLAG)
  15087.     {
  15088.       offset = get32 ();
  15089.       seg = get16 ();
  15090.     }
  15091.   else
  15092.     {
  15093.       offset = get16 ();
  15094.       seg = get16 ();
  15095.     }
  15096.   used_prefixes |= (prefixes & PREFIX_DATA);
  15097.   if (intel_syntax)
  15098.     sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
  15099.   else
  15100.     sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
  15101.   oappend (scratchbuf);
  15102. }
  15103.  
  15104. static void
  15105. OP_OFF (int bytemode, int sizeflag)
  15106. {
  15107.   bfd_vma off;
  15108.  
  15109.   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
  15110.     intel_operand_size (bytemode, sizeflag);
  15111.   append_seg ();
  15112.  
  15113.   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
  15114.     off = get32 ();
  15115.   else
  15116.     off = get16 ();
  15117.  
  15118.   if (intel_syntax)
  15119.     {
  15120.       if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
  15121.                         | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
  15122.         {
  15123.           oappend (names_seg[ds_reg - es_reg]);
  15124.           oappend (":");
  15125.         }
  15126.     }
  15127.   print_operand_value (scratchbuf, 1, off);
  15128.   oappend (scratchbuf);
  15129. }
  15130.  
  15131. static void
  15132. OP_OFF64 (int bytemode, int sizeflag)
  15133. {
  15134.   bfd_vma off;
  15135.  
  15136.   if (address_mode != mode_64bit
  15137.       || (prefixes & PREFIX_ADDR))
  15138.     {
  15139.       OP_OFF (bytemode, sizeflag);
  15140.       return;
  15141.     }
  15142.  
  15143.   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
  15144.     intel_operand_size (bytemode, sizeflag);
  15145.   append_seg ();
  15146.  
  15147.   off = get64 ();
  15148.  
  15149.   if (intel_syntax)
  15150.     {
  15151.       if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
  15152.                         | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
  15153.         {
  15154.           oappend (names_seg[ds_reg - es_reg]);
  15155.           oappend (":");
  15156.         }
  15157.     }
  15158.   print_operand_value (scratchbuf, 1, off);
  15159.   oappend (scratchbuf);
  15160. }
  15161.  
  15162. static void
  15163. ptr_reg (int code, int sizeflag)
  15164. {
  15165.   const char *s;
  15166.  
  15167.   *obufp++ = open_char;
  15168.   used_prefixes |= (prefixes & PREFIX_ADDR);
  15169.   if (address_mode == mode_64bit)
  15170.     {
  15171.       if (!(sizeflag & AFLAG))
  15172.         s = names32[code - eAX_reg];
  15173.       else
  15174.         s = names64[code - eAX_reg];
  15175.     }
  15176.   else if (sizeflag & AFLAG)
  15177.     s = names32[code - eAX_reg];
  15178.   else
  15179.     s = names16[code - eAX_reg];
  15180.   oappend (s);
  15181.   *obufp++ = close_char;
  15182.   *obufp = 0;
  15183. }
  15184.  
  15185. static void
  15186. OP_ESreg (int code, int sizeflag)
  15187. {
  15188.   if (intel_syntax)
  15189.     {
  15190.       switch (codep[-1])
  15191.         {
  15192.         case 0x6d:      /* insw/insl */
  15193.           intel_operand_size (z_mode, sizeflag);
  15194.           break;
  15195.         case 0xa5:      /* movsw/movsl/movsq */
  15196.         case 0xa7:      /* cmpsw/cmpsl/cmpsq */
  15197.         case 0xab:      /* stosw/stosl */
  15198.         case 0xaf:      /* scasw/scasl */
  15199.           intel_operand_size (v_mode, sizeflag);
  15200.           break;
  15201.         default:
  15202.           intel_operand_size (b_mode, sizeflag);
  15203.         }
  15204.     }
  15205.   oappend_maybe_intel ("%es:");
  15206.   ptr_reg (code, sizeflag);
  15207. }
  15208.  
  15209. static void
  15210. OP_DSreg (int code, int sizeflag)
  15211. {
  15212.   if (intel_syntax)
  15213.     {
  15214.       switch (codep[-1])
  15215.         {
  15216.         case 0x6f:      /* outsw/outsl */
  15217.           intel_operand_size (z_mode, sizeflag);
  15218.           break;
  15219.         case 0xa5:      /* movsw/movsl/movsq */
  15220.         case 0xa7:      /* cmpsw/cmpsl/cmpsq */
  15221.         case 0xad:      /* lodsw/lodsl/lodsq */
  15222.           intel_operand_size (v_mode, sizeflag);
  15223.           break;
  15224.         default:
  15225.           intel_operand_size (b_mode, sizeflag);
  15226.         }
  15227.     }
  15228.   if ((prefixes
  15229.        & (PREFIX_CS
  15230.           | PREFIX_DS
  15231.           | PREFIX_SS
  15232.           | PREFIX_ES
  15233.           | PREFIX_FS
  15234.           | PREFIX_GS)) == 0)
  15235.     prefixes |= PREFIX_DS;
  15236.   append_seg ();
  15237.   ptr_reg (code, sizeflag);
  15238. }
  15239.  
  15240. static void
  15241. OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15242. {
  15243.   int add;
  15244.   if (rex & REX_R)
  15245.     {
  15246.       USED_REX (REX_R);
  15247.       add = 8;
  15248.     }
  15249.   else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
  15250.     {
  15251.       all_prefixes[last_lock_prefix] = 0;
  15252.       used_prefixes |= PREFIX_LOCK;
  15253.       add = 8;
  15254.     }
  15255.   else
  15256.     add = 0;
  15257.   sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
  15258.   oappend_maybe_intel (scratchbuf);
  15259. }
  15260.  
  15261. static void
  15262. OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15263. {
  15264.   int add;
  15265.   USED_REX (REX_R);
  15266.   if (rex & REX_R)
  15267.     add = 8;
  15268.   else
  15269.     add = 0;
  15270.   if (intel_syntax)
  15271.     sprintf (scratchbuf, "db%d", modrm.reg + add);
  15272.   else
  15273.     sprintf (scratchbuf, "%%db%d", modrm.reg + add);
  15274.   oappend (scratchbuf);
  15275. }
  15276.  
  15277. static void
  15278. OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15279. {
  15280.   sprintf (scratchbuf, "%%tr%d", modrm.reg);
  15281.   oappend_maybe_intel (scratchbuf);
  15282. }
  15283.  
  15284. static void
  15285. OP_R (int bytemode, int sizeflag)
  15286. {
  15287.   if (modrm.mod == 3)
  15288.     OP_E (bytemode, sizeflag);
  15289.   else
  15290.     BadOp ();
  15291. }
  15292.  
  15293. static void
  15294. OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15295. {
  15296.   int reg = modrm.reg;
  15297.   const char **names;
  15298.  
  15299.   used_prefixes |= (prefixes & PREFIX_DATA);
  15300.   if (prefixes & PREFIX_DATA)
  15301.     {
  15302.       names = names_xmm;
  15303.       USED_REX (REX_R);
  15304.       if (rex & REX_R)
  15305.         reg += 8;
  15306.     }
  15307.   else
  15308.     names = names_mm;
  15309.   oappend (names[reg]);
  15310. }
  15311.  
  15312. static void
  15313. OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  15314. {
  15315.   int reg = modrm.reg;
  15316.   const char **names;
  15317.  
  15318.   USED_REX (REX_R);
  15319.   if (rex & REX_R)
  15320.     reg += 8;
  15321.   if (vex.evex)
  15322.     {
  15323.       if (!vex.r)
  15324.         reg += 16;
  15325.     }
  15326.  
  15327.   if (need_vex
  15328.       && bytemode != xmm_mode
  15329.       && bytemode != xmmq_mode
  15330.       && bytemode != evex_half_bcst_xmmq_mode
  15331.       && bytemode != ymm_mode
  15332.       && bytemode != scalar_mode)
  15333.     {
  15334.       switch (vex.length)
  15335.         {
  15336.         case 128:
  15337.           names = names_xmm;
  15338.           break;
  15339.         case 256:
  15340.           if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
  15341.             names = names_ymm;
  15342.           else
  15343.             names = names_xmm;
  15344.           break;
  15345.         case 512:
  15346.           names = names_zmm;
  15347.           break;
  15348.         default:
  15349.           abort ();
  15350.         }
  15351.     }
  15352.   else if (bytemode == xmmq_mode
  15353.            || bytemode == evex_half_bcst_xmmq_mode)
  15354.     {
  15355.       switch (vex.length)
  15356.         {
  15357.         case 128:
  15358.         case 256:
  15359.           names = names_xmm;
  15360.           break;
  15361.         case 512:
  15362.           names = names_ymm;
  15363.           break;
  15364.         default:
  15365.           abort ();
  15366.         }
  15367.     }
  15368.   else if (bytemode == ymm_mode)
  15369.     names = names_ymm;
  15370.   else
  15371.     names = names_xmm;
  15372.   oappend (names[reg]);
  15373. }
  15374.  
  15375. static void
  15376. OP_EM (int bytemode, int sizeflag)
  15377. {
  15378.   int reg;
  15379.   const char **names;
  15380.  
  15381.   if (modrm.mod != 3)
  15382.     {
  15383.       if (intel_syntax
  15384.           && (bytemode == v_mode || bytemode == v_swap_mode))
  15385.         {
  15386.           bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
  15387.           used_prefixes |= (prefixes & PREFIX_DATA);
  15388.         }
  15389.       OP_E (bytemode, sizeflag);
  15390.       return;
  15391.     }
  15392.  
  15393.   if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
  15394.     swap_operand ();
  15395.  
  15396.   /* Skip mod/rm byte.  */
  15397.   MODRM_CHECK;
  15398.   codep++;
  15399.   used_prefixes |= (prefixes & PREFIX_DATA);
  15400.   reg = modrm.rm;
  15401.   if (prefixes & PREFIX_DATA)
  15402.     {
  15403.       names = names_xmm;
  15404.       USED_REX (REX_B);
  15405.       if (rex & REX_B)
  15406.         reg += 8;
  15407.     }
  15408.   else
  15409.     names = names_mm;
  15410.   oappend (names[reg]);
  15411. }
  15412.  
  15413. /* cvt* are the only instructions in sse2 which have
  15414.    both SSE and MMX operands and also have 0x66 prefix
  15415.    in their opcode. 0x66 was originally used to differentiate
  15416.    between SSE and MMX instruction(operands). So we have to handle the
  15417.    cvt* separately using OP_EMC and OP_MXC */
  15418. static void
  15419. OP_EMC (int bytemode, int sizeflag)
  15420. {
  15421.   if (modrm.mod != 3)
  15422.     {
  15423.       if (intel_syntax && bytemode == v_mode)
  15424.         {
  15425.           bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
  15426.           used_prefixes |= (prefixes & PREFIX_DATA);
  15427.         }
  15428.       OP_E (bytemode, sizeflag);
  15429.       return;
  15430.     }
  15431.  
  15432.   /* Skip mod/rm byte.  */
  15433.   MODRM_CHECK;
  15434.   codep++;
  15435.   used_prefixes |= (prefixes & PREFIX_DATA);
  15436.   oappend (names_mm[modrm.rm]);
  15437. }
  15438.  
  15439. static void
  15440. OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15441. {
  15442.   used_prefixes |= (prefixes & PREFIX_DATA);
  15443.   oappend (names_mm[modrm.reg]);
  15444. }
  15445.  
  15446. static void
  15447. OP_EX (int bytemode, int sizeflag)
  15448. {
  15449.   int reg;
  15450.   const char **names;
  15451.  
  15452.   /* Skip mod/rm byte.  */
  15453.   MODRM_CHECK;
  15454.   codep++;
  15455.  
  15456.   if (modrm.mod != 3)
  15457.     {
  15458.       OP_E_memory (bytemode, sizeflag);
  15459.       return;
  15460.     }
  15461.  
  15462.   reg = modrm.rm;
  15463.   USED_REX (REX_B);
  15464.   if (rex & REX_B)
  15465.     reg += 8;
  15466.   if (vex.evex)
  15467.     {
  15468.       USED_REX (REX_X);
  15469.       if ((rex & REX_X))
  15470.         reg += 16;
  15471.     }
  15472.  
  15473.   if ((sizeflag & SUFFIX_ALWAYS)
  15474.       && (bytemode == x_swap_mode
  15475.           || bytemode == d_swap_mode
  15476.           || bytemode == d_scalar_swap_mode
  15477.           || bytemode == q_swap_mode
  15478.           || bytemode == q_scalar_swap_mode))
  15479.     swap_operand ();
  15480.  
  15481.   if (need_vex
  15482.       && bytemode != xmm_mode
  15483.       && bytemode != xmmdw_mode
  15484.       && bytemode != xmmqd_mode
  15485.       && bytemode != xmm_mb_mode
  15486.       && bytemode != xmm_mw_mode
  15487.       && bytemode != xmm_md_mode
  15488.       && bytemode != xmm_mq_mode
  15489.       && bytemode != xmm_mdq_mode
  15490.       && bytemode != xmmq_mode
  15491.       && bytemode != evex_half_bcst_xmmq_mode
  15492.       && bytemode != ymm_mode
  15493.       && bytemode != d_scalar_mode
  15494.       && bytemode != d_scalar_swap_mode
  15495.       && bytemode != q_scalar_mode
  15496.       && bytemode != q_scalar_swap_mode
  15497.       && bytemode != vex_scalar_w_dq_mode)
  15498.     {
  15499.       switch (vex.length)
  15500.         {
  15501.         case 128:
  15502.           names = names_xmm;
  15503.           break;
  15504.         case 256:
  15505.           names = names_ymm;
  15506.           break;
  15507.         case 512:
  15508.           names = names_zmm;
  15509.           break;
  15510.         default:
  15511.           abort ();
  15512.         }
  15513.     }
  15514.   else if (bytemode == xmmq_mode
  15515.            || bytemode == evex_half_bcst_xmmq_mode)
  15516.     {
  15517.       switch (vex.length)
  15518.         {
  15519.         case 128:
  15520.         case 256:
  15521.           names = names_xmm;
  15522.           break;
  15523.         case 512:
  15524.           names = names_ymm;
  15525.           break;
  15526.         default:
  15527.           abort ();
  15528.         }
  15529.     }
  15530.   else if (bytemode == ymm_mode)
  15531.     names = names_ymm;
  15532.   else
  15533.     names = names_xmm;
  15534.   oappend (names[reg]);
  15535. }
  15536.  
  15537. static void
  15538. OP_MS (int bytemode, int sizeflag)
  15539. {
  15540.   if (modrm.mod == 3)
  15541.     OP_EM (bytemode, sizeflag);
  15542.   else
  15543.     BadOp ();
  15544. }
  15545.  
  15546. static void
  15547. OP_XS (int bytemode, int sizeflag)
  15548. {
  15549.   if (modrm.mod == 3)
  15550.     OP_EX (bytemode, sizeflag);
  15551.   else
  15552.     BadOp ();
  15553. }
  15554.  
  15555. static void
  15556. OP_M (int bytemode, int sizeflag)
  15557. {
  15558.   if (modrm.mod == 3)
  15559.     /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
  15560.     BadOp ();
  15561.   else
  15562.     OP_E (bytemode, sizeflag);
  15563. }
  15564.  
  15565. static void
  15566. OP_0f07 (int bytemode, int sizeflag)
  15567. {
  15568.   if (modrm.mod != 3 || modrm.rm != 0)
  15569.     BadOp ();
  15570.   else
  15571.     OP_E (bytemode, sizeflag);
  15572. }
  15573.  
  15574. /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
  15575.    32bit mode and "xchg %rax,%rax" in 64bit mode.  */
  15576.  
  15577. static void
  15578. NOP_Fixup1 (int bytemode, int sizeflag)
  15579. {
  15580.   if ((prefixes & PREFIX_DATA) != 0
  15581.       || (rex != 0
  15582.           && rex != 0x48
  15583.           && address_mode == mode_64bit))
  15584.     OP_REG (bytemode, sizeflag);
  15585.   else
  15586.     strcpy (obuf, "nop");
  15587. }
  15588.  
  15589. static void
  15590. NOP_Fixup2 (int bytemode, int sizeflag)
  15591. {
  15592.   if ((prefixes & PREFIX_DATA) != 0
  15593.       || (rex != 0
  15594.           && rex != 0x48
  15595.           && address_mode == mode_64bit))
  15596.     OP_IMREG (bytemode, sizeflag);
  15597. }
  15598.  
  15599. static const char *const Suffix3DNow[] = {
  15600. /* 00 */        NULL,           NULL,           NULL,           NULL,
  15601. /* 04 */        NULL,           NULL,           NULL,           NULL,
  15602. /* 08 */        NULL,           NULL,           NULL,           NULL,
  15603. /* 0C */        "pi2fw",        "pi2fd",        NULL,           NULL,
  15604. /* 10 */        NULL,           NULL,           NULL,           NULL,
  15605. /* 14 */        NULL,           NULL,           NULL,           NULL,
  15606. /* 18 */        NULL,           NULL,           NULL,           NULL,
  15607. /* 1C */        "pf2iw",        "pf2id",        NULL,           NULL,
  15608. /* 20 */        NULL,           NULL,           NULL,           NULL,
  15609. /* 24 */        NULL,           NULL,           NULL,           NULL,
  15610. /* 28 */        NULL,           NULL,           NULL,           NULL,
  15611. /* 2C */        NULL,           NULL,           NULL,           NULL,
  15612. /* 30 */        NULL,           NULL,           NULL,           NULL,
  15613. /* 34 */        NULL,           NULL,           NULL,           NULL,
  15614. /* 38 */        NULL,           NULL,           NULL,           NULL,
  15615. /* 3C */        NULL,           NULL,           NULL,           NULL,
  15616. /* 40 */        NULL,           NULL,           NULL,           NULL,
  15617. /* 44 */        NULL,           NULL,           NULL,           NULL,
  15618. /* 48 */        NULL,           NULL,           NULL,           NULL,
  15619. /* 4C */        NULL,           NULL,           NULL,           NULL,
  15620. /* 50 */        NULL,           NULL,           NULL,           NULL,
  15621. /* 54 */        NULL,           NULL,           NULL,           NULL,
  15622. /* 58 */        NULL,           NULL,           NULL,           NULL,
  15623. /* 5C */        NULL,           NULL,           NULL,           NULL,
  15624. /* 60 */        NULL,           NULL,           NULL,           NULL,
  15625. /* 64 */        NULL,           NULL,           NULL,           NULL,
  15626. /* 68 */        NULL,           NULL,           NULL,           NULL,
  15627. /* 6C */        NULL,           NULL,           NULL,           NULL,
  15628. /* 70 */        NULL,           NULL,           NULL,           NULL,
  15629. /* 74 */        NULL,           NULL,           NULL,           NULL,
  15630. /* 78 */        NULL,           NULL,           NULL,           NULL,
  15631. /* 7C */        NULL,           NULL,           NULL,           NULL,
  15632. /* 80 */        NULL,           NULL,           NULL,           NULL,
  15633. /* 84 */        NULL,           NULL,           NULL,           NULL,
  15634. /* 88 */        NULL,           NULL,           "pfnacc",       NULL,
  15635. /* 8C */        NULL,           NULL,           "pfpnacc",      NULL,
  15636. /* 90 */        "pfcmpge",      NULL,           NULL,           NULL,
  15637. /* 94 */        "pfmin",        NULL,           "pfrcp",        "pfrsqrt",
  15638. /* 98 */        NULL,           NULL,           "pfsub",        NULL,
  15639. /* 9C */        NULL,           NULL,           "pfadd",        NULL,
  15640. /* A0 */        "pfcmpgt",      NULL,           NULL,           NULL,
  15641. /* A4 */        "pfmax",        NULL,           "pfrcpit1",     "pfrsqit1",
  15642. /* A8 */        NULL,           NULL,           "pfsubr",       NULL,
  15643. /* AC */        NULL,           NULL,           "pfacc",        NULL,
  15644. /* B0 */        "pfcmpeq",      NULL,           NULL,           NULL,
  15645. /* B4 */        "pfmul",        NULL,           "pfrcpit2",     "pmulhrw",
  15646. /* B8 */        NULL,           NULL,           NULL,           "pswapd",
  15647. /* BC */        NULL,           NULL,           NULL,           "pavgusb",
  15648. /* C0 */        NULL,           NULL,           NULL,           NULL,
  15649. /* C4 */        NULL,           NULL,           NULL,           NULL,
  15650. /* C8 */        NULL,           NULL,           NULL,           NULL,
  15651. /* CC */        NULL,           NULL,           NULL,           NULL,
  15652. /* D0 */        NULL,           NULL,           NULL,           NULL,
  15653. /* D4 */        NULL,           NULL,           NULL,           NULL,
  15654. /* D8 */        NULL,           NULL,           NULL,           NULL,
  15655. /* DC */        NULL,           NULL,           NULL,           NULL,
  15656. /* E0 */        NULL,           NULL,           NULL,           NULL,
  15657. /* E4 */        NULL,           NULL,           NULL,           NULL,
  15658. /* E8 */        NULL,           NULL,           NULL,           NULL,
  15659. /* EC */        NULL,           NULL,           NULL,           NULL,
  15660. /* F0 */        NULL,           NULL,           NULL,           NULL,
  15661. /* F4 */        NULL,           NULL,           NULL,           NULL,
  15662. /* F8 */        NULL,           NULL,           NULL,           NULL,
  15663. /* FC */        NULL,           NULL,           NULL,           NULL,
  15664. };
  15665.  
  15666. static void
  15667. OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15668. {
  15669.   const char *mnemonic;
  15670.  
  15671.   FETCH_DATA (the_info, codep + 1);
  15672.   /* AMD 3DNow! instructions are specified by an opcode suffix in the
  15673.      place where an 8-bit immediate would normally go.  ie. the last
  15674.      byte of the instruction.  */
  15675.   obufp = mnemonicendp;
  15676.   mnemonic = Suffix3DNow[*codep++ & 0xff];
  15677.   if (mnemonic)
  15678.     oappend (mnemonic);
  15679.   else
  15680.     {
  15681.       /* Since a variable sized modrm/sib chunk is between the start
  15682.          of the opcode (0x0f0f) and the opcode suffix, we need to do
  15683.          all the modrm processing first, and don't know until now that
  15684.          we have a bad opcode.  This necessitates some cleaning up.  */
  15685.       op_out[0][0] = '\0';
  15686.       op_out[1][0] = '\0';
  15687.       BadOp ();
  15688.     }
  15689.   mnemonicendp = obufp;
  15690. }
  15691.  
  15692. static struct op simd_cmp_op[] =
  15693. {
  15694.   { STRING_COMMA_LEN ("eq") },
  15695.   { STRING_COMMA_LEN ("lt") },
  15696.   { STRING_COMMA_LEN ("le") },
  15697.   { STRING_COMMA_LEN ("unord") },
  15698.   { STRING_COMMA_LEN ("neq") },
  15699.   { STRING_COMMA_LEN ("nlt") },
  15700.   { STRING_COMMA_LEN ("nle") },
  15701.   { STRING_COMMA_LEN ("ord") }
  15702. };
  15703.  
  15704. static void
  15705. CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15706. {
  15707.   unsigned int cmp_type;
  15708.  
  15709.   FETCH_DATA (the_info, codep + 1);
  15710.   cmp_type = *codep++ & 0xff;
  15711.   if (cmp_type < ARRAY_SIZE (simd_cmp_op))
  15712.     {
  15713.       char suffix [3];
  15714.       char *p = mnemonicendp - 2;
  15715.       suffix[0] = p[0];
  15716.       suffix[1] = p[1];
  15717.       suffix[2] = '\0';
  15718.       sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
  15719.       mnemonicendp += simd_cmp_op[cmp_type].len;
  15720.     }
  15721.   else
  15722.     {
  15723.       /* We have a reserved extension byte.  Output it directly.  */
  15724.       scratchbuf[0] = '$';
  15725.       print_operand_value (scratchbuf + 1, 1, cmp_type);
  15726.       oappend_maybe_intel (scratchbuf);
  15727.       scratchbuf[0] = '\0';
  15728.     }
  15729. }
  15730.  
  15731. static void
  15732. OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
  15733.           int sizeflag ATTRIBUTE_UNUSED)
  15734. {
  15735.   /* mwait %eax,%ecx  */
  15736.   if (!intel_syntax)
  15737.     {
  15738.       const char **names = (address_mode == mode_64bit
  15739.                             ? names64 : names32);
  15740.       strcpy (op_out[0], names[0]);
  15741.       strcpy (op_out[1], names[1]);
  15742.       two_source_ops = 1;
  15743.     }
  15744.   /* Skip mod/rm byte.  */
  15745.   MODRM_CHECK;
  15746.   codep++;
  15747. }
  15748.  
  15749. static void
  15750. OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
  15751.             int sizeflag ATTRIBUTE_UNUSED)
  15752. {
  15753.   /* monitor %eax,%ecx,%edx"  */
  15754.   if (!intel_syntax)
  15755.     {
  15756.       const char **op1_names;
  15757.       const char **names = (address_mode == mode_64bit
  15758.                             ? names64 : names32);
  15759.  
  15760.       if (!(prefixes & PREFIX_ADDR))
  15761.         op1_names = (address_mode == mode_16bit
  15762.                      ? names16 : names);
  15763.       else
  15764.         {
  15765.           /* Remove "addr16/addr32".  */
  15766.           all_prefixes[last_addr_prefix] = 0;
  15767.           op1_names = (address_mode != mode_32bit
  15768.                        ? names32 : names16);
  15769.           used_prefixes |= PREFIX_ADDR;
  15770.         }
  15771.       strcpy (op_out[0], op1_names[0]);
  15772.       strcpy (op_out[1], names[1]);
  15773.       strcpy (op_out[2], names[2]);
  15774.       two_source_ops = 1;
  15775.     }
  15776.   /* Skip mod/rm byte.  */
  15777.   MODRM_CHECK;
  15778.   codep++;
  15779. }
  15780.  
  15781. static void
  15782. BadOp (void)
  15783. {
  15784.   /* Throw away prefixes and 1st. opcode byte.  */
  15785.   codep = insn_codep + 1;
  15786.   oappend ("(bad)");
  15787. }
  15788.  
  15789. static void
  15790. REP_Fixup (int bytemode, int sizeflag)
  15791. {
  15792.   /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
  15793.      lods and stos.  */
  15794.   if (prefixes & PREFIX_REPZ)
  15795.     all_prefixes[last_repz_prefix] = REP_PREFIX;
  15796.  
  15797.   switch (bytemode)
  15798.     {
  15799.     case al_reg:
  15800.     case eAX_reg:
  15801.     case indir_dx_reg:
  15802.       OP_IMREG (bytemode, sizeflag);
  15803.       break;
  15804.     case eDI_reg:
  15805.       OP_ESreg (bytemode, sizeflag);
  15806.       break;
  15807.     case eSI_reg:
  15808.       OP_DSreg (bytemode, sizeflag);
  15809.       break;
  15810.     default:
  15811.       abort ();
  15812.       break;
  15813.     }
  15814. }
  15815.  
  15816. /* For BND-prefixed instructions 0xF2 prefix should be displayed as
  15817.    "bnd".  */
  15818.  
  15819. static void
  15820. BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  15821. {
  15822.   if (prefixes & PREFIX_REPNZ)
  15823.     all_prefixes[last_repnz_prefix] = BND_PREFIX;
  15824. }
  15825.  
  15826. /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
  15827.    "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
  15828.  */
  15829.  
  15830. static void
  15831. HLE_Fixup1 (int bytemode, int sizeflag)
  15832. {
  15833.   if (modrm.mod != 3
  15834.       && (prefixes & PREFIX_LOCK) != 0)
  15835.     {
  15836.       if (prefixes & PREFIX_REPZ)
  15837.         all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15838.       if (prefixes & PREFIX_REPNZ)
  15839.         all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
  15840.     }
  15841.  
  15842.   OP_E (bytemode, sizeflag);
  15843. }
  15844.  
  15845. /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
  15846.    "xacquire"/"xrelease" for memory operand.  No check for LOCK prefix.
  15847.  */
  15848.  
  15849. static void
  15850. HLE_Fixup2 (int bytemode, int sizeflag)
  15851. {
  15852.   if (modrm.mod != 3)
  15853.     {
  15854.       if (prefixes & PREFIX_REPZ)
  15855.         all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15856.       if (prefixes & PREFIX_REPNZ)
  15857.         all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
  15858.     }
  15859.  
  15860.   OP_E (bytemode, sizeflag);
  15861. }
  15862.  
  15863. /* Similar to OP_E.  But the 0xf3 prefixes should be displayed as
  15864.    "xrelease" for memory operand.  No check for LOCK prefix.   */
  15865.  
  15866. static void
  15867. HLE_Fixup3 (int bytemode, int sizeflag)
  15868. {
  15869.   if (modrm.mod != 3
  15870.       && last_repz_prefix > last_repnz_prefix
  15871.       && (prefixes & PREFIX_REPZ) != 0)
  15872.     all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15873.  
  15874.   OP_E (bytemode, sizeflag);
  15875. }
  15876.  
  15877. static void
  15878. CMPXCHG8B_Fixup (int bytemode, int sizeflag)
  15879. {
  15880.   USED_REX (REX_W);
  15881.   if (rex & REX_W)
  15882.     {
  15883.       /* Change cmpxchg8b to cmpxchg16b.  */
  15884.       char *p = mnemonicendp - 2;
  15885.       mnemonicendp = stpcpy (p, "16b");
  15886.       bytemode = o_mode;
  15887.     }
  15888.   else if ((prefixes & PREFIX_LOCK) != 0)
  15889.     {
  15890.       if (prefixes & PREFIX_REPZ)
  15891.         all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
  15892.       if (prefixes & PREFIX_REPNZ)
  15893.         all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
  15894.     }
  15895.  
  15896.   OP_M (bytemode, sizeflag);
  15897. }
  15898.  
  15899. static void
  15900. XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
  15901. {
  15902.   const char **names;
  15903.  
  15904.   if (need_vex)
  15905.     {
  15906.       switch (vex.length)
  15907.         {
  15908.         case 128:
  15909.           names = names_xmm;
  15910.           break;
  15911.         case 256:
  15912.           names = names_ymm;
  15913.           break;
  15914.         default:
  15915.           abort ();
  15916.         }
  15917.     }
  15918.   else
  15919.     names = names_xmm;
  15920.   oappend (names[reg]);
  15921. }
  15922.  
  15923. static void
  15924. CRC32_Fixup (int bytemode, int sizeflag)
  15925. {
  15926.   /* Add proper suffix to "crc32".  */
  15927.   char *p = mnemonicendp;
  15928.  
  15929.   switch (bytemode)
  15930.     {
  15931.     case b_mode:
  15932.       if (intel_syntax)
  15933.         goto skip;
  15934.  
  15935.       *p++ = 'b';
  15936.       break;
  15937.     case v_mode:
  15938.       if (intel_syntax)
  15939.         goto skip;
  15940.  
  15941.       USED_REX (REX_W);
  15942.       if (rex & REX_W)
  15943.         *p++ = 'q';
  15944.       else
  15945.         {
  15946.           if (sizeflag & DFLAG)
  15947.             *p++ = 'l';
  15948.           else
  15949.             *p++ = 'w';
  15950.           used_prefixes |= (prefixes & PREFIX_DATA);
  15951.         }
  15952.       break;
  15953.     default:
  15954.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  15955.       break;
  15956.     }
  15957.   mnemonicendp = p;
  15958.   *p = '\0';
  15959.  
  15960. skip:
  15961.   if (modrm.mod == 3)
  15962.     {
  15963.       int add;
  15964.  
  15965.       /* Skip mod/rm byte.  */
  15966.       MODRM_CHECK;
  15967.       codep++;
  15968.  
  15969.       USED_REX (REX_B);
  15970.       add = (rex & REX_B) ? 8 : 0;
  15971.       if (bytemode == b_mode)
  15972.         {
  15973.           USED_REX (0);
  15974.           if (rex)
  15975.             oappend (names8rex[modrm.rm + add]);
  15976.           else
  15977.             oappend (names8[modrm.rm + add]);
  15978.         }
  15979.       else
  15980.         {
  15981.           USED_REX (REX_W);
  15982.           if (rex & REX_W)
  15983.             oappend (names64[modrm.rm + add]);
  15984.           else if ((prefixes & PREFIX_DATA))
  15985.             oappend (names16[modrm.rm + add]);
  15986.           else
  15987.             oappend (names32[modrm.rm + add]);
  15988.         }
  15989.     }
  15990.   else
  15991.     OP_E (bytemode, sizeflag);
  15992. }
  15993.  
  15994. static void
  15995. FXSAVE_Fixup (int bytemode, int sizeflag)
  15996. {
  15997.   /* Add proper suffix to "fxsave" and "fxrstor".  */
  15998.   USED_REX (REX_W);
  15999.   if (rex & REX_W)
  16000.     {
  16001.       char *p = mnemonicendp;
  16002.       *p++ = '6';
  16003.       *p++ = '4';
  16004.       *p = '\0';
  16005.       mnemonicendp = p;
  16006.     }
  16007.   OP_M (bytemode, sizeflag);
  16008. }
  16009.  
  16010. /* Display the destination register operand for instructions with
  16011.    VEX. */
  16012.  
  16013. static void
  16014. OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16015. {
  16016.   int reg;
  16017.   const char **names;
  16018.  
  16019.   if (!need_vex)
  16020.     abort ();
  16021.  
  16022.   if (!need_vex_reg)
  16023.     return;
  16024.  
  16025.   reg = vex.register_specifier;
  16026.   if (vex.evex)
  16027.     {
  16028.       if (!vex.v)
  16029.         reg += 16;
  16030.     }
  16031.  
  16032.   if (bytemode == vex_scalar_mode)
  16033.     {
  16034.       oappend (names_xmm[reg]);
  16035.       return;
  16036.     }
  16037.  
  16038.   switch (vex.length)
  16039.     {
  16040.     case 128:
  16041.       switch (bytemode)
  16042.         {
  16043.         case vex_mode:
  16044.         case vex128_mode:
  16045.         case vex_vsib_q_w_dq_mode:
  16046.           names = names_xmm;
  16047.           break;
  16048.         case dq_mode:
  16049.           if (vex.w)
  16050.             names = names64;
  16051.           else
  16052.             names = names32;
  16053.           break;
  16054.         case mask_mode:
  16055.           names = names_mask;
  16056.           break;
  16057.         default:
  16058.           abort ();
  16059.           return;
  16060.         }
  16061.       break;
  16062.     case 256:
  16063.       switch (bytemode)
  16064.         {
  16065.         case vex_mode:
  16066.         case vex256_mode:
  16067.           names = names_ymm;
  16068.           break;
  16069.         case vex_vsib_q_w_dq_mode:
  16070.           names = vex.w ? names_ymm : names_xmm;
  16071.           break;
  16072.         case mask_mode:
  16073.           names = names_mask;
  16074.           break;
  16075.         default:
  16076.           abort ();
  16077.           return;
  16078.         }
  16079.       break;
  16080.     case 512:
  16081.       names = names_zmm;
  16082.       break;
  16083.     default:
  16084.       abort ();
  16085.       break;
  16086.     }
  16087.   oappend (names[reg]);
  16088. }
  16089.  
  16090. /* Get the VEX immediate byte without moving codep.  */
  16091.  
  16092. static unsigned char
  16093. get_vex_imm8 (int sizeflag, int opnum)
  16094. {
  16095.   int bytes_before_imm = 0;
  16096.  
  16097.   if (modrm.mod != 3)
  16098.     {
  16099.       /* There are SIB/displacement bytes.  */
  16100.       if ((sizeflag & AFLAG) || address_mode == mode_64bit)
  16101.         {
  16102.           /* 32/64 bit address mode */
  16103.           int base = modrm.rm;
  16104.  
  16105.           /* Check SIB byte.  */
  16106.           if (base == 4)
  16107.             {
  16108.               FETCH_DATA (the_info, codep + 1);
  16109.               base = *codep & 7;
  16110.               /* When decoding the third source, don't increase
  16111.                  bytes_before_imm as this has already been incremented
  16112.                  by one in OP_E_memory while decoding the second
  16113.                  source operand.  */
  16114.               if (opnum == 0)
  16115.                 bytes_before_imm++;
  16116.             }
  16117.  
  16118.           /* Don't increase bytes_before_imm when decoding the third source,
  16119.              it has already been incremented by OP_E_memory while decoding
  16120.              the second source operand.  */
  16121.           if (opnum == 0)
  16122.             {
  16123.               switch (modrm.mod)
  16124.                 {
  16125.                   case 0:
  16126.                     /* When modrm.rm == 5 or modrm.rm == 4 and base in
  16127.                        SIB == 5, there is a 4 byte displacement.  */
  16128.                     if (base != 5)
  16129.                       /* No displacement. */
  16130.                       break;
  16131.                   case 2:
  16132.                     /* 4 byte displacement.  */
  16133.                     bytes_before_imm += 4;
  16134.                     break;
  16135.                   case 1:
  16136.                     /* 1 byte displacement.  */
  16137.                     bytes_before_imm++;
  16138.                     break;
  16139.                 }
  16140.             }
  16141.         }
  16142.       else
  16143.         {
  16144.           /* 16 bit address mode */
  16145.           /* Don't increase bytes_before_imm when decoding the third source,
  16146.              it has already been incremented by OP_E_memory while decoding
  16147.              the second source operand.  */
  16148.           if (opnum == 0)
  16149.             {
  16150.               switch (modrm.mod)
  16151.                 {
  16152.                 case 0:
  16153.                   /* When modrm.rm == 6, there is a 2 byte displacement.  */
  16154.                   if (modrm.rm != 6)
  16155.                     /* No displacement. */
  16156.                     break;
  16157.                 case 2:
  16158.                   /* 2 byte displacement.  */
  16159.                   bytes_before_imm += 2;
  16160.                   break;
  16161.                 case 1:
  16162.                   /* 1 byte displacement: when decoding the third source,
  16163.                      don't increase bytes_before_imm as this has already
  16164.                      been incremented by one in OP_E_memory while decoding
  16165.                      the second source operand.  */
  16166.                   if (opnum == 0)
  16167.                     bytes_before_imm++;
  16168.  
  16169.                   break;
  16170.                 }
  16171.             }
  16172.         }
  16173.     }
  16174.  
  16175.   FETCH_DATA (the_info, codep + bytes_before_imm + 1);
  16176.   return codep [bytes_before_imm];
  16177. }
  16178.  
  16179. static void
  16180. OP_EX_VexReg (int bytemode, int sizeflag, int reg)
  16181. {
  16182.   const char **names;
  16183.  
  16184.   if (reg == -1 && modrm.mod != 3)
  16185.     {
  16186.       OP_E_memory (bytemode, sizeflag);
  16187.       return;
  16188.     }
  16189.   else
  16190.     {
  16191.       if (reg == -1)
  16192.         {
  16193.           reg = modrm.rm;
  16194.           USED_REX (REX_B);
  16195.           if (rex & REX_B)
  16196.             reg += 8;
  16197.         }
  16198.       else if (reg > 7 && address_mode != mode_64bit)
  16199.         BadOp ();
  16200.     }
  16201.  
  16202.   switch (vex.length)
  16203.     {
  16204.     case 128:
  16205.       names = names_xmm;
  16206.       break;
  16207.     case 256:
  16208.       names = names_ymm;
  16209.       break;
  16210.     default:
  16211.       abort ();
  16212.     }
  16213.   oappend (names[reg]);
  16214. }
  16215.  
  16216. static void
  16217. OP_EX_VexImmW (int bytemode, int sizeflag)
  16218. {
  16219.   int reg = -1;
  16220.   static unsigned char vex_imm8;
  16221.  
  16222.   if (vex_w_done == 0)
  16223.     {
  16224.       vex_w_done = 1;
  16225.  
  16226.       /* Skip mod/rm byte.  */
  16227.       MODRM_CHECK;
  16228.       codep++;
  16229.  
  16230.       vex_imm8 = get_vex_imm8 (sizeflag, 0);
  16231.  
  16232.       if (vex.w)
  16233.           reg = vex_imm8 >> 4;
  16234.  
  16235.       OP_EX_VexReg (bytemode, sizeflag, reg);
  16236.     }
  16237.   else if (vex_w_done == 1)
  16238.     {
  16239.       vex_w_done = 2;
  16240.  
  16241.       if (!vex.w)
  16242.           reg = vex_imm8 >> 4;
  16243.  
  16244.       OP_EX_VexReg (bytemode, sizeflag, reg);
  16245.     }
  16246.   else
  16247.     {
  16248.       /* Output the imm8 directly.  */
  16249.       scratchbuf[0] = '$';
  16250.       print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
  16251.       oappend_maybe_intel (scratchbuf);
  16252.       scratchbuf[0] = '\0';
  16253.       codep++;
  16254.     }
  16255. }
  16256.  
  16257. static void
  16258. OP_Vex_2src (int bytemode, int sizeflag)
  16259. {
  16260.   if (modrm.mod == 3)
  16261.     {
  16262.       int reg = modrm.rm;
  16263.       USED_REX (REX_B);
  16264.       if (rex & REX_B)
  16265.         reg += 8;
  16266.       oappend (names_xmm[reg]);
  16267.     }
  16268.   else
  16269.     {
  16270.       if (intel_syntax
  16271.           && (bytemode == v_mode || bytemode == v_swap_mode))
  16272.         {
  16273.           bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
  16274.           used_prefixes |= (prefixes & PREFIX_DATA);
  16275.         }
  16276.       OP_E (bytemode, sizeflag);
  16277.     }
  16278. }
  16279.  
  16280. static void
  16281. OP_Vex_2src_1 (int bytemode, int sizeflag)
  16282. {
  16283.   if (modrm.mod == 3)
  16284.     {
  16285.       /* Skip mod/rm byte.   */
  16286.       MODRM_CHECK;
  16287.       codep++;
  16288.     }
  16289.  
  16290.   if (vex.w)
  16291.     oappend (names_xmm[vex.register_specifier]);
  16292.   else
  16293.     OP_Vex_2src (bytemode, sizeflag);
  16294. }
  16295.  
  16296. static void
  16297. OP_Vex_2src_2 (int bytemode, int sizeflag)
  16298. {
  16299.   if (vex.w)
  16300.     OP_Vex_2src (bytemode, sizeflag);
  16301.   else
  16302.     oappend (names_xmm[vex.register_specifier]);
  16303. }
  16304.  
  16305. static void
  16306. OP_EX_VexW (int bytemode, int sizeflag)
  16307. {
  16308.   int reg = -1;
  16309.  
  16310.   if (!vex_w_done)
  16311.     {
  16312.       vex_w_done = 1;
  16313.  
  16314.       /* Skip mod/rm byte.  */
  16315.       MODRM_CHECK;
  16316.       codep++;
  16317.  
  16318.       if (vex.w)
  16319.         reg = get_vex_imm8 (sizeflag, 0) >> 4;
  16320.     }
  16321.   else
  16322.     {
  16323.       if (!vex.w)
  16324.         reg = get_vex_imm8 (sizeflag, 1) >> 4;
  16325.     }
  16326.  
  16327.   OP_EX_VexReg (bytemode, sizeflag, reg);
  16328. }
  16329.  
  16330. static void
  16331. VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
  16332.              int sizeflag ATTRIBUTE_UNUSED)
  16333. {
  16334.   /* Skip the immediate byte and check for invalid bits.  */
  16335.   FETCH_DATA (the_info, codep + 1);
  16336.   if (*codep++ & 0xf)
  16337.     BadOp ();
  16338. }
  16339.  
  16340. static void
  16341. OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16342. {
  16343.   int reg;
  16344.   const char **names;
  16345.  
  16346.   FETCH_DATA (the_info, codep + 1);
  16347.   reg = *codep++;
  16348.  
  16349.   if (bytemode != x_mode)
  16350.     abort ();
  16351.  
  16352.   if (reg & 0xf)
  16353.       BadOp ();
  16354.  
  16355.   reg >>= 4;
  16356.   if (reg > 7 && address_mode != mode_64bit)
  16357.     BadOp ();
  16358.  
  16359.   switch (vex.length)
  16360.     {
  16361.     case 128:
  16362.       names = names_xmm;
  16363.       break;
  16364.     case 256:
  16365.       names = names_ymm;
  16366.       break;
  16367.     default:
  16368.       abort ();
  16369.     }
  16370.   oappend (names[reg]);
  16371. }
  16372.  
  16373. static void
  16374. OP_XMM_VexW (int bytemode, int sizeflag)
  16375. {
  16376.   /* Turn off the REX.W bit since it is used for swapping operands
  16377.      now.  */
  16378.   rex &= ~REX_W;
  16379.   OP_XMM (bytemode, sizeflag);
  16380. }
  16381.  
  16382. static void
  16383. OP_EX_Vex (int bytemode, int sizeflag)
  16384. {
  16385.   if (modrm.mod != 3)
  16386.     {
  16387.       if (vex.register_specifier != 0)
  16388.         BadOp ();
  16389.       need_vex_reg = 0;
  16390.     }
  16391.   OP_EX (bytemode, sizeflag);
  16392. }
  16393.  
  16394. static void
  16395. OP_XMM_Vex (int bytemode, int sizeflag)
  16396. {
  16397.   if (modrm.mod != 3)
  16398.     {
  16399.       if (vex.register_specifier != 0)
  16400.         BadOp ();
  16401.       need_vex_reg = 0;
  16402.     }
  16403.   OP_XMM (bytemode, sizeflag);
  16404. }
  16405.  
  16406. static void
  16407. VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16408. {
  16409.   switch (vex.length)
  16410.     {
  16411.     case 128:
  16412.       mnemonicendp = stpcpy (obuf, "vzeroupper");
  16413.       break;
  16414.     case 256:
  16415.       mnemonicendp = stpcpy (obuf, "vzeroall");
  16416.       break;
  16417.     default:
  16418.       abort ();
  16419.     }
  16420. }
  16421.  
  16422. static struct op vex_cmp_op[] =
  16423. {
  16424.   { STRING_COMMA_LEN ("eq") },
  16425.   { STRING_COMMA_LEN ("lt") },
  16426.   { STRING_COMMA_LEN ("le") },
  16427.   { STRING_COMMA_LEN ("unord") },
  16428.   { STRING_COMMA_LEN ("neq") },
  16429.   { STRING_COMMA_LEN ("nlt") },
  16430.   { STRING_COMMA_LEN ("nle") },
  16431.   { STRING_COMMA_LEN ("ord") },
  16432.   { STRING_COMMA_LEN ("eq_uq") },
  16433.   { STRING_COMMA_LEN ("nge") },
  16434.   { STRING_COMMA_LEN ("ngt") },
  16435.   { STRING_COMMA_LEN ("false") },
  16436.   { STRING_COMMA_LEN ("neq_oq") },
  16437.   { STRING_COMMA_LEN ("ge") },
  16438.   { STRING_COMMA_LEN ("gt") },
  16439.   { STRING_COMMA_LEN ("true") },
  16440.   { STRING_COMMA_LEN ("eq_os") },
  16441.   { STRING_COMMA_LEN ("lt_oq") },
  16442.   { STRING_COMMA_LEN ("le_oq") },
  16443.   { STRING_COMMA_LEN ("unord_s") },
  16444.   { STRING_COMMA_LEN ("neq_us") },
  16445.   { STRING_COMMA_LEN ("nlt_uq") },
  16446.   { STRING_COMMA_LEN ("nle_uq") },
  16447.   { STRING_COMMA_LEN ("ord_s") },
  16448.   { STRING_COMMA_LEN ("eq_us") },
  16449.   { STRING_COMMA_LEN ("nge_uq") },
  16450.   { STRING_COMMA_LEN ("ngt_uq") },
  16451.   { STRING_COMMA_LEN ("false_os") },
  16452.   { STRING_COMMA_LEN ("neq_os") },
  16453.   { STRING_COMMA_LEN ("ge_oq") },
  16454.   { STRING_COMMA_LEN ("gt_oq") },
  16455.   { STRING_COMMA_LEN ("true_us") },
  16456. };
  16457.  
  16458. static void
  16459. VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16460. {
  16461.   unsigned int cmp_type;
  16462.  
  16463.   FETCH_DATA (the_info, codep + 1);
  16464.   cmp_type = *codep++ & 0xff;
  16465.   if (cmp_type < ARRAY_SIZE (vex_cmp_op))
  16466.     {
  16467.       char suffix [3];
  16468.       char *p = mnemonicendp - 2;
  16469.       suffix[0] = p[0];
  16470.       suffix[1] = p[1];
  16471.       suffix[2] = '\0';
  16472.       sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
  16473.       mnemonicendp += vex_cmp_op[cmp_type].len;
  16474.     }
  16475.   else
  16476.     {
  16477.       /* We have a reserved extension byte.  Output it directly.  */
  16478.       scratchbuf[0] = '$';
  16479.       print_operand_value (scratchbuf + 1, 1, cmp_type);
  16480.       oappend_maybe_intel (scratchbuf);
  16481.       scratchbuf[0] = '\0';
  16482.     }
  16483. }
  16484.  
  16485. static void
  16486. VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
  16487.              int sizeflag ATTRIBUTE_UNUSED)
  16488. {
  16489.   unsigned int cmp_type;
  16490.  
  16491.   if (!vex.evex)
  16492.     abort ();
  16493.  
  16494.   FETCH_DATA (the_info, codep + 1);
  16495.   cmp_type = *codep++ & 0xff;
  16496.   /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
  16497.      If it's the case, print suffix, otherwise - print the immediate.  */
  16498.   if (cmp_type < ARRAY_SIZE (simd_cmp_op)
  16499.       && cmp_type != 3
  16500.       && cmp_type != 7)
  16501.     {
  16502.       char suffix [3];
  16503.       char *p = mnemonicendp - 2;
  16504.  
  16505.       /* vpcmp* can have both one- and two-lettered suffix.  */
  16506.       if (p[0] == 'p')
  16507.         {
  16508.           p++;
  16509.           suffix[0] = p[0];
  16510.           suffix[1] = '\0';
  16511.         }
  16512.       else
  16513.         {
  16514.           suffix[0] = p[0];
  16515.           suffix[1] = p[1];
  16516.           suffix[2] = '\0';
  16517.         }
  16518.  
  16519.       sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
  16520.       mnemonicendp += simd_cmp_op[cmp_type].len;
  16521.     }
  16522.   else
  16523.     {
  16524.       /* We have a reserved extension byte.  Output it directly.  */
  16525.       scratchbuf[0] = '$';
  16526.       print_operand_value (scratchbuf + 1, 1, cmp_type);
  16527.       oappend_maybe_intel (scratchbuf);
  16528.       scratchbuf[0] = '\0';
  16529.     }
  16530. }
  16531.  
  16532. static const struct op pclmul_op[] =
  16533. {
  16534.   { STRING_COMMA_LEN ("lql") },
  16535.   { STRING_COMMA_LEN ("hql") },
  16536.   { STRING_COMMA_LEN ("lqh") },
  16537.   { STRING_COMMA_LEN ("hqh") }
  16538. };
  16539.  
  16540. static void
  16541. PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
  16542.               int sizeflag ATTRIBUTE_UNUSED)
  16543. {
  16544.   unsigned int pclmul_type;
  16545.  
  16546.   FETCH_DATA (the_info, codep + 1);
  16547.   pclmul_type = *codep++ & 0xff;
  16548.   switch (pclmul_type)
  16549.     {
  16550.     case 0x10:
  16551.       pclmul_type = 2;
  16552.       break;
  16553.     case 0x11:
  16554.       pclmul_type = 3;
  16555.       break;
  16556.     default:
  16557.       break;
  16558.     }
  16559.   if (pclmul_type < ARRAY_SIZE (pclmul_op))
  16560.     {
  16561.       char suffix [4];
  16562.       char *p = mnemonicendp - 3;
  16563.       suffix[0] = p[0];
  16564.       suffix[1] = p[1];
  16565.       suffix[2] = p[2];
  16566.       suffix[3] = '\0';
  16567.       sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
  16568.       mnemonicendp += pclmul_op[pclmul_type].len;
  16569.     }
  16570.   else
  16571.     {
  16572.       /* We have a reserved extension byte.  Output it directly.  */
  16573.       scratchbuf[0] = '$';
  16574.       print_operand_value (scratchbuf + 1, 1, pclmul_type);
  16575.       oappend_maybe_intel (scratchbuf);
  16576.       scratchbuf[0] = '\0';
  16577.     }
  16578. }
  16579.  
  16580. static void
  16581. MOVBE_Fixup (int bytemode, int sizeflag)
  16582. {
  16583.   /* Add proper suffix to "movbe".  */
  16584.   char *p = mnemonicendp;
  16585.  
  16586.   switch (bytemode)
  16587.     {
  16588.     case v_mode:
  16589.       if (intel_syntax)
  16590.         goto skip;
  16591.  
  16592.       USED_REX (REX_W);
  16593.       if (sizeflag & SUFFIX_ALWAYS)
  16594.         {
  16595.           if (rex & REX_W)
  16596.             *p++ = 'q';
  16597.           else
  16598.             {
  16599.               if (sizeflag & DFLAG)
  16600.                 *p++ = 'l';
  16601.               else
  16602.                 *p++ = 'w';
  16603.               used_prefixes |= (prefixes & PREFIX_DATA);
  16604.             }
  16605.         }
  16606.       break;
  16607.     default:
  16608.       oappend (INTERNAL_DISASSEMBLER_ERROR);
  16609.       break;
  16610.     }
  16611.   mnemonicendp = p;
  16612.   *p = '\0';
  16613.  
  16614. skip:
  16615.   OP_M (bytemode, sizeflag);
  16616. }
  16617.  
  16618. static void
  16619. OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16620. {
  16621.   int reg;
  16622.   const char **names;
  16623.  
  16624.   /* Skip mod/rm byte.  */
  16625.   MODRM_CHECK;
  16626.   codep++;
  16627.  
  16628.   if (vex.w)
  16629.     names = names64;
  16630.   else
  16631.     names = names32;
  16632.  
  16633.   reg = modrm.rm;
  16634.   USED_REX (REX_B);
  16635.   if (rex & REX_B)
  16636.     reg += 8;
  16637.  
  16638.   oappend (names[reg]);
  16639. }
  16640.  
  16641. static void
  16642. OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
  16643. {
  16644.   const char **names;
  16645.  
  16646.   if (vex.w)
  16647.     names = names64;
  16648.   else
  16649.     names = names32;
  16650.  
  16651.   oappend (names[vex.register_specifier]);
  16652. }
  16653.  
  16654. static void
  16655. OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16656. {
  16657.   if (!vex.evex
  16658.       || bytemode != mask_mode)
  16659.     abort ();
  16660.  
  16661.   USED_REX (REX_R);
  16662.   if ((rex & REX_R) != 0 || !vex.r)
  16663.     {
  16664.       BadOp ();
  16665.       return;
  16666.     }
  16667.  
  16668.   oappend (names_mask [modrm.reg]);
  16669. }
  16670.  
  16671. static void
  16672. OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
  16673. {
  16674.   if (!vex.evex
  16675.       || (bytemode != evex_rounding_mode
  16676.           && bytemode != evex_sae_mode))
  16677.     abort ();
  16678.   if (modrm.mod == 3 && vex.b)
  16679.     switch (bytemode)
  16680.       {
  16681.       case evex_rounding_mode:
  16682.         oappend (names_rounding[vex.ll]);
  16683.         break;
  16684.       case evex_sae_mode:
  16685.         oappend ("{sae}");
  16686.         break;
  16687.       default:
  16688.         break;
  16689.       }
  16690. }
  16691.