xref: /netbsd-src/external/gpl3/gdb/dist/opcodes/i386-dis.c (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1 /* Print i386 instructions for GDB, the GNU debugger.
2    Copyright (C) 1988-2017 Free Software Foundation, Inc.
3 
4    This file is part of the GNU opcodes library.
5 
6    This library is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3, or (at your option)
9    any later version.
10 
11    It is distributed in the hope that it will be useful, but WITHOUT
12    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
14    License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20 
21 
22 /* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23    July 1988
24     modified by John Hassey (hassey@dg-rtp.dg.com)
25     x86-64 support added by Jan Hubicka (jh@suse.cz)
26     VIA PadLock support by Michal Ludvig (mludvig@suse.cz).  */
27 
28 /* The main tables describing the instructions is essentially a copy
29    of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30    Programmers Manual.  Usually, there is a capital letter, followed
31    by a small letter.  The capital letter tell the addressing mode,
32    and the small letter tells about the operand size.  Refer to
33    the Intel manual for details.  */
34 
35 #include "sysdep.h"
36 #include "dis-asm.h"
37 #include "opintl.h"
38 #include "opcode/i386.h"
39 #include "libiberty.h"
40 
41 #include <setjmp.h>
42 
43 static int print_insn (bfd_vma, disassemble_info *);
44 static void dofloat (int);
45 static void OP_ST (int, int);
46 static void OP_STi (int, int);
47 static int putop (const char *, int);
48 static void oappend (const char *);
49 static void append_seg (void);
50 static void OP_indirE (int, int);
51 static void print_operand_value (char *, int, bfd_vma);
52 static void OP_E_register (int, int);
53 static void OP_E_memory (int, int);
54 static void print_displacement (char *, bfd_vma);
55 static void OP_E (int, int);
56 static void OP_G (int, int);
57 static bfd_vma get64 (void);
58 static bfd_signed_vma get32 (void);
59 static bfd_signed_vma get32s (void);
60 static int get16 (void);
61 static void set_op (bfd_vma, int);
62 static void OP_Skip_MODRM (int, int);
63 static void OP_REG (int, int);
64 static void OP_IMREG (int, int);
65 static void OP_I (int, int);
66 static void OP_I64 (int, int);
67 static void OP_sI (int, int);
68 static void OP_J (int, int);
69 static void OP_SEG (int, int);
70 static void OP_DIR (int, int);
71 static void OP_OFF (int, int);
72 static void OP_OFF64 (int, int);
73 static void ptr_reg (int, int);
74 static void OP_ESreg (int, int);
75 static void OP_DSreg (int, int);
76 static void OP_C (int, int);
77 static void OP_D (int, int);
78 static void OP_T (int, int);
79 static void OP_R (int, int);
80 static void OP_MMX (int, int);
81 static void OP_XMM (int, int);
82 static void OP_EM (int, int);
83 static void OP_EX (int, int);
84 static void OP_EMC (int,int);
85 static void OP_MXC (int,int);
86 static void OP_MS (int, int);
87 static void OP_XS (int, int);
88 static void OP_M (int, int);
89 static void OP_VEX (int, int);
90 static void OP_EX_Vex (int, int);
91 static void OP_EX_VexW (int, int);
92 static void OP_EX_VexImmW (int, int);
93 static void OP_XMM_Vex (int, int);
94 static void OP_XMM_VexW (int, int);
95 static void OP_Rounding (int, int);
96 static void OP_REG_VexI4 (int, int);
97 static void PCLMUL_Fixup (int, int);
98 static void VEXI4_Fixup (int, int);
99 static void VZERO_Fixup (int, int);
100 static void VCMP_Fixup (int, int);
101 static void VPCMP_Fixup (int, int);
102 static void OP_0f07 (int, int);
103 static void OP_Monitor (int, int);
104 static void OP_Mwait (int, int);
105 static void OP_Mwaitx (int, int);
106 static void NOP_Fixup1 (int, int);
107 static void NOP_Fixup2 (int, int);
108 static void OP_3DNowSuffix (int, int);
109 static void CMP_Fixup (int, int);
110 static void BadOp (void);
111 static void REP_Fixup (int, int);
112 static void BND_Fixup (int, int);
113 static void HLE_Fixup1 (int, int);
114 static void HLE_Fixup2 (int, int);
115 static void HLE_Fixup3 (int, int);
116 static void CMPXCHG8B_Fixup (int, int);
117 static void XMM_Fixup (int, int);
118 static void CRC32_Fixup (int, int);
119 static void FXSAVE_Fixup (int, int);
120 static void PCMPESTR_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   OPCODES_SIGJMP_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       OPCODES_SIGLONGJMP (priv->bailout, 1);
220     }
221   else
222     priv->max_fetched = addr;
223   return 1;
224 }
225 
226 /* Possible values for prefix requirement.  */
227 #define PREFIX_IGNORED_SHIFT	16
228 #define PREFIX_IGNORED_REPZ	(PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
229 #define PREFIX_IGNORED_REPNZ	(PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
230 #define PREFIX_IGNORED_DATA	(PREFIX_DATA << PREFIX_IGNORED_SHIFT)
231 #define PREFIX_IGNORED_ADDR	(PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
232 #define PREFIX_IGNORED_LOCK	(PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
233 
234 /* Opcode prefixes.  */
235 #define PREFIX_OPCODE		(PREFIX_REPZ \
236 				 | PREFIX_REPNZ \
237 				 | PREFIX_DATA)
238 
239 /* Prefixes ignored.  */
240 #define PREFIX_IGNORED		(PREFIX_IGNORED_REPZ \
241 				 | PREFIX_IGNORED_REPNZ \
242 				 | PREFIX_IGNORED_DATA)
243 
244 #define XX { NULL, 0 }
245 #define Bad_Opcode NULL, { { NULL, 0 } }, 0
246 
247 #define Eb { OP_E, b_mode }
248 #define Ebnd { OP_E, bnd_mode }
249 #define EbS { OP_E, b_swap_mode }
250 #define Ev { OP_E, v_mode }
251 #define Ev_bnd { OP_E, v_bnd_mode }
252 #define EvS { OP_E, v_swap_mode }
253 #define Ed { OP_E, d_mode }
254 #define Edq { OP_E, dq_mode }
255 #define Edqw { OP_E, dqw_mode }
256 #define Edqb { OP_E, dqb_mode }
257 #define Edb { OP_E, db_mode }
258 #define Edw { OP_E, dw_mode }
259 #define Edqd { OP_E, dqd_mode }
260 #define Eq { OP_E, q_mode }
261 #define indirEv { OP_indirE, indir_v_mode }
262 #define indirEp { OP_indirE, f_mode }
263 #define stackEv { OP_E, stack_v_mode }
264 #define Em { OP_E, m_mode }
265 #define Ew { OP_E, w_mode }
266 #define M { OP_M, 0 }		/* lea, lgdt, etc. */
267 #define Ma { OP_M, a_mode }
268 #define Mb { OP_M, b_mode }
269 #define Md { OP_M, d_mode }
270 #define Mo { OP_M, o_mode }
271 #define Mp { OP_M, f_mode }		/* 32 or 48 bit memory operand for LDS, LES etc */
272 #define Mq { OP_M, q_mode }
273 #define Mx { OP_M, x_mode }
274 #define Mxmm { OP_M, xmm_mode }
275 #define Gb { OP_G, b_mode }
276 #define Gbnd { OP_G, bnd_mode }
277 #define Gv { OP_G, v_mode }
278 #define Gd { OP_G, d_mode }
279 #define Gdq { OP_G, dq_mode }
280 #define Gm { OP_G, m_mode }
281 #define Gw { OP_G, w_mode }
282 #define Rd { OP_R, d_mode }
283 #define Rdq { OP_R, dq_mode }
284 #define Rm { OP_R, m_mode }
285 #define Ib { OP_I, b_mode }
286 #define sIb { OP_sI, b_mode }	/* sign extened byte */
287 #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
288 #define Iv { OP_I, v_mode }
289 #define sIv { OP_sI, v_mode }
290 #define Iq { OP_I, q_mode }
291 #define Iv64 { OP_I64, v_mode }
292 #define Iw { OP_I, w_mode }
293 #define I1 { OP_I, const_1_mode }
294 #define Jb { OP_J, b_mode }
295 #define Jv { OP_J, v_mode }
296 #define Cm { OP_C, m_mode }
297 #define Dm { OP_D, m_mode }
298 #define Td { OP_T, d_mode }
299 #define Skip_MODRM { OP_Skip_MODRM, 0 }
300 
301 #define RMeAX { OP_REG, eAX_reg }
302 #define RMeBX { OP_REG, eBX_reg }
303 #define RMeCX { OP_REG, eCX_reg }
304 #define RMeDX { OP_REG, eDX_reg }
305 #define RMeSP { OP_REG, eSP_reg }
306 #define RMeBP { OP_REG, eBP_reg }
307 #define RMeSI { OP_REG, eSI_reg }
308 #define RMeDI { OP_REG, eDI_reg }
309 #define RMrAX { OP_REG, rAX_reg }
310 #define RMrBX { OP_REG, rBX_reg }
311 #define RMrCX { OP_REG, rCX_reg }
312 #define RMrDX { OP_REG, rDX_reg }
313 #define RMrSP { OP_REG, rSP_reg }
314 #define RMrBP { OP_REG, rBP_reg }
315 #define RMrSI { OP_REG, rSI_reg }
316 #define RMrDI { OP_REG, rDI_reg }
317 #define RMAL { OP_REG, al_reg }
318 #define RMCL { OP_REG, cl_reg }
319 #define RMDL { OP_REG, dl_reg }
320 #define RMBL { OP_REG, bl_reg }
321 #define RMAH { OP_REG, ah_reg }
322 #define RMCH { OP_REG, ch_reg }
323 #define RMDH { OP_REG, dh_reg }
324 #define RMBH { OP_REG, bh_reg }
325 #define RMAX { OP_REG, ax_reg }
326 #define RMDX { OP_REG, dx_reg }
327 
328 #define eAX { OP_IMREG, eAX_reg }
329 #define eBX { OP_IMREG, eBX_reg }
330 #define eCX { OP_IMREG, eCX_reg }
331 #define eDX { OP_IMREG, eDX_reg }
332 #define eSP { OP_IMREG, eSP_reg }
333 #define eBP { OP_IMREG, eBP_reg }
334 #define eSI { OP_IMREG, eSI_reg }
335 #define eDI { OP_IMREG, eDI_reg }
336 #define AL { OP_IMREG, al_reg }
337 #define CL { OP_IMREG, cl_reg }
338 #define DL { OP_IMREG, dl_reg }
339 #define BL { OP_IMREG, bl_reg }
340 #define AH { OP_IMREG, ah_reg }
341 #define CH { OP_IMREG, ch_reg }
342 #define DH { OP_IMREG, dh_reg }
343 #define BH { OP_IMREG, bh_reg }
344 #define AX { OP_IMREG, ax_reg }
345 #define DX { OP_IMREG, dx_reg }
346 #define zAX { OP_IMREG, z_mode_ax_reg }
347 #define indirDX { OP_IMREG, indir_dx_reg }
348 
349 #define Sw { OP_SEG, w_mode }
350 #define Sv { OP_SEG, v_mode }
351 #define Ap { OP_DIR, 0 }
352 #define Ob { OP_OFF64, b_mode }
353 #define Ov { OP_OFF64, v_mode }
354 #define Xb { OP_DSreg, eSI_reg }
355 #define Xv { OP_DSreg, eSI_reg }
356 #define Xz { OP_DSreg, eSI_reg }
357 #define Yb { OP_ESreg, eDI_reg }
358 #define Yv { OP_ESreg, eDI_reg }
359 #define DSBX { OP_DSreg, eBX_reg }
360 
361 #define es { OP_REG, es_reg }
362 #define ss { OP_REG, ss_reg }
363 #define cs { OP_REG, cs_reg }
364 #define ds { OP_REG, ds_reg }
365 #define fs { OP_REG, fs_reg }
366 #define gs { OP_REG, gs_reg }
367 
368 #define MX { OP_MMX, 0 }
369 #define XM { OP_XMM, 0 }
370 #define XMScalar { OP_XMM, scalar_mode }
371 #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
372 #define XMM { OP_XMM, xmm_mode }
373 #define XMxmmq { OP_XMM, xmmq_mode }
374 #define EM { OP_EM, v_mode }
375 #define EMS { OP_EM, v_swap_mode }
376 #define EMd { OP_EM, d_mode }
377 #define EMx { OP_EM, x_mode }
378 #define EXw { OP_EX, w_mode }
379 #define EXd { OP_EX, d_mode }
380 #define EXdScalar { OP_EX, d_scalar_mode }
381 #define EXdS { OP_EX, d_swap_mode }
382 #define EXdScalarS { OP_EX, d_scalar_swap_mode }
383 #define EXq { OP_EX, q_mode }
384 #define EXqScalar { OP_EX, q_scalar_mode }
385 #define EXqScalarS { OP_EX, q_scalar_swap_mode }
386 #define EXqS { OP_EX, q_swap_mode }
387 #define EXx { OP_EX, x_mode }
388 #define EXxS { OP_EX, x_swap_mode }
389 #define EXxmm { OP_EX, xmm_mode }
390 #define EXymm { OP_EX, ymm_mode }
391 #define EXxmmq { OP_EX, xmmq_mode }
392 #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
393 #define EXxmm_mb { OP_EX, xmm_mb_mode }
394 #define EXxmm_mw { OP_EX, xmm_mw_mode }
395 #define EXxmm_md { OP_EX, xmm_md_mode }
396 #define EXxmm_mq { OP_EX, xmm_mq_mode }
397 #define EXxmm_mdq { OP_EX, xmm_mdq_mode }
398 #define EXxmmdw { OP_EX, xmmdw_mode }
399 #define EXxmmqd { OP_EX, xmmqd_mode }
400 #define EXymmq { OP_EX, ymmq_mode }
401 #define EXVexWdq { OP_EX, vex_w_dq_mode }
402 #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
403 #define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
404 #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
405 #define MS { OP_MS, v_mode }
406 #define XS { OP_XS, v_mode }
407 #define EMCq { OP_EMC, q_mode }
408 #define MXC { OP_MXC, 0 }
409 #define OPSUF { OP_3DNowSuffix, 0 }
410 #define CMP { CMP_Fixup, 0 }
411 #define XMM0 { XMM_Fixup, 0 }
412 #define FXSAVE { FXSAVE_Fixup, 0 }
413 #define Vex_2src_1 { OP_Vex_2src_1, 0 }
414 #define Vex_2src_2 { OP_Vex_2src_2, 0 }
415 
416 #define Vex { OP_VEX, vex_mode }
417 #define VexScalar { OP_VEX, vex_scalar_mode }
418 #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
419 #define Vex128 { OP_VEX, vex128_mode }
420 #define Vex256 { OP_VEX, vex256_mode }
421 #define VexGdq { OP_VEX, dq_mode }
422 #define VexI4 { VEXI4_Fixup, 0}
423 #define EXdVex { OP_EX_Vex, d_mode }
424 #define EXdVexS { OP_EX_Vex, d_swap_mode }
425 #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
426 #define EXqVex { OP_EX_Vex, q_mode }
427 #define EXqVexS { OP_EX_Vex, q_swap_mode }
428 #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
429 #define EXVexW { OP_EX_VexW, x_mode }
430 #define EXdVexW { OP_EX_VexW, d_mode }
431 #define EXqVexW { OP_EX_VexW, q_mode }
432 #define EXVexImmW { OP_EX_VexImmW, x_mode }
433 #define XMVex { OP_XMM_Vex, 0 }
434 #define XMVexScalar { OP_XMM_Vex, scalar_mode }
435 #define XMVexW { OP_XMM_VexW, 0 }
436 #define XMVexI4 { OP_REG_VexI4, x_mode }
437 #define PCLMUL { PCLMUL_Fixup, 0 }
438 #define VZERO { VZERO_Fixup, 0 }
439 #define VCMP { VCMP_Fixup, 0 }
440 #define VPCMP { VPCMP_Fixup, 0 }
441 
442 #define EXxEVexR { OP_Rounding, evex_rounding_mode }
443 #define EXxEVexS { OP_Rounding, evex_sae_mode }
444 
445 #define XMask { OP_Mask, mask_mode }
446 #define MaskG { OP_G, mask_mode }
447 #define MaskE { OP_E, mask_mode }
448 #define MaskBDE { OP_E, mask_bd_mode }
449 #define MaskR { OP_R, mask_mode }
450 #define MaskVex { OP_VEX, mask_mode }
451 
452 #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
453 #define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
454 #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
455 #define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
456 
457 /* Used handle "rep" prefix for string instructions.  */
458 #define Xbr { REP_Fixup, eSI_reg }
459 #define Xvr { REP_Fixup, eSI_reg }
460 #define Ybr { REP_Fixup, eDI_reg }
461 #define Yvr { REP_Fixup, eDI_reg }
462 #define Yzr { REP_Fixup, eDI_reg }
463 #define indirDXr { REP_Fixup, indir_dx_reg }
464 #define ALr { REP_Fixup, al_reg }
465 #define eAXr { REP_Fixup, eAX_reg }
466 
467 /* Used handle HLE prefix for lockable instructions.  */
468 #define Ebh1 { HLE_Fixup1, b_mode }
469 #define Evh1 { HLE_Fixup1, v_mode }
470 #define Ebh2 { HLE_Fixup2, b_mode }
471 #define Evh2 { HLE_Fixup2, v_mode }
472 #define Ebh3 { HLE_Fixup3, b_mode }
473 #define Evh3 { HLE_Fixup3, v_mode }
474 
475 #define BND { BND_Fixup, 0 }
476 
477 #define cond_jump_flag { NULL, cond_jump_mode }
478 #define loop_jcxz_flag { NULL, loop_jcxz_mode }
479 
480 /* bits in sizeflag */
481 #define SUFFIX_ALWAYS 4
482 #define AFLAG 2
483 #define DFLAG 1
484 
485 enum
486 {
487   /* byte operand */
488   b_mode = 1,
489   /* byte operand with operand swapped */
490   b_swap_mode,
491   /* byte operand, sign extend like 'T' suffix */
492   b_T_mode,
493   /* operand size depends on prefixes */
494   v_mode,
495   /* operand size depends on prefixes with operand swapped */
496   v_swap_mode,
497   /* word operand */
498   w_mode,
499   /* double word operand  */
500   d_mode,
501   /* double word operand with operand swapped */
502   d_swap_mode,
503   /* quad word operand */
504   q_mode,
505   /* quad word operand with operand swapped */
506   q_swap_mode,
507   /* ten-byte operand */
508   t_mode,
509   /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand.  In EVEX with
510      broadcast enabled.  */
511   x_mode,
512   /* Similar to x_mode, but with different EVEX mem shifts.  */
513   evex_x_gscat_mode,
514   /* Similar to x_mode, but with disabled broadcast.  */
515   evex_x_nobcst_mode,
516   /* Similar to x_mode, but with operands swapped and disabled broadcast
517      in EVEX.  */
518   x_swap_mode,
519   /* 16-byte XMM operand */
520   xmm_mode,
521   /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
522      memory operand (depending on vector length).  Broadcast isn't
523      allowed.  */
524   xmmq_mode,
525   /* Same as xmmq_mode, but broadcast is allowed.  */
526   evex_half_bcst_xmmq_mode,
527   /* XMM register or byte memory operand */
528   xmm_mb_mode,
529   /* XMM register or word memory operand */
530   xmm_mw_mode,
531   /* XMM register or double word memory operand */
532   xmm_md_mode,
533   /* XMM register or quad word memory operand */
534   xmm_mq_mode,
535   /* XMM register or double/quad word memory operand, depending on
536      VEX.W.  */
537   xmm_mdq_mode,
538   /* 16-byte XMM, word, double word or quad word operand.  */
539   xmmdw_mode,
540   /* 16-byte XMM, double word, quad word operand or xmm word operand.  */
541   xmmqd_mode,
542   /* 32-byte YMM operand */
543   ymm_mode,
544   /* quad word, ymmword or zmmword memory operand.  */
545   ymmq_mode,
546   /* 32-byte YMM or 16-byte word operand */
547   ymmxmm_mode,
548   /* d_mode in 32bit, q_mode in 64bit mode.  */
549   m_mode,
550   /* pair of v_mode operands */
551   a_mode,
552   cond_jump_mode,
553   loop_jcxz_mode,
554   v_bnd_mode,
555   /* operand size depends on REX prefixes.  */
556   dq_mode,
557   /* registers like dq_mode, memory like w_mode.  */
558   dqw_mode,
559   bnd_mode,
560   /* 4- or 6-byte pointer operand */
561   f_mode,
562   const_1_mode,
563   /* v_mode for indirect branch opcodes.  */
564   indir_v_mode,
565   /* v_mode for stack-related opcodes.  */
566   stack_v_mode,
567   /* non-quad operand size depends on prefixes */
568   z_mode,
569   /* 16-byte operand */
570   o_mode,
571   /* registers like dq_mode, memory like b_mode.  */
572   dqb_mode,
573   /* registers like d_mode, memory like b_mode.  */
574   db_mode,
575   /* registers like d_mode, memory like w_mode.  */
576   dw_mode,
577   /* registers like dq_mode, memory like d_mode.  */
578   dqd_mode,
579   /* normal vex mode */
580   vex_mode,
581   /* 128bit vex mode */
582   vex128_mode,
583   /* 256bit vex mode */
584   vex256_mode,
585   /* operand size depends on the VEX.W bit.  */
586   vex_w_dq_mode,
587 
588   /* Similar to vex_w_dq_mode, with VSIB dword indices.  */
589   vex_vsib_d_w_dq_mode,
590   /* Similar to vex_vsib_d_w_dq_mode, with smaller memory.  */
591   vex_vsib_d_w_d_mode,
592   /* Similar to vex_w_dq_mode, with VSIB qword indices.  */
593   vex_vsib_q_w_dq_mode,
594   /* Similar to vex_vsib_q_w_dq_mode, with smaller memory.  */
595   vex_vsib_q_w_d_mode,
596 
597   /* scalar, ignore vector length.  */
598   scalar_mode,
599   /* like d_mode, ignore vector length.  */
600   d_scalar_mode,
601   /* like d_swap_mode, ignore vector length.  */
602   d_scalar_swap_mode,
603   /* like q_mode, ignore vector length.  */
604   q_scalar_mode,
605   /* like q_swap_mode, ignore vector length.  */
606   q_scalar_swap_mode,
607   /* like vex_mode, ignore vector length.  */
608   vex_scalar_mode,
609   /* like vex_w_dq_mode, ignore vector length.  */
610   vex_scalar_w_dq_mode,
611 
612   /* Static rounding.  */
613   evex_rounding_mode,
614   /* Supress all exceptions.  */
615   evex_sae_mode,
616 
617   /* Mask register operand.  */
618   mask_mode,
619   /* Mask register operand.  */
620   mask_bd_mode,
621 
622   es_reg,
623   cs_reg,
624   ss_reg,
625   ds_reg,
626   fs_reg,
627   gs_reg,
628 
629   eAX_reg,
630   eCX_reg,
631   eDX_reg,
632   eBX_reg,
633   eSP_reg,
634   eBP_reg,
635   eSI_reg,
636   eDI_reg,
637 
638   al_reg,
639   cl_reg,
640   dl_reg,
641   bl_reg,
642   ah_reg,
643   ch_reg,
644   dh_reg,
645   bh_reg,
646 
647   ax_reg,
648   cx_reg,
649   dx_reg,
650   bx_reg,
651   sp_reg,
652   bp_reg,
653   si_reg,
654   di_reg,
655 
656   rAX_reg,
657   rCX_reg,
658   rDX_reg,
659   rBX_reg,
660   rSP_reg,
661   rBP_reg,
662   rSI_reg,
663   rDI_reg,
664 
665   z_mode_ax_reg,
666   indir_dx_reg
667 };
668 
669 enum
670 {
671   FLOATCODE = 1,
672   USE_REG_TABLE,
673   USE_MOD_TABLE,
674   USE_RM_TABLE,
675   USE_PREFIX_TABLE,
676   USE_X86_64_TABLE,
677   USE_3BYTE_TABLE,
678   USE_XOP_8F_TABLE,
679   USE_VEX_C4_TABLE,
680   USE_VEX_C5_TABLE,
681   USE_VEX_LEN_TABLE,
682   USE_VEX_W_TABLE,
683   USE_EVEX_TABLE
684 };
685 
686 #define FLOAT			NULL, { { NULL, FLOATCODE } }, 0
687 
688 #define DIS386(T, I)		NULL, { { NULL, (T)}, { NULL,  (I) } }, 0
689 #define DIS386_PREFIX(T, I, P)		NULL, { { NULL, (T)}, { NULL,  (I) } }, P
690 #define REG_TABLE(I)		DIS386 (USE_REG_TABLE, (I))
691 #define MOD_TABLE(I)		DIS386 (USE_MOD_TABLE, (I))
692 #define RM_TABLE(I)		DIS386 (USE_RM_TABLE, (I))
693 #define PREFIX_TABLE(I)		DIS386 (USE_PREFIX_TABLE, (I))
694 #define X86_64_TABLE(I)		DIS386 (USE_X86_64_TABLE, (I))
695 #define THREE_BYTE_TABLE(I)	DIS386 (USE_3BYTE_TABLE, (I))
696 #define THREE_BYTE_TABLE_PREFIX(I, P)	DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
697 #define XOP_8F_TABLE(I)		DIS386 (USE_XOP_8F_TABLE, (I))
698 #define VEX_C4_TABLE(I)		DIS386 (USE_VEX_C4_TABLE, (I))
699 #define VEX_C5_TABLE(I)		DIS386 (USE_VEX_C5_TABLE, (I))
700 #define VEX_LEN_TABLE(I)	DIS386 (USE_VEX_LEN_TABLE, (I))
701 #define VEX_W_TABLE(I)		DIS386 (USE_VEX_W_TABLE, (I))
702 #define EVEX_TABLE(I)		DIS386 (USE_EVEX_TABLE, (I))
703 
704 enum
705 {
706   REG_80 = 0,
707   REG_81,
708   REG_83,
709   REG_8F,
710   REG_C0,
711   REG_C1,
712   REG_C6,
713   REG_C7,
714   REG_D0,
715   REG_D1,
716   REG_D2,
717   REG_D3,
718   REG_F6,
719   REG_F7,
720   REG_FE,
721   REG_FF,
722   REG_0F00,
723   REG_0F01,
724   REG_0F0D,
725   REG_0F18,
726   REG_0F1E_MOD_3,
727   REG_0F71,
728   REG_0F72,
729   REG_0F73,
730   REG_0FA6,
731   REG_0FA7,
732   REG_0FAE,
733   REG_0FBA,
734   REG_0FC7,
735   REG_VEX_0F71,
736   REG_VEX_0F72,
737   REG_VEX_0F73,
738   REG_VEX_0FAE,
739   REG_VEX_0F38F3,
740   REG_XOP_LWPCB,
741   REG_XOP_LWP,
742   REG_XOP_TBM_01,
743   REG_XOP_TBM_02,
744 
745   REG_EVEX_0F71,
746   REG_EVEX_0F72,
747   REG_EVEX_0F73,
748   REG_EVEX_0F38C6,
749   REG_EVEX_0F38C7
750 };
751 
752 enum
753 {
754   MOD_8D = 0,
755   MOD_C6_REG_7,
756   MOD_C7_REG_7,
757   MOD_FF_REG_3,
758   MOD_FF_REG_5,
759   MOD_0F01_REG_0,
760   MOD_0F01_REG_1,
761   MOD_0F01_REG_2,
762   MOD_0F01_REG_3,
763   MOD_0F01_REG_5,
764   MOD_0F01_REG_7,
765   MOD_0F12_PREFIX_0,
766   MOD_0F13,
767   MOD_0F16_PREFIX_0,
768   MOD_0F17,
769   MOD_0F18_REG_0,
770   MOD_0F18_REG_1,
771   MOD_0F18_REG_2,
772   MOD_0F18_REG_3,
773   MOD_0F18_REG_4,
774   MOD_0F18_REG_5,
775   MOD_0F18_REG_6,
776   MOD_0F18_REG_7,
777   MOD_0F1A_PREFIX_0,
778   MOD_0F1B_PREFIX_0,
779   MOD_0F1B_PREFIX_1,
780   MOD_0F1E_PREFIX_1,
781   MOD_0F24,
782   MOD_0F26,
783   MOD_0F2B_PREFIX_0,
784   MOD_0F2B_PREFIX_1,
785   MOD_0F2B_PREFIX_2,
786   MOD_0F2B_PREFIX_3,
787   MOD_0F51,
788   MOD_0F71_REG_2,
789   MOD_0F71_REG_4,
790   MOD_0F71_REG_6,
791   MOD_0F72_REG_2,
792   MOD_0F72_REG_4,
793   MOD_0F72_REG_6,
794   MOD_0F73_REG_2,
795   MOD_0F73_REG_3,
796   MOD_0F73_REG_6,
797   MOD_0F73_REG_7,
798   MOD_0FAE_REG_0,
799   MOD_0FAE_REG_1,
800   MOD_0FAE_REG_2,
801   MOD_0FAE_REG_3,
802   MOD_0FAE_REG_4,
803   MOD_0FAE_REG_5,
804   MOD_0FAE_REG_6,
805   MOD_0FAE_REG_7,
806   MOD_0FB2,
807   MOD_0FB4,
808   MOD_0FB5,
809   MOD_0FC3,
810   MOD_0FC7_REG_3,
811   MOD_0FC7_REG_4,
812   MOD_0FC7_REG_5,
813   MOD_0FC7_REG_6,
814   MOD_0FC7_REG_7,
815   MOD_0FD7,
816   MOD_0FE7_PREFIX_2,
817   MOD_0FF0_PREFIX_3,
818   MOD_0F382A_PREFIX_2,
819   MOD_0F38F5_PREFIX_2,
820   MOD_0F38F6_PREFIX_0,
821   MOD_62_32BIT,
822   MOD_C4_32BIT,
823   MOD_C5_32BIT,
824   MOD_VEX_0F12_PREFIX_0,
825   MOD_VEX_0F13,
826   MOD_VEX_0F16_PREFIX_0,
827   MOD_VEX_0F17,
828   MOD_VEX_0F2B,
829   MOD_VEX_W_0_0F41_P_0_LEN_1,
830   MOD_VEX_W_1_0F41_P_0_LEN_1,
831   MOD_VEX_W_0_0F41_P_2_LEN_1,
832   MOD_VEX_W_1_0F41_P_2_LEN_1,
833   MOD_VEX_W_0_0F42_P_0_LEN_1,
834   MOD_VEX_W_1_0F42_P_0_LEN_1,
835   MOD_VEX_W_0_0F42_P_2_LEN_1,
836   MOD_VEX_W_1_0F42_P_2_LEN_1,
837   MOD_VEX_W_0_0F44_P_0_LEN_1,
838   MOD_VEX_W_1_0F44_P_0_LEN_1,
839   MOD_VEX_W_0_0F44_P_2_LEN_1,
840   MOD_VEX_W_1_0F44_P_2_LEN_1,
841   MOD_VEX_W_0_0F45_P_0_LEN_1,
842   MOD_VEX_W_1_0F45_P_0_LEN_1,
843   MOD_VEX_W_0_0F45_P_2_LEN_1,
844   MOD_VEX_W_1_0F45_P_2_LEN_1,
845   MOD_VEX_W_0_0F46_P_0_LEN_1,
846   MOD_VEX_W_1_0F46_P_0_LEN_1,
847   MOD_VEX_W_0_0F46_P_2_LEN_1,
848   MOD_VEX_W_1_0F46_P_2_LEN_1,
849   MOD_VEX_W_0_0F47_P_0_LEN_1,
850   MOD_VEX_W_1_0F47_P_0_LEN_1,
851   MOD_VEX_W_0_0F47_P_2_LEN_1,
852   MOD_VEX_W_1_0F47_P_2_LEN_1,
853   MOD_VEX_W_0_0F4A_P_0_LEN_1,
854   MOD_VEX_W_1_0F4A_P_0_LEN_1,
855   MOD_VEX_W_0_0F4A_P_2_LEN_1,
856   MOD_VEX_W_1_0F4A_P_2_LEN_1,
857   MOD_VEX_W_0_0F4B_P_0_LEN_1,
858   MOD_VEX_W_1_0F4B_P_0_LEN_1,
859   MOD_VEX_W_0_0F4B_P_2_LEN_1,
860   MOD_VEX_0F50,
861   MOD_VEX_0F71_REG_2,
862   MOD_VEX_0F71_REG_4,
863   MOD_VEX_0F71_REG_6,
864   MOD_VEX_0F72_REG_2,
865   MOD_VEX_0F72_REG_4,
866   MOD_VEX_0F72_REG_6,
867   MOD_VEX_0F73_REG_2,
868   MOD_VEX_0F73_REG_3,
869   MOD_VEX_0F73_REG_6,
870   MOD_VEX_0F73_REG_7,
871   MOD_VEX_W_0_0F91_P_0_LEN_0,
872   MOD_VEX_W_1_0F91_P_0_LEN_0,
873   MOD_VEX_W_0_0F91_P_2_LEN_0,
874   MOD_VEX_W_1_0F91_P_2_LEN_0,
875   MOD_VEX_W_0_0F92_P_0_LEN_0,
876   MOD_VEX_W_0_0F92_P_2_LEN_0,
877   MOD_VEX_W_0_0F92_P_3_LEN_0,
878   MOD_VEX_W_1_0F92_P_3_LEN_0,
879   MOD_VEX_W_0_0F93_P_0_LEN_0,
880   MOD_VEX_W_0_0F93_P_2_LEN_0,
881   MOD_VEX_W_0_0F93_P_3_LEN_0,
882   MOD_VEX_W_1_0F93_P_3_LEN_0,
883   MOD_VEX_W_0_0F98_P_0_LEN_0,
884   MOD_VEX_W_1_0F98_P_0_LEN_0,
885   MOD_VEX_W_0_0F98_P_2_LEN_0,
886   MOD_VEX_W_1_0F98_P_2_LEN_0,
887   MOD_VEX_W_0_0F99_P_0_LEN_0,
888   MOD_VEX_W_1_0F99_P_0_LEN_0,
889   MOD_VEX_W_0_0F99_P_2_LEN_0,
890   MOD_VEX_W_1_0F99_P_2_LEN_0,
891   MOD_VEX_0FAE_REG_2,
892   MOD_VEX_0FAE_REG_3,
893   MOD_VEX_0FD7_PREFIX_2,
894   MOD_VEX_0FE7_PREFIX_2,
895   MOD_VEX_0FF0_PREFIX_3,
896   MOD_VEX_0F381A_PREFIX_2,
897   MOD_VEX_0F382A_PREFIX_2,
898   MOD_VEX_0F382C_PREFIX_2,
899   MOD_VEX_0F382D_PREFIX_2,
900   MOD_VEX_0F382E_PREFIX_2,
901   MOD_VEX_0F382F_PREFIX_2,
902   MOD_VEX_0F385A_PREFIX_2,
903   MOD_VEX_0F388C_PREFIX_2,
904   MOD_VEX_0F388E_PREFIX_2,
905   MOD_VEX_W_0_0F3A30_P_2_LEN_0,
906   MOD_VEX_W_1_0F3A30_P_2_LEN_0,
907   MOD_VEX_W_0_0F3A31_P_2_LEN_0,
908   MOD_VEX_W_1_0F3A31_P_2_LEN_0,
909   MOD_VEX_W_0_0F3A32_P_2_LEN_0,
910   MOD_VEX_W_1_0F3A32_P_2_LEN_0,
911   MOD_VEX_W_0_0F3A33_P_2_LEN_0,
912   MOD_VEX_W_1_0F3A33_P_2_LEN_0,
913 
914   MOD_EVEX_0F10_PREFIX_1,
915   MOD_EVEX_0F10_PREFIX_3,
916   MOD_EVEX_0F11_PREFIX_1,
917   MOD_EVEX_0F11_PREFIX_3,
918   MOD_EVEX_0F12_PREFIX_0,
919   MOD_EVEX_0F16_PREFIX_0,
920   MOD_EVEX_0F38C6_REG_1,
921   MOD_EVEX_0F38C6_REG_2,
922   MOD_EVEX_0F38C6_REG_5,
923   MOD_EVEX_0F38C6_REG_6,
924   MOD_EVEX_0F38C7_REG_1,
925   MOD_EVEX_0F38C7_REG_2,
926   MOD_EVEX_0F38C7_REG_5,
927   MOD_EVEX_0F38C7_REG_6
928 };
929 
930 enum
931 {
932   RM_C6_REG_7 = 0,
933   RM_C7_REG_7,
934   RM_0F01_REG_0,
935   RM_0F01_REG_1,
936   RM_0F01_REG_2,
937   RM_0F01_REG_3,
938   RM_0F01_REG_5,
939   RM_0F01_REG_7,
940   RM_0F1E_MOD_3_REG_7,
941   RM_0FAE_REG_5,
942   RM_0FAE_REG_6,
943   RM_0FAE_REG_7
944 };
945 
946 enum
947 {
948   PREFIX_90 = 0,
949   PREFIX_MOD_0_0F01_REG_5,
950   PREFIX_MOD_3_0F01_REG_5_RM_1,
951   PREFIX_MOD_3_0F01_REG_5_RM_2,
952   PREFIX_0F10,
953   PREFIX_0F11,
954   PREFIX_0F12,
955   PREFIX_0F16,
956   PREFIX_0F1A,
957   PREFIX_0F1B,
958   PREFIX_0F1E,
959   PREFIX_0F2A,
960   PREFIX_0F2B,
961   PREFIX_0F2C,
962   PREFIX_0F2D,
963   PREFIX_0F2E,
964   PREFIX_0F2F,
965   PREFIX_0F51,
966   PREFIX_0F52,
967   PREFIX_0F53,
968   PREFIX_0F58,
969   PREFIX_0F59,
970   PREFIX_0F5A,
971   PREFIX_0F5B,
972   PREFIX_0F5C,
973   PREFIX_0F5D,
974   PREFIX_0F5E,
975   PREFIX_0F5F,
976   PREFIX_0F60,
977   PREFIX_0F61,
978   PREFIX_0F62,
979   PREFIX_0F6C,
980   PREFIX_0F6D,
981   PREFIX_0F6F,
982   PREFIX_0F70,
983   PREFIX_0F73_REG_3,
984   PREFIX_0F73_REG_7,
985   PREFIX_0F78,
986   PREFIX_0F79,
987   PREFIX_0F7C,
988   PREFIX_0F7D,
989   PREFIX_0F7E,
990   PREFIX_0F7F,
991   PREFIX_0FAE_REG_0,
992   PREFIX_0FAE_REG_1,
993   PREFIX_0FAE_REG_2,
994   PREFIX_0FAE_REG_3,
995   PREFIX_MOD_0_0FAE_REG_4,
996   PREFIX_MOD_3_0FAE_REG_4,
997   PREFIX_MOD_0_0FAE_REG_5,
998   PREFIX_0FAE_REG_6,
999   PREFIX_0FAE_REG_7,
1000   PREFIX_0FB8,
1001   PREFIX_0FBC,
1002   PREFIX_0FBD,
1003   PREFIX_0FC2,
1004   PREFIX_MOD_0_0FC3,
1005   PREFIX_MOD_0_0FC7_REG_6,
1006   PREFIX_MOD_3_0FC7_REG_6,
1007   PREFIX_MOD_3_0FC7_REG_7,
1008   PREFIX_0FD0,
1009   PREFIX_0FD6,
1010   PREFIX_0FE6,
1011   PREFIX_0FE7,
1012   PREFIX_0FF0,
1013   PREFIX_0FF7,
1014   PREFIX_0F3810,
1015   PREFIX_0F3814,
1016   PREFIX_0F3815,
1017   PREFIX_0F3817,
1018   PREFIX_0F3820,
1019   PREFIX_0F3821,
1020   PREFIX_0F3822,
1021   PREFIX_0F3823,
1022   PREFIX_0F3824,
1023   PREFIX_0F3825,
1024   PREFIX_0F3828,
1025   PREFIX_0F3829,
1026   PREFIX_0F382A,
1027   PREFIX_0F382B,
1028   PREFIX_0F3830,
1029   PREFIX_0F3831,
1030   PREFIX_0F3832,
1031   PREFIX_0F3833,
1032   PREFIX_0F3834,
1033   PREFIX_0F3835,
1034   PREFIX_0F3837,
1035   PREFIX_0F3838,
1036   PREFIX_0F3839,
1037   PREFIX_0F383A,
1038   PREFIX_0F383B,
1039   PREFIX_0F383C,
1040   PREFIX_0F383D,
1041   PREFIX_0F383E,
1042   PREFIX_0F383F,
1043   PREFIX_0F3840,
1044   PREFIX_0F3841,
1045   PREFIX_0F3880,
1046   PREFIX_0F3881,
1047   PREFIX_0F3882,
1048   PREFIX_0F38C8,
1049   PREFIX_0F38C9,
1050   PREFIX_0F38CA,
1051   PREFIX_0F38CB,
1052   PREFIX_0F38CC,
1053   PREFIX_0F38CD,
1054   PREFIX_0F38DB,
1055   PREFIX_0F38DC,
1056   PREFIX_0F38DD,
1057   PREFIX_0F38DE,
1058   PREFIX_0F38DF,
1059   PREFIX_0F38F0,
1060   PREFIX_0F38F1,
1061   PREFIX_0F38F5,
1062   PREFIX_0F38F6,
1063   PREFIX_0F3A08,
1064   PREFIX_0F3A09,
1065   PREFIX_0F3A0A,
1066   PREFIX_0F3A0B,
1067   PREFIX_0F3A0C,
1068   PREFIX_0F3A0D,
1069   PREFIX_0F3A0E,
1070   PREFIX_0F3A14,
1071   PREFIX_0F3A15,
1072   PREFIX_0F3A16,
1073   PREFIX_0F3A17,
1074   PREFIX_0F3A20,
1075   PREFIX_0F3A21,
1076   PREFIX_0F3A22,
1077   PREFIX_0F3A40,
1078   PREFIX_0F3A41,
1079   PREFIX_0F3A42,
1080   PREFIX_0F3A44,
1081   PREFIX_0F3A60,
1082   PREFIX_0F3A61,
1083   PREFIX_0F3A62,
1084   PREFIX_0F3A63,
1085   PREFIX_0F3ACC,
1086   PREFIX_0F3ADF,
1087   PREFIX_VEX_0F10,
1088   PREFIX_VEX_0F11,
1089   PREFIX_VEX_0F12,
1090   PREFIX_VEX_0F16,
1091   PREFIX_VEX_0F2A,
1092   PREFIX_VEX_0F2C,
1093   PREFIX_VEX_0F2D,
1094   PREFIX_VEX_0F2E,
1095   PREFIX_VEX_0F2F,
1096   PREFIX_VEX_0F41,
1097   PREFIX_VEX_0F42,
1098   PREFIX_VEX_0F44,
1099   PREFIX_VEX_0F45,
1100   PREFIX_VEX_0F46,
1101   PREFIX_VEX_0F47,
1102   PREFIX_VEX_0F4A,
1103   PREFIX_VEX_0F4B,
1104   PREFIX_VEX_0F51,
1105   PREFIX_VEX_0F52,
1106   PREFIX_VEX_0F53,
1107   PREFIX_VEX_0F58,
1108   PREFIX_VEX_0F59,
1109   PREFIX_VEX_0F5A,
1110   PREFIX_VEX_0F5B,
1111   PREFIX_VEX_0F5C,
1112   PREFIX_VEX_0F5D,
1113   PREFIX_VEX_0F5E,
1114   PREFIX_VEX_0F5F,
1115   PREFIX_VEX_0F60,
1116   PREFIX_VEX_0F61,
1117   PREFIX_VEX_0F62,
1118   PREFIX_VEX_0F63,
1119   PREFIX_VEX_0F64,
1120   PREFIX_VEX_0F65,
1121   PREFIX_VEX_0F66,
1122   PREFIX_VEX_0F67,
1123   PREFIX_VEX_0F68,
1124   PREFIX_VEX_0F69,
1125   PREFIX_VEX_0F6A,
1126   PREFIX_VEX_0F6B,
1127   PREFIX_VEX_0F6C,
1128   PREFIX_VEX_0F6D,
1129   PREFIX_VEX_0F6E,
1130   PREFIX_VEX_0F6F,
1131   PREFIX_VEX_0F70,
1132   PREFIX_VEX_0F71_REG_2,
1133   PREFIX_VEX_0F71_REG_4,
1134   PREFIX_VEX_0F71_REG_6,
1135   PREFIX_VEX_0F72_REG_2,
1136   PREFIX_VEX_0F72_REG_4,
1137   PREFIX_VEX_0F72_REG_6,
1138   PREFIX_VEX_0F73_REG_2,
1139   PREFIX_VEX_0F73_REG_3,
1140   PREFIX_VEX_0F73_REG_6,
1141   PREFIX_VEX_0F73_REG_7,
1142   PREFIX_VEX_0F74,
1143   PREFIX_VEX_0F75,
1144   PREFIX_VEX_0F76,
1145   PREFIX_VEX_0F77,
1146   PREFIX_VEX_0F7C,
1147   PREFIX_VEX_0F7D,
1148   PREFIX_VEX_0F7E,
1149   PREFIX_VEX_0F7F,
1150   PREFIX_VEX_0F90,
1151   PREFIX_VEX_0F91,
1152   PREFIX_VEX_0F92,
1153   PREFIX_VEX_0F93,
1154   PREFIX_VEX_0F98,
1155   PREFIX_VEX_0F99,
1156   PREFIX_VEX_0FC2,
1157   PREFIX_VEX_0FC4,
1158   PREFIX_VEX_0FC5,
1159   PREFIX_VEX_0FD0,
1160   PREFIX_VEX_0FD1,
1161   PREFIX_VEX_0FD2,
1162   PREFIX_VEX_0FD3,
1163   PREFIX_VEX_0FD4,
1164   PREFIX_VEX_0FD5,
1165   PREFIX_VEX_0FD6,
1166   PREFIX_VEX_0FD7,
1167   PREFIX_VEX_0FD8,
1168   PREFIX_VEX_0FD9,
1169   PREFIX_VEX_0FDA,
1170   PREFIX_VEX_0FDB,
1171   PREFIX_VEX_0FDC,
1172   PREFIX_VEX_0FDD,
1173   PREFIX_VEX_0FDE,
1174   PREFIX_VEX_0FDF,
1175   PREFIX_VEX_0FE0,
1176   PREFIX_VEX_0FE1,
1177   PREFIX_VEX_0FE2,
1178   PREFIX_VEX_0FE3,
1179   PREFIX_VEX_0FE4,
1180   PREFIX_VEX_0FE5,
1181   PREFIX_VEX_0FE6,
1182   PREFIX_VEX_0FE7,
1183   PREFIX_VEX_0FE8,
1184   PREFIX_VEX_0FE9,
1185   PREFIX_VEX_0FEA,
1186   PREFIX_VEX_0FEB,
1187   PREFIX_VEX_0FEC,
1188   PREFIX_VEX_0FED,
1189   PREFIX_VEX_0FEE,
1190   PREFIX_VEX_0FEF,
1191   PREFIX_VEX_0FF0,
1192   PREFIX_VEX_0FF1,
1193   PREFIX_VEX_0FF2,
1194   PREFIX_VEX_0FF3,
1195   PREFIX_VEX_0FF4,
1196   PREFIX_VEX_0FF5,
1197   PREFIX_VEX_0FF6,
1198   PREFIX_VEX_0FF7,
1199   PREFIX_VEX_0FF8,
1200   PREFIX_VEX_0FF9,
1201   PREFIX_VEX_0FFA,
1202   PREFIX_VEX_0FFB,
1203   PREFIX_VEX_0FFC,
1204   PREFIX_VEX_0FFD,
1205   PREFIX_VEX_0FFE,
1206   PREFIX_VEX_0F3800,
1207   PREFIX_VEX_0F3801,
1208   PREFIX_VEX_0F3802,
1209   PREFIX_VEX_0F3803,
1210   PREFIX_VEX_0F3804,
1211   PREFIX_VEX_0F3805,
1212   PREFIX_VEX_0F3806,
1213   PREFIX_VEX_0F3807,
1214   PREFIX_VEX_0F3808,
1215   PREFIX_VEX_0F3809,
1216   PREFIX_VEX_0F380A,
1217   PREFIX_VEX_0F380B,
1218   PREFIX_VEX_0F380C,
1219   PREFIX_VEX_0F380D,
1220   PREFIX_VEX_0F380E,
1221   PREFIX_VEX_0F380F,
1222   PREFIX_VEX_0F3813,
1223   PREFIX_VEX_0F3816,
1224   PREFIX_VEX_0F3817,
1225   PREFIX_VEX_0F3818,
1226   PREFIX_VEX_0F3819,
1227   PREFIX_VEX_0F381A,
1228   PREFIX_VEX_0F381C,
1229   PREFIX_VEX_0F381D,
1230   PREFIX_VEX_0F381E,
1231   PREFIX_VEX_0F3820,
1232   PREFIX_VEX_0F3821,
1233   PREFIX_VEX_0F3822,
1234   PREFIX_VEX_0F3823,
1235   PREFIX_VEX_0F3824,
1236   PREFIX_VEX_0F3825,
1237   PREFIX_VEX_0F3828,
1238   PREFIX_VEX_0F3829,
1239   PREFIX_VEX_0F382A,
1240   PREFIX_VEX_0F382B,
1241   PREFIX_VEX_0F382C,
1242   PREFIX_VEX_0F382D,
1243   PREFIX_VEX_0F382E,
1244   PREFIX_VEX_0F382F,
1245   PREFIX_VEX_0F3830,
1246   PREFIX_VEX_0F3831,
1247   PREFIX_VEX_0F3832,
1248   PREFIX_VEX_0F3833,
1249   PREFIX_VEX_0F3834,
1250   PREFIX_VEX_0F3835,
1251   PREFIX_VEX_0F3836,
1252   PREFIX_VEX_0F3837,
1253   PREFIX_VEX_0F3838,
1254   PREFIX_VEX_0F3839,
1255   PREFIX_VEX_0F383A,
1256   PREFIX_VEX_0F383B,
1257   PREFIX_VEX_0F383C,
1258   PREFIX_VEX_0F383D,
1259   PREFIX_VEX_0F383E,
1260   PREFIX_VEX_0F383F,
1261   PREFIX_VEX_0F3840,
1262   PREFIX_VEX_0F3841,
1263   PREFIX_VEX_0F3845,
1264   PREFIX_VEX_0F3846,
1265   PREFIX_VEX_0F3847,
1266   PREFIX_VEX_0F3858,
1267   PREFIX_VEX_0F3859,
1268   PREFIX_VEX_0F385A,
1269   PREFIX_VEX_0F3878,
1270   PREFIX_VEX_0F3879,
1271   PREFIX_VEX_0F388C,
1272   PREFIX_VEX_0F388E,
1273   PREFIX_VEX_0F3890,
1274   PREFIX_VEX_0F3891,
1275   PREFIX_VEX_0F3892,
1276   PREFIX_VEX_0F3893,
1277   PREFIX_VEX_0F3896,
1278   PREFIX_VEX_0F3897,
1279   PREFIX_VEX_0F3898,
1280   PREFIX_VEX_0F3899,
1281   PREFIX_VEX_0F389A,
1282   PREFIX_VEX_0F389B,
1283   PREFIX_VEX_0F389C,
1284   PREFIX_VEX_0F389D,
1285   PREFIX_VEX_0F389E,
1286   PREFIX_VEX_0F389F,
1287   PREFIX_VEX_0F38A6,
1288   PREFIX_VEX_0F38A7,
1289   PREFIX_VEX_0F38A8,
1290   PREFIX_VEX_0F38A9,
1291   PREFIX_VEX_0F38AA,
1292   PREFIX_VEX_0F38AB,
1293   PREFIX_VEX_0F38AC,
1294   PREFIX_VEX_0F38AD,
1295   PREFIX_VEX_0F38AE,
1296   PREFIX_VEX_0F38AF,
1297   PREFIX_VEX_0F38B6,
1298   PREFIX_VEX_0F38B7,
1299   PREFIX_VEX_0F38B8,
1300   PREFIX_VEX_0F38B9,
1301   PREFIX_VEX_0F38BA,
1302   PREFIX_VEX_0F38BB,
1303   PREFIX_VEX_0F38BC,
1304   PREFIX_VEX_0F38BD,
1305   PREFIX_VEX_0F38BE,
1306   PREFIX_VEX_0F38BF,
1307   PREFIX_VEX_0F38DB,
1308   PREFIX_VEX_0F38DC,
1309   PREFIX_VEX_0F38DD,
1310   PREFIX_VEX_0F38DE,
1311   PREFIX_VEX_0F38DF,
1312   PREFIX_VEX_0F38F2,
1313   PREFIX_VEX_0F38F3_REG_1,
1314   PREFIX_VEX_0F38F3_REG_2,
1315   PREFIX_VEX_0F38F3_REG_3,
1316   PREFIX_VEX_0F38F5,
1317   PREFIX_VEX_0F38F6,
1318   PREFIX_VEX_0F38F7,
1319   PREFIX_VEX_0F3A00,
1320   PREFIX_VEX_0F3A01,
1321   PREFIX_VEX_0F3A02,
1322   PREFIX_VEX_0F3A04,
1323   PREFIX_VEX_0F3A05,
1324   PREFIX_VEX_0F3A06,
1325   PREFIX_VEX_0F3A08,
1326   PREFIX_VEX_0F3A09,
1327   PREFIX_VEX_0F3A0A,
1328   PREFIX_VEX_0F3A0B,
1329   PREFIX_VEX_0F3A0C,
1330   PREFIX_VEX_0F3A0D,
1331   PREFIX_VEX_0F3A0E,
1332   PREFIX_VEX_0F3A0F,
1333   PREFIX_VEX_0F3A14,
1334   PREFIX_VEX_0F3A15,
1335   PREFIX_VEX_0F3A16,
1336   PREFIX_VEX_0F3A17,
1337   PREFIX_VEX_0F3A18,
1338   PREFIX_VEX_0F3A19,
1339   PREFIX_VEX_0F3A1D,
1340   PREFIX_VEX_0F3A20,
1341   PREFIX_VEX_0F3A21,
1342   PREFIX_VEX_0F3A22,
1343   PREFIX_VEX_0F3A30,
1344   PREFIX_VEX_0F3A31,
1345   PREFIX_VEX_0F3A32,
1346   PREFIX_VEX_0F3A33,
1347   PREFIX_VEX_0F3A38,
1348   PREFIX_VEX_0F3A39,
1349   PREFIX_VEX_0F3A40,
1350   PREFIX_VEX_0F3A41,
1351   PREFIX_VEX_0F3A42,
1352   PREFIX_VEX_0F3A44,
1353   PREFIX_VEX_0F3A46,
1354   PREFIX_VEX_0F3A48,
1355   PREFIX_VEX_0F3A49,
1356   PREFIX_VEX_0F3A4A,
1357   PREFIX_VEX_0F3A4B,
1358   PREFIX_VEX_0F3A4C,
1359   PREFIX_VEX_0F3A5C,
1360   PREFIX_VEX_0F3A5D,
1361   PREFIX_VEX_0F3A5E,
1362   PREFIX_VEX_0F3A5F,
1363   PREFIX_VEX_0F3A60,
1364   PREFIX_VEX_0F3A61,
1365   PREFIX_VEX_0F3A62,
1366   PREFIX_VEX_0F3A63,
1367   PREFIX_VEX_0F3A68,
1368   PREFIX_VEX_0F3A69,
1369   PREFIX_VEX_0F3A6A,
1370   PREFIX_VEX_0F3A6B,
1371   PREFIX_VEX_0F3A6C,
1372   PREFIX_VEX_0F3A6D,
1373   PREFIX_VEX_0F3A6E,
1374   PREFIX_VEX_0F3A6F,
1375   PREFIX_VEX_0F3A78,
1376   PREFIX_VEX_0F3A79,
1377   PREFIX_VEX_0F3A7A,
1378   PREFIX_VEX_0F3A7B,
1379   PREFIX_VEX_0F3A7C,
1380   PREFIX_VEX_0F3A7D,
1381   PREFIX_VEX_0F3A7E,
1382   PREFIX_VEX_0F3A7F,
1383   PREFIX_VEX_0F3ADF,
1384   PREFIX_VEX_0F3AF0,
1385 
1386   PREFIX_EVEX_0F10,
1387   PREFIX_EVEX_0F11,
1388   PREFIX_EVEX_0F12,
1389   PREFIX_EVEX_0F13,
1390   PREFIX_EVEX_0F14,
1391   PREFIX_EVEX_0F15,
1392   PREFIX_EVEX_0F16,
1393   PREFIX_EVEX_0F17,
1394   PREFIX_EVEX_0F28,
1395   PREFIX_EVEX_0F29,
1396   PREFIX_EVEX_0F2A,
1397   PREFIX_EVEX_0F2B,
1398   PREFIX_EVEX_0F2C,
1399   PREFIX_EVEX_0F2D,
1400   PREFIX_EVEX_0F2E,
1401   PREFIX_EVEX_0F2F,
1402   PREFIX_EVEX_0F51,
1403   PREFIX_EVEX_0F54,
1404   PREFIX_EVEX_0F55,
1405   PREFIX_EVEX_0F56,
1406   PREFIX_EVEX_0F57,
1407   PREFIX_EVEX_0F58,
1408   PREFIX_EVEX_0F59,
1409   PREFIX_EVEX_0F5A,
1410   PREFIX_EVEX_0F5B,
1411   PREFIX_EVEX_0F5C,
1412   PREFIX_EVEX_0F5D,
1413   PREFIX_EVEX_0F5E,
1414   PREFIX_EVEX_0F5F,
1415   PREFIX_EVEX_0F60,
1416   PREFIX_EVEX_0F61,
1417   PREFIX_EVEX_0F62,
1418   PREFIX_EVEX_0F63,
1419   PREFIX_EVEX_0F64,
1420   PREFIX_EVEX_0F65,
1421   PREFIX_EVEX_0F66,
1422   PREFIX_EVEX_0F67,
1423   PREFIX_EVEX_0F68,
1424   PREFIX_EVEX_0F69,
1425   PREFIX_EVEX_0F6A,
1426   PREFIX_EVEX_0F6B,
1427   PREFIX_EVEX_0F6C,
1428   PREFIX_EVEX_0F6D,
1429   PREFIX_EVEX_0F6E,
1430   PREFIX_EVEX_0F6F,
1431   PREFIX_EVEX_0F70,
1432   PREFIX_EVEX_0F71_REG_2,
1433   PREFIX_EVEX_0F71_REG_4,
1434   PREFIX_EVEX_0F71_REG_6,
1435   PREFIX_EVEX_0F72_REG_0,
1436   PREFIX_EVEX_0F72_REG_1,
1437   PREFIX_EVEX_0F72_REG_2,
1438   PREFIX_EVEX_0F72_REG_4,
1439   PREFIX_EVEX_0F72_REG_6,
1440   PREFIX_EVEX_0F73_REG_2,
1441   PREFIX_EVEX_0F73_REG_3,
1442   PREFIX_EVEX_0F73_REG_6,
1443   PREFIX_EVEX_0F73_REG_7,
1444   PREFIX_EVEX_0F74,
1445   PREFIX_EVEX_0F75,
1446   PREFIX_EVEX_0F76,
1447   PREFIX_EVEX_0F78,
1448   PREFIX_EVEX_0F79,
1449   PREFIX_EVEX_0F7A,
1450   PREFIX_EVEX_0F7B,
1451   PREFIX_EVEX_0F7E,
1452   PREFIX_EVEX_0F7F,
1453   PREFIX_EVEX_0FC2,
1454   PREFIX_EVEX_0FC4,
1455   PREFIX_EVEX_0FC5,
1456   PREFIX_EVEX_0FC6,
1457   PREFIX_EVEX_0FD1,
1458   PREFIX_EVEX_0FD2,
1459   PREFIX_EVEX_0FD3,
1460   PREFIX_EVEX_0FD4,
1461   PREFIX_EVEX_0FD5,
1462   PREFIX_EVEX_0FD6,
1463   PREFIX_EVEX_0FD8,
1464   PREFIX_EVEX_0FD9,
1465   PREFIX_EVEX_0FDA,
1466   PREFIX_EVEX_0FDB,
1467   PREFIX_EVEX_0FDC,
1468   PREFIX_EVEX_0FDD,
1469   PREFIX_EVEX_0FDE,
1470   PREFIX_EVEX_0FDF,
1471   PREFIX_EVEX_0FE0,
1472   PREFIX_EVEX_0FE1,
1473   PREFIX_EVEX_0FE2,
1474   PREFIX_EVEX_0FE3,
1475   PREFIX_EVEX_0FE4,
1476   PREFIX_EVEX_0FE5,
1477   PREFIX_EVEX_0FE6,
1478   PREFIX_EVEX_0FE7,
1479   PREFIX_EVEX_0FE8,
1480   PREFIX_EVEX_0FE9,
1481   PREFIX_EVEX_0FEA,
1482   PREFIX_EVEX_0FEB,
1483   PREFIX_EVEX_0FEC,
1484   PREFIX_EVEX_0FED,
1485   PREFIX_EVEX_0FEE,
1486   PREFIX_EVEX_0FEF,
1487   PREFIX_EVEX_0FF1,
1488   PREFIX_EVEX_0FF2,
1489   PREFIX_EVEX_0FF3,
1490   PREFIX_EVEX_0FF4,
1491   PREFIX_EVEX_0FF5,
1492   PREFIX_EVEX_0FF6,
1493   PREFIX_EVEX_0FF8,
1494   PREFIX_EVEX_0FF9,
1495   PREFIX_EVEX_0FFA,
1496   PREFIX_EVEX_0FFB,
1497   PREFIX_EVEX_0FFC,
1498   PREFIX_EVEX_0FFD,
1499   PREFIX_EVEX_0FFE,
1500   PREFIX_EVEX_0F3800,
1501   PREFIX_EVEX_0F3804,
1502   PREFIX_EVEX_0F380B,
1503   PREFIX_EVEX_0F380C,
1504   PREFIX_EVEX_0F380D,
1505   PREFIX_EVEX_0F3810,
1506   PREFIX_EVEX_0F3811,
1507   PREFIX_EVEX_0F3812,
1508   PREFIX_EVEX_0F3813,
1509   PREFIX_EVEX_0F3814,
1510   PREFIX_EVEX_0F3815,
1511   PREFIX_EVEX_0F3816,
1512   PREFIX_EVEX_0F3818,
1513   PREFIX_EVEX_0F3819,
1514   PREFIX_EVEX_0F381A,
1515   PREFIX_EVEX_0F381B,
1516   PREFIX_EVEX_0F381C,
1517   PREFIX_EVEX_0F381D,
1518   PREFIX_EVEX_0F381E,
1519   PREFIX_EVEX_0F381F,
1520   PREFIX_EVEX_0F3820,
1521   PREFIX_EVEX_0F3821,
1522   PREFIX_EVEX_0F3822,
1523   PREFIX_EVEX_0F3823,
1524   PREFIX_EVEX_0F3824,
1525   PREFIX_EVEX_0F3825,
1526   PREFIX_EVEX_0F3826,
1527   PREFIX_EVEX_0F3827,
1528   PREFIX_EVEX_0F3828,
1529   PREFIX_EVEX_0F3829,
1530   PREFIX_EVEX_0F382A,
1531   PREFIX_EVEX_0F382B,
1532   PREFIX_EVEX_0F382C,
1533   PREFIX_EVEX_0F382D,
1534   PREFIX_EVEX_0F3830,
1535   PREFIX_EVEX_0F3831,
1536   PREFIX_EVEX_0F3832,
1537   PREFIX_EVEX_0F3833,
1538   PREFIX_EVEX_0F3834,
1539   PREFIX_EVEX_0F3835,
1540   PREFIX_EVEX_0F3836,
1541   PREFIX_EVEX_0F3837,
1542   PREFIX_EVEX_0F3838,
1543   PREFIX_EVEX_0F3839,
1544   PREFIX_EVEX_0F383A,
1545   PREFIX_EVEX_0F383B,
1546   PREFIX_EVEX_0F383C,
1547   PREFIX_EVEX_0F383D,
1548   PREFIX_EVEX_0F383E,
1549   PREFIX_EVEX_0F383F,
1550   PREFIX_EVEX_0F3840,
1551   PREFIX_EVEX_0F3842,
1552   PREFIX_EVEX_0F3843,
1553   PREFIX_EVEX_0F3844,
1554   PREFIX_EVEX_0F3845,
1555   PREFIX_EVEX_0F3846,
1556   PREFIX_EVEX_0F3847,
1557   PREFIX_EVEX_0F384C,
1558   PREFIX_EVEX_0F384D,
1559   PREFIX_EVEX_0F384E,
1560   PREFIX_EVEX_0F384F,
1561   PREFIX_EVEX_0F3852,
1562   PREFIX_EVEX_0F3853,
1563   PREFIX_EVEX_0F3855,
1564   PREFIX_EVEX_0F3858,
1565   PREFIX_EVEX_0F3859,
1566   PREFIX_EVEX_0F385A,
1567   PREFIX_EVEX_0F385B,
1568   PREFIX_EVEX_0F3864,
1569   PREFIX_EVEX_0F3865,
1570   PREFIX_EVEX_0F3866,
1571   PREFIX_EVEX_0F3875,
1572   PREFIX_EVEX_0F3876,
1573   PREFIX_EVEX_0F3877,
1574   PREFIX_EVEX_0F3878,
1575   PREFIX_EVEX_0F3879,
1576   PREFIX_EVEX_0F387A,
1577   PREFIX_EVEX_0F387B,
1578   PREFIX_EVEX_0F387C,
1579   PREFIX_EVEX_0F387D,
1580   PREFIX_EVEX_0F387E,
1581   PREFIX_EVEX_0F387F,
1582   PREFIX_EVEX_0F3883,
1583   PREFIX_EVEX_0F3888,
1584   PREFIX_EVEX_0F3889,
1585   PREFIX_EVEX_0F388A,
1586   PREFIX_EVEX_0F388B,
1587   PREFIX_EVEX_0F388D,
1588   PREFIX_EVEX_0F3890,
1589   PREFIX_EVEX_0F3891,
1590   PREFIX_EVEX_0F3892,
1591   PREFIX_EVEX_0F3893,
1592   PREFIX_EVEX_0F3896,
1593   PREFIX_EVEX_0F3897,
1594   PREFIX_EVEX_0F3898,
1595   PREFIX_EVEX_0F3899,
1596   PREFIX_EVEX_0F389A,
1597   PREFIX_EVEX_0F389B,
1598   PREFIX_EVEX_0F389C,
1599   PREFIX_EVEX_0F389D,
1600   PREFIX_EVEX_0F389E,
1601   PREFIX_EVEX_0F389F,
1602   PREFIX_EVEX_0F38A0,
1603   PREFIX_EVEX_0F38A1,
1604   PREFIX_EVEX_0F38A2,
1605   PREFIX_EVEX_0F38A3,
1606   PREFIX_EVEX_0F38A6,
1607   PREFIX_EVEX_0F38A7,
1608   PREFIX_EVEX_0F38A8,
1609   PREFIX_EVEX_0F38A9,
1610   PREFIX_EVEX_0F38AA,
1611   PREFIX_EVEX_0F38AB,
1612   PREFIX_EVEX_0F38AC,
1613   PREFIX_EVEX_0F38AD,
1614   PREFIX_EVEX_0F38AE,
1615   PREFIX_EVEX_0F38AF,
1616   PREFIX_EVEX_0F38B4,
1617   PREFIX_EVEX_0F38B5,
1618   PREFIX_EVEX_0F38B6,
1619   PREFIX_EVEX_0F38B7,
1620   PREFIX_EVEX_0F38B8,
1621   PREFIX_EVEX_0F38B9,
1622   PREFIX_EVEX_0F38BA,
1623   PREFIX_EVEX_0F38BB,
1624   PREFIX_EVEX_0F38BC,
1625   PREFIX_EVEX_0F38BD,
1626   PREFIX_EVEX_0F38BE,
1627   PREFIX_EVEX_0F38BF,
1628   PREFIX_EVEX_0F38C4,
1629   PREFIX_EVEX_0F38C6_REG_1,
1630   PREFIX_EVEX_0F38C6_REG_2,
1631   PREFIX_EVEX_0F38C6_REG_5,
1632   PREFIX_EVEX_0F38C6_REG_6,
1633   PREFIX_EVEX_0F38C7_REG_1,
1634   PREFIX_EVEX_0F38C7_REG_2,
1635   PREFIX_EVEX_0F38C7_REG_5,
1636   PREFIX_EVEX_0F38C7_REG_6,
1637   PREFIX_EVEX_0F38C8,
1638   PREFIX_EVEX_0F38CA,
1639   PREFIX_EVEX_0F38CB,
1640   PREFIX_EVEX_0F38CC,
1641   PREFIX_EVEX_0F38CD,
1642 
1643   PREFIX_EVEX_0F3A00,
1644   PREFIX_EVEX_0F3A01,
1645   PREFIX_EVEX_0F3A03,
1646   PREFIX_EVEX_0F3A04,
1647   PREFIX_EVEX_0F3A05,
1648   PREFIX_EVEX_0F3A08,
1649   PREFIX_EVEX_0F3A09,
1650   PREFIX_EVEX_0F3A0A,
1651   PREFIX_EVEX_0F3A0B,
1652   PREFIX_EVEX_0F3A0F,
1653   PREFIX_EVEX_0F3A14,
1654   PREFIX_EVEX_0F3A15,
1655   PREFIX_EVEX_0F3A16,
1656   PREFIX_EVEX_0F3A17,
1657   PREFIX_EVEX_0F3A18,
1658   PREFIX_EVEX_0F3A19,
1659   PREFIX_EVEX_0F3A1A,
1660   PREFIX_EVEX_0F3A1B,
1661   PREFIX_EVEX_0F3A1D,
1662   PREFIX_EVEX_0F3A1E,
1663   PREFIX_EVEX_0F3A1F,
1664   PREFIX_EVEX_0F3A20,
1665   PREFIX_EVEX_0F3A21,
1666   PREFIX_EVEX_0F3A22,
1667   PREFIX_EVEX_0F3A23,
1668   PREFIX_EVEX_0F3A25,
1669   PREFIX_EVEX_0F3A26,
1670   PREFIX_EVEX_0F3A27,
1671   PREFIX_EVEX_0F3A38,
1672   PREFIX_EVEX_0F3A39,
1673   PREFIX_EVEX_0F3A3A,
1674   PREFIX_EVEX_0F3A3B,
1675   PREFIX_EVEX_0F3A3E,
1676   PREFIX_EVEX_0F3A3F,
1677   PREFIX_EVEX_0F3A42,
1678   PREFIX_EVEX_0F3A43,
1679   PREFIX_EVEX_0F3A50,
1680   PREFIX_EVEX_0F3A51,
1681   PREFIX_EVEX_0F3A54,
1682   PREFIX_EVEX_0F3A55,
1683   PREFIX_EVEX_0F3A56,
1684   PREFIX_EVEX_0F3A57,
1685   PREFIX_EVEX_0F3A66,
1686   PREFIX_EVEX_0F3A67
1687 };
1688 
1689 enum
1690 {
1691   X86_64_06 = 0,
1692   X86_64_07,
1693   X86_64_0D,
1694   X86_64_16,
1695   X86_64_17,
1696   X86_64_1E,
1697   X86_64_1F,
1698   X86_64_27,
1699   X86_64_2F,
1700   X86_64_37,
1701   X86_64_3F,
1702   X86_64_60,
1703   X86_64_61,
1704   X86_64_62,
1705   X86_64_63,
1706   X86_64_6D,
1707   X86_64_6F,
1708   X86_64_82,
1709   X86_64_9A,
1710   X86_64_C4,
1711   X86_64_C5,
1712   X86_64_CE,
1713   X86_64_D4,
1714   X86_64_D5,
1715   X86_64_E8,
1716   X86_64_E9,
1717   X86_64_EA,
1718   X86_64_0F01_REG_0,
1719   X86_64_0F01_REG_1,
1720   X86_64_0F01_REG_2,
1721   X86_64_0F01_REG_3
1722 };
1723 
1724 enum
1725 {
1726   THREE_BYTE_0F38 = 0,
1727   THREE_BYTE_0F3A
1728 };
1729 
1730 enum
1731 {
1732   XOP_08 = 0,
1733   XOP_09,
1734   XOP_0A
1735 };
1736 
1737 enum
1738 {
1739   VEX_0F = 0,
1740   VEX_0F38,
1741   VEX_0F3A
1742 };
1743 
1744 enum
1745 {
1746   EVEX_0F = 0,
1747   EVEX_0F38,
1748   EVEX_0F3A
1749 };
1750 
1751 enum
1752 {
1753   VEX_LEN_0F10_P_1 = 0,
1754   VEX_LEN_0F10_P_3,
1755   VEX_LEN_0F11_P_1,
1756   VEX_LEN_0F11_P_3,
1757   VEX_LEN_0F12_P_0_M_0,
1758   VEX_LEN_0F12_P_0_M_1,
1759   VEX_LEN_0F12_P_2,
1760   VEX_LEN_0F13_M_0,
1761   VEX_LEN_0F16_P_0_M_0,
1762   VEX_LEN_0F16_P_0_M_1,
1763   VEX_LEN_0F16_P_2,
1764   VEX_LEN_0F17_M_0,
1765   VEX_LEN_0F2A_P_1,
1766   VEX_LEN_0F2A_P_3,
1767   VEX_LEN_0F2C_P_1,
1768   VEX_LEN_0F2C_P_3,
1769   VEX_LEN_0F2D_P_1,
1770   VEX_LEN_0F2D_P_3,
1771   VEX_LEN_0F2E_P_0,
1772   VEX_LEN_0F2E_P_2,
1773   VEX_LEN_0F2F_P_0,
1774   VEX_LEN_0F2F_P_2,
1775   VEX_LEN_0F41_P_0,
1776   VEX_LEN_0F41_P_2,
1777   VEX_LEN_0F42_P_0,
1778   VEX_LEN_0F42_P_2,
1779   VEX_LEN_0F44_P_0,
1780   VEX_LEN_0F44_P_2,
1781   VEX_LEN_0F45_P_0,
1782   VEX_LEN_0F45_P_2,
1783   VEX_LEN_0F46_P_0,
1784   VEX_LEN_0F46_P_2,
1785   VEX_LEN_0F47_P_0,
1786   VEX_LEN_0F47_P_2,
1787   VEX_LEN_0F4A_P_0,
1788   VEX_LEN_0F4A_P_2,
1789   VEX_LEN_0F4B_P_0,
1790   VEX_LEN_0F4B_P_2,
1791   VEX_LEN_0F51_P_1,
1792   VEX_LEN_0F51_P_3,
1793   VEX_LEN_0F52_P_1,
1794   VEX_LEN_0F53_P_1,
1795   VEX_LEN_0F58_P_1,
1796   VEX_LEN_0F58_P_3,
1797   VEX_LEN_0F59_P_1,
1798   VEX_LEN_0F59_P_3,
1799   VEX_LEN_0F5A_P_1,
1800   VEX_LEN_0F5A_P_3,
1801   VEX_LEN_0F5C_P_1,
1802   VEX_LEN_0F5C_P_3,
1803   VEX_LEN_0F5D_P_1,
1804   VEX_LEN_0F5D_P_3,
1805   VEX_LEN_0F5E_P_1,
1806   VEX_LEN_0F5E_P_3,
1807   VEX_LEN_0F5F_P_1,
1808   VEX_LEN_0F5F_P_3,
1809   VEX_LEN_0F6E_P_2,
1810   VEX_LEN_0F7E_P_1,
1811   VEX_LEN_0F7E_P_2,
1812   VEX_LEN_0F90_P_0,
1813   VEX_LEN_0F90_P_2,
1814   VEX_LEN_0F91_P_0,
1815   VEX_LEN_0F91_P_2,
1816   VEX_LEN_0F92_P_0,
1817   VEX_LEN_0F92_P_2,
1818   VEX_LEN_0F92_P_3,
1819   VEX_LEN_0F93_P_0,
1820   VEX_LEN_0F93_P_2,
1821   VEX_LEN_0F93_P_3,
1822   VEX_LEN_0F98_P_0,
1823   VEX_LEN_0F98_P_2,
1824   VEX_LEN_0F99_P_0,
1825   VEX_LEN_0F99_P_2,
1826   VEX_LEN_0FAE_R_2_M_0,
1827   VEX_LEN_0FAE_R_3_M_0,
1828   VEX_LEN_0FC2_P_1,
1829   VEX_LEN_0FC2_P_3,
1830   VEX_LEN_0FC4_P_2,
1831   VEX_LEN_0FC5_P_2,
1832   VEX_LEN_0FD6_P_2,
1833   VEX_LEN_0FF7_P_2,
1834   VEX_LEN_0F3816_P_2,
1835   VEX_LEN_0F3819_P_2,
1836   VEX_LEN_0F381A_P_2_M_0,
1837   VEX_LEN_0F3836_P_2,
1838   VEX_LEN_0F3841_P_2,
1839   VEX_LEN_0F385A_P_2_M_0,
1840   VEX_LEN_0F38DB_P_2,
1841   VEX_LEN_0F38DC_P_2,
1842   VEX_LEN_0F38DD_P_2,
1843   VEX_LEN_0F38DE_P_2,
1844   VEX_LEN_0F38DF_P_2,
1845   VEX_LEN_0F38F2_P_0,
1846   VEX_LEN_0F38F3_R_1_P_0,
1847   VEX_LEN_0F38F3_R_2_P_0,
1848   VEX_LEN_0F38F3_R_3_P_0,
1849   VEX_LEN_0F38F5_P_0,
1850   VEX_LEN_0F38F5_P_1,
1851   VEX_LEN_0F38F5_P_3,
1852   VEX_LEN_0F38F6_P_3,
1853   VEX_LEN_0F38F7_P_0,
1854   VEX_LEN_0F38F7_P_1,
1855   VEX_LEN_0F38F7_P_2,
1856   VEX_LEN_0F38F7_P_3,
1857   VEX_LEN_0F3A00_P_2,
1858   VEX_LEN_0F3A01_P_2,
1859   VEX_LEN_0F3A06_P_2,
1860   VEX_LEN_0F3A0A_P_2,
1861   VEX_LEN_0F3A0B_P_2,
1862   VEX_LEN_0F3A14_P_2,
1863   VEX_LEN_0F3A15_P_2,
1864   VEX_LEN_0F3A16_P_2,
1865   VEX_LEN_0F3A17_P_2,
1866   VEX_LEN_0F3A18_P_2,
1867   VEX_LEN_0F3A19_P_2,
1868   VEX_LEN_0F3A20_P_2,
1869   VEX_LEN_0F3A21_P_2,
1870   VEX_LEN_0F3A22_P_2,
1871   VEX_LEN_0F3A30_P_2,
1872   VEX_LEN_0F3A31_P_2,
1873   VEX_LEN_0F3A32_P_2,
1874   VEX_LEN_0F3A33_P_2,
1875   VEX_LEN_0F3A38_P_2,
1876   VEX_LEN_0F3A39_P_2,
1877   VEX_LEN_0F3A41_P_2,
1878   VEX_LEN_0F3A44_P_2,
1879   VEX_LEN_0F3A46_P_2,
1880   VEX_LEN_0F3A60_P_2,
1881   VEX_LEN_0F3A61_P_2,
1882   VEX_LEN_0F3A62_P_2,
1883   VEX_LEN_0F3A63_P_2,
1884   VEX_LEN_0F3A6A_P_2,
1885   VEX_LEN_0F3A6B_P_2,
1886   VEX_LEN_0F3A6E_P_2,
1887   VEX_LEN_0F3A6F_P_2,
1888   VEX_LEN_0F3A7A_P_2,
1889   VEX_LEN_0F3A7B_P_2,
1890   VEX_LEN_0F3A7E_P_2,
1891   VEX_LEN_0F3A7F_P_2,
1892   VEX_LEN_0F3ADF_P_2,
1893   VEX_LEN_0F3AF0_P_3,
1894   VEX_LEN_0FXOP_08_CC,
1895   VEX_LEN_0FXOP_08_CD,
1896   VEX_LEN_0FXOP_08_CE,
1897   VEX_LEN_0FXOP_08_CF,
1898   VEX_LEN_0FXOP_08_EC,
1899   VEX_LEN_0FXOP_08_ED,
1900   VEX_LEN_0FXOP_08_EE,
1901   VEX_LEN_0FXOP_08_EF,
1902   VEX_LEN_0FXOP_09_80,
1903   VEX_LEN_0FXOP_09_81
1904 };
1905 
1906 enum
1907 {
1908   VEX_W_0F10_P_0 = 0,
1909   VEX_W_0F10_P_1,
1910   VEX_W_0F10_P_2,
1911   VEX_W_0F10_P_3,
1912   VEX_W_0F11_P_0,
1913   VEX_W_0F11_P_1,
1914   VEX_W_0F11_P_2,
1915   VEX_W_0F11_P_3,
1916   VEX_W_0F12_P_0_M_0,
1917   VEX_W_0F12_P_0_M_1,
1918   VEX_W_0F12_P_1,
1919   VEX_W_0F12_P_2,
1920   VEX_W_0F12_P_3,
1921   VEX_W_0F13_M_0,
1922   VEX_W_0F14,
1923   VEX_W_0F15,
1924   VEX_W_0F16_P_0_M_0,
1925   VEX_W_0F16_P_0_M_1,
1926   VEX_W_0F16_P_1,
1927   VEX_W_0F16_P_2,
1928   VEX_W_0F17_M_0,
1929   VEX_W_0F28,
1930   VEX_W_0F29,
1931   VEX_W_0F2B_M_0,
1932   VEX_W_0F2E_P_0,
1933   VEX_W_0F2E_P_2,
1934   VEX_W_0F2F_P_0,
1935   VEX_W_0F2F_P_2,
1936   VEX_W_0F41_P_0_LEN_1,
1937   VEX_W_0F41_P_2_LEN_1,
1938   VEX_W_0F42_P_0_LEN_1,
1939   VEX_W_0F42_P_2_LEN_1,
1940   VEX_W_0F44_P_0_LEN_0,
1941   VEX_W_0F44_P_2_LEN_0,
1942   VEX_W_0F45_P_0_LEN_1,
1943   VEX_W_0F45_P_2_LEN_1,
1944   VEX_W_0F46_P_0_LEN_1,
1945   VEX_W_0F46_P_2_LEN_1,
1946   VEX_W_0F47_P_0_LEN_1,
1947   VEX_W_0F47_P_2_LEN_1,
1948   VEX_W_0F4A_P_0_LEN_1,
1949   VEX_W_0F4A_P_2_LEN_1,
1950   VEX_W_0F4B_P_0_LEN_1,
1951   VEX_W_0F4B_P_2_LEN_1,
1952   VEX_W_0F50_M_0,
1953   VEX_W_0F51_P_0,
1954   VEX_W_0F51_P_1,
1955   VEX_W_0F51_P_2,
1956   VEX_W_0F51_P_3,
1957   VEX_W_0F52_P_0,
1958   VEX_W_0F52_P_1,
1959   VEX_W_0F53_P_0,
1960   VEX_W_0F53_P_1,
1961   VEX_W_0F58_P_0,
1962   VEX_W_0F58_P_1,
1963   VEX_W_0F58_P_2,
1964   VEX_W_0F58_P_3,
1965   VEX_W_0F59_P_0,
1966   VEX_W_0F59_P_1,
1967   VEX_W_0F59_P_2,
1968   VEX_W_0F59_P_3,
1969   VEX_W_0F5A_P_0,
1970   VEX_W_0F5A_P_1,
1971   VEX_W_0F5A_P_3,
1972   VEX_W_0F5B_P_0,
1973   VEX_W_0F5B_P_1,
1974   VEX_W_0F5B_P_2,
1975   VEX_W_0F5C_P_0,
1976   VEX_W_0F5C_P_1,
1977   VEX_W_0F5C_P_2,
1978   VEX_W_0F5C_P_3,
1979   VEX_W_0F5D_P_0,
1980   VEX_W_0F5D_P_1,
1981   VEX_W_0F5D_P_2,
1982   VEX_W_0F5D_P_3,
1983   VEX_W_0F5E_P_0,
1984   VEX_W_0F5E_P_1,
1985   VEX_W_0F5E_P_2,
1986   VEX_W_0F5E_P_3,
1987   VEX_W_0F5F_P_0,
1988   VEX_W_0F5F_P_1,
1989   VEX_W_0F5F_P_2,
1990   VEX_W_0F5F_P_3,
1991   VEX_W_0F60_P_2,
1992   VEX_W_0F61_P_2,
1993   VEX_W_0F62_P_2,
1994   VEX_W_0F63_P_2,
1995   VEX_W_0F64_P_2,
1996   VEX_W_0F65_P_2,
1997   VEX_W_0F66_P_2,
1998   VEX_W_0F67_P_2,
1999   VEX_W_0F68_P_2,
2000   VEX_W_0F69_P_2,
2001   VEX_W_0F6A_P_2,
2002   VEX_W_0F6B_P_2,
2003   VEX_W_0F6C_P_2,
2004   VEX_W_0F6D_P_2,
2005   VEX_W_0F6F_P_1,
2006   VEX_W_0F6F_P_2,
2007   VEX_W_0F70_P_1,
2008   VEX_W_0F70_P_2,
2009   VEX_W_0F70_P_3,
2010   VEX_W_0F71_R_2_P_2,
2011   VEX_W_0F71_R_4_P_2,
2012   VEX_W_0F71_R_6_P_2,
2013   VEX_W_0F72_R_2_P_2,
2014   VEX_W_0F72_R_4_P_2,
2015   VEX_W_0F72_R_6_P_2,
2016   VEX_W_0F73_R_2_P_2,
2017   VEX_W_0F73_R_3_P_2,
2018   VEX_W_0F73_R_6_P_2,
2019   VEX_W_0F73_R_7_P_2,
2020   VEX_W_0F74_P_2,
2021   VEX_W_0F75_P_2,
2022   VEX_W_0F76_P_2,
2023   VEX_W_0F77_P_0,
2024   VEX_W_0F7C_P_2,
2025   VEX_W_0F7C_P_3,
2026   VEX_W_0F7D_P_2,
2027   VEX_W_0F7D_P_3,
2028   VEX_W_0F7E_P_1,
2029   VEX_W_0F7F_P_1,
2030   VEX_W_0F7F_P_2,
2031   VEX_W_0F90_P_0_LEN_0,
2032   VEX_W_0F90_P_2_LEN_0,
2033   VEX_W_0F91_P_0_LEN_0,
2034   VEX_W_0F91_P_2_LEN_0,
2035   VEX_W_0F92_P_0_LEN_0,
2036   VEX_W_0F92_P_2_LEN_0,
2037   VEX_W_0F92_P_3_LEN_0,
2038   VEX_W_0F93_P_0_LEN_0,
2039   VEX_W_0F93_P_2_LEN_0,
2040   VEX_W_0F93_P_3_LEN_0,
2041   VEX_W_0F98_P_0_LEN_0,
2042   VEX_W_0F98_P_2_LEN_0,
2043   VEX_W_0F99_P_0_LEN_0,
2044   VEX_W_0F99_P_2_LEN_0,
2045   VEX_W_0FAE_R_2_M_0,
2046   VEX_W_0FAE_R_3_M_0,
2047   VEX_W_0FC2_P_0,
2048   VEX_W_0FC2_P_1,
2049   VEX_W_0FC2_P_2,
2050   VEX_W_0FC2_P_3,
2051   VEX_W_0FC4_P_2,
2052   VEX_W_0FC5_P_2,
2053   VEX_W_0FD0_P_2,
2054   VEX_W_0FD0_P_3,
2055   VEX_W_0FD1_P_2,
2056   VEX_W_0FD2_P_2,
2057   VEX_W_0FD3_P_2,
2058   VEX_W_0FD4_P_2,
2059   VEX_W_0FD5_P_2,
2060   VEX_W_0FD6_P_2,
2061   VEX_W_0FD7_P_2_M_1,
2062   VEX_W_0FD8_P_2,
2063   VEX_W_0FD9_P_2,
2064   VEX_W_0FDA_P_2,
2065   VEX_W_0FDB_P_2,
2066   VEX_W_0FDC_P_2,
2067   VEX_W_0FDD_P_2,
2068   VEX_W_0FDE_P_2,
2069   VEX_W_0FDF_P_2,
2070   VEX_W_0FE0_P_2,
2071   VEX_W_0FE1_P_2,
2072   VEX_W_0FE2_P_2,
2073   VEX_W_0FE3_P_2,
2074   VEX_W_0FE4_P_2,
2075   VEX_W_0FE5_P_2,
2076   VEX_W_0FE6_P_1,
2077   VEX_W_0FE6_P_2,
2078   VEX_W_0FE6_P_3,
2079   VEX_W_0FE7_P_2_M_0,
2080   VEX_W_0FE8_P_2,
2081   VEX_W_0FE9_P_2,
2082   VEX_W_0FEA_P_2,
2083   VEX_W_0FEB_P_2,
2084   VEX_W_0FEC_P_2,
2085   VEX_W_0FED_P_2,
2086   VEX_W_0FEE_P_2,
2087   VEX_W_0FEF_P_2,
2088   VEX_W_0FF0_P_3_M_0,
2089   VEX_W_0FF1_P_2,
2090   VEX_W_0FF2_P_2,
2091   VEX_W_0FF3_P_2,
2092   VEX_W_0FF4_P_2,
2093   VEX_W_0FF5_P_2,
2094   VEX_W_0FF6_P_2,
2095   VEX_W_0FF7_P_2,
2096   VEX_W_0FF8_P_2,
2097   VEX_W_0FF9_P_2,
2098   VEX_W_0FFA_P_2,
2099   VEX_W_0FFB_P_2,
2100   VEX_W_0FFC_P_2,
2101   VEX_W_0FFD_P_2,
2102   VEX_W_0FFE_P_2,
2103   VEX_W_0F3800_P_2,
2104   VEX_W_0F3801_P_2,
2105   VEX_W_0F3802_P_2,
2106   VEX_W_0F3803_P_2,
2107   VEX_W_0F3804_P_2,
2108   VEX_W_0F3805_P_2,
2109   VEX_W_0F3806_P_2,
2110   VEX_W_0F3807_P_2,
2111   VEX_W_0F3808_P_2,
2112   VEX_W_0F3809_P_2,
2113   VEX_W_0F380A_P_2,
2114   VEX_W_0F380B_P_2,
2115   VEX_W_0F380C_P_2,
2116   VEX_W_0F380D_P_2,
2117   VEX_W_0F380E_P_2,
2118   VEX_W_0F380F_P_2,
2119   VEX_W_0F3816_P_2,
2120   VEX_W_0F3817_P_2,
2121   VEX_W_0F3818_P_2,
2122   VEX_W_0F3819_P_2,
2123   VEX_W_0F381A_P_2_M_0,
2124   VEX_W_0F381C_P_2,
2125   VEX_W_0F381D_P_2,
2126   VEX_W_0F381E_P_2,
2127   VEX_W_0F3820_P_2,
2128   VEX_W_0F3821_P_2,
2129   VEX_W_0F3822_P_2,
2130   VEX_W_0F3823_P_2,
2131   VEX_W_0F3824_P_2,
2132   VEX_W_0F3825_P_2,
2133   VEX_W_0F3828_P_2,
2134   VEX_W_0F3829_P_2,
2135   VEX_W_0F382A_P_2_M_0,
2136   VEX_W_0F382B_P_2,
2137   VEX_W_0F382C_P_2_M_0,
2138   VEX_W_0F382D_P_2_M_0,
2139   VEX_W_0F382E_P_2_M_0,
2140   VEX_W_0F382F_P_2_M_0,
2141   VEX_W_0F3830_P_2,
2142   VEX_W_0F3831_P_2,
2143   VEX_W_0F3832_P_2,
2144   VEX_W_0F3833_P_2,
2145   VEX_W_0F3834_P_2,
2146   VEX_W_0F3835_P_2,
2147   VEX_W_0F3836_P_2,
2148   VEX_W_0F3837_P_2,
2149   VEX_W_0F3838_P_2,
2150   VEX_W_0F3839_P_2,
2151   VEX_W_0F383A_P_2,
2152   VEX_W_0F383B_P_2,
2153   VEX_W_0F383C_P_2,
2154   VEX_W_0F383D_P_2,
2155   VEX_W_0F383E_P_2,
2156   VEX_W_0F383F_P_2,
2157   VEX_W_0F3840_P_2,
2158   VEX_W_0F3841_P_2,
2159   VEX_W_0F3846_P_2,
2160   VEX_W_0F3858_P_2,
2161   VEX_W_0F3859_P_2,
2162   VEX_W_0F385A_P_2_M_0,
2163   VEX_W_0F3878_P_2,
2164   VEX_W_0F3879_P_2,
2165   VEX_W_0F38DB_P_2,
2166   VEX_W_0F38DC_P_2,
2167   VEX_W_0F38DD_P_2,
2168   VEX_W_0F38DE_P_2,
2169   VEX_W_0F38DF_P_2,
2170   VEX_W_0F3A00_P_2,
2171   VEX_W_0F3A01_P_2,
2172   VEX_W_0F3A02_P_2,
2173   VEX_W_0F3A04_P_2,
2174   VEX_W_0F3A05_P_2,
2175   VEX_W_0F3A06_P_2,
2176   VEX_W_0F3A08_P_2,
2177   VEX_W_0F3A09_P_2,
2178   VEX_W_0F3A0A_P_2,
2179   VEX_W_0F3A0B_P_2,
2180   VEX_W_0F3A0C_P_2,
2181   VEX_W_0F3A0D_P_2,
2182   VEX_W_0F3A0E_P_2,
2183   VEX_W_0F3A0F_P_2,
2184   VEX_W_0F3A14_P_2,
2185   VEX_W_0F3A15_P_2,
2186   VEX_W_0F3A18_P_2,
2187   VEX_W_0F3A19_P_2,
2188   VEX_W_0F3A20_P_2,
2189   VEX_W_0F3A21_P_2,
2190   VEX_W_0F3A30_P_2_LEN_0,
2191   VEX_W_0F3A31_P_2_LEN_0,
2192   VEX_W_0F3A32_P_2_LEN_0,
2193   VEX_W_0F3A33_P_2_LEN_0,
2194   VEX_W_0F3A38_P_2,
2195   VEX_W_0F3A39_P_2,
2196   VEX_W_0F3A40_P_2,
2197   VEX_W_0F3A41_P_2,
2198   VEX_W_0F3A42_P_2,
2199   VEX_W_0F3A44_P_2,
2200   VEX_W_0F3A46_P_2,
2201   VEX_W_0F3A48_P_2,
2202   VEX_W_0F3A49_P_2,
2203   VEX_W_0F3A4A_P_2,
2204   VEX_W_0F3A4B_P_2,
2205   VEX_W_0F3A4C_P_2,
2206   VEX_W_0F3A62_P_2,
2207   VEX_W_0F3A63_P_2,
2208   VEX_W_0F3ADF_P_2,
2209 
2210   EVEX_W_0F10_P_0,
2211   EVEX_W_0F10_P_1_M_0,
2212   EVEX_W_0F10_P_1_M_1,
2213   EVEX_W_0F10_P_2,
2214   EVEX_W_0F10_P_3_M_0,
2215   EVEX_W_0F10_P_3_M_1,
2216   EVEX_W_0F11_P_0,
2217   EVEX_W_0F11_P_1_M_0,
2218   EVEX_W_0F11_P_1_M_1,
2219   EVEX_W_0F11_P_2,
2220   EVEX_W_0F11_P_3_M_0,
2221   EVEX_W_0F11_P_3_M_1,
2222   EVEX_W_0F12_P_0_M_0,
2223   EVEX_W_0F12_P_0_M_1,
2224   EVEX_W_0F12_P_1,
2225   EVEX_W_0F12_P_2,
2226   EVEX_W_0F12_P_3,
2227   EVEX_W_0F13_P_0,
2228   EVEX_W_0F13_P_2,
2229   EVEX_W_0F14_P_0,
2230   EVEX_W_0F14_P_2,
2231   EVEX_W_0F15_P_0,
2232   EVEX_W_0F15_P_2,
2233   EVEX_W_0F16_P_0_M_0,
2234   EVEX_W_0F16_P_0_M_1,
2235   EVEX_W_0F16_P_1,
2236   EVEX_W_0F16_P_2,
2237   EVEX_W_0F17_P_0,
2238   EVEX_W_0F17_P_2,
2239   EVEX_W_0F28_P_0,
2240   EVEX_W_0F28_P_2,
2241   EVEX_W_0F29_P_0,
2242   EVEX_W_0F29_P_2,
2243   EVEX_W_0F2A_P_1,
2244   EVEX_W_0F2A_P_3,
2245   EVEX_W_0F2B_P_0,
2246   EVEX_W_0F2B_P_2,
2247   EVEX_W_0F2E_P_0,
2248   EVEX_W_0F2E_P_2,
2249   EVEX_W_0F2F_P_0,
2250   EVEX_W_0F2F_P_2,
2251   EVEX_W_0F51_P_0,
2252   EVEX_W_0F51_P_1,
2253   EVEX_W_0F51_P_2,
2254   EVEX_W_0F51_P_3,
2255   EVEX_W_0F54_P_0,
2256   EVEX_W_0F54_P_2,
2257   EVEX_W_0F55_P_0,
2258   EVEX_W_0F55_P_2,
2259   EVEX_W_0F56_P_0,
2260   EVEX_W_0F56_P_2,
2261   EVEX_W_0F57_P_0,
2262   EVEX_W_0F57_P_2,
2263   EVEX_W_0F58_P_0,
2264   EVEX_W_0F58_P_1,
2265   EVEX_W_0F58_P_2,
2266   EVEX_W_0F58_P_3,
2267   EVEX_W_0F59_P_0,
2268   EVEX_W_0F59_P_1,
2269   EVEX_W_0F59_P_2,
2270   EVEX_W_0F59_P_3,
2271   EVEX_W_0F5A_P_0,
2272   EVEX_W_0F5A_P_1,
2273   EVEX_W_0F5A_P_2,
2274   EVEX_W_0F5A_P_3,
2275   EVEX_W_0F5B_P_0,
2276   EVEX_W_0F5B_P_1,
2277   EVEX_W_0F5B_P_2,
2278   EVEX_W_0F5C_P_0,
2279   EVEX_W_0F5C_P_1,
2280   EVEX_W_0F5C_P_2,
2281   EVEX_W_0F5C_P_3,
2282   EVEX_W_0F5D_P_0,
2283   EVEX_W_0F5D_P_1,
2284   EVEX_W_0F5D_P_2,
2285   EVEX_W_0F5D_P_3,
2286   EVEX_W_0F5E_P_0,
2287   EVEX_W_0F5E_P_1,
2288   EVEX_W_0F5E_P_2,
2289   EVEX_W_0F5E_P_3,
2290   EVEX_W_0F5F_P_0,
2291   EVEX_W_0F5F_P_1,
2292   EVEX_W_0F5F_P_2,
2293   EVEX_W_0F5F_P_3,
2294   EVEX_W_0F62_P_2,
2295   EVEX_W_0F66_P_2,
2296   EVEX_W_0F6A_P_2,
2297   EVEX_W_0F6B_P_2,
2298   EVEX_W_0F6C_P_2,
2299   EVEX_W_0F6D_P_2,
2300   EVEX_W_0F6E_P_2,
2301   EVEX_W_0F6F_P_1,
2302   EVEX_W_0F6F_P_2,
2303   EVEX_W_0F6F_P_3,
2304   EVEX_W_0F70_P_2,
2305   EVEX_W_0F72_R_2_P_2,
2306   EVEX_W_0F72_R_6_P_2,
2307   EVEX_W_0F73_R_2_P_2,
2308   EVEX_W_0F73_R_6_P_2,
2309   EVEX_W_0F76_P_2,
2310   EVEX_W_0F78_P_0,
2311   EVEX_W_0F78_P_2,
2312   EVEX_W_0F79_P_0,
2313   EVEX_W_0F79_P_2,
2314   EVEX_W_0F7A_P_1,
2315   EVEX_W_0F7A_P_2,
2316   EVEX_W_0F7A_P_3,
2317   EVEX_W_0F7B_P_1,
2318   EVEX_W_0F7B_P_2,
2319   EVEX_W_0F7B_P_3,
2320   EVEX_W_0F7E_P_1,
2321   EVEX_W_0F7E_P_2,
2322   EVEX_W_0F7F_P_1,
2323   EVEX_W_0F7F_P_2,
2324   EVEX_W_0F7F_P_3,
2325   EVEX_W_0FC2_P_0,
2326   EVEX_W_0FC2_P_1,
2327   EVEX_W_0FC2_P_2,
2328   EVEX_W_0FC2_P_3,
2329   EVEX_W_0FC6_P_0,
2330   EVEX_W_0FC6_P_2,
2331   EVEX_W_0FD2_P_2,
2332   EVEX_W_0FD3_P_2,
2333   EVEX_W_0FD4_P_2,
2334   EVEX_W_0FD6_P_2,
2335   EVEX_W_0FE6_P_1,
2336   EVEX_W_0FE6_P_2,
2337   EVEX_W_0FE6_P_3,
2338   EVEX_W_0FE7_P_2,
2339   EVEX_W_0FF2_P_2,
2340   EVEX_W_0FF3_P_2,
2341   EVEX_W_0FF4_P_2,
2342   EVEX_W_0FFA_P_2,
2343   EVEX_W_0FFB_P_2,
2344   EVEX_W_0FFE_P_2,
2345   EVEX_W_0F380C_P_2,
2346   EVEX_W_0F380D_P_2,
2347   EVEX_W_0F3810_P_1,
2348   EVEX_W_0F3810_P_2,
2349   EVEX_W_0F3811_P_1,
2350   EVEX_W_0F3811_P_2,
2351   EVEX_W_0F3812_P_1,
2352   EVEX_W_0F3812_P_2,
2353   EVEX_W_0F3813_P_1,
2354   EVEX_W_0F3813_P_2,
2355   EVEX_W_0F3814_P_1,
2356   EVEX_W_0F3815_P_1,
2357   EVEX_W_0F3818_P_2,
2358   EVEX_W_0F3819_P_2,
2359   EVEX_W_0F381A_P_2,
2360   EVEX_W_0F381B_P_2,
2361   EVEX_W_0F381E_P_2,
2362   EVEX_W_0F381F_P_2,
2363   EVEX_W_0F3820_P_1,
2364   EVEX_W_0F3821_P_1,
2365   EVEX_W_0F3822_P_1,
2366   EVEX_W_0F3823_P_1,
2367   EVEX_W_0F3824_P_1,
2368   EVEX_W_0F3825_P_1,
2369   EVEX_W_0F3825_P_2,
2370   EVEX_W_0F3826_P_1,
2371   EVEX_W_0F3826_P_2,
2372   EVEX_W_0F3828_P_1,
2373   EVEX_W_0F3828_P_2,
2374   EVEX_W_0F3829_P_1,
2375   EVEX_W_0F3829_P_2,
2376   EVEX_W_0F382A_P_1,
2377   EVEX_W_0F382A_P_2,
2378   EVEX_W_0F382B_P_2,
2379   EVEX_W_0F3830_P_1,
2380   EVEX_W_0F3831_P_1,
2381   EVEX_W_0F3832_P_1,
2382   EVEX_W_0F3833_P_1,
2383   EVEX_W_0F3834_P_1,
2384   EVEX_W_0F3835_P_1,
2385   EVEX_W_0F3835_P_2,
2386   EVEX_W_0F3837_P_2,
2387   EVEX_W_0F3838_P_1,
2388   EVEX_W_0F3839_P_1,
2389   EVEX_W_0F383A_P_1,
2390   EVEX_W_0F3840_P_2,
2391   EVEX_W_0F3855_P_2,
2392   EVEX_W_0F3858_P_2,
2393   EVEX_W_0F3859_P_2,
2394   EVEX_W_0F385A_P_2,
2395   EVEX_W_0F385B_P_2,
2396   EVEX_W_0F3866_P_2,
2397   EVEX_W_0F3875_P_2,
2398   EVEX_W_0F3878_P_2,
2399   EVEX_W_0F3879_P_2,
2400   EVEX_W_0F387A_P_2,
2401   EVEX_W_0F387B_P_2,
2402   EVEX_W_0F387D_P_2,
2403   EVEX_W_0F3883_P_2,
2404   EVEX_W_0F388D_P_2,
2405   EVEX_W_0F3891_P_2,
2406   EVEX_W_0F3893_P_2,
2407   EVEX_W_0F38A1_P_2,
2408   EVEX_W_0F38A3_P_2,
2409   EVEX_W_0F38C7_R_1_P_2,
2410   EVEX_W_0F38C7_R_2_P_2,
2411   EVEX_W_0F38C7_R_5_P_2,
2412   EVEX_W_0F38C7_R_6_P_2,
2413 
2414   EVEX_W_0F3A00_P_2,
2415   EVEX_W_0F3A01_P_2,
2416   EVEX_W_0F3A04_P_2,
2417   EVEX_W_0F3A05_P_2,
2418   EVEX_W_0F3A08_P_2,
2419   EVEX_W_0F3A09_P_2,
2420   EVEX_W_0F3A0A_P_2,
2421   EVEX_W_0F3A0B_P_2,
2422   EVEX_W_0F3A16_P_2,
2423   EVEX_W_0F3A18_P_2,
2424   EVEX_W_0F3A19_P_2,
2425   EVEX_W_0F3A1A_P_2,
2426   EVEX_W_0F3A1B_P_2,
2427   EVEX_W_0F3A1D_P_2,
2428   EVEX_W_0F3A21_P_2,
2429   EVEX_W_0F3A22_P_2,
2430   EVEX_W_0F3A23_P_2,
2431   EVEX_W_0F3A38_P_2,
2432   EVEX_W_0F3A39_P_2,
2433   EVEX_W_0F3A3A_P_2,
2434   EVEX_W_0F3A3B_P_2,
2435   EVEX_W_0F3A3E_P_2,
2436   EVEX_W_0F3A3F_P_2,
2437   EVEX_W_0F3A42_P_2,
2438   EVEX_W_0F3A43_P_2,
2439   EVEX_W_0F3A50_P_2,
2440   EVEX_W_0F3A51_P_2,
2441   EVEX_W_0F3A56_P_2,
2442   EVEX_W_0F3A57_P_2,
2443   EVEX_W_0F3A66_P_2,
2444   EVEX_W_0F3A67_P_2
2445 };
2446 
2447 typedef void (*op_rtn) (int bytemode, int sizeflag);
2448 
2449 struct dis386 {
2450   const char *name;
2451   struct
2452     {
2453       op_rtn rtn;
2454       int bytemode;
2455     } op[MAX_OPERANDS];
2456   unsigned int prefix_requirement;
2457 };
2458 
2459 /* Upper case letters in the instruction names here are macros.
2460    'A' => print 'b' if no register operands or suffix_always is true
2461    'B' => print 'b' if suffix_always is true
2462    'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
2463 	  size prefix
2464    'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
2465 	  suffix_always is true
2466    'E' => print 'e' if 32-bit form of jcxz
2467    'F' => print 'w' or 'l' depending on address size prefix (loop insns)
2468    'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
2469    'H' => print ",pt" or ",pn" branch hint
2470    'I' => honor following macro letter even in Intel mode (implemented only
2471 	  for some of the macro letters)
2472    'J' => print 'l'
2473    'K' => print 'd' or 'q' if rex prefix is present.
2474    'L' => print 'l' if suffix_always is true
2475    'M' => print 'r' if intel_mnemonic is false.
2476    'N' => print 'n' if instruction has no wait "prefix"
2477    'O' => print 'd' or 'o' (or 'q' in Intel mode)
2478    'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
2479 	  or suffix_always is true.  print 'q' if rex prefix is present.
2480    'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2481 	  is true
2482    'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
2483    'S' => print 'w', 'l' or 'q' if suffix_always is true
2484    'T' => print 'q' in 64bit mode if instruction has no operand size
2485 	  prefix and behave as 'P' otherwise
2486    'U' => print 'q' in 64bit mode if instruction has no operand size
2487 	  prefix and behave as 'Q' otherwise
2488    'V' => print 'q' in 64bit mode if instruction has no operand size
2489 	  prefix and behave as 'S' otherwise
2490    'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
2491    'X' => print 's', 'd' depending on data16 prefix (for XMM)
2492    'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2493 	  suffix_always is true.
2494    'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
2495    '!' => change condition from true to false or from false to true.
2496    '%' => add 1 upper case letter to the macro.
2497    '^' => print 'w' or 'l' depending on operand size prefix or
2498 	  suffix_always is true (lcall/ljmp).
2499    '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2500 	  on operand size prefix.
2501    '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2502 	  has no operand size prefix for AMD64 ISA, behave as 'P'
2503 	  otherwise
2504 
2505    2 upper case letter macros:
2506    "XY" => print 'x' or 'y' if suffix_always is true or no register
2507 	   operands and no broadcast.
2508    "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2509 	   register operands and no broadcast.
2510    "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2511    "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
2512 	   or suffix_always is true
2513    "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2514    "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2515    "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
2516    "LW" => print 'd', 'q' depending on the VEX.W bit
2517    "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2518 	   an operand size prefix, or suffix_always is true.  print
2519 	   'q' if rex prefix is present.
2520 
2521    Many of the above letters print nothing in Intel mode.  See "putop"
2522    for the details.
2523 
2524    Braces '{' and '}', and vertical bars '|', indicate alternative
2525    mnemonic strings for AT&T and Intel.  */
2526 
2527 static const struct dis386 dis386[] = {
2528   /* 00 */
2529   { "addB",		{ Ebh1, Gb }, 0 },
2530   { "addS",		{ Evh1, Gv }, 0 },
2531   { "addB",		{ Gb, EbS }, 0 },
2532   { "addS",		{ Gv, EvS }, 0 },
2533   { "addB",		{ AL, Ib }, 0 },
2534   { "addS",		{ eAX, Iv }, 0 },
2535   { X86_64_TABLE (X86_64_06) },
2536   { X86_64_TABLE (X86_64_07) },
2537   /* 08 */
2538   { "orB",		{ Ebh1, Gb }, 0 },
2539   { "orS",		{ Evh1, Gv }, 0 },
2540   { "orB",		{ Gb, EbS }, 0 },
2541   { "orS",		{ Gv, EvS }, 0 },
2542   { "orB",		{ AL, Ib }, 0 },
2543   { "orS",		{ eAX, Iv }, 0 },
2544   { X86_64_TABLE (X86_64_0D) },
2545   { Bad_Opcode },	/* 0x0f extended opcode escape */
2546   /* 10 */
2547   { "adcB",		{ Ebh1, Gb }, 0 },
2548   { "adcS",		{ Evh1, Gv }, 0 },
2549   { "adcB",		{ Gb, EbS }, 0 },
2550   { "adcS",		{ Gv, EvS }, 0 },
2551   { "adcB",		{ AL, Ib }, 0 },
2552   { "adcS",		{ eAX, Iv }, 0 },
2553   { X86_64_TABLE (X86_64_16) },
2554   { X86_64_TABLE (X86_64_17) },
2555   /* 18 */
2556   { "sbbB",		{ Ebh1, Gb }, 0 },
2557   { "sbbS",		{ Evh1, Gv }, 0 },
2558   { "sbbB",		{ Gb, EbS }, 0 },
2559   { "sbbS",		{ Gv, EvS }, 0 },
2560   { "sbbB",		{ AL, Ib }, 0 },
2561   { "sbbS",		{ eAX, Iv }, 0 },
2562   { X86_64_TABLE (X86_64_1E) },
2563   { X86_64_TABLE (X86_64_1F) },
2564   /* 20 */
2565   { "andB",		{ Ebh1, Gb }, 0 },
2566   { "andS",		{ Evh1, Gv }, 0 },
2567   { "andB",		{ Gb, EbS }, 0 },
2568   { "andS",		{ Gv, EvS }, 0 },
2569   { "andB",		{ AL, Ib }, 0 },
2570   { "andS",		{ eAX, Iv }, 0 },
2571   { Bad_Opcode },	/* SEG ES prefix */
2572   { X86_64_TABLE (X86_64_27) },
2573   /* 28 */
2574   { "subB",		{ Ebh1, Gb }, 0 },
2575   { "subS",		{ Evh1, Gv }, 0 },
2576   { "subB",		{ Gb, EbS }, 0 },
2577   { "subS",		{ Gv, EvS }, 0 },
2578   { "subB",		{ AL, Ib }, 0 },
2579   { "subS",		{ eAX, Iv }, 0 },
2580   { Bad_Opcode },	/* SEG CS prefix */
2581   { X86_64_TABLE (X86_64_2F) },
2582   /* 30 */
2583   { "xorB",		{ Ebh1, Gb }, 0 },
2584   { "xorS",		{ Evh1, Gv }, 0 },
2585   { "xorB",		{ Gb, EbS }, 0 },
2586   { "xorS",		{ Gv, EvS }, 0 },
2587   { "xorB",		{ AL, Ib }, 0 },
2588   { "xorS",		{ eAX, Iv }, 0 },
2589   { Bad_Opcode },	/* SEG SS prefix */
2590   { X86_64_TABLE (X86_64_37) },
2591   /* 38 */
2592   { "cmpB",		{ Eb, Gb }, 0 },
2593   { "cmpS",		{ Ev, Gv }, 0 },
2594   { "cmpB",		{ Gb, EbS }, 0 },
2595   { "cmpS",		{ Gv, EvS }, 0 },
2596   { "cmpB",		{ AL, Ib }, 0 },
2597   { "cmpS",		{ eAX, Iv }, 0 },
2598   { Bad_Opcode },	/* SEG DS prefix */
2599   { X86_64_TABLE (X86_64_3F) },
2600   /* 40 */
2601   { "inc{S|}",		{ RMeAX }, 0 },
2602   { "inc{S|}",		{ RMeCX }, 0 },
2603   { "inc{S|}",		{ RMeDX }, 0 },
2604   { "inc{S|}",		{ RMeBX }, 0 },
2605   { "inc{S|}",		{ RMeSP }, 0 },
2606   { "inc{S|}",		{ RMeBP }, 0 },
2607   { "inc{S|}",		{ RMeSI }, 0 },
2608   { "inc{S|}",		{ RMeDI }, 0 },
2609   /* 48 */
2610   { "dec{S|}",		{ RMeAX }, 0 },
2611   { "dec{S|}",		{ RMeCX }, 0 },
2612   { "dec{S|}",		{ RMeDX }, 0 },
2613   { "dec{S|}",		{ RMeBX }, 0 },
2614   { "dec{S|}",		{ RMeSP }, 0 },
2615   { "dec{S|}",		{ RMeBP }, 0 },
2616   { "dec{S|}",		{ RMeSI }, 0 },
2617   { "dec{S|}",		{ RMeDI }, 0 },
2618   /* 50 */
2619   { "pushV",		{ RMrAX }, 0 },
2620   { "pushV",		{ RMrCX }, 0 },
2621   { "pushV",		{ RMrDX }, 0 },
2622   { "pushV",		{ RMrBX }, 0 },
2623   { "pushV",		{ RMrSP }, 0 },
2624   { "pushV",		{ RMrBP }, 0 },
2625   { "pushV",		{ RMrSI }, 0 },
2626   { "pushV",		{ RMrDI }, 0 },
2627   /* 58 */
2628   { "popV",		{ RMrAX }, 0 },
2629   { "popV",		{ RMrCX }, 0 },
2630   { "popV",		{ RMrDX }, 0 },
2631   { "popV",		{ RMrBX }, 0 },
2632   { "popV",		{ RMrSP }, 0 },
2633   { "popV",		{ RMrBP }, 0 },
2634   { "popV",		{ RMrSI }, 0 },
2635   { "popV",		{ RMrDI }, 0 },
2636   /* 60 */
2637   { X86_64_TABLE (X86_64_60) },
2638   { X86_64_TABLE (X86_64_61) },
2639   { X86_64_TABLE (X86_64_62) },
2640   { X86_64_TABLE (X86_64_63) },
2641   { Bad_Opcode },	/* seg fs */
2642   { Bad_Opcode },	/* seg gs */
2643   { Bad_Opcode },	/* op size prefix */
2644   { Bad_Opcode },	/* adr size prefix */
2645   /* 68 */
2646   { "pushT",		{ sIv }, 0 },
2647   { "imulS",		{ Gv, Ev, Iv }, 0 },
2648   { "pushT",		{ sIbT }, 0 },
2649   { "imulS",		{ Gv, Ev, sIb }, 0 },
2650   { "ins{b|}",		{ Ybr, indirDX }, 0 },
2651   { X86_64_TABLE (X86_64_6D) },
2652   { "outs{b|}",		{ indirDXr, Xb }, 0 },
2653   { X86_64_TABLE (X86_64_6F) },
2654   /* 70 */
2655   { "joH",		{ Jb, BND, cond_jump_flag }, 0 },
2656   { "jnoH",		{ Jb, BND, cond_jump_flag }, 0 },
2657   { "jbH",		{ Jb, BND, cond_jump_flag }, 0 },
2658   { "jaeH",		{ Jb, BND, cond_jump_flag }, 0 },
2659   { "jeH",		{ Jb, BND, cond_jump_flag }, 0 },
2660   { "jneH",		{ Jb, BND, cond_jump_flag }, 0 },
2661   { "jbeH",		{ Jb, BND, cond_jump_flag }, 0 },
2662   { "jaH",		{ Jb, BND, cond_jump_flag }, 0 },
2663   /* 78 */
2664   { "jsH",		{ Jb, BND, cond_jump_flag }, 0 },
2665   { "jnsH",		{ Jb, BND, cond_jump_flag }, 0 },
2666   { "jpH",		{ Jb, BND, cond_jump_flag }, 0 },
2667   { "jnpH",		{ Jb, BND, cond_jump_flag }, 0 },
2668   { "jlH",		{ Jb, BND, cond_jump_flag }, 0 },
2669   { "jgeH",		{ Jb, BND, cond_jump_flag }, 0 },
2670   { "jleH",		{ Jb, BND, cond_jump_flag }, 0 },
2671   { "jgH",		{ Jb, BND, cond_jump_flag }, 0 },
2672   /* 80 */
2673   { REG_TABLE (REG_80) },
2674   { REG_TABLE (REG_81) },
2675   { X86_64_TABLE (X86_64_82) },
2676   { REG_TABLE (REG_83) },
2677   { "testB",		{ Eb, Gb }, 0 },
2678   { "testS",		{ Ev, Gv }, 0 },
2679   { "xchgB",		{ Ebh2, Gb }, 0 },
2680   { "xchgS",		{ Evh2, Gv }, 0 },
2681   /* 88 */
2682   { "movB",		{ Ebh3, Gb }, 0 },
2683   { "movS",		{ Evh3, Gv }, 0 },
2684   { "movB",		{ Gb, EbS }, 0 },
2685   { "movS",		{ Gv, EvS }, 0 },
2686   { "movD",		{ Sv, Sw }, 0 },
2687   { MOD_TABLE (MOD_8D) },
2688   { "movD",		{ Sw, Sv }, 0 },
2689   { REG_TABLE (REG_8F) },
2690   /* 90 */
2691   { PREFIX_TABLE (PREFIX_90) },
2692   { "xchgS",		{ RMeCX, eAX }, 0 },
2693   { "xchgS",		{ RMeDX, eAX }, 0 },
2694   { "xchgS",		{ RMeBX, eAX }, 0 },
2695   { "xchgS",		{ RMeSP, eAX }, 0 },
2696   { "xchgS",		{ RMeBP, eAX }, 0 },
2697   { "xchgS",		{ RMeSI, eAX }, 0 },
2698   { "xchgS",		{ RMeDI, eAX }, 0 },
2699   /* 98 */
2700   { "cW{t|}R",		{ XX }, 0 },
2701   { "cR{t|}O",		{ XX }, 0 },
2702   { X86_64_TABLE (X86_64_9A) },
2703   { Bad_Opcode },	/* fwait */
2704   { "pushfT",		{ XX }, 0 },
2705   { "popfT",		{ XX }, 0 },
2706   { "sahf",		{ XX }, 0 },
2707   { "lahf",		{ XX }, 0 },
2708   /* a0 */
2709   { "mov%LB",		{ AL, Ob }, 0 },
2710   { "mov%LS",		{ eAX, Ov }, 0 },
2711   { "mov%LB",		{ Ob, AL }, 0 },
2712   { "mov%LS",		{ Ov, eAX }, 0 },
2713   { "movs{b|}",		{ Ybr, Xb }, 0 },
2714   { "movs{R|}",		{ Yvr, Xv }, 0 },
2715   { "cmps{b|}",		{ Xb, Yb }, 0 },
2716   { "cmps{R|}",		{ Xv, Yv }, 0 },
2717   /* a8 */
2718   { "testB",		{ AL, Ib }, 0 },
2719   { "testS",		{ eAX, Iv }, 0 },
2720   { "stosB",		{ Ybr, AL }, 0 },
2721   { "stosS",		{ Yvr, eAX }, 0 },
2722   { "lodsB",		{ ALr, Xb }, 0 },
2723   { "lodsS",		{ eAXr, Xv }, 0 },
2724   { "scasB",		{ AL, Yb }, 0 },
2725   { "scasS",		{ eAX, Yv }, 0 },
2726   /* b0 */
2727   { "movB",		{ RMAL, Ib }, 0 },
2728   { "movB",		{ RMCL, Ib }, 0 },
2729   { "movB",		{ RMDL, Ib }, 0 },
2730   { "movB",		{ RMBL, Ib }, 0 },
2731   { "movB",		{ RMAH, Ib }, 0 },
2732   { "movB",		{ RMCH, Ib }, 0 },
2733   { "movB",		{ RMDH, Ib }, 0 },
2734   { "movB",		{ RMBH, Ib }, 0 },
2735   /* b8 */
2736   { "mov%LV",		{ RMeAX, Iv64 }, 0 },
2737   { "mov%LV",		{ RMeCX, Iv64 }, 0 },
2738   { "mov%LV",		{ RMeDX, Iv64 }, 0 },
2739   { "mov%LV",		{ RMeBX, Iv64 }, 0 },
2740   { "mov%LV",		{ RMeSP, Iv64 }, 0 },
2741   { "mov%LV",		{ RMeBP, Iv64 }, 0 },
2742   { "mov%LV",		{ RMeSI, Iv64 }, 0 },
2743   { "mov%LV",		{ RMeDI, Iv64 }, 0 },
2744   /* c0 */
2745   { REG_TABLE (REG_C0) },
2746   { REG_TABLE (REG_C1) },
2747   { "retT",		{ Iw, BND }, 0 },
2748   { "retT",		{ BND }, 0 },
2749   { X86_64_TABLE (X86_64_C4) },
2750   { X86_64_TABLE (X86_64_C5) },
2751   { REG_TABLE (REG_C6) },
2752   { REG_TABLE (REG_C7) },
2753   /* c8 */
2754   { "enterT",		{ Iw, Ib }, 0 },
2755   { "leaveT",		{ XX }, 0 },
2756   { "Jret{|f}P",	{ Iw }, 0 },
2757   { "Jret{|f}P",	{ XX }, 0 },
2758   { "int3",		{ XX }, 0 },
2759   { "int",		{ Ib }, 0 },
2760   { X86_64_TABLE (X86_64_CE) },
2761   { "iret%LP",		{ XX }, 0 },
2762   /* d0 */
2763   { REG_TABLE (REG_D0) },
2764   { REG_TABLE (REG_D1) },
2765   { REG_TABLE (REG_D2) },
2766   { REG_TABLE (REG_D3) },
2767   { X86_64_TABLE (X86_64_D4) },
2768   { X86_64_TABLE (X86_64_D5) },
2769   { Bad_Opcode },
2770   { "xlat",		{ DSBX }, 0 },
2771   /* d8 */
2772   { FLOAT },
2773   { FLOAT },
2774   { FLOAT },
2775   { FLOAT },
2776   { FLOAT },
2777   { FLOAT },
2778   { FLOAT },
2779   { FLOAT },
2780   /* e0 */
2781   { "loopneFH",		{ Jb, XX, loop_jcxz_flag }, 0 },
2782   { "loopeFH",		{ Jb, XX, loop_jcxz_flag }, 0 },
2783   { "loopFH",		{ Jb, XX, loop_jcxz_flag }, 0 },
2784   { "jEcxzH",		{ Jb, XX, loop_jcxz_flag }, 0 },
2785   { "inB",		{ AL, Ib }, 0 },
2786   { "inG",		{ zAX, Ib }, 0 },
2787   { "outB",		{ Ib, AL }, 0 },
2788   { "outG",		{ Ib, zAX }, 0 },
2789   /* e8 */
2790   { X86_64_TABLE (X86_64_E8) },
2791   { X86_64_TABLE (X86_64_E9) },
2792   { X86_64_TABLE (X86_64_EA) },
2793   { "jmp",		{ Jb, BND }, 0 },
2794   { "inB",		{ AL, indirDX }, 0 },
2795   { "inG",		{ zAX, indirDX }, 0 },
2796   { "outB",		{ indirDX, AL }, 0 },
2797   { "outG",		{ indirDX, zAX }, 0 },
2798   /* f0 */
2799   { Bad_Opcode },	/* lock prefix */
2800   { "icebp",		{ XX }, 0 },
2801   { Bad_Opcode },	/* repne */
2802   { Bad_Opcode },	/* repz */
2803   { "hlt",		{ XX }, 0 },
2804   { "cmc",		{ XX }, 0 },
2805   { REG_TABLE (REG_F6) },
2806   { REG_TABLE (REG_F7) },
2807   /* f8 */
2808   { "clc",		{ XX }, 0 },
2809   { "stc",		{ XX }, 0 },
2810   { "cli",		{ XX }, 0 },
2811   { "sti",		{ XX }, 0 },
2812   { "cld",		{ XX }, 0 },
2813   { "std",		{ XX }, 0 },
2814   { REG_TABLE (REG_FE) },
2815   { REG_TABLE (REG_FF) },
2816 };
2817 
2818 static const struct dis386 dis386_twobyte[] = {
2819   /* 00 */
2820   { REG_TABLE (REG_0F00 ) },
2821   { REG_TABLE (REG_0F01 ) },
2822   { "larS",		{ Gv, Ew }, 0 },
2823   { "lslS",		{ Gv, Ew }, 0 },
2824   { Bad_Opcode },
2825   { "syscall",		{ XX }, 0 },
2826   { "clts",		{ XX }, 0 },
2827   { "sysret%LP",		{ XX }, 0 },
2828   /* 08 */
2829   { "invd",		{ XX }, 0 },
2830   { "wbinvd",		{ XX }, 0 },
2831   { Bad_Opcode },
2832   { "ud2",		{ XX }, 0 },
2833   { Bad_Opcode },
2834   { REG_TABLE (REG_0F0D) },
2835   { "femms",		{ XX }, 0 },
2836   { "",			{ MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix.  */
2837   /* 10 */
2838   { PREFIX_TABLE (PREFIX_0F10) },
2839   { PREFIX_TABLE (PREFIX_0F11) },
2840   { PREFIX_TABLE (PREFIX_0F12) },
2841   { MOD_TABLE (MOD_0F13) },
2842   { "unpcklpX",		{ XM, EXx }, PREFIX_OPCODE },
2843   { "unpckhpX",		{ XM, EXx }, PREFIX_OPCODE },
2844   { PREFIX_TABLE (PREFIX_0F16) },
2845   { MOD_TABLE (MOD_0F17) },
2846   /* 18 */
2847   { REG_TABLE (REG_0F18) },
2848   { "nopQ",		{ Ev }, 0 },
2849   { PREFIX_TABLE (PREFIX_0F1A) },
2850   { PREFIX_TABLE (PREFIX_0F1B) },
2851   { "nopQ",		{ Ev }, 0 },
2852   { "nopQ",		{ Ev }, 0 },
2853   { PREFIX_TABLE (PREFIX_0F1E) },
2854   { "nopQ",		{ Ev }, 0 },
2855   /* 20 */
2856   { "movZ",		{ Rm, Cm }, 0 },
2857   { "movZ",		{ Rm, Dm }, 0 },
2858   { "movZ",		{ Cm, Rm }, 0 },
2859   { "movZ",		{ Dm, Rm }, 0 },
2860   { MOD_TABLE (MOD_0F24) },
2861   { Bad_Opcode },
2862   { MOD_TABLE (MOD_0F26) },
2863   { Bad_Opcode },
2864   /* 28 */
2865   { "movapX",		{ XM, EXx }, PREFIX_OPCODE },
2866   { "movapX",		{ EXxS, XM }, PREFIX_OPCODE },
2867   { PREFIX_TABLE (PREFIX_0F2A) },
2868   { PREFIX_TABLE (PREFIX_0F2B) },
2869   { PREFIX_TABLE (PREFIX_0F2C) },
2870   { PREFIX_TABLE (PREFIX_0F2D) },
2871   { PREFIX_TABLE (PREFIX_0F2E) },
2872   { PREFIX_TABLE (PREFIX_0F2F) },
2873   /* 30 */
2874   { "wrmsr",		{ XX }, 0 },
2875   { "rdtsc",		{ XX }, 0 },
2876   { "rdmsr",		{ XX }, 0 },
2877   { "rdpmc",		{ XX }, 0 },
2878   { "sysenter",		{ XX }, 0 },
2879   { "sysexit",		{ XX }, 0 },
2880   { Bad_Opcode },
2881   { "getsec",		{ XX }, 0 },
2882   /* 38 */
2883   { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
2884   { Bad_Opcode },
2885   { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
2886   { Bad_Opcode },
2887   { Bad_Opcode },
2888   { Bad_Opcode },
2889   { Bad_Opcode },
2890   { Bad_Opcode },
2891   /* 40 */
2892   { "cmovoS",		{ Gv, Ev }, 0 },
2893   { "cmovnoS",		{ Gv, Ev }, 0 },
2894   { "cmovbS",		{ Gv, Ev }, 0 },
2895   { "cmovaeS",		{ Gv, Ev }, 0 },
2896   { "cmoveS",		{ Gv, Ev }, 0 },
2897   { "cmovneS",		{ Gv, Ev }, 0 },
2898   { "cmovbeS",		{ Gv, Ev }, 0 },
2899   { "cmovaS",		{ Gv, Ev }, 0 },
2900   /* 48 */
2901   { "cmovsS",		{ Gv, Ev }, 0 },
2902   { "cmovnsS",		{ Gv, Ev }, 0 },
2903   { "cmovpS",		{ Gv, Ev }, 0 },
2904   { "cmovnpS",		{ Gv, Ev }, 0 },
2905   { "cmovlS",		{ Gv, Ev }, 0 },
2906   { "cmovgeS",		{ Gv, Ev }, 0 },
2907   { "cmovleS",		{ Gv, Ev }, 0 },
2908   { "cmovgS",		{ Gv, Ev }, 0 },
2909   /* 50 */
2910   { MOD_TABLE (MOD_0F51) },
2911   { PREFIX_TABLE (PREFIX_0F51) },
2912   { PREFIX_TABLE (PREFIX_0F52) },
2913   { PREFIX_TABLE (PREFIX_0F53) },
2914   { "andpX",		{ XM, EXx }, PREFIX_OPCODE },
2915   { "andnpX",		{ XM, EXx }, PREFIX_OPCODE },
2916   { "orpX",		{ XM, EXx }, PREFIX_OPCODE },
2917   { "xorpX",		{ XM, EXx }, PREFIX_OPCODE },
2918   /* 58 */
2919   { PREFIX_TABLE (PREFIX_0F58) },
2920   { PREFIX_TABLE (PREFIX_0F59) },
2921   { PREFIX_TABLE (PREFIX_0F5A) },
2922   { PREFIX_TABLE (PREFIX_0F5B) },
2923   { PREFIX_TABLE (PREFIX_0F5C) },
2924   { PREFIX_TABLE (PREFIX_0F5D) },
2925   { PREFIX_TABLE (PREFIX_0F5E) },
2926   { PREFIX_TABLE (PREFIX_0F5F) },
2927   /* 60 */
2928   { PREFIX_TABLE (PREFIX_0F60) },
2929   { PREFIX_TABLE (PREFIX_0F61) },
2930   { PREFIX_TABLE (PREFIX_0F62) },
2931   { "packsswb",		{ MX, EM }, PREFIX_OPCODE },
2932   { "pcmpgtb",		{ MX, EM }, PREFIX_OPCODE },
2933   { "pcmpgtw",		{ MX, EM }, PREFIX_OPCODE },
2934   { "pcmpgtd",		{ MX, EM }, PREFIX_OPCODE },
2935   { "packuswb",		{ MX, EM }, PREFIX_OPCODE },
2936   /* 68 */
2937   { "punpckhbw",	{ MX, EM }, PREFIX_OPCODE },
2938   { "punpckhwd",	{ MX, EM }, PREFIX_OPCODE },
2939   { "punpckhdq",	{ MX, EM }, PREFIX_OPCODE },
2940   { "packssdw",		{ MX, EM }, PREFIX_OPCODE },
2941   { PREFIX_TABLE (PREFIX_0F6C) },
2942   { PREFIX_TABLE (PREFIX_0F6D) },
2943   { "movK",		{ MX, Edq }, PREFIX_OPCODE },
2944   { PREFIX_TABLE (PREFIX_0F6F) },
2945   /* 70 */
2946   { PREFIX_TABLE (PREFIX_0F70) },
2947   { REG_TABLE (REG_0F71) },
2948   { REG_TABLE (REG_0F72) },
2949   { REG_TABLE (REG_0F73) },
2950   { "pcmpeqb",		{ MX, EM }, PREFIX_OPCODE },
2951   { "pcmpeqw",		{ MX, EM }, PREFIX_OPCODE },
2952   { "pcmpeqd",		{ MX, EM }, PREFIX_OPCODE },
2953   { "emms",		{ XX }, PREFIX_OPCODE },
2954   /* 78 */
2955   { PREFIX_TABLE (PREFIX_0F78) },
2956   { PREFIX_TABLE (PREFIX_0F79) },
2957   { Bad_Opcode },
2958   { Bad_Opcode },
2959   { PREFIX_TABLE (PREFIX_0F7C) },
2960   { PREFIX_TABLE (PREFIX_0F7D) },
2961   { PREFIX_TABLE (PREFIX_0F7E) },
2962   { PREFIX_TABLE (PREFIX_0F7F) },
2963   /* 80 */
2964   { "joH",		{ Jv, BND, cond_jump_flag }, 0 },
2965   { "jnoH",		{ Jv, BND, cond_jump_flag }, 0 },
2966   { "jbH",		{ Jv, BND, cond_jump_flag }, 0 },
2967   { "jaeH",		{ Jv, BND, cond_jump_flag }, 0 },
2968   { "jeH",		{ Jv, BND, cond_jump_flag }, 0 },
2969   { "jneH",		{ Jv, BND, cond_jump_flag }, 0 },
2970   { "jbeH",		{ Jv, BND, cond_jump_flag }, 0 },
2971   { "jaH",		{ Jv, BND, cond_jump_flag }, 0 },
2972   /* 88 */
2973   { "jsH",		{ Jv, BND, cond_jump_flag }, 0 },
2974   { "jnsH",		{ Jv, BND, cond_jump_flag }, 0 },
2975   { "jpH",		{ Jv, BND, cond_jump_flag }, 0 },
2976   { "jnpH",		{ Jv, BND, cond_jump_flag }, 0 },
2977   { "jlH",		{ Jv, BND, cond_jump_flag }, 0 },
2978   { "jgeH",		{ Jv, BND, cond_jump_flag }, 0 },
2979   { "jleH",		{ Jv, BND, cond_jump_flag }, 0 },
2980   { "jgH",		{ Jv, BND, cond_jump_flag }, 0 },
2981   /* 90 */
2982   { "seto",		{ Eb }, 0 },
2983   { "setno",		{ Eb }, 0 },
2984   { "setb",		{ Eb }, 0 },
2985   { "setae",		{ Eb }, 0 },
2986   { "sete",		{ Eb }, 0 },
2987   { "setne",		{ Eb }, 0 },
2988   { "setbe",		{ Eb }, 0 },
2989   { "seta",		{ Eb }, 0 },
2990   /* 98 */
2991   { "sets",		{ Eb }, 0 },
2992   { "setns",		{ Eb }, 0 },
2993   { "setp",		{ Eb }, 0 },
2994   { "setnp",		{ Eb }, 0 },
2995   { "setl",		{ Eb }, 0 },
2996   { "setge",		{ Eb }, 0 },
2997   { "setle",		{ Eb }, 0 },
2998   { "setg",		{ Eb }, 0 },
2999   /* a0 */
3000   { "pushT",		{ fs }, 0 },
3001   { "popT",		{ fs }, 0 },
3002   { "cpuid",		{ XX }, 0 },
3003   { "btS",		{ Ev, Gv }, 0 },
3004   { "shldS",		{ Ev, Gv, Ib }, 0 },
3005   { "shldS",		{ Ev, Gv, CL }, 0 },
3006   { REG_TABLE (REG_0FA6) },
3007   { REG_TABLE (REG_0FA7) },
3008   /* a8 */
3009   { "pushT",		{ gs }, 0 },
3010   { "popT",		{ gs }, 0 },
3011   { "rsm",		{ XX }, 0 },
3012   { "btsS",		{ Evh1, Gv }, 0 },
3013   { "shrdS",		{ Ev, Gv, Ib }, 0 },
3014   { "shrdS",		{ Ev, Gv, CL }, 0 },
3015   { REG_TABLE (REG_0FAE) },
3016   { "imulS",		{ Gv, Ev }, 0 },
3017   /* b0 */
3018   { "cmpxchgB",		{ Ebh1, Gb }, 0 },
3019   { "cmpxchgS",		{ Evh1, Gv }, 0 },
3020   { MOD_TABLE (MOD_0FB2) },
3021   { "btrS",		{ Evh1, Gv }, 0 },
3022   { MOD_TABLE (MOD_0FB4) },
3023   { MOD_TABLE (MOD_0FB5) },
3024   { "movz{bR|x}",	{ Gv, Eb }, 0 },
3025   { "movz{wR|x}",	{ Gv, Ew }, 0 }, /* yes, there really is movzww ! */
3026   /* b8 */
3027   { PREFIX_TABLE (PREFIX_0FB8) },
3028   { "ud1",		{ XX }, 0 },
3029   { REG_TABLE (REG_0FBA) },
3030   { "btcS",		{ Evh1, Gv }, 0 },
3031   { PREFIX_TABLE (PREFIX_0FBC) },
3032   { PREFIX_TABLE (PREFIX_0FBD) },
3033   { "movs{bR|x}",	{ Gv, Eb }, 0 },
3034   { "movs{wR|x}",	{ Gv, Ew }, 0 }, /* yes, there really is movsww ! */
3035   /* c0 */
3036   { "xaddB",		{ Ebh1, Gb }, 0 },
3037   { "xaddS",		{ Evh1, Gv }, 0 },
3038   { PREFIX_TABLE (PREFIX_0FC2) },
3039   { MOD_TABLE (MOD_0FC3) },
3040   { "pinsrw",		{ MX, Edqw, Ib }, PREFIX_OPCODE },
3041   { "pextrw",		{ Gdq, MS, Ib }, PREFIX_OPCODE },
3042   { "shufpX",		{ XM, EXx, Ib }, PREFIX_OPCODE },
3043   { REG_TABLE (REG_0FC7) },
3044   /* c8 */
3045   { "bswap",		{ RMeAX }, 0 },
3046   { "bswap",		{ RMeCX }, 0 },
3047   { "bswap",		{ RMeDX }, 0 },
3048   { "bswap",		{ RMeBX }, 0 },
3049   { "bswap",		{ RMeSP }, 0 },
3050   { "bswap",		{ RMeBP }, 0 },
3051   { "bswap",		{ RMeSI }, 0 },
3052   { "bswap",		{ RMeDI }, 0 },
3053   /* d0 */
3054   { PREFIX_TABLE (PREFIX_0FD0) },
3055   { "psrlw",		{ MX, EM }, PREFIX_OPCODE },
3056   { "psrld",		{ MX, EM }, PREFIX_OPCODE },
3057   { "psrlq",		{ MX, EM }, PREFIX_OPCODE },
3058   { "paddq",		{ MX, EM }, PREFIX_OPCODE },
3059   { "pmullw",		{ MX, EM }, PREFIX_OPCODE },
3060   { PREFIX_TABLE (PREFIX_0FD6) },
3061   { MOD_TABLE (MOD_0FD7) },
3062   /* d8 */
3063   { "psubusb",		{ MX, EM }, PREFIX_OPCODE },
3064   { "psubusw",		{ MX, EM }, PREFIX_OPCODE },
3065   { "pminub",		{ MX, EM }, PREFIX_OPCODE },
3066   { "pand",		{ MX, EM }, PREFIX_OPCODE },
3067   { "paddusb",		{ MX, EM }, PREFIX_OPCODE },
3068   { "paddusw",		{ MX, EM }, PREFIX_OPCODE },
3069   { "pmaxub",		{ MX, EM }, PREFIX_OPCODE },
3070   { "pandn",		{ MX, EM }, PREFIX_OPCODE },
3071   /* e0 */
3072   { "pavgb",		{ MX, EM }, PREFIX_OPCODE },
3073   { "psraw",		{ MX, EM }, PREFIX_OPCODE },
3074   { "psrad",		{ MX, EM }, PREFIX_OPCODE },
3075   { "pavgw",		{ MX, EM }, PREFIX_OPCODE },
3076   { "pmulhuw",		{ MX, EM }, PREFIX_OPCODE },
3077   { "pmulhw",		{ MX, EM }, PREFIX_OPCODE },
3078   { PREFIX_TABLE (PREFIX_0FE6) },
3079   { PREFIX_TABLE (PREFIX_0FE7) },
3080   /* e8 */
3081   { "psubsb",		{ MX, EM }, PREFIX_OPCODE },
3082   { "psubsw",		{ MX, EM }, PREFIX_OPCODE },
3083   { "pminsw",		{ MX, EM }, PREFIX_OPCODE },
3084   { "por",		{ MX, EM }, PREFIX_OPCODE },
3085   { "paddsb",		{ MX, EM }, PREFIX_OPCODE },
3086   { "paddsw",		{ MX, EM }, PREFIX_OPCODE },
3087   { "pmaxsw",		{ MX, EM }, PREFIX_OPCODE },
3088   { "pxor",		{ MX, EM }, PREFIX_OPCODE },
3089   /* f0 */
3090   { PREFIX_TABLE (PREFIX_0FF0) },
3091   { "psllw",		{ MX, EM }, PREFIX_OPCODE },
3092   { "pslld",		{ MX, EM }, PREFIX_OPCODE },
3093   { "psllq",		{ MX, EM }, PREFIX_OPCODE },
3094   { "pmuludq",		{ MX, EM }, PREFIX_OPCODE },
3095   { "pmaddwd",		{ MX, EM }, PREFIX_OPCODE },
3096   { "psadbw",		{ MX, EM }, PREFIX_OPCODE },
3097   { PREFIX_TABLE (PREFIX_0FF7) },
3098   /* f8 */
3099   { "psubb",		{ MX, EM }, PREFIX_OPCODE },
3100   { "psubw",		{ MX, EM }, PREFIX_OPCODE },
3101   { "psubd",		{ MX, EM }, PREFIX_OPCODE },
3102   { "psubq",		{ MX, EM }, PREFIX_OPCODE },
3103   { "paddb",		{ MX, EM }, PREFIX_OPCODE },
3104   { "paddw",		{ MX, EM }, PREFIX_OPCODE },
3105   { "paddd",		{ MX, EM }, PREFIX_OPCODE },
3106   { Bad_Opcode },
3107 };
3108 
3109 static const unsigned char onebyte_has_modrm[256] = {
3110   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
3111   /*       -------------------------------        */
3112   /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3113   /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3114   /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3115   /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3116   /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3117   /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3118   /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3119   /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3120   /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3121   /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3122   /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3123   /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3124   /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3125   /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3126   /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3127   /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1  /* f0 */
3128   /*       -------------------------------        */
3129   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
3130 };
3131 
3132 static const unsigned char twobyte_has_modrm[256] = {
3133   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
3134   /*       -------------------------------        */
3135   /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
3136   /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
3137   /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
3138   /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
3139   /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
3140   /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3141   /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
3142   /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
3143   /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3144   /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
3145   /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
3146   /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
3147   /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
3148   /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
3149   /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
3150   /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0  /* ff */
3151   /*       -------------------------------        */
3152   /*       0 1 2 3 4 5 6 7 8 9 a b c d e f        */
3153 };
3154 
3155 static char obuf[100];
3156 static char *obufp;
3157 static char *mnemonicendp;
3158 static char scratchbuf[100];
3159 static unsigned char *start_codep;
3160 static unsigned char *insn_codep;
3161 static unsigned char *codep;
3162 static unsigned char *end_codep;
3163 static int last_lock_prefix;
3164 static int last_repz_prefix;
3165 static int last_repnz_prefix;
3166 static int last_data_prefix;
3167 static int last_addr_prefix;
3168 static int last_rex_prefix;
3169 static int last_seg_prefix;
3170 static int fwait_prefix;
3171 /* The active segment register prefix.  */
3172 static int active_seg_prefix;
3173 #define MAX_CODE_LENGTH 15
3174 /* We can up to 14 prefixes since the maximum instruction length is
3175    15bytes.  */
3176 static int all_prefixes[MAX_CODE_LENGTH - 1];
3177 static disassemble_info *the_info;
3178 static struct
3179   {
3180     int mod;
3181     int reg;
3182     int rm;
3183   }
3184 modrm;
3185 static unsigned char need_modrm;
3186 static struct
3187   {
3188     int scale;
3189     int index;
3190     int base;
3191   }
3192 sib;
3193 static struct
3194   {
3195     int register_specifier;
3196     int length;
3197     int prefix;
3198     int w;
3199     int evex;
3200     int r;
3201     int v;
3202     int mask_register_specifier;
3203     int zeroing;
3204     int ll;
3205     int b;
3206   }
3207 vex;
3208 static unsigned char need_vex;
3209 static unsigned char need_vex_reg;
3210 static unsigned char vex_w_done;
3211 
3212 struct op
3213   {
3214     const char *name;
3215     unsigned int len;
3216   };
3217 
3218 /* If we are accessing mod/rm/reg without need_modrm set, then the
3219    values are stale.  Hitting this abort likely indicates that you
3220    need to update onebyte_has_modrm or twobyte_has_modrm.  */
3221 #define MODRM_CHECK  if (!need_modrm) abort ()
3222 
3223 static const char **names64;
3224 static const char **names32;
3225 static const char **names16;
3226 static const char **names8;
3227 static const char **names8rex;
3228 static const char **names_seg;
3229 static const char *index64;
3230 static const char *index32;
3231 static const char **index16;
3232 static const char **names_bnd;
3233 
3234 static const char *intel_names64[] = {
3235   "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3236   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3237 };
3238 static const char *intel_names32[] = {
3239   "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3240   "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3241 };
3242 static const char *intel_names16[] = {
3243   "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3244   "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3245 };
3246 static const char *intel_names8[] = {
3247   "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3248 };
3249 static const char *intel_names8rex[] = {
3250   "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3251   "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3252 };
3253 static const char *intel_names_seg[] = {
3254   "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3255 };
3256 static const char *intel_index64 = "riz";
3257 static const char *intel_index32 = "eiz";
3258 static const char *intel_index16[] = {
3259   "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3260 };
3261 
3262 static const char *att_names64[] = {
3263   "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
3264   "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3265 };
3266 static const char *att_names32[] = {
3267   "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
3268   "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
3269 };
3270 static const char *att_names16[] = {
3271   "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
3272   "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
3273 };
3274 static const char *att_names8[] = {
3275   "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
3276 };
3277 static const char *att_names8rex[] = {
3278   "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
3279   "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3280 };
3281 static const char *att_names_seg[] = {
3282   "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
3283 };
3284 static const char *att_index64 = "%riz";
3285 static const char *att_index32 = "%eiz";
3286 static const char *att_index16[] = {
3287   "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
3288 };
3289 
3290 static const char **names_mm;
3291 static const char *intel_names_mm[] = {
3292   "mm0", "mm1", "mm2", "mm3",
3293   "mm4", "mm5", "mm6", "mm7"
3294 };
3295 static const char *att_names_mm[] = {
3296   "%mm0", "%mm1", "%mm2", "%mm3",
3297   "%mm4", "%mm5", "%mm6", "%mm7"
3298 };
3299 
3300 static const char *intel_names_bnd[] = {
3301   "bnd0", "bnd1", "bnd2", "bnd3"
3302 };
3303 
3304 static const char *att_names_bnd[] = {
3305   "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3306 };
3307 
3308 static const char **names_xmm;
3309 static const char *intel_names_xmm[] = {
3310   "xmm0", "xmm1", "xmm2", "xmm3",
3311   "xmm4", "xmm5", "xmm6", "xmm7",
3312   "xmm8", "xmm9", "xmm10", "xmm11",
3313   "xmm12", "xmm13", "xmm14", "xmm15",
3314   "xmm16", "xmm17", "xmm18", "xmm19",
3315   "xmm20", "xmm21", "xmm22", "xmm23",
3316   "xmm24", "xmm25", "xmm26", "xmm27",
3317   "xmm28", "xmm29", "xmm30", "xmm31"
3318 };
3319 static const char *att_names_xmm[] = {
3320   "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3321   "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3322   "%xmm8", "%xmm9", "%xmm10", "%xmm11",
3323   "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3324   "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3325   "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3326   "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3327   "%xmm28", "%xmm29", "%xmm30", "%xmm31"
3328 };
3329 
3330 static const char **names_ymm;
3331 static const char *intel_names_ymm[] = {
3332   "ymm0", "ymm1", "ymm2", "ymm3",
3333   "ymm4", "ymm5", "ymm6", "ymm7",
3334   "ymm8", "ymm9", "ymm10", "ymm11",
3335   "ymm12", "ymm13", "ymm14", "ymm15",
3336   "ymm16", "ymm17", "ymm18", "ymm19",
3337   "ymm20", "ymm21", "ymm22", "ymm23",
3338   "ymm24", "ymm25", "ymm26", "ymm27",
3339   "ymm28", "ymm29", "ymm30", "ymm31"
3340 };
3341 static const char *att_names_ymm[] = {
3342   "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3343   "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3344   "%ymm8", "%ymm9", "%ymm10", "%ymm11",
3345   "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3346   "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3347   "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3348   "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3349   "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3350 };
3351 
3352 static const char **names_zmm;
3353 static const char *intel_names_zmm[] = {
3354   "zmm0", "zmm1", "zmm2", "zmm3",
3355   "zmm4", "zmm5", "zmm6", "zmm7",
3356   "zmm8", "zmm9", "zmm10", "zmm11",
3357   "zmm12", "zmm13", "zmm14", "zmm15",
3358   "zmm16", "zmm17", "zmm18", "zmm19",
3359   "zmm20", "zmm21", "zmm22", "zmm23",
3360   "zmm24", "zmm25", "zmm26", "zmm27",
3361   "zmm28", "zmm29", "zmm30", "zmm31"
3362 };
3363 static const char *att_names_zmm[] = {
3364   "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3365   "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3366   "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3367   "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3368   "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3369   "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3370   "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3371   "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3372 };
3373 
3374 static const char **names_mask;
3375 static const char *intel_names_mask[] = {
3376   "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3377 };
3378 static const char *att_names_mask[] = {
3379   "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3380 };
3381 
3382 static const char *names_rounding[] =
3383 {
3384   "{rn-sae}",
3385   "{rd-sae}",
3386   "{ru-sae}",
3387   "{rz-sae}"
3388 };
3389 
3390 static const struct dis386 reg_table[][8] = {
3391   /* REG_80 */
3392   {
3393     { "addA",	{ Ebh1, Ib }, 0 },
3394     { "orA",	{ Ebh1, Ib }, 0 },
3395     { "adcA",	{ Ebh1, Ib }, 0 },
3396     { "sbbA",	{ Ebh1, Ib }, 0 },
3397     { "andA",	{ Ebh1, Ib }, 0 },
3398     { "subA",	{ Ebh1, Ib }, 0 },
3399     { "xorA",	{ Ebh1, Ib }, 0 },
3400     { "cmpA",	{ Eb, Ib }, 0 },
3401   },
3402   /* REG_81 */
3403   {
3404     { "addQ",	{ Evh1, Iv }, 0 },
3405     { "orQ",	{ Evh1, Iv }, 0 },
3406     { "adcQ",	{ Evh1, Iv }, 0 },
3407     { "sbbQ",	{ Evh1, Iv }, 0 },
3408     { "andQ",	{ Evh1, Iv }, 0 },
3409     { "subQ",	{ Evh1, Iv }, 0 },
3410     { "xorQ",	{ Evh1, Iv }, 0 },
3411     { "cmpQ",	{ Ev, Iv }, 0 },
3412   },
3413   /* REG_83 */
3414   {
3415     { "addQ",	{ Evh1, sIb }, 0 },
3416     { "orQ",	{ Evh1, sIb }, 0 },
3417     { "adcQ",	{ Evh1, sIb }, 0 },
3418     { "sbbQ",	{ Evh1, sIb }, 0 },
3419     { "andQ",	{ Evh1, sIb }, 0 },
3420     { "subQ",	{ Evh1, sIb }, 0 },
3421     { "xorQ",	{ Evh1, sIb }, 0 },
3422     { "cmpQ",	{ Ev, sIb }, 0 },
3423   },
3424   /* REG_8F */
3425   {
3426     { "popU",	{ stackEv }, 0 },
3427     { XOP_8F_TABLE (XOP_09) },
3428     { Bad_Opcode },
3429     { Bad_Opcode },
3430     { Bad_Opcode },
3431     { XOP_8F_TABLE (XOP_09) },
3432   },
3433   /* REG_C0 */
3434   {
3435     { "rolA",	{ Eb, Ib }, 0 },
3436     { "rorA",	{ Eb, Ib }, 0 },
3437     { "rclA",	{ Eb, Ib }, 0 },
3438     { "rcrA",	{ Eb, Ib }, 0 },
3439     { "shlA",	{ Eb, Ib }, 0 },
3440     { "shrA",	{ Eb, Ib }, 0 },
3441     { Bad_Opcode },
3442     { "sarA",	{ Eb, Ib }, 0 },
3443   },
3444   /* REG_C1 */
3445   {
3446     { "rolQ",	{ Ev, Ib }, 0 },
3447     { "rorQ",	{ Ev, Ib }, 0 },
3448     { "rclQ",	{ Ev, Ib }, 0 },
3449     { "rcrQ",	{ Ev, Ib }, 0 },
3450     { "shlQ",	{ Ev, Ib }, 0 },
3451     { "shrQ",	{ Ev, Ib }, 0 },
3452     { Bad_Opcode },
3453     { "sarQ",	{ Ev, Ib }, 0 },
3454   },
3455   /* REG_C6 */
3456   {
3457     { "movA",	{ Ebh3, Ib }, 0 },
3458     { Bad_Opcode },
3459     { Bad_Opcode },
3460     { Bad_Opcode },
3461     { Bad_Opcode },
3462     { Bad_Opcode },
3463     { Bad_Opcode },
3464     { MOD_TABLE (MOD_C6_REG_7) },
3465   },
3466   /* REG_C7 */
3467   {
3468     { "movQ",	{ Evh3, Iv }, 0 },
3469     { Bad_Opcode },
3470     { Bad_Opcode },
3471     { Bad_Opcode },
3472     { Bad_Opcode },
3473     { Bad_Opcode },
3474     { Bad_Opcode },
3475     { MOD_TABLE (MOD_C7_REG_7) },
3476   },
3477   /* REG_D0 */
3478   {
3479     { "rolA",	{ Eb, I1 }, 0 },
3480     { "rorA",	{ Eb, I1 }, 0 },
3481     { "rclA",	{ Eb, I1 }, 0 },
3482     { "rcrA",	{ Eb, I1 }, 0 },
3483     { "shlA",	{ Eb, I1 }, 0 },
3484     { "shrA",	{ Eb, I1 }, 0 },
3485     { Bad_Opcode },
3486     { "sarA",	{ Eb, I1 }, 0 },
3487   },
3488   /* REG_D1 */
3489   {
3490     { "rolQ",	{ Ev, I1 }, 0 },
3491     { "rorQ",	{ Ev, I1 }, 0 },
3492     { "rclQ",	{ Ev, I1 }, 0 },
3493     { "rcrQ",	{ Ev, I1 }, 0 },
3494     { "shlQ",	{ Ev, I1 }, 0 },
3495     { "shrQ",	{ Ev, I1 }, 0 },
3496     { Bad_Opcode },
3497     { "sarQ",	{ Ev, I1 }, 0 },
3498   },
3499   /* REG_D2 */
3500   {
3501     { "rolA",	{ Eb, CL }, 0 },
3502     { "rorA",	{ Eb, CL }, 0 },
3503     { "rclA",	{ Eb, CL }, 0 },
3504     { "rcrA",	{ Eb, CL }, 0 },
3505     { "shlA",	{ Eb, CL }, 0 },
3506     { "shrA",	{ Eb, CL }, 0 },
3507     { Bad_Opcode },
3508     { "sarA",	{ Eb, CL }, 0 },
3509   },
3510   /* REG_D3 */
3511   {
3512     { "rolQ",	{ Ev, CL }, 0 },
3513     { "rorQ",	{ Ev, CL }, 0 },
3514     { "rclQ",	{ Ev, CL }, 0 },
3515     { "rcrQ",	{ Ev, CL }, 0 },
3516     { "shlQ",	{ Ev, CL }, 0 },
3517     { "shrQ",	{ Ev, CL }, 0 },
3518     { Bad_Opcode },
3519     { "sarQ",	{ Ev, CL }, 0 },
3520   },
3521   /* REG_F6 */
3522   {
3523     { "testA",	{ Eb, Ib }, 0 },
3524     { "testA",	{ Eb, Ib }, 0 },
3525     { "notA",	{ Ebh1 }, 0 },
3526     { "negA",	{ Ebh1 }, 0 },
3527     { "mulA",	{ Eb }, 0 },	/* Don't print the implicit %al register,  */
3528     { "imulA",	{ Eb }, 0 },	/* to distinguish these opcodes from other */
3529     { "divA",	{ Eb }, 0 },	/* mul/imul opcodes.  Do the same for div  */
3530     { "idivA",	{ Eb }, 0 },	/* and idiv for consistency.		   */
3531   },
3532   /* REG_F7 */
3533   {
3534     { "testQ",	{ Ev, Iv }, 0 },
3535     { "testQ",	{ Ev, Iv }, 0 },
3536     { "notQ",	{ Evh1 }, 0 },
3537     { "negQ",	{ Evh1 }, 0 },
3538     { "mulQ",	{ Ev }, 0 },	/* Don't print the implicit register.  */
3539     { "imulQ",	{ Ev }, 0 },
3540     { "divQ",	{ Ev }, 0 },
3541     { "idivQ",	{ Ev }, 0 },
3542   },
3543   /* REG_FE */
3544   {
3545     { "incA",	{ Ebh1 }, 0 },
3546     { "decA",	{ Ebh1 }, 0 },
3547   },
3548   /* REG_FF */
3549   {
3550     { "incQ",	{ Evh1 }, 0 },
3551     { "decQ",	{ Evh1 }, 0 },
3552     { "call{&|}", { indirEv, BND }, 0 },
3553     { MOD_TABLE (MOD_FF_REG_3) },
3554     { "jmp{&|}", { indirEv, BND }, 0 },
3555     { MOD_TABLE (MOD_FF_REG_5) },
3556     { "pushU",	{ stackEv }, 0 },
3557     { Bad_Opcode },
3558   },
3559   /* REG_0F00 */
3560   {
3561     { "sldtD",	{ Sv }, 0 },
3562     { "strD",	{ Sv }, 0 },
3563     { "lldt",	{ Ew }, 0 },
3564     { "ltr",	{ Ew }, 0 },
3565     { "verr",	{ Ew }, 0 },
3566     { "verw",	{ Ew }, 0 },
3567     { Bad_Opcode },
3568     { Bad_Opcode },
3569   },
3570   /* REG_0F01 */
3571   {
3572     { MOD_TABLE (MOD_0F01_REG_0) },
3573     { MOD_TABLE (MOD_0F01_REG_1) },
3574     { MOD_TABLE (MOD_0F01_REG_2) },
3575     { MOD_TABLE (MOD_0F01_REG_3) },
3576     { "smswD",	{ Sv }, 0 },
3577     { MOD_TABLE (MOD_0F01_REG_5) },
3578     { "lmsw",	{ Ew }, 0 },
3579     { MOD_TABLE (MOD_0F01_REG_7) },
3580   },
3581   /* REG_0F0D */
3582   {
3583     { "prefetch",	{ Mb }, 0 },
3584     { "prefetchw",	{ Mb }, 0 },
3585     { "prefetchwt1",	{ Mb }, 0 },
3586     { "prefetch",	{ Mb }, 0 },
3587     { "prefetch",	{ Mb }, 0 },
3588     { "prefetch",	{ Mb }, 0 },
3589     { "prefetch",	{ Mb }, 0 },
3590     { "prefetch",	{ Mb }, 0 },
3591   },
3592   /* REG_0F18 */
3593   {
3594     { MOD_TABLE (MOD_0F18_REG_0) },
3595     { MOD_TABLE (MOD_0F18_REG_1) },
3596     { MOD_TABLE (MOD_0F18_REG_2) },
3597     { MOD_TABLE (MOD_0F18_REG_3) },
3598     { MOD_TABLE (MOD_0F18_REG_4) },
3599     { MOD_TABLE (MOD_0F18_REG_5) },
3600     { MOD_TABLE (MOD_0F18_REG_6) },
3601     { MOD_TABLE (MOD_0F18_REG_7) },
3602   },
3603   /* REG_0F1E_MOD_3 */
3604   {
3605     { "nopQ",		{ Ev }, 0 },
3606     { "rdsspK",		{ Rdq }, PREFIX_OPCODE },
3607     { "nopQ",		{ Ev }, 0 },
3608     { "nopQ",		{ Ev }, 0 },
3609     { "nopQ",		{ Ev }, 0 },
3610     { "nopQ",		{ Ev }, 0 },
3611     { "nopQ",		{ Ev }, 0 },
3612     { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3613   },
3614   /* REG_0F71 */
3615   {
3616     { Bad_Opcode },
3617     { Bad_Opcode },
3618     { MOD_TABLE (MOD_0F71_REG_2) },
3619     { Bad_Opcode },
3620     { MOD_TABLE (MOD_0F71_REG_4) },
3621     { Bad_Opcode },
3622     { MOD_TABLE (MOD_0F71_REG_6) },
3623   },
3624   /* REG_0F72 */
3625   {
3626     { Bad_Opcode },
3627     { Bad_Opcode },
3628     { MOD_TABLE (MOD_0F72_REG_2) },
3629     { Bad_Opcode },
3630     { MOD_TABLE (MOD_0F72_REG_4) },
3631     { Bad_Opcode },
3632     { MOD_TABLE (MOD_0F72_REG_6) },
3633   },
3634   /* REG_0F73 */
3635   {
3636     { Bad_Opcode },
3637     { Bad_Opcode },
3638     { MOD_TABLE (MOD_0F73_REG_2) },
3639     { MOD_TABLE (MOD_0F73_REG_3) },
3640     { Bad_Opcode },
3641     { Bad_Opcode },
3642     { MOD_TABLE (MOD_0F73_REG_6) },
3643     { MOD_TABLE (MOD_0F73_REG_7) },
3644   },
3645   /* REG_0FA6 */
3646   {
3647     { "montmul",	{ { OP_0f07, 0 } }, 0 },
3648     { "xsha1",		{ { OP_0f07, 0 } }, 0 },
3649     { "xsha256",	{ { OP_0f07, 0 } }, 0 },
3650   },
3651   /* REG_0FA7 */
3652   {
3653     { "xstore-rng",	{ { OP_0f07, 0 } }, 0 },
3654     { "xcrypt-ecb",	{ { OP_0f07, 0 } }, 0 },
3655     { "xcrypt-cbc",	{ { OP_0f07, 0 } }, 0 },
3656     { "xcrypt-ctr",	{ { OP_0f07, 0 } }, 0 },
3657     { "xcrypt-cfb",	{ { OP_0f07, 0 } }, 0 },
3658     { "xcrypt-ofb",	{ { OP_0f07, 0 } }, 0 },
3659   },
3660   /* REG_0FAE */
3661   {
3662     { MOD_TABLE (MOD_0FAE_REG_0) },
3663     { MOD_TABLE (MOD_0FAE_REG_1) },
3664     { MOD_TABLE (MOD_0FAE_REG_2) },
3665     { MOD_TABLE (MOD_0FAE_REG_3) },
3666     { MOD_TABLE (MOD_0FAE_REG_4) },
3667     { MOD_TABLE (MOD_0FAE_REG_5) },
3668     { MOD_TABLE (MOD_0FAE_REG_6) },
3669     { MOD_TABLE (MOD_0FAE_REG_7) },
3670   },
3671   /* REG_0FBA */
3672   {
3673     { Bad_Opcode },
3674     { Bad_Opcode },
3675     { Bad_Opcode },
3676     { Bad_Opcode },
3677     { "btQ",	{ Ev, Ib }, 0 },
3678     { "btsQ",	{ Evh1, Ib }, 0 },
3679     { "btrQ",	{ Evh1, Ib }, 0 },
3680     { "btcQ",	{ Evh1, Ib }, 0 },
3681   },
3682   /* REG_0FC7 */
3683   {
3684     { Bad_Opcode },
3685     { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
3686     { Bad_Opcode },
3687     { MOD_TABLE (MOD_0FC7_REG_3) },
3688     { MOD_TABLE (MOD_0FC7_REG_4) },
3689     { MOD_TABLE (MOD_0FC7_REG_5) },
3690     { MOD_TABLE (MOD_0FC7_REG_6) },
3691     { MOD_TABLE (MOD_0FC7_REG_7) },
3692   },
3693   /* REG_VEX_0F71 */
3694   {
3695     { Bad_Opcode },
3696     { Bad_Opcode },
3697     { MOD_TABLE (MOD_VEX_0F71_REG_2) },
3698     { Bad_Opcode },
3699     { MOD_TABLE (MOD_VEX_0F71_REG_4) },
3700     { Bad_Opcode },
3701     { MOD_TABLE (MOD_VEX_0F71_REG_6) },
3702   },
3703   /* REG_VEX_0F72 */
3704   {
3705     { Bad_Opcode },
3706     { Bad_Opcode },
3707     { MOD_TABLE (MOD_VEX_0F72_REG_2) },
3708     { Bad_Opcode },
3709     { MOD_TABLE (MOD_VEX_0F72_REG_4) },
3710     { Bad_Opcode },
3711     { MOD_TABLE (MOD_VEX_0F72_REG_6) },
3712   },
3713   /* REG_VEX_0F73 */
3714   {
3715     { Bad_Opcode },
3716     { Bad_Opcode },
3717     { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3718     { MOD_TABLE (MOD_VEX_0F73_REG_3) },
3719     { Bad_Opcode },
3720     { Bad_Opcode },
3721     { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3722     { MOD_TABLE (MOD_VEX_0F73_REG_7) },
3723   },
3724   /* REG_VEX_0FAE */
3725   {
3726     { Bad_Opcode },
3727     { Bad_Opcode },
3728     { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3729     { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
3730   },
3731   /* REG_VEX_0F38F3 */
3732   {
3733     { Bad_Opcode },
3734     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3735     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3736     { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3737   },
3738   /* REG_XOP_LWPCB */
3739   {
3740     { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3741     { "slwpcb",	{ { OP_LWPCB_E, 0 } }, 0 },
3742   },
3743   /* REG_XOP_LWP */
3744   {
3745     { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3746     { "lwpval",	{ { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3747   },
3748   /* REG_XOP_TBM_01 */
3749   {
3750     { Bad_Opcode },
3751     { "blcfill",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3752     { "blsfill",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3753     { "blcs",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3754     { "tzmsk",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3755     { "blcic",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3756     { "blsic",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3757     { "t1mskc",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3758   },
3759   /* REG_XOP_TBM_02 */
3760   {
3761     { Bad_Opcode },
3762     { "blcmsk",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3763     { Bad_Opcode },
3764     { Bad_Opcode },
3765     { Bad_Opcode },
3766     { Bad_Opcode },
3767     { "blci",	{ { OP_LWP_E, 0 }, Ev }, 0 },
3768   },
3769 #define NEED_REG_TABLE
3770 #include "i386-dis-evex.h"
3771 #undef NEED_REG_TABLE
3772 };
3773 
3774 static const struct dis386 prefix_table[][4] = {
3775   /* PREFIX_90 */
3776   {
3777     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3778     { "pause", { XX }, 0 },
3779     { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3780     { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
3781   },
3782 
3783   /* PREFIX_MOD_0_0F01_REG_5 */
3784   {
3785     { Bad_Opcode },
3786     { "rstorssp",	{ Mq }, PREFIX_OPCODE },
3787   },
3788 
3789   /* PREFIX_MOD_3_0F01_REG_5_RM_1 */
3790   {
3791     { Bad_Opcode },
3792     { "incsspK",	{ Skip_MODRM }, PREFIX_OPCODE },
3793   },
3794 
3795   /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3796   {
3797     { Bad_Opcode },
3798     { "savessp",	{ Skip_MODRM }, PREFIX_OPCODE },
3799   },
3800 
3801   /* PREFIX_0F10 */
3802   {
3803     { "movups",	{ XM, EXx }, PREFIX_OPCODE },
3804     { "movss",	{ XM, EXd }, PREFIX_OPCODE },
3805     { "movupd",	{ XM, EXx }, PREFIX_OPCODE },
3806     { "movsd",	{ XM, EXq }, PREFIX_OPCODE },
3807   },
3808 
3809   /* PREFIX_0F11 */
3810   {
3811     { "movups",	{ EXxS, XM }, PREFIX_OPCODE },
3812     { "movss",	{ EXdS, XM }, PREFIX_OPCODE },
3813     { "movupd",	{ EXxS, XM }, PREFIX_OPCODE },
3814     { "movsd",	{ EXqS, XM }, PREFIX_OPCODE },
3815   },
3816 
3817   /* PREFIX_0F12 */
3818   {
3819     { MOD_TABLE (MOD_0F12_PREFIX_0) },
3820     { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3821     { "movlpd",	{ XM, EXq }, PREFIX_OPCODE },
3822     { "movddup", { XM, EXq }, PREFIX_OPCODE },
3823   },
3824 
3825   /* PREFIX_0F16 */
3826   {
3827     { MOD_TABLE (MOD_0F16_PREFIX_0) },
3828     { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3829     { "movhpd",	{ XM, EXq }, PREFIX_OPCODE },
3830   },
3831 
3832   /* PREFIX_0F1A */
3833   {
3834     { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3835     { "bndcl",  { Gbnd, Ev_bnd }, 0 },
3836     { "bndmov", { Gbnd, Ebnd }, 0 },
3837     { "bndcu",  { Gbnd, Ev_bnd }, 0 },
3838   },
3839 
3840   /* PREFIX_0F1B */
3841   {
3842     { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3843     { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3844     { "bndmov", { Ebnd, Gbnd }, 0 },
3845     { "bndcn",  { Gbnd, Ev_bnd }, 0 },
3846   },
3847 
3848   /* PREFIX_0F1E */
3849   {
3850     { "nopQ",	{ Ev }, PREFIX_OPCODE },
3851     { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3852     { "nopQ",	{ Ev }, PREFIX_OPCODE },
3853     { "nopQ",	{ Ev }, PREFIX_OPCODE },
3854   },
3855 
3856   /* PREFIX_0F2A */
3857   {
3858     { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3859     { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3860     { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
3861     { "cvtsi2sd%LQ", { XM, Ev }, 0 },
3862   },
3863 
3864   /* PREFIX_0F2B */
3865   {
3866     { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3867     { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3868     { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3869     { MOD_TABLE (MOD_0F2B_PREFIX_3) },
3870   },
3871 
3872   /* PREFIX_0F2C */
3873   {
3874     { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3875     { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
3876     { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3877     { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
3878   },
3879 
3880   /* PREFIX_0F2D */
3881   {
3882     { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3883     { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
3884     { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3885     { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
3886   },
3887 
3888   /* PREFIX_0F2E */
3889   {
3890     { "ucomiss",{ XM, EXd }, 0 },
3891     { Bad_Opcode },
3892     { "ucomisd",{ XM, EXq }, 0 },
3893   },
3894 
3895   /* PREFIX_0F2F */
3896   {
3897     { "comiss",	{ XM, EXd }, 0 },
3898     { Bad_Opcode },
3899     { "comisd",	{ XM, EXq }, 0 },
3900   },
3901 
3902   /* PREFIX_0F51 */
3903   {
3904     { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3905     { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3906     { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3907     { "sqrtsd",	{ XM, EXq }, PREFIX_OPCODE },
3908   },
3909 
3910   /* PREFIX_0F52 */
3911   {
3912     { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3913     { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
3914   },
3915 
3916   /* PREFIX_0F53 */
3917   {
3918     { "rcpps",	{ XM, EXx }, PREFIX_OPCODE },
3919     { "rcpss",	{ XM, EXd }, PREFIX_OPCODE },
3920   },
3921 
3922   /* PREFIX_0F58 */
3923   {
3924     { "addps", { XM, EXx }, PREFIX_OPCODE },
3925     { "addss", { XM, EXd }, PREFIX_OPCODE },
3926     { "addpd", { XM, EXx }, PREFIX_OPCODE },
3927     { "addsd", { XM, EXq }, PREFIX_OPCODE },
3928   },
3929 
3930   /* PREFIX_0F59 */
3931   {
3932     { "mulps",	{ XM, EXx }, PREFIX_OPCODE },
3933     { "mulss",	{ XM, EXd }, PREFIX_OPCODE },
3934     { "mulpd",	{ XM, EXx }, PREFIX_OPCODE },
3935     { "mulsd",	{ XM, EXq }, PREFIX_OPCODE },
3936   },
3937 
3938   /* PREFIX_0F5A */
3939   {
3940     { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3941     { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3942     { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3943     { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
3944   },
3945 
3946   /* PREFIX_0F5B */
3947   {
3948     { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3949     { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3950     { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
3951   },
3952 
3953   /* PREFIX_0F5C */
3954   {
3955     { "subps",	{ XM, EXx }, PREFIX_OPCODE },
3956     { "subss",	{ XM, EXd }, PREFIX_OPCODE },
3957     { "subpd",	{ XM, EXx }, PREFIX_OPCODE },
3958     { "subsd",	{ XM, EXq }, PREFIX_OPCODE },
3959   },
3960 
3961   /* PREFIX_0F5D */
3962   {
3963     { "minps",	{ XM, EXx }, PREFIX_OPCODE },
3964     { "minss",	{ XM, EXd }, PREFIX_OPCODE },
3965     { "minpd",	{ XM, EXx }, PREFIX_OPCODE },
3966     { "minsd",	{ XM, EXq }, PREFIX_OPCODE },
3967   },
3968 
3969   /* PREFIX_0F5E */
3970   {
3971     { "divps",	{ XM, EXx }, PREFIX_OPCODE },
3972     { "divss",	{ XM, EXd }, PREFIX_OPCODE },
3973     { "divpd",	{ XM, EXx }, PREFIX_OPCODE },
3974     { "divsd",	{ XM, EXq }, PREFIX_OPCODE },
3975   },
3976 
3977   /* PREFIX_0F5F */
3978   {
3979     { "maxps",	{ XM, EXx }, PREFIX_OPCODE },
3980     { "maxss",	{ XM, EXd }, PREFIX_OPCODE },
3981     { "maxpd",	{ XM, EXx }, PREFIX_OPCODE },
3982     { "maxsd",	{ XM, EXq }, PREFIX_OPCODE },
3983   },
3984 
3985   /* PREFIX_0F60 */
3986   {
3987     { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
3988     { Bad_Opcode },
3989     { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
3990   },
3991 
3992   /* PREFIX_0F61 */
3993   {
3994     { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
3995     { Bad_Opcode },
3996     { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
3997   },
3998 
3999   /* PREFIX_0F62 */
4000   {
4001     { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
4002     { Bad_Opcode },
4003     { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
4004   },
4005 
4006   /* PREFIX_0F6C */
4007   {
4008     { Bad_Opcode },
4009     { Bad_Opcode },
4010     { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
4011   },
4012 
4013   /* PREFIX_0F6D */
4014   {
4015     { Bad_Opcode },
4016     { Bad_Opcode },
4017     { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
4018   },
4019 
4020   /* PREFIX_0F6F */
4021   {
4022     { "movq",	{ MX, EM }, PREFIX_OPCODE },
4023     { "movdqu",	{ XM, EXx }, PREFIX_OPCODE },
4024     { "movdqa",	{ XM, EXx }, PREFIX_OPCODE },
4025   },
4026 
4027   /* PREFIX_0F70 */
4028   {
4029     { "pshufw",	{ MX, EM, Ib }, PREFIX_OPCODE },
4030     { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4031     { "pshufd",	{ XM, EXx, Ib }, PREFIX_OPCODE },
4032     { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4033   },
4034 
4035   /* PREFIX_0F73_REG_3 */
4036   {
4037     { Bad_Opcode },
4038     { Bad_Opcode },
4039     { "psrldq",	{ XS, Ib }, 0 },
4040   },
4041 
4042   /* PREFIX_0F73_REG_7 */
4043   {
4044     { Bad_Opcode },
4045     { Bad_Opcode },
4046     { "pslldq",	{ XS, Ib }, 0 },
4047   },
4048 
4049   /* PREFIX_0F78 */
4050   {
4051     {"vmread",	{ Em, Gm }, 0 },
4052     { Bad_Opcode },
4053     {"extrq",	{ XS, Ib, Ib }, 0 },
4054     {"insertq",	{ XM, XS, Ib, Ib }, 0 },
4055   },
4056 
4057   /* PREFIX_0F79 */
4058   {
4059     {"vmwrite",	{ Gm, Em }, 0 },
4060     { Bad_Opcode },
4061     {"extrq",	{ XM, XS }, 0 },
4062     {"insertq",	{ XM, XS }, 0 },
4063   },
4064 
4065   /* PREFIX_0F7C */
4066   {
4067     { Bad_Opcode },
4068     { Bad_Opcode },
4069     { "haddpd",	{ XM, EXx }, PREFIX_OPCODE },
4070     { "haddps",	{ XM, EXx }, PREFIX_OPCODE },
4071   },
4072 
4073   /* PREFIX_0F7D */
4074   {
4075     { Bad_Opcode },
4076     { Bad_Opcode },
4077     { "hsubpd",	{ XM, EXx }, PREFIX_OPCODE },
4078     { "hsubps",	{ XM, EXx }, PREFIX_OPCODE },
4079   },
4080 
4081   /* PREFIX_0F7E */
4082   {
4083     { "movK",	{ Edq, MX }, PREFIX_OPCODE },
4084     { "movq",	{ XM, EXq }, PREFIX_OPCODE },
4085     { "movK",	{ Edq, XM }, PREFIX_OPCODE },
4086   },
4087 
4088   /* PREFIX_0F7F */
4089   {
4090     { "movq",	{ EMS, MX }, PREFIX_OPCODE },
4091     { "movdqu",	{ EXxS, XM }, PREFIX_OPCODE },
4092     { "movdqa",	{ EXxS, XM }, PREFIX_OPCODE },
4093   },
4094 
4095   /* PREFIX_0FAE_REG_0 */
4096   {
4097     { Bad_Opcode },
4098     { "rdfsbase", { Ev }, 0 },
4099   },
4100 
4101   /* PREFIX_0FAE_REG_1 */
4102   {
4103     { Bad_Opcode },
4104     { "rdgsbase", { Ev }, 0 },
4105   },
4106 
4107   /* PREFIX_0FAE_REG_2 */
4108   {
4109     { Bad_Opcode },
4110     { "wrfsbase", { Ev }, 0 },
4111   },
4112 
4113   /* PREFIX_0FAE_REG_3 */
4114   {
4115     { Bad_Opcode },
4116     { "wrgsbase", { Ev }, 0 },
4117   },
4118 
4119   /* PREFIX_MOD_0_0FAE_REG_4 */
4120   {
4121     { "xsave",	{ FXSAVE }, 0 },
4122     { "ptwrite%LQ", { Edq }, 0 },
4123   },
4124 
4125   /* PREFIX_MOD_3_0FAE_REG_4 */
4126   {
4127     { Bad_Opcode },
4128     { "ptwrite%LQ", { Edq }, 0 },
4129   },
4130 
4131   /* PREFIX_MOD_0_0FAE_REG_5 */
4132   {
4133     { "xrstor",		{ FXSAVE }, PREFIX_OPCODE },
4134     { "setssbsy",	{ Mq }, PREFIX_OPCODE },
4135   },
4136 
4137   /* PREFIX_0FAE_REG_6 */
4138   {
4139     { "xsaveopt",	{ FXSAVE }, PREFIX_OPCODE },
4140     { "clrssbsy",	{ Mq }, PREFIX_OPCODE },
4141     { "clwb",	{ Mb }, PREFIX_OPCODE },
4142   },
4143 
4144   /* PREFIX_0FAE_REG_7 */
4145   {
4146     { "clflush",	{ Mb }, 0 },
4147     { Bad_Opcode },
4148     { "clflushopt",	{ Mb }, 0 },
4149   },
4150 
4151   /* PREFIX_0FB8 */
4152   {
4153     { Bad_Opcode },
4154     { "popcntS", { Gv, Ev }, 0 },
4155   },
4156 
4157   /* PREFIX_0FBC */
4158   {
4159     { "bsfS",	{ Gv, Ev }, 0 },
4160     { "tzcntS",	{ Gv, Ev }, 0 },
4161     { "bsfS",	{ Gv, Ev }, 0 },
4162   },
4163 
4164   /* PREFIX_0FBD */
4165   {
4166     { "bsrS",	{ Gv, Ev }, 0 },
4167     { "lzcntS",	{ Gv, Ev }, 0 },
4168     { "bsrS",	{ Gv, Ev }, 0 },
4169   },
4170 
4171   /* PREFIX_0FC2 */
4172   {
4173     { "cmpps",	{ XM, EXx, CMP }, PREFIX_OPCODE },
4174     { "cmpss",	{ XM, EXd, CMP }, PREFIX_OPCODE },
4175     { "cmppd",	{ XM, EXx, CMP }, PREFIX_OPCODE },
4176     { "cmpsd",	{ XM, EXq, CMP }, PREFIX_OPCODE },
4177   },
4178 
4179   /* PREFIX_MOD_0_0FC3 */
4180   {
4181     { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4182   },
4183 
4184   /* PREFIX_MOD_0_0FC7_REG_6 */
4185   {
4186     { "vmptrld",{ Mq }, 0 },
4187     { "vmxon",	{ Mq }, 0 },
4188     { "vmclear",{ Mq }, 0 },
4189   },
4190 
4191   /* PREFIX_MOD_3_0FC7_REG_6 */
4192   {
4193     { "rdrand",	{ Ev }, 0 },
4194     { Bad_Opcode },
4195     { "rdrand",	{ Ev }, 0 }
4196   },
4197 
4198   /* PREFIX_MOD_3_0FC7_REG_7 */
4199   {
4200     { "rdseed",	{ Ev }, 0 },
4201     { "rdpid",	{ Em }, 0 },
4202     { "rdseed",	{ Ev }, 0 },
4203   },
4204 
4205   /* PREFIX_0FD0 */
4206   {
4207     { Bad_Opcode },
4208     { Bad_Opcode },
4209     { "addsubpd", { XM, EXx }, 0 },
4210     { "addsubps", { XM, EXx }, 0 },
4211   },
4212 
4213   /* PREFIX_0FD6 */
4214   {
4215     { Bad_Opcode },
4216     { "movq2dq",{ XM, MS }, 0 },
4217     { "movq",	{ EXqS, XM }, 0 },
4218     { "movdq2q",{ MX, XS }, 0 },
4219   },
4220 
4221   /* PREFIX_0FE6 */
4222   {
4223     { Bad_Opcode },
4224     { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4225     { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4226     { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
4227   },
4228 
4229   /* PREFIX_0FE7 */
4230   {
4231     { "movntq",	{ Mq, MX }, PREFIX_OPCODE },
4232     { Bad_Opcode },
4233     { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4234   },
4235 
4236   /* PREFIX_0FF0 */
4237   {
4238     { Bad_Opcode },
4239     { Bad_Opcode },
4240     { Bad_Opcode },
4241     { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4242   },
4243 
4244   /* PREFIX_0FF7 */
4245   {
4246     { "maskmovq", { MX, MS }, PREFIX_OPCODE },
4247     { Bad_Opcode },
4248     { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
4249   },
4250 
4251   /* PREFIX_0F3810 */
4252   {
4253     { Bad_Opcode },
4254     { Bad_Opcode },
4255     { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
4256   },
4257 
4258   /* PREFIX_0F3814 */
4259   {
4260     { Bad_Opcode },
4261     { Bad_Opcode },
4262     { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
4263   },
4264 
4265   /* PREFIX_0F3815 */
4266   {
4267     { Bad_Opcode },
4268     { Bad_Opcode },
4269     { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
4270   },
4271 
4272   /* PREFIX_0F3817 */
4273   {
4274     { Bad_Opcode },
4275     { Bad_Opcode },
4276     { "ptest",  { XM, EXx }, PREFIX_OPCODE },
4277   },
4278 
4279   /* PREFIX_0F3820 */
4280   {
4281     { Bad_Opcode },
4282     { Bad_Opcode },
4283     { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
4284   },
4285 
4286   /* PREFIX_0F3821 */
4287   {
4288     { Bad_Opcode },
4289     { Bad_Opcode },
4290     { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
4291   },
4292 
4293   /* PREFIX_0F3822 */
4294   {
4295     { Bad_Opcode },
4296     { Bad_Opcode },
4297     { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
4298   },
4299 
4300   /* PREFIX_0F3823 */
4301   {
4302     { Bad_Opcode },
4303     { Bad_Opcode },
4304     { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
4305   },
4306 
4307   /* PREFIX_0F3824 */
4308   {
4309     { Bad_Opcode },
4310     { Bad_Opcode },
4311     { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
4312   },
4313 
4314   /* PREFIX_0F3825 */
4315   {
4316     { Bad_Opcode },
4317     { Bad_Opcode },
4318     { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
4319   },
4320 
4321   /* PREFIX_0F3828 */
4322   {
4323     { Bad_Opcode },
4324     { Bad_Opcode },
4325     { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
4326   },
4327 
4328   /* PREFIX_0F3829 */
4329   {
4330     { Bad_Opcode },
4331     { Bad_Opcode },
4332     { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
4333   },
4334 
4335   /* PREFIX_0F382A */
4336   {
4337     { Bad_Opcode },
4338     { Bad_Opcode },
4339     { MOD_TABLE (MOD_0F382A_PREFIX_2) },
4340   },
4341 
4342   /* PREFIX_0F382B */
4343   {
4344     { Bad_Opcode },
4345     { Bad_Opcode },
4346     { "packusdw", { XM, EXx }, PREFIX_OPCODE },
4347   },
4348 
4349   /* PREFIX_0F3830 */
4350   {
4351     { Bad_Opcode },
4352     { Bad_Opcode },
4353     { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
4354   },
4355 
4356   /* PREFIX_0F3831 */
4357   {
4358     { Bad_Opcode },
4359     { Bad_Opcode },
4360     { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
4361   },
4362 
4363   /* PREFIX_0F3832 */
4364   {
4365     { Bad_Opcode },
4366     { Bad_Opcode },
4367     { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
4368   },
4369 
4370   /* PREFIX_0F3833 */
4371   {
4372     { Bad_Opcode },
4373     { Bad_Opcode },
4374     { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
4375   },
4376 
4377   /* PREFIX_0F3834 */
4378   {
4379     { Bad_Opcode },
4380     { Bad_Opcode },
4381     { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
4382   },
4383 
4384   /* PREFIX_0F3835 */
4385   {
4386     { Bad_Opcode },
4387     { Bad_Opcode },
4388     { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
4389   },
4390 
4391   /* PREFIX_0F3837 */
4392   {
4393     { Bad_Opcode },
4394     { Bad_Opcode },
4395     { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4396   },
4397 
4398   /* PREFIX_0F3838 */
4399   {
4400     { Bad_Opcode },
4401     { Bad_Opcode },
4402     { "pminsb",	{ XM, EXx }, PREFIX_OPCODE },
4403   },
4404 
4405   /* PREFIX_0F3839 */
4406   {
4407     { Bad_Opcode },
4408     { Bad_Opcode },
4409     { "pminsd",	{ XM, EXx }, PREFIX_OPCODE },
4410   },
4411 
4412   /* PREFIX_0F383A */
4413   {
4414     { Bad_Opcode },
4415     { Bad_Opcode },
4416     { "pminuw",	{ XM, EXx }, PREFIX_OPCODE },
4417   },
4418 
4419   /* PREFIX_0F383B */
4420   {
4421     { Bad_Opcode },
4422     { Bad_Opcode },
4423     { "pminud",	{ XM, EXx }, PREFIX_OPCODE },
4424   },
4425 
4426   /* PREFIX_0F383C */
4427   {
4428     { Bad_Opcode },
4429     { Bad_Opcode },
4430     { "pmaxsb",	{ XM, EXx }, PREFIX_OPCODE },
4431   },
4432 
4433   /* PREFIX_0F383D */
4434   {
4435     { Bad_Opcode },
4436     { Bad_Opcode },
4437     { "pmaxsd",	{ XM, EXx }, PREFIX_OPCODE },
4438   },
4439 
4440   /* PREFIX_0F383E */
4441   {
4442     { Bad_Opcode },
4443     { Bad_Opcode },
4444     { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
4445   },
4446 
4447   /* PREFIX_0F383F */
4448   {
4449     { Bad_Opcode },
4450     { Bad_Opcode },
4451     { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
4452   },
4453 
4454   /* PREFIX_0F3840 */
4455   {
4456     { Bad_Opcode },
4457     { Bad_Opcode },
4458     { "pmulld", { XM, EXx }, PREFIX_OPCODE },
4459   },
4460 
4461   /* PREFIX_0F3841 */
4462   {
4463     { Bad_Opcode },
4464     { Bad_Opcode },
4465     { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
4466   },
4467 
4468   /* PREFIX_0F3880 */
4469   {
4470     { Bad_Opcode },
4471     { Bad_Opcode },
4472     { "invept",	{ Gm, Mo }, PREFIX_OPCODE },
4473   },
4474 
4475   /* PREFIX_0F3881 */
4476   {
4477     { Bad_Opcode },
4478     { Bad_Opcode },
4479     { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
4480   },
4481 
4482   /* PREFIX_0F3882 */
4483   {
4484     { Bad_Opcode },
4485     { Bad_Opcode },
4486     { "invpcid", { Gm, M }, PREFIX_OPCODE },
4487   },
4488 
4489   /* PREFIX_0F38C8 */
4490   {
4491     { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
4492   },
4493 
4494   /* PREFIX_0F38C9 */
4495   {
4496     { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
4497   },
4498 
4499   /* PREFIX_0F38CA */
4500   {
4501     { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
4502   },
4503 
4504   /* PREFIX_0F38CB */
4505   {
4506     { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
4507   },
4508 
4509   /* PREFIX_0F38CC */
4510   {
4511     { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
4512   },
4513 
4514   /* PREFIX_0F38CD */
4515   {
4516     { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
4517   },
4518 
4519   /* PREFIX_0F38DB */
4520   {
4521     { Bad_Opcode },
4522     { Bad_Opcode },
4523     { "aesimc", { XM, EXx }, PREFIX_OPCODE },
4524   },
4525 
4526   /* PREFIX_0F38DC */
4527   {
4528     { Bad_Opcode },
4529     { Bad_Opcode },
4530     { "aesenc", { XM, EXx }, PREFIX_OPCODE },
4531   },
4532 
4533   /* PREFIX_0F38DD */
4534   {
4535     { Bad_Opcode },
4536     { Bad_Opcode },
4537     { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
4538   },
4539 
4540   /* PREFIX_0F38DE */
4541   {
4542     { Bad_Opcode },
4543     { Bad_Opcode },
4544     { "aesdec", { XM, EXx }, PREFIX_OPCODE },
4545   },
4546 
4547   /* PREFIX_0F38DF */
4548   {
4549     { Bad_Opcode },
4550     { Bad_Opcode },
4551     { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
4552   },
4553 
4554   /* PREFIX_0F38F0 */
4555   {
4556     { "movbeS",	{ Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4557     { Bad_Opcode },
4558     { "movbeS",	{ Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4559     { "crc32",	{ Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4560   },
4561 
4562   /* PREFIX_0F38F1 */
4563   {
4564     { "movbeS",	{ { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4565     { Bad_Opcode },
4566     { "movbeS",	{ { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4567     { "crc32",	{ Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4568   },
4569 
4570   /* PREFIX_0F38F5 */
4571   {
4572     { Bad_Opcode },
4573     { Bad_Opcode },
4574     { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4575   },
4576 
4577   /* PREFIX_0F38F6 */
4578   {
4579     { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
4580     { "adoxS",	{ Gdq, Edq}, PREFIX_OPCODE },
4581     { "adcxS",	{ Gdq, Edq}, PREFIX_OPCODE },
4582     { Bad_Opcode },
4583   },
4584 
4585   /* PREFIX_0F3A08 */
4586   {
4587     { Bad_Opcode },
4588     { Bad_Opcode },
4589     { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
4590   },
4591 
4592   /* PREFIX_0F3A09 */
4593   {
4594     { Bad_Opcode },
4595     { Bad_Opcode },
4596     { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
4597   },
4598 
4599   /* PREFIX_0F3A0A */
4600   {
4601     { Bad_Opcode },
4602     { Bad_Opcode },
4603     { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
4604   },
4605 
4606   /* PREFIX_0F3A0B */
4607   {
4608     { Bad_Opcode },
4609     { Bad_Opcode },
4610     { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
4611   },
4612 
4613   /* PREFIX_0F3A0C */
4614   {
4615     { Bad_Opcode },
4616     { Bad_Opcode },
4617     { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
4618   },
4619 
4620   /* PREFIX_0F3A0D */
4621   {
4622     { Bad_Opcode },
4623     { Bad_Opcode },
4624     { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
4625   },
4626 
4627   /* PREFIX_0F3A0E */
4628   {
4629     { Bad_Opcode },
4630     { Bad_Opcode },
4631     { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
4632   },
4633 
4634   /* PREFIX_0F3A14 */
4635   {
4636     { Bad_Opcode },
4637     { Bad_Opcode },
4638     { "pextrb",	{ Edqb, XM, Ib }, PREFIX_OPCODE },
4639   },
4640 
4641   /* PREFIX_0F3A15 */
4642   {
4643     { Bad_Opcode },
4644     { Bad_Opcode },
4645     { "pextrw",	{ Edqw, XM, Ib }, PREFIX_OPCODE },
4646   },
4647 
4648   /* PREFIX_0F3A16 */
4649   {
4650     { Bad_Opcode },
4651     { Bad_Opcode },
4652     { "pextrK",	{ Edq, XM, Ib }, PREFIX_OPCODE },
4653   },
4654 
4655   /* PREFIX_0F3A17 */
4656   {
4657     { Bad_Opcode },
4658     { Bad_Opcode },
4659     { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
4660   },
4661 
4662   /* PREFIX_0F3A20 */
4663   {
4664     { Bad_Opcode },
4665     { Bad_Opcode },
4666     { "pinsrb",	{ XM, Edqb, Ib }, PREFIX_OPCODE },
4667   },
4668 
4669   /* PREFIX_0F3A21 */
4670   {
4671     { Bad_Opcode },
4672     { Bad_Opcode },
4673     { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
4674   },
4675 
4676   /* PREFIX_0F3A22 */
4677   {
4678     { Bad_Opcode },
4679     { Bad_Opcode },
4680     { "pinsrK",	{ XM, Edq, Ib }, PREFIX_OPCODE },
4681   },
4682 
4683   /* PREFIX_0F3A40 */
4684   {
4685     { Bad_Opcode },
4686     { Bad_Opcode },
4687     { "dpps",	{ XM, EXx, Ib }, PREFIX_OPCODE },
4688   },
4689 
4690   /* PREFIX_0F3A41 */
4691   {
4692     { Bad_Opcode },
4693     { Bad_Opcode },
4694     { "dppd",	{ XM, EXx, Ib }, PREFIX_OPCODE },
4695   },
4696 
4697   /* PREFIX_0F3A42 */
4698   {
4699     { Bad_Opcode },
4700     { Bad_Opcode },
4701     { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
4702   },
4703 
4704   /* PREFIX_0F3A44 */
4705   {
4706     { Bad_Opcode },
4707     { Bad_Opcode },
4708     { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
4709   },
4710 
4711   /* PREFIX_0F3A60 */
4712   {
4713     { Bad_Opcode },
4714     { Bad_Opcode },
4715     { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
4716   },
4717 
4718   /* PREFIX_0F3A61 */
4719   {
4720     { Bad_Opcode },
4721     { Bad_Opcode },
4722     { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
4723   },
4724 
4725   /* PREFIX_0F3A62 */
4726   {
4727     { Bad_Opcode },
4728     { Bad_Opcode },
4729     { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
4730   },
4731 
4732   /* PREFIX_0F3A63 */
4733   {
4734     { Bad_Opcode },
4735     { Bad_Opcode },
4736     { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
4737   },
4738 
4739   /* PREFIX_0F3ACC */
4740   {
4741     { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4742   },
4743 
4744   /* PREFIX_0F3ADF */
4745   {
4746     { Bad_Opcode },
4747     { Bad_Opcode },
4748     { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
4749   },
4750 
4751   /* PREFIX_VEX_0F10 */
4752   {
4753     { VEX_W_TABLE (VEX_W_0F10_P_0) },
4754     { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4755     { VEX_W_TABLE (VEX_W_0F10_P_2) },
4756     { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
4757   },
4758 
4759   /* PREFIX_VEX_0F11 */
4760   {
4761     { VEX_W_TABLE (VEX_W_0F11_P_0) },
4762     { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4763     { VEX_W_TABLE (VEX_W_0F11_P_2) },
4764     { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
4765   },
4766 
4767   /* PREFIX_VEX_0F12 */
4768   {
4769     { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4770     { VEX_W_TABLE (VEX_W_0F12_P_1) },
4771     { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4772     { VEX_W_TABLE (VEX_W_0F12_P_3) },
4773   },
4774 
4775   /* PREFIX_VEX_0F16 */
4776   {
4777     { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4778     { VEX_W_TABLE (VEX_W_0F16_P_1) },
4779     { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
4780   },
4781 
4782   /* PREFIX_VEX_0F2A */
4783   {
4784     { Bad_Opcode },
4785     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
4786     { Bad_Opcode },
4787     { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
4788   },
4789 
4790   /* PREFIX_VEX_0F2C */
4791   {
4792     { Bad_Opcode },
4793     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
4794     { Bad_Opcode },
4795     { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
4796   },
4797 
4798   /* PREFIX_VEX_0F2D */
4799   {
4800     { Bad_Opcode },
4801     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
4802     { Bad_Opcode },
4803     { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
4804   },
4805 
4806   /* PREFIX_VEX_0F2E */
4807   {
4808     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
4809     { Bad_Opcode },
4810     { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
4811   },
4812 
4813   /* PREFIX_VEX_0F2F */
4814   {
4815     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
4816     { Bad_Opcode },
4817     { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
4818   },
4819 
4820   /* PREFIX_VEX_0F41 */
4821   {
4822     { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
4823     { Bad_Opcode },
4824     { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
4825   },
4826 
4827   /* PREFIX_VEX_0F42 */
4828   {
4829     { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
4830     { Bad_Opcode },
4831     { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
4832   },
4833 
4834   /* PREFIX_VEX_0F44 */
4835   {
4836     { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
4837     { Bad_Opcode },
4838     { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
4839   },
4840 
4841   /* PREFIX_VEX_0F45 */
4842   {
4843     { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
4844     { Bad_Opcode },
4845     { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
4846   },
4847 
4848   /* PREFIX_VEX_0F46 */
4849   {
4850     { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
4851     { Bad_Opcode },
4852     { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
4853   },
4854 
4855   /* PREFIX_VEX_0F47 */
4856   {
4857     { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
4858     { Bad_Opcode },
4859     { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
4860   },
4861 
4862   /* PREFIX_VEX_0F4A */
4863   {
4864     { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
4865     { Bad_Opcode },
4866     { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4867   },
4868 
4869   /* PREFIX_VEX_0F4B */
4870   {
4871     { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
4872     { Bad_Opcode },
4873     { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4874   },
4875 
4876   /* PREFIX_VEX_0F51 */
4877   {
4878     { VEX_W_TABLE (VEX_W_0F51_P_0) },
4879     { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4880     { VEX_W_TABLE (VEX_W_0F51_P_2) },
4881     { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
4882   },
4883 
4884   /* PREFIX_VEX_0F52 */
4885   {
4886     { VEX_W_TABLE (VEX_W_0F52_P_0) },
4887     { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
4888   },
4889 
4890   /* PREFIX_VEX_0F53 */
4891   {
4892     { VEX_W_TABLE (VEX_W_0F53_P_0) },
4893     { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
4894   },
4895 
4896   /* PREFIX_VEX_0F58 */
4897   {
4898     { VEX_W_TABLE (VEX_W_0F58_P_0) },
4899     { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4900     { VEX_W_TABLE (VEX_W_0F58_P_2) },
4901     { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
4902   },
4903 
4904   /* PREFIX_VEX_0F59 */
4905   {
4906     { VEX_W_TABLE (VEX_W_0F59_P_0) },
4907     { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4908     { VEX_W_TABLE (VEX_W_0F59_P_2) },
4909     { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
4910   },
4911 
4912   /* PREFIX_VEX_0F5A */
4913   {
4914     { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4915     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
4916     { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
4917     { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
4918   },
4919 
4920   /* PREFIX_VEX_0F5B */
4921   {
4922     { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4923     { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4924     { VEX_W_TABLE (VEX_W_0F5B_P_2) },
4925   },
4926 
4927   /* PREFIX_VEX_0F5C */
4928   {
4929     { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4930     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4931     { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4932     { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
4933   },
4934 
4935   /* PREFIX_VEX_0F5D */
4936   {
4937     { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4938     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4939     { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4940     { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
4941   },
4942 
4943   /* PREFIX_VEX_0F5E */
4944   {
4945     { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4946     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4947     { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4948     { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
4949   },
4950 
4951   /* PREFIX_VEX_0F5F */
4952   {
4953     { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4954     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4955     { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4956     { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
4957   },
4958 
4959   /* PREFIX_VEX_0F60 */
4960   {
4961     { Bad_Opcode },
4962     { Bad_Opcode },
4963     { VEX_W_TABLE (VEX_W_0F60_P_2) },
4964   },
4965 
4966   /* PREFIX_VEX_0F61 */
4967   {
4968     { Bad_Opcode },
4969     { Bad_Opcode },
4970     { VEX_W_TABLE (VEX_W_0F61_P_2) },
4971   },
4972 
4973   /* PREFIX_VEX_0F62 */
4974   {
4975     { Bad_Opcode },
4976     { Bad_Opcode },
4977     { VEX_W_TABLE (VEX_W_0F62_P_2) },
4978   },
4979 
4980   /* PREFIX_VEX_0F63 */
4981   {
4982     { Bad_Opcode },
4983     { Bad_Opcode },
4984     { VEX_W_TABLE (VEX_W_0F63_P_2) },
4985   },
4986 
4987   /* PREFIX_VEX_0F64 */
4988   {
4989     { Bad_Opcode },
4990     { Bad_Opcode },
4991     { VEX_W_TABLE (VEX_W_0F64_P_2) },
4992   },
4993 
4994   /* PREFIX_VEX_0F65 */
4995   {
4996     { Bad_Opcode },
4997     { Bad_Opcode },
4998     { VEX_W_TABLE (VEX_W_0F65_P_2) },
4999   },
5000 
5001   /* PREFIX_VEX_0F66 */
5002   {
5003     { Bad_Opcode },
5004     { Bad_Opcode },
5005     { VEX_W_TABLE (VEX_W_0F66_P_2) },
5006   },
5007 
5008   /* PREFIX_VEX_0F67 */
5009   {
5010     { Bad_Opcode },
5011     { Bad_Opcode },
5012     { VEX_W_TABLE (VEX_W_0F67_P_2) },
5013   },
5014 
5015   /* PREFIX_VEX_0F68 */
5016   {
5017     { Bad_Opcode },
5018     { Bad_Opcode },
5019     { VEX_W_TABLE (VEX_W_0F68_P_2) },
5020   },
5021 
5022   /* PREFIX_VEX_0F69 */
5023   {
5024     { Bad_Opcode },
5025     { Bad_Opcode },
5026     { VEX_W_TABLE (VEX_W_0F69_P_2) },
5027   },
5028 
5029   /* PREFIX_VEX_0F6A */
5030   {
5031     { Bad_Opcode },
5032     { Bad_Opcode },
5033     { VEX_W_TABLE (VEX_W_0F6A_P_2) },
5034   },
5035 
5036   /* PREFIX_VEX_0F6B */
5037   {
5038     { Bad_Opcode },
5039     { Bad_Opcode },
5040     { VEX_W_TABLE (VEX_W_0F6B_P_2) },
5041   },
5042 
5043   /* PREFIX_VEX_0F6C */
5044   {
5045     { Bad_Opcode },
5046     { Bad_Opcode },
5047     { VEX_W_TABLE (VEX_W_0F6C_P_2) },
5048   },
5049 
5050   /* PREFIX_VEX_0F6D */
5051   {
5052     { Bad_Opcode },
5053     { Bad_Opcode },
5054     { VEX_W_TABLE (VEX_W_0F6D_P_2) },
5055   },
5056 
5057   /* PREFIX_VEX_0F6E */
5058   {
5059     { Bad_Opcode },
5060     { Bad_Opcode },
5061     { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
5062   },
5063 
5064   /* PREFIX_VEX_0F6F */
5065   {
5066     { Bad_Opcode },
5067     { VEX_W_TABLE (VEX_W_0F6F_P_1) },
5068     { VEX_W_TABLE (VEX_W_0F6F_P_2) },
5069   },
5070 
5071   /* PREFIX_VEX_0F70 */
5072   {
5073     { Bad_Opcode },
5074     { VEX_W_TABLE (VEX_W_0F70_P_1) },
5075     { VEX_W_TABLE (VEX_W_0F70_P_2) },
5076     { VEX_W_TABLE (VEX_W_0F70_P_3) },
5077   },
5078 
5079   /* PREFIX_VEX_0F71_REG_2 */
5080   {
5081     { Bad_Opcode },
5082     { Bad_Opcode },
5083     { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
5084   },
5085 
5086   /* PREFIX_VEX_0F71_REG_4 */
5087   {
5088     { Bad_Opcode },
5089     { Bad_Opcode },
5090     { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
5091   },
5092 
5093   /* PREFIX_VEX_0F71_REG_6 */
5094   {
5095     { Bad_Opcode },
5096     { Bad_Opcode },
5097     { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
5098   },
5099 
5100   /* PREFIX_VEX_0F72_REG_2 */
5101   {
5102     { Bad_Opcode },
5103     { Bad_Opcode },
5104     { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
5105   },
5106 
5107   /* PREFIX_VEX_0F72_REG_4 */
5108   {
5109     { Bad_Opcode },
5110     { Bad_Opcode },
5111     { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
5112   },
5113 
5114   /* PREFIX_VEX_0F72_REG_6 */
5115   {
5116     { Bad_Opcode },
5117     { Bad_Opcode },
5118     { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
5119   },
5120 
5121   /* PREFIX_VEX_0F73_REG_2 */
5122   {
5123     { Bad_Opcode },
5124     { Bad_Opcode },
5125     { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
5126   },
5127 
5128   /* PREFIX_VEX_0F73_REG_3 */
5129   {
5130     { Bad_Opcode },
5131     { Bad_Opcode },
5132     { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
5133   },
5134 
5135   /* PREFIX_VEX_0F73_REG_6 */
5136   {
5137     { Bad_Opcode },
5138     { Bad_Opcode },
5139     { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
5140   },
5141 
5142   /* PREFIX_VEX_0F73_REG_7 */
5143   {
5144     { Bad_Opcode },
5145     { Bad_Opcode },
5146     { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
5147   },
5148 
5149   /* PREFIX_VEX_0F74 */
5150   {
5151     { Bad_Opcode },
5152     { Bad_Opcode },
5153     { VEX_W_TABLE (VEX_W_0F74_P_2) },
5154   },
5155 
5156   /* PREFIX_VEX_0F75 */
5157   {
5158     { Bad_Opcode },
5159     { Bad_Opcode },
5160     { VEX_W_TABLE (VEX_W_0F75_P_2) },
5161   },
5162 
5163   /* PREFIX_VEX_0F76 */
5164   {
5165     { Bad_Opcode },
5166     { Bad_Opcode },
5167     { VEX_W_TABLE (VEX_W_0F76_P_2) },
5168   },
5169 
5170   /* PREFIX_VEX_0F77 */
5171   {
5172     { VEX_W_TABLE (VEX_W_0F77_P_0) },
5173   },
5174 
5175   /* PREFIX_VEX_0F7C */
5176   {
5177     { Bad_Opcode },
5178     { Bad_Opcode },
5179     { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5180     { VEX_W_TABLE (VEX_W_0F7C_P_3) },
5181   },
5182 
5183   /* PREFIX_VEX_0F7D */
5184   {
5185     { Bad_Opcode },
5186     { Bad_Opcode },
5187     { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5188     { VEX_W_TABLE (VEX_W_0F7D_P_3) },
5189   },
5190 
5191   /* PREFIX_VEX_0F7E */
5192   {
5193     { Bad_Opcode },
5194     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5195     { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
5196   },
5197 
5198   /* PREFIX_VEX_0F7F */
5199   {
5200     { Bad_Opcode },
5201     { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5202     { VEX_W_TABLE (VEX_W_0F7F_P_2) },
5203   },
5204 
5205   /* PREFIX_VEX_0F90 */
5206   {
5207     { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
5208     { Bad_Opcode },
5209     { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
5210   },
5211 
5212   /* PREFIX_VEX_0F91 */
5213   {
5214     { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
5215     { Bad_Opcode },
5216     { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
5217   },
5218 
5219   /* PREFIX_VEX_0F92 */
5220   {
5221     { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
5222     { Bad_Opcode },
5223     { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
5224     { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
5225   },
5226 
5227   /* PREFIX_VEX_0F93 */
5228   {
5229     { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
5230     { Bad_Opcode },
5231     { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
5232     { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
5233   },
5234 
5235   /* PREFIX_VEX_0F98 */
5236   {
5237     { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
5238     { Bad_Opcode },
5239     { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5240   },
5241 
5242   /* PREFIX_VEX_0F99 */
5243   {
5244     { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5245     { Bad_Opcode },
5246     { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
5247   },
5248 
5249   /* PREFIX_VEX_0FC2 */
5250   {
5251     { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5252     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5253     { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5254     { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
5255   },
5256 
5257   /* PREFIX_VEX_0FC4 */
5258   {
5259     { Bad_Opcode },
5260     { Bad_Opcode },
5261     { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
5262   },
5263 
5264   /* PREFIX_VEX_0FC5 */
5265   {
5266     { Bad_Opcode },
5267     { Bad_Opcode },
5268     { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
5269   },
5270 
5271   /* PREFIX_VEX_0FD0 */
5272   {
5273     { Bad_Opcode },
5274     { Bad_Opcode },
5275     { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5276     { VEX_W_TABLE (VEX_W_0FD0_P_3) },
5277   },
5278 
5279   /* PREFIX_VEX_0FD1 */
5280   {
5281     { Bad_Opcode },
5282     { Bad_Opcode },
5283     { VEX_W_TABLE (VEX_W_0FD1_P_2) },
5284   },
5285 
5286   /* PREFIX_VEX_0FD2 */
5287   {
5288     { Bad_Opcode },
5289     { Bad_Opcode },
5290     { VEX_W_TABLE (VEX_W_0FD2_P_2) },
5291   },
5292 
5293   /* PREFIX_VEX_0FD3 */
5294   {
5295     { Bad_Opcode },
5296     { Bad_Opcode },
5297     { VEX_W_TABLE (VEX_W_0FD3_P_2) },
5298   },
5299 
5300   /* PREFIX_VEX_0FD4 */
5301   {
5302     { Bad_Opcode },
5303     { Bad_Opcode },
5304     { VEX_W_TABLE (VEX_W_0FD4_P_2) },
5305   },
5306 
5307   /* PREFIX_VEX_0FD5 */
5308   {
5309     { Bad_Opcode },
5310     { Bad_Opcode },
5311     { VEX_W_TABLE (VEX_W_0FD5_P_2) },
5312   },
5313 
5314   /* PREFIX_VEX_0FD6 */
5315   {
5316     { Bad_Opcode },
5317     { Bad_Opcode },
5318     { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
5319   },
5320 
5321   /* PREFIX_VEX_0FD7 */
5322   {
5323     { Bad_Opcode },
5324     { Bad_Opcode },
5325     { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
5326   },
5327 
5328   /* PREFIX_VEX_0FD8 */
5329   {
5330     { Bad_Opcode },
5331     { Bad_Opcode },
5332     { VEX_W_TABLE (VEX_W_0FD8_P_2) },
5333   },
5334 
5335   /* PREFIX_VEX_0FD9 */
5336   {
5337     { Bad_Opcode },
5338     { Bad_Opcode },
5339     { VEX_W_TABLE (VEX_W_0FD9_P_2) },
5340   },
5341 
5342   /* PREFIX_VEX_0FDA */
5343   {
5344     { Bad_Opcode },
5345     { Bad_Opcode },
5346     { VEX_W_TABLE (VEX_W_0FDA_P_2) },
5347   },
5348 
5349   /* PREFIX_VEX_0FDB */
5350   {
5351     { Bad_Opcode },
5352     { Bad_Opcode },
5353     { VEX_W_TABLE (VEX_W_0FDB_P_2) },
5354   },
5355 
5356   /* PREFIX_VEX_0FDC */
5357   {
5358     { Bad_Opcode },
5359     { Bad_Opcode },
5360     { VEX_W_TABLE (VEX_W_0FDC_P_2) },
5361   },
5362 
5363   /* PREFIX_VEX_0FDD */
5364   {
5365     { Bad_Opcode },
5366     { Bad_Opcode },
5367     { VEX_W_TABLE (VEX_W_0FDD_P_2) },
5368   },
5369 
5370   /* PREFIX_VEX_0FDE */
5371   {
5372     { Bad_Opcode },
5373     { Bad_Opcode },
5374     { VEX_W_TABLE (VEX_W_0FDE_P_2) },
5375   },
5376 
5377   /* PREFIX_VEX_0FDF */
5378   {
5379     { Bad_Opcode },
5380     { Bad_Opcode },
5381     { VEX_W_TABLE (VEX_W_0FDF_P_2) },
5382   },
5383 
5384   /* PREFIX_VEX_0FE0 */
5385   {
5386     { Bad_Opcode },
5387     { Bad_Opcode },
5388     { VEX_W_TABLE (VEX_W_0FE0_P_2) },
5389   },
5390 
5391   /* PREFIX_VEX_0FE1 */
5392   {
5393     { Bad_Opcode },
5394     { Bad_Opcode },
5395     { VEX_W_TABLE (VEX_W_0FE1_P_2) },
5396   },
5397 
5398   /* PREFIX_VEX_0FE2 */
5399   {
5400     { Bad_Opcode },
5401     { Bad_Opcode },
5402     { VEX_W_TABLE (VEX_W_0FE2_P_2) },
5403   },
5404 
5405   /* PREFIX_VEX_0FE3 */
5406   {
5407     { Bad_Opcode },
5408     { Bad_Opcode },
5409     { VEX_W_TABLE (VEX_W_0FE3_P_2) },
5410   },
5411 
5412   /* PREFIX_VEX_0FE4 */
5413   {
5414     { Bad_Opcode },
5415     { Bad_Opcode },
5416     { VEX_W_TABLE (VEX_W_0FE4_P_2) },
5417   },
5418 
5419   /* PREFIX_VEX_0FE5 */
5420   {
5421     { Bad_Opcode },
5422     { Bad_Opcode },
5423     { VEX_W_TABLE (VEX_W_0FE5_P_2) },
5424   },
5425 
5426   /* PREFIX_VEX_0FE6 */
5427   {
5428     { Bad_Opcode },
5429     { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5430     { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5431     { VEX_W_TABLE (VEX_W_0FE6_P_3) },
5432   },
5433 
5434   /* PREFIX_VEX_0FE7 */
5435   {
5436     { Bad_Opcode },
5437     { Bad_Opcode },
5438     { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
5439   },
5440 
5441   /* PREFIX_VEX_0FE8 */
5442   {
5443     { Bad_Opcode },
5444     { Bad_Opcode },
5445     { VEX_W_TABLE (VEX_W_0FE8_P_2) },
5446   },
5447 
5448   /* PREFIX_VEX_0FE9 */
5449   {
5450     { Bad_Opcode },
5451     { Bad_Opcode },
5452     { VEX_W_TABLE (VEX_W_0FE9_P_2) },
5453   },
5454 
5455   /* PREFIX_VEX_0FEA */
5456   {
5457     { Bad_Opcode },
5458     { Bad_Opcode },
5459     { VEX_W_TABLE (VEX_W_0FEA_P_2) },
5460   },
5461 
5462   /* PREFIX_VEX_0FEB */
5463   {
5464     { Bad_Opcode },
5465     { Bad_Opcode },
5466     { VEX_W_TABLE (VEX_W_0FEB_P_2) },
5467   },
5468 
5469   /* PREFIX_VEX_0FEC */
5470   {
5471     { Bad_Opcode },
5472     { Bad_Opcode },
5473     { VEX_W_TABLE (VEX_W_0FEC_P_2) },
5474   },
5475 
5476   /* PREFIX_VEX_0FED */
5477   {
5478     { Bad_Opcode },
5479     { Bad_Opcode },
5480     { VEX_W_TABLE (VEX_W_0FED_P_2) },
5481   },
5482 
5483   /* PREFIX_VEX_0FEE */
5484   {
5485     { Bad_Opcode },
5486     { Bad_Opcode },
5487     { VEX_W_TABLE (VEX_W_0FEE_P_2) },
5488   },
5489 
5490   /* PREFIX_VEX_0FEF */
5491   {
5492     { Bad_Opcode },
5493     { Bad_Opcode },
5494     { VEX_W_TABLE (VEX_W_0FEF_P_2) },
5495   },
5496 
5497   /* PREFIX_VEX_0FF0 */
5498   {
5499     { Bad_Opcode },
5500     { Bad_Opcode },
5501     { Bad_Opcode },
5502     { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
5503   },
5504 
5505   /* PREFIX_VEX_0FF1 */
5506   {
5507     { Bad_Opcode },
5508     { Bad_Opcode },
5509     { VEX_W_TABLE (VEX_W_0FF1_P_2) },
5510   },
5511 
5512   /* PREFIX_VEX_0FF2 */
5513   {
5514     { Bad_Opcode },
5515     { Bad_Opcode },
5516     { VEX_W_TABLE (VEX_W_0FF2_P_2) },
5517   },
5518 
5519   /* PREFIX_VEX_0FF3 */
5520   {
5521     { Bad_Opcode },
5522     { Bad_Opcode },
5523     { VEX_W_TABLE (VEX_W_0FF3_P_2) },
5524   },
5525 
5526   /* PREFIX_VEX_0FF4 */
5527   {
5528     { Bad_Opcode },
5529     { Bad_Opcode },
5530     { VEX_W_TABLE (VEX_W_0FF4_P_2) },
5531   },
5532 
5533   /* PREFIX_VEX_0FF5 */
5534   {
5535     { Bad_Opcode },
5536     { Bad_Opcode },
5537     { VEX_W_TABLE (VEX_W_0FF5_P_2) },
5538   },
5539 
5540   /* PREFIX_VEX_0FF6 */
5541   {
5542     { Bad_Opcode },
5543     { Bad_Opcode },
5544     { VEX_W_TABLE (VEX_W_0FF6_P_2) },
5545   },
5546 
5547   /* PREFIX_VEX_0FF7 */
5548   {
5549     { Bad_Opcode },
5550     { Bad_Opcode },
5551     { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
5552   },
5553 
5554   /* PREFIX_VEX_0FF8 */
5555   {
5556     { Bad_Opcode },
5557     { Bad_Opcode },
5558     { VEX_W_TABLE (VEX_W_0FF8_P_2) },
5559   },
5560 
5561   /* PREFIX_VEX_0FF9 */
5562   {
5563     { Bad_Opcode },
5564     { Bad_Opcode },
5565     { VEX_W_TABLE (VEX_W_0FF9_P_2) },
5566   },
5567 
5568   /* PREFIX_VEX_0FFA */
5569   {
5570     { Bad_Opcode },
5571     { Bad_Opcode },
5572     { VEX_W_TABLE (VEX_W_0FFA_P_2) },
5573   },
5574 
5575   /* PREFIX_VEX_0FFB */
5576   {
5577     { Bad_Opcode },
5578     { Bad_Opcode },
5579     { VEX_W_TABLE (VEX_W_0FFB_P_2) },
5580   },
5581 
5582   /* PREFIX_VEX_0FFC */
5583   {
5584     { Bad_Opcode },
5585     { Bad_Opcode },
5586     { VEX_W_TABLE (VEX_W_0FFC_P_2) },
5587   },
5588 
5589   /* PREFIX_VEX_0FFD */
5590   {
5591     { Bad_Opcode },
5592     { Bad_Opcode },
5593     { VEX_W_TABLE (VEX_W_0FFD_P_2) },
5594   },
5595 
5596   /* PREFIX_VEX_0FFE */
5597   {
5598     { Bad_Opcode },
5599     { Bad_Opcode },
5600     { VEX_W_TABLE (VEX_W_0FFE_P_2) },
5601   },
5602 
5603   /* PREFIX_VEX_0F3800 */
5604   {
5605     { Bad_Opcode },
5606     { Bad_Opcode },
5607     { VEX_W_TABLE (VEX_W_0F3800_P_2) },
5608   },
5609 
5610   /* PREFIX_VEX_0F3801 */
5611   {
5612     { Bad_Opcode },
5613     { Bad_Opcode },
5614     { VEX_W_TABLE (VEX_W_0F3801_P_2) },
5615   },
5616 
5617   /* PREFIX_VEX_0F3802 */
5618   {
5619     { Bad_Opcode },
5620     { Bad_Opcode },
5621     { VEX_W_TABLE (VEX_W_0F3802_P_2) },
5622   },
5623 
5624   /* PREFIX_VEX_0F3803 */
5625   {
5626     { Bad_Opcode },
5627     { Bad_Opcode },
5628     { VEX_W_TABLE (VEX_W_0F3803_P_2) },
5629   },
5630 
5631   /* PREFIX_VEX_0F3804 */
5632   {
5633     { Bad_Opcode },
5634     { Bad_Opcode },
5635     { VEX_W_TABLE (VEX_W_0F3804_P_2) },
5636   },
5637 
5638   /* PREFIX_VEX_0F3805 */
5639   {
5640     { Bad_Opcode },
5641     { Bad_Opcode },
5642     { VEX_W_TABLE (VEX_W_0F3805_P_2) },
5643   },
5644 
5645   /* PREFIX_VEX_0F3806 */
5646   {
5647     { Bad_Opcode },
5648     { Bad_Opcode },
5649     { VEX_W_TABLE (VEX_W_0F3806_P_2) },
5650   },
5651 
5652   /* PREFIX_VEX_0F3807 */
5653   {
5654     { Bad_Opcode },
5655     { Bad_Opcode },
5656     { VEX_W_TABLE (VEX_W_0F3807_P_2) },
5657   },
5658 
5659   /* PREFIX_VEX_0F3808 */
5660   {
5661     { Bad_Opcode },
5662     { Bad_Opcode },
5663     { VEX_W_TABLE (VEX_W_0F3808_P_2) },
5664   },
5665 
5666   /* PREFIX_VEX_0F3809 */
5667   {
5668     { Bad_Opcode },
5669     { Bad_Opcode },
5670     { VEX_W_TABLE (VEX_W_0F3809_P_2) },
5671   },
5672 
5673   /* PREFIX_VEX_0F380A */
5674   {
5675     { Bad_Opcode },
5676     { Bad_Opcode },
5677     { VEX_W_TABLE (VEX_W_0F380A_P_2) },
5678   },
5679 
5680   /* PREFIX_VEX_0F380B */
5681   {
5682     { Bad_Opcode },
5683     { Bad_Opcode },
5684     { VEX_W_TABLE (VEX_W_0F380B_P_2) },
5685   },
5686 
5687   /* PREFIX_VEX_0F380C */
5688   {
5689     { Bad_Opcode },
5690     { Bad_Opcode },
5691     { VEX_W_TABLE (VEX_W_0F380C_P_2) },
5692   },
5693 
5694   /* PREFIX_VEX_0F380D */
5695   {
5696     { Bad_Opcode },
5697     { Bad_Opcode },
5698     { VEX_W_TABLE (VEX_W_0F380D_P_2) },
5699   },
5700 
5701   /* PREFIX_VEX_0F380E */
5702   {
5703     { Bad_Opcode },
5704     { Bad_Opcode },
5705     { VEX_W_TABLE (VEX_W_0F380E_P_2) },
5706   },
5707 
5708   /* PREFIX_VEX_0F380F */
5709   {
5710     { Bad_Opcode },
5711     { Bad_Opcode },
5712     { VEX_W_TABLE (VEX_W_0F380F_P_2) },
5713   },
5714 
5715   /* PREFIX_VEX_0F3813 */
5716   {
5717     { Bad_Opcode },
5718     { Bad_Opcode },
5719     { "vcvtph2ps", { XM, EXxmmq }, 0 },
5720   },
5721 
5722   /* PREFIX_VEX_0F3816 */
5723   {
5724     { Bad_Opcode },
5725     { Bad_Opcode },
5726     { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5727   },
5728 
5729   /* PREFIX_VEX_0F3817 */
5730   {
5731     { Bad_Opcode },
5732     { Bad_Opcode },
5733     { VEX_W_TABLE (VEX_W_0F3817_P_2) },
5734   },
5735 
5736   /* PREFIX_VEX_0F3818 */
5737   {
5738     { Bad_Opcode },
5739     { Bad_Opcode },
5740     { VEX_W_TABLE (VEX_W_0F3818_P_2) },
5741   },
5742 
5743   /* PREFIX_VEX_0F3819 */
5744   {
5745     { Bad_Opcode },
5746     { Bad_Opcode },
5747     { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
5748   },
5749 
5750   /* PREFIX_VEX_0F381A */
5751   {
5752     { Bad_Opcode },
5753     { Bad_Opcode },
5754     { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
5755   },
5756 
5757   /* PREFIX_VEX_0F381C */
5758   {
5759     { Bad_Opcode },
5760     { Bad_Opcode },
5761     { VEX_W_TABLE (VEX_W_0F381C_P_2) },
5762   },
5763 
5764   /* PREFIX_VEX_0F381D */
5765   {
5766     { Bad_Opcode },
5767     { Bad_Opcode },
5768     { VEX_W_TABLE (VEX_W_0F381D_P_2) },
5769   },
5770 
5771   /* PREFIX_VEX_0F381E */
5772   {
5773     { Bad_Opcode },
5774     { Bad_Opcode },
5775     { VEX_W_TABLE (VEX_W_0F381E_P_2) },
5776   },
5777 
5778   /* PREFIX_VEX_0F3820 */
5779   {
5780     { Bad_Opcode },
5781     { Bad_Opcode },
5782     { VEX_W_TABLE (VEX_W_0F3820_P_2) },
5783   },
5784 
5785   /* PREFIX_VEX_0F3821 */
5786   {
5787     { Bad_Opcode },
5788     { Bad_Opcode },
5789     { VEX_W_TABLE (VEX_W_0F3821_P_2) },
5790   },
5791 
5792   /* PREFIX_VEX_0F3822 */
5793   {
5794     { Bad_Opcode },
5795     { Bad_Opcode },
5796     { VEX_W_TABLE (VEX_W_0F3822_P_2) },
5797   },
5798 
5799   /* PREFIX_VEX_0F3823 */
5800   {
5801     { Bad_Opcode },
5802     { Bad_Opcode },
5803     { VEX_W_TABLE (VEX_W_0F3823_P_2) },
5804   },
5805 
5806   /* PREFIX_VEX_0F3824 */
5807   {
5808     { Bad_Opcode },
5809     { Bad_Opcode },
5810     { VEX_W_TABLE (VEX_W_0F3824_P_2) },
5811   },
5812 
5813   /* PREFIX_VEX_0F3825 */
5814   {
5815     { Bad_Opcode },
5816     { Bad_Opcode },
5817     { VEX_W_TABLE (VEX_W_0F3825_P_2) },
5818   },
5819 
5820   /* PREFIX_VEX_0F3828 */
5821   {
5822     { Bad_Opcode },
5823     { Bad_Opcode },
5824     { VEX_W_TABLE (VEX_W_0F3828_P_2) },
5825   },
5826 
5827   /* PREFIX_VEX_0F3829 */
5828   {
5829     { Bad_Opcode },
5830     { Bad_Opcode },
5831     { VEX_W_TABLE (VEX_W_0F3829_P_2) },
5832   },
5833 
5834   /* PREFIX_VEX_0F382A */
5835   {
5836     { Bad_Opcode },
5837     { Bad_Opcode },
5838     { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
5839   },
5840 
5841   /* PREFIX_VEX_0F382B */
5842   {
5843     { Bad_Opcode },
5844     { Bad_Opcode },
5845     { VEX_W_TABLE (VEX_W_0F382B_P_2) },
5846   },
5847 
5848   /* PREFIX_VEX_0F382C */
5849   {
5850     { Bad_Opcode },
5851     { Bad_Opcode },
5852      { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
5853   },
5854 
5855   /* PREFIX_VEX_0F382D */
5856   {
5857     { Bad_Opcode },
5858     { Bad_Opcode },
5859      { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
5860   },
5861 
5862   /* PREFIX_VEX_0F382E */
5863   {
5864     { Bad_Opcode },
5865     { Bad_Opcode },
5866      { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
5867   },
5868 
5869   /* PREFIX_VEX_0F382F */
5870   {
5871     { Bad_Opcode },
5872     { Bad_Opcode },
5873      { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
5874   },
5875 
5876   /* PREFIX_VEX_0F3830 */
5877   {
5878     { Bad_Opcode },
5879     { Bad_Opcode },
5880     { VEX_W_TABLE (VEX_W_0F3830_P_2) },
5881   },
5882 
5883   /* PREFIX_VEX_0F3831 */
5884   {
5885     { Bad_Opcode },
5886     { Bad_Opcode },
5887     { VEX_W_TABLE (VEX_W_0F3831_P_2) },
5888   },
5889 
5890   /* PREFIX_VEX_0F3832 */
5891   {
5892     { Bad_Opcode },
5893     { Bad_Opcode },
5894     { VEX_W_TABLE (VEX_W_0F3832_P_2) },
5895   },
5896 
5897   /* PREFIX_VEX_0F3833 */
5898   {
5899     { Bad_Opcode },
5900     { Bad_Opcode },
5901     { VEX_W_TABLE (VEX_W_0F3833_P_2) },
5902   },
5903 
5904   /* PREFIX_VEX_0F3834 */
5905   {
5906     { Bad_Opcode },
5907     { Bad_Opcode },
5908     { VEX_W_TABLE (VEX_W_0F3834_P_2) },
5909   },
5910 
5911   /* PREFIX_VEX_0F3835 */
5912   {
5913     { Bad_Opcode },
5914     { Bad_Opcode },
5915     { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5916   },
5917 
5918   /* PREFIX_VEX_0F3836 */
5919   {
5920     { Bad_Opcode },
5921     { Bad_Opcode },
5922     { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
5923   },
5924 
5925   /* PREFIX_VEX_0F3837 */
5926   {
5927     { Bad_Opcode },
5928     { Bad_Opcode },
5929     { VEX_W_TABLE (VEX_W_0F3837_P_2) },
5930   },
5931 
5932   /* PREFIX_VEX_0F3838 */
5933   {
5934     { Bad_Opcode },
5935     { Bad_Opcode },
5936     { VEX_W_TABLE (VEX_W_0F3838_P_2) },
5937   },
5938 
5939   /* PREFIX_VEX_0F3839 */
5940   {
5941     { Bad_Opcode },
5942     { Bad_Opcode },
5943     { VEX_W_TABLE (VEX_W_0F3839_P_2) },
5944   },
5945 
5946   /* PREFIX_VEX_0F383A */
5947   {
5948     { Bad_Opcode },
5949     { Bad_Opcode },
5950     { VEX_W_TABLE (VEX_W_0F383A_P_2) },
5951   },
5952 
5953   /* PREFIX_VEX_0F383B */
5954   {
5955     { Bad_Opcode },
5956     { Bad_Opcode },
5957     { VEX_W_TABLE (VEX_W_0F383B_P_2) },
5958   },
5959 
5960   /* PREFIX_VEX_0F383C */
5961   {
5962     { Bad_Opcode },
5963     { Bad_Opcode },
5964     { VEX_W_TABLE (VEX_W_0F383C_P_2) },
5965   },
5966 
5967   /* PREFIX_VEX_0F383D */
5968   {
5969     { Bad_Opcode },
5970     { Bad_Opcode },
5971     { VEX_W_TABLE (VEX_W_0F383D_P_2) },
5972   },
5973 
5974   /* PREFIX_VEX_0F383E */
5975   {
5976     { Bad_Opcode },
5977     { Bad_Opcode },
5978     { VEX_W_TABLE (VEX_W_0F383E_P_2) },
5979   },
5980 
5981   /* PREFIX_VEX_0F383F */
5982   {
5983     { Bad_Opcode },
5984     { Bad_Opcode },
5985     { VEX_W_TABLE (VEX_W_0F383F_P_2) },
5986   },
5987 
5988   /* PREFIX_VEX_0F3840 */
5989   {
5990     { Bad_Opcode },
5991     { Bad_Opcode },
5992     { VEX_W_TABLE (VEX_W_0F3840_P_2) },
5993   },
5994 
5995   /* PREFIX_VEX_0F3841 */
5996   {
5997     { Bad_Opcode },
5998     { Bad_Opcode },
5999     { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
6000   },
6001 
6002   /* PREFIX_VEX_0F3845 */
6003   {
6004     { Bad_Opcode },
6005     { Bad_Opcode },
6006     { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6007   },
6008 
6009   /* PREFIX_VEX_0F3846 */
6010   {
6011     { Bad_Opcode },
6012     { Bad_Opcode },
6013     { VEX_W_TABLE (VEX_W_0F3846_P_2) },
6014   },
6015 
6016   /* PREFIX_VEX_0F3847 */
6017   {
6018     { Bad_Opcode },
6019     { Bad_Opcode },
6020     { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6021   },
6022 
6023   /* PREFIX_VEX_0F3858 */
6024   {
6025     { Bad_Opcode },
6026     { Bad_Opcode },
6027     { VEX_W_TABLE (VEX_W_0F3858_P_2) },
6028   },
6029 
6030   /* PREFIX_VEX_0F3859 */
6031   {
6032     { Bad_Opcode },
6033     { Bad_Opcode },
6034     { VEX_W_TABLE (VEX_W_0F3859_P_2) },
6035   },
6036 
6037   /* PREFIX_VEX_0F385A */
6038   {
6039     { Bad_Opcode },
6040     { Bad_Opcode },
6041     { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
6042   },
6043 
6044   /* PREFIX_VEX_0F3878 */
6045   {
6046     { Bad_Opcode },
6047     { Bad_Opcode },
6048     { VEX_W_TABLE (VEX_W_0F3878_P_2) },
6049   },
6050 
6051   /* PREFIX_VEX_0F3879 */
6052   {
6053     { Bad_Opcode },
6054     { Bad_Opcode },
6055     { VEX_W_TABLE (VEX_W_0F3879_P_2) },
6056   },
6057 
6058   /* PREFIX_VEX_0F388C */
6059   {
6060     { Bad_Opcode },
6061     { Bad_Opcode },
6062     { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6063   },
6064 
6065   /* PREFIX_VEX_0F388E */
6066   {
6067     { Bad_Opcode },
6068     { Bad_Opcode },
6069     { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6070   },
6071 
6072   /* PREFIX_VEX_0F3890 */
6073   {
6074     { Bad_Opcode },
6075     { Bad_Opcode },
6076     { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6077   },
6078 
6079   /* PREFIX_VEX_0F3891 */
6080   {
6081     { Bad_Opcode },
6082     { Bad_Opcode },
6083     { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6084   },
6085 
6086   /* PREFIX_VEX_0F3892 */
6087   {
6088     { Bad_Opcode },
6089     { Bad_Opcode },
6090     { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6091   },
6092 
6093   /* PREFIX_VEX_0F3893 */
6094   {
6095     { Bad_Opcode },
6096     { Bad_Opcode },
6097     { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6098   },
6099 
6100   /* PREFIX_VEX_0F3896 */
6101   {
6102     { Bad_Opcode },
6103     { Bad_Opcode },
6104     { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
6105   },
6106 
6107   /* PREFIX_VEX_0F3897 */
6108   {
6109     { Bad_Opcode },
6110     { Bad_Opcode },
6111     { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
6112   },
6113 
6114   /* PREFIX_VEX_0F3898 */
6115   {
6116     { Bad_Opcode },
6117     { Bad_Opcode },
6118     { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
6119   },
6120 
6121   /* PREFIX_VEX_0F3899 */
6122   {
6123     { Bad_Opcode },
6124     { Bad_Opcode },
6125     { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6126   },
6127 
6128   /* PREFIX_VEX_0F389A */
6129   {
6130     { Bad_Opcode },
6131     { Bad_Opcode },
6132     { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
6133   },
6134 
6135   /* PREFIX_VEX_0F389B */
6136   {
6137     { Bad_Opcode },
6138     { Bad_Opcode },
6139     { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6140   },
6141 
6142   /* PREFIX_VEX_0F389C */
6143   {
6144     { Bad_Opcode },
6145     { Bad_Opcode },
6146     { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
6147   },
6148 
6149   /* PREFIX_VEX_0F389D */
6150   {
6151     { Bad_Opcode },
6152     { Bad_Opcode },
6153     { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6154   },
6155 
6156   /* PREFIX_VEX_0F389E */
6157   {
6158     { Bad_Opcode },
6159     { Bad_Opcode },
6160     { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
6161   },
6162 
6163   /* PREFIX_VEX_0F389F */
6164   {
6165     { Bad_Opcode },
6166     { Bad_Opcode },
6167     { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6168   },
6169 
6170   /* PREFIX_VEX_0F38A6 */
6171   {
6172     { Bad_Opcode },
6173     { Bad_Opcode },
6174     { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
6175     { Bad_Opcode },
6176   },
6177 
6178   /* PREFIX_VEX_0F38A7 */
6179   {
6180     { Bad_Opcode },
6181     { Bad_Opcode },
6182     { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
6183   },
6184 
6185   /* PREFIX_VEX_0F38A8 */
6186   {
6187     { Bad_Opcode },
6188     { Bad_Opcode },
6189     { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
6190   },
6191 
6192   /* PREFIX_VEX_0F38A9 */
6193   {
6194     { Bad_Opcode },
6195     { Bad_Opcode },
6196     { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6197   },
6198 
6199   /* PREFIX_VEX_0F38AA */
6200   {
6201     { Bad_Opcode },
6202     { Bad_Opcode },
6203     { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
6204   },
6205 
6206   /* PREFIX_VEX_0F38AB */
6207   {
6208     { Bad_Opcode },
6209     { Bad_Opcode },
6210     { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6211   },
6212 
6213   /* PREFIX_VEX_0F38AC */
6214   {
6215     { Bad_Opcode },
6216     { Bad_Opcode },
6217     { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
6218   },
6219 
6220   /* PREFIX_VEX_0F38AD */
6221   {
6222     { Bad_Opcode },
6223     { Bad_Opcode },
6224     { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6225   },
6226 
6227   /* PREFIX_VEX_0F38AE */
6228   {
6229     { Bad_Opcode },
6230     { Bad_Opcode },
6231     { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
6232   },
6233 
6234   /* PREFIX_VEX_0F38AF */
6235   {
6236     { Bad_Opcode },
6237     { Bad_Opcode },
6238     { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6239   },
6240 
6241   /* PREFIX_VEX_0F38B6 */
6242   {
6243     { Bad_Opcode },
6244     { Bad_Opcode },
6245     { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
6246   },
6247 
6248   /* PREFIX_VEX_0F38B7 */
6249   {
6250     { Bad_Opcode },
6251     { Bad_Opcode },
6252     { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
6253   },
6254 
6255   /* PREFIX_VEX_0F38B8 */
6256   {
6257     { Bad_Opcode },
6258     { Bad_Opcode },
6259     { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
6260   },
6261 
6262   /* PREFIX_VEX_0F38B9 */
6263   {
6264     { Bad_Opcode },
6265     { Bad_Opcode },
6266     { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6267   },
6268 
6269   /* PREFIX_VEX_0F38BA */
6270   {
6271     { Bad_Opcode },
6272     { Bad_Opcode },
6273     { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
6274   },
6275 
6276   /* PREFIX_VEX_0F38BB */
6277   {
6278     { Bad_Opcode },
6279     { Bad_Opcode },
6280     { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6281   },
6282 
6283   /* PREFIX_VEX_0F38BC */
6284   {
6285     { Bad_Opcode },
6286     { Bad_Opcode },
6287     { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
6288   },
6289 
6290   /* PREFIX_VEX_0F38BD */
6291   {
6292     { Bad_Opcode },
6293     { Bad_Opcode },
6294     { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6295   },
6296 
6297   /* PREFIX_VEX_0F38BE */
6298   {
6299     { Bad_Opcode },
6300     { Bad_Opcode },
6301     { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
6302   },
6303 
6304   /* PREFIX_VEX_0F38BF */
6305   {
6306     { Bad_Opcode },
6307     { Bad_Opcode },
6308     { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6309   },
6310 
6311   /* PREFIX_VEX_0F38DB */
6312   {
6313     { Bad_Opcode },
6314     { Bad_Opcode },
6315     { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
6316   },
6317 
6318   /* PREFIX_VEX_0F38DC */
6319   {
6320     { Bad_Opcode },
6321     { Bad_Opcode },
6322     { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
6323   },
6324 
6325   /* PREFIX_VEX_0F38DD */
6326   {
6327     { Bad_Opcode },
6328     { Bad_Opcode },
6329     { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
6330   },
6331 
6332   /* PREFIX_VEX_0F38DE */
6333   {
6334     { Bad_Opcode },
6335     { Bad_Opcode },
6336     { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
6337   },
6338 
6339   /* PREFIX_VEX_0F38DF */
6340   {
6341     { Bad_Opcode },
6342     { Bad_Opcode },
6343     { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
6344   },
6345 
6346   /* PREFIX_VEX_0F38F2 */
6347   {
6348     { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6349   },
6350 
6351   /* PREFIX_VEX_0F38F3_REG_1 */
6352   {
6353     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6354   },
6355 
6356   /* PREFIX_VEX_0F38F3_REG_2 */
6357   {
6358     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6359   },
6360 
6361   /* PREFIX_VEX_0F38F3_REG_3 */
6362   {
6363     { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6364   },
6365 
6366   /* PREFIX_VEX_0F38F5 */
6367   {
6368     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6369     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6370     { Bad_Opcode },
6371     { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6372   },
6373 
6374   /* PREFIX_VEX_0F38F6 */
6375   {
6376     { Bad_Opcode },
6377     { Bad_Opcode },
6378     { Bad_Opcode },
6379     { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6380   },
6381 
6382   /* PREFIX_VEX_0F38F7 */
6383   {
6384     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6385     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6386     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6387     { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6388   },
6389 
6390   /* PREFIX_VEX_0F3A00 */
6391   {
6392     { Bad_Opcode },
6393     { Bad_Opcode },
6394     { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6395   },
6396 
6397   /* PREFIX_VEX_0F3A01 */
6398   {
6399     { Bad_Opcode },
6400     { Bad_Opcode },
6401     { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6402   },
6403 
6404   /* PREFIX_VEX_0F3A02 */
6405   {
6406     { Bad_Opcode },
6407     { Bad_Opcode },
6408     { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
6409   },
6410 
6411   /* PREFIX_VEX_0F3A04 */
6412   {
6413     { Bad_Opcode },
6414     { Bad_Opcode },
6415     { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
6416   },
6417 
6418   /* PREFIX_VEX_0F3A05 */
6419   {
6420     { Bad_Opcode },
6421     { Bad_Opcode },
6422     { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
6423   },
6424 
6425   /* PREFIX_VEX_0F3A06 */
6426   {
6427     { Bad_Opcode },
6428     { Bad_Opcode },
6429     { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
6430   },
6431 
6432   /* PREFIX_VEX_0F3A08 */
6433   {
6434     { Bad_Opcode },
6435     { Bad_Opcode },
6436     { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
6437   },
6438 
6439   /* PREFIX_VEX_0F3A09 */
6440   {
6441     { Bad_Opcode },
6442     { Bad_Opcode },
6443     { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
6444   },
6445 
6446   /* PREFIX_VEX_0F3A0A */
6447   {
6448     { Bad_Opcode },
6449     { Bad_Opcode },
6450     { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
6451   },
6452 
6453   /* PREFIX_VEX_0F3A0B */
6454   {
6455     { Bad_Opcode },
6456     { Bad_Opcode },
6457     { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
6458   },
6459 
6460   /* PREFIX_VEX_0F3A0C */
6461   {
6462     { Bad_Opcode },
6463     { Bad_Opcode },
6464     { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
6465   },
6466 
6467   /* PREFIX_VEX_0F3A0D */
6468   {
6469     { Bad_Opcode },
6470     { Bad_Opcode },
6471     { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
6472   },
6473 
6474   /* PREFIX_VEX_0F3A0E */
6475   {
6476     { Bad_Opcode },
6477     { Bad_Opcode },
6478     { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
6479   },
6480 
6481   /* PREFIX_VEX_0F3A0F */
6482   {
6483     { Bad_Opcode },
6484     { Bad_Opcode },
6485     { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
6486   },
6487 
6488   /* PREFIX_VEX_0F3A14 */
6489   {
6490     { Bad_Opcode },
6491     { Bad_Opcode },
6492     { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
6493   },
6494 
6495   /* PREFIX_VEX_0F3A15 */
6496   {
6497     { Bad_Opcode },
6498     { Bad_Opcode },
6499     { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
6500   },
6501 
6502   /* PREFIX_VEX_0F3A16 */
6503   {
6504     { Bad_Opcode },
6505     { Bad_Opcode },
6506     { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
6507   },
6508 
6509   /* PREFIX_VEX_0F3A17 */
6510   {
6511     { Bad_Opcode },
6512     { Bad_Opcode },
6513     { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
6514   },
6515 
6516   /* PREFIX_VEX_0F3A18 */
6517   {
6518     { Bad_Opcode },
6519     { Bad_Opcode },
6520     { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
6521   },
6522 
6523   /* PREFIX_VEX_0F3A19 */
6524   {
6525     { Bad_Opcode },
6526     { Bad_Opcode },
6527     { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
6528   },
6529 
6530   /* PREFIX_VEX_0F3A1D */
6531   {
6532     { Bad_Opcode },
6533     { Bad_Opcode },
6534     { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
6535   },
6536 
6537   /* PREFIX_VEX_0F3A20 */
6538   {
6539     { Bad_Opcode },
6540     { Bad_Opcode },
6541     { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
6542   },
6543 
6544   /* PREFIX_VEX_0F3A21 */
6545   {
6546     { Bad_Opcode },
6547     { Bad_Opcode },
6548     { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
6549   },
6550 
6551   /* PREFIX_VEX_0F3A22 */
6552   {
6553     { Bad_Opcode },
6554     { Bad_Opcode },
6555     { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
6556   },
6557 
6558   /* PREFIX_VEX_0F3A30 */
6559   {
6560     { Bad_Opcode },
6561     { Bad_Opcode },
6562     { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6563   },
6564 
6565   /* PREFIX_VEX_0F3A31 */
6566   {
6567     { Bad_Opcode },
6568     { Bad_Opcode },
6569     { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6570   },
6571 
6572   /* PREFIX_VEX_0F3A32 */
6573   {
6574     { Bad_Opcode },
6575     { Bad_Opcode },
6576     { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6577   },
6578 
6579   /* PREFIX_VEX_0F3A33 */
6580   {
6581     { Bad_Opcode },
6582     { Bad_Opcode },
6583     { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6584   },
6585 
6586   /* PREFIX_VEX_0F3A38 */
6587   {
6588     { Bad_Opcode },
6589     { Bad_Opcode },
6590     { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6591   },
6592 
6593   /* PREFIX_VEX_0F3A39 */
6594   {
6595     { Bad_Opcode },
6596     { Bad_Opcode },
6597     { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6598   },
6599 
6600   /* PREFIX_VEX_0F3A40 */
6601   {
6602     { Bad_Opcode },
6603     { Bad_Opcode },
6604     { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
6605   },
6606 
6607   /* PREFIX_VEX_0F3A41 */
6608   {
6609     { Bad_Opcode },
6610     { Bad_Opcode },
6611     { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
6612   },
6613 
6614   /* PREFIX_VEX_0F3A42 */
6615   {
6616     { Bad_Opcode },
6617     { Bad_Opcode },
6618     { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
6619   },
6620 
6621   /* PREFIX_VEX_0F3A44 */
6622   {
6623     { Bad_Opcode },
6624     { Bad_Opcode },
6625     { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
6626   },
6627 
6628   /* PREFIX_VEX_0F3A46 */
6629   {
6630     { Bad_Opcode },
6631     { Bad_Opcode },
6632     { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6633   },
6634 
6635   /* PREFIX_VEX_0F3A48 */
6636   {
6637     { Bad_Opcode },
6638     { Bad_Opcode },
6639     { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
6640   },
6641 
6642   /* PREFIX_VEX_0F3A49 */
6643   {
6644     { Bad_Opcode },
6645     { Bad_Opcode },
6646     { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
6647   },
6648 
6649   /* PREFIX_VEX_0F3A4A */
6650   {
6651     { Bad_Opcode },
6652     { Bad_Opcode },
6653     { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
6654   },
6655 
6656   /* PREFIX_VEX_0F3A4B */
6657   {
6658     { Bad_Opcode },
6659     { Bad_Opcode },
6660     { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
6661   },
6662 
6663   /* PREFIX_VEX_0F3A4C */
6664   {
6665     { Bad_Opcode },
6666     { Bad_Opcode },
6667     { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
6668   },
6669 
6670   /* PREFIX_VEX_0F3A5C */
6671   {
6672     { Bad_Opcode },
6673     { Bad_Opcode },
6674     { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6675   },
6676 
6677   /* PREFIX_VEX_0F3A5D */
6678   {
6679     { Bad_Opcode },
6680     { Bad_Opcode },
6681     { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6682   },
6683 
6684   /* PREFIX_VEX_0F3A5E */
6685   {
6686     { Bad_Opcode },
6687     { Bad_Opcode },
6688     { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6689   },
6690 
6691   /* PREFIX_VEX_0F3A5F */
6692   {
6693     { Bad_Opcode },
6694     { Bad_Opcode },
6695     { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6696   },
6697 
6698   /* PREFIX_VEX_0F3A60 */
6699   {
6700     { Bad_Opcode },
6701     { Bad_Opcode },
6702     { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
6703     { Bad_Opcode },
6704   },
6705 
6706   /* PREFIX_VEX_0F3A61 */
6707   {
6708     { Bad_Opcode },
6709     { Bad_Opcode },
6710     { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
6711   },
6712 
6713   /* PREFIX_VEX_0F3A62 */
6714   {
6715     { Bad_Opcode },
6716     { Bad_Opcode },
6717     { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
6718   },
6719 
6720   /* PREFIX_VEX_0F3A63 */
6721   {
6722     { Bad_Opcode },
6723     { Bad_Opcode },
6724     { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
6725   },
6726 
6727   /* PREFIX_VEX_0F3A68 */
6728   {
6729     { Bad_Opcode },
6730     { Bad_Opcode },
6731     { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6732   },
6733 
6734   /* PREFIX_VEX_0F3A69 */
6735   {
6736     { Bad_Opcode },
6737     { Bad_Opcode },
6738     { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6739   },
6740 
6741   /* PREFIX_VEX_0F3A6A */
6742   {
6743     { Bad_Opcode },
6744     { Bad_Opcode },
6745     { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
6746   },
6747 
6748   /* PREFIX_VEX_0F3A6B */
6749   {
6750     { Bad_Opcode },
6751     { Bad_Opcode },
6752     { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
6753   },
6754 
6755   /* PREFIX_VEX_0F3A6C */
6756   {
6757     { Bad_Opcode },
6758     { Bad_Opcode },
6759     { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6760   },
6761 
6762   /* PREFIX_VEX_0F3A6D */
6763   {
6764     { Bad_Opcode },
6765     { Bad_Opcode },
6766     { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6767   },
6768 
6769   /* PREFIX_VEX_0F3A6E */
6770   {
6771     { Bad_Opcode },
6772     { Bad_Opcode },
6773     { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
6774   },
6775 
6776   /* PREFIX_VEX_0F3A6F */
6777   {
6778     { Bad_Opcode },
6779     { Bad_Opcode },
6780     { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
6781   },
6782 
6783   /* PREFIX_VEX_0F3A78 */
6784   {
6785     { Bad_Opcode },
6786     { Bad_Opcode },
6787     { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6788   },
6789 
6790   /* PREFIX_VEX_0F3A79 */
6791   {
6792     { Bad_Opcode },
6793     { Bad_Opcode },
6794     { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6795   },
6796 
6797   /* PREFIX_VEX_0F3A7A */
6798   {
6799     { Bad_Opcode },
6800     { Bad_Opcode },
6801     { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
6802   },
6803 
6804   /* PREFIX_VEX_0F3A7B */
6805   {
6806     { Bad_Opcode },
6807     { Bad_Opcode },
6808     { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
6809   },
6810 
6811   /* PREFIX_VEX_0F3A7C */
6812   {
6813     { Bad_Opcode },
6814     { Bad_Opcode },
6815     { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6816     { Bad_Opcode },
6817   },
6818 
6819   /* PREFIX_VEX_0F3A7D */
6820   {
6821     { Bad_Opcode },
6822     { Bad_Opcode },
6823     { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
6824   },
6825 
6826   /* PREFIX_VEX_0F3A7E */
6827   {
6828     { Bad_Opcode },
6829     { Bad_Opcode },
6830     { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
6831   },
6832 
6833   /* PREFIX_VEX_0F3A7F */
6834   {
6835     { Bad_Opcode },
6836     { Bad_Opcode },
6837     { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
6838   },
6839 
6840   /* PREFIX_VEX_0F3ADF */
6841   {
6842     { Bad_Opcode },
6843     { Bad_Opcode },
6844     { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
6845   },
6846 
6847   /* PREFIX_VEX_0F3AF0 */
6848   {
6849     { Bad_Opcode },
6850     { Bad_Opcode },
6851     { Bad_Opcode },
6852     { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6853   },
6854 
6855 #define NEED_PREFIX_TABLE
6856 #include "i386-dis-evex.h"
6857 #undef NEED_PREFIX_TABLE
6858 };
6859 
6860 static const struct dis386 x86_64_table[][2] = {
6861   /* X86_64_06 */
6862   {
6863     { "pushP", { es }, 0 },
6864   },
6865 
6866   /* X86_64_07 */
6867   {
6868     { "popP", { es }, 0 },
6869   },
6870 
6871   /* X86_64_0D */
6872   {
6873     { "pushP", { cs }, 0 },
6874   },
6875 
6876   /* X86_64_16 */
6877   {
6878     { "pushP", { ss }, 0 },
6879   },
6880 
6881   /* X86_64_17 */
6882   {
6883     { "popP", { ss }, 0 },
6884   },
6885 
6886   /* X86_64_1E */
6887   {
6888     { "pushP", { ds }, 0 },
6889   },
6890 
6891   /* X86_64_1F */
6892   {
6893     { "popP", { ds }, 0 },
6894   },
6895 
6896   /* X86_64_27 */
6897   {
6898     { "daa", { XX }, 0 },
6899   },
6900 
6901   /* X86_64_2F */
6902   {
6903     { "das", { XX }, 0 },
6904   },
6905 
6906   /* X86_64_37 */
6907   {
6908     { "aaa", { XX }, 0 },
6909   },
6910 
6911   /* X86_64_3F */
6912   {
6913     { "aas", { XX }, 0 },
6914   },
6915 
6916   /* X86_64_60 */
6917   {
6918     { "pushaP", { XX }, 0 },
6919   },
6920 
6921   /* X86_64_61 */
6922   {
6923     { "popaP", { XX }, 0 },
6924   },
6925 
6926   /* X86_64_62 */
6927   {
6928     { MOD_TABLE (MOD_62_32BIT) },
6929     { EVEX_TABLE (EVEX_0F) },
6930   },
6931 
6932   /* X86_64_63 */
6933   {
6934     { "arpl", { Ew, Gw }, 0 },
6935     { "movs{lq|xd}", { Gv, Ed }, 0 },
6936   },
6937 
6938   /* X86_64_6D */
6939   {
6940     { "ins{R|}", { Yzr, indirDX }, 0 },
6941     { "ins{G|}", { Yzr, indirDX }, 0 },
6942   },
6943 
6944   /* X86_64_6F */
6945   {
6946     { "outs{R|}", { indirDXr, Xz }, 0 },
6947     { "outs{G|}", { indirDXr, Xz }, 0 },
6948   },
6949 
6950   /* X86_64_82 */
6951   {
6952     /* Opcode 0x82 is an alias of of opcode 0x80 in 32-bit mode.  */
6953     { REG_TABLE (REG_80) },
6954   },
6955 
6956   /* X86_64_9A */
6957   {
6958     { "Jcall{T|}", { Ap }, 0 },
6959   },
6960 
6961   /* X86_64_C4 */
6962   {
6963     { MOD_TABLE (MOD_C4_32BIT) },
6964     { VEX_C4_TABLE (VEX_0F) },
6965   },
6966 
6967   /* X86_64_C5 */
6968   {
6969     { MOD_TABLE (MOD_C5_32BIT) },
6970     { VEX_C5_TABLE (VEX_0F) },
6971   },
6972 
6973   /* X86_64_CE */
6974   {
6975     { "into", { XX }, 0 },
6976   },
6977 
6978   /* X86_64_D4 */
6979   {
6980     { "aam", { Ib }, 0 },
6981   },
6982 
6983   /* X86_64_D5 */
6984   {
6985     { "aad", { Ib }, 0 },
6986   },
6987 
6988   /* X86_64_E8 */
6989   {
6990     { "callP",		{ Jv, BND }, 0 },
6991     { "call@",		{ Jv, BND }, 0 }
6992   },
6993 
6994   /* X86_64_E9 */
6995   {
6996     { "jmpP",		{ Jv, BND }, 0 },
6997     { "jmp@",		{ Jv, BND }, 0 }
6998   },
6999 
7000   /* X86_64_EA */
7001   {
7002     { "Jjmp{T|}", { Ap }, 0 },
7003   },
7004 
7005   /* X86_64_0F01_REG_0 */
7006   {
7007     { "sgdt{Q|IQ}", { M }, 0 },
7008     { "sgdt", { M }, 0 },
7009   },
7010 
7011   /* X86_64_0F01_REG_1 */
7012   {
7013     { "sidt{Q|IQ}", { M }, 0 },
7014     { "sidt", { M }, 0 },
7015   },
7016 
7017   /* X86_64_0F01_REG_2 */
7018   {
7019     { "lgdt{Q|Q}", { M }, 0 },
7020     { "lgdt", { M }, 0 },
7021   },
7022 
7023   /* X86_64_0F01_REG_3 */
7024   {
7025     { "lidt{Q|Q}", { M }, 0 },
7026     { "lidt", { M }, 0 },
7027   },
7028 };
7029 
7030 static const struct dis386 three_byte_table[][256] = {
7031 
7032   /* THREE_BYTE_0F38 */
7033   {
7034     /* 00 */
7035     { "pshufb",		{ MX, EM }, PREFIX_OPCODE },
7036     { "phaddw",		{ MX, EM }, PREFIX_OPCODE },
7037     { "phaddd",		{ MX, EM }, PREFIX_OPCODE },
7038     { "phaddsw",	{ MX, EM }, PREFIX_OPCODE },
7039     { "pmaddubsw",	{ MX, EM }, PREFIX_OPCODE },
7040     { "phsubw",		{ MX, EM }, PREFIX_OPCODE },
7041     { "phsubd",		{ MX, EM }, PREFIX_OPCODE },
7042     { "phsubsw",	{ MX, EM }, PREFIX_OPCODE },
7043     /* 08 */
7044     { "psignb",		{ MX, EM }, PREFIX_OPCODE },
7045     { "psignw",		{ MX, EM }, PREFIX_OPCODE },
7046     { "psignd",		{ MX, EM }, PREFIX_OPCODE },
7047     { "pmulhrsw",	{ MX, EM }, PREFIX_OPCODE },
7048     { Bad_Opcode },
7049     { Bad_Opcode },
7050     { Bad_Opcode },
7051     { Bad_Opcode },
7052     /* 10 */
7053     { PREFIX_TABLE (PREFIX_0F3810) },
7054     { Bad_Opcode },
7055     { Bad_Opcode },
7056     { Bad_Opcode },
7057     { PREFIX_TABLE (PREFIX_0F3814) },
7058     { PREFIX_TABLE (PREFIX_0F3815) },
7059     { Bad_Opcode },
7060     { PREFIX_TABLE (PREFIX_0F3817) },
7061     /* 18 */
7062     { Bad_Opcode },
7063     { Bad_Opcode },
7064     { Bad_Opcode },
7065     { Bad_Opcode },
7066     { "pabsb",		{ MX, EM }, PREFIX_OPCODE },
7067     { "pabsw",		{ MX, EM }, PREFIX_OPCODE },
7068     { "pabsd",		{ MX, EM }, PREFIX_OPCODE },
7069     { Bad_Opcode },
7070     /* 20 */
7071     { PREFIX_TABLE (PREFIX_0F3820) },
7072     { PREFIX_TABLE (PREFIX_0F3821) },
7073     { PREFIX_TABLE (PREFIX_0F3822) },
7074     { PREFIX_TABLE (PREFIX_0F3823) },
7075     { PREFIX_TABLE (PREFIX_0F3824) },
7076     { PREFIX_TABLE (PREFIX_0F3825) },
7077     { Bad_Opcode },
7078     { Bad_Opcode },
7079     /* 28 */
7080     { PREFIX_TABLE (PREFIX_0F3828) },
7081     { PREFIX_TABLE (PREFIX_0F3829) },
7082     { PREFIX_TABLE (PREFIX_0F382A) },
7083     { PREFIX_TABLE (PREFIX_0F382B) },
7084     { Bad_Opcode },
7085     { Bad_Opcode },
7086     { Bad_Opcode },
7087     { Bad_Opcode },
7088     /* 30 */
7089     { PREFIX_TABLE (PREFIX_0F3830) },
7090     { PREFIX_TABLE (PREFIX_0F3831) },
7091     { PREFIX_TABLE (PREFIX_0F3832) },
7092     { PREFIX_TABLE (PREFIX_0F3833) },
7093     { PREFIX_TABLE (PREFIX_0F3834) },
7094     { PREFIX_TABLE (PREFIX_0F3835) },
7095     { Bad_Opcode },
7096     { PREFIX_TABLE (PREFIX_0F3837) },
7097     /* 38 */
7098     { PREFIX_TABLE (PREFIX_0F3838) },
7099     { PREFIX_TABLE (PREFIX_0F3839) },
7100     { PREFIX_TABLE (PREFIX_0F383A) },
7101     { PREFIX_TABLE (PREFIX_0F383B) },
7102     { PREFIX_TABLE (PREFIX_0F383C) },
7103     { PREFIX_TABLE (PREFIX_0F383D) },
7104     { PREFIX_TABLE (PREFIX_0F383E) },
7105     { PREFIX_TABLE (PREFIX_0F383F) },
7106     /* 40 */
7107     { PREFIX_TABLE (PREFIX_0F3840) },
7108     { PREFIX_TABLE (PREFIX_0F3841) },
7109     { Bad_Opcode },
7110     { Bad_Opcode },
7111     { Bad_Opcode },
7112     { Bad_Opcode },
7113     { Bad_Opcode },
7114     { Bad_Opcode },
7115     /* 48 */
7116     { Bad_Opcode },
7117     { Bad_Opcode },
7118     { Bad_Opcode },
7119     { Bad_Opcode },
7120     { Bad_Opcode },
7121     { Bad_Opcode },
7122     { Bad_Opcode },
7123     { Bad_Opcode },
7124     /* 50 */
7125     { Bad_Opcode },
7126     { Bad_Opcode },
7127     { Bad_Opcode },
7128     { Bad_Opcode },
7129     { Bad_Opcode },
7130     { Bad_Opcode },
7131     { Bad_Opcode },
7132     { Bad_Opcode },
7133     /* 58 */
7134     { Bad_Opcode },
7135     { Bad_Opcode },
7136     { Bad_Opcode },
7137     { Bad_Opcode },
7138     { Bad_Opcode },
7139     { Bad_Opcode },
7140     { Bad_Opcode },
7141     { Bad_Opcode },
7142     /* 60 */
7143     { Bad_Opcode },
7144     { Bad_Opcode },
7145     { Bad_Opcode },
7146     { Bad_Opcode },
7147     { Bad_Opcode },
7148     { Bad_Opcode },
7149     { Bad_Opcode },
7150     { Bad_Opcode },
7151     /* 68 */
7152     { Bad_Opcode },
7153     { Bad_Opcode },
7154     { Bad_Opcode },
7155     { Bad_Opcode },
7156     { Bad_Opcode },
7157     { Bad_Opcode },
7158     { Bad_Opcode },
7159     { Bad_Opcode },
7160     /* 70 */
7161     { Bad_Opcode },
7162     { Bad_Opcode },
7163     { Bad_Opcode },
7164     { Bad_Opcode },
7165     { Bad_Opcode },
7166     { Bad_Opcode },
7167     { Bad_Opcode },
7168     { Bad_Opcode },
7169     /* 78 */
7170     { Bad_Opcode },
7171     { Bad_Opcode },
7172     { Bad_Opcode },
7173     { Bad_Opcode },
7174     { Bad_Opcode },
7175     { Bad_Opcode },
7176     { Bad_Opcode },
7177     { Bad_Opcode },
7178     /* 80 */
7179     { PREFIX_TABLE (PREFIX_0F3880) },
7180     { PREFIX_TABLE (PREFIX_0F3881) },
7181     { PREFIX_TABLE (PREFIX_0F3882) },
7182     { Bad_Opcode },
7183     { Bad_Opcode },
7184     { Bad_Opcode },
7185     { Bad_Opcode },
7186     { Bad_Opcode },
7187     /* 88 */
7188     { Bad_Opcode },
7189     { Bad_Opcode },
7190     { Bad_Opcode },
7191     { Bad_Opcode },
7192     { Bad_Opcode },
7193     { Bad_Opcode },
7194     { Bad_Opcode },
7195     { Bad_Opcode },
7196     /* 90 */
7197     { Bad_Opcode },
7198     { Bad_Opcode },
7199     { Bad_Opcode },
7200     { Bad_Opcode },
7201     { Bad_Opcode },
7202     { Bad_Opcode },
7203     { Bad_Opcode },
7204     { Bad_Opcode },
7205     /* 98 */
7206     { Bad_Opcode },
7207     { Bad_Opcode },
7208     { Bad_Opcode },
7209     { Bad_Opcode },
7210     { Bad_Opcode },
7211     { Bad_Opcode },
7212     { Bad_Opcode },
7213     { Bad_Opcode },
7214     /* a0 */
7215     { Bad_Opcode },
7216     { Bad_Opcode },
7217     { Bad_Opcode },
7218     { Bad_Opcode },
7219     { Bad_Opcode },
7220     { Bad_Opcode },
7221     { Bad_Opcode },
7222     { Bad_Opcode },
7223     /* a8 */
7224     { Bad_Opcode },
7225     { Bad_Opcode },
7226     { Bad_Opcode },
7227     { Bad_Opcode },
7228     { Bad_Opcode },
7229     { Bad_Opcode },
7230     { Bad_Opcode },
7231     { Bad_Opcode },
7232     /* b0 */
7233     { Bad_Opcode },
7234     { Bad_Opcode },
7235     { Bad_Opcode },
7236     { Bad_Opcode },
7237     { Bad_Opcode },
7238     { Bad_Opcode },
7239     { Bad_Opcode },
7240     { Bad_Opcode },
7241     /* b8 */
7242     { Bad_Opcode },
7243     { Bad_Opcode },
7244     { Bad_Opcode },
7245     { Bad_Opcode },
7246     { Bad_Opcode },
7247     { Bad_Opcode },
7248     { Bad_Opcode },
7249     { Bad_Opcode },
7250     /* c0 */
7251     { Bad_Opcode },
7252     { Bad_Opcode },
7253     { Bad_Opcode },
7254     { Bad_Opcode },
7255     { Bad_Opcode },
7256     { Bad_Opcode },
7257     { Bad_Opcode },
7258     { Bad_Opcode },
7259     /* c8 */
7260     { PREFIX_TABLE (PREFIX_0F38C8) },
7261     { PREFIX_TABLE (PREFIX_0F38C9) },
7262     { PREFIX_TABLE (PREFIX_0F38CA) },
7263     { PREFIX_TABLE (PREFIX_0F38CB) },
7264     { PREFIX_TABLE (PREFIX_0F38CC) },
7265     { PREFIX_TABLE (PREFIX_0F38CD) },
7266     { Bad_Opcode },
7267     { Bad_Opcode },
7268     /* d0 */
7269     { Bad_Opcode },
7270     { Bad_Opcode },
7271     { Bad_Opcode },
7272     { Bad_Opcode },
7273     { Bad_Opcode },
7274     { Bad_Opcode },
7275     { Bad_Opcode },
7276     { Bad_Opcode },
7277     /* d8 */
7278     { Bad_Opcode },
7279     { Bad_Opcode },
7280     { Bad_Opcode },
7281     { PREFIX_TABLE (PREFIX_0F38DB) },
7282     { PREFIX_TABLE (PREFIX_0F38DC) },
7283     { PREFIX_TABLE (PREFIX_0F38DD) },
7284     { PREFIX_TABLE (PREFIX_0F38DE) },
7285     { PREFIX_TABLE (PREFIX_0F38DF) },
7286     /* e0 */
7287     { Bad_Opcode },
7288     { Bad_Opcode },
7289     { Bad_Opcode },
7290     { Bad_Opcode },
7291     { Bad_Opcode },
7292     { Bad_Opcode },
7293     { Bad_Opcode },
7294     { Bad_Opcode },
7295     /* e8 */
7296     { Bad_Opcode },
7297     { Bad_Opcode },
7298     { Bad_Opcode },
7299     { Bad_Opcode },
7300     { Bad_Opcode },
7301     { Bad_Opcode },
7302     { Bad_Opcode },
7303     { Bad_Opcode },
7304     /* f0 */
7305     { PREFIX_TABLE (PREFIX_0F38F0) },
7306     { PREFIX_TABLE (PREFIX_0F38F1) },
7307     { Bad_Opcode },
7308     { Bad_Opcode },
7309     { Bad_Opcode },
7310     { PREFIX_TABLE (PREFIX_0F38F5) },
7311     { PREFIX_TABLE (PREFIX_0F38F6) },
7312     { Bad_Opcode },
7313     /* f8 */
7314     { Bad_Opcode },
7315     { Bad_Opcode },
7316     { Bad_Opcode },
7317     { Bad_Opcode },
7318     { Bad_Opcode },
7319     { Bad_Opcode },
7320     { Bad_Opcode },
7321     { Bad_Opcode },
7322   },
7323   /* THREE_BYTE_0F3A */
7324   {
7325     /* 00 */
7326     { Bad_Opcode },
7327     { Bad_Opcode },
7328     { Bad_Opcode },
7329     { Bad_Opcode },
7330     { Bad_Opcode },
7331     { Bad_Opcode },
7332     { Bad_Opcode },
7333     { Bad_Opcode },
7334     /* 08 */
7335     { PREFIX_TABLE (PREFIX_0F3A08) },
7336     { PREFIX_TABLE (PREFIX_0F3A09) },
7337     { PREFIX_TABLE (PREFIX_0F3A0A) },
7338     { PREFIX_TABLE (PREFIX_0F3A0B) },
7339     { PREFIX_TABLE (PREFIX_0F3A0C) },
7340     { PREFIX_TABLE (PREFIX_0F3A0D) },
7341     { PREFIX_TABLE (PREFIX_0F3A0E) },
7342     { "palignr",	{ MX, EM, Ib }, PREFIX_OPCODE },
7343     /* 10 */
7344     { Bad_Opcode },
7345     { Bad_Opcode },
7346     { Bad_Opcode },
7347     { Bad_Opcode },
7348     { PREFIX_TABLE (PREFIX_0F3A14) },
7349     { PREFIX_TABLE (PREFIX_0F3A15) },
7350     { PREFIX_TABLE (PREFIX_0F3A16) },
7351     { PREFIX_TABLE (PREFIX_0F3A17) },
7352     /* 18 */
7353     { Bad_Opcode },
7354     { Bad_Opcode },
7355     { Bad_Opcode },
7356     { Bad_Opcode },
7357     { Bad_Opcode },
7358     { Bad_Opcode },
7359     { Bad_Opcode },
7360     { Bad_Opcode },
7361     /* 20 */
7362     { PREFIX_TABLE (PREFIX_0F3A20) },
7363     { PREFIX_TABLE (PREFIX_0F3A21) },
7364     { PREFIX_TABLE (PREFIX_0F3A22) },
7365     { Bad_Opcode },
7366     { Bad_Opcode },
7367     { Bad_Opcode },
7368     { Bad_Opcode },
7369     { Bad_Opcode },
7370     /* 28 */
7371     { Bad_Opcode },
7372     { Bad_Opcode },
7373     { Bad_Opcode },
7374     { Bad_Opcode },
7375     { Bad_Opcode },
7376     { Bad_Opcode },
7377     { Bad_Opcode },
7378     { Bad_Opcode },
7379     /* 30 */
7380     { Bad_Opcode },
7381     { Bad_Opcode },
7382     { Bad_Opcode },
7383     { Bad_Opcode },
7384     { Bad_Opcode },
7385     { Bad_Opcode },
7386     { Bad_Opcode },
7387     { Bad_Opcode },
7388     /* 38 */
7389     { Bad_Opcode },
7390     { Bad_Opcode },
7391     { Bad_Opcode },
7392     { Bad_Opcode },
7393     { Bad_Opcode },
7394     { Bad_Opcode },
7395     { Bad_Opcode },
7396     { Bad_Opcode },
7397     /* 40 */
7398     { PREFIX_TABLE (PREFIX_0F3A40) },
7399     { PREFIX_TABLE (PREFIX_0F3A41) },
7400     { PREFIX_TABLE (PREFIX_0F3A42) },
7401     { Bad_Opcode },
7402     { PREFIX_TABLE (PREFIX_0F3A44) },
7403     { Bad_Opcode },
7404     { Bad_Opcode },
7405     { Bad_Opcode },
7406     /* 48 */
7407     { Bad_Opcode },
7408     { Bad_Opcode },
7409     { Bad_Opcode },
7410     { Bad_Opcode },
7411     { Bad_Opcode },
7412     { Bad_Opcode },
7413     { Bad_Opcode },
7414     { Bad_Opcode },
7415     /* 50 */
7416     { Bad_Opcode },
7417     { Bad_Opcode },
7418     { Bad_Opcode },
7419     { Bad_Opcode },
7420     { Bad_Opcode },
7421     { Bad_Opcode },
7422     { Bad_Opcode },
7423     { Bad_Opcode },
7424     /* 58 */
7425     { Bad_Opcode },
7426     { Bad_Opcode },
7427     { Bad_Opcode },
7428     { Bad_Opcode },
7429     { Bad_Opcode },
7430     { Bad_Opcode },
7431     { Bad_Opcode },
7432     { Bad_Opcode },
7433     /* 60 */
7434     { PREFIX_TABLE (PREFIX_0F3A60) },
7435     { PREFIX_TABLE (PREFIX_0F3A61) },
7436     { PREFIX_TABLE (PREFIX_0F3A62) },
7437     { PREFIX_TABLE (PREFIX_0F3A63) },
7438     { Bad_Opcode },
7439     { Bad_Opcode },
7440     { Bad_Opcode },
7441     { Bad_Opcode },
7442     /* 68 */
7443     { Bad_Opcode },
7444     { Bad_Opcode },
7445     { Bad_Opcode },
7446     { Bad_Opcode },
7447     { Bad_Opcode },
7448     { Bad_Opcode },
7449     { Bad_Opcode },
7450     { Bad_Opcode },
7451     /* 70 */
7452     { Bad_Opcode },
7453     { Bad_Opcode },
7454     { Bad_Opcode },
7455     { Bad_Opcode },
7456     { Bad_Opcode },
7457     { Bad_Opcode },
7458     { Bad_Opcode },
7459     { Bad_Opcode },
7460     /* 78 */
7461     { Bad_Opcode },
7462     { Bad_Opcode },
7463     { Bad_Opcode },
7464     { Bad_Opcode },
7465     { Bad_Opcode },
7466     { Bad_Opcode },
7467     { Bad_Opcode },
7468     { Bad_Opcode },
7469     /* 80 */
7470     { Bad_Opcode },
7471     { Bad_Opcode },
7472     { Bad_Opcode },
7473     { Bad_Opcode },
7474     { Bad_Opcode },
7475     { Bad_Opcode },
7476     { Bad_Opcode },
7477     { Bad_Opcode },
7478     /* 88 */
7479     { Bad_Opcode },
7480     { Bad_Opcode },
7481     { Bad_Opcode },
7482     { Bad_Opcode },
7483     { Bad_Opcode },
7484     { Bad_Opcode },
7485     { Bad_Opcode },
7486     { Bad_Opcode },
7487     /* 90 */
7488     { Bad_Opcode },
7489     { Bad_Opcode },
7490     { Bad_Opcode },
7491     { Bad_Opcode },
7492     { Bad_Opcode },
7493     { Bad_Opcode },
7494     { Bad_Opcode },
7495     { Bad_Opcode },
7496     /* 98 */
7497     { Bad_Opcode },
7498     { Bad_Opcode },
7499     { Bad_Opcode },
7500     { Bad_Opcode },
7501     { Bad_Opcode },
7502     { Bad_Opcode },
7503     { Bad_Opcode },
7504     { Bad_Opcode },
7505     /* a0 */
7506     { Bad_Opcode },
7507     { Bad_Opcode },
7508     { Bad_Opcode },
7509     { Bad_Opcode },
7510     { Bad_Opcode },
7511     { Bad_Opcode },
7512     { Bad_Opcode },
7513     { Bad_Opcode },
7514     /* a8 */
7515     { Bad_Opcode },
7516     { Bad_Opcode },
7517     { Bad_Opcode },
7518     { Bad_Opcode },
7519     { Bad_Opcode },
7520     { Bad_Opcode },
7521     { Bad_Opcode },
7522     { Bad_Opcode },
7523     /* b0 */
7524     { Bad_Opcode },
7525     { Bad_Opcode },
7526     { Bad_Opcode },
7527     { Bad_Opcode },
7528     { Bad_Opcode },
7529     { Bad_Opcode },
7530     { Bad_Opcode },
7531     { Bad_Opcode },
7532     /* b8 */
7533     { Bad_Opcode },
7534     { Bad_Opcode },
7535     { Bad_Opcode },
7536     { Bad_Opcode },
7537     { Bad_Opcode },
7538     { Bad_Opcode },
7539     { Bad_Opcode },
7540     { Bad_Opcode },
7541     /* c0 */
7542     { Bad_Opcode },
7543     { Bad_Opcode },
7544     { Bad_Opcode },
7545     { Bad_Opcode },
7546     { Bad_Opcode },
7547     { Bad_Opcode },
7548     { Bad_Opcode },
7549     { Bad_Opcode },
7550     /* c8 */
7551     { Bad_Opcode },
7552     { Bad_Opcode },
7553     { Bad_Opcode },
7554     { Bad_Opcode },
7555     { PREFIX_TABLE (PREFIX_0F3ACC) },
7556     { Bad_Opcode },
7557     { Bad_Opcode },
7558     { Bad_Opcode },
7559     /* d0 */
7560     { Bad_Opcode },
7561     { Bad_Opcode },
7562     { Bad_Opcode },
7563     { Bad_Opcode },
7564     { Bad_Opcode },
7565     { Bad_Opcode },
7566     { Bad_Opcode },
7567     { Bad_Opcode },
7568     /* d8 */
7569     { Bad_Opcode },
7570     { Bad_Opcode },
7571     { Bad_Opcode },
7572     { Bad_Opcode },
7573     { Bad_Opcode },
7574     { Bad_Opcode },
7575     { Bad_Opcode },
7576     { PREFIX_TABLE (PREFIX_0F3ADF) },
7577     /* e0 */
7578     { Bad_Opcode },
7579     { Bad_Opcode },
7580     { Bad_Opcode },
7581     { Bad_Opcode },
7582     { Bad_Opcode },
7583     { Bad_Opcode },
7584     { Bad_Opcode },
7585     { Bad_Opcode },
7586     /* e8 */
7587     { Bad_Opcode },
7588     { Bad_Opcode },
7589     { Bad_Opcode },
7590     { Bad_Opcode },
7591     { Bad_Opcode },
7592     { Bad_Opcode },
7593     { Bad_Opcode },
7594     { Bad_Opcode },
7595     /* f0 */
7596     { Bad_Opcode },
7597     { Bad_Opcode },
7598     { Bad_Opcode },
7599     { Bad_Opcode },
7600     { Bad_Opcode },
7601     { Bad_Opcode },
7602     { Bad_Opcode },
7603     { Bad_Opcode },
7604     /* f8 */
7605     { Bad_Opcode },
7606     { Bad_Opcode },
7607     { Bad_Opcode },
7608     { Bad_Opcode },
7609     { Bad_Opcode },
7610     { Bad_Opcode },
7611     { Bad_Opcode },
7612     { Bad_Opcode },
7613   },
7614 };
7615 
7616 static const struct dis386 xop_table[][256] = {
7617   /* XOP_08 */
7618   {
7619     /* 00 */
7620     { Bad_Opcode },
7621     { Bad_Opcode },
7622     { Bad_Opcode },
7623     { Bad_Opcode },
7624     { Bad_Opcode },
7625     { Bad_Opcode },
7626     { Bad_Opcode },
7627     { Bad_Opcode },
7628     /* 08 */
7629     { Bad_Opcode },
7630     { Bad_Opcode },
7631     { Bad_Opcode },
7632     { Bad_Opcode },
7633     { Bad_Opcode },
7634     { Bad_Opcode },
7635     { Bad_Opcode },
7636     { Bad_Opcode },
7637     /* 10 */
7638     { Bad_Opcode },
7639     { Bad_Opcode },
7640     { Bad_Opcode },
7641     { Bad_Opcode },
7642     { Bad_Opcode },
7643     { Bad_Opcode },
7644     { Bad_Opcode },
7645     { Bad_Opcode },
7646     /* 18 */
7647     { Bad_Opcode },
7648     { Bad_Opcode },
7649     { Bad_Opcode },
7650     { Bad_Opcode },
7651     { Bad_Opcode },
7652     { Bad_Opcode },
7653     { Bad_Opcode },
7654     { Bad_Opcode },
7655     /* 20 */
7656     { Bad_Opcode },
7657     { Bad_Opcode },
7658     { Bad_Opcode },
7659     { Bad_Opcode },
7660     { Bad_Opcode },
7661     { Bad_Opcode },
7662     { Bad_Opcode },
7663     { Bad_Opcode },
7664     /* 28 */
7665     { Bad_Opcode },
7666     { Bad_Opcode },
7667     { Bad_Opcode },
7668     { Bad_Opcode },
7669     { Bad_Opcode },
7670     { Bad_Opcode },
7671     { Bad_Opcode },
7672     { Bad_Opcode },
7673     /* 30 */
7674     { Bad_Opcode },
7675     { Bad_Opcode },
7676     { Bad_Opcode },
7677     { Bad_Opcode },
7678     { Bad_Opcode },
7679     { Bad_Opcode },
7680     { Bad_Opcode },
7681     { Bad_Opcode },
7682     /* 38 */
7683     { Bad_Opcode },
7684     { Bad_Opcode },
7685     { Bad_Opcode },
7686     { Bad_Opcode },
7687     { Bad_Opcode },
7688     { Bad_Opcode },
7689     { Bad_Opcode },
7690     { Bad_Opcode },
7691     /* 40 */
7692     { Bad_Opcode },
7693     { Bad_Opcode },
7694     { Bad_Opcode },
7695     { Bad_Opcode },
7696     { Bad_Opcode },
7697     { Bad_Opcode },
7698     { Bad_Opcode },
7699     { Bad_Opcode },
7700     /* 48 */
7701     { Bad_Opcode },
7702     { Bad_Opcode },
7703     { Bad_Opcode },
7704     { Bad_Opcode },
7705     { Bad_Opcode },
7706     { Bad_Opcode },
7707     { Bad_Opcode },
7708     { Bad_Opcode },
7709     /* 50 */
7710     { Bad_Opcode },
7711     { Bad_Opcode },
7712     { Bad_Opcode },
7713     { Bad_Opcode },
7714     { Bad_Opcode },
7715     { Bad_Opcode },
7716     { Bad_Opcode },
7717     { Bad_Opcode },
7718     /* 58 */
7719     { Bad_Opcode },
7720     { Bad_Opcode },
7721     { Bad_Opcode },
7722     { Bad_Opcode },
7723     { Bad_Opcode },
7724     { Bad_Opcode },
7725     { Bad_Opcode },
7726     { Bad_Opcode },
7727     /* 60 */
7728     { Bad_Opcode },
7729     { Bad_Opcode },
7730     { Bad_Opcode },
7731     { Bad_Opcode },
7732     { Bad_Opcode },
7733     { Bad_Opcode },
7734     { Bad_Opcode },
7735     { Bad_Opcode },
7736     /* 68 */
7737     { Bad_Opcode },
7738     { Bad_Opcode },
7739     { Bad_Opcode },
7740     { Bad_Opcode },
7741     { Bad_Opcode },
7742     { Bad_Opcode },
7743     { Bad_Opcode },
7744     { Bad_Opcode },
7745     /* 70 */
7746     { Bad_Opcode },
7747     { Bad_Opcode },
7748     { Bad_Opcode },
7749     { Bad_Opcode },
7750     { Bad_Opcode },
7751     { Bad_Opcode },
7752     { Bad_Opcode },
7753     { Bad_Opcode },
7754     /* 78 */
7755     { Bad_Opcode },
7756     { Bad_Opcode },
7757     { Bad_Opcode },
7758     { Bad_Opcode },
7759     { Bad_Opcode },
7760     { Bad_Opcode },
7761     { Bad_Opcode },
7762     { Bad_Opcode },
7763     /* 80 */
7764     { Bad_Opcode },
7765     { Bad_Opcode },
7766     { Bad_Opcode },
7767     { Bad_Opcode },
7768     { Bad_Opcode },
7769     { "vpmacssww", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7770     { "vpmacsswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7771     { "vpmacssdql", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7772     /* 88 */
7773     { Bad_Opcode },
7774     { Bad_Opcode },
7775     { Bad_Opcode },
7776     { Bad_Opcode },
7777     { Bad_Opcode },
7778     { Bad_Opcode },
7779     { "vpmacssdd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7780     { "vpmacssdqh", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7781     /* 90 */
7782     { Bad_Opcode },
7783     { Bad_Opcode },
7784     { Bad_Opcode },
7785     { Bad_Opcode },
7786     { Bad_Opcode },
7787     { "vpmacsww", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7788     { "vpmacswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7789     { "vpmacsdql", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7790     /* 98 */
7791     { Bad_Opcode },
7792     { Bad_Opcode },
7793     { Bad_Opcode },
7794     { Bad_Opcode },
7795     { Bad_Opcode },
7796     { Bad_Opcode },
7797     { "vpmacsdd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7798     { "vpmacsdqh", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7799     /* a0 */
7800     { Bad_Opcode },
7801     { Bad_Opcode },
7802     { "vpcmov", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7803     { "vpperm", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7804     { Bad_Opcode },
7805     { Bad_Opcode },
7806     { "vpmadcsswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7807     { Bad_Opcode },
7808     /* a8 */
7809     { Bad_Opcode },
7810     { Bad_Opcode },
7811     { Bad_Opcode },
7812     { Bad_Opcode },
7813     { Bad_Opcode },
7814     { Bad_Opcode },
7815     { Bad_Opcode },
7816     { Bad_Opcode },
7817     /* b0 */
7818     { Bad_Opcode },
7819     { Bad_Opcode },
7820     { Bad_Opcode },
7821     { Bad_Opcode },
7822     { Bad_Opcode },
7823     { Bad_Opcode },
7824     { "vpmadcswd", 	{ XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
7825     { Bad_Opcode },
7826     /* b8 */
7827     { Bad_Opcode },
7828     { Bad_Opcode },
7829     { Bad_Opcode },
7830     { Bad_Opcode },
7831     { Bad_Opcode },
7832     { Bad_Opcode },
7833     { Bad_Opcode },
7834     { Bad_Opcode },
7835     /* c0 */
7836     { "vprotb", 	{ XM, Vex_2src_1, Ib }, 0 },
7837     { "vprotw", 	{ XM, Vex_2src_1, Ib }, 0 },
7838     { "vprotd", 	{ XM, Vex_2src_1, Ib }, 0 },
7839     { "vprotq", 	{ XM, Vex_2src_1, Ib }, 0 },
7840     { Bad_Opcode },
7841     { Bad_Opcode },
7842     { Bad_Opcode },
7843     { Bad_Opcode },
7844     /* c8 */
7845     { Bad_Opcode },
7846     { Bad_Opcode },
7847     { Bad_Opcode },
7848     { Bad_Opcode },
7849     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7850     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7851     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7852     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
7853     /* d0 */
7854     { Bad_Opcode },
7855     { Bad_Opcode },
7856     { Bad_Opcode },
7857     { Bad_Opcode },
7858     { Bad_Opcode },
7859     { Bad_Opcode },
7860     { Bad_Opcode },
7861     { Bad_Opcode },
7862     /* d8 */
7863     { Bad_Opcode },
7864     { Bad_Opcode },
7865     { Bad_Opcode },
7866     { Bad_Opcode },
7867     { Bad_Opcode },
7868     { Bad_Opcode },
7869     { Bad_Opcode },
7870     { Bad_Opcode },
7871     /* e0 */
7872     { Bad_Opcode },
7873     { Bad_Opcode },
7874     { Bad_Opcode },
7875     { Bad_Opcode },
7876     { Bad_Opcode },
7877     { Bad_Opcode },
7878     { Bad_Opcode },
7879     { Bad_Opcode },
7880     /* e8 */
7881     { Bad_Opcode },
7882     { Bad_Opcode },
7883     { Bad_Opcode },
7884     { Bad_Opcode },
7885     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7886     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7887     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7888     { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
7889     /* f0 */
7890     { Bad_Opcode },
7891     { Bad_Opcode },
7892     { Bad_Opcode },
7893     { Bad_Opcode },
7894     { Bad_Opcode },
7895     { Bad_Opcode },
7896     { Bad_Opcode },
7897     { Bad_Opcode },
7898     /* f8 */
7899     { Bad_Opcode },
7900     { Bad_Opcode },
7901     { Bad_Opcode },
7902     { Bad_Opcode },
7903     { Bad_Opcode },
7904     { Bad_Opcode },
7905     { Bad_Opcode },
7906     { Bad_Opcode },
7907   },
7908   /* XOP_09 */
7909   {
7910     /* 00 */
7911     { Bad_Opcode },
7912     { REG_TABLE (REG_XOP_TBM_01) },
7913     { REG_TABLE (REG_XOP_TBM_02) },
7914     { Bad_Opcode },
7915     { Bad_Opcode },
7916     { Bad_Opcode },
7917     { Bad_Opcode },
7918     { Bad_Opcode },
7919     /* 08 */
7920     { Bad_Opcode },
7921     { Bad_Opcode },
7922     { Bad_Opcode },
7923     { Bad_Opcode },
7924     { Bad_Opcode },
7925     { Bad_Opcode },
7926     { Bad_Opcode },
7927     { Bad_Opcode },
7928     /* 10 */
7929     { Bad_Opcode },
7930     { Bad_Opcode },
7931     { REG_TABLE (REG_XOP_LWPCB) },
7932     { Bad_Opcode },
7933     { Bad_Opcode },
7934     { Bad_Opcode },
7935     { Bad_Opcode },
7936     { Bad_Opcode },
7937     /* 18 */
7938     { Bad_Opcode },
7939     { Bad_Opcode },
7940     { Bad_Opcode },
7941     { Bad_Opcode },
7942     { Bad_Opcode },
7943     { Bad_Opcode },
7944     { Bad_Opcode },
7945     { Bad_Opcode },
7946     /* 20 */
7947     { Bad_Opcode },
7948     { Bad_Opcode },
7949     { Bad_Opcode },
7950     { Bad_Opcode },
7951     { Bad_Opcode },
7952     { Bad_Opcode },
7953     { Bad_Opcode },
7954     { Bad_Opcode },
7955     /* 28 */
7956     { Bad_Opcode },
7957     { Bad_Opcode },
7958     { Bad_Opcode },
7959     { Bad_Opcode },
7960     { Bad_Opcode },
7961     { Bad_Opcode },
7962     { Bad_Opcode },
7963     { Bad_Opcode },
7964     /* 30 */
7965     { Bad_Opcode },
7966     { Bad_Opcode },
7967     { Bad_Opcode },
7968     { Bad_Opcode },
7969     { Bad_Opcode },
7970     { Bad_Opcode },
7971     { Bad_Opcode },
7972     { Bad_Opcode },
7973     /* 38 */
7974     { Bad_Opcode },
7975     { Bad_Opcode },
7976     { Bad_Opcode },
7977     { Bad_Opcode },
7978     { Bad_Opcode },
7979     { Bad_Opcode },
7980     { Bad_Opcode },
7981     { Bad_Opcode },
7982     /* 40 */
7983     { Bad_Opcode },
7984     { Bad_Opcode },
7985     { Bad_Opcode },
7986     { Bad_Opcode },
7987     { Bad_Opcode },
7988     { Bad_Opcode },
7989     { Bad_Opcode },
7990     { Bad_Opcode },
7991     /* 48 */
7992     { Bad_Opcode },
7993     { Bad_Opcode },
7994     { Bad_Opcode },
7995     { Bad_Opcode },
7996     { Bad_Opcode },
7997     { Bad_Opcode },
7998     { Bad_Opcode },
7999     { Bad_Opcode },
8000     /* 50 */
8001     { Bad_Opcode },
8002     { Bad_Opcode },
8003     { Bad_Opcode },
8004     { Bad_Opcode },
8005     { Bad_Opcode },
8006     { Bad_Opcode },
8007     { Bad_Opcode },
8008     { Bad_Opcode },
8009     /* 58 */
8010     { Bad_Opcode },
8011     { Bad_Opcode },
8012     { Bad_Opcode },
8013     { Bad_Opcode },
8014     { Bad_Opcode },
8015     { Bad_Opcode },
8016     { Bad_Opcode },
8017     { Bad_Opcode },
8018     /* 60 */
8019     { Bad_Opcode },
8020     { Bad_Opcode },
8021     { Bad_Opcode },
8022     { Bad_Opcode },
8023     { Bad_Opcode },
8024     { Bad_Opcode },
8025     { Bad_Opcode },
8026     { Bad_Opcode },
8027     /* 68 */
8028     { Bad_Opcode },
8029     { Bad_Opcode },
8030     { Bad_Opcode },
8031     { Bad_Opcode },
8032     { Bad_Opcode },
8033     { Bad_Opcode },
8034     { Bad_Opcode },
8035     { Bad_Opcode },
8036     /* 70 */
8037     { Bad_Opcode },
8038     { Bad_Opcode },
8039     { Bad_Opcode },
8040     { Bad_Opcode },
8041     { Bad_Opcode },
8042     { Bad_Opcode },
8043     { Bad_Opcode },
8044     { Bad_Opcode },
8045     /* 78 */
8046     { Bad_Opcode },
8047     { Bad_Opcode },
8048     { Bad_Opcode },
8049     { Bad_Opcode },
8050     { Bad_Opcode },
8051     { Bad_Opcode },
8052     { Bad_Opcode },
8053     { Bad_Opcode },
8054     /* 80 */
8055     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8056     { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
8057     { "vfrczss", 	{ XM, EXd }, 0 },
8058     { "vfrczsd", 	{ XM, EXq }, 0 },
8059     { Bad_Opcode },
8060     { Bad_Opcode },
8061     { Bad_Opcode },
8062     { Bad_Opcode },
8063     /* 88 */
8064     { Bad_Opcode },
8065     { Bad_Opcode },
8066     { Bad_Opcode },
8067     { Bad_Opcode },
8068     { Bad_Opcode },
8069     { Bad_Opcode },
8070     { Bad_Opcode },
8071     { Bad_Opcode },
8072     /* 90 */
8073     { "vprotb",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8074     { "vprotw",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8075     { "vprotd",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8076     { "vprotq",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8077     { "vpshlb",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8078     { "vpshlw",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8079     { "vpshld",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8080     { "vpshlq",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8081     /* 98 */
8082     { "vpshab",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8083     { "vpshaw",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8084     { "vpshad",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8085     { "vpshaq",		{ XM, Vex_2src_1, Vex_2src_2 }, 0 },
8086     { Bad_Opcode },
8087     { Bad_Opcode },
8088     { Bad_Opcode },
8089     { Bad_Opcode },
8090     /* a0 */
8091     { Bad_Opcode },
8092     { Bad_Opcode },
8093     { Bad_Opcode },
8094     { Bad_Opcode },
8095     { Bad_Opcode },
8096     { Bad_Opcode },
8097     { Bad_Opcode },
8098     { Bad_Opcode },
8099     /* a8 */
8100     { Bad_Opcode },
8101     { Bad_Opcode },
8102     { Bad_Opcode },
8103     { Bad_Opcode },
8104     { Bad_Opcode },
8105     { Bad_Opcode },
8106     { Bad_Opcode },
8107     { Bad_Opcode },
8108     /* b0 */
8109     { Bad_Opcode },
8110     { Bad_Opcode },
8111     { Bad_Opcode },
8112     { Bad_Opcode },
8113     { Bad_Opcode },
8114     { Bad_Opcode },
8115     { Bad_Opcode },
8116     { Bad_Opcode },
8117     /* b8 */
8118     { Bad_Opcode },
8119     { Bad_Opcode },
8120     { Bad_Opcode },
8121     { Bad_Opcode },
8122     { Bad_Opcode },
8123     { Bad_Opcode },
8124     { Bad_Opcode },
8125     { Bad_Opcode },
8126     /* c0 */
8127     { Bad_Opcode },
8128     { "vphaddbw",	{ XM, EXxmm }, 0 },
8129     { "vphaddbd",	{ XM, EXxmm }, 0 },
8130     { "vphaddbq",	{ XM, EXxmm }, 0 },
8131     { Bad_Opcode },
8132     { Bad_Opcode },
8133     { "vphaddwd",	{ XM, EXxmm }, 0 },
8134     { "vphaddwq",	{ XM, EXxmm }, 0 },
8135     /* c8 */
8136     { Bad_Opcode },
8137     { Bad_Opcode },
8138     { Bad_Opcode },
8139     { "vphadddq",	{ XM, EXxmm }, 0 },
8140     { Bad_Opcode },
8141     { Bad_Opcode },
8142     { Bad_Opcode },
8143     { Bad_Opcode },
8144     /* d0 */
8145     { Bad_Opcode },
8146     { "vphaddubw",	{ XM, EXxmm }, 0 },
8147     { "vphaddubd",	{ XM, EXxmm }, 0 },
8148     { "vphaddubq",	{ XM, EXxmm }, 0 },
8149     { Bad_Opcode },
8150     { Bad_Opcode },
8151     { "vphadduwd",	{ XM, EXxmm }, 0 },
8152     { "vphadduwq",	{ XM, EXxmm }, 0 },
8153     /* d8 */
8154     { Bad_Opcode },
8155     { Bad_Opcode },
8156     { Bad_Opcode },
8157     { "vphaddudq",	{ XM, EXxmm }, 0 },
8158     { Bad_Opcode },
8159     { Bad_Opcode },
8160     { Bad_Opcode },
8161     { Bad_Opcode },
8162     /* e0 */
8163     { Bad_Opcode },
8164     { "vphsubbw",	{ XM, EXxmm }, 0 },
8165     { "vphsubwd",	{ XM, EXxmm }, 0 },
8166     { "vphsubdq",	{ XM, EXxmm }, 0 },
8167     { Bad_Opcode },
8168     { Bad_Opcode },
8169     { Bad_Opcode },
8170     { Bad_Opcode },
8171     /* e8 */
8172     { Bad_Opcode },
8173     { Bad_Opcode },
8174     { Bad_Opcode },
8175     { Bad_Opcode },
8176     { Bad_Opcode },
8177     { Bad_Opcode },
8178     { Bad_Opcode },
8179     { Bad_Opcode },
8180     /* f0 */
8181     { Bad_Opcode },
8182     { Bad_Opcode },
8183     { Bad_Opcode },
8184     { Bad_Opcode },
8185     { Bad_Opcode },
8186     { Bad_Opcode },
8187     { Bad_Opcode },
8188     { Bad_Opcode },
8189     /* f8 */
8190     { Bad_Opcode },
8191     { Bad_Opcode },
8192     { Bad_Opcode },
8193     { Bad_Opcode },
8194     { Bad_Opcode },
8195     { Bad_Opcode },
8196     { Bad_Opcode },
8197     { Bad_Opcode },
8198   },
8199   /* XOP_0A */
8200   {
8201     /* 00 */
8202     { Bad_Opcode },
8203     { Bad_Opcode },
8204     { Bad_Opcode },
8205     { Bad_Opcode },
8206     { Bad_Opcode },
8207     { Bad_Opcode },
8208     { Bad_Opcode },
8209     { Bad_Opcode },
8210     /* 08 */
8211     { Bad_Opcode },
8212     { Bad_Opcode },
8213     { Bad_Opcode },
8214     { Bad_Opcode },
8215     { Bad_Opcode },
8216     { Bad_Opcode },
8217     { Bad_Opcode },
8218     { Bad_Opcode },
8219     /* 10 */
8220     { "bextr",	{ Gv, Ev, Iq }, 0 },
8221     { Bad_Opcode },
8222     { REG_TABLE (REG_XOP_LWP) },
8223     { Bad_Opcode },
8224     { Bad_Opcode },
8225     { Bad_Opcode },
8226     { Bad_Opcode },
8227     { Bad_Opcode },
8228     /* 18 */
8229     { Bad_Opcode },
8230     { Bad_Opcode },
8231     { Bad_Opcode },
8232     { Bad_Opcode },
8233     { Bad_Opcode },
8234     { Bad_Opcode },
8235     { Bad_Opcode },
8236     { Bad_Opcode },
8237     /* 20 */
8238     { Bad_Opcode },
8239     { Bad_Opcode },
8240     { Bad_Opcode },
8241     { Bad_Opcode },
8242     { Bad_Opcode },
8243     { Bad_Opcode },
8244     { Bad_Opcode },
8245     { Bad_Opcode },
8246     /* 28 */
8247     { Bad_Opcode },
8248     { Bad_Opcode },
8249     { Bad_Opcode },
8250     { Bad_Opcode },
8251     { Bad_Opcode },
8252     { Bad_Opcode },
8253     { Bad_Opcode },
8254     { Bad_Opcode },
8255     /* 30 */
8256     { Bad_Opcode },
8257     { Bad_Opcode },
8258     { Bad_Opcode },
8259     { Bad_Opcode },
8260     { Bad_Opcode },
8261     { Bad_Opcode },
8262     { Bad_Opcode },
8263     { Bad_Opcode },
8264     /* 38 */
8265     { Bad_Opcode },
8266     { Bad_Opcode },
8267     { Bad_Opcode },
8268     { Bad_Opcode },
8269     { Bad_Opcode },
8270     { Bad_Opcode },
8271     { Bad_Opcode },
8272     { Bad_Opcode },
8273     /* 40 */
8274     { Bad_Opcode },
8275     { Bad_Opcode },
8276     { Bad_Opcode },
8277     { Bad_Opcode },
8278     { Bad_Opcode },
8279     { Bad_Opcode },
8280     { Bad_Opcode },
8281     { Bad_Opcode },
8282     /* 48 */
8283     { Bad_Opcode },
8284     { Bad_Opcode },
8285     { Bad_Opcode },
8286     { Bad_Opcode },
8287     { Bad_Opcode },
8288     { Bad_Opcode },
8289     { Bad_Opcode },
8290     { Bad_Opcode },
8291     /* 50 */
8292     { Bad_Opcode },
8293     { Bad_Opcode },
8294     { Bad_Opcode },
8295     { Bad_Opcode },
8296     { Bad_Opcode },
8297     { Bad_Opcode },
8298     { Bad_Opcode },
8299     { Bad_Opcode },
8300     /* 58 */
8301     { Bad_Opcode },
8302     { Bad_Opcode },
8303     { Bad_Opcode },
8304     { Bad_Opcode },
8305     { Bad_Opcode },
8306     { Bad_Opcode },
8307     { Bad_Opcode },
8308     { Bad_Opcode },
8309     /* 60 */
8310     { Bad_Opcode },
8311     { Bad_Opcode },
8312     { Bad_Opcode },
8313     { Bad_Opcode },
8314     { Bad_Opcode },
8315     { Bad_Opcode },
8316     { Bad_Opcode },
8317     { Bad_Opcode },
8318     /* 68 */
8319     { Bad_Opcode },
8320     { Bad_Opcode },
8321     { Bad_Opcode },
8322     { Bad_Opcode },
8323     { Bad_Opcode },
8324     { Bad_Opcode },
8325     { Bad_Opcode },
8326     { Bad_Opcode },
8327     /* 70 */
8328     { Bad_Opcode },
8329     { Bad_Opcode },
8330     { Bad_Opcode },
8331     { Bad_Opcode },
8332     { Bad_Opcode },
8333     { Bad_Opcode },
8334     { Bad_Opcode },
8335     { Bad_Opcode },
8336     /* 78 */
8337     { Bad_Opcode },
8338     { Bad_Opcode },
8339     { Bad_Opcode },
8340     { Bad_Opcode },
8341     { Bad_Opcode },
8342     { Bad_Opcode },
8343     { Bad_Opcode },
8344     { Bad_Opcode },
8345     /* 80 */
8346     { Bad_Opcode },
8347     { Bad_Opcode },
8348     { Bad_Opcode },
8349     { Bad_Opcode },
8350     { Bad_Opcode },
8351     { Bad_Opcode },
8352     { Bad_Opcode },
8353     { Bad_Opcode },
8354     /* 88 */
8355     { Bad_Opcode },
8356     { Bad_Opcode },
8357     { Bad_Opcode },
8358     { Bad_Opcode },
8359     { Bad_Opcode },
8360     { Bad_Opcode },
8361     { Bad_Opcode },
8362     { Bad_Opcode },
8363     /* 90 */
8364     { Bad_Opcode },
8365     { Bad_Opcode },
8366     { Bad_Opcode },
8367     { Bad_Opcode },
8368     { Bad_Opcode },
8369     { Bad_Opcode },
8370     { Bad_Opcode },
8371     { Bad_Opcode },
8372     /* 98 */
8373     { Bad_Opcode },
8374     { Bad_Opcode },
8375     { Bad_Opcode },
8376     { Bad_Opcode },
8377     { Bad_Opcode },
8378     { Bad_Opcode },
8379     { Bad_Opcode },
8380     { Bad_Opcode },
8381     /* a0 */
8382     { Bad_Opcode },
8383     { Bad_Opcode },
8384     { Bad_Opcode },
8385     { Bad_Opcode },
8386     { Bad_Opcode },
8387     { Bad_Opcode },
8388     { Bad_Opcode },
8389     { Bad_Opcode },
8390     /* a8 */
8391     { Bad_Opcode },
8392     { Bad_Opcode },
8393     { Bad_Opcode },
8394     { Bad_Opcode },
8395     { Bad_Opcode },
8396     { Bad_Opcode },
8397     { Bad_Opcode },
8398     { Bad_Opcode },
8399     /* b0 */
8400     { Bad_Opcode },
8401     { Bad_Opcode },
8402     { Bad_Opcode },
8403     { Bad_Opcode },
8404     { Bad_Opcode },
8405     { Bad_Opcode },
8406     { Bad_Opcode },
8407     { Bad_Opcode },
8408     /* b8 */
8409     { Bad_Opcode },
8410     { Bad_Opcode },
8411     { Bad_Opcode },
8412     { Bad_Opcode },
8413     { Bad_Opcode },
8414     { Bad_Opcode },
8415     { Bad_Opcode },
8416     { Bad_Opcode },
8417     /* c0 */
8418     { Bad_Opcode },
8419     { Bad_Opcode },
8420     { Bad_Opcode },
8421     { Bad_Opcode },
8422     { Bad_Opcode },
8423     { Bad_Opcode },
8424     { Bad_Opcode },
8425     { Bad_Opcode },
8426     /* c8 */
8427     { Bad_Opcode },
8428     { Bad_Opcode },
8429     { Bad_Opcode },
8430     { Bad_Opcode },
8431     { Bad_Opcode },
8432     { Bad_Opcode },
8433     { Bad_Opcode },
8434     { Bad_Opcode },
8435     /* d0 */
8436     { Bad_Opcode },
8437     { Bad_Opcode },
8438     { Bad_Opcode },
8439     { Bad_Opcode },
8440     { Bad_Opcode },
8441     { Bad_Opcode },
8442     { Bad_Opcode },
8443     { Bad_Opcode },
8444     /* d8 */
8445     { Bad_Opcode },
8446     { Bad_Opcode },
8447     { Bad_Opcode },
8448     { Bad_Opcode },
8449     { Bad_Opcode },
8450     { Bad_Opcode },
8451     { Bad_Opcode },
8452     { Bad_Opcode },
8453     /* e0 */
8454     { Bad_Opcode },
8455     { Bad_Opcode },
8456     { Bad_Opcode },
8457     { Bad_Opcode },
8458     { Bad_Opcode },
8459     { Bad_Opcode },
8460     { Bad_Opcode },
8461     { Bad_Opcode },
8462     /* e8 */
8463     { Bad_Opcode },
8464     { Bad_Opcode },
8465     { Bad_Opcode },
8466     { Bad_Opcode },
8467     { Bad_Opcode },
8468     { Bad_Opcode },
8469     { Bad_Opcode },
8470     { Bad_Opcode },
8471     /* f0 */
8472     { Bad_Opcode },
8473     { Bad_Opcode },
8474     { Bad_Opcode },
8475     { Bad_Opcode },
8476     { Bad_Opcode },
8477     { Bad_Opcode },
8478     { Bad_Opcode },
8479     { Bad_Opcode },
8480     /* f8 */
8481     { Bad_Opcode },
8482     { Bad_Opcode },
8483     { Bad_Opcode },
8484     { Bad_Opcode },
8485     { Bad_Opcode },
8486     { Bad_Opcode },
8487     { Bad_Opcode },
8488     { Bad_Opcode },
8489   },
8490 };
8491 
8492 static const struct dis386 vex_table[][256] = {
8493   /* VEX_0F */
8494   {
8495     /* 00 */
8496     { Bad_Opcode },
8497     { Bad_Opcode },
8498     { Bad_Opcode },
8499     { Bad_Opcode },
8500     { Bad_Opcode },
8501     { Bad_Opcode },
8502     { Bad_Opcode },
8503     { Bad_Opcode },
8504     /* 08 */
8505     { Bad_Opcode },
8506     { Bad_Opcode },
8507     { Bad_Opcode },
8508     { Bad_Opcode },
8509     { Bad_Opcode },
8510     { Bad_Opcode },
8511     { Bad_Opcode },
8512     { Bad_Opcode },
8513     /* 10 */
8514     { PREFIX_TABLE (PREFIX_VEX_0F10) },
8515     { PREFIX_TABLE (PREFIX_VEX_0F11) },
8516     { PREFIX_TABLE (PREFIX_VEX_0F12) },
8517     { MOD_TABLE (MOD_VEX_0F13) },
8518     { VEX_W_TABLE (VEX_W_0F14) },
8519     { VEX_W_TABLE (VEX_W_0F15) },
8520     { PREFIX_TABLE (PREFIX_VEX_0F16) },
8521     { MOD_TABLE (MOD_VEX_0F17) },
8522     /* 18 */
8523     { Bad_Opcode },
8524     { Bad_Opcode },
8525     { Bad_Opcode },
8526     { Bad_Opcode },
8527     { Bad_Opcode },
8528     { Bad_Opcode },
8529     { Bad_Opcode },
8530     { Bad_Opcode },
8531     /* 20 */
8532     { Bad_Opcode },
8533     { Bad_Opcode },
8534     { Bad_Opcode },
8535     { Bad_Opcode },
8536     { Bad_Opcode },
8537     { Bad_Opcode },
8538     { Bad_Opcode },
8539     { Bad_Opcode },
8540     /* 28 */
8541     { VEX_W_TABLE (VEX_W_0F28) },
8542     { VEX_W_TABLE (VEX_W_0F29) },
8543     { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8544     { MOD_TABLE (MOD_VEX_0F2B) },
8545     { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8546     { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8547     { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8548     { PREFIX_TABLE (PREFIX_VEX_0F2F) },
8549     /* 30 */
8550     { Bad_Opcode },
8551     { Bad_Opcode },
8552     { Bad_Opcode },
8553     { Bad_Opcode },
8554     { Bad_Opcode },
8555     { Bad_Opcode },
8556     { Bad_Opcode },
8557     { Bad_Opcode },
8558     /* 38 */
8559     { Bad_Opcode },
8560     { Bad_Opcode },
8561     { Bad_Opcode },
8562     { Bad_Opcode },
8563     { Bad_Opcode },
8564     { Bad_Opcode },
8565     { Bad_Opcode },
8566     { Bad_Opcode },
8567     /* 40 */
8568     { Bad_Opcode },
8569     { PREFIX_TABLE (PREFIX_VEX_0F41) },
8570     { PREFIX_TABLE (PREFIX_VEX_0F42) },
8571     { Bad_Opcode },
8572     { PREFIX_TABLE (PREFIX_VEX_0F44) },
8573     { PREFIX_TABLE (PREFIX_VEX_0F45) },
8574     { PREFIX_TABLE (PREFIX_VEX_0F46) },
8575     { PREFIX_TABLE (PREFIX_VEX_0F47) },
8576     /* 48 */
8577     { Bad_Opcode },
8578     { Bad_Opcode },
8579     { PREFIX_TABLE (PREFIX_VEX_0F4A) },
8580     { PREFIX_TABLE (PREFIX_VEX_0F4B) },
8581     { Bad_Opcode },
8582     { Bad_Opcode },
8583     { Bad_Opcode },
8584     { Bad_Opcode },
8585     /* 50 */
8586     { MOD_TABLE (MOD_VEX_0F50) },
8587     { PREFIX_TABLE (PREFIX_VEX_0F51) },
8588     { PREFIX_TABLE (PREFIX_VEX_0F52) },
8589     { PREFIX_TABLE (PREFIX_VEX_0F53) },
8590     { "vandpX",		{ XM, Vex, EXx }, 0 },
8591     { "vandnpX",	{ XM, Vex, EXx }, 0 },
8592     { "vorpX",		{ XM, Vex, EXx }, 0 },
8593     { "vxorpX",		{ XM, Vex, EXx }, 0 },
8594     /* 58 */
8595     { PREFIX_TABLE (PREFIX_VEX_0F58) },
8596     { PREFIX_TABLE (PREFIX_VEX_0F59) },
8597     { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8598     { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8599     { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8600     { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8601     { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8602     { PREFIX_TABLE (PREFIX_VEX_0F5F) },
8603     /* 60 */
8604     { PREFIX_TABLE (PREFIX_VEX_0F60) },
8605     { PREFIX_TABLE (PREFIX_VEX_0F61) },
8606     { PREFIX_TABLE (PREFIX_VEX_0F62) },
8607     { PREFIX_TABLE (PREFIX_VEX_0F63) },
8608     { PREFIX_TABLE (PREFIX_VEX_0F64) },
8609     { PREFIX_TABLE (PREFIX_VEX_0F65) },
8610     { PREFIX_TABLE (PREFIX_VEX_0F66) },
8611     { PREFIX_TABLE (PREFIX_VEX_0F67) },
8612     /* 68 */
8613     { PREFIX_TABLE (PREFIX_VEX_0F68) },
8614     { PREFIX_TABLE (PREFIX_VEX_0F69) },
8615     { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8616     { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8617     { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8618     { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8619     { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8620     { PREFIX_TABLE (PREFIX_VEX_0F6F) },
8621     /* 70 */
8622     { PREFIX_TABLE (PREFIX_VEX_0F70) },
8623     { REG_TABLE (REG_VEX_0F71) },
8624     { REG_TABLE (REG_VEX_0F72) },
8625     { REG_TABLE (REG_VEX_0F73) },
8626     { PREFIX_TABLE (PREFIX_VEX_0F74) },
8627     { PREFIX_TABLE (PREFIX_VEX_0F75) },
8628     { PREFIX_TABLE (PREFIX_VEX_0F76) },
8629     { PREFIX_TABLE (PREFIX_VEX_0F77) },
8630     /* 78 */
8631     { Bad_Opcode },
8632     { Bad_Opcode },
8633     { Bad_Opcode },
8634     { Bad_Opcode },
8635     { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8636     { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8637     { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8638     { PREFIX_TABLE (PREFIX_VEX_0F7F) },
8639     /* 80 */
8640     { Bad_Opcode },
8641     { Bad_Opcode },
8642     { Bad_Opcode },
8643     { Bad_Opcode },
8644     { Bad_Opcode },
8645     { Bad_Opcode },
8646     { Bad_Opcode },
8647     { Bad_Opcode },
8648     /* 88 */
8649     { Bad_Opcode },
8650     { Bad_Opcode },
8651     { Bad_Opcode },
8652     { Bad_Opcode },
8653     { Bad_Opcode },
8654     { Bad_Opcode },
8655     { Bad_Opcode },
8656     { Bad_Opcode },
8657     /* 90 */
8658     { PREFIX_TABLE (PREFIX_VEX_0F90) },
8659     { PREFIX_TABLE (PREFIX_VEX_0F91) },
8660     { PREFIX_TABLE (PREFIX_VEX_0F92) },
8661     { PREFIX_TABLE (PREFIX_VEX_0F93) },
8662     { Bad_Opcode },
8663     { Bad_Opcode },
8664     { Bad_Opcode },
8665     { Bad_Opcode },
8666     /* 98 */
8667     { PREFIX_TABLE (PREFIX_VEX_0F98) },
8668     { PREFIX_TABLE (PREFIX_VEX_0F99) },
8669     { Bad_Opcode },
8670     { Bad_Opcode },
8671     { Bad_Opcode },
8672     { Bad_Opcode },
8673     { Bad_Opcode },
8674     { Bad_Opcode },
8675     /* a0 */
8676     { Bad_Opcode },
8677     { Bad_Opcode },
8678     { Bad_Opcode },
8679     { Bad_Opcode },
8680     { Bad_Opcode },
8681     { Bad_Opcode },
8682     { Bad_Opcode },
8683     { Bad_Opcode },
8684     /* a8 */
8685     { Bad_Opcode },
8686     { Bad_Opcode },
8687     { Bad_Opcode },
8688     { Bad_Opcode },
8689     { Bad_Opcode },
8690     { Bad_Opcode },
8691     { REG_TABLE (REG_VEX_0FAE) },
8692     { Bad_Opcode },
8693     /* b0 */
8694     { Bad_Opcode },
8695     { Bad_Opcode },
8696     { Bad_Opcode },
8697     { Bad_Opcode },
8698     { Bad_Opcode },
8699     { Bad_Opcode },
8700     { Bad_Opcode },
8701     { Bad_Opcode },
8702     /* b8 */
8703     { Bad_Opcode },
8704     { Bad_Opcode },
8705     { Bad_Opcode },
8706     { Bad_Opcode },
8707     { Bad_Opcode },
8708     { Bad_Opcode },
8709     { Bad_Opcode },
8710     { Bad_Opcode },
8711     /* c0 */
8712     { Bad_Opcode },
8713     { Bad_Opcode },
8714     { PREFIX_TABLE (PREFIX_VEX_0FC2) },
8715     { Bad_Opcode },
8716     { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8717     { PREFIX_TABLE (PREFIX_VEX_0FC5) },
8718     { "vshufpX",	{ XM, Vex, EXx, Ib }, 0 },
8719     { Bad_Opcode },
8720     /* c8 */
8721     { Bad_Opcode },
8722     { Bad_Opcode },
8723     { Bad_Opcode },
8724     { Bad_Opcode },
8725     { Bad_Opcode },
8726     { Bad_Opcode },
8727     { Bad_Opcode },
8728     { Bad_Opcode },
8729     /* d0 */
8730     { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8731     { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8732     { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8733     { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8734     { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8735     { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8736     { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8737     { PREFIX_TABLE (PREFIX_VEX_0FD7) },
8738     /* d8 */
8739     { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8740     { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8741     { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8742     { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8743     { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8744     { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8745     { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8746     { PREFIX_TABLE (PREFIX_VEX_0FDF) },
8747     /* e0 */
8748     { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8749     { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8750     { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8751     { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8752     { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8753     { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8754     { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8755     { PREFIX_TABLE (PREFIX_VEX_0FE7) },
8756     /* e8 */
8757     { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8758     { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8759     { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8760     { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8761     { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8762     { PREFIX_TABLE (PREFIX_VEX_0FED) },
8763     { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8764     { PREFIX_TABLE (PREFIX_VEX_0FEF) },
8765     /* f0 */
8766     { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8767     { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8768     { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8769     { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8770     { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8771     { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8772     { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8773     { PREFIX_TABLE (PREFIX_VEX_0FF7) },
8774     /* f8 */
8775     { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8776     { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8777     { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8778     { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8779     { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8780     { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8781     { PREFIX_TABLE (PREFIX_VEX_0FFE) },
8782     { Bad_Opcode },
8783   },
8784   /* VEX_0F38 */
8785   {
8786     /* 00 */
8787     { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8788     { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8789     { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8790     { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8791     { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8792     { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8793     { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8794     { PREFIX_TABLE (PREFIX_VEX_0F3807) },
8795     /* 08 */
8796     { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8797     { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8798     { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8799     { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8800     { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8801     { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8802     { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8803     { PREFIX_TABLE (PREFIX_VEX_0F380F) },
8804     /* 10 */
8805     { Bad_Opcode },
8806     { Bad_Opcode },
8807     { Bad_Opcode },
8808     { PREFIX_TABLE (PREFIX_VEX_0F3813) },
8809     { Bad_Opcode },
8810     { Bad_Opcode },
8811     { PREFIX_TABLE (PREFIX_VEX_0F3816) },
8812     { PREFIX_TABLE (PREFIX_VEX_0F3817) },
8813     /* 18 */
8814     { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8815     { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8816     { PREFIX_TABLE (PREFIX_VEX_0F381A) },
8817     { Bad_Opcode },
8818     { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8819     { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8820     { PREFIX_TABLE (PREFIX_VEX_0F381E) },
8821     { Bad_Opcode },
8822     /* 20 */
8823     { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8824     { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8825     { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8826     { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8827     { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8828     { PREFIX_TABLE (PREFIX_VEX_0F3825) },
8829     { Bad_Opcode },
8830     { Bad_Opcode },
8831     /* 28 */
8832     { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8833     { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8834     { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8835     { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8836     { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8837     { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8838     { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8839     { PREFIX_TABLE (PREFIX_VEX_0F382F) },
8840     /* 30 */
8841     { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8842     { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8843     { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8844     { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8845     { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8846     { PREFIX_TABLE (PREFIX_VEX_0F3835) },
8847     { PREFIX_TABLE (PREFIX_VEX_0F3836) },
8848     { PREFIX_TABLE (PREFIX_VEX_0F3837) },
8849     /* 38 */
8850     { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8851     { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8852     { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8853     { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8854     { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8855     { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8856     { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8857     { PREFIX_TABLE (PREFIX_VEX_0F383F) },
8858     /* 40 */
8859     { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8860     { PREFIX_TABLE (PREFIX_VEX_0F3841) },
8861     { Bad_Opcode },
8862     { Bad_Opcode },
8863     { Bad_Opcode },
8864     { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8865     { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8866     { PREFIX_TABLE (PREFIX_VEX_0F3847) },
8867     /* 48 */
8868     { Bad_Opcode },
8869     { Bad_Opcode },
8870     { Bad_Opcode },
8871     { Bad_Opcode },
8872     { Bad_Opcode },
8873     { Bad_Opcode },
8874     { Bad_Opcode },
8875     { Bad_Opcode },
8876     /* 50 */
8877     { Bad_Opcode },
8878     { Bad_Opcode },
8879     { Bad_Opcode },
8880     { Bad_Opcode },
8881     { Bad_Opcode },
8882     { Bad_Opcode },
8883     { Bad_Opcode },
8884     { Bad_Opcode },
8885     /* 58 */
8886     { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8887     { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8888     { PREFIX_TABLE (PREFIX_VEX_0F385A) },
8889     { Bad_Opcode },
8890     { Bad_Opcode },
8891     { Bad_Opcode },
8892     { Bad_Opcode },
8893     { Bad_Opcode },
8894     /* 60 */
8895     { Bad_Opcode },
8896     { Bad_Opcode },
8897     { Bad_Opcode },
8898     { Bad_Opcode },
8899     { Bad_Opcode },
8900     { Bad_Opcode },
8901     { Bad_Opcode },
8902     { Bad_Opcode },
8903     /* 68 */
8904     { Bad_Opcode },
8905     { Bad_Opcode },
8906     { Bad_Opcode },
8907     { Bad_Opcode },
8908     { Bad_Opcode },
8909     { Bad_Opcode },
8910     { Bad_Opcode },
8911     { Bad_Opcode },
8912     /* 70 */
8913     { Bad_Opcode },
8914     { Bad_Opcode },
8915     { Bad_Opcode },
8916     { Bad_Opcode },
8917     { Bad_Opcode },
8918     { Bad_Opcode },
8919     { Bad_Opcode },
8920     { Bad_Opcode },
8921     /* 78 */
8922     { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8923     { PREFIX_TABLE (PREFIX_VEX_0F3879) },
8924     { Bad_Opcode },
8925     { Bad_Opcode },
8926     { Bad_Opcode },
8927     { Bad_Opcode },
8928     { Bad_Opcode },
8929     { Bad_Opcode },
8930     /* 80 */
8931     { Bad_Opcode },
8932     { Bad_Opcode },
8933     { Bad_Opcode },
8934     { Bad_Opcode },
8935     { Bad_Opcode },
8936     { Bad_Opcode },
8937     { Bad_Opcode },
8938     { Bad_Opcode },
8939     /* 88 */
8940     { Bad_Opcode },
8941     { Bad_Opcode },
8942     { Bad_Opcode },
8943     { Bad_Opcode },
8944     { PREFIX_TABLE (PREFIX_VEX_0F388C) },
8945     { Bad_Opcode },
8946     { PREFIX_TABLE (PREFIX_VEX_0F388E) },
8947     { Bad_Opcode },
8948     /* 90 */
8949     { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8950     { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8951     { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8952     { PREFIX_TABLE (PREFIX_VEX_0F3893) },
8953     { Bad_Opcode },
8954     { Bad_Opcode },
8955     { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8956     { PREFIX_TABLE (PREFIX_VEX_0F3897) },
8957     /* 98 */
8958     { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8959     { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8960     { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8961     { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8962     { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8963     { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8964     { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8965     { PREFIX_TABLE (PREFIX_VEX_0F389F) },
8966     /* a0 */
8967     { Bad_Opcode },
8968     { Bad_Opcode },
8969     { Bad_Opcode },
8970     { Bad_Opcode },
8971     { Bad_Opcode },
8972     { Bad_Opcode },
8973     { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8974     { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
8975     /* a8 */
8976     { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8977     { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8978     { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8979     { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8980     { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8981     { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8982     { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8983     { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
8984     /* b0 */
8985     { Bad_Opcode },
8986     { Bad_Opcode },
8987     { Bad_Opcode },
8988     { Bad_Opcode },
8989     { Bad_Opcode },
8990     { Bad_Opcode },
8991     { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8992     { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
8993     /* b8 */
8994     { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8995     { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8996     { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8997     { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8998     { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8999     { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9000     { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9001     { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
9002     /* c0 */
9003     { Bad_Opcode },
9004     { Bad_Opcode },
9005     { Bad_Opcode },
9006     { Bad_Opcode },
9007     { Bad_Opcode },
9008     { Bad_Opcode },
9009     { Bad_Opcode },
9010     { Bad_Opcode },
9011     /* c8 */
9012     { Bad_Opcode },
9013     { Bad_Opcode },
9014     { Bad_Opcode },
9015     { Bad_Opcode },
9016     { Bad_Opcode },
9017     { Bad_Opcode },
9018     { Bad_Opcode },
9019     { Bad_Opcode },
9020     /* d0 */
9021     { Bad_Opcode },
9022     { Bad_Opcode },
9023     { Bad_Opcode },
9024     { Bad_Opcode },
9025     { Bad_Opcode },
9026     { Bad_Opcode },
9027     { Bad_Opcode },
9028     { Bad_Opcode },
9029     /* d8 */
9030     { Bad_Opcode },
9031     { Bad_Opcode },
9032     { Bad_Opcode },
9033     { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9034     { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9035     { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9036     { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9037     { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
9038     /* e0 */
9039     { Bad_Opcode },
9040     { Bad_Opcode },
9041     { Bad_Opcode },
9042     { Bad_Opcode },
9043     { Bad_Opcode },
9044     { Bad_Opcode },
9045     { Bad_Opcode },
9046     { Bad_Opcode },
9047     /* e8 */
9048     { Bad_Opcode },
9049     { Bad_Opcode },
9050     { Bad_Opcode },
9051     { Bad_Opcode },
9052     { Bad_Opcode },
9053     { Bad_Opcode },
9054     { Bad_Opcode },
9055     { Bad_Opcode },
9056     /* f0 */
9057     { Bad_Opcode },
9058     { Bad_Opcode },
9059     { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9060     { REG_TABLE (REG_VEX_0F38F3) },
9061     { Bad_Opcode },
9062     { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9063     { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
9064     { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
9065     /* f8 */
9066     { Bad_Opcode },
9067     { Bad_Opcode },
9068     { Bad_Opcode },
9069     { Bad_Opcode },
9070     { Bad_Opcode },
9071     { Bad_Opcode },
9072     { Bad_Opcode },
9073     { Bad_Opcode },
9074   },
9075   /* VEX_0F3A */
9076   {
9077     /* 00 */
9078     { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9079     { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9080     { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
9081     { Bad_Opcode },
9082     { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9083     { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9084     { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
9085     { Bad_Opcode },
9086     /* 08 */
9087     { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9088     { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9089     { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9090     { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9091     { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9092     { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9093     { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9094     { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
9095     /* 10 */
9096     { Bad_Opcode },
9097     { Bad_Opcode },
9098     { Bad_Opcode },
9099     { Bad_Opcode },
9100     { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9101     { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9102     { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9103     { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
9104     /* 18 */
9105     { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9106     { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
9107     { Bad_Opcode },
9108     { Bad_Opcode },
9109     { Bad_Opcode },
9110     { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
9111     { Bad_Opcode },
9112     { Bad_Opcode },
9113     /* 20 */
9114     { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9115     { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9116     { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
9117     { Bad_Opcode },
9118     { Bad_Opcode },
9119     { Bad_Opcode },
9120     { Bad_Opcode },
9121     { Bad_Opcode },
9122     /* 28 */
9123     { Bad_Opcode },
9124     { Bad_Opcode },
9125     { Bad_Opcode },
9126     { Bad_Opcode },
9127     { Bad_Opcode },
9128     { Bad_Opcode },
9129     { Bad_Opcode },
9130     { Bad_Opcode },
9131     /* 30 */
9132     { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
9133     { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
9134     { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
9135     { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
9136     { Bad_Opcode },
9137     { Bad_Opcode },
9138     { Bad_Opcode },
9139     { Bad_Opcode },
9140     /* 38 */
9141     { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9142     { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
9143     { Bad_Opcode },
9144     { Bad_Opcode },
9145     { Bad_Opcode },
9146     { Bad_Opcode },
9147     { Bad_Opcode },
9148     { Bad_Opcode },
9149     /* 40 */
9150     { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9151     { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9152     { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
9153     { Bad_Opcode },
9154     { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
9155     { Bad_Opcode },
9156     { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
9157     { Bad_Opcode },
9158     /* 48 */
9159     { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9160     { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9161     { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9162     { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9163     { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
9164     { Bad_Opcode },
9165     { Bad_Opcode },
9166     { Bad_Opcode },
9167     /* 50 */
9168     { Bad_Opcode },
9169     { Bad_Opcode },
9170     { Bad_Opcode },
9171     { Bad_Opcode },
9172     { Bad_Opcode },
9173     { Bad_Opcode },
9174     { Bad_Opcode },
9175     { Bad_Opcode },
9176     /* 58 */
9177     { Bad_Opcode },
9178     { Bad_Opcode },
9179     { Bad_Opcode },
9180     { Bad_Opcode },
9181     { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9182     { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9183     { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9184     { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
9185     /* 60 */
9186     { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9187     { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9188     { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9189     { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
9190     { Bad_Opcode },
9191     { Bad_Opcode },
9192     { Bad_Opcode },
9193     { Bad_Opcode },
9194     /* 68 */
9195     { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9196     { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9197     { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9198     { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9199     { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9200     { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9201     { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9202     { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
9203     /* 70 */
9204     { Bad_Opcode },
9205     { Bad_Opcode },
9206     { Bad_Opcode },
9207     { Bad_Opcode },
9208     { Bad_Opcode },
9209     { Bad_Opcode },
9210     { Bad_Opcode },
9211     { Bad_Opcode },
9212     /* 78 */
9213     { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9214     { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9215     { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9216     { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9217     { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9218     { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9219     { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9220     { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
9221     /* 80 */
9222     { Bad_Opcode },
9223     { Bad_Opcode },
9224     { Bad_Opcode },
9225     { Bad_Opcode },
9226     { Bad_Opcode },
9227     { Bad_Opcode },
9228     { Bad_Opcode },
9229     { Bad_Opcode },
9230     /* 88 */
9231     { Bad_Opcode },
9232     { Bad_Opcode },
9233     { Bad_Opcode },
9234     { Bad_Opcode },
9235     { Bad_Opcode },
9236     { Bad_Opcode },
9237     { Bad_Opcode },
9238     { Bad_Opcode },
9239     /* 90 */
9240     { Bad_Opcode },
9241     { Bad_Opcode },
9242     { Bad_Opcode },
9243     { Bad_Opcode },
9244     { Bad_Opcode },
9245     { Bad_Opcode },
9246     { Bad_Opcode },
9247     { Bad_Opcode },
9248     /* 98 */
9249     { Bad_Opcode },
9250     { Bad_Opcode },
9251     { Bad_Opcode },
9252     { Bad_Opcode },
9253     { Bad_Opcode },
9254     { Bad_Opcode },
9255     { Bad_Opcode },
9256     { Bad_Opcode },
9257     /* a0 */
9258     { Bad_Opcode },
9259     { Bad_Opcode },
9260     { Bad_Opcode },
9261     { Bad_Opcode },
9262     { Bad_Opcode },
9263     { Bad_Opcode },
9264     { Bad_Opcode },
9265     { Bad_Opcode },
9266     /* a8 */
9267     { Bad_Opcode },
9268     { Bad_Opcode },
9269     { Bad_Opcode },
9270     { Bad_Opcode },
9271     { Bad_Opcode },
9272     { Bad_Opcode },
9273     { Bad_Opcode },
9274     { Bad_Opcode },
9275     /* b0 */
9276     { Bad_Opcode },
9277     { Bad_Opcode },
9278     { Bad_Opcode },
9279     { Bad_Opcode },
9280     { Bad_Opcode },
9281     { Bad_Opcode },
9282     { Bad_Opcode },
9283     { Bad_Opcode },
9284     /* b8 */
9285     { Bad_Opcode },
9286     { Bad_Opcode },
9287     { Bad_Opcode },
9288     { Bad_Opcode },
9289     { Bad_Opcode },
9290     { Bad_Opcode },
9291     { Bad_Opcode },
9292     { Bad_Opcode },
9293     /* c0 */
9294     { Bad_Opcode },
9295     { Bad_Opcode },
9296     { Bad_Opcode },
9297     { Bad_Opcode },
9298     { Bad_Opcode },
9299     { Bad_Opcode },
9300     { Bad_Opcode },
9301     { Bad_Opcode },
9302     /* c8 */
9303     { Bad_Opcode },
9304     { Bad_Opcode },
9305     { Bad_Opcode },
9306     { Bad_Opcode },
9307     { Bad_Opcode },
9308     { Bad_Opcode },
9309     { Bad_Opcode },
9310     { Bad_Opcode },
9311     /* d0 */
9312     { Bad_Opcode },
9313     { Bad_Opcode },
9314     { Bad_Opcode },
9315     { Bad_Opcode },
9316     { Bad_Opcode },
9317     { Bad_Opcode },
9318     { Bad_Opcode },
9319     { Bad_Opcode },
9320     /* d8 */
9321     { Bad_Opcode },
9322     { Bad_Opcode },
9323     { Bad_Opcode },
9324     { Bad_Opcode },
9325     { Bad_Opcode },
9326     { Bad_Opcode },
9327     { Bad_Opcode },
9328     { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
9329     /* e0 */
9330     { Bad_Opcode },
9331     { Bad_Opcode },
9332     { Bad_Opcode },
9333     { Bad_Opcode },
9334     { Bad_Opcode },
9335     { Bad_Opcode },
9336     { Bad_Opcode },
9337     { Bad_Opcode },
9338     /* e8 */
9339     { Bad_Opcode },
9340     { Bad_Opcode },
9341     { Bad_Opcode },
9342     { Bad_Opcode },
9343     { Bad_Opcode },
9344     { Bad_Opcode },
9345     { Bad_Opcode },
9346     { Bad_Opcode },
9347     /* f0 */
9348     { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
9349     { Bad_Opcode },
9350     { Bad_Opcode },
9351     { Bad_Opcode },
9352     { Bad_Opcode },
9353     { Bad_Opcode },
9354     { Bad_Opcode },
9355     { Bad_Opcode },
9356     /* f8 */
9357     { Bad_Opcode },
9358     { Bad_Opcode },
9359     { Bad_Opcode },
9360     { Bad_Opcode },
9361     { Bad_Opcode },
9362     { Bad_Opcode },
9363     { Bad_Opcode },
9364     { Bad_Opcode },
9365   },
9366 };
9367 
9368 #define NEED_OPCODE_TABLE
9369 #include "i386-dis-evex.h"
9370 #undef NEED_OPCODE_TABLE
9371 static const struct dis386 vex_len_table[][2] = {
9372   /* VEX_LEN_0F10_P_1 */
9373   {
9374     { VEX_W_TABLE (VEX_W_0F10_P_1) },
9375     { VEX_W_TABLE (VEX_W_0F10_P_1) },
9376   },
9377 
9378   /* VEX_LEN_0F10_P_3 */
9379   {
9380     { VEX_W_TABLE (VEX_W_0F10_P_3) },
9381     { VEX_W_TABLE (VEX_W_0F10_P_3) },
9382   },
9383 
9384   /* VEX_LEN_0F11_P_1 */
9385   {
9386     { VEX_W_TABLE (VEX_W_0F11_P_1) },
9387     { VEX_W_TABLE (VEX_W_0F11_P_1) },
9388   },
9389 
9390   /* VEX_LEN_0F11_P_3 */
9391   {
9392     { VEX_W_TABLE (VEX_W_0F11_P_3) },
9393     { VEX_W_TABLE (VEX_W_0F11_P_3) },
9394   },
9395 
9396   /* VEX_LEN_0F12_P_0_M_0 */
9397   {
9398     { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
9399   },
9400 
9401   /* VEX_LEN_0F12_P_0_M_1 */
9402   {
9403     { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
9404   },
9405 
9406   /* VEX_LEN_0F12_P_2 */
9407   {
9408     { VEX_W_TABLE (VEX_W_0F12_P_2) },
9409   },
9410 
9411   /* VEX_LEN_0F13_M_0 */
9412   {
9413     { VEX_W_TABLE (VEX_W_0F13_M_0) },
9414   },
9415 
9416   /* VEX_LEN_0F16_P_0_M_0 */
9417   {
9418     { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
9419   },
9420 
9421   /* VEX_LEN_0F16_P_0_M_1 */
9422   {
9423     { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
9424   },
9425 
9426   /* VEX_LEN_0F16_P_2 */
9427   {
9428     { VEX_W_TABLE (VEX_W_0F16_P_2) },
9429   },
9430 
9431   /* VEX_LEN_0F17_M_0 */
9432   {
9433     { VEX_W_TABLE (VEX_W_0F17_M_0) },
9434   },
9435 
9436   /* VEX_LEN_0F2A_P_1 */
9437   {
9438     { "vcvtsi2ss%LQ",	{ XMScalar, VexScalar, Ev }, 0 },
9439     { "vcvtsi2ss%LQ",	{ XMScalar, VexScalar, Ev }, 0 },
9440   },
9441 
9442   /* VEX_LEN_0F2A_P_3 */
9443   {
9444     { "vcvtsi2sd%LQ",	{ XMScalar, VexScalar, Ev }, 0 },
9445     { "vcvtsi2sd%LQ",	{ XMScalar, VexScalar, Ev }, 0 },
9446   },
9447 
9448   /* VEX_LEN_0F2C_P_1 */
9449   {
9450     { "vcvttss2siY",	{ Gv, EXdScalar }, 0 },
9451     { "vcvttss2siY",	{ Gv, EXdScalar }, 0 },
9452   },
9453 
9454   /* VEX_LEN_0F2C_P_3 */
9455   {
9456     { "vcvttsd2siY",	{ Gv, EXqScalar }, 0 },
9457     { "vcvttsd2siY",	{ Gv, EXqScalar }, 0 },
9458   },
9459 
9460   /* VEX_LEN_0F2D_P_1 */
9461   {
9462     { "vcvtss2siY",	{ Gv, EXdScalar }, 0 },
9463     { "vcvtss2siY",	{ Gv, EXdScalar }, 0 },
9464   },
9465 
9466   /* VEX_LEN_0F2D_P_3 */
9467   {
9468     { "vcvtsd2siY",	{ Gv, EXqScalar }, 0 },
9469     { "vcvtsd2siY",	{ Gv, EXqScalar }, 0 },
9470   },
9471 
9472   /* VEX_LEN_0F2E_P_0 */
9473   {
9474     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9475     { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9476   },
9477 
9478   /* VEX_LEN_0F2E_P_2 */
9479   {
9480     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9481     { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9482   },
9483 
9484   /* VEX_LEN_0F2F_P_0 */
9485   {
9486     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9487     { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9488   },
9489 
9490   /* VEX_LEN_0F2F_P_2 */
9491   {
9492     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9493     { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9494   },
9495 
9496   /* VEX_LEN_0F41_P_0 */
9497   {
9498     { Bad_Opcode },
9499     { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9500   },
9501   /* VEX_LEN_0F41_P_2 */
9502   {
9503     { Bad_Opcode },
9504     { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9505   },
9506   /* VEX_LEN_0F42_P_0 */
9507   {
9508     { Bad_Opcode },
9509     { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9510   },
9511   /* VEX_LEN_0F42_P_2 */
9512   {
9513     { Bad_Opcode },
9514     { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9515   },
9516   /* VEX_LEN_0F44_P_0 */
9517   {
9518     { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9519   },
9520   /* VEX_LEN_0F44_P_2 */
9521   {
9522     { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9523   },
9524   /* VEX_LEN_0F45_P_0 */
9525   {
9526     { Bad_Opcode },
9527     { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9528   },
9529   /* VEX_LEN_0F45_P_2 */
9530   {
9531     { Bad_Opcode },
9532     { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9533   },
9534   /* VEX_LEN_0F46_P_0 */
9535   {
9536     { Bad_Opcode },
9537     { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9538   },
9539   /* VEX_LEN_0F46_P_2 */
9540   {
9541     { Bad_Opcode },
9542     { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9543   },
9544   /* VEX_LEN_0F47_P_0 */
9545   {
9546     { Bad_Opcode },
9547     { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9548   },
9549   /* VEX_LEN_0F47_P_2 */
9550   {
9551     { Bad_Opcode },
9552     { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9553   },
9554   /* VEX_LEN_0F4A_P_0 */
9555   {
9556     { Bad_Opcode },
9557     { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9558   },
9559   /* VEX_LEN_0F4A_P_2 */
9560   {
9561     { Bad_Opcode },
9562     { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9563   },
9564   /* VEX_LEN_0F4B_P_0 */
9565   {
9566     { Bad_Opcode },
9567     { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9568   },
9569   /* VEX_LEN_0F4B_P_2 */
9570   {
9571     { Bad_Opcode },
9572     { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9573   },
9574 
9575   /* VEX_LEN_0F51_P_1 */
9576   {
9577     { VEX_W_TABLE (VEX_W_0F51_P_1) },
9578     { VEX_W_TABLE (VEX_W_0F51_P_1) },
9579   },
9580 
9581   /* VEX_LEN_0F51_P_3 */
9582   {
9583     { VEX_W_TABLE (VEX_W_0F51_P_3) },
9584     { VEX_W_TABLE (VEX_W_0F51_P_3) },
9585   },
9586 
9587   /* VEX_LEN_0F52_P_1 */
9588   {
9589     { VEX_W_TABLE (VEX_W_0F52_P_1) },
9590     { VEX_W_TABLE (VEX_W_0F52_P_1) },
9591   },
9592 
9593   /* VEX_LEN_0F53_P_1 */
9594   {
9595     { VEX_W_TABLE (VEX_W_0F53_P_1) },
9596     { VEX_W_TABLE (VEX_W_0F53_P_1) },
9597   },
9598 
9599   /* VEX_LEN_0F58_P_1 */
9600   {
9601     { VEX_W_TABLE (VEX_W_0F58_P_1) },
9602     { VEX_W_TABLE (VEX_W_0F58_P_1) },
9603   },
9604 
9605   /* VEX_LEN_0F58_P_3 */
9606   {
9607     { VEX_W_TABLE (VEX_W_0F58_P_3) },
9608     { VEX_W_TABLE (VEX_W_0F58_P_3) },
9609   },
9610 
9611   /* VEX_LEN_0F59_P_1 */
9612   {
9613     { VEX_W_TABLE (VEX_W_0F59_P_1) },
9614     { VEX_W_TABLE (VEX_W_0F59_P_1) },
9615   },
9616 
9617   /* VEX_LEN_0F59_P_3 */
9618   {
9619     { VEX_W_TABLE (VEX_W_0F59_P_3) },
9620     { VEX_W_TABLE (VEX_W_0F59_P_3) },
9621   },
9622 
9623   /* VEX_LEN_0F5A_P_1 */
9624   {
9625     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9626     { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9627   },
9628 
9629   /* VEX_LEN_0F5A_P_3 */
9630   {
9631     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9632     { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9633   },
9634 
9635   /* VEX_LEN_0F5C_P_1 */
9636   {
9637     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9638     { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9639   },
9640 
9641   /* VEX_LEN_0F5C_P_3 */
9642   {
9643     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9644     { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9645   },
9646 
9647   /* VEX_LEN_0F5D_P_1 */
9648   {
9649     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9650     { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9651   },
9652 
9653   /* VEX_LEN_0F5D_P_3 */
9654   {
9655     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9656     { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9657   },
9658 
9659   /* VEX_LEN_0F5E_P_1 */
9660   {
9661     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9662     { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9663   },
9664 
9665   /* VEX_LEN_0F5E_P_3 */
9666   {
9667     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9668     { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9669   },
9670 
9671   /* VEX_LEN_0F5F_P_1 */
9672   {
9673     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9674     { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9675   },
9676 
9677   /* VEX_LEN_0F5F_P_3 */
9678   {
9679     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9680     { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9681   },
9682 
9683   /* VEX_LEN_0F6E_P_2 */
9684   {
9685     { "vmovK",		{ XMScalar, Edq }, 0 },
9686     { "vmovK",		{ XMScalar, Edq }, 0 },
9687   },
9688 
9689   /* VEX_LEN_0F7E_P_1 */
9690   {
9691     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9692     { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9693   },
9694 
9695   /* VEX_LEN_0F7E_P_2 */
9696   {
9697     { "vmovK",		{ Edq, XMScalar }, 0 },
9698     { "vmovK",		{ Edq, XMScalar }, 0 },
9699   },
9700 
9701   /* VEX_LEN_0F90_P_0 */
9702   {
9703     { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9704   },
9705 
9706   /* VEX_LEN_0F90_P_2 */
9707   {
9708     { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9709   },
9710 
9711   /* VEX_LEN_0F91_P_0 */
9712   {
9713     { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9714   },
9715 
9716   /* VEX_LEN_0F91_P_2 */
9717   {
9718     { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9719   },
9720 
9721   /* VEX_LEN_0F92_P_0 */
9722   {
9723     { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9724   },
9725 
9726   /* VEX_LEN_0F92_P_2 */
9727   {
9728     { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9729   },
9730 
9731   /* VEX_LEN_0F92_P_3 */
9732   {
9733     { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9734   },
9735 
9736   /* VEX_LEN_0F93_P_0 */
9737   {
9738     { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9739   },
9740 
9741   /* VEX_LEN_0F93_P_2 */
9742   {
9743     { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9744   },
9745 
9746   /* VEX_LEN_0F93_P_3 */
9747   {
9748     { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9749   },
9750 
9751   /* VEX_LEN_0F98_P_0 */
9752   {
9753     { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9754   },
9755 
9756   /* VEX_LEN_0F98_P_2 */
9757   {
9758     { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9759   },
9760 
9761   /* VEX_LEN_0F99_P_0 */
9762   {
9763     { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9764   },
9765 
9766   /* VEX_LEN_0F99_P_2 */
9767   {
9768     { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9769   },
9770 
9771   /* VEX_LEN_0FAE_R_2_M_0 */
9772   {
9773     { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
9774   },
9775 
9776   /* VEX_LEN_0FAE_R_3_M_0 */
9777   {
9778     { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
9779   },
9780 
9781   /* VEX_LEN_0FC2_P_1 */
9782   {
9783     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9784     { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9785   },
9786 
9787   /* VEX_LEN_0FC2_P_3 */
9788   {
9789     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9790     { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9791   },
9792 
9793   /* VEX_LEN_0FC4_P_2 */
9794   {
9795     { VEX_W_TABLE (VEX_W_0FC4_P_2) },
9796   },
9797 
9798   /* VEX_LEN_0FC5_P_2 */
9799   {
9800     { VEX_W_TABLE (VEX_W_0FC5_P_2) },
9801   },
9802 
9803   /* VEX_LEN_0FD6_P_2 */
9804   {
9805     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9806     { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9807   },
9808 
9809   /* VEX_LEN_0FF7_P_2 */
9810   {
9811     { VEX_W_TABLE (VEX_W_0FF7_P_2) },
9812   },
9813 
9814   /* VEX_LEN_0F3816_P_2 */
9815   {
9816     { Bad_Opcode },
9817     { VEX_W_TABLE (VEX_W_0F3816_P_2) },
9818   },
9819 
9820   /* VEX_LEN_0F3819_P_2 */
9821   {
9822     { Bad_Opcode },
9823     { VEX_W_TABLE (VEX_W_0F3819_P_2) },
9824   },
9825 
9826   /* VEX_LEN_0F381A_P_2_M_0 */
9827   {
9828     { Bad_Opcode },
9829     { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
9830   },
9831 
9832   /* VEX_LEN_0F3836_P_2 */
9833   {
9834     { Bad_Opcode },
9835     { VEX_W_TABLE (VEX_W_0F3836_P_2) },
9836   },
9837 
9838   /* VEX_LEN_0F3841_P_2 */
9839   {
9840     { VEX_W_TABLE (VEX_W_0F3841_P_2) },
9841   },
9842 
9843   /* VEX_LEN_0F385A_P_2_M_0 */
9844   {
9845     { Bad_Opcode },
9846     { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9847   },
9848 
9849   /* VEX_LEN_0F38DB_P_2 */
9850   {
9851     { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
9852   },
9853 
9854   /* VEX_LEN_0F38DC_P_2 */
9855   {
9856     { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
9857   },
9858 
9859   /* VEX_LEN_0F38DD_P_2 */
9860   {
9861     { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
9862   },
9863 
9864   /* VEX_LEN_0F38DE_P_2 */
9865   {
9866     { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
9867   },
9868 
9869   /* VEX_LEN_0F38DF_P_2 */
9870   {
9871     { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
9872   },
9873 
9874   /* VEX_LEN_0F38F2_P_0 */
9875   {
9876     { "andnS",		{ Gdq, VexGdq, Edq }, 0 },
9877   },
9878 
9879   /* VEX_LEN_0F38F3_R_1_P_0 */
9880   {
9881     { "blsrS",		{ VexGdq, Edq }, 0 },
9882   },
9883 
9884   /* VEX_LEN_0F38F3_R_2_P_0 */
9885   {
9886     { "blsmskS",	{ VexGdq, Edq }, 0 },
9887   },
9888 
9889   /* VEX_LEN_0F38F3_R_3_P_0 */
9890   {
9891     { "blsiS",		{ VexGdq, Edq }, 0 },
9892   },
9893 
9894   /* VEX_LEN_0F38F5_P_0 */
9895   {
9896     { "bzhiS",		{ Gdq, Edq, VexGdq }, 0 },
9897   },
9898 
9899   /* VEX_LEN_0F38F5_P_1 */
9900   {
9901     { "pextS",		{ Gdq, VexGdq, Edq }, 0 },
9902   },
9903 
9904   /* VEX_LEN_0F38F5_P_3 */
9905   {
9906     { "pdepS",		{ Gdq, VexGdq, Edq }, 0 },
9907   },
9908 
9909   /* VEX_LEN_0F38F6_P_3 */
9910   {
9911     { "mulxS",		{ Gdq, VexGdq, Edq }, 0 },
9912   },
9913 
9914   /* VEX_LEN_0F38F7_P_0 */
9915   {
9916     { "bextrS",		{ Gdq, Edq, VexGdq }, 0 },
9917   },
9918 
9919   /* VEX_LEN_0F38F7_P_1 */
9920   {
9921     { "sarxS",		{ Gdq, Edq, VexGdq }, 0 },
9922   },
9923 
9924   /* VEX_LEN_0F38F7_P_2 */
9925   {
9926     { "shlxS",		{ Gdq, Edq, VexGdq }, 0 },
9927   },
9928 
9929   /* VEX_LEN_0F38F7_P_3 */
9930   {
9931     { "shrxS",		{ Gdq, Edq, VexGdq }, 0 },
9932   },
9933 
9934   /* VEX_LEN_0F3A00_P_2 */
9935   {
9936     { Bad_Opcode },
9937     { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9938   },
9939 
9940   /* VEX_LEN_0F3A01_P_2 */
9941   {
9942     { Bad_Opcode },
9943     { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9944   },
9945 
9946   /* VEX_LEN_0F3A06_P_2 */
9947   {
9948     { Bad_Opcode },
9949     { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
9950   },
9951 
9952   /* VEX_LEN_0F3A0A_P_2 */
9953   {
9954     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9955     { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9956   },
9957 
9958   /* VEX_LEN_0F3A0B_P_2 */
9959   {
9960     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9961     { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9962   },
9963 
9964   /* VEX_LEN_0F3A14_P_2 */
9965   {
9966     { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
9967   },
9968 
9969   /* VEX_LEN_0F3A15_P_2 */
9970   {
9971     { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
9972   },
9973 
9974   /* VEX_LEN_0F3A16_P_2  */
9975   {
9976     { "vpextrK",	{ Edq, XM, Ib }, 0 },
9977   },
9978 
9979   /* VEX_LEN_0F3A17_P_2 */
9980   {
9981     { "vextractps",	{ Edqd, XM, Ib }, 0 },
9982   },
9983 
9984   /* VEX_LEN_0F3A18_P_2 */
9985   {
9986     { Bad_Opcode },
9987     { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
9988   },
9989 
9990   /* VEX_LEN_0F3A19_P_2 */
9991   {
9992     { Bad_Opcode },
9993     { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
9994   },
9995 
9996   /* VEX_LEN_0F3A20_P_2 */
9997   {
9998     { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
9999   },
10000 
10001   /* VEX_LEN_0F3A21_P_2 */
10002   {
10003     { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
10004   },
10005 
10006   /* VEX_LEN_0F3A22_P_2 */
10007   {
10008     { "vpinsrK",	{ XM, Vex128, Edq, Ib }, 0 },
10009   },
10010 
10011   /* VEX_LEN_0F3A30_P_2 */
10012   {
10013     { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10014   },
10015 
10016   /* VEX_LEN_0F3A31_P_2 */
10017   {
10018     { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10019   },
10020 
10021   /* VEX_LEN_0F3A32_P_2 */
10022   {
10023     { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10024   },
10025 
10026   /* VEX_LEN_0F3A33_P_2 */
10027   {
10028     { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10029   },
10030 
10031   /* VEX_LEN_0F3A38_P_2 */
10032   {
10033     { Bad_Opcode },
10034     { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
10035   },
10036 
10037   /* VEX_LEN_0F3A39_P_2 */
10038   {
10039     { Bad_Opcode },
10040     { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10041   },
10042 
10043   /* VEX_LEN_0F3A41_P_2 */
10044   {
10045     { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
10046   },
10047 
10048   /* VEX_LEN_0F3A44_P_2 */
10049   {
10050     { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
10051   },
10052 
10053   /* VEX_LEN_0F3A46_P_2 */
10054   {
10055     { Bad_Opcode },
10056     { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
10057   },
10058 
10059   /* VEX_LEN_0F3A60_P_2 */
10060   {
10061     { "vpcmpestrm",	{ XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
10062   },
10063 
10064   /* VEX_LEN_0F3A61_P_2 */
10065   {
10066     { "vpcmpestri",	{ XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
10067   },
10068 
10069   /* VEX_LEN_0F3A62_P_2 */
10070   {
10071     { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
10072   },
10073 
10074   /* VEX_LEN_0F3A63_P_2 */
10075   {
10076     { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
10077   },
10078 
10079   /* VEX_LEN_0F3A6A_P_2 */
10080   {
10081     { "vfmaddss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
10082   },
10083 
10084   /* VEX_LEN_0F3A6B_P_2 */
10085   {
10086     { "vfmaddsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
10087   },
10088 
10089   /* VEX_LEN_0F3A6E_P_2 */
10090   {
10091     { "vfmsubss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
10092   },
10093 
10094   /* VEX_LEN_0F3A6F_P_2 */
10095   {
10096     { "vfmsubsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
10097   },
10098 
10099   /* VEX_LEN_0F3A7A_P_2 */
10100   {
10101     { "vfnmaddss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
10102   },
10103 
10104   /* VEX_LEN_0F3A7B_P_2 */
10105   {
10106     { "vfnmaddsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
10107   },
10108 
10109   /* VEX_LEN_0F3A7E_P_2 */
10110   {
10111     { "vfnmsubss",	{ XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
10112   },
10113 
10114   /* VEX_LEN_0F3A7F_P_2 */
10115   {
10116     { "vfnmsubsd",	{ XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
10117   },
10118 
10119   /* VEX_LEN_0F3ADF_P_2 */
10120   {
10121     { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
10122   },
10123 
10124   /* VEX_LEN_0F3AF0_P_3 */
10125   {
10126     { "rorxS",		{ Gdq, Edq, Ib }, 0 },
10127   },
10128 
10129   /* VEX_LEN_0FXOP_08_CC */
10130   {
10131      { "vpcomb",	{ XM, Vex128, EXx, Ib }, 0 },
10132   },
10133 
10134   /* VEX_LEN_0FXOP_08_CD */
10135   {
10136      { "vpcomw",	{ XM, Vex128, EXx, Ib }, 0 },
10137   },
10138 
10139   /* VEX_LEN_0FXOP_08_CE */
10140   {
10141      { "vpcomd",	{ XM, Vex128, EXx, Ib }, 0 },
10142   },
10143 
10144   /* VEX_LEN_0FXOP_08_CF */
10145   {
10146      { "vpcomq",	{ XM, Vex128, EXx, Ib }, 0 },
10147   },
10148 
10149   /* VEX_LEN_0FXOP_08_EC */
10150   {
10151      { "vpcomub",	{ XM, Vex128, EXx, Ib }, 0 },
10152   },
10153 
10154   /* VEX_LEN_0FXOP_08_ED */
10155   {
10156      { "vpcomuw",	{ XM, Vex128, EXx, Ib }, 0 },
10157   },
10158 
10159   /* VEX_LEN_0FXOP_08_EE */
10160   {
10161      { "vpcomud",	{ XM, Vex128, EXx, Ib }, 0 },
10162   },
10163 
10164   /* VEX_LEN_0FXOP_08_EF */
10165   {
10166      { "vpcomuq",	{ XM, Vex128, EXx, Ib }, 0 },
10167   },
10168 
10169   /* VEX_LEN_0FXOP_09_80 */
10170   {
10171     { "vfrczps",	{ XM, EXxmm }, 0 },
10172     { "vfrczps",	{ XM, EXymmq }, 0 },
10173   },
10174 
10175   /* VEX_LEN_0FXOP_09_81 */
10176   {
10177     { "vfrczpd",	{ XM, EXxmm }, 0 },
10178     { "vfrczpd",	{ XM, EXymmq }, 0 },
10179   },
10180 };
10181 
10182 static const struct dis386 vex_w_table[][2] = {
10183   {
10184     /* VEX_W_0F10_P_0 */
10185     { "vmovups",	{ XM, EXx }, 0 },
10186   },
10187   {
10188     /* VEX_W_0F10_P_1 */
10189     { "vmovss",		{ XMVexScalar, VexScalar, EXdScalar }, 0 },
10190   },
10191   {
10192     /* VEX_W_0F10_P_2 */
10193     { "vmovupd",	{ XM, EXx }, 0 },
10194   },
10195   {
10196     /* VEX_W_0F10_P_3 */
10197     { "vmovsd",		{ XMVexScalar, VexScalar, EXqScalar }, 0 },
10198   },
10199   {
10200     /* VEX_W_0F11_P_0 */
10201     { "vmovups",	{ EXxS, XM }, 0 },
10202   },
10203   {
10204     /* VEX_W_0F11_P_1 */
10205     { "vmovss",		{ EXdVexScalarS, VexScalar, XMScalar }, 0 },
10206   },
10207   {
10208     /* VEX_W_0F11_P_2 */
10209     { "vmovupd",	{ EXxS, XM }, 0 },
10210   },
10211   {
10212     /* VEX_W_0F11_P_3 */
10213     { "vmovsd",		{ EXqVexScalarS, VexScalar, XMScalar }, 0 },
10214   },
10215   {
10216     /* VEX_W_0F12_P_0_M_0 */
10217     { "vmovlps",	{ XM, Vex128, EXq }, 0 },
10218   },
10219   {
10220     /* VEX_W_0F12_P_0_M_1 */
10221     { "vmovhlps",	{ XM, Vex128, EXq }, 0 },
10222   },
10223   {
10224     /* VEX_W_0F12_P_1 */
10225     { "vmovsldup",	{ XM, EXx }, 0 },
10226   },
10227   {
10228     /* VEX_W_0F12_P_2 */
10229     { "vmovlpd",	{ XM, Vex128, EXq }, 0 },
10230   },
10231   {
10232     /* VEX_W_0F12_P_3 */
10233     { "vmovddup",	{ XM, EXymmq }, 0 },
10234   },
10235   {
10236     /* VEX_W_0F13_M_0 */
10237     { "vmovlpX",	{ EXq, XM }, 0 },
10238   },
10239   {
10240     /* VEX_W_0F14 */
10241     { "vunpcklpX",	{ XM, Vex, EXx }, 0 },
10242   },
10243   {
10244     /* VEX_W_0F15 */
10245     { "vunpckhpX",	{ XM, Vex, EXx }, 0 },
10246   },
10247   {
10248     /* VEX_W_0F16_P_0_M_0 */
10249     { "vmovhps",	{ XM, Vex128, EXq }, 0 },
10250   },
10251   {
10252     /* VEX_W_0F16_P_0_M_1 */
10253     { "vmovlhps",	{ XM, Vex128, EXq }, 0 },
10254   },
10255   {
10256     /* VEX_W_0F16_P_1 */
10257     { "vmovshdup",	{ XM, EXx }, 0 },
10258   },
10259   {
10260     /* VEX_W_0F16_P_2 */
10261     { "vmovhpd",	{ XM, Vex128, EXq }, 0 },
10262   },
10263   {
10264     /* VEX_W_0F17_M_0 */
10265     { "vmovhpX",	{ EXq, XM }, 0 },
10266   },
10267   {
10268     /* VEX_W_0F28 */
10269     { "vmovapX",	{ XM, EXx }, 0 },
10270   },
10271   {
10272     /* VEX_W_0F29 */
10273     { "vmovapX",	{ EXxS, XM }, 0 },
10274   },
10275   {
10276     /* VEX_W_0F2B_M_0 */
10277     { "vmovntpX",	{ Mx, XM }, 0 },
10278   },
10279   {
10280     /* VEX_W_0F2E_P_0 */
10281     { "vucomiss",	{ XMScalar, EXdScalar }, 0 },
10282   },
10283   {
10284     /* VEX_W_0F2E_P_2 */
10285     { "vucomisd",	{ XMScalar, EXqScalar }, 0 },
10286   },
10287   {
10288     /* VEX_W_0F2F_P_0 */
10289     { "vcomiss",	{ XMScalar, EXdScalar }, 0 },
10290   },
10291   {
10292     /* VEX_W_0F2F_P_2 */
10293     { "vcomisd",	{ XMScalar, EXqScalar }, 0 },
10294   },
10295   {
10296     /* VEX_W_0F41_P_0_LEN_1 */
10297     { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10298     { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
10299   },
10300   {
10301     /* VEX_W_0F41_P_2_LEN_1 */
10302     { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10303     { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
10304   },
10305   {
10306     /* VEX_W_0F42_P_0_LEN_1 */
10307     { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10308     { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
10309   },
10310   {
10311     /* VEX_W_0F42_P_2_LEN_1 */
10312     { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10313     { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
10314   },
10315   {
10316     /* VEX_W_0F44_P_0_LEN_0 */
10317     { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10318     { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
10319   },
10320   {
10321     /* VEX_W_0F44_P_2_LEN_0 */
10322     { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10323     { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
10324   },
10325   {
10326     /* VEX_W_0F45_P_0_LEN_1 */
10327     { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10328     { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
10329   },
10330   {
10331     /* VEX_W_0F45_P_2_LEN_1 */
10332     { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10333     { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
10334   },
10335   {
10336     /* VEX_W_0F46_P_0_LEN_1 */
10337     { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10338     { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
10339   },
10340   {
10341     /* VEX_W_0F46_P_2_LEN_1 */
10342     { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10343     { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
10344   },
10345   {
10346     /* VEX_W_0F47_P_0_LEN_1 */
10347     { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10348     { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
10349   },
10350   {
10351     /* VEX_W_0F47_P_2_LEN_1 */
10352     { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10353     { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
10354   },
10355   {
10356     /* VEX_W_0F4A_P_0_LEN_1 */
10357     { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10358     { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
10359   },
10360   {
10361     /* VEX_W_0F4A_P_2_LEN_1 */
10362     { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10363     { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
10364   },
10365   {
10366     /* VEX_W_0F4B_P_0_LEN_1 */
10367     { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10368     { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
10369   },
10370   {
10371     /* VEX_W_0F4B_P_2_LEN_1 */
10372     { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
10373   },
10374   {
10375     /* VEX_W_0F50_M_0 */
10376     { "vmovmskpX",	{ Gdq, XS }, 0 },
10377   },
10378   {
10379     /* VEX_W_0F51_P_0 */
10380     { "vsqrtps",	{ XM, EXx }, 0 },
10381   },
10382   {
10383     /* VEX_W_0F51_P_1 */
10384     { "vsqrtss",	{ XMScalar, VexScalar, EXdScalar }, 0 },
10385   },
10386   {
10387     /* VEX_W_0F51_P_2  */
10388     { "vsqrtpd",	{ XM, EXx }, 0 },
10389   },
10390   {
10391     /* VEX_W_0F51_P_3 */
10392     { "vsqrtsd",	{ XMScalar, VexScalar, EXqScalar }, 0 },
10393   },
10394   {
10395     /* VEX_W_0F52_P_0 */
10396     { "vrsqrtps",	{ XM, EXx }, 0 },
10397   },
10398   {
10399     /* VEX_W_0F52_P_1 */
10400     { "vrsqrtss",	{ XMScalar, VexScalar, EXdScalar }, 0 },
10401   },
10402   {
10403     /* VEX_W_0F53_P_0  */
10404     { "vrcpps",		{ XM, EXx }, 0 },
10405   },
10406   {
10407     /* VEX_W_0F53_P_1  */
10408     { "vrcpss",		{ XMScalar, VexScalar, EXdScalar }, 0 },
10409   },
10410   {
10411     /* VEX_W_0F58_P_0  */
10412     { "vaddps",		{ XM, Vex, EXx }, 0 },
10413   },
10414   {
10415     /* VEX_W_0F58_P_1  */
10416     { "vaddss",		{ XMScalar, VexScalar, EXdScalar }, 0 },
10417   },
10418   {
10419     /* VEX_W_0F58_P_2  */
10420     { "vaddpd",		{ XM, Vex, EXx }, 0 },
10421   },
10422   {
10423     /* VEX_W_0F58_P_3  */
10424     { "vaddsd",		{ XMScalar, VexScalar, EXqScalar }, 0 },
10425   },
10426   {
10427     /* VEX_W_0F59_P_0  */
10428     { "vmulps",		{ XM, Vex, EXx }, 0 },
10429   },
10430   {
10431     /* VEX_W_0F59_P_1  */
10432     { "vmulss",		{ XMScalar, VexScalar, EXdScalar }, 0 },
10433   },
10434   {
10435     /* VEX_W_0F59_P_2  */
10436     { "vmulpd",		{ XM, Vex, EXx }, 0 },
10437   },
10438   {
10439     /* VEX_W_0F59_P_3  */
10440     { "vmulsd",		{ XMScalar, VexScalar, EXqScalar }, 0 },
10441   },
10442   {
10443     /* VEX_W_0F5A_P_0  */
10444     { "vcvtps2pd",	{ XM, EXxmmq }, 0 },
10445   },
10446   {
10447     /* VEX_W_0F5A_P_1  */
10448     { "vcvtss2sd",	{ XMScalar, VexScalar, EXdScalar }, 0 },
10449   },
10450   {
10451     /* VEX_W_0F5A_P_3  */
10452     { "vcvtsd2ss",	{ XMScalar, VexScalar, EXqScalar }, 0 },
10453   },
10454   {
10455     /* VEX_W_0F5B_P_0  */
10456     { "vcvtdq2ps",	{ XM, EXx }, 0 },
10457   },
10458   {
10459     /* VEX_W_0F5B_P_1  */
10460     { "vcvttps2dq",	{ XM, EXx }, 0 },
10461   },
10462   {
10463     /* VEX_W_0F5B_P_2  */
10464     { "vcvtps2dq",	{ XM, EXx }, 0 },
10465   },
10466   {
10467     /* VEX_W_0F5C_P_0  */
10468     { "vsubps",		{ XM, Vex, EXx }, 0 },
10469   },
10470   {
10471     /* VEX_W_0F5C_P_1  */
10472     { "vsubss",		{ XMScalar, VexScalar, EXdScalar }, 0 },
10473   },
10474   {
10475     /* VEX_W_0F5C_P_2  */
10476     { "vsubpd",		{ XM, Vex, EXx }, 0 },
10477   },
10478   {
10479     /* VEX_W_0F5C_P_3  */
10480     { "vsubsd",		{ XMScalar, VexScalar, EXqScalar }, 0 },
10481   },
10482   {
10483     /* VEX_W_0F5D_P_0  */
10484     { "vminps",		{ XM, Vex, EXx }, 0 },
10485   },
10486   {
10487     /* VEX_W_0F5D_P_1  */
10488     { "vminss",		{ XMScalar, VexScalar, EXdScalar }, 0 },
10489   },
10490   {
10491     /* VEX_W_0F5D_P_2  */
10492     { "vminpd",		{ XM, Vex, EXx }, 0 },
10493   },
10494   {
10495     /* VEX_W_0F5D_P_3  */
10496     { "vminsd",		{ XMScalar, VexScalar, EXqScalar }, 0 },
10497   },
10498   {
10499     /* VEX_W_0F5E_P_0  */
10500     { "vdivps",		{ XM, Vex, EXx }, 0 },
10501   },
10502   {
10503     /* VEX_W_0F5E_P_1  */
10504     { "vdivss",		{ XMScalar, VexScalar, EXdScalar }, 0 },
10505   },
10506   {
10507     /* VEX_W_0F5E_P_2  */
10508     { "vdivpd",		{ XM, Vex, EXx }, 0 },
10509   },
10510   {
10511     /* VEX_W_0F5E_P_3  */
10512     { "vdivsd",		{ XMScalar, VexScalar, EXqScalar }, 0 },
10513   },
10514   {
10515     /* VEX_W_0F5F_P_0  */
10516     { "vmaxps",		{ XM, Vex, EXx }, 0 },
10517   },
10518   {
10519     /* VEX_W_0F5F_P_1  */
10520     { "vmaxss",		{ XMScalar, VexScalar, EXdScalar }, 0 },
10521   },
10522   {
10523     /* VEX_W_0F5F_P_2  */
10524     { "vmaxpd",		{ XM, Vex, EXx }, 0 },
10525   },
10526   {
10527     /* VEX_W_0F5F_P_3  */
10528     { "vmaxsd",		{ XMScalar, VexScalar, EXqScalar }, 0 },
10529   },
10530   {
10531     /* VEX_W_0F60_P_2  */
10532     { "vpunpcklbw",	{ XM, Vex, EXx }, 0 },
10533   },
10534   {
10535     /* VEX_W_0F61_P_2  */
10536     { "vpunpcklwd",	{ XM, Vex, EXx }, 0 },
10537   },
10538   {
10539     /* VEX_W_0F62_P_2  */
10540     { "vpunpckldq",	{ XM, Vex, EXx }, 0 },
10541   },
10542   {
10543     /* VEX_W_0F63_P_2  */
10544     { "vpacksswb",	{ XM, Vex, EXx }, 0 },
10545   },
10546   {
10547     /* VEX_W_0F64_P_2  */
10548     { "vpcmpgtb",	{ XM, Vex, EXx }, 0 },
10549   },
10550   {
10551     /* VEX_W_0F65_P_2  */
10552     { "vpcmpgtw",	{ XM, Vex, EXx }, 0 },
10553   },
10554   {
10555     /* VEX_W_0F66_P_2  */
10556     { "vpcmpgtd",	{ XM, Vex, EXx }, 0 },
10557   },
10558   {
10559     /* VEX_W_0F67_P_2  */
10560     { "vpackuswb",	{ XM, Vex, EXx }, 0 },
10561   },
10562   {
10563     /* VEX_W_0F68_P_2  */
10564     { "vpunpckhbw",	{ XM, Vex, EXx }, 0 },
10565   },
10566   {
10567     /* VEX_W_0F69_P_2  */
10568     { "vpunpckhwd",	{ XM, Vex, EXx }, 0 },
10569   },
10570   {
10571     /* VEX_W_0F6A_P_2  */
10572     { "vpunpckhdq",	{ XM, Vex, EXx }, 0 },
10573   },
10574   {
10575     /* VEX_W_0F6B_P_2  */
10576     { "vpackssdw",	{ XM, Vex, EXx }, 0 },
10577   },
10578   {
10579     /* VEX_W_0F6C_P_2  */
10580     { "vpunpcklqdq",	{ XM, Vex, EXx }, 0 },
10581   },
10582   {
10583     /* VEX_W_0F6D_P_2  */
10584     { "vpunpckhqdq",	{ XM, Vex, EXx }, 0 },
10585   },
10586   {
10587     /* VEX_W_0F6F_P_1  */
10588     { "vmovdqu",	{ XM, EXx }, 0 },
10589   },
10590   {
10591     /* VEX_W_0F6F_P_2  */
10592     { "vmovdqa",	{ XM, EXx }, 0 },
10593   },
10594   {
10595     /* VEX_W_0F70_P_1 */
10596     { "vpshufhw",	{ XM, EXx, Ib }, 0 },
10597   },
10598   {
10599     /* VEX_W_0F70_P_2 */
10600     { "vpshufd",	{ XM, EXx, Ib }, 0 },
10601   },
10602   {
10603     /* VEX_W_0F70_P_3 */
10604     { "vpshuflw",	{ XM, EXx, Ib }, 0 },
10605   },
10606   {
10607     /* VEX_W_0F71_R_2_P_2  */
10608     { "vpsrlw",		{ Vex, XS, Ib }, 0 },
10609   },
10610   {
10611     /* VEX_W_0F71_R_4_P_2  */
10612     { "vpsraw",		{ Vex, XS, Ib }, 0 },
10613   },
10614   {
10615     /* VEX_W_0F71_R_6_P_2  */
10616     { "vpsllw",		{ Vex, XS, Ib }, 0 },
10617   },
10618   {
10619     /* VEX_W_0F72_R_2_P_2  */
10620     { "vpsrld",		{ Vex, XS, Ib }, 0 },
10621   },
10622   {
10623     /* VEX_W_0F72_R_4_P_2  */
10624     { "vpsrad",		{ Vex, XS, Ib }, 0 },
10625   },
10626   {
10627     /* VEX_W_0F72_R_6_P_2  */
10628     { "vpslld",		{ Vex, XS, Ib }, 0 },
10629   },
10630   {
10631     /* VEX_W_0F73_R_2_P_2  */
10632     { "vpsrlq",		{ Vex, XS, Ib }, 0 },
10633   },
10634   {
10635     /* VEX_W_0F73_R_3_P_2  */
10636     { "vpsrldq",	{ Vex, XS, Ib }, 0 },
10637   },
10638   {
10639     /* VEX_W_0F73_R_6_P_2  */
10640     { "vpsllq",		{ Vex, XS, Ib }, 0 },
10641   },
10642   {
10643     /* VEX_W_0F73_R_7_P_2  */
10644     { "vpslldq",	{ Vex, XS, Ib }, 0 },
10645   },
10646   {
10647     /* VEX_W_0F74_P_2 */
10648     { "vpcmpeqb",	{ XM, Vex, EXx }, 0 },
10649   },
10650   {
10651     /* VEX_W_0F75_P_2 */
10652     { "vpcmpeqw",	{ XM, Vex, EXx }, 0 },
10653   },
10654   {
10655     /* VEX_W_0F76_P_2 */
10656     { "vpcmpeqd",	{ XM, Vex, EXx }, 0 },
10657   },
10658   {
10659     /* VEX_W_0F77_P_0 */
10660     { "",		{ VZERO }, 0 },
10661   },
10662   {
10663     /* VEX_W_0F7C_P_2 */
10664     { "vhaddpd",	{ XM, Vex, EXx }, 0 },
10665   },
10666   {
10667     /* VEX_W_0F7C_P_3 */
10668     { "vhaddps",	{ XM, Vex, EXx }, 0 },
10669   },
10670   {
10671     /* VEX_W_0F7D_P_2 */
10672     { "vhsubpd",	{ XM, Vex, EXx }, 0 },
10673   },
10674   {
10675     /* VEX_W_0F7D_P_3 */
10676     { "vhsubps",	{ XM, Vex, EXx }, 0 },
10677   },
10678   {
10679     /* VEX_W_0F7E_P_1 */
10680     { "vmovq",		{ XMScalar, EXqScalar }, 0 },
10681   },
10682   {
10683     /* VEX_W_0F7F_P_1 */
10684     { "vmovdqu",	{ EXxS, XM }, 0 },
10685   },
10686   {
10687     /* VEX_W_0F7F_P_2 */
10688     { "vmovdqa",	{ EXxS, XM }, 0 },
10689   },
10690   {
10691     /* VEX_W_0F90_P_0_LEN_0 */
10692     { "kmovw",		{ MaskG, MaskE }, 0 },
10693     { "kmovq",		{ MaskG, MaskE }, 0 },
10694   },
10695   {
10696     /* VEX_W_0F90_P_2_LEN_0 */
10697     { "kmovb",		{ MaskG, MaskBDE }, 0 },
10698     { "kmovd",		{ MaskG, MaskBDE }, 0 },
10699   },
10700   {
10701     /* VEX_W_0F91_P_0_LEN_0 */
10702     { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10703     { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
10704   },
10705   {
10706     /* VEX_W_0F91_P_2_LEN_0 */
10707     { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10708     { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
10709   },
10710   {
10711     /* VEX_W_0F92_P_0_LEN_0 */
10712     { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
10713   },
10714   {
10715     /* VEX_W_0F92_P_2_LEN_0 */
10716     { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
10717   },
10718   {
10719     /* VEX_W_0F92_P_3_LEN_0 */
10720     { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10721     { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
10722   },
10723   {
10724     /* VEX_W_0F93_P_0_LEN_0 */
10725     { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
10726   },
10727   {
10728     /* VEX_W_0F93_P_2_LEN_0 */
10729     { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
10730   },
10731   {
10732     /* VEX_W_0F93_P_3_LEN_0 */
10733     { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10734     { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
10735   },
10736   {
10737     /* VEX_W_0F98_P_0_LEN_0 */
10738     { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10739     { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
10740   },
10741   {
10742     /* VEX_W_0F98_P_2_LEN_0 */
10743     { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10744     { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
10745   },
10746   {
10747     /* VEX_W_0F99_P_0_LEN_0 */
10748     { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10749     { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
10750   },
10751   {
10752     /* VEX_W_0F99_P_2_LEN_0 */
10753     { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10754     { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
10755   },
10756   {
10757     /* VEX_W_0FAE_R_2_M_0 */
10758     { "vldmxcsr",	{ Md }, 0 },
10759   },
10760   {
10761     /* VEX_W_0FAE_R_3_M_0 */
10762     { "vstmxcsr",	{ Md }, 0 },
10763   },
10764   {
10765     /* VEX_W_0FC2_P_0 */
10766     { "vcmpps",		{ XM, Vex, EXx, VCMP }, 0 },
10767   },
10768   {
10769     /* VEX_W_0FC2_P_1 */
10770     { "vcmpss",		{ XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
10771   },
10772   {
10773     /* VEX_W_0FC2_P_2 */
10774     { "vcmppd",		{ XM, Vex, EXx, VCMP }, 0 },
10775   },
10776   {
10777     /* VEX_W_0FC2_P_3 */
10778     { "vcmpsd",		{ XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
10779   },
10780   {
10781     /* VEX_W_0FC4_P_2 */
10782     { "vpinsrw",	{ XM, Vex128, Edqw, Ib }, 0 },
10783   },
10784   {
10785     /* VEX_W_0FC5_P_2 */
10786     { "vpextrw",	{ Gdq, XS, Ib }, 0 },
10787   },
10788   {
10789     /* VEX_W_0FD0_P_2 */
10790     { "vaddsubpd",	{ XM, Vex, EXx }, 0 },
10791   },
10792   {
10793     /* VEX_W_0FD0_P_3 */
10794     { "vaddsubps",	{ XM, Vex, EXx }, 0 },
10795   },
10796   {
10797     /* VEX_W_0FD1_P_2 */
10798     { "vpsrlw",		{ XM, Vex, EXxmm }, 0 },
10799   },
10800   {
10801     /* VEX_W_0FD2_P_2 */
10802     { "vpsrld",		{ XM, Vex, EXxmm }, 0 },
10803   },
10804   {
10805     /* VEX_W_0FD3_P_2 */
10806     { "vpsrlq",		{ XM, Vex, EXxmm }, 0 },
10807   },
10808   {
10809     /* VEX_W_0FD4_P_2 */
10810     { "vpaddq",		{ XM, Vex, EXx }, 0 },
10811   },
10812   {
10813     /* VEX_W_0FD5_P_2 */
10814     { "vpmullw",	{ XM, Vex, EXx }, 0 },
10815   },
10816   {
10817     /* VEX_W_0FD6_P_2 */
10818     { "vmovq",		{ EXqScalarS, XMScalar }, 0 },
10819   },
10820   {
10821     /* VEX_W_0FD7_P_2_M_1 */
10822     { "vpmovmskb",	{ Gdq, XS }, 0 },
10823   },
10824   {
10825     /* VEX_W_0FD8_P_2 */
10826     { "vpsubusb",	{ XM, Vex, EXx }, 0 },
10827   },
10828   {
10829     /* VEX_W_0FD9_P_2 */
10830     { "vpsubusw",	{ XM, Vex, EXx }, 0 },
10831   },
10832   {
10833     /* VEX_W_0FDA_P_2 */
10834     { "vpminub",	{ XM, Vex, EXx }, 0 },
10835   },
10836   {
10837     /* VEX_W_0FDB_P_2 */
10838     { "vpand",		{ XM, Vex, EXx }, 0 },
10839   },
10840   {
10841     /* VEX_W_0FDC_P_2 */
10842     { "vpaddusb",	{ XM, Vex, EXx }, 0 },
10843   },
10844   {
10845     /* VEX_W_0FDD_P_2 */
10846     { "vpaddusw",	{ XM, Vex, EXx }, 0 },
10847   },
10848   {
10849     /* VEX_W_0FDE_P_2 */
10850     { "vpmaxub",	{ XM, Vex, EXx }, 0 },
10851   },
10852   {
10853     /* VEX_W_0FDF_P_2 */
10854     { "vpandn",		{ XM, Vex, EXx }, 0 },
10855   },
10856   {
10857     /* VEX_W_0FE0_P_2  */
10858     { "vpavgb",		{ XM, Vex, EXx }, 0 },
10859   },
10860   {
10861     /* VEX_W_0FE1_P_2  */
10862     { "vpsraw",		{ XM, Vex, EXxmm }, 0 },
10863   },
10864   {
10865     /* VEX_W_0FE2_P_2  */
10866     { "vpsrad",		{ XM, Vex, EXxmm }, 0 },
10867   },
10868   {
10869     /* VEX_W_0FE3_P_2  */
10870     { "vpavgw",		{ XM, Vex, EXx }, 0 },
10871   },
10872   {
10873     /* VEX_W_0FE4_P_2  */
10874     { "vpmulhuw",	{ XM, Vex, EXx }, 0 },
10875   },
10876   {
10877     /* VEX_W_0FE5_P_2  */
10878     { "vpmulhw",	{ XM, Vex, EXx }, 0 },
10879   },
10880   {
10881     /* VEX_W_0FE6_P_1  */
10882     { "vcvtdq2pd",	{ XM, EXxmmq }, 0 },
10883   },
10884   {
10885     /* VEX_W_0FE6_P_2  */
10886     { "vcvttpd2dq%XY",	{ XMM, EXx }, 0 },
10887   },
10888   {
10889     /* VEX_W_0FE6_P_3  */
10890     { "vcvtpd2dq%XY",	{ XMM, EXx }, 0 },
10891   },
10892   {
10893     /* VEX_W_0FE7_P_2_M_0 */
10894     { "vmovntdq",	{ Mx, XM }, 0 },
10895   },
10896   {
10897     /* VEX_W_0FE8_P_2  */
10898     { "vpsubsb",	{ XM, Vex, EXx }, 0 },
10899   },
10900   {
10901     /* VEX_W_0FE9_P_2  */
10902     { "vpsubsw",	{ XM, Vex, EXx }, 0 },
10903   },
10904   {
10905     /* VEX_W_0FEA_P_2  */
10906     { "vpminsw",	{ XM, Vex, EXx }, 0 },
10907   },
10908   {
10909     /* VEX_W_0FEB_P_2  */
10910     { "vpor",		{ XM, Vex, EXx }, 0 },
10911   },
10912   {
10913     /* VEX_W_0FEC_P_2  */
10914     { "vpaddsb",	{ XM, Vex, EXx }, 0 },
10915   },
10916   {
10917     /* VEX_W_0FED_P_2  */
10918     { "vpaddsw",	{ XM, Vex, EXx }, 0 },
10919   },
10920   {
10921     /* VEX_W_0FEE_P_2  */
10922     { "vpmaxsw",	{ XM, Vex, EXx }, 0 },
10923   },
10924   {
10925     /* VEX_W_0FEF_P_2  */
10926     { "vpxor",		{ XM, Vex, EXx }, 0 },
10927   },
10928   {
10929     /* VEX_W_0FF0_P_3_M_0 */
10930     { "vlddqu",		{ XM, M }, 0 },
10931   },
10932   {
10933     /* VEX_W_0FF1_P_2 */
10934     { "vpsllw",		{ XM, Vex, EXxmm }, 0 },
10935   },
10936   {
10937     /* VEX_W_0FF2_P_2 */
10938     { "vpslld",		{ XM, Vex, EXxmm }, 0 },
10939   },
10940   {
10941     /* VEX_W_0FF3_P_2 */
10942     { "vpsllq",		{ XM, Vex, EXxmm }, 0 },
10943   },
10944   {
10945     /* VEX_W_0FF4_P_2 */
10946     { "vpmuludq",	{ XM, Vex, EXx }, 0 },
10947   },
10948   {
10949     /* VEX_W_0FF5_P_2 */
10950     { "vpmaddwd",	{ XM, Vex, EXx }, 0 },
10951   },
10952   {
10953     /* VEX_W_0FF6_P_2 */
10954     { "vpsadbw",	{ XM, Vex, EXx }, 0 },
10955   },
10956   {
10957     /* VEX_W_0FF7_P_2 */
10958     { "vmaskmovdqu",	{ XM, XS }, 0 },
10959   },
10960   {
10961     /* VEX_W_0FF8_P_2 */
10962     { "vpsubb",		{ XM, Vex, EXx }, 0 },
10963   },
10964   {
10965     /* VEX_W_0FF9_P_2 */
10966     { "vpsubw",		{ XM, Vex, EXx }, 0 },
10967   },
10968   {
10969     /* VEX_W_0FFA_P_2 */
10970     { "vpsubd",		{ XM, Vex, EXx }, 0 },
10971   },
10972   {
10973     /* VEX_W_0FFB_P_2 */
10974     { "vpsubq",		{ XM, Vex, EXx }, 0 },
10975   },
10976   {
10977     /* VEX_W_0FFC_P_2 */
10978     { "vpaddb",		{ XM, Vex, EXx }, 0 },
10979   },
10980   {
10981     /* VEX_W_0FFD_P_2 */
10982     { "vpaddw",		{ XM, Vex, EXx }, 0 },
10983   },
10984   {
10985     /* VEX_W_0FFE_P_2 */
10986     { "vpaddd",		{ XM, Vex, EXx }, 0 },
10987   },
10988   {
10989     /* VEX_W_0F3800_P_2  */
10990     { "vpshufb",	{ XM, Vex, EXx }, 0 },
10991   },
10992   {
10993     /* VEX_W_0F3801_P_2  */
10994     { "vphaddw",	{ XM, Vex, EXx }, 0 },
10995   },
10996   {
10997     /* VEX_W_0F3802_P_2  */
10998     { "vphaddd",	{ XM, Vex, EXx }, 0 },
10999   },
11000   {
11001     /* VEX_W_0F3803_P_2  */
11002     { "vphaddsw",	{ XM, Vex, EXx }, 0 },
11003   },
11004   {
11005     /* VEX_W_0F3804_P_2  */
11006     { "vpmaddubsw",	{ XM, Vex, EXx }, 0 },
11007   },
11008   {
11009     /* VEX_W_0F3805_P_2  */
11010     { "vphsubw",	{ XM, Vex, EXx }, 0 },
11011   },
11012   {
11013     /* VEX_W_0F3806_P_2  */
11014     { "vphsubd",	{ XM, Vex, EXx }, 0 },
11015   },
11016   {
11017     /* VEX_W_0F3807_P_2  */
11018     { "vphsubsw",	{ XM, Vex, EXx }, 0 },
11019   },
11020   {
11021     /* VEX_W_0F3808_P_2  */
11022     { "vpsignb",	{ XM, Vex, EXx }, 0 },
11023   },
11024   {
11025     /* VEX_W_0F3809_P_2  */
11026     { "vpsignw",	{ XM, Vex, EXx }, 0 },
11027   },
11028   {
11029     /* VEX_W_0F380A_P_2  */
11030     { "vpsignd",	{ XM, Vex, EXx }, 0 },
11031   },
11032   {
11033     /* VEX_W_0F380B_P_2  */
11034     { "vpmulhrsw",	{ XM, Vex, EXx }, 0 },
11035   },
11036   {
11037     /* VEX_W_0F380C_P_2  */
11038     { "vpermilps",	{ XM, Vex, EXx }, 0 },
11039   },
11040   {
11041     /* VEX_W_0F380D_P_2  */
11042     { "vpermilpd",	{ XM, Vex, EXx }, 0 },
11043   },
11044   {
11045     /* VEX_W_0F380E_P_2  */
11046     { "vtestps",	{ XM, EXx }, 0 },
11047   },
11048   {
11049     /* VEX_W_0F380F_P_2  */
11050     { "vtestpd",	{ XM, EXx }, 0 },
11051   },
11052   {
11053     /* VEX_W_0F3816_P_2  */
11054     { "vpermps",	{ XM, Vex, EXx }, 0 },
11055   },
11056   {
11057     /* VEX_W_0F3817_P_2 */
11058     { "vptest",		{ XM, EXx }, 0 },
11059   },
11060   {
11061     /* VEX_W_0F3818_P_2 */
11062     { "vbroadcastss",	{ XM, EXxmm_md }, 0 },
11063   },
11064   {
11065     /* VEX_W_0F3819_P_2 */
11066     { "vbroadcastsd",	{ XM, EXxmm_mq }, 0 },
11067   },
11068   {
11069     /* VEX_W_0F381A_P_2_M_0 */
11070     { "vbroadcastf128",	{ XM, Mxmm }, 0 },
11071   },
11072   {
11073     /* VEX_W_0F381C_P_2 */
11074     { "vpabsb",		{ XM, EXx }, 0 },
11075   },
11076   {
11077     /* VEX_W_0F381D_P_2 */
11078     { "vpabsw",		{ XM, EXx }, 0 },
11079   },
11080   {
11081     /* VEX_W_0F381E_P_2 */
11082     { "vpabsd",		{ XM, EXx }, 0 },
11083   },
11084   {
11085     /* VEX_W_0F3820_P_2 */
11086     { "vpmovsxbw",	{ XM, EXxmmq }, 0 },
11087   },
11088   {
11089     /* VEX_W_0F3821_P_2 */
11090     { "vpmovsxbd",	{ XM, EXxmmqd }, 0 },
11091   },
11092   {
11093     /* VEX_W_0F3822_P_2 */
11094     { "vpmovsxbq",	{ XM, EXxmmdw }, 0 },
11095   },
11096   {
11097     /* VEX_W_0F3823_P_2 */
11098     { "vpmovsxwd",	{ XM, EXxmmq }, 0 },
11099   },
11100   {
11101     /* VEX_W_0F3824_P_2 */
11102     { "vpmovsxwq",	{ XM, EXxmmqd }, 0 },
11103   },
11104   {
11105     /* VEX_W_0F3825_P_2 */
11106     { "vpmovsxdq",	{ XM, EXxmmq }, 0 },
11107   },
11108   {
11109     /* VEX_W_0F3828_P_2 */
11110     { "vpmuldq",	{ XM, Vex, EXx }, 0 },
11111   },
11112   {
11113     /* VEX_W_0F3829_P_2 */
11114     { "vpcmpeqq",	{ XM, Vex, EXx }, 0 },
11115   },
11116   {
11117     /* VEX_W_0F382A_P_2_M_0 */
11118     { "vmovntdqa",	{ XM, Mx }, 0 },
11119   },
11120   {
11121     /* VEX_W_0F382B_P_2 */
11122     { "vpackusdw",	{ XM, Vex, EXx }, 0 },
11123   },
11124   {
11125     /* VEX_W_0F382C_P_2_M_0 */
11126     { "vmaskmovps",	{ XM, Vex, Mx }, 0 },
11127   },
11128   {
11129     /* VEX_W_0F382D_P_2_M_0 */
11130     { "vmaskmovpd",	{ XM, Vex, Mx }, 0 },
11131   },
11132   {
11133     /* VEX_W_0F382E_P_2_M_0 */
11134     { "vmaskmovps",	{ Mx, Vex, XM }, 0 },
11135   },
11136   {
11137     /* VEX_W_0F382F_P_2_M_0 */
11138     { "vmaskmovpd",	{ Mx, Vex, XM }, 0 },
11139   },
11140   {
11141     /* VEX_W_0F3830_P_2 */
11142     { "vpmovzxbw",	{ XM, EXxmmq }, 0 },
11143   },
11144   {
11145     /* VEX_W_0F3831_P_2 */
11146     { "vpmovzxbd",	{ XM, EXxmmqd }, 0 },
11147   },
11148   {
11149     /* VEX_W_0F3832_P_2 */
11150     { "vpmovzxbq",	{ XM, EXxmmdw }, 0 },
11151   },
11152   {
11153     /* VEX_W_0F3833_P_2 */
11154     { "vpmovzxwd",	{ XM, EXxmmq }, 0 },
11155   },
11156   {
11157     /* VEX_W_0F3834_P_2 */
11158     { "vpmovzxwq",	{ XM, EXxmmqd }, 0 },
11159   },
11160   {
11161     /* VEX_W_0F3835_P_2 */
11162     { "vpmovzxdq",	{ XM, EXxmmq }, 0 },
11163   },
11164   {
11165     /* VEX_W_0F3836_P_2  */
11166     { "vpermd",		{ XM, Vex, EXx }, 0 },
11167   },
11168   {
11169     /* VEX_W_0F3837_P_2 */
11170     { "vpcmpgtq",	{ XM, Vex, EXx }, 0 },
11171   },
11172   {
11173     /* VEX_W_0F3838_P_2 */
11174     { "vpminsb",	{ XM, Vex, EXx }, 0 },
11175   },
11176   {
11177     /* VEX_W_0F3839_P_2 */
11178     { "vpminsd",	{ XM, Vex, EXx }, 0 },
11179   },
11180   {
11181     /* VEX_W_0F383A_P_2 */
11182     { "vpminuw",	{ XM, Vex, EXx }, 0 },
11183   },
11184   {
11185     /* VEX_W_0F383B_P_2 */
11186     { "vpminud",	{ XM, Vex, EXx }, 0 },
11187   },
11188   {
11189     /* VEX_W_0F383C_P_2 */
11190     { "vpmaxsb",	{ XM, Vex, EXx }, 0 },
11191   },
11192   {
11193     /* VEX_W_0F383D_P_2 */
11194     { "vpmaxsd",	{ XM, Vex, EXx }, 0 },
11195   },
11196   {
11197     /* VEX_W_0F383E_P_2 */
11198     { "vpmaxuw",	{ XM, Vex, EXx }, 0 },
11199   },
11200   {
11201     /* VEX_W_0F383F_P_2 */
11202     { "vpmaxud",	{ XM, Vex, EXx }, 0 },
11203   },
11204   {
11205     /* VEX_W_0F3840_P_2 */
11206     { "vpmulld",	{ XM, Vex, EXx }, 0 },
11207   },
11208   {
11209     /* VEX_W_0F3841_P_2 */
11210     { "vphminposuw",	{ XM, EXx }, 0 },
11211   },
11212   {
11213     /* VEX_W_0F3846_P_2 */
11214     { "vpsravd",	{ XM, Vex, EXx }, 0 },
11215   },
11216   {
11217     /* VEX_W_0F3858_P_2 */
11218     { "vpbroadcastd", { XM, EXxmm_md }, 0 },
11219   },
11220   {
11221     /* VEX_W_0F3859_P_2 */
11222     { "vpbroadcastq",	{ XM, EXxmm_mq }, 0 },
11223   },
11224   {
11225     /* VEX_W_0F385A_P_2_M_0 */
11226     { "vbroadcasti128", { XM, Mxmm }, 0 },
11227   },
11228   {
11229     /* VEX_W_0F3878_P_2 */
11230     { "vpbroadcastb",	{ XM, EXxmm_mb }, 0 },
11231   },
11232   {
11233     /* VEX_W_0F3879_P_2 */
11234     { "vpbroadcastw",	{ XM, EXxmm_mw }, 0 },
11235   },
11236   {
11237     /* VEX_W_0F38DB_P_2 */
11238     { "vaesimc",	{ XM, EXx }, 0 },
11239   },
11240   {
11241     /* VEX_W_0F38DC_P_2 */
11242     { "vaesenc",	{ XM, Vex128, EXx }, 0 },
11243   },
11244   {
11245     /* VEX_W_0F38DD_P_2 */
11246     { "vaesenclast",	{ XM, Vex128, EXx }, 0 },
11247   },
11248   {
11249     /* VEX_W_0F38DE_P_2 */
11250     { "vaesdec",	{ XM, Vex128, EXx }, 0 },
11251   },
11252   {
11253     /* VEX_W_0F38DF_P_2 */
11254     { "vaesdeclast",	{ XM, Vex128, EXx }, 0 },
11255   },
11256   {
11257     /* VEX_W_0F3A00_P_2 */
11258     { Bad_Opcode },
11259     { "vpermq",		{ XM, EXx, Ib }, 0 },
11260   },
11261   {
11262     /* VEX_W_0F3A01_P_2 */
11263     { Bad_Opcode },
11264     { "vpermpd",	{ XM, EXx, Ib }, 0 },
11265   },
11266   {
11267     /* VEX_W_0F3A02_P_2 */
11268     { "vpblendd",	{ XM, Vex, EXx, Ib }, 0 },
11269   },
11270   {
11271     /* VEX_W_0F3A04_P_2 */
11272     { "vpermilps",	{ XM, EXx, Ib }, 0 },
11273   },
11274   {
11275     /* VEX_W_0F3A05_P_2 */
11276     { "vpermilpd",	{ XM, EXx, Ib }, 0 },
11277   },
11278   {
11279     /* VEX_W_0F3A06_P_2 */
11280     { "vperm2f128",	{ XM, Vex256, EXx, Ib }, 0 },
11281   },
11282   {
11283     /* VEX_W_0F3A08_P_2 */
11284     { "vroundps",	{ XM, EXx, Ib }, 0 },
11285   },
11286   {
11287     /* VEX_W_0F3A09_P_2 */
11288     { "vroundpd",	{ XM, EXx, Ib }, 0 },
11289   },
11290   {
11291     /* VEX_W_0F3A0A_P_2 */
11292     { "vroundss",	{ XMScalar, VexScalar, EXdScalar, Ib }, 0 },
11293   },
11294   {
11295     /* VEX_W_0F3A0B_P_2 */
11296     { "vroundsd",	{ XMScalar, VexScalar, EXqScalar, Ib }, 0 },
11297   },
11298   {
11299     /* VEX_W_0F3A0C_P_2 */
11300     { "vblendps",	{ XM, Vex, EXx, Ib }, 0 },
11301   },
11302   {
11303     /* VEX_W_0F3A0D_P_2 */
11304     { "vblendpd",	{ XM, Vex, EXx, Ib }, 0 },
11305   },
11306   {
11307     /* VEX_W_0F3A0E_P_2 */
11308     { "vpblendw",	{ XM, Vex, EXx, Ib }, 0 },
11309   },
11310   {
11311     /* VEX_W_0F3A0F_P_2 */
11312     { "vpalignr",	{ XM, Vex, EXx, Ib }, 0 },
11313   },
11314   {
11315     /* VEX_W_0F3A14_P_2 */
11316     { "vpextrb",	{ Edqb, XM, Ib }, 0 },
11317   },
11318   {
11319     /* VEX_W_0F3A15_P_2 */
11320     { "vpextrw",	{ Edqw, XM, Ib }, 0 },
11321   },
11322   {
11323     /* VEX_W_0F3A18_P_2 */
11324     { "vinsertf128",	{ XM, Vex256, EXxmm, Ib }, 0 },
11325   },
11326   {
11327     /* VEX_W_0F3A19_P_2 */
11328     { "vextractf128",	{ EXxmm, XM, Ib }, 0 },
11329   },
11330   {
11331     /* VEX_W_0F3A20_P_2 */
11332     { "vpinsrb",	{ XM, Vex128, Edqb, Ib }, 0 },
11333   },
11334   {
11335     /* VEX_W_0F3A21_P_2 */
11336     { "vinsertps",	{ XM, Vex128, EXd, Ib }, 0 },
11337   },
11338   {
11339     /* VEX_W_0F3A30_P_2_LEN_0 */
11340     { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11341     { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
11342   },
11343   {
11344     /* VEX_W_0F3A31_P_2_LEN_0 */
11345     { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11346     { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
11347   },
11348   {
11349     /* VEX_W_0F3A32_P_2_LEN_0 */
11350     { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11351     { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
11352   },
11353   {
11354     /* VEX_W_0F3A33_P_2_LEN_0 */
11355     { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11356     { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
11357   },
11358   {
11359     /* VEX_W_0F3A38_P_2 */
11360     { "vinserti128",	{ XM, Vex256, EXxmm, Ib }, 0 },
11361   },
11362   {
11363     /* VEX_W_0F3A39_P_2 */
11364     { "vextracti128",	{ EXxmm, XM, Ib }, 0 },
11365   },
11366   {
11367     /* VEX_W_0F3A40_P_2 */
11368     { "vdpps",		{ XM, Vex, EXx, Ib }, 0 },
11369   },
11370   {
11371     /* VEX_W_0F3A41_P_2 */
11372     { "vdppd",		{ XM, Vex128, EXx, Ib }, 0 },
11373   },
11374   {
11375     /* VEX_W_0F3A42_P_2 */
11376     { "vmpsadbw",	{ XM, Vex, EXx, Ib }, 0 },
11377   },
11378   {
11379     /* VEX_W_0F3A44_P_2 */
11380     { "vpclmulqdq",	{ XM, Vex128, EXx, PCLMUL }, 0 },
11381   },
11382   {
11383     /* VEX_W_0F3A46_P_2 */
11384     { "vperm2i128",	{ XM, Vex256, EXx, Ib }, 0 },
11385   },
11386   {
11387     /* VEX_W_0F3A48_P_2 */
11388     { "vpermil2ps",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11389     { "vpermil2ps",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11390   },
11391   {
11392     /* VEX_W_0F3A49_P_2 */
11393     { "vpermil2pd",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11394     { "vpermil2pd",	{ XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11395   },
11396   {
11397     /* VEX_W_0F3A4A_P_2 */
11398     { "vblendvps",	{ XM, Vex, EXx, XMVexI4 }, 0 },
11399   },
11400   {
11401     /* VEX_W_0F3A4B_P_2 */
11402     { "vblendvpd",	{ XM, Vex, EXx, XMVexI4 }, 0 },
11403   },
11404   {
11405     /* VEX_W_0F3A4C_P_2 */
11406     { "vpblendvb",	{ XM, Vex, EXx, XMVexI4 }, 0 },
11407   },
11408   {
11409     /* VEX_W_0F3A62_P_2 */
11410     { "vpcmpistrm",	{ XM, EXx, Ib }, 0 },
11411   },
11412   {
11413     /* VEX_W_0F3A63_P_2 */
11414     { "vpcmpistri",	{ XM, EXx, Ib }, 0 },
11415   },
11416   {
11417     /* VEX_W_0F3ADF_P_2 */
11418     { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
11419   },
11420 #define NEED_VEX_W_TABLE
11421 #include "i386-dis-evex.h"
11422 #undef NEED_VEX_W_TABLE
11423 };
11424 
11425 static const struct dis386 mod_table[][2] = {
11426   {
11427     /* MOD_8D */
11428     { "leaS",		{ Gv, M }, 0 },
11429   },
11430   {
11431     /* MOD_C6_REG_7 */
11432     { Bad_Opcode },
11433     { RM_TABLE (RM_C6_REG_7) },
11434   },
11435   {
11436     /* MOD_C7_REG_7 */
11437     { Bad_Opcode },
11438     { RM_TABLE (RM_C7_REG_7) },
11439   },
11440   {
11441     /* MOD_FF_REG_3 */
11442     { "Jcall^", { indirEp }, 0 },
11443   },
11444   {
11445     /* MOD_FF_REG_5 */
11446     { "Jjmp^", { indirEp }, 0 },
11447   },
11448   {
11449     /* MOD_0F01_REG_0 */
11450     { X86_64_TABLE (X86_64_0F01_REG_0) },
11451     { RM_TABLE (RM_0F01_REG_0) },
11452   },
11453   {
11454     /* MOD_0F01_REG_1 */
11455     { X86_64_TABLE (X86_64_0F01_REG_1) },
11456     { RM_TABLE (RM_0F01_REG_1) },
11457   },
11458   {
11459     /* MOD_0F01_REG_2 */
11460     { X86_64_TABLE (X86_64_0F01_REG_2) },
11461     { RM_TABLE (RM_0F01_REG_2) },
11462   },
11463   {
11464     /* MOD_0F01_REG_3 */
11465     { X86_64_TABLE (X86_64_0F01_REG_3) },
11466     { RM_TABLE (RM_0F01_REG_3) },
11467   },
11468   {
11469     /* MOD_0F01_REG_5 */
11470     { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
11471     { RM_TABLE (RM_0F01_REG_5) },
11472   },
11473   {
11474     /* MOD_0F01_REG_7 */
11475     { "invlpg",		{ Mb }, 0 },
11476     { RM_TABLE (RM_0F01_REG_7) },
11477   },
11478   {
11479     /* MOD_0F12_PREFIX_0 */
11480     { "movlps",		{ XM, EXq }, PREFIX_OPCODE },
11481     { "movhlps",	{ XM, EXq }, PREFIX_OPCODE },
11482   },
11483   {
11484     /* MOD_0F13 */
11485     { "movlpX",		{ EXq, XM }, PREFIX_OPCODE },
11486   },
11487   {
11488     /* MOD_0F16_PREFIX_0 */
11489     { "movhps",		{ XM, EXq }, 0 },
11490     { "movlhps",	{ XM, EXq }, 0 },
11491   },
11492   {
11493     /* MOD_0F17 */
11494     { "movhpX",		{ EXq, XM }, PREFIX_OPCODE },
11495   },
11496   {
11497     /* MOD_0F18_REG_0 */
11498     { "prefetchnta",	{ Mb }, 0 },
11499   },
11500   {
11501     /* MOD_0F18_REG_1 */
11502     { "prefetcht0",	{ Mb }, 0 },
11503   },
11504   {
11505     /* MOD_0F18_REG_2 */
11506     { "prefetcht1",	{ Mb }, 0 },
11507   },
11508   {
11509     /* MOD_0F18_REG_3 */
11510     { "prefetcht2",	{ Mb }, 0 },
11511   },
11512   {
11513     /* MOD_0F18_REG_4 */
11514     { "nop/reserved",	{ Mb }, 0 },
11515   },
11516   {
11517     /* MOD_0F18_REG_5 */
11518     { "nop/reserved",	{ Mb }, 0 },
11519   },
11520   {
11521     /* MOD_0F18_REG_6 */
11522     { "nop/reserved",	{ Mb }, 0 },
11523   },
11524   {
11525     /* MOD_0F18_REG_7 */
11526     { "nop/reserved",	{ Mb }, 0 },
11527   },
11528   {
11529     /* MOD_0F1A_PREFIX_0 */
11530     { "bndldx",		{ Gbnd, Ev_bnd }, 0 },
11531     { "nopQ",		{ Ev }, 0 },
11532   },
11533   {
11534     /* MOD_0F1B_PREFIX_0 */
11535     { "bndstx",		{ Ev_bnd, Gbnd }, 0 },
11536     { "nopQ",		{ Ev }, 0 },
11537   },
11538   {
11539     /* MOD_0F1B_PREFIX_1 */
11540     { "bndmk",		{ Gbnd, Ev_bnd }, 0 },
11541     { "nopQ",		{ Ev }, 0 },
11542   },
11543   {
11544     /* MOD_0F1E_PREFIX_1 */
11545     { "nopQ",		{ Ev }, 0 },
11546     { REG_TABLE (REG_0F1E_MOD_3) },
11547   },
11548   {
11549     /* MOD_0F24 */
11550     { Bad_Opcode },
11551     { "movL",		{ Rd, Td }, 0 },
11552   },
11553   {
11554     /* MOD_0F26 */
11555     { Bad_Opcode },
11556     { "movL",		{ Td, Rd }, 0 },
11557   },
11558   {
11559     /* MOD_0F2B_PREFIX_0 */
11560     {"movntps",		{ Mx, XM }, PREFIX_OPCODE },
11561   },
11562   {
11563     /* MOD_0F2B_PREFIX_1 */
11564     {"movntss",		{ Md, XM }, PREFIX_OPCODE },
11565   },
11566   {
11567     /* MOD_0F2B_PREFIX_2 */
11568     {"movntpd",		{ Mx, XM }, PREFIX_OPCODE },
11569   },
11570   {
11571     /* MOD_0F2B_PREFIX_3 */
11572     {"movntsd",		{ Mq, XM }, PREFIX_OPCODE },
11573   },
11574   {
11575     /* MOD_0F51 */
11576     { Bad_Opcode },
11577     { "movmskpX",	{ Gdq, XS }, PREFIX_OPCODE },
11578   },
11579   {
11580     /* MOD_0F71_REG_2 */
11581     { Bad_Opcode },
11582     { "psrlw",		{ MS, Ib }, 0 },
11583   },
11584   {
11585     /* MOD_0F71_REG_4 */
11586     { Bad_Opcode },
11587     { "psraw",		{ MS, Ib }, 0 },
11588   },
11589   {
11590     /* MOD_0F71_REG_6 */
11591     { Bad_Opcode },
11592     { "psllw",		{ MS, Ib }, 0 },
11593   },
11594   {
11595     /* MOD_0F72_REG_2 */
11596     { Bad_Opcode },
11597     { "psrld",		{ MS, Ib }, 0 },
11598   },
11599   {
11600     /* MOD_0F72_REG_4 */
11601     { Bad_Opcode },
11602     { "psrad",		{ MS, Ib }, 0 },
11603   },
11604   {
11605     /* MOD_0F72_REG_6 */
11606     { Bad_Opcode },
11607     { "pslld",		{ MS, Ib }, 0 },
11608   },
11609   {
11610     /* MOD_0F73_REG_2 */
11611     { Bad_Opcode },
11612     { "psrlq",		{ MS, Ib }, 0 },
11613   },
11614   {
11615     /* MOD_0F73_REG_3 */
11616     { Bad_Opcode },
11617     { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11618   },
11619   {
11620     /* MOD_0F73_REG_6 */
11621     { Bad_Opcode },
11622     { "psllq",		{ MS, Ib }, 0 },
11623   },
11624   {
11625     /* MOD_0F73_REG_7 */
11626     { Bad_Opcode },
11627     { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11628   },
11629   {
11630     /* MOD_0FAE_REG_0 */
11631     { "fxsave",		{ FXSAVE }, 0 },
11632     { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
11633   },
11634   {
11635     /* MOD_0FAE_REG_1 */
11636     { "fxrstor",	{ FXSAVE }, 0 },
11637     { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
11638   },
11639   {
11640     /* MOD_0FAE_REG_2 */
11641     { "ldmxcsr",	{ Md }, 0 },
11642     { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
11643   },
11644   {
11645     /* MOD_0FAE_REG_3 */
11646     { "stmxcsr",	{ Md }, 0 },
11647     { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
11648   },
11649   {
11650     /* MOD_0FAE_REG_4 */
11651     { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
11652     { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
11653   },
11654   {
11655     /* MOD_0FAE_REG_5 */
11656     { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
11657     { RM_TABLE (RM_0FAE_REG_5) },
11658   },
11659   {
11660     /* MOD_0FAE_REG_6 */
11661     { PREFIX_TABLE (PREFIX_0FAE_REG_6) },
11662     { RM_TABLE (RM_0FAE_REG_6) },
11663   },
11664   {
11665     /* MOD_0FAE_REG_7 */
11666     { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
11667     { RM_TABLE (RM_0FAE_REG_7) },
11668   },
11669   {
11670     /* MOD_0FB2 */
11671     { "lssS",		{ Gv, Mp }, 0 },
11672   },
11673   {
11674     /* MOD_0FB4 */
11675     { "lfsS",		{ Gv, Mp }, 0 },
11676   },
11677   {
11678     /* MOD_0FB5 */
11679     { "lgsS",		{ Gv, Mp }, 0 },
11680   },
11681   {
11682     /* MOD_0FC3 */
11683     { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11684   },
11685   {
11686     /* MOD_0FC7_REG_3 */
11687     { "xrstors",	{ FXSAVE }, 0 },
11688   },
11689   {
11690     /* MOD_0FC7_REG_4 */
11691     { "xsavec",		{ FXSAVE }, 0 },
11692   },
11693   {
11694     /* MOD_0FC7_REG_5 */
11695     { "xsaves",		{ FXSAVE }, 0 },
11696   },
11697   {
11698     /* MOD_0FC7_REG_6 */
11699     { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11700     { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
11701   },
11702   {
11703     /* MOD_0FC7_REG_7 */
11704     { "vmptrst",	{ Mq }, 0 },
11705     { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
11706   },
11707   {
11708     /* MOD_0FD7 */
11709     { Bad_Opcode },
11710     { "pmovmskb",	{ Gdq, MS }, 0 },
11711   },
11712   {
11713     /* MOD_0FE7_PREFIX_2 */
11714     { "movntdq",	{ Mx, XM }, 0 },
11715   },
11716   {
11717     /* MOD_0FF0_PREFIX_3 */
11718     { "lddqu",		{ XM, M }, 0 },
11719   },
11720   {
11721     /* MOD_0F382A_PREFIX_2 */
11722     { "movntdqa",	{ XM, Mx }, 0 },
11723   },
11724   {
11725     /* MOD_0F38F5_PREFIX_2 */
11726     { "wrussK",		{ M, Gdq }, PREFIX_OPCODE },
11727   },
11728   {
11729     /* MOD_0F38F6_PREFIX_0 */
11730     { "wrssK",		{ M, Gdq }, PREFIX_OPCODE },
11731   },
11732   {
11733     /* MOD_62_32BIT */
11734     { "bound{S|}",	{ Gv, Ma }, 0 },
11735     { EVEX_TABLE (EVEX_0F) },
11736   },
11737   {
11738     /* MOD_C4_32BIT */
11739     { "lesS",		{ Gv, Mp }, 0 },
11740     { VEX_C4_TABLE (VEX_0F) },
11741   },
11742   {
11743     /* MOD_C5_32BIT */
11744     { "ldsS",		{ Gv, Mp }, 0 },
11745     { VEX_C5_TABLE (VEX_0F) },
11746   },
11747   {
11748     /* MOD_VEX_0F12_PREFIX_0 */
11749     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11750     { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
11751   },
11752   {
11753     /* MOD_VEX_0F13 */
11754     { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
11755   },
11756   {
11757     /* MOD_VEX_0F16_PREFIX_0 */
11758     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11759     { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
11760   },
11761   {
11762     /* MOD_VEX_0F17 */
11763     { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
11764   },
11765   {
11766     /* MOD_VEX_0F2B */
11767     { VEX_W_TABLE (VEX_W_0F2B_M_0) },
11768   },
11769   {
11770     /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11771     { Bad_Opcode },
11772     { "kandw",          { MaskG, MaskVex, MaskR }, 0 },
11773   },
11774   {
11775     /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11776     { Bad_Opcode },
11777     { "kandq",          { MaskG, MaskVex, MaskR }, 0 },
11778   },
11779   {
11780     /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11781     { Bad_Opcode },
11782     { "kandb",          { MaskG, MaskVex, MaskR }, 0 },
11783   },
11784   {
11785     /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11786     { Bad_Opcode },
11787     { "kandd",          { MaskG, MaskVex, MaskR }, 0 },
11788   },
11789   {
11790     /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11791     { Bad_Opcode },
11792     { "kandnw",         { MaskG, MaskVex, MaskR }, 0 },
11793   },
11794   {
11795     /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
11796     { Bad_Opcode },
11797     { "kandnq",         { MaskG, MaskVex, MaskR }, 0 },
11798   },
11799   {
11800     /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
11801     { Bad_Opcode },
11802     { "kandnb",         { MaskG, MaskVex, MaskR }, 0 },
11803   },
11804   {
11805     /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
11806     { Bad_Opcode },
11807     { "kandnd",         { MaskG, MaskVex, MaskR }, 0 },
11808   },
11809   {
11810     /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
11811     { Bad_Opcode },
11812     { "knotw",          { MaskG, MaskR }, 0 },
11813   },
11814   {
11815     /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
11816     { Bad_Opcode },
11817     { "knotq",          { MaskG, MaskR }, 0 },
11818   },
11819   {
11820     /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
11821     { Bad_Opcode },
11822     { "knotb",          { MaskG, MaskR }, 0 },
11823   },
11824   {
11825     /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
11826     { Bad_Opcode },
11827     { "knotd",          { MaskG, MaskR }, 0 },
11828   },
11829   {
11830     /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
11831     { Bad_Opcode },
11832     { "korw",       { MaskG, MaskVex, MaskR }, 0 },
11833   },
11834   {
11835     /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
11836     { Bad_Opcode },
11837     { "korq",       { MaskG, MaskVex, MaskR }, 0 },
11838   },
11839   {
11840     /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
11841     { Bad_Opcode },
11842     { "korb",       { MaskG, MaskVex, MaskR }, 0 },
11843   },
11844   {
11845     /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
11846     { Bad_Opcode },
11847     { "kord",       { MaskG, MaskVex, MaskR }, 0 },
11848   },
11849  {
11850     /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
11851     { Bad_Opcode },
11852     { "kxnorw",     { MaskG, MaskVex, MaskR }, 0 },
11853   },
11854   {
11855     /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
11856     { Bad_Opcode },
11857     { "kxnorq",     { MaskG, MaskVex, MaskR }, 0 },
11858   },
11859   {
11860     /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
11861     { Bad_Opcode },
11862     { "kxnorb",     { MaskG, MaskVex, MaskR }, 0 },
11863   },
11864   {
11865     /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
11866     { Bad_Opcode },
11867     { "kxnord",     { MaskG, MaskVex, MaskR }, 0 },
11868   },
11869   {
11870     /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
11871     { Bad_Opcode },
11872     { "kxorw",      { MaskG, MaskVex, MaskR }, 0 },
11873   },
11874   {
11875     /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
11876     { Bad_Opcode },
11877     { "kxorq",      { MaskG, MaskVex, MaskR }, 0 },
11878   },
11879   {
11880     /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
11881     { Bad_Opcode },
11882     { "kxorb",      { MaskG, MaskVex, MaskR }, 0 },
11883   },
11884   {
11885     /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
11886     { Bad_Opcode },
11887     { "kxord",      { MaskG, MaskVex, MaskR }, 0 },
11888   },
11889   {
11890     /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
11891     { Bad_Opcode },
11892     { "kaddw",          { MaskG, MaskVex, MaskR }, 0 },
11893   },
11894   {
11895     /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
11896     { Bad_Opcode },
11897     { "kaddq",          { MaskG, MaskVex, MaskR }, 0 },
11898   },
11899   {
11900     /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
11901     { Bad_Opcode },
11902     { "kaddb",          { MaskG, MaskVex, MaskR }, 0 },
11903   },
11904   {
11905     /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
11906     { Bad_Opcode },
11907     { "kaddd",          { MaskG, MaskVex, MaskR }, 0 },
11908   },
11909   {
11910     /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
11911     { Bad_Opcode },
11912     { "kunpckwd",   { MaskG, MaskVex, MaskR }, 0 },
11913   },
11914   {
11915     /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
11916     { Bad_Opcode },
11917     { "kunpckdq",   { MaskG, MaskVex, MaskR }, 0 },
11918   },
11919   {
11920     /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
11921     { Bad_Opcode },
11922     { "kunpckbw",   { MaskG, MaskVex, MaskR }, 0 },
11923   },
11924   {
11925     /* MOD_VEX_0F50 */
11926     { Bad_Opcode },
11927     { VEX_W_TABLE (VEX_W_0F50_M_0) },
11928   },
11929   {
11930     /* MOD_VEX_0F71_REG_2 */
11931     { Bad_Opcode },
11932     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
11933   },
11934   {
11935     /* MOD_VEX_0F71_REG_4 */
11936     { Bad_Opcode },
11937     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
11938   },
11939   {
11940     /* MOD_VEX_0F71_REG_6 */
11941     { Bad_Opcode },
11942     { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
11943   },
11944   {
11945     /* MOD_VEX_0F72_REG_2 */
11946     { Bad_Opcode },
11947     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
11948   },
11949   {
11950     /* MOD_VEX_0F72_REG_4 */
11951     { Bad_Opcode },
11952     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
11953   },
11954   {
11955     /* MOD_VEX_0F72_REG_6 */
11956     { Bad_Opcode },
11957     { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
11958   },
11959   {
11960     /* MOD_VEX_0F73_REG_2 */
11961     { Bad_Opcode },
11962     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
11963   },
11964   {
11965     /* MOD_VEX_0F73_REG_3 */
11966     { Bad_Opcode },
11967     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
11968   },
11969   {
11970     /* MOD_VEX_0F73_REG_6 */
11971     { Bad_Opcode },
11972     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
11973   },
11974   {
11975     /* MOD_VEX_0F73_REG_7 */
11976     { Bad_Opcode },
11977     { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
11978   },
11979   {
11980     /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
11981     { "kmovw",		{ Ew, MaskG }, 0 },
11982     { Bad_Opcode },
11983   },
11984   {
11985     /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
11986     { "kmovq",		{ Eq, MaskG }, 0 },
11987     { Bad_Opcode },
11988   },
11989   {
11990     /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
11991     { "kmovb",		{ Eb, MaskG }, 0 },
11992     { Bad_Opcode },
11993   },
11994   {
11995     /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
11996     { "kmovd",		{ Ed, MaskG }, 0 },
11997     { Bad_Opcode },
11998   },
11999   {
12000     /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12001     { Bad_Opcode },
12002     { "kmovw",		{ MaskG, Rdq }, 0 },
12003   },
12004   {
12005     /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12006     { Bad_Opcode },
12007     { "kmovb",		{ MaskG, Rdq }, 0 },
12008   },
12009   {
12010     /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12011     { Bad_Opcode },
12012     { "kmovd",		{ MaskG, Rdq }, 0 },
12013   },
12014   {
12015     /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12016     { Bad_Opcode },
12017     { "kmovq",		{ MaskG, Rdq }, 0 },
12018   },
12019   {
12020     /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12021     { Bad_Opcode },
12022     { "kmovw",		{ Gdq, MaskR }, 0 },
12023   },
12024   {
12025     /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12026     { Bad_Opcode },
12027     { "kmovb",		{ Gdq, MaskR }, 0 },
12028   },
12029   {
12030     /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12031     { Bad_Opcode },
12032     { "kmovd",		{ Gdq, MaskR }, 0 },
12033   },
12034   {
12035     /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12036     { Bad_Opcode },
12037     { "kmovq",		{ Gdq, MaskR }, 0 },
12038   },
12039   {
12040     /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12041     { Bad_Opcode },
12042     { "kortestw", { MaskG, MaskR }, 0 },
12043   },
12044   {
12045     /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12046     { Bad_Opcode },
12047     { "kortestq", { MaskG, MaskR }, 0 },
12048   },
12049   {
12050     /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12051     { Bad_Opcode },
12052     { "kortestb", { MaskG, MaskR }, 0 },
12053   },
12054   {
12055     /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12056     { Bad_Opcode },
12057     { "kortestd", { MaskG, MaskR }, 0 },
12058   },
12059   {
12060     /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12061     { Bad_Opcode },
12062     { "ktestw", { MaskG, MaskR }, 0 },
12063   },
12064   {
12065     /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12066     { Bad_Opcode },
12067     { "ktestq", { MaskG, MaskR }, 0 },
12068   },
12069   {
12070     /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12071     { Bad_Opcode },
12072     { "ktestb", { MaskG, MaskR }, 0 },
12073   },
12074   {
12075     /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12076     { Bad_Opcode },
12077     { "ktestd", { MaskG, MaskR }, 0 },
12078   },
12079   {
12080     /* MOD_VEX_0FAE_REG_2 */
12081     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
12082   },
12083   {
12084     /* MOD_VEX_0FAE_REG_3 */
12085     { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
12086   },
12087   {
12088     /* MOD_VEX_0FD7_PREFIX_2 */
12089     { Bad_Opcode },
12090     { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
12091   },
12092   {
12093     /* MOD_VEX_0FE7_PREFIX_2 */
12094     { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
12095   },
12096   {
12097     /* MOD_VEX_0FF0_PREFIX_3 */
12098     { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
12099   },
12100   {
12101     /* MOD_VEX_0F381A_PREFIX_2 */
12102     { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
12103   },
12104   {
12105     /* MOD_VEX_0F382A_PREFIX_2 */
12106     { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
12107   },
12108   {
12109     /* MOD_VEX_0F382C_PREFIX_2 */
12110     { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
12111   },
12112   {
12113     /* MOD_VEX_0F382D_PREFIX_2 */
12114     { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
12115   },
12116   {
12117     /* MOD_VEX_0F382E_PREFIX_2 */
12118     { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
12119   },
12120   {
12121     /* MOD_VEX_0F382F_PREFIX_2 */
12122     { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
12123   },
12124   {
12125     /* MOD_VEX_0F385A_PREFIX_2 */
12126     { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12127   },
12128   {
12129     /* MOD_VEX_0F388C_PREFIX_2 */
12130     { "vpmaskmov%LW",	{ XM, Vex, Mx }, 0 },
12131   },
12132   {
12133     /* MOD_VEX_0F388E_PREFIX_2 */
12134     { "vpmaskmov%LW",	{ Mx, Vex, XM }, 0 },
12135   },
12136   {
12137     /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12138     { Bad_Opcode },
12139     { "kshiftrb",       { MaskG, MaskR, Ib }, 0 },
12140   },
12141   {
12142     /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12143     { Bad_Opcode },
12144     { "kshiftrw",       { MaskG, MaskR, Ib }, 0 },
12145   },
12146   {
12147     /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12148     { Bad_Opcode },
12149     { "kshiftrd",       { MaskG, MaskR, Ib }, 0 },
12150   },
12151   {
12152     /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12153     { Bad_Opcode },
12154     { "kshiftrq",       { MaskG, MaskR, Ib }, 0 },
12155   },
12156   {
12157     /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12158     { Bad_Opcode },
12159     { "kshiftlb",       { MaskG, MaskR, Ib }, 0 },
12160   },
12161   {
12162     /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12163     { Bad_Opcode },
12164     { "kshiftlw",       { MaskG, MaskR, Ib }, 0 },
12165   },
12166   {
12167     /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12168     { Bad_Opcode },
12169     { "kshiftld",       { MaskG, MaskR, Ib }, 0 },
12170   },
12171   {
12172     /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12173     { Bad_Opcode },
12174     { "kshiftlq",       { MaskG, MaskR, Ib }, 0 },
12175   },
12176 #define NEED_MOD_TABLE
12177 #include "i386-dis-evex.h"
12178 #undef NEED_MOD_TABLE
12179 };
12180 
12181 static const struct dis386 rm_table[][8] = {
12182   {
12183     /* RM_C6_REG_7 */
12184     { "xabort",		{ Skip_MODRM, Ib }, 0 },
12185   },
12186   {
12187     /* RM_C7_REG_7 */
12188     { "xbeginT",	{ Skip_MODRM, Jv }, 0 },
12189   },
12190   {
12191     /* RM_0F01_REG_0 */
12192     { Bad_Opcode },
12193     { "vmcall",		{ Skip_MODRM }, 0 },
12194     { "vmlaunch",	{ Skip_MODRM }, 0 },
12195     { "vmresume",	{ Skip_MODRM }, 0 },
12196     { "vmxoff",		{ Skip_MODRM }, 0 },
12197   },
12198   {
12199     /* RM_0F01_REG_1 */
12200     { "monitor",	{ { OP_Monitor, 0 } }, 0 },
12201     { "mwait",		{ { OP_Mwait, 0 } }, 0 },
12202     { "clac",		{ Skip_MODRM }, 0 },
12203     { "stac",		{ Skip_MODRM }, 0 },
12204     { Bad_Opcode },
12205     { Bad_Opcode },
12206     { Bad_Opcode },
12207     { "encls",		{ Skip_MODRM }, 0 },
12208   },
12209   {
12210     /* RM_0F01_REG_2 */
12211     { "xgetbv",		{ Skip_MODRM }, 0 },
12212     { "xsetbv",		{ Skip_MODRM }, 0 },
12213     { Bad_Opcode },
12214     { Bad_Opcode },
12215     { "vmfunc",		{ Skip_MODRM }, 0 },
12216     { "xend",		{ Skip_MODRM }, 0 },
12217     { "xtest",		{ Skip_MODRM }, 0 },
12218     { "enclu",		{ Skip_MODRM }, 0 },
12219   },
12220   {
12221     /* RM_0F01_REG_3 */
12222     { "vmrun",		{ Skip_MODRM }, 0 },
12223     { "vmmcall",	{ Skip_MODRM }, 0 },
12224     { "vmload",		{ Skip_MODRM }, 0 },
12225     { "vmsave",		{ Skip_MODRM }, 0 },
12226     { "stgi",		{ Skip_MODRM }, 0 },
12227     { "clgi",		{ Skip_MODRM }, 0 },
12228     { "skinit",		{ Skip_MODRM }, 0 },
12229     { "invlpga",	{ Skip_MODRM }, 0 },
12230   },
12231   {
12232     /* RM_0F01_REG_5 */
12233     { Bad_Opcode },
12234     { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_1) },
12235     { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
12236     { Bad_Opcode },
12237     { Bad_Opcode },
12238     { Bad_Opcode },
12239     { "rdpkru",		{ Skip_MODRM }, 0 },
12240     { "wrpkru",		{ Skip_MODRM }, 0 },
12241   },
12242   {
12243     /* RM_0F01_REG_7 */
12244     { "swapgs",		{ Skip_MODRM }, 0  },
12245     { "rdtscp",		{ Skip_MODRM }, 0  },
12246     { "monitorx",	{ { OP_Monitor, 0 } }, 0  },
12247     { "mwaitx",		{ { OP_Mwaitx,  0 } }, 0  },
12248     { "clzero",		{ Skip_MODRM }, 0  },
12249   },
12250   {
12251     /* RM_0F1E_MOD_3_REG_7 */
12252     { "nopQ",		{ Ev }, 0 },
12253     { "nopQ",		{ Ev }, 0 },
12254     { "endbr64",	{ Skip_MODRM },  PREFIX_OPCODE },
12255     { "endbr32",	{ Skip_MODRM },  PREFIX_OPCODE },
12256     { "nopQ",		{ Ev }, 0 },
12257     { "nopQ",		{ Ev }, 0 },
12258     { "nopQ",		{ Ev }, 0 },
12259     { "nopQ",		{ Ev }, 0 },
12260   },
12261   {
12262     /* RM_0FAE_REG_5 */
12263     { "lfence",		{ Skip_MODRM }, 0 },
12264   },
12265   {
12266     /* RM_0FAE_REG_6 */
12267     { "mfence",		{ Skip_MODRM }, 0 },
12268   },
12269   {
12270     /* RM_0FAE_REG_7 */
12271     { "sfence",		{ Skip_MODRM }, 0 },
12272 
12273   },
12274 };
12275 
12276 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12277 
12278 /* We use the high bit to indicate different name for the same
12279    prefix.  */
12280 #define REP_PREFIX	(0xf3 | 0x100)
12281 #define XACQUIRE_PREFIX	(0xf2 | 0x200)
12282 #define XRELEASE_PREFIX	(0xf3 | 0x400)
12283 #define BND_PREFIX	(0xf2 | 0x400)
12284 
12285 static int
12286 ckprefix (void)
12287 {
12288   int newrex, i, length;
12289   rex = 0;
12290   rex_ignored = 0;
12291   prefixes = 0;
12292   used_prefixes = 0;
12293   rex_used = 0;
12294   last_lock_prefix = -1;
12295   last_repz_prefix = -1;
12296   last_repnz_prefix = -1;
12297   last_data_prefix = -1;
12298   last_addr_prefix = -1;
12299   last_rex_prefix = -1;
12300   last_seg_prefix = -1;
12301   fwait_prefix = -1;
12302   active_seg_prefix = 0;
12303   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12304     all_prefixes[i] = 0;
12305   i = 0;
12306   length = 0;
12307   /* The maximum instruction length is 15bytes.  */
12308   while (length < MAX_CODE_LENGTH - 1)
12309     {
12310       FETCH_DATA (the_info, codep + 1);
12311       newrex = 0;
12312       switch (*codep)
12313 	{
12314 	/* REX prefixes family.  */
12315 	case 0x40:
12316 	case 0x41:
12317 	case 0x42:
12318 	case 0x43:
12319 	case 0x44:
12320 	case 0x45:
12321 	case 0x46:
12322 	case 0x47:
12323 	case 0x48:
12324 	case 0x49:
12325 	case 0x4a:
12326 	case 0x4b:
12327 	case 0x4c:
12328 	case 0x4d:
12329 	case 0x4e:
12330 	case 0x4f:
12331 	  if (address_mode == mode_64bit)
12332 	    newrex = *codep;
12333 	  else
12334 	    return 1;
12335 	  last_rex_prefix = i;
12336 	  break;
12337 	case 0xf3:
12338 	  prefixes |= PREFIX_REPZ;
12339 	  last_repz_prefix = i;
12340 	  break;
12341 	case 0xf2:
12342 	  prefixes |= PREFIX_REPNZ;
12343 	  last_repnz_prefix = i;
12344 	  break;
12345 	case 0xf0:
12346 	  prefixes |= PREFIX_LOCK;
12347 	  last_lock_prefix = i;
12348 	  break;
12349 	case 0x2e:
12350 	  prefixes |= PREFIX_CS;
12351 	  last_seg_prefix = i;
12352 	  active_seg_prefix = PREFIX_CS;
12353 	  break;
12354 	case 0x36:
12355 	  prefixes |= PREFIX_SS;
12356 	  last_seg_prefix = i;
12357 	  active_seg_prefix = PREFIX_SS;
12358 	  break;
12359 	case 0x3e:
12360 	  prefixes |= PREFIX_DS;
12361 	  last_seg_prefix = i;
12362 	  active_seg_prefix = PREFIX_DS;
12363 	  break;
12364 	case 0x26:
12365 	  prefixes |= PREFIX_ES;
12366 	  last_seg_prefix = i;
12367 	  active_seg_prefix = PREFIX_ES;
12368 	  break;
12369 	case 0x64:
12370 	  prefixes |= PREFIX_FS;
12371 	  last_seg_prefix = i;
12372 	  active_seg_prefix = PREFIX_FS;
12373 	  break;
12374 	case 0x65:
12375 	  prefixes |= PREFIX_GS;
12376 	  last_seg_prefix = i;
12377 	  active_seg_prefix = PREFIX_GS;
12378 	  break;
12379 	case 0x66:
12380 	  prefixes |= PREFIX_DATA;
12381 	  last_data_prefix = i;
12382 	  break;
12383 	case 0x67:
12384 	  prefixes |= PREFIX_ADDR;
12385 	  last_addr_prefix = i;
12386 	  break;
12387 	case FWAIT_OPCODE:
12388 	  /* fwait is really an instruction.  If there are prefixes
12389 	     before the fwait, they belong to the fwait, *not* to the
12390 	     following instruction.  */
12391 	  fwait_prefix = i;
12392 	  if (prefixes || rex)
12393 	    {
12394 	      prefixes |= PREFIX_FWAIT;
12395 	      codep++;
12396 	      /* This ensures that the previous REX prefixes are noticed
12397 		 as unused prefixes, as in the return case below.  */
12398 	      rex_used = rex;
12399 	      return 1;
12400 	    }
12401 	  prefixes = PREFIX_FWAIT;
12402 	  break;
12403 	default:
12404 	  return 1;
12405 	}
12406       /* Rex is ignored when followed by another prefix.  */
12407       if (rex)
12408 	{
12409 	  rex_used = rex;
12410 	  return 1;
12411 	}
12412       if (*codep != FWAIT_OPCODE)
12413 	all_prefixes[i++] = *codep;
12414       rex = newrex;
12415       codep++;
12416       length++;
12417     }
12418   return 0;
12419 }
12420 
12421 /* Return the name of the prefix byte PREF, or NULL if PREF is not a
12422    prefix byte.  */
12423 
12424 static const char *
12425 prefix_name (int pref, int sizeflag)
12426 {
12427   static const char *rexes [16] =
12428     {
12429       "rex",		/* 0x40 */
12430       "rex.B",		/* 0x41 */
12431       "rex.X",		/* 0x42 */
12432       "rex.XB",		/* 0x43 */
12433       "rex.R",		/* 0x44 */
12434       "rex.RB",		/* 0x45 */
12435       "rex.RX",		/* 0x46 */
12436       "rex.RXB",	/* 0x47 */
12437       "rex.W",		/* 0x48 */
12438       "rex.WB",		/* 0x49 */
12439       "rex.WX",		/* 0x4a */
12440       "rex.WXB",	/* 0x4b */
12441       "rex.WR",		/* 0x4c */
12442       "rex.WRB",	/* 0x4d */
12443       "rex.WRX",	/* 0x4e */
12444       "rex.WRXB",	/* 0x4f */
12445     };
12446 
12447   switch (pref)
12448     {
12449     /* REX prefixes family.  */
12450     case 0x40:
12451     case 0x41:
12452     case 0x42:
12453     case 0x43:
12454     case 0x44:
12455     case 0x45:
12456     case 0x46:
12457     case 0x47:
12458     case 0x48:
12459     case 0x49:
12460     case 0x4a:
12461     case 0x4b:
12462     case 0x4c:
12463     case 0x4d:
12464     case 0x4e:
12465     case 0x4f:
12466       return rexes [pref - 0x40];
12467     case 0xf3:
12468       return "repz";
12469     case 0xf2:
12470       return "repnz";
12471     case 0xf0:
12472       return "lock";
12473     case 0x2e:
12474       return "cs";
12475     case 0x36:
12476       return "ss";
12477     case 0x3e:
12478       return "ds";
12479     case 0x26:
12480       return "es";
12481     case 0x64:
12482       return "fs";
12483     case 0x65:
12484       return "gs";
12485     case 0x66:
12486       return (sizeflag & DFLAG) ? "data16" : "data32";
12487     case 0x67:
12488       if (address_mode == mode_64bit)
12489 	return (sizeflag & AFLAG) ? "addr32" : "addr64";
12490       else
12491 	return (sizeflag & AFLAG) ? "addr16" : "addr32";
12492     case FWAIT_OPCODE:
12493       return "fwait";
12494     case REP_PREFIX:
12495       return "rep";
12496     case XACQUIRE_PREFIX:
12497       return "xacquire";
12498     case XRELEASE_PREFIX:
12499       return "xrelease";
12500     case BND_PREFIX:
12501       return "bnd";
12502     default:
12503       return NULL;
12504     }
12505 }
12506 
12507 static char op_out[MAX_OPERANDS][100];
12508 static int op_ad, op_index[MAX_OPERANDS];
12509 static int two_source_ops;
12510 static bfd_vma op_address[MAX_OPERANDS];
12511 static bfd_vma op_riprel[MAX_OPERANDS];
12512 static bfd_vma start_pc;
12513 
12514 /*
12515  *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12516  *   (see topic "Redundant prefixes" in the "Differences from 8086"
12517  *   section of the "Virtual 8086 Mode" chapter.)
12518  * 'pc' should be the address of this instruction, it will
12519  *   be used to print the target address if this is a relative jump or call
12520  * The function returns the length of this instruction in bytes.
12521  */
12522 
12523 static char intel_syntax;
12524 static char intel_mnemonic = !SYSV386_COMPAT;
12525 static char open_char;
12526 static char close_char;
12527 static char separator_char;
12528 static char scale_char;
12529 
12530 enum x86_64_isa
12531 {
12532   amd64 = 0,
12533   intel64
12534 };
12535 
12536 static enum x86_64_isa isa64;
12537 
12538 /* Here for backwards compatibility.  When gdb stops using
12539    print_insn_i386_att and print_insn_i386_intel these functions can
12540    disappear, and print_insn_i386 be merged into print_insn.  */
12541 int
12542 print_insn_i386_att (bfd_vma pc, disassemble_info *info)
12543 {
12544   intel_syntax = 0;
12545 
12546   return print_insn (pc, info);
12547 }
12548 
12549 int
12550 print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
12551 {
12552   intel_syntax = 1;
12553 
12554   return print_insn (pc, info);
12555 }
12556 
12557 int
12558 print_insn_i386 (bfd_vma pc, disassemble_info *info)
12559 {
12560   intel_syntax = -1;
12561 
12562   return print_insn (pc, info);
12563 }
12564 
12565 void
12566 print_i386_disassembler_options (FILE *stream)
12567 {
12568   fprintf (stream, _("\n\
12569 The following i386/x86-64 specific disassembler options are supported for use\n\
12570 with the -M switch (multiple options should be separated by commas):\n"));
12571 
12572   fprintf (stream, _("  x86-64      Disassemble in 64bit mode\n"));
12573   fprintf (stream, _("  i386        Disassemble in 32bit mode\n"));
12574   fprintf (stream, _("  i8086       Disassemble in 16bit mode\n"));
12575   fprintf (stream, _("  att         Display instruction in AT&T syntax\n"));
12576   fprintf (stream, _("  intel       Display instruction in Intel syntax\n"));
12577   fprintf (stream, _("  att-mnemonic\n"
12578 		     "              Display instruction in AT&T mnemonic\n"));
12579   fprintf (stream, _("  intel-mnemonic\n"
12580 		     "              Display instruction in Intel mnemonic\n"));
12581   fprintf (stream, _("  addr64      Assume 64bit address size\n"));
12582   fprintf (stream, _("  addr32      Assume 32bit address size\n"));
12583   fprintf (stream, _("  addr16      Assume 16bit address size\n"));
12584   fprintf (stream, _("  data32      Assume 32bit data size\n"));
12585   fprintf (stream, _("  data16      Assume 16bit data size\n"));
12586   fprintf (stream, _("  suffix      Always display instruction suffix in AT&T syntax\n"));
12587   fprintf (stream, _("  amd64       Display instruction in AMD64 ISA\n"));
12588   fprintf (stream, _("  intel64     Display instruction in Intel64 ISA\n"));
12589 }
12590 
12591 /* Bad opcode.  */
12592 static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
12593 
12594 /* Get a pointer to struct dis386 with a valid name.  */
12595 
12596 static const struct dis386 *
12597 get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
12598 {
12599   int vindex, vex_table_index;
12600 
12601   if (dp->name != NULL)
12602     return dp;
12603 
12604   switch (dp->op[0].bytemode)
12605     {
12606     case USE_REG_TABLE:
12607       dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12608       break;
12609 
12610     case USE_MOD_TABLE:
12611       vindex = modrm.mod == 0x3 ? 1 : 0;
12612       dp = &mod_table[dp->op[1].bytemode][vindex];
12613       break;
12614 
12615     case USE_RM_TABLE:
12616       dp = &rm_table[dp->op[1].bytemode][modrm.rm];
12617       break;
12618 
12619     case USE_PREFIX_TABLE:
12620       if (need_vex)
12621 	{
12622 	  /* The prefix in VEX is implicit.  */
12623 	  switch (vex.prefix)
12624 	    {
12625 	    case 0:
12626 	      vindex = 0;
12627 	      break;
12628 	    case REPE_PREFIX_OPCODE:
12629 	      vindex = 1;
12630 	      break;
12631 	    case DATA_PREFIX_OPCODE:
12632 	      vindex = 2;
12633 	      break;
12634 	    case REPNE_PREFIX_OPCODE:
12635 	      vindex = 3;
12636 	      break;
12637 	    default:
12638 	      abort ();
12639 	      break;
12640 	    }
12641 	}
12642       else
12643 	{
12644 	  int last_prefix = -1;
12645 	  int prefix = 0;
12646 	  vindex = 0;
12647 	  /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12648 	     When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12649 	     last one wins.  */
12650 	  if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
12651 	    {
12652 	      if (last_repz_prefix > last_repnz_prefix)
12653 		{
12654 		  vindex = 1;
12655 		  prefix = PREFIX_REPZ;
12656 		  last_prefix = last_repz_prefix;
12657 		}
12658 	      else
12659 		{
12660 		  vindex = 3;
12661 		  prefix = PREFIX_REPNZ;
12662 		  last_prefix = last_repnz_prefix;
12663 		}
12664 
12665 	      /* Check if prefix should be ignored.  */
12666 	      if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12667 		     & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12668 		   & prefix) != 0)
12669 		vindex = 0;
12670 	    }
12671 
12672 	  if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12673 	    {
12674 	      vindex = 2;
12675 	      prefix = PREFIX_DATA;
12676 	      last_prefix = last_data_prefix;
12677 	    }
12678 
12679 	  if (vindex != 0)
12680 	    {
12681 	      used_prefixes |= prefix;
12682 	      all_prefixes[last_prefix] = 0;
12683 	    }
12684 	}
12685       dp = &prefix_table[dp->op[1].bytemode][vindex];
12686       break;
12687 
12688     case USE_X86_64_TABLE:
12689       vindex = address_mode == mode_64bit ? 1 : 0;
12690       dp = &x86_64_table[dp->op[1].bytemode][vindex];
12691       break;
12692 
12693     case USE_3BYTE_TABLE:
12694       FETCH_DATA (info, codep + 2);
12695       vindex = *codep++;
12696       dp = &three_byte_table[dp->op[1].bytemode][vindex];
12697       end_codep = codep;
12698       modrm.mod = (*codep >> 6) & 3;
12699       modrm.reg = (*codep >> 3) & 7;
12700       modrm.rm = *codep & 7;
12701       break;
12702 
12703     case USE_VEX_LEN_TABLE:
12704       if (!need_vex)
12705 	abort ();
12706 
12707       switch (vex.length)
12708 	{
12709 	case 128:
12710 	  vindex = 0;
12711 	  break;
12712 	case 256:
12713 	  vindex = 1;
12714 	  break;
12715 	default:
12716 	  abort ();
12717 	  break;
12718 	}
12719 
12720       dp = &vex_len_table[dp->op[1].bytemode][vindex];
12721       break;
12722 
12723     case USE_XOP_8F_TABLE:
12724       FETCH_DATA (info, codep + 3);
12725       /* All bits in the REX prefix are ignored.  */
12726       rex_ignored = rex;
12727       rex = ~(*codep >> 5) & 0x7;
12728 
12729       /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm".  */
12730       switch ((*codep & 0x1f))
12731 	{
12732 	default:
12733 	  dp = &bad_opcode;
12734 	  return dp;
12735 	case 0x8:
12736 	  vex_table_index = XOP_08;
12737 	  break;
12738 	case 0x9:
12739 	  vex_table_index = XOP_09;
12740 	  break;
12741 	case 0xa:
12742 	  vex_table_index = XOP_0A;
12743 	  break;
12744 	}
12745       codep++;
12746       vex.w = *codep & 0x80;
12747       if (vex.w && address_mode == mode_64bit)
12748 	rex |= REX_W;
12749 
12750       vex.register_specifier = (~(*codep >> 3)) & 0xf;
12751       if (address_mode != mode_64bit)
12752 	{
12753 	  /* In 16/32-bit mode REX_B is silently ignored.  */
12754 	  rex &= ~REX_B;
12755 	  if (vex.register_specifier > 0x7)
12756 	    {
12757 	      dp = &bad_opcode;
12758 	      return dp;
12759 	    }
12760 	}
12761 
12762       vex.length = (*codep & 0x4) ? 256 : 128;
12763       switch ((*codep & 0x3))
12764 	{
12765 	case 0:
12766 	  vex.prefix = 0;
12767 	  break;
12768 	case 1:
12769 	  vex.prefix = DATA_PREFIX_OPCODE;
12770 	  break;
12771 	case 2:
12772 	  vex.prefix = REPE_PREFIX_OPCODE;
12773 	  break;
12774 	case 3:
12775 	  vex.prefix = REPNE_PREFIX_OPCODE;
12776 	  break;
12777 	}
12778       need_vex = 1;
12779       need_vex_reg = 1;
12780       codep++;
12781       vindex = *codep++;
12782       dp = &xop_table[vex_table_index][vindex];
12783 
12784       end_codep = codep;
12785       FETCH_DATA (info, codep + 1);
12786       modrm.mod = (*codep >> 6) & 3;
12787       modrm.reg = (*codep >> 3) & 7;
12788       modrm.rm = *codep & 7;
12789       break;
12790 
12791     case USE_VEX_C4_TABLE:
12792       /* VEX prefix.  */
12793       FETCH_DATA (info, codep + 3);
12794       /* All bits in the REX prefix are ignored.  */
12795       rex_ignored = rex;
12796       rex = ~(*codep >> 5) & 0x7;
12797       switch ((*codep & 0x1f))
12798 	{
12799 	default:
12800 	  dp = &bad_opcode;
12801 	  return dp;
12802 	case 0x1:
12803 	  vex_table_index = VEX_0F;
12804 	  break;
12805 	case 0x2:
12806 	  vex_table_index = VEX_0F38;
12807 	  break;
12808 	case 0x3:
12809 	  vex_table_index = VEX_0F3A;
12810 	  break;
12811 	}
12812       codep++;
12813       vex.w = *codep & 0x80;
12814       if (address_mode == mode_64bit)
12815 	{
12816 	  if (vex.w)
12817 	    rex |= REX_W;
12818 	  vex.register_specifier = (~(*codep >> 3)) & 0xf;
12819 	}
12820       else
12821 	{
12822 	  /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
12823 	     is ignored, other REX bits are 0 and the highest bit in
12824 	     VEX.vvvv is also ignored.  */
12825 	  rex = 0;
12826 	  vex.register_specifier = (~(*codep >> 3)) & 0x7;
12827 	}
12828       vex.length = (*codep & 0x4) ? 256 : 128;
12829       switch ((*codep & 0x3))
12830 	{
12831 	case 0:
12832 	  vex.prefix = 0;
12833 	  break;
12834 	case 1:
12835 	  vex.prefix = DATA_PREFIX_OPCODE;
12836 	  break;
12837 	case 2:
12838 	  vex.prefix = REPE_PREFIX_OPCODE;
12839 	  break;
12840 	case 3:
12841 	  vex.prefix = REPNE_PREFIX_OPCODE;
12842 	  break;
12843 	}
12844       need_vex = 1;
12845       need_vex_reg = 1;
12846       codep++;
12847       vindex = *codep++;
12848       dp = &vex_table[vex_table_index][vindex];
12849       end_codep = codep;
12850       /* There is no MODRM byte for VEX0F 77.  */
12851       if (vex_table_index != VEX_0F || vindex != 0x77)
12852 	{
12853 	  FETCH_DATA (info, codep + 1);
12854 	  modrm.mod = (*codep >> 6) & 3;
12855 	  modrm.reg = (*codep >> 3) & 7;
12856 	  modrm.rm = *codep & 7;
12857 	}
12858       break;
12859 
12860     case USE_VEX_C5_TABLE:
12861       /* VEX prefix.  */
12862       FETCH_DATA (info, codep + 2);
12863       /* All bits in the REX prefix are ignored.  */
12864       rex_ignored = rex;
12865       rex = (*codep & 0x80) ? 0 : REX_R;
12866 
12867       /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
12868 	 VEX.vvvv is 1.  */
12869       vex.register_specifier = (~(*codep >> 3)) & 0xf;
12870       vex.w = 0;
12871       vex.length = (*codep & 0x4) ? 256 : 128;
12872       switch ((*codep & 0x3))
12873 	{
12874 	case 0:
12875 	  vex.prefix = 0;
12876 	  break;
12877 	case 1:
12878 	  vex.prefix = DATA_PREFIX_OPCODE;
12879 	  break;
12880 	case 2:
12881 	  vex.prefix = REPE_PREFIX_OPCODE;
12882 	  break;
12883 	case 3:
12884 	  vex.prefix = REPNE_PREFIX_OPCODE;
12885 	  break;
12886 	}
12887       need_vex = 1;
12888       need_vex_reg = 1;
12889       codep++;
12890       vindex = *codep++;
12891       dp = &vex_table[dp->op[1].bytemode][vindex];
12892       end_codep = codep;
12893       /* There is no MODRM byte for VEX 77.  */
12894       if (vindex != 0x77)
12895 	{
12896 	  FETCH_DATA (info, codep + 1);
12897 	  modrm.mod = (*codep >> 6) & 3;
12898 	  modrm.reg = (*codep >> 3) & 7;
12899 	  modrm.rm = *codep & 7;
12900 	}
12901       break;
12902 
12903     case USE_VEX_W_TABLE:
12904       if (!need_vex)
12905 	abort ();
12906 
12907       dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12908       break;
12909 
12910     case USE_EVEX_TABLE:
12911       two_source_ops = 0;
12912       /* EVEX prefix.  */
12913       vex.evex = 1;
12914       FETCH_DATA (info, codep + 4);
12915       /* All bits in the REX prefix are ignored.  */
12916       rex_ignored = rex;
12917       /* The first byte after 0x62.  */
12918       rex = ~(*codep >> 5) & 0x7;
12919       vex.r = *codep & 0x10;
12920       switch ((*codep & 0xf))
12921 	{
12922 	default:
12923 	  return &bad_opcode;
12924 	case 0x1:
12925 	  vex_table_index = EVEX_0F;
12926 	  break;
12927 	case 0x2:
12928 	  vex_table_index = EVEX_0F38;
12929 	  break;
12930 	case 0x3:
12931 	  vex_table_index = EVEX_0F3A;
12932 	  break;
12933 	}
12934 
12935       /* The second byte after 0x62.  */
12936       codep++;
12937       vex.w = *codep & 0x80;
12938       if (vex.w && address_mode == mode_64bit)
12939 	rex |= REX_W;
12940 
12941       vex.register_specifier = (~(*codep >> 3)) & 0xf;
12942       if (address_mode != mode_64bit)
12943 	{
12944 	  /* In 16/32-bit mode silently ignore following bits.  */
12945 	  rex &= ~REX_B;
12946 	  vex.r = 1;
12947 	  vex.v = 1;
12948 	  vex.register_specifier &= 0x7;
12949 	}
12950 
12951       /* The U bit.  */
12952       if (!(*codep & 0x4))
12953 	return &bad_opcode;
12954 
12955       switch ((*codep & 0x3))
12956 	{
12957 	case 0:
12958 	  vex.prefix = 0;
12959 	  break;
12960 	case 1:
12961 	  vex.prefix = DATA_PREFIX_OPCODE;
12962 	  break;
12963 	case 2:
12964 	  vex.prefix = REPE_PREFIX_OPCODE;
12965 	  break;
12966 	case 3:
12967 	  vex.prefix = REPNE_PREFIX_OPCODE;
12968 	  break;
12969 	}
12970 
12971       /* The third byte after 0x62.  */
12972       codep++;
12973 
12974       /* Remember the static rounding bits.  */
12975       vex.ll = (*codep >> 5) & 3;
12976       vex.b = (*codep & 0x10) != 0;
12977 
12978       vex.v = *codep & 0x8;
12979       vex.mask_register_specifier = *codep & 0x7;
12980       vex.zeroing = *codep & 0x80;
12981 
12982       need_vex = 1;
12983       need_vex_reg = 1;
12984       codep++;
12985       vindex = *codep++;
12986       dp = &evex_table[vex_table_index][vindex];
12987       end_codep = codep;
12988       FETCH_DATA (info, codep + 1);
12989       modrm.mod = (*codep >> 6) & 3;
12990       modrm.reg = (*codep >> 3) & 7;
12991       modrm.rm = *codep & 7;
12992 
12993       /* Set vector length.  */
12994       if (modrm.mod == 3 && vex.b)
12995 	vex.length = 512;
12996       else
12997 	{
12998 	  switch (vex.ll)
12999 	    {
13000 	    case 0x0:
13001 	      vex.length = 128;
13002 	      break;
13003 	    case 0x1:
13004 	      vex.length = 256;
13005 	      break;
13006 	    case 0x2:
13007 	      vex.length = 512;
13008 	      break;
13009 	    default:
13010 	      return &bad_opcode;
13011 	    }
13012 	}
13013       break;
13014 
13015     case 0:
13016       dp = &bad_opcode;
13017       break;
13018 
13019     default:
13020       abort ();
13021     }
13022 
13023   if (dp->name != NULL)
13024     return dp;
13025   else
13026     return get_valid_dis386 (dp, info);
13027 }
13028 
13029 static void
13030 get_sib (disassemble_info *info, int sizeflag)
13031 {
13032   /* If modrm.mod == 3, operand must be register.  */
13033   if (need_modrm
13034       && ((sizeflag & AFLAG) || address_mode == mode_64bit)
13035       && modrm.mod != 3
13036       && modrm.rm == 4)
13037     {
13038       FETCH_DATA (info, codep + 2);
13039       sib.index = (codep [1] >> 3) & 7;
13040       sib.scale = (codep [1] >> 6) & 3;
13041       sib.base = codep [1] & 7;
13042     }
13043 }
13044 
13045 static int
13046 print_insn (bfd_vma pc, disassemble_info *info)
13047 {
13048   const struct dis386 *dp;
13049   int i;
13050   char *op_txt[MAX_OPERANDS];
13051   int needcomma;
13052   int sizeflag, orig_sizeflag;
13053   const char *p;
13054   struct dis_private priv;
13055   int prefix_length;
13056 
13057   priv.orig_sizeflag = AFLAG | DFLAG;
13058   if ((info->mach & bfd_mach_i386_i386) != 0)
13059     address_mode = mode_32bit;
13060   else if (info->mach == bfd_mach_i386_i8086)
13061     {
13062       address_mode = mode_16bit;
13063       priv.orig_sizeflag = 0;
13064     }
13065   else
13066     address_mode = mode_64bit;
13067 
13068   if (intel_syntax == (char) -1)
13069     intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
13070 
13071   for (p = info->disassembler_options; p != NULL; )
13072     {
13073       if (CONST_STRNEQ (p, "amd64"))
13074 	isa64 = amd64;
13075       else if (CONST_STRNEQ (p, "intel64"))
13076 	isa64 = intel64;
13077       else if (CONST_STRNEQ (p, "x86-64"))
13078 	{
13079 	  address_mode = mode_64bit;
13080 	  priv.orig_sizeflag = AFLAG | DFLAG;
13081 	}
13082       else if (CONST_STRNEQ (p, "i386"))
13083 	{
13084 	  address_mode = mode_32bit;
13085 	  priv.orig_sizeflag = AFLAG | DFLAG;
13086 	}
13087       else if (CONST_STRNEQ (p, "i8086"))
13088 	{
13089 	  address_mode = mode_16bit;
13090 	  priv.orig_sizeflag = 0;
13091 	}
13092       else if (CONST_STRNEQ (p, "intel"))
13093 	{
13094 	  intel_syntax = 1;
13095 	  if (CONST_STRNEQ (p + 5, "-mnemonic"))
13096 	    intel_mnemonic = 1;
13097 	}
13098       else if (CONST_STRNEQ (p, "att"))
13099 	{
13100 	  intel_syntax = 0;
13101 	  if (CONST_STRNEQ (p + 3, "-mnemonic"))
13102 	    intel_mnemonic = 0;
13103 	}
13104       else if (CONST_STRNEQ (p, "addr"))
13105 	{
13106 	  if (address_mode == mode_64bit)
13107 	    {
13108 	      if (p[4] == '3' && p[5] == '2')
13109 		priv.orig_sizeflag &= ~AFLAG;
13110 	      else if (p[4] == '6' && p[5] == '4')
13111 		priv.orig_sizeflag |= AFLAG;
13112 	    }
13113 	  else
13114 	    {
13115 	      if (p[4] == '1' && p[5] == '6')
13116 		priv.orig_sizeflag &= ~AFLAG;
13117 	      else if (p[4] == '3' && p[5] == '2')
13118 		priv.orig_sizeflag |= AFLAG;
13119 	    }
13120 	}
13121       else if (CONST_STRNEQ (p, "data"))
13122 	{
13123 	  if (p[4] == '1' && p[5] == '6')
13124 	    priv.orig_sizeflag &= ~DFLAG;
13125 	  else if (p[4] == '3' && p[5] == '2')
13126 	    priv.orig_sizeflag |= DFLAG;
13127 	}
13128       else if (CONST_STRNEQ (p, "suffix"))
13129 	priv.orig_sizeflag |= SUFFIX_ALWAYS;
13130 
13131       p = strchr (p, ',');
13132       if (p != NULL)
13133 	p++;
13134     }
13135 
13136   if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13137     {
13138       (*info->fprintf_func) (info->stream,
13139 			     _("64-bit address is disabled"));
13140       return -1;
13141     }
13142 
13143   if (intel_syntax)
13144     {
13145       names64 = intel_names64;
13146       names32 = intel_names32;
13147       names16 = intel_names16;
13148       names8 = intel_names8;
13149       names8rex = intel_names8rex;
13150       names_seg = intel_names_seg;
13151       names_mm = intel_names_mm;
13152       names_bnd = intel_names_bnd;
13153       names_xmm = intel_names_xmm;
13154       names_ymm = intel_names_ymm;
13155       names_zmm = intel_names_zmm;
13156       index64 = intel_index64;
13157       index32 = intel_index32;
13158       names_mask = intel_names_mask;
13159       index16 = intel_index16;
13160       open_char = '[';
13161       close_char = ']';
13162       separator_char = '+';
13163       scale_char = '*';
13164     }
13165   else
13166     {
13167       names64 = att_names64;
13168       names32 = att_names32;
13169       names16 = att_names16;
13170       names8 = att_names8;
13171       names8rex = att_names8rex;
13172       names_seg = att_names_seg;
13173       names_mm = att_names_mm;
13174       names_bnd = att_names_bnd;
13175       names_xmm = att_names_xmm;
13176       names_ymm = att_names_ymm;
13177       names_zmm = att_names_zmm;
13178       index64 = att_index64;
13179       index32 = att_index32;
13180       names_mask = att_names_mask;
13181       index16 = att_index16;
13182       open_char = '(';
13183       close_char =  ')';
13184       separator_char = ',';
13185       scale_char = ',';
13186     }
13187 
13188   /* The output looks better if we put 7 bytes on a line, since that
13189      puts most long word instructions on a single line.  Use 8 bytes
13190      for Intel L1OM.  */
13191   if ((info->mach & bfd_mach_l1om) != 0)
13192     info->bytes_per_line = 8;
13193   else
13194     info->bytes_per_line = 7;
13195 
13196   info->private_data = &priv;
13197   priv.max_fetched = priv.the_buffer;
13198   priv.insn_start = pc;
13199 
13200   obuf[0] = 0;
13201   for (i = 0; i < MAX_OPERANDS; ++i)
13202     {
13203       op_out[i][0] = 0;
13204       op_index[i] = -1;
13205     }
13206 
13207   the_info = info;
13208   start_pc = pc;
13209   start_codep = priv.the_buffer;
13210   codep = priv.the_buffer;
13211 
13212   if (OPCODES_SIGSETJMP (priv.bailout) != 0)
13213     {
13214       const char *name;
13215 
13216       /* Getting here means we tried for data but didn't get it.  That
13217 	 means we have an incomplete instruction of some sort.  Just
13218 	 print the first byte as a prefix or a .byte pseudo-op.  */
13219       if (codep > priv.the_buffer)
13220 	{
13221 	  name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
13222 	  if (name != NULL)
13223 	    (*info->fprintf_func) (info->stream, "%s", name);
13224 	  else
13225 	    {
13226 	      /* Just print the first byte as a .byte instruction.  */
13227 	      (*info->fprintf_func) (info->stream, ".byte 0x%x",
13228 				     (unsigned int) priv.the_buffer[0]);
13229 	    }
13230 
13231 	  return 1;
13232 	}
13233 
13234       return -1;
13235     }
13236 
13237   obufp = obuf;
13238   sizeflag = priv.orig_sizeflag;
13239 
13240   if (!ckprefix () || rex_used)
13241     {
13242       /* Too many prefixes or unused REX prefixes.  */
13243       for (i = 0;
13244 	   i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
13245 	   i++)
13246 	(*info->fprintf_func) (info->stream, "%s%s",
13247 			       i == 0 ? "" : " ",
13248 			       prefix_name (all_prefixes[i], sizeflag));
13249       return i;
13250     }
13251 
13252   insn_codep = codep;
13253 
13254   FETCH_DATA (info, codep + 1);
13255   two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13256 
13257   if (((prefixes & PREFIX_FWAIT)
13258        && ((*codep < 0xd8) || (*codep > 0xdf))))
13259     {
13260       /* Handle prefixes before fwait.  */
13261       for (i = 0; i < fwait_prefix && all_prefixes[i];
13262 	   i++)
13263 	(*info->fprintf_func) (info->stream, "%s ",
13264 			       prefix_name (all_prefixes[i], sizeflag));
13265       (*info->fprintf_func) (info->stream, "fwait");
13266       return i + 1;
13267     }
13268 
13269   if (*codep == 0x0f)
13270     {
13271       unsigned char threebyte;
13272 
13273       codep++;
13274       FETCH_DATA (info, codep + 1);
13275       threebyte = *codep;
13276       dp = &dis386_twobyte[threebyte];
13277       need_modrm = twobyte_has_modrm[*codep];
13278       codep++;
13279     }
13280   else
13281     {
13282       dp = &dis386[*codep];
13283       need_modrm = onebyte_has_modrm[*codep];
13284       codep++;
13285     }
13286 
13287   /* Save sizeflag for printing the extra prefixes later before updating
13288      it for mnemonic and operand processing.  The prefix names depend
13289      only on the address mode.  */
13290   orig_sizeflag = sizeflag;
13291   if (prefixes & PREFIX_ADDR)
13292     sizeflag ^= AFLAG;
13293   if ((prefixes & PREFIX_DATA))
13294     sizeflag ^= DFLAG;
13295 
13296   end_codep = codep;
13297   if (need_modrm)
13298     {
13299       FETCH_DATA (info, codep + 1);
13300       modrm.mod = (*codep >> 6) & 3;
13301       modrm.reg = (*codep >> 3) & 7;
13302       modrm.rm = *codep & 7;
13303     }
13304 
13305   need_vex = 0;
13306   need_vex_reg = 0;
13307   vex_w_done = 0;
13308   vex.evex = 0;
13309 
13310   if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
13311     {
13312       get_sib (info, sizeflag);
13313       dofloat (sizeflag);
13314     }
13315   else
13316     {
13317       dp = get_valid_dis386 (dp, info);
13318       if (dp != NULL && putop (dp->name, sizeflag) == 0)
13319 	{
13320 	  get_sib (info, sizeflag);
13321 	  for (i = 0; i < MAX_OPERANDS; ++i)
13322 	    {
13323 	      obufp = op_out[i];
13324 	      op_ad = MAX_OPERANDS - 1 - i;
13325 	      if (dp->op[i].rtn)
13326 		(*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
13327 	      /* For EVEX instruction after the last operand masking
13328 		 should be printed.  */
13329 	      if (i == 0 && vex.evex)
13330 		{
13331 		  /* Don't print {%k0}.  */
13332 		  if (vex.mask_register_specifier)
13333 		    {
13334 		      oappend ("{");
13335 		      oappend (names_mask[vex.mask_register_specifier]);
13336 		      oappend ("}");
13337 		    }
13338 		  if (vex.zeroing)
13339 		    oappend ("{z}");
13340 		}
13341 	    }
13342 	}
13343     }
13344 
13345   /* Check if the REX prefix is used.  */
13346   if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
13347     all_prefixes[last_rex_prefix] = 0;
13348 
13349   /* Check if the SEG prefix is used.  */
13350   if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13351 		   | PREFIX_FS | PREFIX_GS)) != 0
13352       && (used_prefixes & active_seg_prefix) != 0)
13353     all_prefixes[last_seg_prefix] = 0;
13354 
13355   /* Check if the ADDR prefix is used.  */
13356   if ((prefixes & PREFIX_ADDR) != 0
13357       && (used_prefixes & PREFIX_ADDR) != 0)
13358     all_prefixes[last_addr_prefix] = 0;
13359 
13360   /* Check if the DATA prefix is used.  */
13361   if ((prefixes & PREFIX_DATA) != 0
13362       && (used_prefixes & PREFIX_DATA) != 0)
13363     all_prefixes[last_data_prefix] = 0;
13364 
13365   /* Print the extra prefixes.  */
13366   prefix_length = 0;
13367   for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
13368     if (all_prefixes[i])
13369       {
13370 	const char *name;
13371 	name = prefix_name (all_prefixes[i], orig_sizeflag);
13372 	if (name == NULL)
13373 	  abort ();
13374 	prefix_length += strlen (name) + 1;
13375 	(*info->fprintf_func) (info->stream, "%s ", name);
13376       }
13377 
13378   /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13379      unused, opcode is invalid.  Since the PREFIX_DATA prefix may be
13380      used by putop and MMX/SSE operand and may be overriden by the
13381      PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13382      separately.  */
13383   if (dp->prefix_requirement == PREFIX_OPCODE
13384       && dp != &bad_opcode
13385       && (((prefixes
13386 	    & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13387 	   && (used_prefixes
13388 	       & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13389 	  || ((((prefixes
13390 		 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13391 		== PREFIX_DATA)
13392 	       && (used_prefixes & PREFIX_DATA) == 0))))
13393     {
13394       (*info->fprintf_func) (info->stream, "(bad)");
13395       return end_codep - priv.the_buffer;
13396     }
13397 
13398   /* Check maximum code length.  */
13399   if ((codep - start_codep) > MAX_CODE_LENGTH)
13400     {
13401       (*info->fprintf_func) (info->stream, "(bad)");
13402       return MAX_CODE_LENGTH;
13403     }
13404 
13405   obufp = mnemonicendp;
13406   for (i = strlen (obuf) + prefix_length; i < 6; i++)
13407     oappend (" ");
13408   oappend (" ");
13409   (*info->fprintf_func) (info->stream, "%s", obuf);
13410 
13411   /* The enter and bound instructions are printed with operands in the same
13412      order as the intel book; everything else is printed in reverse order.  */
13413   if (intel_syntax || two_source_ops)
13414     {
13415       bfd_vma riprel;
13416 
13417       for (i = 0; i < MAX_OPERANDS; ++i)
13418 	op_txt[i] = op_out[i];
13419 
13420       if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13421           && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13422 	{
13423 	  op_txt[2] = op_out[3];
13424 	  op_txt[3] = op_out[2];
13425 	}
13426 
13427       for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13428 	{
13429 	  op_ad = op_index[i];
13430 	  op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13431 	  op_index[MAX_OPERANDS - 1 - i] = op_ad;
13432 	  riprel = op_riprel[i];
13433 	  op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13434 	  op_riprel[MAX_OPERANDS - 1 - i] = riprel;
13435 	}
13436     }
13437   else
13438     {
13439       for (i = 0; i < MAX_OPERANDS; ++i)
13440 	op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
13441     }
13442 
13443   needcomma = 0;
13444   for (i = 0; i < MAX_OPERANDS; ++i)
13445     if (*op_txt[i])
13446       {
13447 	if (needcomma)
13448 	  (*info->fprintf_func) (info->stream, ",");
13449 	if (op_index[i] != -1 && !op_riprel[i])
13450 	  (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13451 	else
13452 	  (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13453 	needcomma = 1;
13454       }
13455 
13456   for (i = 0; i < MAX_OPERANDS; i++)
13457     if (op_index[i] != -1 && op_riprel[i])
13458       {
13459 	(*info->fprintf_func) (info->stream, "        # ");
13460 	(*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
13461 						+ op_address[op_index[i]]), info);
13462 	break;
13463       }
13464   return codep - priv.the_buffer;
13465 }
13466 
13467 static const char *float_mem[] = {
13468   /* d8 */
13469   "fadd{s|}",
13470   "fmul{s|}",
13471   "fcom{s|}",
13472   "fcomp{s|}",
13473   "fsub{s|}",
13474   "fsubr{s|}",
13475   "fdiv{s|}",
13476   "fdivr{s|}",
13477   /* d9 */
13478   "fld{s|}",
13479   "(bad)",
13480   "fst{s|}",
13481   "fstp{s|}",
13482   "fldenvIC",
13483   "fldcw",
13484   "fNstenvIC",
13485   "fNstcw",
13486   /* da */
13487   "fiadd{l|}",
13488   "fimul{l|}",
13489   "ficom{l|}",
13490   "ficomp{l|}",
13491   "fisub{l|}",
13492   "fisubr{l|}",
13493   "fidiv{l|}",
13494   "fidivr{l|}",
13495   /* db */
13496   "fild{l|}",
13497   "fisttp{l|}",
13498   "fist{l|}",
13499   "fistp{l|}",
13500   "(bad)",
13501   "fld{t||t|}",
13502   "(bad)",
13503   "fstp{t||t|}",
13504   /* dc */
13505   "fadd{l|}",
13506   "fmul{l|}",
13507   "fcom{l|}",
13508   "fcomp{l|}",
13509   "fsub{l|}",
13510   "fsubr{l|}",
13511   "fdiv{l|}",
13512   "fdivr{l|}",
13513   /* dd */
13514   "fld{l|}",
13515   "fisttp{ll|}",
13516   "fst{l||}",
13517   "fstp{l|}",
13518   "frstorIC",
13519   "(bad)",
13520   "fNsaveIC",
13521   "fNstsw",
13522   /* de */
13523   "fiadd",
13524   "fimul",
13525   "ficom",
13526   "ficomp",
13527   "fisub",
13528   "fisubr",
13529   "fidiv",
13530   "fidivr",
13531   /* df */
13532   "fild",
13533   "fisttp",
13534   "fist",
13535   "fistp",
13536   "fbld",
13537   "fild{ll|}",
13538   "fbstp",
13539   "fistp{ll|}",
13540 };
13541 
13542 static const unsigned char float_mem_mode[] = {
13543   /* d8 */
13544   d_mode,
13545   d_mode,
13546   d_mode,
13547   d_mode,
13548   d_mode,
13549   d_mode,
13550   d_mode,
13551   d_mode,
13552   /* d9 */
13553   d_mode,
13554   0,
13555   d_mode,
13556   d_mode,
13557   0,
13558   w_mode,
13559   0,
13560   w_mode,
13561   /* da */
13562   d_mode,
13563   d_mode,
13564   d_mode,
13565   d_mode,
13566   d_mode,
13567   d_mode,
13568   d_mode,
13569   d_mode,
13570   /* db */
13571   d_mode,
13572   d_mode,
13573   d_mode,
13574   d_mode,
13575   0,
13576   t_mode,
13577   0,
13578   t_mode,
13579   /* dc */
13580   q_mode,
13581   q_mode,
13582   q_mode,
13583   q_mode,
13584   q_mode,
13585   q_mode,
13586   q_mode,
13587   q_mode,
13588   /* dd */
13589   q_mode,
13590   q_mode,
13591   q_mode,
13592   q_mode,
13593   0,
13594   0,
13595   0,
13596   w_mode,
13597   /* de */
13598   w_mode,
13599   w_mode,
13600   w_mode,
13601   w_mode,
13602   w_mode,
13603   w_mode,
13604   w_mode,
13605   w_mode,
13606   /* df */
13607   w_mode,
13608   w_mode,
13609   w_mode,
13610   w_mode,
13611   t_mode,
13612   q_mode,
13613   t_mode,
13614   q_mode
13615 };
13616 
13617 #define ST { OP_ST, 0 }
13618 #define STi { OP_STi, 0 }
13619 
13620 #define FGRPd9_2 NULL, { { NULL, 1 } }, 0
13621 #define FGRPd9_4 NULL, { { NULL, 2 } }, 0
13622 #define FGRPd9_5 NULL, { { NULL, 3 } }, 0
13623 #define FGRPd9_6 NULL, { { NULL, 4 } }, 0
13624 #define FGRPd9_7 NULL, { { NULL, 5 } }, 0
13625 #define FGRPda_5 NULL, { { NULL, 6 } }, 0
13626 #define FGRPdb_4 NULL, { { NULL, 7 } }, 0
13627 #define FGRPde_3 NULL, { { NULL, 8 } }, 0
13628 #define FGRPdf_4 NULL, { { NULL, 9 } }, 0
13629 
13630 static const struct dis386 float_reg[][8] = {
13631   /* d8 */
13632   {
13633     { "fadd",	{ ST, STi }, 0 },
13634     { "fmul",	{ ST, STi }, 0 },
13635     { "fcom",	{ STi }, 0 },
13636     { "fcomp",	{ STi }, 0 },
13637     { "fsub",	{ ST, STi }, 0 },
13638     { "fsubr",	{ ST, STi }, 0 },
13639     { "fdiv",	{ ST, STi }, 0 },
13640     { "fdivr",	{ ST, STi }, 0 },
13641   },
13642   /* d9 */
13643   {
13644     { "fld",	{ STi }, 0 },
13645     { "fxch",	{ STi }, 0 },
13646     { FGRPd9_2 },
13647     { Bad_Opcode },
13648     { FGRPd9_4 },
13649     { FGRPd9_5 },
13650     { FGRPd9_6 },
13651     { FGRPd9_7 },
13652   },
13653   /* da */
13654   {
13655     { "fcmovb",	{ ST, STi }, 0 },
13656     { "fcmove",	{ ST, STi }, 0 },
13657     { "fcmovbe",{ ST, STi }, 0 },
13658     { "fcmovu",	{ ST, STi }, 0 },
13659     { Bad_Opcode },
13660     { FGRPda_5 },
13661     { Bad_Opcode },
13662     { Bad_Opcode },
13663   },
13664   /* db */
13665   {
13666     { "fcmovnb",{ ST, STi }, 0 },
13667     { "fcmovne",{ ST, STi }, 0 },
13668     { "fcmovnbe",{ ST, STi }, 0 },
13669     { "fcmovnu",{ ST, STi }, 0 },
13670     { FGRPdb_4 },
13671     { "fucomi",	{ ST, STi }, 0 },
13672     { "fcomi",	{ ST, STi }, 0 },
13673     { Bad_Opcode },
13674   },
13675   /* dc */
13676   {
13677     { "fadd",	{ STi, ST }, 0 },
13678     { "fmul",	{ STi, ST }, 0 },
13679     { Bad_Opcode },
13680     { Bad_Opcode },
13681     { "fsub!M",	{ STi, ST }, 0 },
13682     { "fsubM",	{ STi, ST }, 0 },
13683     { "fdiv!M",	{ STi, ST }, 0 },
13684     { "fdivM",	{ STi, ST }, 0 },
13685   },
13686   /* dd */
13687   {
13688     { "ffree",	{ STi }, 0 },
13689     { Bad_Opcode },
13690     { "fst",	{ STi }, 0 },
13691     { "fstp",	{ STi }, 0 },
13692     { "fucom",	{ STi }, 0 },
13693     { "fucomp",	{ STi }, 0 },
13694     { Bad_Opcode },
13695     { Bad_Opcode },
13696   },
13697   /* de */
13698   {
13699     { "faddp",	{ STi, ST }, 0 },
13700     { "fmulp",	{ STi, ST }, 0 },
13701     { Bad_Opcode },
13702     { FGRPde_3 },
13703     { "fsub!Mp", { STi, ST }, 0 },
13704     { "fsubMp",	{ STi, ST }, 0 },
13705     { "fdiv!Mp", { STi, ST }, 0 },
13706     { "fdivMp",	{ STi, ST }, 0 },
13707   },
13708   /* df */
13709   {
13710     { "ffreep",	{ STi }, 0 },
13711     { Bad_Opcode },
13712     { Bad_Opcode },
13713     { Bad_Opcode },
13714     { FGRPdf_4 },
13715     { "fucomip", { ST, STi }, 0 },
13716     { "fcomip", { ST, STi }, 0 },
13717     { Bad_Opcode },
13718   },
13719 };
13720 
13721 static char *fgrps[][8] = {
13722   /* Bad opcode 0 */
13723   {
13724     "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13725   },
13726 
13727   /* d9_2  1 */
13728   {
13729     "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13730   },
13731 
13732   /* d9_4  2 */
13733   {
13734     "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13735   },
13736 
13737   /* d9_5  3 */
13738   {
13739     "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13740   },
13741 
13742   /* d9_6  4 */
13743   {
13744     "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13745   },
13746 
13747   /* d9_7  5 */
13748   {
13749     "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13750   },
13751 
13752   /* da_5  6 */
13753   {
13754     "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13755   },
13756 
13757   /* db_4  7 */
13758   {
13759     "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13760     "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
13761   },
13762 
13763   /* de_3  8 */
13764   {
13765     "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13766   },
13767 
13768   /* df_4  9 */
13769   {
13770     "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13771   },
13772 };
13773 
13774 static void
13775 swap_operand (void)
13776 {
13777   mnemonicendp[0] = '.';
13778   mnemonicendp[1] = 's';
13779   mnemonicendp += 2;
13780 }
13781 
13782 static void
13783 OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13784 	       int sizeflag ATTRIBUTE_UNUSED)
13785 {
13786   /* Skip mod/rm byte.  */
13787   MODRM_CHECK;
13788   codep++;
13789 }
13790 
13791 static void
13792 dofloat (int sizeflag)
13793 {
13794   const struct dis386 *dp;
13795   unsigned char floatop;
13796 
13797   floatop = codep[-1];
13798 
13799   if (modrm.mod != 3)
13800     {
13801       int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
13802 
13803       putop (float_mem[fp_indx], sizeflag);
13804       obufp = op_out[0];
13805       op_ad = 2;
13806       OP_E (float_mem_mode[fp_indx], sizeflag);
13807       return;
13808     }
13809   /* Skip mod/rm byte.  */
13810   MODRM_CHECK;
13811   codep++;
13812 
13813   dp = &float_reg[floatop - 0xd8][modrm.reg];
13814   if (dp->name == NULL)
13815     {
13816       putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
13817 
13818       /* Instruction fnstsw is only one with strange arg.  */
13819       if (floatop == 0xdf && codep[-1] == 0xe0)
13820 	strcpy (op_out[0], names16[0]);
13821     }
13822   else
13823     {
13824       putop (dp->name, sizeflag);
13825 
13826       obufp = op_out[0];
13827       op_ad = 2;
13828       if (dp->op[0].rtn)
13829 	(*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
13830 
13831       obufp = op_out[1];
13832       op_ad = 1;
13833       if (dp->op[1].rtn)
13834 	(*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
13835     }
13836 }
13837 
13838 /* Like oappend (below), but S is a string starting with '%'.
13839    In Intel syntax, the '%' is elided.  */
13840 static void
13841 oappend_maybe_intel (const char *s)
13842 {
13843   oappend (s + intel_syntax);
13844 }
13845 
13846 static void
13847 OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13848 {
13849   oappend_maybe_intel ("%st");
13850 }
13851 
13852 static void
13853 OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13854 {
13855   sprintf (scratchbuf, "%%st(%d)", modrm.rm);
13856   oappend_maybe_intel (scratchbuf);
13857 }
13858 
13859 /* Capital letters in template are macros.  */
13860 static int
13861 putop (const char *in_template, int sizeflag)
13862 {
13863   const char *p;
13864   int alt = 0;
13865   int cond = 1;
13866   unsigned int l = 0, len = 1;
13867   char last[4];
13868 
13869 #define SAVE_LAST(c)			\
13870   if (l < len && l < sizeof (last))	\
13871     last[l++] = c;			\
13872   else					\
13873     abort ();
13874 
13875   for (p = in_template; *p; p++)
13876     {
13877       switch (*p)
13878 	{
13879 	default:
13880 	  *obufp++ = *p;
13881 	  break;
13882 	case '%':
13883 	  len++;
13884 	  break;
13885 	case '!':
13886 	  cond = 0;
13887 	  break;
13888 	case '{':
13889 	  if (intel_syntax)
13890 	    {
13891 	      while (*++p != '|')
13892 		if (*p == '}' || *p == '\0')
13893 		  abort ();
13894 	    }
13895 	  /* Fall through.  */
13896 	case 'I':
13897 	  alt = 1;
13898 	  continue;
13899 	case '|':
13900 	  while (*++p != '}')
13901 	    {
13902 	      if (*p == '\0')
13903 		abort ();
13904 	    }
13905 	  break;
13906 	case '}':
13907 	  break;
13908 	case 'A':
13909 	  if (intel_syntax)
13910 	    break;
13911 	  if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
13912 	    *obufp++ = 'b';
13913 	  break;
13914 	case 'B':
13915 	  if (l == 0 && len == 1)
13916 	    {
13917 case_B:
13918 	      if (intel_syntax)
13919 		break;
13920 	      if (sizeflag & SUFFIX_ALWAYS)
13921 		*obufp++ = 'b';
13922 	    }
13923 	  else
13924 	    {
13925 	      if (l != 1
13926 		  || len != 2
13927 		  || last[0] != 'L')
13928 		{
13929 		  SAVE_LAST (*p);
13930 		  break;
13931 		}
13932 
13933 	      if (address_mode == mode_64bit
13934 		  && !(prefixes & PREFIX_ADDR))
13935 		{
13936 		  *obufp++ = 'a';
13937 		  *obufp++ = 'b';
13938 		  *obufp++ = 's';
13939 		}
13940 
13941 	      goto case_B;
13942 	    }
13943 	  break;
13944 	case 'C':
13945 	  if (intel_syntax && !alt)
13946 	    break;
13947 	  if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13948 	    {
13949 	      if (sizeflag & DFLAG)
13950 		*obufp++ = intel_syntax ? 'd' : 'l';
13951 	      else
13952 		*obufp++ = intel_syntax ? 'w' : 's';
13953 	      used_prefixes |= (prefixes & PREFIX_DATA);
13954 	    }
13955 	  break;
13956 	case 'D':
13957 	  if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13958 	    break;
13959 	  USED_REX (REX_W);
13960 	  if (modrm.mod == 3)
13961 	    {
13962 	      if (rex & REX_W)
13963 		*obufp++ = 'q';
13964 	      else
13965 		{
13966 		  if (sizeflag & DFLAG)
13967 		    *obufp++ = intel_syntax ? 'd' : 'l';
13968 		  else
13969 		    *obufp++ = 'w';
13970 		  used_prefixes |= (prefixes & PREFIX_DATA);
13971 		}
13972 	    }
13973 	  else
13974 	    *obufp++ = 'w';
13975 	  break;
13976 	case 'E':		/* For jcxz/jecxz */
13977 	  if (address_mode == mode_64bit)
13978 	    {
13979 	      if (sizeflag & AFLAG)
13980 		*obufp++ = 'r';
13981 	      else
13982 		*obufp++ = 'e';
13983 	    }
13984 	  else
13985 	    if (sizeflag & AFLAG)
13986 	      *obufp++ = 'e';
13987 	  used_prefixes |= (prefixes & PREFIX_ADDR);
13988 	  break;
13989 	case 'F':
13990 	  if (intel_syntax)
13991 	    break;
13992 	  if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
13993 	    {
13994 	      if (sizeflag & AFLAG)
13995 		*obufp++ = address_mode == mode_64bit ? 'q' : 'l';
13996 	      else
13997 		*obufp++ = address_mode == mode_64bit ? 'l' : 'w';
13998 	      used_prefixes |= (prefixes & PREFIX_ADDR);
13999 	    }
14000 	  break;
14001 	case 'G':
14002 	  if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14003 	    break;
14004 	  if ((rex & REX_W) || (sizeflag & DFLAG))
14005 	    *obufp++ = 'l';
14006 	  else
14007 	    *obufp++ = 'w';
14008 	  if (!(rex & REX_W))
14009 	    used_prefixes |= (prefixes & PREFIX_DATA);
14010 	  break;
14011 	case 'H':
14012 	  if (intel_syntax)
14013 	    break;
14014 	  if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14015 	      || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14016 	    {
14017 	      used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14018 	      *obufp++ = ',';
14019 	      *obufp++ = 'p';
14020 	      if (prefixes & PREFIX_DS)
14021 		*obufp++ = 't';
14022 	      else
14023 		*obufp++ = 'n';
14024 	    }
14025 	  break;
14026 	case 'J':
14027 	  if (intel_syntax)
14028 	    break;
14029 	  *obufp++ = 'l';
14030 	  break;
14031 	case 'K':
14032 	  USED_REX (REX_W);
14033 	  if (rex & REX_W)
14034 	    *obufp++ = 'q';
14035 	  else
14036 	    *obufp++ = 'd';
14037 	  break;
14038 	case 'Z':
14039 	  if (l != 0 || len != 1)
14040 	    {
14041 	      if (l != 1 || len != 2 || last[0] != 'X')
14042 		{
14043 		  SAVE_LAST (*p);
14044 		  break;
14045 		}
14046 	      if (!need_vex || !vex.evex)
14047 		abort ();
14048 	      if (intel_syntax
14049 		  || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14050 		break;
14051 	      switch (vex.length)
14052 		{
14053 		case 128:
14054 		  *obufp++ = 'x';
14055 		  break;
14056 		case 256:
14057 		  *obufp++ = 'y';
14058 		  break;
14059 		case 512:
14060 		  *obufp++ = 'z';
14061 		  break;
14062 		default:
14063 		  abort ();
14064 		}
14065 	      break;
14066 	    }
14067 	  if (intel_syntax)
14068 	    break;
14069 	  if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14070 	    {
14071 	      *obufp++ = 'q';
14072 	      break;
14073 	    }
14074 	  /* Fall through.  */
14075 	  goto case_L;
14076 	case 'L':
14077 	  if (l != 0 || len != 1)
14078 	    {
14079 	      SAVE_LAST (*p);
14080 	      break;
14081 	    }
14082 case_L:
14083 	  if (intel_syntax)
14084 	    break;
14085 	  if (sizeflag & SUFFIX_ALWAYS)
14086 	    *obufp++ = 'l';
14087 	  break;
14088 	case 'M':
14089 	  if (intel_mnemonic != cond)
14090 	    *obufp++ = 'r';
14091 	  break;
14092 	case 'N':
14093 	  if ((prefixes & PREFIX_FWAIT) == 0)
14094 	    *obufp++ = 'n';
14095 	  else
14096 	    used_prefixes |= PREFIX_FWAIT;
14097 	  break;
14098 	case 'O':
14099 	  USED_REX (REX_W);
14100 	  if (rex & REX_W)
14101 	    *obufp++ = 'o';
14102 	  else if (intel_syntax && (sizeflag & DFLAG))
14103 	    *obufp++ = 'q';
14104 	  else
14105 	    *obufp++ = 'd';
14106 	  if (!(rex & REX_W))
14107 	    used_prefixes |= (prefixes & PREFIX_DATA);
14108 	  break;
14109 	case '&':
14110 	  if (!intel_syntax
14111 	      && address_mode == mode_64bit
14112 	      && isa64 == intel64)
14113 	    {
14114 	      *obufp++ = 'q';
14115 	      break;
14116 	    }
14117 	  /* Fall through.  */
14118 	case 'T':
14119 	  if (!intel_syntax
14120 	      && address_mode == mode_64bit
14121 	      && ((sizeflag & DFLAG) || (rex & REX_W)))
14122 	    {
14123 	      *obufp++ = 'q';
14124 	      break;
14125 	    }
14126 	  /* Fall through.  */
14127 	  goto case_P;
14128 	case 'P':
14129 	  if (l == 0 && len == 1)
14130 	    {
14131 case_P:
14132 	      if (intel_syntax)
14133 		{
14134 		  if ((rex & REX_W) == 0
14135 		      && (prefixes & PREFIX_DATA))
14136 		    {
14137 		      if ((sizeflag & DFLAG) == 0)
14138 			*obufp++ = 'w';
14139 		      used_prefixes |= (prefixes & PREFIX_DATA);
14140 		    }
14141 		  break;
14142 		}
14143 	      if ((prefixes & PREFIX_DATA)
14144 		  || (rex & REX_W)
14145 		  || (sizeflag & SUFFIX_ALWAYS))
14146 		{
14147 		  USED_REX (REX_W);
14148 		  if (rex & REX_W)
14149 		    *obufp++ = 'q';
14150 		  else
14151 		    {
14152 		      if (sizeflag & DFLAG)
14153 			*obufp++ = 'l';
14154 		      else
14155 			*obufp++ = 'w';
14156 		      used_prefixes |= (prefixes & PREFIX_DATA);
14157 		    }
14158 		}
14159 	    }
14160 	  else
14161 	    {
14162 	      if (l != 1 || len != 2 || last[0] != 'L')
14163 		{
14164 		  SAVE_LAST (*p);
14165 		  break;
14166 		}
14167 
14168 	      if ((prefixes & PREFIX_DATA)
14169 		  || (rex & REX_W)
14170 		  || (sizeflag & SUFFIX_ALWAYS))
14171 		{
14172 		  USED_REX (REX_W);
14173 		  if (rex & REX_W)
14174 		    *obufp++ = 'q';
14175 		  else
14176 		    {
14177 		      if (sizeflag & DFLAG)
14178 			*obufp++ = intel_syntax ? 'd' : 'l';
14179 		      else
14180 			*obufp++ = 'w';
14181 		      used_prefixes |= (prefixes & PREFIX_DATA);
14182 		    }
14183 		}
14184 	    }
14185 	  break;
14186 	case 'U':
14187 	  if (intel_syntax)
14188 	    break;
14189 	  if (address_mode == mode_64bit
14190 	      && ((sizeflag & DFLAG) || (rex & REX_W)))
14191 	    {
14192 	      if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
14193 		*obufp++ = 'q';
14194 	      break;
14195 	    }
14196 	  /* Fall through.  */
14197 	  goto case_Q;
14198 	case 'Q':
14199 	  if (l == 0 && len == 1)
14200 	    {
14201 case_Q:
14202 	      if (intel_syntax && !alt)
14203 		break;
14204 	      USED_REX (REX_W);
14205 	      if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
14206 		{
14207 		  if (rex & REX_W)
14208 		    *obufp++ = 'q';
14209 		  else
14210 		    {
14211 		      if (sizeflag & DFLAG)
14212 			*obufp++ = intel_syntax ? 'd' : 'l';
14213 		      else
14214 			*obufp++ = 'w';
14215 		      used_prefixes |= (prefixes & PREFIX_DATA);
14216 		    }
14217 		}
14218 	    }
14219 	  else
14220 	    {
14221 	      if (l != 1 || len != 2 || last[0] != 'L')
14222 		{
14223 		  SAVE_LAST (*p);
14224 		  break;
14225 		}
14226 	      if (intel_syntax
14227 		  || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14228 		break;
14229 	      if ((rex & REX_W))
14230 		{
14231 		  USED_REX (REX_W);
14232 		  *obufp++ = 'q';
14233 		}
14234 	      else
14235 		*obufp++ = 'l';
14236 	    }
14237 	  break;
14238 	case 'R':
14239 	  USED_REX (REX_W);
14240 	  if (rex & REX_W)
14241 	    *obufp++ = 'q';
14242 	  else if (sizeflag & DFLAG)
14243 	    {
14244 	      if (intel_syntax)
14245 		  *obufp++ = 'd';
14246 	      else
14247 		  *obufp++ = 'l';
14248 	    }
14249 	  else
14250 	    *obufp++ = 'w';
14251 	  if (intel_syntax && !p[1]
14252 	      && ((rex & REX_W) || (sizeflag & DFLAG)))
14253 	    *obufp++ = 'e';
14254 	  if (!(rex & REX_W))
14255 	    used_prefixes |= (prefixes & PREFIX_DATA);
14256 	  break;
14257 	case 'V':
14258 	  if (l == 0 && len == 1)
14259 	    {
14260 	      if (intel_syntax)
14261 		break;
14262 	      if (address_mode == mode_64bit
14263 		  && ((sizeflag & DFLAG) || (rex & REX_W)))
14264 		{
14265 		  if (sizeflag & SUFFIX_ALWAYS)
14266 		    *obufp++ = 'q';
14267 		  break;
14268 		}
14269 	    }
14270 	  else
14271 	    {
14272 	      if (l != 1
14273 		  || len != 2
14274 		  || last[0] != 'L')
14275 		{
14276 		  SAVE_LAST (*p);
14277 		  break;
14278 		}
14279 
14280 	      if (rex & REX_W)
14281 		{
14282 		  *obufp++ = 'a';
14283 		  *obufp++ = 'b';
14284 		  *obufp++ = 's';
14285 		}
14286 	    }
14287 	  /* Fall through.  */
14288 	  goto case_S;
14289 	case 'S':
14290 	  if (l == 0 && len == 1)
14291 	    {
14292 case_S:
14293 	      if (intel_syntax)
14294 		break;
14295 	      if (sizeflag & SUFFIX_ALWAYS)
14296 		{
14297 		  if (rex & REX_W)
14298 		    *obufp++ = 'q';
14299 		  else
14300 		    {
14301 		      if (sizeflag & DFLAG)
14302 			*obufp++ = 'l';
14303 		      else
14304 			*obufp++ = 'w';
14305 		      used_prefixes |= (prefixes & PREFIX_DATA);
14306 		    }
14307 		}
14308 	    }
14309 	  else
14310 	    {
14311 	      if (l != 1
14312 		  || len != 2
14313 		  || last[0] != 'L')
14314 		{
14315 		  SAVE_LAST (*p);
14316 		  break;
14317 		}
14318 
14319 	      if (address_mode == mode_64bit
14320 		  && !(prefixes & PREFIX_ADDR))
14321 		{
14322 		  *obufp++ = 'a';
14323 		  *obufp++ = 'b';
14324 		  *obufp++ = 's';
14325 		}
14326 
14327 	      goto case_S;
14328 	    }
14329 	  break;
14330 	case 'X':
14331 	  if (l != 0 || len != 1)
14332 	    {
14333 	      SAVE_LAST (*p);
14334 	      break;
14335 	    }
14336 	  if (need_vex && vex.prefix)
14337 	    {
14338 	      if (vex.prefix == DATA_PREFIX_OPCODE)
14339 		*obufp++ = 'd';
14340 	      else
14341 		*obufp++ = 's';
14342 	    }
14343 	  else
14344 	    {
14345 	      if (prefixes & PREFIX_DATA)
14346 		*obufp++ = 'd';
14347 	      else
14348 		*obufp++ = 's';
14349 	      used_prefixes |= (prefixes & PREFIX_DATA);
14350 	    }
14351 	  break;
14352 	case 'Y':
14353 	  if (l == 0 && len == 1)
14354 	    {
14355 	      if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14356 		break;
14357 	      if (rex & REX_W)
14358 		{
14359 		  USED_REX (REX_W);
14360 		  *obufp++ = 'q';
14361 		}
14362 	      break;
14363 	    }
14364 	  else
14365 	    {
14366 	      if (l != 1 || len != 2 || last[0] != 'X')
14367 		{
14368 		  SAVE_LAST (*p);
14369 		  break;
14370 		}
14371 	      if (!need_vex)
14372 		abort ();
14373 	      if (intel_syntax
14374 		  || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14375 		break;
14376 	      switch (vex.length)
14377 		{
14378 		case 128:
14379 		  *obufp++ = 'x';
14380 		  break;
14381 		case 256:
14382 		  *obufp++ = 'y';
14383 		  break;
14384 		case 512:
14385 		  if (!vex.evex)
14386 		default:
14387 		    abort ();
14388 		}
14389 	    }
14390 	  break;
14391 	case 'W':
14392 	  if (l == 0 && len == 1)
14393 	    {
14394 	      /* operand size flag for cwtl, cbtw */
14395 	      USED_REX (REX_W);
14396 	      if (rex & REX_W)
14397 		{
14398 		  if (intel_syntax)
14399 		    *obufp++ = 'd';
14400 		  else
14401 		    *obufp++ = 'l';
14402 		}
14403 	      else if (sizeflag & DFLAG)
14404 		*obufp++ = 'w';
14405 	      else
14406 		*obufp++ = 'b';
14407 	      if (!(rex & REX_W))
14408 		used_prefixes |= (prefixes & PREFIX_DATA);
14409 	    }
14410 	  else
14411 	    {
14412 	      if (l != 1
14413 		  || len != 2
14414 		  || (last[0] != 'X'
14415 		      && last[0] != 'L'))
14416 		{
14417 		  SAVE_LAST (*p);
14418 		  break;
14419 		}
14420 	      if (!need_vex)
14421 		abort ();
14422 	      if (last[0] == 'X')
14423 		*obufp++ = vex.w ? 'd': 's';
14424 	      else
14425 		*obufp++ = vex.w ? 'q': 'd';
14426 	    }
14427 	  break;
14428 	case '^':
14429 	  if (intel_syntax)
14430 	    break;
14431 	  if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14432 	    {
14433 	      if (sizeflag & DFLAG)
14434 		*obufp++ = 'l';
14435 	      else
14436 		*obufp++ = 'w';
14437 	      used_prefixes |= (prefixes & PREFIX_DATA);
14438 	    }
14439 	  break;
14440 	case '@':
14441 	  if (intel_syntax)
14442 	    break;
14443 	  if (address_mode == mode_64bit
14444 	      && (isa64 == intel64
14445 		  || ((sizeflag & DFLAG) || (rex & REX_W))))
14446 	      *obufp++ = 'q';
14447 	  else if ((prefixes & PREFIX_DATA))
14448 	    {
14449 	      if (!(sizeflag & DFLAG))
14450 		*obufp++ = 'w';
14451 	      used_prefixes |= (prefixes & PREFIX_DATA);
14452 	    }
14453 	  break;
14454 	}
14455       alt = 0;
14456     }
14457   *obufp = 0;
14458   mnemonicendp = obufp;
14459   return 0;
14460 }
14461 
14462 static void
14463 oappend (const char *s)
14464 {
14465   obufp = stpcpy (obufp, s);
14466 }
14467 
14468 static void
14469 append_seg (void)
14470 {
14471   /* Only print the active segment register.  */
14472   if (!active_seg_prefix)
14473     return;
14474 
14475   used_prefixes |= active_seg_prefix;
14476   switch (active_seg_prefix)
14477     {
14478     case PREFIX_CS:
14479       oappend_maybe_intel ("%cs:");
14480       break;
14481     case PREFIX_DS:
14482       oappend_maybe_intel ("%ds:");
14483       break;
14484     case PREFIX_SS:
14485       oappend_maybe_intel ("%ss:");
14486       break;
14487     case PREFIX_ES:
14488       oappend_maybe_intel ("%es:");
14489       break;
14490     case PREFIX_FS:
14491       oappend_maybe_intel ("%fs:");
14492       break;
14493     case PREFIX_GS:
14494       oappend_maybe_intel ("%gs:");
14495       break;
14496     default:
14497       break;
14498     }
14499 }
14500 
14501 static void
14502 OP_indirE (int bytemode, int sizeflag)
14503 {
14504   if (!intel_syntax)
14505     oappend ("*");
14506   OP_E (bytemode, sizeflag);
14507 }
14508 
14509 static void
14510 print_operand_value (char *buf, int hex, bfd_vma disp)
14511 {
14512   if (address_mode == mode_64bit)
14513     {
14514       if (hex)
14515 	{
14516 	  char tmp[30];
14517 	  int i;
14518 	  buf[0] = '0';
14519 	  buf[1] = 'x';
14520 	  sprintf_vma (tmp, disp);
14521 	  for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
14522 	  strcpy (buf + 2, tmp + i);
14523 	}
14524       else
14525 	{
14526 	  bfd_signed_vma v = disp;
14527 	  char tmp[30];
14528 	  int i;
14529 	  if (v < 0)
14530 	    {
14531 	      *(buf++) = '-';
14532 	      v = -disp;
14533 	      /* Check for possible overflow on 0x8000000000000000.  */
14534 	      if (v < 0)
14535 		{
14536 		  strcpy (buf, "9223372036854775808");
14537 		  return;
14538 		}
14539 	    }
14540 	  if (!v)
14541 	    {
14542 	      strcpy (buf, "0");
14543 	      return;
14544 	    }
14545 
14546 	  i = 0;
14547 	  tmp[29] = 0;
14548 	  while (v)
14549 	    {
14550 	      tmp[28 - i] = (v % 10) + '0';
14551 	      v /= 10;
14552 	      i++;
14553 	    }
14554 	  strcpy (buf, tmp + 29 - i);
14555 	}
14556     }
14557   else
14558     {
14559       if (hex)
14560 	sprintf (buf, "0x%x", (unsigned int) disp);
14561       else
14562 	sprintf (buf, "%d", (int) disp);
14563     }
14564 }
14565 
14566 /* Put DISP in BUF as signed hex number.  */
14567 
14568 static void
14569 print_displacement (char *buf, bfd_vma disp)
14570 {
14571   bfd_signed_vma val = disp;
14572   char tmp[30];
14573   int i, j = 0;
14574 
14575   if (val < 0)
14576     {
14577       buf[j++] = '-';
14578       val = -disp;
14579 
14580       /* Check for possible overflow.  */
14581       if (val < 0)
14582 	{
14583 	  switch (address_mode)
14584 	    {
14585 	    case mode_64bit:
14586 	      strcpy (buf + j, "0x8000000000000000");
14587 	      break;
14588 	    case mode_32bit:
14589 	      strcpy (buf + j, "0x80000000");
14590 	      break;
14591 	    case mode_16bit:
14592 	      strcpy (buf + j, "0x8000");
14593 	      break;
14594 	    }
14595 	  return;
14596 	}
14597     }
14598 
14599   buf[j++] = '0';
14600   buf[j++] = 'x';
14601 
14602   sprintf_vma (tmp, (bfd_vma) val);
14603   for (i = 0; tmp[i] == '0'; i++)
14604     continue;
14605   if (tmp[i] == '\0')
14606     i--;
14607   strcpy (buf + j, tmp + i);
14608 }
14609 
14610 static void
14611 intel_operand_size (int bytemode, int sizeflag)
14612 {
14613   if (vex.evex
14614       && vex.b
14615       && (bytemode == x_mode
14616 	  || bytemode == evex_half_bcst_xmmq_mode))
14617     {
14618       if (vex.w)
14619 	oappend ("QWORD PTR ");
14620       else
14621 	oappend ("DWORD PTR ");
14622       return;
14623     }
14624   switch (bytemode)
14625     {
14626     case b_mode:
14627     case b_swap_mode:
14628     case dqb_mode:
14629     case db_mode:
14630       oappend ("BYTE PTR ");
14631       break;
14632     case w_mode:
14633     case dw_mode:
14634     case dqw_mode:
14635       oappend ("WORD PTR ");
14636       break;
14637     case indir_v_mode:
14638       if (address_mode == mode_64bit && isa64 == intel64)
14639 	{
14640 	  oappend ("QWORD PTR ");
14641 	  break;
14642 	}
14643       /* Fall through.  */
14644     case stack_v_mode:
14645       if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
14646 	{
14647 	  oappend ("QWORD PTR ");
14648 	  break;
14649 	}
14650       /* Fall through.  */
14651     case v_mode:
14652     case v_swap_mode:
14653     case dq_mode:
14654       USED_REX (REX_W);
14655       if (rex & REX_W)
14656 	oappend ("QWORD PTR ");
14657       else
14658 	{
14659 	  if ((sizeflag & DFLAG) || bytemode == dq_mode)
14660 	    oappend ("DWORD PTR ");
14661 	  else
14662 	    oappend ("WORD PTR ");
14663 	  used_prefixes |= (prefixes & PREFIX_DATA);
14664 	}
14665       break;
14666     case z_mode:
14667       if ((rex & REX_W) || (sizeflag & DFLAG))
14668 	*obufp++ = 'D';
14669       oappend ("WORD PTR ");
14670       if (!(rex & REX_W))
14671 	used_prefixes |= (prefixes & PREFIX_DATA);
14672       break;
14673     case a_mode:
14674       if (sizeflag & DFLAG)
14675 	oappend ("QWORD PTR ");
14676       else
14677 	oappend ("DWORD PTR ");
14678       used_prefixes |= (prefixes & PREFIX_DATA);
14679       break;
14680     case d_mode:
14681     case d_scalar_mode:
14682     case d_scalar_swap_mode:
14683     case d_swap_mode:
14684     case dqd_mode:
14685       oappend ("DWORD PTR ");
14686       break;
14687     case q_mode:
14688     case q_scalar_mode:
14689     case q_scalar_swap_mode:
14690     case q_swap_mode:
14691       oappend ("QWORD PTR ");
14692       break;
14693     case m_mode:
14694       if (address_mode == mode_64bit)
14695 	oappend ("QWORD PTR ");
14696       else
14697 	oappend ("DWORD PTR ");
14698       break;
14699     case f_mode:
14700       if (sizeflag & DFLAG)
14701 	oappend ("FWORD PTR ");
14702       else
14703 	oappend ("DWORD PTR ");
14704       used_prefixes |= (prefixes & PREFIX_DATA);
14705       break;
14706     case t_mode:
14707       oappend ("TBYTE PTR ");
14708       break;
14709     case x_mode:
14710     case x_swap_mode:
14711     case evex_x_gscat_mode:
14712     case evex_x_nobcst_mode:
14713       if (need_vex)
14714 	{
14715 	  switch (vex.length)
14716 	    {
14717 	    case 128:
14718 	      oappend ("XMMWORD PTR ");
14719 	      break;
14720 	    case 256:
14721 	      oappend ("YMMWORD PTR ");
14722 	      break;
14723 	    case 512:
14724 	      oappend ("ZMMWORD PTR ");
14725 	      break;
14726 	    default:
14727 	      abort ();
14728 	    }
14729 	}
14730       else
14731 	oappend ("XMMWORD PTR ");
14732       break;
14733     case xmm_mode:
14734       oappend ("XMMWORD PTR ");
14735       break;
14736     case ymm_mode:
14737       oappend ("YMMWORD PTR ");
14738       break;
14739     case xmmq_mode:
14740     case evex_half_bcst_xmmq_mode:
14741       if (!need_vex)
14742 	abort ();
14743 
14744       switch (vex.length)
14745 	{
14746 	case 128:
14747 	  oappend ("QWORD PTR ");
14748 	  break;
14749 	case 256:
14750 	  oappend ("XMMWORD PTR ");
14751 	  break;
14752 	case 512:
14753 	  oappend ("YMMWORD PTR ");
14754 	  break;
14755 	default:
14756 	  abort ();
14757 	}
14758       break;
14759     case xmm_mb_mode:
14760       if (!need_vex)
14761 	abort ();
14762 
14763       switch (vex.length)
14764 	{
14765 	case 128:
14766 	case 256:
14767 	case 512:
14768 	  oappend ("BYTE PTR ");
14769 	  break;
14770 	default:
14771 	  abort ();
14772 	}
14773       break;
14774     case xmm_mw_mode:
14775       if (!need_vex)
14776 	abort ();
14777 
14778       switch (vex.length)
14779 	{
14780 	case 128:
14781 	case 256:
14782 	case 512:
14783 	  oappend ("WORD PTR ");
14784 	  break;
14785 	default:
14786 	  abort ();
14787 	}
14788       break;
14789     case xmm_md_mode:
14790       if (!need_vex)
14791 	abort ();
14792 
14793       switch (vex.length)
14794 	{
14795 	case 128:
14796 	case 256:
14797 	case 512:
14798 	  oappend ("DWORD PTR ");
14799 	  break;
14800 	default:
14801 	  abort ();
14802 	}
14803       break;
14804     case xmm_mq_mode:
14805       if (!need_vex)
14806 	abort ();
14807 
14808       switch (vex.length)
14809 	{
14810 	case 128:
14811 	case 256:
14812 	case 512:
14813 	  oappend ("QWORD PTR ");
14814 	  break;
14815 	default:
14816 	  abort ();
14817 	}
14818       break;
14819     case xmmdw_mode:
14820       if (!need_vex)
14821 	abort ();
14822 
14823       switch (vex.length)
14824 	{
14825 	case 128:
14826 	  oappend ("WORD PTR ");
14827 	  break;
14828 	case 256:
14829 	  oappend ("DWORD PTR ");
14830 	  break;
14831 	case 512:
14832 	  oappend ("QWORD PTR ");
14833 	  break;
14834 	default:
14835 	  abort ();
14836 	}
14837       break;
14838     case xmmqd_mode:
14839       if (!need_vex)
14840 	abort ();
14841 
14842       switch (vex.length)
14843 	{
14844 	case 128:
14845 	  oappend ("DWORD PTR ");
14846 	  break;
14847 	case 256:
14848 	  oappend ("QWORD PTR ");
14849 	  break;
14850 	case 512:
14851 	  oappend ("XMMWORD PTR ");
14852 	  break;
14853 	default:
14854 	  abort ();
14855 	}
14856       break;
14857     case ymmq_mode:
14858       if (!need_vex)
14859 	abort ();
14860 
14861       switch (vex.length)
14862 	{
14863 	case 128:
14864 	  oappend ("QWORD PTR ");
14865 	  break;
14866 	case 256:
14867 	  oappend ("YMMWORD PTR ");
14868 	  break;
14869 	case 512:
14870 	  oappend ("ZMMWORD PTR ");
14871 	  break;
14872 	default:
14873 	  abort ();
14874 	}
14875       break;
14876     case ymmxmm_mode:
14877       if (!need_vex)
14878 	abort ();
14879 
14880       switch (vex.length)
14881 	{
14882 	case 128:
14883 	case 256:
14884 	  oappend ("XMMWORD PTR ");
14885 	  break;
14886 	default:
14887 	  abort ();
14888 	}
14889       break;
14890     case o_mode:
14891       oappend ("OWORD PTR ");
14892       break;
14893     case xmm_mdq_mode:
14894     case vex_w_dq_mode:
14895     case vex_scalar_w_dq_mode:
14896       if (!need_vex)
14897 	abort ();
14898 
14899       if (vex.w)
14900 	oappend ("QWORD PTR ");
14901       else
14902 	oappend ("DWORD PTR ");
14903       break;
14904     case vex_vsib_d_w_dq_mode:
14905     case vex_vsib_q_w_dq_mode:
14906       if (!need_vex)
14907 	abort ();
14908 
14909       if (!vex.evex)
14910 	{
14911 	  if (vex.w)
14912 	    oappend ("QWORD PTR ");
14913 	  else
14914 	    oappend ("DWORD PTR ");
14915 	}
14916       else
14917 	{
14918 	  switch (vex.length)
14919 	    {
14920 	    case 128:
14921 	      oappend ("XMMWORD PTR ");
14922 	      break;
14923 	    case 256:
14924 	      oappend ("YMMWORD PTR ");
14925 	      break;
14926 	    case 512:
14927 	      oappend ("ZMMWORD PTR ");
14928 	      break;
14929 	    default:
14930 	      abort ();
14931 	    }
14932 	}
14933       break;
14934     case vex_vsib_q_w_d_mode:
14935     case vex_vsib_d_w_d_mode:
14936       if (!need_vex || !vex.evex)
14937 	abort ();
14938 
14939       switch (vex.length)
14940 	{
14941 	case 128:
14942 	  oappend ("QWORD PTR ");
14943 	  break;
14944 	case 256:
14945 	  oappend ("XMMWORD PTR ");
14946 	  break;
14947 	case 512:
14948 	  oappend ("YMMWORD PTR ");
14949 	  break;
14950 	default:
14951 	  abort ();
14952 	}
14953 
14954       break;
14955     case mask_bd_mode:
14956       if (!need_vex || vex.length != 128)
14957 	abort ();
14958       if (vex.w)
14959 	oappend ("DWORD PTR ");
14960       else
14961 	oappend ("BYTE PTR ");
14962       break;
14963     case mask_mode:
14964       if (!need_vex)
14965 	abort ();
14966       if (vex.w)
14967 	oappend ("QWORD PTR ");
14968       else
14969 	oappend ("WORD PTR ");
14970       break;
14971     case v_bnd_mode:
14972     default:
14973       break;
14974     }
14975 }
14976 
14977 static void
14978 OP_E_register (int bytemode, int sizeflag)
14979 {
14980   int reg = modrm.rm;
14981   const char **names;
14982 
14983   USED_REX (REX_B);
14984   if ((rex & REX_B))
14985     reg += 8;
14986 
14987   if ((sizeflag & SUFFIX_ALWAYS)
14988       && (bytemode == b_swap_mode
14989 	  || bytemode == v_swap_mode))
14990     swap_operand ();
14991 
14992   switch (bytemode)
14993     {
14994     case b_mode:
14995     case b_swap_mode:
14996       USED_REX (0);
14997       if (rex)
14998 	names = names8rex;
14999       else
15000 	names = names8;
15001       break;
15002     case w_mode:
15003       names = names16;
15004       break;
15005     case d_mode:
15006     case dw_mode:
15007     case db_mode:
15008       names = names32;
15009       break;
15010     case q_mode:
15011       names = names64;
15012       break;
15013     case m_mode:
15014     case v_bnd_mode:
15015       names = address_mode == mode_64bit ? names64 : names32;
15016       break;
15017     case bnd_mode:
15018       names = names_bnd;
15019       break;
15020     case indir_v_mode:
15021       if (address_mode == mode_64bit && isa64 == intel64)
15022 	{
15023 	  names = names64;
15024 	  break;
15025 	}
15026       /* Fall through.  */
15027     case stack_v_mode:
15028       if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
15029 	{
15030 	  names = names64;
15031 	  break;
15032 	}
15033       bytemode = v_mode;
15034       /* Fall through.  */
15035     case v_mode:
15036     case v_swap_mode:
15037     case dq_mode:
15038     case dqb_mode:
15039     case dqd_mode:
15040     case dqw_mode:
15041       USED_REX (REX_W);
15042       if (rex & REX_W)
15043 	names = names64;
15044       else
15045 	{
15046 	  if ((sizeflag & DFLAG)
15047 	      || (bytemode != v_mode
15048 		  && bytemode != v_swap_mode))
15049 	    names = names32;
15050 	  else
15051 	    names = names16;
15052 	  used_prefixes |= (prefixes & PREFIX_DATA);
15053 	}
15054       break;
15055     case mask_bd_mode:
15056     case mask_mode:
15057       if (reg > 0x7)
15058 	{
15059 	  oappend ("(bad)");
15060 	  return;
15061 	}
15062       names = names_mask;
15063       break;
15064     case 0:
15065       return;
15066     default:
15067       oappend (INTERNAL_DISASSEMBLER_ERROR);
15068       return;
15069     }
15070   oappend (names[reg]);
15071 }
15072 
15073 static void
15074 OP_E_memory (int bytemode, int sizeflag)
15075 {
15076   bfd_vma disp = 0;
15077   int add = (rex & REX_B) ? 8 : 0;
15078   int riprel = 0;
15079   int shift;
15080 
15081   if (vex.evex)
15082     {
15083       /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0.  */
15084       if (vex.b
15085 	  && bytemode != x_mode
15086 	  && bytemode != xmmq_mode
15087 	  && bytemode != evex_half_bcst_xmmq_mode)
15088 	{
15089 	  BadOp ();
15090 	  return;
15091 	}
15092       switch (bytemode)
15093 	{
15094 	case dqw_mode:
15095 	case dw_mode:
15096 	  shift = 1;
15097 	  break;
15098 	case dqb_mode:
15099 	case db_mode:
15100 	  shift = 0;
15101 	  break;
15102 	case vex_vsib_d_w_dq_mode:
15103 	case vex_vsib_d_w_d_mode:
15104 	case vex_vsib_q_w_dq_mode:
15105 	case vex_vsib_q_w_d_mode:
15106 	case evex_x_gscat_mode:
15107 	case xmm_mdq_mode:
15108 	  shift = vex.w ? 3 : 2;
15109 	  break;
15110 	case x_mode:
15111 	case evex_half_bcst_xmmq_mode:
15112 	case xmmq_mode:
15113 	  if (vex.b)
15114 	    {
15115 	      shift = vex.w ? 3 : 2;
15116 	      break;
15117 	    }
15118 	  /* Fall through.  */
15119 	case xmmqd_mode:
15120 	case xmmdw_mode:
15121 	case ymmq_mode:
15122 	case evex_x_nobcst_mode:
15123 	case x_swap_mode:
15124 	  switch (vex.length)
15125 	    {
15126 	    case 128:
15127 	      shift = 4;
15128 	      break;
15129 	    case 256:
15130 	      shift = 5;
15131 	      break;
15132 	    case 512:
15133 	      shift = 6;
15134 	      break;
15135 	    default:
15136 	      abort ();
15137 	    }
15138 	  break;
15139 	case ymm_mode:
15140 	  shift = 5;
15141 	  break;
15142 	case xmm_mode:
15143 	  shift = 4;
15144 	  break;
15145 	case xmm_mq_mode:
15146 	case q_mode:
15147 	case q_scalar_mode:
15148 	case q_swap_mode:
15149 	case q_scalar_swap_mode:
15150 	  shift = 3;
15151 	  break;
15152 	case dqd_mode:
15153 	case xmm_md_mode:
15154 	case d_mode:
15155 	case d_scalar_mode:
15156 	case d_swap_mode:
15157 	case d_scalar_swap_mode:
15158 	  shift = 2;
15159 	  break;
15160 	case xmm_mw_mode:
15161 	  shift = 1;
15162 	  break;
15163 	case xmm_mb_mode:
15164 	  shift = 0;
15165 	  break;
15166 	default:
15167 	  abort ();
15168 	}
15169       /* Make necessary corrections to shift for modes that need it.
15170 	 For these modes we currently have shift 4, 5 or 6 depending on
15171 	 vex.length (it corresponds to xmmword, ymmword or zmmword
15172 	 operand).  We might want to make it 3, 4 or 5 (e.g. for
15173 	 xmmq_mode).  In case of broadcast enabled the corrections
15174 	 aren't needed, as element size is always 32 or 64 bits.  */
15175       if (!vex.b
15176 	  && (bytemode == xmmq_mode
15177 	      || bytemode == evex_half_bcst_xmmq_mode))
15178 	shift -= 1;
15179       else if (bytemode == xmmqd_mode)
15180 	shift -= 2;
15181       else if (bytemode == xmmdw_mode)
15182 	shift -= 3;
15183       else if (bytemode == ymmq_mode && vex.length == 128)
15184 	shift -= 1;
15185     }
15186   else
15187     shift = 0;
15188 
15189   USED_REX (REX_B);
15190   if (intel_syntax)
15191     intel_operand_size (bytemode, sizeflag);
15192   append_seg ();
15193 
15194   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
15195     {
15196       /* 32/64 bit address mode */
15197       int havedisp;
15198       int havesib;
15199       int havebase;
15200       int haveindex;
15201       int needindex;
15202       int base, rbase;
15203       int vindex = 0;
15204       int scale = 0;
15205       int addr32flag = !((sizeflag & AFLAG)
15206 			 || bytemode == v_bnd_mode
15207 			 || bytemode == bnd_mode);
15208       const char **indexes64 = names64;
15209       const char **indexes32 = names32;
15210 
15211       havesib = 0;
15212       havebase = 1;
15213       haveindex = 0;
15214       base = modrm.rm;
15215 
15216       if (base == 4)
15217 	{
15218 	  havesib = 1;
15219 	  vindex = sib.index;
15220 	  USED_REX (REX_X);
15221 	  if (rex & REX_X)
15222 	    vindex += 8;
15223 	  switch (bytemode)
15224 	    {
15225 	    case vex_vsib_d_w_dq_mode:
15226 	    case vex_vsib_d_w_d_mode:
15227 	    case vex_vsib_q_w_dq_mode:
15228 	    case vex_vsib_q_w_d_mode:
15229 	      if (!need_vex)
15230 		abort ();
15231 	      if (vex.evex)
15232 		{
15233 		  if (!vex.v)
15234 		    vindex += 16;
15235 		}
15236 
15237 	      haveindex = 1;
15238 	      switch (vex.length)
15239 		{
15240 		case 128:
15241 		  indexes64 = indexes32 = names_xmm;
15242 		  break;
15243 		case 256:
15244 		  if (!vex.w
15245 		      || bytemode == vex_vsib_q_w_dq_mode
15246 		      || bytemode == vex_vsib_q_w_d_mode)
15247 		    indexes64 = indexes32 = names_ymm;
15248 		  else
15249 		    indexes64 = indexes32 = names_xmm;
15250 		  break;
15251 		case 512:
15252 		  if (!vex.w
15253 		      || bytemode == vex_vsib_q_w_dq_mode
15254 		      || bytemode == vex_vsib_q_w_d_mode)
15255 		    indexes64 = indexes32 = names_zmm;
15256 		  else
15257 		    indexes64 = indexes32 = names_ymm;
15258 		  break;
15259 		default:
15260 		  abort ();
15261 		}
15262 	      break;
15263 	    default:
15264 	      haveindex = vindex != 4;
15265 	      break;
15266 	    }
15267 	  scale = sib.scale;
15268 	  base = sib.base;
15269 	  codep++;
15270 	}
15271       rbase = base + add;
15272 
15273       switch (modrm.mod)
15274 	{
15275 	case 0:
15276 	  if (base == 5)
15277 	    {
15278 	      havebase = 0;
15279 	      if (address_mode == mode_64bit && !havesib)
15280 		riprel = 1;
15281 	      disp = get32s ();
15282 	    }
15283 	  break;
15284 	case 1:
15285 	  FETCH_DATA (the_info, codep + 1);
15286 	  disp = *codep++;
15287 	  if ((disp & 0x80) != 0)
15288 	    disp -= 0x100;
15289 	  if (vex.evex && shift > 0)
15290 	    disp <<= shift;
15291 	  break;
15292 	case 2:
15293 	  disp = get32s ();
15294 	  break;
15295 	}
15296 
15297       /* In 32bit mode, we need index register to tell [offset] from
15298 	 [eiz*1 + offset].  */
15299       needindex = (havesib
15300 		   && !havebase
15301 		   && !haveindex
15302 		   && address_mode == mode_32bit);
15303       havedisp = (havebase
15304 		  || needindex
15305 		  || (havesib && (haveindex || scale != 0)));
15306 
15307       if (!intel_syntax)
15308 	if (modrm.mod != 0 || base == 5)
15309 	  {
15310 	    if (havedisp || riprel)
15311 	      print_displacement (scratchbuf, disp);
15312 	    else
15313 	      print_operand_value (scratchbuf, 1, disp);
15314 	    oappend (scratchbuf);
15315 	    if (riprel)
15316 	      {
15317 		set_op (disp, 1);
15318 		oappend (!addr32flag ? "(%rip)" : "(%eip)");
15319 	      }
15320 	  }
15321 
15322       if ((havebase || haveindex || riprel)
15323 	  && (bytemode != v_bnd_mode)
15324 	  && (bytemode != bnd_mode))
15325 	used_prefixes |= PREFIX_ADDR;
15326 
15327       if (havedisp || (intel_syntax && riprel))
15328 	{
15329 	  *obufp++ = open_char;
15330 	  if (intel_syntax && riprel)
15331 	    {
15332 	      set_op (disp, 1);
15333 	      oappend (!addr32flag ? "rip" : "eip");
15334 	    }
15335 	  *obufp = '\0';
15336 	  if (havebase)
15337 	    oappend (address_mode == mode_64bit && !addr32flag
15338 		     ? names64[rbase] : names32[rbase]);
15339 	  if (havesib)
15340 	    {
15341 	      /* ESP/RSP won't allow index.  If base isn't ESP/RSP,
15342 		 print index to tell base + index from base.  */
15343 	      if (scale != 0
15344 		  || needindex
15345 		  || haveindex
15346 		  || (havebase && base != ESP_REG_NUM))
15347 		{
15348 		  if (!intel_syntax || havebase)
15349 		    {
15350 		      *obufp++ = separator_char;
15351 		      *obufp = '\0';
15352 		    }
15353 		  if (haveindex)
15354 		    oappend (address_mode == mode_64bit && !addr32flag
15355 			     ? indexes64[vindex] : indexes32[vindex]);
15356 		  else
15357 		    oappend (address_mode == mode_64bit && !addr32flag
15358 			     ? index64 : index32);
15359 
15360 		  *obufp++ = scale_char;
15361 		  *obufp = '\0';
15362 		  sprintf (scratchbuf, "%d", 1 << scale);
15363 		  oappend (scratchbuf);
15364 		}
15365 	    }
15366 	  if (intel_syntax
15367 	      && (disp || modrm.mod != 0 || base == 5))
15368 	    {
15369 	      if (!havedisp || (bfd_signed_vma) disp >= 0)
15370 		{
15371 		  *obufp++ = '+';
15372 		  *obufp = '\0';
15373 		}
15374 	      else if (modrm.mod != 1 && disp != -disp)
15375 		{
15376 		  *obufp++ = '-';
15377 		  *obufp = '\0';
15378 		  disp = - (bfd_signed_vma) disp;
15379 		}
15380 
15381 	      if (havedisp)
15382 		print_displacement (scratchbuf, disp);
15383 	      else
15384 		print_operand_value (scratchbuf, 1, disp);
15385 	      oappend (scratchbuf);
15386 	    }
15387 
15388 	  *obufp++ = close_char;
15389 	  *obufp = '\0';
15390 	}
15391       else if (intel_syntax)
15392 	{
15393 	  if (modrm.mod != 0 || base == 5)
15394 	    {
15395 	      if (!active_seg_prefix)
15396 		{
15397 		  oappend (names_seg[ds_reg - es_reg]);
15398 		  oappend (":");
15399 		}
15400 	      print_operand_value (scratchbuf, 1, disp);
15401 	      oappend (scratchbuf);
15402 	    }
15403 	}
15404     }
15405   else
15406     {
15407       /* 16 bit address mode */
15408       used_prefixes |= prefixes & PREFIX_ADDR;
15409       switch (modrm.mod)
15410 	{
15411 	case 0:
15412 	  if (modrm.rm == 6)
15413 	    {
15414 	      disp = get16 ();
15415 	      if ((disp & 0x8000) != 0)
15416 		disp -= 0x10000;
15417 	    }
15418 	  break;
15419 	case 1:
15420 	  FETCH_DATA (the_info, codep + 1);
15421 	  disp = *codep++;
15422 	  if ((disp & 0x80) != 0)
15423 	    disp -= 0x100;
15424 	  break;
15425 	case 2:
15426 	  disp = get16 ();
15427 	  if ((disp & 0x8000) != 0)
15428 	    disp -= 0x10000;
15429 	  break;
15430 	}
15431 
15432       if (!intel_syntax)
15433 	if (modrm.mod != 0 || modrm.rm == 6)
15434 	  {
15435 	    print_displacement (scratchbuf, disp);
15436 	    oappend (scratchbuf);
15437 	  }
15438 
15439       if (modrm.mod != 0 || modrm.rm != 6)
15440 	{
15441 	  *obufp++ = open_char;
15442 	  *obufp = '\0';
15443 	  oappend (index16[modrm.rm]);
15444 	  if (intel_syntax
15445 	      && (disp || modrm.mod != 0 || modrm.rm == 6))
15446 	    {
15447 	      if ((bfd_signed_vma) disp >= 0)
15448 		{
15449 		  *obufp++ = '+';
15450 		  *obufp = '\0';
15451 		}
15452 	      else if (modrm.mod != 1)
15453 		{
15454 		  *obufp++ = '-';
15455 		  *obufp = '\0';
15456 		  disp = - (bfd_signed_vma) disp;
15457 		}
15458 
15459 	      print_displacement (scratchbuf, disp);
15460 	      oappend (scratchbuf);
15461 	    }
15462 
15463 	  *obufp++ = close_char;
15464 	  *obufp = '\0';
15465 	}
15466       else if (intel_syntax)
15467 	{
15468 	  if (!active_seg_prefix)
15469 	    {
15470 	      oappend (names_seg[ds_reg - es_reg]);
15471 	      oappend (":");
15472 	    }
15473 	  print_operand_value (scratchbuf, 1, disp & 0xffff);
15474 	  oappend (scratchbuf);
15475 	}
15476     }
15477   if (vex.evex && vex.b
15478       && (bytemode == x_mode
15479 	  || bytemode == xmmq_mode
15480 	  || bytemode == evex_half_bcst_xmmq_mode))
15481     {
15482       if (vex.w
15483 	  || bytemode == xmmq_mode
15484 	  || bytemode == evex_half_bcst_xmmq_mode)
15485 	{
15486 	  switch (vex.length)
15487 	    {
15488 	    case 128:
15489 	      oappend ("{1to2}");
15490 	      break;
15491 	    case 256:
15492 	      oappend ("{1to4}");
15493 	      break;
15494 	    case 512:
15495 	      oappend ("{1to8}");
15496 	      break;
15497 	    default:
15498 	      abort ();
15499 	    }
15500 	}
15501       else
15502 	{
15503 	  switch (vex.length)
15504 	    {
15505 	    case 128:
15506 	      oappend ("{1to4}");
15507 	      break;
15508 	    case 256:
15509 	      oappend ("{1to8}");
15510 	      break;
15511 	    case 512:
15512 	      oappend ("{1to16}");
15513 	      break;
15514 	    default:
15515 	      abort ();
15516 	    }
15517 	}
15518     }
15519 }
15520 
15521 static void
15522 OP_E (int bytemode, int sizeflag)
15523 {
15524   /* Skip mod/rm byte.  */
15525   MODRM_CHECK;
15526   codep++;
15527 
15528   if (modrm.mod == 3)
15529     OP_E_register (bytemode, sizeflag);
15530   else
15531     OP_E_memory (bytemode, sizeflag);
15532 }
15533 
15534 static void
15535 OP_G (int bytemode, int sizeflag)
15536 {
15537   int add = 0;
15538   USED_REX (REX_R);
15539   if (rex & REX_R)
15540     add += 8;
15541   switch (bytemode)
15542     {
15543     case b_mode:
15544       USED_REX (0);
15545       if (rex)
15546 	oappend (names8rex[modrm.reg + add]);
15547       else
15548 	oappend (names8[modrm.reg + add]);
15549       break;
15550     case w_mode:
15551       oappend (names16[modrm.reg + add]);
15552       break;
15553     case d_mode:
15554     case db_mode:
15555     case dw_mode:
15556       oappend (names32[modrm.reg + add]);
15557       break;
15558     case q_mode:
15559       oappend (names64[modrm.reg + add]);
15560       break;
15561     case bnd_mode:
15562       oappend (names_bnd[modrm.reg]);
15563       break;
15564     case v_mode:
15565     case dq_mode:
15566     case dqb_mode:
15567     case dqd_mode:
15568     case dqw_mode:
15569       USED_REX (REX_W);
15570       if (rex & REX_W)
15571 	oappend (names64[modrm.reg + add]);
15572       else
15573 	{
15574 	  if ((sizeflag & DFLAG) || bytemode != v_mode)
15575 	    oappend (names32[modrm.reg + add]);
15576 	  else
15577 	    oappend (names16[modrm.reg + add]);
15578 	  used_prefixes |= (prefixes & PREFIX_DATA);
15579 	}
15580       break;
15581     case m_mode:
15582       if (address_mode == mode_64bit)
15583 	oappend (names64[modrm.reg + add]);
15584       else
15585 	oappend (names32[modrm.reg + add]);
15586       break;
15587     case mask_bd_mode:
15588     case mask_mode:
15589       if ((modrm.reg + add) > 0x7)
15590 	{
15591 	  oappend ("(bad)");
15592 	  return;
15593 	}
15594       oappend (names_mask[modrm.reg + add]);
15595       break;
15596     default:
15597       oappend (INTERNAL_DISASSEMBLER_ERROR);
15598       break;
15599     }
15600 }
15601 
15602 static bfd_vma
15603 get64 (void)
15604 {
15605   bfd_vma x;
15606 #ifdef BFD64
15607   unsigned int a;
15608   unsigned int b;
15609 
15610   FETCH_DATA (the_info, codep + 8);
15611   a = *codep++ & 0xff;
15612   a |= (*codep++ & 0xff) << 8;
15613   a |= (*codep++ & 0xff) << 16;
15614   a |= (*codep++ & 0xffu) << 24;
15615   b = *codep++ & 0xff;
15616   b |= (*codep++ & 0xff) << 8;
15617   b |= (*codep++ & 0xff) << 16;
15618   b |= (*codep++ & 0xffu) << 24;
15619   x = a + ((bfd_vma) b << 32);
15620 #else
15621   abort ();
15622   x = 0;
15623 #endif
15624   return x;
15625 }
15626 
15627 static bfd_signed_vma
15628 get32 (void)
15629 {
15630   bfd_signed_vma x = 0;
15631 
15632   FETCH_DATA (the_info, codep + 4);
15633   x = *codep++ & (bfd_signed_vma) 0xff;
15634   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15635   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15636   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15637   return x;
15638 }
15639 
15640 static bfd_signed_vma
15641 get32s (void)
15642 {
15643   bfd_signed_vma x = 0;
15644 
15645   FETCH_DATA (the_info, codep + 4);
15646   x = *codep++ & (bfd_signed_vma) 0xff;
15647   x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15648   x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15649   x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15650 
15651   x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15652 
15653   return x;
15654 }
15655 
15656 static int
15657 get16 (void)
15658 {
15659   int x = 0;
15660 
15661   FETCH_DATA (the_info, codep + 2);
15662   x = *codep++ & 0xff;
15663   x |= (*codep++ & 0xff) << 8;
15664   return x;
15665 }
15666 
15667 static void
15668 set_op (bfd_vma op, int riprel)
15669 {
15670   op_index[op_ad] = op_ad;
15671   if (address_mode == mode_64bit)
15672     {
15673       op_address[op_ad] = op;
15674       op_riprel[op_ad] = riprel;
15675     }
15676   else
15677     {
15678       /* Mask to get a 32-bit address.  */
15679       op_address[op_ad] = op & 0xffffffff;
15680       op_riprel[op_ad] = riprel & 0xffffffff;
15681     }
15682 }
15683 
15684 static void
15685 OP_REG (int code, int sizeflag)
15686 {
15687   const char *s;
15688   int add;
15689 
15690   switch (code)
15691     {
15692     case es_reg: case ss_reg: case cs_reg:
15693     case ds_reg: case fs_reg: case gs_reg:
15694       oappend (names_seg[code - es_reg]);
15695       return;
15696     }
15697 
15698   USED_REX (REX_B);
15699   if (rex & REX_B)
15700     add = 8;
15701   else
15702     add = 0;
15703 
15704   switch (code)
15705     {
15706     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15707     case sp_reg: case bp_reg: case si_reg: case di_reg:
15708       s = names16[code - ax_reg + add];
15709       break;
15710     case al_reg: case ah_reg: case cl_reg: case ch_reg:
15711     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15712       USED_REX (0);
15713       if (rex)
15714 	s = names8rex[code - al_reg + add];
15715       else
15716 	s = names8[code - al_reg];
15717       break;
15718     case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15719     case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
15720       if (address_mode == mode_64bit
15721 	  && ((sizeflag & DFLAG) || (rex & REX_W)))
15722 	{
15723 	  s = names64[code - rAX_reg + add];
15724 	  break;
15725 	}
15726       code += eAX_reg - rAX_reg;
15727       /* Fall through.  */
15728     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15729     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
15730       USED_REX (REX_W);
15731       if (rex & REX_W)
15732 	s = names64[code - eAX_reg + add];
15733       else
15734 	{
15735 	  if (sizeflag & DFLAG)
15736 	    s = names32[code - eAX_reg + add];
15737 	  else
15738 	    s = names16[code - eAX_reg + add];
15739 	  used_prefixes |= (prefixes & PREFIX_DATA);
15740 	}
15741       break;
15742     default:
15743       s = INTERNAL_DISASSEMBLER_ERROR;
15744       break;
15745     }
15746   oappend (s);
15747 }
15748 
15749 static void
15750 OP_IMREG (int code, int sizeflag)
15751 {
15752   const char *s;
15753 
15754   switch (code)
15755     {
15756     case indir_dx_reg:
15757       if (intel_syntax)
15758 	s = "dx";
15759       else
15760 	s = "(%dx)";
15761       break;
15762     case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15763     case sp_reg: case bp_reg: case si_reg: case di_reg:
15764       s = names16[code - ax_reg];
15765       break;
15766     case es_reg: case ss_reg: case cs_reg:
15767     case ds_reg: case fs_reg: case gs_reg:
15768       s = names_seg[code - es_reg];
15769       break;
15770     case al_reg: case ah_reg: case cl_reg: case ch_reg:
15771     case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15772       USED_REX (0);
15773       if (rex)
15774 	s = names8rex[code - al_reg];
15775       else
15776 	s = names8[code - al_reg];
15777       break;
15778     case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15779     case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
15780       USED_REX (REX_W);
15781       if (rex & REX_W)
15782 	s = names64[code - eAX_reg];
15783       else
15784 	{
15785 	  if (sizeflag & DFLAG)
15786 	    s = names32[code - eAX_reg];
15787 	  else
15788 	    s = names16[code - eAX_reg];
15789 	  used_prefixes |= (prefixes & PREFIX_DATA);
15790 	}
15791       break;
15792     case z_mode_ax_reg:
15793       if ((rex & REX_W) || (sizeflag & DFLAG))
15794 	s = *names32;
15795       else
15796 	s = *names16;
15797       if (!(rex & REX_W))
15798 	used_prefixes |= (prefixes & PREFIX_DATA);
15799       break;
15800     default:
15801       s = INTERNAL_DISASSEMBLER_ERROR;
15802       break;
15803     }
15804   oappend (s);
15805 }
15806 
15807 static void
15808 OP_I (int bytemode, int sizeflag)
15809 {
15810   bfd_signed_vma op;
15811   bfd_signed_vma mask = -1;
15812 
15813   switch (bytemode)
15814     {
15815     case b_mode:
15816       FETCH_DATA (the_info, codep + 1);
15817       op = *codep++;
15818       mask = 0xff;
15819       break;
15820     case q_mode:
15821       if (address_mode == mode_64bit)
15822 	{
15823 	  op = get32s ();
15824 	  break;
15825 	}
15826       /* Fall through.  */
15827     case v_mode:
15828       USED_REX (REX_W);
15829       if (rex & REX_W)
15830 	op = get32s ();
15831       else
15832 	{
15833 	  if (sizeflag & DFLAG)
15834 	    {
15835 	      op = get32 ();
15836 	      mask = 0xffffffff;
15837 	    }
15838 	  else
15839 	    {
15840 	      op = get16 ();
15841 	      mask = 0xfffff;
15842 	    }
15843 	  used_prefixes |= (prefixes & PREFIX_DATA);
15844 	}
15845       break;
15846     case w_mode:
15847       mask = 0xfffff;
15848       op = get16 ();
15849       break;
15850     case const_1_mode:
15851       if (intel_syntax)
15852 	oappend ("1");
15853       return;
15854     default:
15855       oappend (INTERNAL_DISASSEMBLER_ERROR);
15856       return;
15857     }
15858 
15859   op &= mask;
15860   scratchbuf[0] = '$';
15861   print_operand_value (scratchbuf + 1, 1, op);
15862   oappend_maybe_intel (scratchbuf);
15863   scratchbuf[0] = '\0';
15864 }
15865 
15866 static void
15867 OP_I64 (int bytemode, int sizeflag)
15868 {
15869   bfd_signed_vma op;
15870   bfd_signed_vma mask = -1;
15871 
15872   if (address_mode != mode_64bit)
15873     {
15874       OP_I (bytemode, sizeflag);
15875       return;
15876     }
15877 
15878   switch (bytemode)
15879     {
15880     case b_mode:
15881       FETCH_DATA (the_info, codep + 1);
15882       op = *codep++;
15883       mask = 0xff;
15884       break;
15885     case v_mode:
15886       USED_REX (REX_W);
15887       if (rex & REX_W)
15888 	op = get64 ();
15889       else
15890 	{
15891 	  if (sizeflag & DFLAG)
15892 	    {
15893 	      op = get32 ();
15894 	      mask = 0xffffffff;
15895 	    }
15896 	  else
15897 	    {
15898 	      op = get16 ();
15899 	      mask = 0xfffff;
15900 	    }
15901 	  used_prefixes |= (prefixes & PREFIX_DATA);
15902 	}
15903       break;
15904     case w_mode:
15905       mask = 0xfffff;
15906       op = get16 ();
15907       break;
15908     default:
15909       oappend (INTERNAL_DISASSEMBLER_ERROR);
15910       return;
15911     }
15912 
15913   op &= mask;
15914   scratchbuf[0] = '$';
15915   print_operand_value (scratchbuf + 1, 1, op);
15916   oappend_maybe_intel (scratchbuf);
15917   scratchbuf[0] = '\0';
15918 }
15919 
15920 static void
15921 OP_sI (int bytemode, int sizeflag)
15922 {
15923   bfd_signed_vma op;
15924 
15925   switch (bytemode)
15926     {
15927     case b_mode:
15928     case b_T_mode:
15929       FETCH_DATA (the_info, codep + 1);
15930       op = *codep++;
15931       if ((op & 0x80) != 0)
15932 	op -= 0x100;
15933       if (bytemode == b_T_mode)
15934 	{
15935 	  if (address_mode != mode_64bit
15936 	      || !((sizeflag & DFLAG) || (rex & REX_W)))
15937 	    {
15938 	      /* The operand-size prefix is overridden by a REX prefix.  */
15939 	      if ((sizeflag & DFLAG) || (rex & REX_W))
15940 		op &= 0xffffffff;
15941 	      else
15942 		op &= 0xffff;
15943 	  }
15944 	}
15945       else
15946 	{
15947 	  if (!(rex & REX_W))
15948 	    {
15949 	      if (sizeflag & DFLAG)
15950 		op &= 0xffffffff;
15951 	      else
15952 		op &= 0xffff;
15953 	    }
15954 	}
15955       break;
15956     case v_mode:
15957       /* The operand-size prefix is overridden by a REX prefix.  */
15958       if ((sizeflag & DFLAG) || (rex & REX_W))
15959 	op = get32s ();
15960       else
15961 	op = get16 ();
15962       break;
15963     default:
15964       oappend (INTERNAL_DISASSEMBLER_ERROR);
15965       return;
15966     }
15967 
15968   scratchbuf[0] = '$';
15969   print_operand_value (scratchbuf + 1, 1, op);
15970   oappend_maybe_intel (scratchbuf);
15971 }
15972 
15973 static void
15974 OP_J (int bytemode, int sizeflag)
15975 {
15976   bfd_vma disp;
15977   bfd_vma mask = -1;
15978   bfd_vma segment = 0;
15979 
15980   switch (bytemode)
15981     {
15982     case b_mode:
15983       FETCH_DATA (the_info, codep + 1);
15984       disp = *codep++;
15985       if ((disp & 0x80) != 0)
15986 	disp -= 0x100;
15987       break;
15988     case v_mode:
15989       if (isa64 == amd64)
15990 	USED_REX (REX_W);
15991       if ((sizeflag & DFLAG)
15992 	  || (address_mode == mode_64bit
15993 	      && (isa64 != amd64 || (rex & REX_W))))
15994 	disp = get32s ();
15995       else
15996 	{
15997 	  disp = get16 ();
15998 	  if ((disp & 0x8000) != 0)
15999 	    disp -= 0x10000;
16000 	  /* In 16bit mode, address is wrapped around at 64k within
16001 	     the same segment.  Otherwise, a data16 prefix on a jump
16002 	     instruction means that the pc is masked to 16 bits after
16003 	     the displacement is added!  */
16004 	  mask = 0xffff;
16005 	  if ((prefixes & PREFIX_DATA) == 0)
16006 	    segment = ((start_pc + (codep - start_codep))
16007 		       & ~((bfd_vma) 0xffff));
16008 	}
16009       if (address_mode != mode_64bit
16010 	  || (isa64 == amd64 && !(rex & REX_W)))
16011 	used_prefixes |= (prefixes & PREFIX_DATA);
16012       break;
16013     default:
16014       oappend (INTERNAL_DISASSEMBLER_ERROR);
16015       return;
16016     }
16017   disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
16018   set_op (disp, 0);
16019   print_operand_value (scratchbuf, 1, disp);
16020   oappend (scratchbuf);
16021 }
16022 
16023 static void
16024 OP_SEG (int bytemode, int sizeflag)
16025 {
16026   if (bytemode == w_mode)
16027     oappend (names_seg[modrm.reg]);
16028   else
16029     OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
16030 }
16031 
16032 static void
16033 OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
16034 {
16035   int seg, offset;
16036 
16037   if (sizeflag & DFLAG)
16038     {
16039       offset = get32 ();
16040       seg = get16 ();
16041     }
16042   else
16043     {
16044       offset = get16 ();
16045       seg = get16 ();
16046     }
16047   used_prefixes |= (prefixes & PREFIX_DATA);
16048   if (intel_syntax)
16049     sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
16050   else
16051     sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
16052   oappend (scratchbuf);
16053 }
16054 
16055 static void
16056 OP_OFF (int bytemode, int sizeflag)
16057 {
16058   bfd_vma off;
16059 
16060   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16061     intel_operand_size (bytemode, sizeflag);
16062   append_seg ();
16063 
16064   if ((sizeflag & AFLAG) || address_mode == mode_64bit)
16065     off = get32 ();
16066   else
16067     off = get16 ();
16068 
16069   if (intel_syntax)
16070     {
16071       if (!active_seg_prefix)
16072 	{
16073 	  oappend (names_seg[ds_reg - es_reg]);
16074 	  oappend (":");
16075 	}
16076     }
16077   print_operand_value (scratchbuf, 1, off);
16078   oappend (scratchbuf);
16079 }
16080 
16081 static void
16082 OP_OFF64 (int bytemode, int sizeflag)
16083 {
16084   bfd_vma off;
16085 
16086   if (address_mode != mode_64bit
16087       || (prefixes & PREFIX_ADDR))
16088     {
16089       OP_OFF (bytemode, sizeflag);
16090       return;
16091     }
16092 
16093   if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16094     intel_operand_size (bytemode, sizeflag);
16095   append_seg ();
16096 
16097   off = get64 ();
16098 
16099   if (intel_syntax)
16100     {
16101       if (!active_seg_prefix)
16102 	{
16103 	  oappend (names_seg[ds_reg - es_reg]);
16104 	  oappend (":");
16105 	}
16106     }
16107   print_operand_value (scratchbuf, 1, off);
16108   oappend (scratchbuf);
16109 }
16110 
16111 static void
16112 ptr_reg (int code, int sizeflag)
16113 {
16114   const char *s;
16115 
16116   *obufp++ = open_char;
16117   used_prefixes |= (prefixes & PREFIX_ADDR);
16118   if (address_mode == mode_64bit)
16119     {
16120       if (!(sizeflag & AFLAG))
16121 	s = names32[code - eAX_reg];
16122       else
16123 	s = names64[code - eAX_reg];
16124     }
16125   else if (sizeflag & AFLAG)
16126     s = names32[code - eAX_reg];
16127   else
16128     s = names16[code - eAX_reg];
16129   oappend (s);
16130   *obufp++ = close_char;
16131   *obufp = 0;
16132 }
16133 
16134 static void
16135 OP_ESreg (int code, int sizeflag)
16136 {
16137   if (intel_syntax)
16138     {
16139       switch (codep[-1])
16140 	{
16141 	case 0x6d:	/* insw/insl */
16142 	  intel_operand_size (z_mode, sizeflag);
16143 	  break;
16144 	case 0xa5:	/* movsw/movsl/movsq */
16145 	case 0xa7:	/* cmpsw/cmpsl/cmpsq */
16146 	case 0xab:	/* stosw/stosl */
16147 	case 0xaf:	/* scasw/scasl */
16148 	  intel_operand_size (v_mode, sizeflag);
16149 	  break;
16150 	default:
16151 	  intel_operand_size (b_mode, sizeflag);
16152 	}
16153     }
16154   oappend_maybe_intel ("%es:");
16155   ptr_reg (code, sizeflag);
16156 }
16157 
16158 static void
16159 OP_DSreg (int code, int sizeflag)
16160 {
16161   if (intel_syntax)
16162     {
16163       switch (codep[-1])
16164 	{
16165 	case 0x6f:	/* outsw/outsl */
16166 	  intel_operand_size (z_mode, sizeflag);
16167 	  break;
16168 	case 0xa5:	/* movsw/movsl/movsq */
16169 	case 0xa7:	/* cmpsw/cmpsl/cmpsq */
16170 	case 0xad:	/* lodsw/lodsl/lodsq */
16171 	  intel_operand_size (v_mode, sizeflag);
16172 	  break;
16173 	default:
16174 	  intel_operand_size (b_mode, sizeflag);
16175 	}
16176     }
16177   /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16178      default segment register DS is printed.  */
16179   if (!active_seg_prefix)
16180     active_seg_prefix = PREFIX_DS;
16181   append_seg ();
16182   ptr_reg (code, sizeflag);
16183 }
16184 
16185 static void
16186 OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16187 {
16188   int add;
16189   if (rex & REX_R)
16190     {
16191       USED_REX (REX_R);
16192       add = 8;
16193     }
16194   else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
16195     {
16196       all_prefixes[last_lock_prefix] = 0;
16197       used_prefixes |= PREFIX_LOCK;
16198       add = 8;
16199     }
16200   else
16201     add = 0;
16202   sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
16203   oappend_maybe_intel (scratchbuf);
16204 }
16205 
16206 static void
16207 OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16208 {
16209   int add;
16210   USED_REX (REX_R);
16211   if (rex & REX_R)
16212     add = 8;
16213   else
16214     add = 0;
16215   if (intel_syntax)
16216     sprintf (scratchbuf, "db%d", modrm.reg + add);
16217   else
16218     sprintf (scratchbuf, "%%db%d", modrm.reg + add);
16219   oappend (scratchbuf);
16220 }
16221 
16222 static void
16223 OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16224 {
16225   sprintf (scratchbuf, "%%tr%d", modrm.reg);
16226   oappend_maybe_intel (scratchbuf);
16227 }
16228 
16229 static void
16230 OP_R (int bytemode, int sizeflag)
16231 {
16232   /* Skip mod/rm byte.  */
16233   MODRM_CHECK;
16234   codep++;
16235   OP_E_register (bytemode, sizeflag);
16236 }
16237 
16238 static void
16239 OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16240 {
16241   int reg = modrm.reg;
16242   const char **names;
16243 
16244   used_prefixes |= (prefixes & PREFIX_DATA);
16245   if (prefixes & PREFIX_DATA)
16246     {
16247       names = names_xmm;
16248       USED_REX (REX_R);
16249       if (rex & REX_R)
16250 	reg += 8;
16251     }
16252   else
16253     names = names_mm;
16254   oappend (names[reg]);
16255 }
16256 
16257 static void
16258 OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16259 {
16260   int reg = modrm.reg;
16261   const char **names;
16262 
16263   USED_REX (REX_R);
16264   if (rex & REX_R)
16265     reg += 8;
16266   if (vex.evex)
16267     {
16268       if (!vex.r)
16269 	reg += 16;
16270     }
16271 
16272   if (need_vex
16273       && bytemode != xmm_mode
16274       && bytemode != xmmq_mode
16275       && bytemode != evex_half_bcst_xmmq_mode
16276       && bytemode != ymm_mode
16277       && bytemode != scalar_mode)
16278     {
16279       switch (vex.length)
16280 	{
16281 	case 128:
16282 	  names = names_xmm;
16283 	  break;
16284 	case 256:
16285 	  if (vex.w
16286 	      || (bytemode != vex_vsib_q_w_dq_mode
16287 		  && bytemode != vex_vsib_q_w_d_mode))
16288 	    names = names_ymm;
16289 	  else
16290 	    names = names_xmm;
16291 	  break;
16292 	case 512:
16293 	  names = names_zmm;
16294 	  break;
16295 	default:
16296 	  abort ();
16297 	}
16298     }
16299   else if (bytemode == xmmq_mode
16300 	   || bytemode == evex_half_bcst_xmmq_mode)
16301     {
16302       switch (vex.length)
16303 	{
16304 	case 128:
16305 	case 256:
16306 	  names = names_xmm;
16307 	  break;
16308 	case 512:
16309 	  names = names_ymm;
16310 	  break;
16311 	default:
16312 	  abort ();
16313 	}
16314     }
16315   else if (bytemode == ymm_mode)
16316     names = names_ymm;
16317   else
16318     names = names_xmm;
16319   oappend (names[reg]);
16320 }
16321 
16322 static void
16323 OP_EM (int bytemode, int sizeflag)
16324 {
16325   int reg;
16326   const char **names;
16327 
16328   if (modrm.mod != 3)
16329     {
16330       if (intel_syntax
16331 	  && (bytemode == v_mode || bytemode == v_swap_mode))
16332 	{
16333 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16334 	  used_prefixes |= (prefixes & PREFIX_DATA);
16335 	}
16336       OP_E (bytemode, sizeflag);
16337       return;
16338     }
16339 
16340   if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16341     swap_operand ();
16342 
16343   /* Skip mod/rm byte.  */
16344   MODRM_CHECK;
16345   codep++;
16346   used_prefixes |= (prefixes & PREFIX_DATA);
16347   reg = modrm.rm;
16348   if (prefixes & PREFIX_DATA)
16349     {
16350       names = names_xmm;
16351       USED_REX (REX_B);
16352       if (rex & REX_B)
16353 	reg += 8;
16354     }
16355   else
16356     names = names_mm;
16357   oappend (names[reg]);
16358 }
16359 
16360 /* cvt* are the only instructions in sse2 which have
16361    both SSE and MMX operands and also have 0x66 prefix
16362    in their opcode. 0x66 was originally used to differentiate
16363    between SSE and MMX instruction(operands). So we have to handle the
16364    cvt* separately using OP_EMC and OP_MXC */
16365 static void
16366 OP_EMC (int bytemode, int sizeflag)
16367 {
16368   if (modrm.mod != 3)
16369     {
16370       if (intel_syntax && bytemode == v_mode)
16371 	{
16372 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16373 	  used_prefixes |= (prefixes & PREFIX_DATA);
16374 	}
16375       OP_E (bytemode, sizeflag);
16376       return;
16377     }
16378 
16379   /* Skip mod/rm byte.  */
16380   MODRM_CHECK;
16381   codep++;
16382   used_prefixes |= (prefixes & PREFIX_DATA);
16383   oappend (names_mm[modrm.rm]);
16384 }
16385 
16386 static void
16387 OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16388 {
16389   used_prefixes |= (prefixes & PREFIX_DATA);
16390   oappend (names_mm[modrm.reg]);
16391 }
16392 
16393 static void
16394 OP_EX (int bytemode, int sizeflag)
16395 {
16396   int reg;
16397   const char **names;
16398 
16399   /* Skip mod/rm byte.  */
16400   MODRM_CHECK;
16401   codep++;
16402 
16403   if (modrm.mod != 3)
16404     {
16405       OP_E_memory (bytemode, sizeflag);
16406       return;
16407     }
16408 
16409   reg = modrm.rm;
16410   USED_REX (REX_B);
16411   if (rex & REX_B)
16412     reg += 8;
16413   if (vex.evex)
16414     {
16415       USED_REX (REX_X);
16416       if ((rex & REX_X))
16417 	reg += 16;
16418     }
16419 
16420   if ((sizeflag & SUFFIX_ALWAYS)
16421       && (bytemode == x_swap_mode
16422 	  || bytemode == d_swap_mode
16423 	  || bytemode == d_scalar_swap_mode
16424 	  || bytemode == q_swap_mode
16425 	  || bytemode == q_scalar_swap_mode))
16426     swap_operand ();
16427 
16428   if (need_vex
16429       && bytemode != xmm_mode
16430       && bytemode != xmmdw_mode
16431       && bytemode != xmmqd_mode
16432       && bytemode != xmm_mb_mode
16433       && bytemode != xmm_mw_mode
16434       && bytemode != xmm_md_mode
16435       && bytemode != xmm_mq_mode
16436       && bytemode != xmm_mdq_mode
16437       && bytemode != xmmq_mode
16438       && bytemode != evex_half_bcst_xmmq_mode
16439       && bytemode != ymm_mode
16440       && bytemode != d_scalar_mode
16441       && bytemode != d_scalar_swap_mode
16442       && bytemode != q_scalar_mode
16443       && bytemode != q_scalar_swap_mode
16444       && bytemode != vex_scalar_w_dq_mode)
16445     {
16446       switch (vex.length)
16447 	{
16448 	case 128:
16449 	  names = names_xmm;
16450 	  break;
16451 	case 256:
16452 	  names = names_ymm;
16453 	  break;
16454 	case 512:
16455 	  names = names_zmm;
16456 	  break;
16457 	default:
16458 	  abort ();
16459 	}
16460     }
16461   else if (bytemode == xmmq_mode
16462 	   || bytemode == evex_half_bcst_xmmq_mode)
16463     {
16464       switch (vex.length)
16465 	{
16466 	case 128:
16467 	case 256:
16468 	  names = names_xmm;
16469 	  break;
16470 	case 512:
16471 	  names = names_ymm;
16472 	  break;
16473 	default:
16474 	  abort ();
16475 	}
16476     }
16477   else if (bytemode == ymm_mode)
16478     names = names_ymm;
16479   else
16480     names = names_xmm;
16481   oappend (names[reg]);
16482 }
16483 
16484 static void
16485 OP_MS (int bytemode, int sizeflag)
16486 {
16487   if (modrm.mod == 3)
16488     OP_EM (bytemode, sizeflag);
16489   else
16490     BadOp ();
16491 }
16492 
16493 static void
16494 OP_XS (int bytemode, int sizeflag)
16495 {
16496   if (modrm.mod == 3)
16497     OP_EX (bytemode, sizeflag);
16498   else
16499     BadOp ();
16500 }
16501 
16502 static void
16503 OP_M (int bytemode, int sizeflag)
16504 {
16505   if (modrm.mod == 3)
16506     /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16507     BadOp ();
16508   else
16509     OP_E (bytemode, sizeflag);
16510 }
16511 
16512 static void
16513 OP_0f07 (int bytemode, int sizeflag)
16514 {
16515   if (modrm.mod != 3 || modrm.rm != 0)
16516     BadOp ();
16517   else
16518     OP_E (bytemode, sizeflag);
16519 }
16520 
16521 /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
16522    32bit mode and "xchg %rax,%rax" in 64bit mode.  */
16523 
16524 static void
16525 NOP_Fixup1 (int bytemode, int sizeflag)
16526 {
16527   if ((prefixes & PREFIX_DATA) != 0
16528       || (rex != 0
16529 	  && rex != 0x48
16530 	  && address_mode == mode_64bit))
16531     OP_REG (bytemode, sizeflag);
16532   else
16533     strcpy (obuf, "nop");
16534 }
16535 
16536 static void
16537 NOP_Fixup2 (int bytemode, int sizeflag)
16538 {
16539   if ((prefixes & PREFIX_DATA) != 0
16540       || (rex != 0
16541 	  && rex != 0x48
16542 	  && address_mode == mode_64bit))
16543     OP_IMREG (bytemode, sizeflag);
16544 }
16545 
16546 static const char *const Suffix3DNow[] = {
16547 /* 00 */	NULL,		NULL,		NULL,		NULL,
16548 /* 04 */	NULL,		NULL,		NULL,		NULL,
16549 /* 08 */	NULL,		NULL,		NULL,		NULL,
16550 /* 0C */	"pi2fw",	"pi2fd",	NULL,		NULL,
16551 /* 10 */	NULL,		NULL,		NULL,		NULL,
16552 /* 14 */	NULL,		NULL,		NULL,		NULL,
16553 /* 18 */	NULL,		NULL,		NULL,		NULL,
16554 /* 1C */	"pf2iw",	"pf2id",	NULL,		NULL,
16555 /* 20 */	NULL,		NULL,		NULL,		NULL,
16556 /* 24 */	NULL,		NULL,		NULL,		NULL,
16557 /* 28 */	NULL,		NULL,		NULL,		NULL,
16558 /* 2C */	NULL,		NULL,		NULL,		NULL,
16559 /* 30 */	NULL,		NULL,		NULL,		NULL,
16560 /* 34 */	NULL,		NULL,		NULL,		NULL,
16561 /* 38 */	NULL,		NULL,		NULL,		NULL,
16562 /* 3C */	NULL,		NULL,		NULL,		NULL,
16563 /* 40 */	NULL,		NULL,		NULL,		NULL,
16564 /* 44 */	NULL,		NULL,		NULL,		NULL,
16565 /* 48 */	NULL,		NULL,		NULL,		NULL,
16566 /* 4C */	NULL,		NULL,		NULL,		NULL,
16567 /* 50 */	NULL,		NULL,		NULL,		NULL,
16568 /* 54 */	NULL,		NULL,		NULL,		NULL,
16569 /* 58 */	NULL,		NULL,		NULL,		NULL,
16570 /* 5C */	NULL,		NULL,		NULL,		NULL,
16571 /* 60 */	NULL,		NULL,		NULL,		NULL,
16572 /* 64 */	NULL,		NULL,		NULL,		NULL,
16573 /* 68 */	NULL,		NULL,		NULL,		NULL,
16574 /* 6C */	NULL,		NULL,		NULL,		NULL,
16575 /* 70 */	NULL,		NULL,		NULL,		NULL,
16576 /* 74 */	NULL,		NULL,		NULL,		NULL,
16577 /* 78 */	NULL,		NULL,		NULL,		NULL,
16578 /* 7C */	NULL,		NULL,		NULL,		NULL,
16579 /* 80 */	NULL,		NULL,		NULL,		NULL,
16580 /* 84 */	NULL,		NULL,		NULL,		NULL,
16581 /* 88 */	NULL,		NULL,		"pfnacc",	NULL,
16582 /* 8C */	NULL,		NULL,		"pfpnacc",	NULL,
16583 /* 90 */	"pfcmpge",	NULL,		NULL,		NULL,
16584 /* 94 */	"pfmin",	NULL,		"pfrcp",	"pfrsqrt",
16585 /* 98 */	NULL,		NULL,		"pfsub",	NULL,
16586 /* 9C */	NULL,		NULL,		"pfadd",	NULL,
16587 /* A0 */	"pfcmpgt",	NULL,		NULL,		NULL,
16588 /* A4 */	"pfmax",	NULL,		"pfrcpit1",	"pfrsqit1",
16589 /* A8 */	NULL,		NULL,		"pfsubr",	NULL,
16590 /* AC */	NULL,		NULL,		"pfacc",	NULL,
16591 /* B0 */	"pfcmpeq",	NULL,		NULL,		NULL,
16592 /* B4 */	"pfmul",	NULL,		"pfrcpit2",	"pmulhrw",
16593 /* B8 */	NULL,		NULL,		NULL,		"pswapd",
16594 /* BC */	NULL,		NULL,		NULL,		"pavgusb",
16595 /* C0 */	NULL,		NULL,		NULL,		NULL,
16596 /* C4 */	NULL,		NULL,		NULL,		NULL,
16597 /* C8 */	NULL,		NULL,		NULL,		NULL,
16598 /* CC */	NULL,		NULL,		NULL,		NULL,
16599 /* D0 */	NULL,		NULL,		NULL,		NULL,
16600 /* D4 */	NULL,		NULL,		NULL,		NULL,
16601 /* D8 */	NULL,		NULL,		NULL,		NULL,
16602 /* DC */	NULL,		NULL,		NULL,		NULL,
16603 /* E0 */	NULL,		NULL,		NULL,		NULL,
16604 /* E4 */	NULL,		NULL,		NULL,		NULL,
16605 /* E8 */	NULL,		NULL,		NULL,		NULL,
16606 /* EC */	NULL,		NULL,		NULL,		NULL,
16607 /* F0 */	NULL,		NULL,		NULL,		NULL,
16608 /* F4 */	NULL,		NULL,		NULL,		NULL,
16609 /* F8 */	NULL,		NULL,		NULL,		NULL,
16610 /* FC */	NULL,		NULL,		NULL,		NULL,
16611 };
16612 
16613 static void
16614 OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16615 {
16616   const char *mnemonic;
16617 
16618   FETCH_DATA (the_info, codep + 1);
16619   /* AMD 3DNow! instructions are specified by an opcode suffix in the
16620      place where an 8-bit immediate would normally go.  ie. the last
16621      byte of the instruction.  */
16622   obufp = mnemonicendp;
16623   mnemonic = Suffix3DNow[*codep++ & 0xff];
16624   if (mnemonic)
16625     oappend (mnemonic);
16626   else
16627     {
16628       /* Since a variable sized modrm/sib chunk is between the start
16629 	 of the opcode (0x0f0f) and the opcode suffix, we need to do
16630 	 all the modrm processing first, and don't know until now that
16631 	 we have a bad opcode.  This necessitates some cleaning up.  */
16632       op_out[0][0] = '\0';
16633       op_out[1][0] = '\0';
16634       BadOp ();
16635     }
16636   mnemonicendp = obufp;
16637 }
16638 
16639 static struct op simd_cmp_op[] =
16640 {
16641   { STRING_COMMA_LEN ("eq") },
16642   { STRING_COMMA_LEN ("lt") },
16643   { STRING_COMMA_LEN ("le") },
16644   { STRING_COMMA_LEN ("unord") },
16645   { STRING_COMMA_LEN ("neq") },
16646   { STRING_COMMA_LEN ("nlt") },
16647   { STRING_COMMA_LEN ("nle") },
16648   { STRING_COMMA_LEN ("ord") }
16649 };
16650 
16651 static void
16652 CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16653 {
16654   unsigned int cmp_type;
16655 
16656   FETCH_DATA (the_info, codep + 1);
16657   cmp_type = *codep++ & 0xff;
16658   if (cmp_type < ARRAY_SIZE (simd_cmp_op))
16659     {
16660       char suffix [3];
16661       char *p = mnemonicendp - 2;
16662       suffix[0] = p[0];
16663       suffix[1] = p[1];
16664       suffix[2] = '\0';
16665       sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16666       mnemonicendp += simd_cmp_op[cmp_type].len;
16667     }
16668   else
16669     {
16670       /* We have a reserved extension byte.  Output it directly.  */
16671       scratchbuf[0] = '$';
16672       print_operand_value (scratchbuf + 1, 1, cmp_type);
16673       oappend_maybe_intel (scratchbuf);
16674       scratchbuf[0] = '\0';
16675     }
16676 }
16677 
16678 static void
16679 OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16680 	  int sizeflag ATTRIBUTE_UNUSED)
16681 {
16682   /* mwaitx %eax,%ecx,%ebx */
16683   if (!intel_syntax)
16684     {
16685       const char **names = (address_mode == mode_64bit
16686 			    ? names64 : names32);
16687       strcpy (op_out[0], names[0]);
16688       strcpy (op_out[1], names[1]);
16689       strcpy (op_out[2], names[3]);
16690       two_source_ops = 1;
16691     }
16692   /* Skip mod/rm byte.  */
16693   MODRM_CHECK;
16694   codep++;
16695 }
16696 
16697 static void
16698 OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16699 	  int sizeflag ATTRIBUTE_UNUSED)
16700 {
16701   /* mwait %eax,%ecx  */
16702   if (!intel_syntax)
16703     {
16704       const char **names = (address_mode == mode_64bit
16705 			    ? names64 : names32);
16706       strcpy (op_out[0], names[0]);
16707       strcpy (op_out[1], names[1]);
16708       two_source_ops = 1;
16709     }
16710   /* Skip mod/rm byte.  */
16711   MODRM_CHECK;
16712   codep++;
16713 }
16714 
16715 static void
16716 OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16717 	    int sizeflag ATTRIBUTE_UNUSED)
16718 {
16719   /* monitor %eax,%ecx,%edx"  */
16720   if (!intel_syntax)
16721     {
16722       const char **op1_names;
16723       const char **names = (address_mode == mode_64bit
16724 			    ? names64 : names32);
16725 
16726       if (!(prefixes & PREFIX_ADDR))
16727 	op1_names = (address_mode == mode_16bit
16728 		     ? names16 : names);
16729       else
16730 	{
16731 	  /* Remove "addr16/addr32".  */
16732 	  all_prefixes[last_addr_prefix] = 0;
16733 	  op1_names = (address_mode != mode_32bit
16734 		       ? names32 : names16);
16735 	  used_prefixes |= PREFIX_ADDR;
16736 	}
16737       strcpy (op_out[0], op1_names[0]);
16738       strcpy (op_out[1], names[1]);
16739       strcpy (op_out[2], names[2]);
16740       two_source_ops = 1;
16741     }
16742   /* Skip mod/rm byte.  */
16743   MODRM_CHECK;
16744   codep++;
16745 }
16746 
16747 static void
16748 BadOp (void)
16749 {
16750   /* Throw away prefixes and 1st. opcode byte.  */
16751   codep = insn_codep + 1;
16752   oappend ("(bad)");
16753 }
16754 
16755 static void
16756 REP_Fixup (int bytemode, int sizeflag)
16757 {
16758   /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16759      lods and stos.  */
16760   if (prefixes & PREFIX_REPZ)
16761     all_prefixes[last_repz_prefix] = REP_PREFIX;
16762 
16763   switch (bytemode)
16764     {
16765     case al_reg:
16766     case eAX_reg:
16767     case indir_dx_reg:
16768       OP_IMREG (bytemode, sizeflag);
16769       break;
16770     case eDI_reg:
16771       OP_ESreg (bytemode, sizeflag);
16772       break;
16773     case eSI_reg:
16774       OP_DSreg (bytemode, sizeflag);
16775       break;
16776     default:
16777       abort ();
16778       break;
16779     }
16780 }
16781 
16782 /* For BND-prefixed instructions 0xF2 prefix should be displayed as
16783    "bnd".  */
16784 
16785 static void
16786 BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16787 {
16788   if (prefixes & PREFIX_REPNZ)
16789     all_prefixes[last_repnz_prefix] = BND_PREFIX;
16790 }
16791 
16792 /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
16793    "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16794  */
16795 
16796 static void
16797 HLE_Fixup1 (int bytemode, int sizeflag)
16798 {
16799   if (modrm.mod != 3
16800       && (prefixes & PREFIX_LOCK) != 0)
16801     {
16802       if (prefixes & PREFIX_REPZ)
16803 	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16804       if (prefixes & PREFIX_REPNZ)
16805 	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16806     }
16807 
16808   OP_E (bytemode, sizeflag);
16809 }
16810 
16811 /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
16812    "xacquire"/"xrelease" for memory operand.  No check for LOCK prefix.
16813  */
16814 
16815 static void
16816 HLE_Fixup2 (int bytemode, int sizeflag)
16817 {
16818   if (modrm.mod != 3)
16819     {
16820       if (prefixes & PREFIX_REPZ)
16821 	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16822       if (prefixes & PREFIX_REPNZ)
16823 	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16824     }
16825 
16826   OP_E (bytemode, sizeflag);
16827 }
16828 
16829 /* Similar to OP_E.  But the 0xf3 prefixes should be displayed as
16830    "xrelease" for memory operand.  No check for LOCK prefix.   */
16831 
16832 static void
16833 HLE_Fixup3 (int bytemode, int sizeflag)
16834 {
16835   if (modrm.mod != 3
16836       && last_repz_prefix > last_repnz_prefix
16837       && (prefixes & PREFIX_REPZ) != 0)
16838     all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16839 
16840   OP_E (bytemode, sizeflag);
16841 }
16842 
16843 static void
16844 CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16845 {
16846   USED_REX (REX_W);
16847   if (rex & REX_W)
16848     {
16849       /* Change cmpxchg8b to cmpxchg16b.  */
16850       char *p = mnemonicendp - 2;
16851       mnemonicendp = stpcpy (p, "16b");
16852       bytemode = o_mode;
16853     }
16854   else if ((prefixes & PREFIX_LOCK) != 0)
16855     {
16856       if (prefixes & PREFIX_REPZ)
16857 	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16858       if (prefixes & PREFIX_REPNZ)
16859 	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16860     }
16861 
16862   OP_M (bytemode, sizeflag);
16863 }
16864 
16865 static void
16866 XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
16867 {
16868   const char **names;
16869 
16870   if (need_vex)
16871     {
16872       switch (vex.length)
16873 	{
16874 	case 128:
16875 	  names = names_xmm;
16876 	  break;
16877 	case 256:
16878 	  names = names_ymm;
16879 	  break;
16880 	default:
16881 	  abort ();
16882 	}
16883     }
16884   else
16885     names = names_xmm;
16886   oappend (names[reg]);
16887 }
16888 
16889 static void
16890 CRC32_Fixup (int bytemode, int sizeflag)
16891 {
16892   /* Add proper suffix to "crc32".  */
16893   char *p = mnemonicendp;
16894 
16895   switch (bytemode)
16896     {
16897     case b_mode:
16898       if (intel_syntax)
16899 	goto skip;
16900 
16901       *p++ = 'b';
16902       break;
16903     case v_mode:
16904       if (intel_syntax)
16905 	goto skip;
16906 
16907       USED_REX (REX_W);
16908       if (rex & REX_W)
16909 	*p++ = 'q';
16910       else
16911 	{
16912 	  if (sizeflag & DFLAG)
16913 	    *p++ = 'l';
16914 	  else
16915 	    *p++ = 'w';
16916 	  used_prefixes |= (prefixes & PREFIX_DATA);
16917 	}
16918       break;
16919     default:
16920       oappend (INTERNAL_DISASSEMBLER_ERROR);
16921       break;
16922     }
16923   mnemonicendp = p;
16924   *p = '\0';
16925 
16926 skip:
16927   if (modrm.mod == 3)
16928     {
16929       int add;
16930 
16931       /* Skip mod/rm byte.  */
16932       MODRM_CHECK;
16933       codep++;
16934 
16935       USED_REX (REX_B);
16936       add = (rex & REX_B) ? 8 : 0;
16937       if (bytemode == b_mode)
16938 	{
16939 	  USED_REX (0);
16940 	  if (rex)
16941 	    oappend (names8rex[modrm.rm + add]);
16942 	  else
16943 	    oappend (names8[modrm.rm + add]);
16944 	}
16945       else
16946 	{
16947 	  USED_REX (REX_W);
16948 	  if (rex & REX_W)
16949 	    oappend (names64[modrm.rm + add]);
16950 	  else if ((prefixes & PREFIX_DATA))
16951 	    oappend (names16[modrm.rm + add]);
16952 	  else
16953 	    oappend (names32[modrm.rm + add]);
16954 	}
16955     }
16956   else
16957     OP_E (bytemode, sizeflag);
16958 }
16959 
16960 static void
16961 FXSAVE_Fixup (int bytemode, int sizeflag)
16962 {
16963   /* Add proper suffix to "fxsave" and "fxrstor".  */
16964   USED_REX (REX_W);
16965   if (rex & REX_W)
16966     {
16967       char *p = mnemonicendp;
16968       *p++ = '6';
16969       *p++ = '4';
16970       *p = '\0';
16971       mnemonicendp = p;
16972     }
16973   OP_M (bytemode, sizeflag);
16974 }
16975 
16976 static void
16977 PCMPESTR_Fixup (int bytemode, int sizeflag)
16978 {
16979   /* Add proper suffix to "{,v}pcmpestr{i,m}".  */
16980   if (!intel_syntax)
16981     {
16982       char *p = mnemonicendp;
16983 
16984       USED_REX (REX_W);
16985       if (rex & REX_W)
16986 	*p++ = 'q';
16987       else if (sizeflag & SUFFIX_ALWAYS)
16988 	*p++ = 'l';
16989 
16990       *p = '\0';
16991       mnemonicendp = p;
16992     }
16993 
16994   OP_EX (bytemode, sizeflag);
16995 }
16996 
16997 /* Display the destination register operand for instructions with
16998    VEX. */
16999 
17000 static void
17001 OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17002 {
17003   int reg;
17004   const char **names;
17005 
17006   if (!need_vex)
17007     abort ();
17008 
17009   if (!need_vex_reg)
17010     return;
17011 
17012   reg = vex.register_specifier;
17013   if (vex.evex)
17014     {
17015       if (!vex.v)
17016 	reg += 16;
17017     }
17018 
17019   if (bytemode == vex_scalar_mode)
17020     {
17021       oappend (names_xmm[reg]);
17022       return;
17023     }
17024 
17025   switch (vex.length)
17026     {
17027     case 128:
17028       switch (bytemode)
17029 	{
17030 	case vex_mode:
17031 	case vex128_mode:
17032 	case vex_vsib_q_w_dq_mode:
17033 	case vex_vsib_q_w_d_mode:
17034 	  names = names_xmm;
17035 	  break;
17036 	case dq_mode:
17037 	  if (vex.w)
17038 	    names = names64;
17039 	  else
17040 	    names = names32;
17041 	  break;
17042 	case mask_bd_mode:
17043 	case mask_mode:
17044 	  if (reg > 0x7)
17045 	    {
17046 	      oappend ("(bad)");
17047 	      return;
17048 	    }
17049 	  names = names_mask;
17050 	  break;
17051 	default:
17052 	  abort ();
17053 	  return;
17054 	}
17055       break;
17056     case 256:
17057       switch (bytemode)
17058 	{
17059 	case vex_mode:
17060 	case vex256_mode:
17061 	  names = names_ymm;
17062 	  break;
17063 	case vex_vsib_q_w_dq_mode:
17064 	case vex_vsib_q_w_d_mode:
17065 	  names = vex.w ? names_ymm : names_xmm;
17066 	  break;
17067 	case mask_bd_mode:
17068 	case mask_mode:
17069 	  if (reg > 0x7)
17070 	    {
17071 	      oappend ("(bad)");
17072 	      return;
17073 	    }
17074 	  names = names_mask;
17075 	  break;
17076 	default:
17077 	  /* See PR binutils/20893 for a reproducer.  */
17078 	  oappend ("(bad)");
17079 	  return;
17080 	}
17081       break;
17082     case 512:
17083       names = names_zmm;
17084       break;
17085     default:
17086       abort ();
17087       break;
17088     }
17089   oappend (names[reg]);
17090 }
17091 
17092 /* Get the VEX immediate byte without moving codep.  */
17093 
17094 static unsigned char
17095 get_vex_imm8 (int sizeflag, int opnum)
17096 {
17097   int bytes_before_imm = 0;
17098 
17099   if (modrm.mod != 3)
17100     {
17101       /* There are SIB/displacement bytes.  */
17102       if ((sizeflag & AFLAG) || address_mode == mode_64bit)
17103 	{
17104 	  /* 32/64 bit address mode */
17105 	  int base = modrm.rm;
17106 
17107 	  /* Check SIB byte.  */
17108 	  if (base == 4)
17109 	    {
17110 	      FETCH_DATA (the_info, codep + 1);
17111 	      base = *codep & 7;
17112 	      /* When decoding the third source, don't increase
17113 		 bytes_before_imm as this has already been incremented
17114 		 by one in OP_E_memory while decoding the second
17115 		 source operand.  */
17116 	      if (opnum == 0)
17117 		bytes_before_imm++;
17118 	    }
17119 
17120 	  /* Don't increase bytes_before_imm when decoding the third source,
17121 	     it has already been incremented by OP_E_memory while decoding
17122 	     the second source operand.  */
17123 	  if (opnum == 0)
17124 	    {
17125 	      switch (modrm.mod)
17126 		{
17127 		  case 0:
17128 		    /* When modrm.rm == 5 or modrm.rm == 4 and base in
17129 		       SIB == 5, there is a 4 byte displacement.  */
17130 		    if (base != 5)
17131 		      /* No displacement. */
17132 		      break;
17133 		    /* Fall through.  */
17134 		  case 2:
17135 		    /* 4 byte displacement.  */
17136 		    bytes_before_imm += 4;
17137 		    break;
17138 		  case 1:
17139 		    /* 1 byte displacement.  */
17140 		    bytes_before_imm++;
17141 		    break;
17142 		}
17143 	    }
17144 	}
17145       else
17146 	{
17147 	  /* 16 bit address mode */
17148 	  /* Don't increase bytes_before_imm when decoding the third source,
17149 	     it has already been incremented by OP_E_memory while decoding
17150 	     the second source operand.  */
17151 	  if (opnum == 0)
17152 	    {
17153 	      switch (modrm.mod)
17154 		{
17155 		case 0:
17156 		  /* When modrm.rm == 6, there is a 2 byte displacement.  */
17157 		  if (modrm.rm != 6)
17158 		    /* No displacement. */
17159 		    break;
17160 		  /* Fall through.  */
17161 		case 2:
17162 		  /* 2 byte displacement.  */
17163 		  bytes_before_imm += 2;
17164 		  break;
17165 		case 1:
17166 		  /* 1 byte displacement: when decoding the third source,
17167 		     don't increase bytes_before_imm as this has already
17168 		     been incremented by one in OP_E_memory while decoding
17169 		     the second source operand.  */
17170 		  if (opnum == 0)
17171 		    bytes_before_imm++;
17172 
17173 		  break;
17174 		}
17175 	    }
17176 	}
17177     }
17178 
17179   FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17180   return codep [bytes_before_imm];
17181 }
17182 
17183 static void
17184 OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17185 {
17186   const char **names;
17187 
17188   if (reg == -1 && modrm.mod != 3)
17189     {
17190       OP_E_memory (bytemode, sizeflag);
17191       return;
17192     }
17193   else
17194     {
17195       if (reg == -1)
17196 	{
17197 	  reg = modrm.rm;
17198 	  USED_REX (REX_B);
17199 	  if (rex & REX_B)
17200 	    reg += 8;
17201 	}
17202       else if (reg > 7 && address_mode != mode_64bit)
17203 	BadOp ();
17204     }
17205 
17206   switch (vex.length)
17207     {
17208     case 128:
17209       names = names_xmm;
17210       break;
17211     case 256:
17212       names = names_ymm;
17213       break;
17214     default:
17215       abort ();
17216     }
17217   oappend (names[reg]);
17218 }
17219 
17220 static void
17221 OP_EX_VexImmW (int bytemode, int sizeflag)
17222 {
17223   int reg = -1;
17224   static unsigned char vex_imm8;
17225 
17226   if (vex_w_done == 0)
17227     {
17228       vex_w_done = 1;
17229 
17230       /* Skip mod/rm byte.  */
17231       MODRM_CHECK;
17232       codep++;
17233 
17234       vex_imm8 = get_vex_imm8 (sizeflag, 0);
17235 
17236       if (vex.w)
17237 	  reg = vex_imm8 >> 4;
17238 
17239       OP_EX_VexReg (bytemode, sizeflag, reg);
17240     }
17241   else if (vex_w_done == 1)
17242     {
17243       vex_w_done = 2;
17244 
17245       if (!vex.w)
17246 	  reg = vex_imm8 >> 4;
17247 
17248       OP_EX_VexReg (bytemode, sizeflag, reg);
17249     }
17250   else
17251     {
17252       /* Output the imm8 directly.  */
17253       scratchbuf[0] = '$';
17254       print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
17255       oappend_maybe_intel (scratchbuf);
17256       scratchbuf[0] = '\0';
17257       codep++;
17258     }
17259 }
17260 
17261 static void
17262 OP_Vex_2src (int bytemode, int sizeflag)
17263 {
17264   if (modrm.mod == 3)
17265     {
17266       int reg = modrm.rm;
17267       USED_REX (REX_B);
17268       if (rex & REX_B)
17269 	reg += 8;
17270       oappend (names_xmm[reg]);
17271     }
17272   else
17273     {
17274       if (intel_syntax
17275 	  && (bytemode == v_mode || bytemode == v_swap_mode))
17276 	{
17277 	  bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17278 	  used_prefixes |= (prefixes & PREFIX_DATA);
17279 	}
17280       OP_E (bytemode, sizeflag);
17281     }
17282 }
17283 
17284 static void
17285 OP_Vex_2src_1 (int bytemode, int sizeflag)
17286 {
17287   if (modrm.mod == 3)
17288     {
17289       /* Skip mod/rm byte.   */
17290       MODRM_CHECK;
17291       codep++;
17292     }
17293 
17294   if (vex.w)
17295     oappend (names_xmm[vex.register_specifier]);
17296   else
17297     OP_Vex_2src (bytemode, sizeflag);
17298 }
17299 
17300 static void
17301 OP_Vex_2src_2 (int bytemode, int sizeflag)
17302 {
17303   if (vex.w)
17304     OP_Vex_2src (bytemode, sizeflag);
17305   else
17306     oappend (names_xmm[vex.register_specifier]);
17307 }
17308 
17309 static void
17310 OP_EX_VexW (int bytemode, int sizeflag)
17311 {
17312   int reg = -1;
17313 
17314   if (!vex_w_done)
17315     {
17316       vex_w_done = 1;
17317 
17318       /* Skip mod/rm byte.  */
17319       MODRM_CHECK;
17320       codep++;
17321 
17322       if (vex.w)
17323 	reg = get_vex_imm8 (sizeflag, 0) >> 4;
17324     }
17325   else
17326     {
17327       if (!vex.w)
17328 	reg = get_vex_imm8 (sizeflag, 1) >> 4;
17329     }
17330 
17331   OP_EX_VexReg (bytemode, sizeflag, reg);
17332 }
17333 
17334 static void
17335 VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
17336 	     int sizeflag ATTRIBUTE_UNUSED)
17337 {
17338   /* Skip the immediate byte and check for invalid bits.  */
17339   FETCH_DATA (the_info, codep + 1);
17340   if (*codep++ & 0xf)
17341     BadOp ();
17342 }
17343 
17344 static void
17345 OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17346 {
17347   int reg;
17348   const char **names;
17349 
17350   FETCH_DATA (the_info, codep + 1);
17351   reg = *codep++;
17352 
17353   if (bytemode != x_mode)
17354     abort ();
17355 
17356   if (reg & 0xf)
17357       BadOp ();
17358 
17359   reg >>= 4;
17360   if (reg > 7 && address_mode != mode_64bit)
17361     BadOp ();
17362 
17363   switch (vex.length)
17364     {
17365     case 128:
17366       names = names_xmm;
17367       break;
17368     case 256:
17369       names = names_ymm;
17370       break;
17371     default:
17372       abort ();
17373     }
17374   oappend (names[reg]);
17375 }
17376 
17377 static void
17378 OP_XMM_VexW (int bytemode, int sizeflag)
17379 {
17380   /* Turn off the REX.W bit since it is used for swapping operands
17381      now.  */
17382   rex &= ~REX_W;
17383   OP_XMM (bytemode, sizeflag);
17384 }
17385 
17386 static void
17387 OP_EX_Vex (int bytemode, int sizeflag)
17388 {
17389   if (modrm.mod != 3)
17390     {
17391       if (vex.register_specifier != 0)
17392 	BadOp ();
17393       need_vex_reg = 0;
17394     }
17395   OP_EX (bytemode, sizeflag);
17396 }
17397 
17398 static void
17399 OP_XMM_Vex (int bytemode, int sizeflag)
17400 {
17401   if (modrm.mod != 3)
17402     {
17403       if (vex.register_specifier != 0)
17404 	BadOp ();
17405       need_vex_reg = 0;
17406     }
17407   OP_XMM (bytemode, sizeflag);
17408 }
17409 
17410 static void
17411 VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17412 {
17413   switch (vex.length)
17414     {
17415     case 128:
17416       mnemonicendp = stpcpy (obuf, "vzeroupper");
17417       break;
17418     case 256:
17419       mnemonicendp = stpcpy (obuf, "vzeroall");
17420       break;
17421     default:
17422       abort ();
17423     }
17424 }
17425 
17426 static struct op vex_cmp_op[] =
17427 {
17428   { STRING_COMMA_LEN ("eq") },
17429   { STRING_COMMA_LEN ("lt") },
17430   { STRING_COMMA_LEN ("le") },
17431   { STRING_COMMA_LEN ("unord") },
17432   { STRING_COMMA_LEN ("neq") },
17433   { STRING_COMMA_LEN ("nlt") },
17434   { STRING_COMMA_LEN ("nle") },
17435   { STRING_COMMA_LEN ("ord") },
17436   { STRING_COMMA_LEN ("eq_uq") },
17437   { STRING_COMMA_LEN ("nge") },
17438   { STRING_COMMA_LEN ("ngt") },
17439   { STRING_COMMA_LEN ("false") },
17440   { STRING_COMMA_LEN ("neq_oq") },
17441   { STRING_COMMA_LEN ("ge") },
17442   { STRING_COMMA_LEN ("gt") },
17443   { STRING_COMMA_LEN ("true") },
17444   { STRING_COMMA_LEN ("eq_os") },
17445   { STRING_COMMA_LEN ("lt_oq") },
17446   { STRING_COMMA_LEN ("le_oq") },
17447   { STRING_COMMA_LEN ("unord_s") },
17448   { STRING_COMMA_LEN ("neq_us") },
17449   { STRING_COMMA_LEN ("nlt_uq") },
17450   { STRING_COMMA_LEN ("nle_uq") },
17451   { STRING_COMMA_LEN ("ord_s") },
17452   { STRING_COMMA_LEN ("eq_us") },
17453   { STRING_COMMA_LEN ("nge_uq") },
17454   { STRING_COMMA_LEN ("ngt_uq") },
17455   { STRING_COMMA_LEN ("false_os") },
17456   { STRING_COMMA_LEN ("neq_os") },
17457   { STRING_COMMA_LEN ("ge_oq") },
17458   { STRING_COMMA_LEN ("gt_oq") },
17459   { STRING_COMMA_LEN ("true_us") },
17460 };
17461 
17462 static void
17463 VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17464 {
17465   unsigned int cmp_type;
17466 
17467   FETCH_DATA (the_info, codep + 1);
17468   cmp_type = *codep++ & 0xff;
17469   if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17470     {
17471       char suffix [3];
17472       char *p = mnemonicendp - 2;
17473       suffix[0] = p[0];
17474       suffix[1] = p[1];
17475       suffix[2] = '\0';
17476       sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17477       mnemonicendp += vex_cmp_op[cmp_type].len;
17478     }
17479   else
17480     {
17481       /* We have a reserved extension byte.  Output it directly.  */
17482       scratchbuf[0] = '$';
17483       print_operand_value (scratchbuf + 1, 1, cmp_type);
17484       oappend_maybe_intel (scratchbuf);
17485       scratchbuf[0] = '\0';
17486     }
17487 }
17488 
17489 static void
17490 VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17491 	     int sizeflag ATTRIBUTE_UNUSED)
17492 {
17493   unsigned int cmp_type;
17494 
17495   if (!vex.evex)
17496     abort ();
17497 
17498   FETCH_DATA (the_info, codep + 1);
17499   cmp_type = *codep++ & 0xff;
17500   /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17501      If it's the case, print suffix, otherwise - print the immediate.  */
17502   if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17503       && cmp_type != 3
17504       && cmp_type != 7)
17505     {
17506       char suffix [3];
17507       char *p = mnemonicendp - 2;
17508 
17509       /* vpcmp* can have both one- and two-lettered suffix.  */
17510       if (p[0] == 'p')
17511 	{
17512 	  p++;
17513 	  suffix[0] = p[0];
17514 	  suffix[1] = '\0';
17515 	}
17516       else
17517 	{
17518 	  suffix[0] = p[0];
17519 	  suffix[1] = p[1];
17520 	  suffix[2] = '\0';
17521 	}
17522 
17523       sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17524       mnemonicendp += simd_cmp_op[cmp_type].len;
17525     }
17526   else
17527     {
17528       /* We have a reserved extension byte.  Output it directly.  */
17529       scratchbuf[0] = '$';
17530       print_operand_value (scratchbuf + 1, 1, cmp_type);
17531       oappend_maybe_intel (scratchbuf);
17532       scratchbuf[0] = '\0';
17533     }
17534 }
17535 
17536 static const struct op pclmul_op[] =
17537 {
17538   { STRING_COMMA_LEN ("lql") },
17539   { STRING_COMMA_LEN ("hql") },
17540   { STRING_COMMA_LEN ("lqh") },
17541   { STRING_COMMA_LEN ("hqh") }
17542 };
17543 
17544 static void
17545 PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17546 	      int sizeflag ATTRIBUTE_UNUSED)
17547 {
17548   unsigned int pclmul_type;
17549 
17550   FETCH_DATA (the_info, codep + 1);
17551   pclmul_type = *codep++ & 0xff;
17552   switch (pclmul_type)
17553     {
17554     case 0x10:
17555       pclmul_type = 2;
17556       break;
17557     case 0x11:
17558       pclmul_type = 3;
17559       break;
17560     default:
17561       break;
17562     }
17563   if (pclmul_type < ARRAY_SIZE (pclmul_op))
17564     {
17565       char suffix [4];
17566       char *p = mnemonicendp - 3;
17567       suffix[0] = p[0];
17568       suffix[1] = p[1];
17569       suffix[2] = p[2];
17570       suffix[3] = '\0';
17571       sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17572       mnemonicendp += pclmul_op[pclmul_type].len;
17573     }
17574   else
17575     {
17576       /* We have a reserved extension byte.  Output it directly.  */
17577       scratchbuf[0] = '$';
17578       print_operand_value (scratchbuf + 1, 1, pclmul_type);
17579       oappend_maybe_intel (scratchbuf);
17580       scratchbuf[0] = '\0';
17581     }
17582 }
17583 
17584 static void
17585 MOVBE_Fixup (int bytemode, int sizeflag)
17586 {
17587   /* Add proper suffix to "movbe".  */
17588   char *p = mnemonicendp;
17589 
17590   switch (bytemode)
17591     {
17592     case v_mode:
17593       if (intel_syntax)
17594 	goto skip;
17595 
17596       USED_REX (REX_W);
17597       if (sizeflag & SUFFIX_ALWAYS)
17598 	{
17599 	  if (rex & REX_W)
17600 	    *p++ = 'q';
17601 	  else
17602 	    {
17603 	      if (sizeflag & DFLAG)
17604 		*p++ = 'l';
17605 	      else
17606 		*p++ = 'w';
17607 	      used_prefixes |= (prefixes & PREFIX_DATA);
17608 	    }
17609 	}
17610       break;
17611     default:
17612       oappend (INTERNAL_DISASSEMBLER_ERROR);
17613       break;
17614     }
17615   mnemonicendp = p;
17616   *p = '\0';
17617 
17618 skip:
17619   OP_M (bytemode, sizeflag);
17620 }
17621 
17622 static void
17623 OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17624 {
17625   int reg;
17626   const char **names;
17627 
17628   /* Skip mod/rm byte.  */
17629   MODRM_CHECK;
17630   codep++;
17631 
17632   if (vex.w)
17633     names = names64;
17634   else
17635     names = names32;
17636 
17637   reg = modrm.rm;
17638   USED_REX (REX_B);
17639   if (rex & REX_B)
17640     reg += 8;
17641 
17642   oappend (names[reg]);
17643 }
17644 
17645 static void
17646 OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17647 {
17648   const char **names;
17649 
17650   if (vex.w)
17651     names = names64;
17652   else
17653     names = names32;
17654 
17655   oappend (names[vex.register_specifier]);
17656 }
17657 
17658 static void
17659 OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17660 {
17661   if (!vex.evex
17662       || (bytemode != mask_mode && bytemode != mask_bd_mode))
17663     abort ();
17664 
17665   USED_REX (REX_R);
17666   if ((rex & REX_R) != 0 || !vex.r)
17667     {
17668       BadOp ();
17669       return;
17670     }
17671 
17672   oappend (names_mask [modrm.reg]);
17673 }
17674 
17675 static void
17676 OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17677 {
17678   if (!vex.evex
17679       || (bytemode != evex_rounding_mode
17680 	  && bytemode != evex_sae_mode))
17681     abort ();
17682   if (modrm.mod == 3 && vex.b)
17683     switch (bytemode)
17684       {
17685       case evex_rounding_mode:
17686 	oappend (names_rounding[vex.ll]);
17687 	break;
17688       case evex_sae_mode:
17689 	oappend ("{sae}");
17690 	break;
17691       default:
17692 	break;
17693       }
17694 }
17695