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 2, 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 "sysdeps.h"
36 #include "disasm-glue.h"
37 
38 #ifdef DISASM_USE_BUILTIN /* rest of file */
39 
40 #include <setjmp.h>
41 #include "disasm-x86.h"
42 #include "disasm-builtin.h"
43 #include <stdio.h>
44 #include <errno.h>
45 #include <math.h>
46 #include <stdint.h>
47 #include <stdlib.h>
48 #include <string.h>
49 #include <inttypes.h>
50 
51 #ifndef _
52 #define _(x) x
53 #endif
54 
55 #ifndef UNUSED
56 #define UNUSED(x)	((void)x)
57 #endif
58 
59 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
60 
61 /* Note - these macros do NOT work if STR2 is not a constant string.  */
62 #define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
63 #define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
64 
65 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
66 
67 /* Flags stored in PREFIXES.  */
68 #define PREFIX_REPZ 1
69 #define PREFIX_REPNZ 2
70 #define PREFIX_LOCK 4
71 #define PREFIX_CS 8
72 #define PREFIX_SS 0x10
73 #define PREFIX_DS 0x20
74 #define PREFIX_ES 0x40
75 #define PREFIX_FS 0x80
76 #define PREFIX_GS 0x100
77 #define PREFIX_DATA 0x200
78 #define PREFIX_ADDR 0x400
79 #define PREFIX_FWAIT 0x800
80 
81 
82 /*
83  *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
84  *   (see topic "Redundant prefixes" in the "Differences from 8086"
85  *   section of the "Virtual 8086 Mode" chapter.)
86  * 'pc' should be the address of this instruction, it will
87  *   be used to print the target address if this is a relative jump or call
88  * The function returns the length of this instruction in bytes.
89  */
90 
91 
92 struct op
93 {
94 	const char *name;
95 	unsigned int len;
96 };
97 
98 
99 /* Mark parts used in the REX prefix.  When we are testing for
100    empty prefix (for 8bit register REX extension), just mask it
101    out.  Otherwise test for REX bit is excuse for existence of REX
102    only in case value is nonzero.  */
103 #define USED_REX(value)					\
104   {							\
105     if (value)						\
106       {							\
107 	if ((info->rex & value))				\
108 	  info->rex_used |= (value) | REX_OPCODE;		\
109       }							\
110     else						\
111       info->rex_used |= REX_OPCODE;				\
112   }
113 
114 /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
115    to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
116    on error.  */
117 #define FETCH_DATA(info, addr) \
118   ((addr) <= (info)->dis_private.max_fetched \
119    ? 1 : fetch_data ((info), (addr)))
120 
fetch_data(disassemble_info * info,bfd_byte * addr)121 static int fetch_data(disassemble_info *info, bfd_byte *addr)
122 {
123 	int status;
124 	bfd_vma start = info->dis_private.insn_start + (info->dis_private.max_fetched - info->dis_private.the_buffer);
125 
126 	if (addr <= info->dis_private.the_buffer + MAX_MNEM_SIZE)
127 		status = (*info->read_memory_func) (start, info->dis_private.max_fetched, addr - info->dis_private.max_fetched, info);
128 	else
129 		status = -1;
130 	if (status != 0)
131 	{
132 		/* If we did manage to read at least one byte, then
133 		   print_insn_i386 will do something sensible.  Otherwise, print
134 		   an error.  We do that here because this is where we know
135 		   STATUS.  */
136 		if (info->dis_private.max_fetched == info->dis_private.the_buffer)
137 			(*info->memory_error_func) (status, start, info);
138 		OPCODES_SIGLONGJMP(info->dis_private.bailout, 1);
139 	} else
140 	{
141 		info->dis_private.max_fetched = addr;
142 	}
143 	return 1;
144 }
145 
146 
147 #ifndef HAVE_STPCPY
my_stpcpy(char * dest,const char * src)148 static char *my_stpcpy(char *dest, const char *src)
149 {
150 	size_t len = strlen(src);
151 	return (char *)memcpy(dest, src, len + 1) + len;
152 }
153 #undef stpcpy
154 #define stpcpy my_stpcpy
155 #endif
156 
157 
oappend(disassemble_info * info,const char * s)158 static void oappend(disassemble_info *info, const char *s)
159 {
160 	info->obufp = stpcpy(info->obufp, s);
161 }
162 
163 
164 /* Like oappend (below), but S is a string starting with '%'.
165    In Intel syntax, the '%' is elided.  */
oappend_maybe_intel(disassemble_info * info,const char * s)166 static void oappend_maybe_intel(disassemble_info *info, const char *s)
167 {
168 	oappend(info, s + info->intel_syntax);
169 }
170 
171 
internal_error(disassemble_info * info)172 static void internal_error(disassemble_info *info)
173 {
174 	oappend(info, INTERNAL_DISASSEMBLER_ERROR);
175 }
176 
177 
178 /* Possible values for prefix requirement.  */
179 #define PREFIX_IGNORED_SHIFT	16
180 #define PREFIX_IGNORED_REPZ	(PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
181 #define PREFIX_IGNORED_REPNZ	(PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
182 #define PREFIX_IGNORED_DATA	(PREFIX_DATA << PREFIX_IGNORED_SHIFT)
183 #define PREFIX_IGNORED_ADDR	(PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
184 #define PREFIX_IGNORED_LOCK	(PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
185 
186 /* Opcode prefixes.  */
187 #define PREFIX_OPCODE		(PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA)
188 
189 /* Prefixes ignored.  */
190 #define PREFIX_IGNORED		(PREFIX_IGNORED_REPZ | PREFIX_IGNORED_REPNZ | PREFIX_IGNORED_DATA)
191 
192 #define XX { NULL, 0 }
193 #define Bad_Opcode NULL, { XX }, 0
194 
195 #define Eb { OP_E, b_mode }
196 #define Ebnd { OP_E, bnd_mode }
197 #define EbS { OP_E, b_swap_mode }
198 #define Ev { OP_E, v_mode }
199 #define Ev_bnd { OP_E, v_bnd_mode }
200 #define EvS { OP_E, v_swap_mode }
201 #define Ed { OP_E, d_mode }
202 #define Edq { OP_E, dq_mode }
203 #define Edqw { OP_E, dqw_mode }
204 #define EdqwS { OP_E, dqw_swap_mode }
205 #define Edqb { OP_E, dqb_mode }
206 #define Edb { OP_E, db_mode }
207 #define Edw { OP_E, dw_mode }
208 #define Edqd { OP_E, dqd_mode }
209 #define Eq { OP_E, q_mode }
210 #define indirEv { OP_indirE, indir_v_mode }
211 #define indirEp { OP_indirE, f_mode }
212 #define stackEv { OP_E, stack_v_mode }
213 #define Em { OP_E, m_mode }
214 #define Ew { OP_E, w_mode }
215 #define M { OP_M, 0 }					/* lea, lgdt, etc. */
216 #define Ma { OP_M, a_mode }
217 #define Mb { OP_M, b_mode }
218 #define Md { OP_M, d_mode }
219 #define Mo { OP_M, o_mode }
220 #define Mp { OP_M, f_mode }				/* 32 or 48 bit memory operand for LDS, LES etc */
221 #define Mq { OP_M, q_mode }
222 #define Mx { OP_M, x_mode }
223 #define Mxmm { OP_M, xmm_mode }
224 #define Gb { OP_G, b_mode }
225 #define Gbnd { OP_G, bnd_mode }
226 #define Gv { OP_G, v_mode }
227 #define Gd { OP_G, d_mode }
228 #define Gdq { OP_G, dq_mode }
229 #define Gm { OP_G, m_mode }
230 #define Gw { OP_G, w_mode }
231 #define Rd { OP_R, d_mode }
232 #define Rdq { OP_R, dq_mode }
233 #define Rm { OP_R, m_mode }
234 #define Ib { OP_I, b_mode }
235 #define sIb { OP_sI, b_mode }			/* sign extened byte */
236 #define sIbT { OP_sI, b_T_mode }		/* sign extened byte like 'T' */
237 #define Iv { OP_I, v_mode }
238 #define sIv { OP_sI, v_mode }
239 #define Iq { OP_I, q_mode }
240 #define Iv64 { OP_I64, v_mode }
241 #define Iw { OP_I, w_mode }
242 #define I1 { OP_I, const_1_mode }
243 #define Jb { OP_J, b_mode }
244 #define Jv { OP_J, v_mode }
245 #define Cm { OP_C, m_mode }
246 #define Dm { OP_D, m_mode }
247 #define Td { OP_T, d_mode }
248 #define Skip_MODRM { OP_Skip_MODRM, 0 }
249 
250 #define RMeAX { OP_REG, eAX_reg }
251 #define RMeBX { OP_REG, eBX_reg }
252 #define RMeCX { OP_REG, eCX_reg }
253 #define RMeDX { OP_REG, eDX_reg }
254 #define RMeSP { OP_REG, eSP_reg }
255 #define RMeBP { OP_REG, eBP_reg }
256 #define RMeSI { OP_REG, eSI_reg }
257 #define RMeDI { OP_REG, eDI_reg }
258 #define RMrAX { OP_REG, rAX_reg }
259 #define RMrBX { OP_REG, rBX_reg }
260 #define RMrCX { OP_REG, rCX_reg }
261 #define RMrDX { OP_REG, rDX_reg }
262 #define RMrSP { OP_REG, rSP_reg }
263 #define RMrBP { OP_REG, rBP_reg }
264 #define RMrSI { OP_REG, rSI_reg }
265 #define RMrDI { OP_REG, rDI_reg }
266 #define RMAL { OP_REG, al_reg }
267 #define RMCL { OP_REG, cl_reg }
268 #define RMDL { OP_REG, dl_reg }
269 #define RMBL { OP_REG, bl_reg }
270 #define RMAH { OP_REG, ah_reg }
271 #define RMCH { OP_REG, ch_reg }
272 #define RMDH { OP_REG, dh_reg }
273 #define RMBH { OP_REG, bh_reg }
274 #define RMAX { OP_REG, ax_reg }
275 #define RMDX { OP_REG, dx_reg }
276 
277 #define eAX { OP_IMREG, eAX_reg }
278 #define eBX { OP_IMREG, eBX_reg }
279 #define eCX { OP_IMREG, eCX_reg }
280 #define eDX { OP_IMREG, eDX_reg }
281 #define eSP { OP_IMREG, eSP_reg }
282 #define eBP { OP_IMREG, eBP_reg }
283 #define eSI { OP_IMREG, eSI_reg }
284 #define eDI { OP_IMREG, eDI_reg }
285 #define AL { OP_IMREG, al_reg }
286 #define CL { OP_IMREG, cl_reg }
287 #define DL { OP_IMREG, dl_reg }
288 #define BL { OP_IMREG, bl_reg }
289 #define AH { OP_IMREG, ah_reg }
290 #define CH { OP_IMREG, ch_reg }
291 #define DH { OP_IMREG, dh_reg }
292 #define BH { OP_IMREG, bh_reg }
293 #define AX { OP_IMREG, ax_reg }
294 #define DX { OP_IMREG, dx_reg }
295 #define zAX { OP_IMREG, z_mode_ax_reg }
296 #define indirDX { OP_IMREG, indir_dx_reg }
297 
298 #define Sw { OP_SEG, w_mode }
299 #define Sv { OP_SEG, v_mode }
300 #define Ap { OP_DIR, 0 }
301 #define Ob { OP_OFF64, b_mode }
302 #define Ov { OP_OFF64, v_mode }
303 #define Xb { OP_DSreg, eSI_reg }
304 #define Xv { OP_DSreg, eSI_reg }
305 #define Xz { OP_DSreg, eSI_reg }
306 #define Yb { OP_ESreg, eDI_reg }
307 #define Yv { OP_ESreg, eDI_reg }
308 #define DSBX { OP_DSreg, eBX_reg }
309 
310 #define es { OP_REG, es_reg }
311 #define ss { OP_REG, ss_reg }
312 #define cs { OP_REG, cs_reg }
313 #define ds { OP_REG, ds_reg }
314 #define fs { OP_REG, fs_reg }
315 #define gs { OP_REG, gs_reg }
316 
317 #define MX { OP_MMX, 0 }
318 #define XM { OP_XMM, 0 }
319 #define XMScalar { OP_XMM, scalar_mode }
320 #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
321 #define XMM { OP_XMM, xmm_mode }
322 #define XMxmmq { OP_XMM, xmmq_mode }
323 #define EM { OP_EM, v_mode }
324 #define EMS { OP_EM, v_swap_mode }
325 #define EMd { OP_EM, d_mode }
326 #define EMx { OP_EM, x_mode }
327 #define EXw { OP_EX, w_mode }
328 #define EXd { OP_EX, d_mode }
329 #define EXdScalar { OP_EX, d_scalar_mode }
330 #define EXdS { OP_EX, d_swap_mode }
331 #define EXdScalarS { OP_EX, d_scalar_swap_mode }
332 #define EXq { OP_EX, q_mode }
333 #define EXqScalar { OP_EX, q_scalar_mode }
334 #define EXqScalarS { OP_EX, q_scalar_swap_mode }
335 #define EXqS { OP_EX, q_swap_mode }
336 #define EXx { OP_EX, x_mode }
337 #define EXxS { OP_EX, x_swap_mode }
338 #define EXxmm { OP_EX, xmm_mode }
339 #define EXymm { OP_EX, ymm_mode }
340 #define EXxmmq { OP_EX, xmmq_mode }
341 #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
342 #define EXxmm_mb { OP_EX, xmm_mb_mode }
343 #define EXxmm_mw { OP_EX, xmm_mw_mode }
344 #define EXxmm_md { OP_EX, xmm_md_mode }
345 #define EXxmm_mq { OP_EX, xmm_mq_mode }
346 #define EXxmm_mdq { OP_EX, xmm_mdq_mode }
347 #define EXxmmdw { OP_EX, xmmdw_mode }
348 #define EXxmmqd { OP_EX, xmmqd_mode }
349 #define EXymmq { OP_EX, ymmq_mode }
350 #define EXVexWdq { OP_EX, vex_w_dq_mode }
351 #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
352 #define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
353 #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
354 #define MS { OP_MS, v_mode }
355 #define XS { OP_XS, v_mode }
356 #define EMCq { OP_EMC, q_mode }
357 #define MXC { OP_MXC, 0 }
358 #define OPSUF { OP_3DNowSuffix, 0 }
359 #define CMP { CMP_Fixup, 0 }
360 #define XMM0 { XMM_Fixup, 0 }
361 #define FXSAVE { FXSAVE_Fixup, 0 }
362 #define Vex_2src_1 { OP_Vex_2src_1, 0 }
363 #define Vex_2src_2 { OP_Vex_2src_2, 0 }
364 
365 #define Vex { OP_VEX, vex_mode }
366 #define VexScalar { OP_VEX, vex_scalar_mode }
367 #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
368 #define Vex128 { OP_VEX, vex128_mode }
369 #define Vex256 { OP_VEX, vex256_mode }
370 #define VexGdq { OP_VEX, dq_mode }
371 #define VexI4 { VEXI4_Fixup, 0}
372 #define EXdVex { OP_EX_Vex, d_mode }
373 #define EXdVexS { OP_EX_Vex, d_swap_mode }
374 #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
375 #define EXqVex { OP_EX_Vex, q_mode }
376 #define EXqVexS { OP_EX_Vex, q_swap_mode }
377 #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
378 #define EXVexW { OP_EX_VexW, x_mode }
379 #define EXdVexW { OP_EX_VexW, d_mode }
380 #define EXqVexW { OP_EX_VexW, q_mode }
381 #define EXVexImmW { OP_EX_VexImmW, x_mode }
382 #define XMVex { OP_XMM_Vex, 0 }
383 #define XMVexScalar { OP_XMM_Vex, scalar_mode }
384 #define XMVexW { OP_XMM_VexW, 0 }
385 #define XMVexI4 { OP_REG_VexI4, x_mode }
386 #define PCLMUL { PCLMUL_Fixup, 0 }
387 #define VZERO { VZERO_Fixup, 0 }
388 #define VCMP { VCMP_Fixup, 0 }
389 #define VPCMP { VPCMP_Fixup, 0 }
390 
391 #define EXxEVexR { OP_Rounding, evex_rounding_mode }
392 #define EXxEVexS { OP_Rounding, evex_sae_mode }
393 
394 #define XMask { OP_Mask, mask_mode }
395 #define MaskG { OP_G, mask_mode }
396 #define MaskE { OP_E, mask_mode }
397 #define MaskBDE { OP_E, mask_bd_mode }
398 #define MaskR { OP_R, mask_mode }
399 #define MaskVex { OP_VEX, mask_mode }
400 
401 #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
402 #define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
403 #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
404 #define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
405 
406 /* Used handle "rep" prefix for string instructions.  */
407 #define Xbr { REP_Fixup, eSI_reg }
408 #define Xvr { REP_Fixup, eSI_reg }
409 #define Ybr { REP_Fixup, eDI_reg }
410 #define Yvr { REP_Fixup, eDI_reg }
411 #define Yzr { REP_Fixup, eDI_reg }
412 #define indirDXr { REP_Fixup, indir_dx_reg }
413 #define ALr { REP_Fixup, al_reg }
414 #define eAXr { REP_Fixup, eAX_reg }
415 
416 /* Used handle HLE prefix for lockable instructions.  */
417 #define Ebh1 { HLE_Fixup1, b_mode }
418 #define Evh1 { HLE_Fixup1, v_mode }
419 #define Ebh2 { HLE_Fixup2, b_mode }
420 #define Evh2 { HLE_Fixup2, v_mode }
421 #define Ebh3 { HLE_Fixup3, b_mode }
422 #define Evh3 { HLE_Fixup3, v_mode }
423 
424 #define BND { BND_Fixup, 0 }
425 
426 #define cond_jump_flag { NULL, cond_jump_mode }
427 #define loop_jcxz_flag { NULL, loop_jcxz_mode }
428 
429 /* bits in sizeflag */
430 #define SUFFIX_ALWAYS 4
431 #define AFLAG 2
432 #define DFLAG 1
433 
434 enum
435 {
436 	/* byte operand */
437 	b_mode = 1,
438 	/* byte operand with operand swapped */
439 	b_swap_mode,
440 	/* byte operand, sign extend like 'T' suffix */
441 	b_T_mode,
442 	/* operand size depends on prefixes */
443 	v_mode,
444 	/* operand size depends on prefixes with operand swapped */
445 	v_swap_mode,
446 	/* word operand */
447 	w_mode,
448 	/* double word operand  */
449 	d_mode,
450 	/* double word operand with operand swapped */
451 	d_swap_mode,
452 	/* quad word operand */
453 	q_mode,
454 	/* quad word operand with operand swapped */
455 	q_swap_mode,
456 	/* ten-byte operand */
457 	t_mode,
458 	/* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand.  In EVEX with
459 	   broadcast enabled.  */
460 	x_mode,
461 	/* Similar to x_mode, but with different EVEX mem shifts.  */
462 	evex_x_gscat_mode,
463 	/* Similar to x_mode, but with disabled broadcast.  */
464 	evex_x_nobcst_mode,
465 	/* Similar to x_mode, but with operands swapped and disabled broadcast
466 	   in EVEX.  */
467 	x_swap_mode,
468 	/* 16-byte XMM operand */
469 	xmm_mode,
470 	/* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
471 	   memory operand (depending on vector length).  Broadcast isn't
472 	   allowed.  */
473 	xmmq_mode,
474 	/* Same as xmmq_mode, but broadcast is allowed.  */
475 	evex_half_bcst_xmmq_mode,
476 	/* XMM register or byte memory operand */
477 	xmm_mb_mode,
478 	/* XMM register or word memory operand */
479 	xmm_mw_mode,
480 	/* XMM register or double word memory operand */
481 	xmm_md_mode,
482 	/* XMM register or quad word memory operand */
483 	xmm_mq_mode,
484 	/* XMM register or double/quad word memory operand, depending on
485 	   VEX.W.  */
486 	xmm_mdq_mode,
487 	/* 16-byte XMM, word, double word or quad word operand.  */
488 	xmmdw_mode,
489 	/* 16-byte XMM, double word, quad word operand or xmm word operand.  */
490 	xmmqd_mode,
491 	/* 32-byte YMM operand */
492 	ymm_mode,
493 	/* quad word, ymmword or zmmword memory operand.  */
494 	ymmq_mode,
495 	/* 32-byte YMM or 16-byte word operand */
496 	ymmxmm_mode,
497 	/* d_mode in 32bit, q_mode in 64bit mode.  */
498 	m_mode,
499 	/* pair of v_mode operands */
500 	a_mode,
501 	cond_jump_mode,
502 	loop_jcxz_mode,
503 	v_bnd_mode,
504 	/* operand size depends on REX prefixes.  */
505 	dq_mode,
506 	/* registers like dq_mode, memory like w_mode.  */
507 	dqw_mode,
508 	dqw_swap_mode,
509 	bnd_mode,
510 	/* 4- or 6-byte pointer operand */
511 	f_mode,
512 	const_1_mode,
513 	/* v_mode for indirect branch opcodes.  */
514 	indir_v_mode,
515 	/* v_mode for stack-related opcodes.  */
516 	stack_v_mode,
517 	/* non-quad operand size depends on prefixes */
518 	z_mode,
519 	/* 16-byte operand */
520 	o_mode,
521 	/* registers like dq_mode, memory like b_mode.  */
522 	dqb_mode,
523 	/* registers like d_mode, memory like b_mode.  */
524 	db_mode,
525 	/* registers like d_mode, memory like w_mode.  */
526 	dw_mode,
527 	/* registers like dq_mode, memory like d_mode.  */
528 	dqd_mode,
529 	/* normal vex mode */
530 	vex_mode,
531 	/* 128bit vex mode */
532 	vex128_mode,
533 	/* 256bit vex mode */
534 	vex256_mode,
535 	/* operand size depends on the VEX.W bit.  */
536 	vex_w_dq_mode,
537 
538 	/* Similar to vex_w_dq_mode, with VSIB dword indices.  */
539 	vex_vsib_d_w_dq_mode,
540 	/* Similar to vex_vsib_d_w_dq_mode, with smaller memory.  */
541 	vex_vsib_d_w_d_mode,
542 	/* Similar to vex_w_dq_mode, with VSIB qword indices.  */
543 	vex_vsib_q_w_dq_mode,
544 	/* Similar to vex_vsib_q_w_dq_mode, with smaller memory.  */
545 	vex_vsib_q_w_d_mode,
546 
547 	/* scalar, ignore vector length.  */
548 	scalar_mode,
549 	/* like d_mode, ignore vector length.  */
550 	d_scalar_mode,
551 	/* like d_swap_mode, ignore vector length.  */
552 	d_scalar_swap_mode,
553 	/* like q_mode, ignore vector length.  */
554 	q_scalar_mode,
555 	/* like q_swap_mode, ignore vector length.  */
556 	q_scalar_swap_mode,
557 	/* like vex_mode, ignore vector length.  */
558 	vex_scalar_mode,
559 	/* like vex_w_dq_mode, ignore vector length.  */
560 	vex_scalar_w_dq_mode,
561 
562 	/* Static rounding.  */
563 	evex_rounding_mode,
564 	/* Supress all exceptions.  */
565 	evex_sae_mode,
566 
567 	/* Mask register operand.  */
568 	mask_mode,
569 	/* Mask register operand.  */
570 	mask_bd_mode,
571 
572 	es_reg,
573 	cs_reg,
574 	ss_reg,
575 	ds_reg,
576 	fs_reg,
577 	gs_reg,
578 
579 	eAX_reg,
580 	eCX_reg,
581 	eDX_reg,
582 	eBX_reg,
583 	eSP_reg,
584 	eBP_reg,
585 	eSI_reg,
586 	eDI_reg,
587 
588 	al_reg,
589 	cl_reg,
590 	dl_reg,
591 	bl_reg,
592 	ah_reg,
593 	ch_reg,
594 	dh_reg,
595 	bh_reg,
596 
597 	ax_reg,
598 	cx_reg,
599 	dx_reg,
600 	bx_reg,
601 	sp_reg,
602 	bp_reg,
603 	si_reg,
604 	di_reg,
605 
606 	rAX_reg,
607 	rCX_reg,
608 	rDX_reg,
609 	rBX_reg,
610 	rSP_reg,
611 	rBP_reg,
612 	rSI_reg,
613 	rDI_reg,
614 
615 	z_mode_ax_reg,
616 	indir_dx_reg
617 };
618 
619 enum
620 {
621 	FLOATCODE = 1,
622 	USE_REG_TABLE,
623 	USE_MOD_TABLE,
624 	USE_RM_TABLE,
625 	USE_PREFIX_TABLE,
626 	USE_X86_64_TABLE,
627 	USE_3BYTE_TABLE,
628 	USE_XOP_8F_TABLE,
629 	USE_VEX_C4_TABLE,
630 	USE_VEX_C5_TABLE,
631 	USE_VEX_LEN_TABLE,
632 	USE_VEX_W_TABLE,
633 	USE_EVEX_TABLE
634 };
635 
636 #define FLOAT				NULL, { { NULL, FLOATCODE } }, 0
637 
638 #define DIS386(T, I)		NULL, { { NULL, (T) }, { NULL,  (I) } }, 0
639 #define DIS386_PREFIX(T, I, P)		NULL, { { NULL, (T) }, { NULL,  (I) } }, P
640 #define REG_TABLE(I)		DIS386 (USE_REG_TABLE, (I))
641 #define MOD_TABLE(I)		DIS386 (USE_MOD_TABLE, (I))
642 #define RM_TABLE(I)		DIS386 (USE_RM_TABLE, (I))
643 #define PREFIX_TABLE(I)		DIS386 (USE_PREFIX_TABLE, (I))
644 #define X86_64_TABLE(I)		DIS386 (USE_X86_64_TABLE, (I))
645 #define THREE_BYTE_TABLE(I)	DIS386 (USE_3BYTE_TABLE, (I))
646 #define THREE_BYTE_TABLE_PREFIX(I, P)	DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
647 #define XOP_8F_TABLE(I)		DIS386 (USE_XOP_8F_TABLE, (I))
648 #define VEX_C4_TABLE(I)		DIS386 (USE_VEX_C4_TABLE, (I))
649 #define VEX_C5_TABLE(I)		DIS386 (USE_VEX_C5_TABLE, (I))
650 #define VEX_LEN_TABLE(I)	DIS386 (USE_VEX_LEN_TABLE, (I))
651 #define VEX_W_TABLE(I)		DIS386 (USE_VEX_W_TABLE, (I))
652 #define EVEX_TABLE(I)		DIS386 (USE_EVEX_TABLE, (I))
653 
654 enum
655 {
656 	REG_80 = 0,
657 	REG_81,
658 	REG_83,
659 	REG_8F,
660 	REG_C0,
661 	REG_C1,
662 	REG_C6,
663 	REG_C7,
664 	REG_D0,
665 	REG_D1,
666 	REG_D2,
667 	REG_D3,
668 	REG_F6,
669 	REG_F7,
670 	REG_FE,
671 	REG_FF,
672 	REG_0F00,
673 	REG_0F01,
674 	REG_0F0D,
675 	REG_0F18,
676 	REG_0F71,
677 	REG_0F72,
678 	REG_0F73,
679 	REG_0FA6,
680 	REG_0FA7,
681 	REG_0FAE,
682 	REG_0FBA,
683 	REG_0FC7,
684 	REG_VEX_0F71,
685 	REG_VEX_0F72,
686 	REG_VEX_0F73,
687 	REG_VEX_0FAE,
688 	REG_VEX_0F38F3,
689 	REG_XOP_LWPCB,
690 	REG_XOP_LWP,
691 	REG_XOP_TBM_01,
692 	REG_XOP_TBM_02,
693 
694 	REG_EVEX_0F71,
695 	REG_EVEX_0F72,
696 	REG_EVEX_0F73,
697 	REG_EVEX_0F38C6,
698 	REG_EVEX_0F38C7
699 };
700 
701 enum
702 {
703 	MOD_8D = 0,
704 	MOD_C6_REG_7,
705 	MOD_C7_REG_7,
706 	MOD_FF_REG_3,
707 	MOD_FF_REG_5,
708 	MOD_0F01_REG_0,
709 	MOD_0F01_REG_1,
710 	MOD_0F01_REG_2,
711 	MOD_0F01_REG_3,
712 	MOD_0F01_REG_5,
713 	MOD_0F01_REG_7,
714 	MOD_0F12_PREFIX_0,
715 	MOD_0F13,
716 	MOD_0F16_PREFIX_0,
717 	MOD_0F17,
718 	MOD_0F18_REG_0,
719 	MOD_0F18_REG_1,
720 	MOD_0F18_REG_2,
721 	MOD_0F18_REG_3,
722 	MOD_0F18_REG_4,
723 	MOD_0F18_REG_5,
724 	MOD_0F18_REG_6,
725 	MOD_0F18_REG_7,
726 	MOD_0F1A_PREFIX_0,
727 	MOD_0F1B_PREFIX_0,
728 	MOD_0F1B_PREFIX_1,
729 	MOD_0F24,
730 	MOD_0F26,
731 	MOD_0F2B_PREFIX_0,
732 	MOD_0F2B_PREFIX_1,
733 	MOD_0F2B_PREFIX_2,
734 	MOD_0F2B_PREFIX_3,
735 	MOD_0F51,
736 	MOD_0F71_REG_2,
737 	MOD_0F71_REG_4,
738 	MOD_0F71_REG_6,
739 	MOD_0F72_REG_2,
740 	MOD_0F72_REG_4,
741 	MOD_0F72_REG_6,
742 	MOD_0F73_REG_2,
743 	MOD_0F73_REG_3,
744 	MOD_0F73_REG_6,
745 	MOD_0F73_REG_7,
746 	MOD_0FAE_REG_0,
747 	MOD_0FAE_REG_1,
748 	MOD_0FAE_REG_2,
749 	MOD_0FAE_REG_3,
750 	MOD_0FAE_REG_4,
751 	MOD_0FAE_REG_5,
752 	MOD_0FAE_REG_6,
753 	MOD_0FAE_REG_7,
754 	MOD_0FB2,
755 	MOD_0FB4,
756 	MOD_0FB5,
757 	MOD_0FC3,
758 	MOD_0FC7_REG_3,
759 	MOD_0FC7_REG_4,
760 	MOD_0FC7_REG_5,
761 	MOD_0FC7_REG_6,
762 	MOD_0FC7_REG_7,
763 	MOD_0FD7,
764 	MOD_0FE7_PREFIX_2,
765 	MOD_0FF0_PREFIX_3,
766 	MOD_0F382A_PREFIX_2,
767 	MOD_62_32BIT,
768 	MOD_C4_32BIT,
769 	MOD_C5_32BIT,
770 	MOD_VEX_0F12_PREFIX_0,
771 	MOD_VEX_0F13,
772 	MOD_VEX_0F16_PREFIX_0,
773 	MOD_VEX_0F17,
774 	MOD_VEX_0F2B,
775 	MOD_VEX_W_0_0F41_P_0_LEN_1,
776 	MOD_VEX_W_1_0F41_P_0_LEN_1,
777 	MOD_VEX_W_0_0F41_P_2_LEN_1,
778 	MOD_VEX_W_1_0F41_P_2_LEN_1,
779 	MOD_VEX_W_0_0F42_P_0_LEN_1,
780 	MOD_VEX_W_1_0F42_P_0_LEN_1,
781 	MOD_VEX_W_0_0F42_P_2_LEN_1,
782 	MOD_VEX_W_1_0F42_P_2_LEN_1,
783 	MOD_VEX_W_0_0F44_P_0_LEN_1,
784 	MOD_VEX_W_1_0F44_P_0_LEN_1,
785 	MOD_VEX_W_0_0F44_P_2_LEN_1,
786 	MOD_VEX_W_1_0F44_P_2_LEN_1,
787 	MOD_VEX_W_0_0F45_P_0_LEN_1,
788 	MOD_VEX_W_1_0F45_P_0_LEN_1,
789 	MOD_VEX_W_0_0F45_P_2_LEN_1,
790 	MOD_VEX_W_1_0F45_P_2_LEN_1,
791 	MOD_VEX_W_0_0F46_P_0_LEN_1,
792 	MOD_VEX_W_1_0F46_P_0_LEN_1,
793 	MOD_VEX_W_0_0F46_P_2_LEN_1,
794 	MOD_VEX_W_1_0F46_P_2_LEN_1,
795 	MOD_VEX_W_0_0F47_P_0_LEN_1,
796 	MOD_VEX_W_1_0F47_P_0_LEN_1,
797 	MOD_VEX_W_0_0F47_P_2_LEN_1,
798 	MOD_VEX_W_1_0F47_P_2_LEN_1,
799 	MOD_VEX_W_0_0F4A_P_0_LEN_1,
800 	MOD_VEX_W_1_0F4A_P_0_LEN_1,
801 	MOD_VEX_W_0_0F4A_P_2_LEN_1,
802 	MOD_VEX_W_1_0F4A_P_2_LEN_1,
803 	MOD_VEX_W_0_0F4B_P_0_LEN_1,
804 	MOD_VEX_W_1_0F4B_P_0_LEN_1,
805 	MOD_VEX_W_0_0F4B_P_2_LEN_1,
806 	MOD_VEX_0F50,
807 	MOD_VEX_0F71_REG_2,
808 	MOD_VEX_0F71_REG_4,
809 	MOD_VEX_0F71_REG_6,
810 	MOD_VEX_0F72_REG_2,
811 	MOD_VEX_0F72_REG_4,
812 	MOD_VEX_0F72_REG_6,
813 	MOD_VEX_0F73_REG_2,
814 	MOD_VEX_0F73_REG_3,
815 	MOD_VEX_0F73_REG_6,
816 	MOD_VEX_0F73_REG_7,
817 	MOD_VEX_W_0_0F91_P_0_LEN_0,
818 	MOD_VEX_W_1_0F91_P_0_LEN_0,
819 	MOD_VEX_W_0_0F91_P_2_LEN_0,
820 	MOD_VEX_W_1_0F91_P_2_LEN_0,
821 	MOD_VEX_W_0_0F92_P_0_LEN_0,
822 	MOD_VEX_W_0_0F92_P_2_LEN_0,
823 	MOD_VEX_W_0_0F92_P_3_LEN_0,
824 	MOD_VEX_W_1_0F92_P_3_LEN_0,
825 	MOD_VEX_W_0_0F93_P_0_LEN_0,
826 	MOD_VEX_W_0_0F93_P_2_LEN_0,
827 	MOD_VEX_W_0_0F93_P_3_LEN_0,
828 	MOD_VEX_W_1_0F93_P_3_LEN_0,
829 	MOD_VEX_W_0_0F98_P_0_LEN_0,
830 	MOD_VEX_W_1_0F98_P_0_LEN_0,
831 	MOD_VEX_W_0_0F98_P_2_LEN_0,
832 	MOD_VEX_W_1_0F98_P_2_LEN_0,
833 	MOD_VEX_W_0_0F99_P_0_LEN_0,
834 	MOD_VEX_W_1_0F99_P_0_LEN_0,
835 	MOD_VEX_W_0_0F99_P_2_LEN_0,
836 	MOD_VEX_W_1_0F99_P_2_LEN_0,
837 	MOD_VEX_0FAE_REG_2,
838 	MOD_VEX_0FAE_REG_3,
839 	MOD_VEX_0FD7_PREFIX_2,
840 	MOD_VEX_0FE7_PREFIX_2,
841 	MOD_VEX_0FF0_PREFIX_3,
842 	MOD_VEX_0F381A_PREFIX_2,
843 	MOD_VEX_0F382A_PREFIX_2,
844 	MOD_VEX_0F382C_PREFIX_2,
845 	MOD_VEX_0F382D_PREFIX_2,
846 	MOD_VEX_0F382E_PREFIX_2,
847 	MOD_VEX_0F382F_PREFIX_2,
848 	MOD_VEX_0F385A_PREFIX_2,
849 	MOD_VEX_0F388C_PREFIX_2,
850 	MOD_VEX_0F388E_PREFIX_2,
851 	MOD_VEX_W_0_0F3A30_P_2_LEN_0,
852 	MOD_VEX_W_1_0F3A30_P_2_LEN_0,
853 	MOD_VEX_W_0_0F3A31_P_2_LEN_0,
854 	MOD_VEX_W_1_0F3A31_P_2_LEN_0,
855 	MOD_VEX_W_0_0F3A32_P_2_LEN_0,
856 	MOD_VEX_W_1_0F3A32_P_2_LEN_0,
857 	MOD_VEX_W_0_0F3A33_P_2_LEN_0,
858 	MOD_VEX_W_1_0F3A33_P_2_LEN_0,
859 
860 	MOD_EVEX_0F10_PREFIX_1,
861 	MOD_EVEX_0F10_PREFIX_3,
862 	MOD_EVEX_0F11_PREFIX_1,
863 	MOD_EVEX_0F11_PREFIX_3,
864 	MOD_EVEX_0F12_PREFIX_0,
865 	MOD_EVEX_0F16_PREFIX_0,
866 	MOD_EVEX_0F38C6_REG_1,
867 	MOD_EVEX_0F38C6_REG_2,
868 	MOD_EVEX_0F38C6_REG_5,
869 	MOD_EVEX_0F38C6_REG_6,
870 	MOD_EVEX_0F38C7_REG_1,
871 	MOD_EVEX_0F38C7_REG_2,
872 	MOD_EVEX_0F38C7_REG_5,
873 	MOD_EVEX_0F38C7_REG_6
874 };
875 
876 enum
877 {
878 	RM_C6_REG_7 = 0,
879 	RM_C7_REG_7,
880 	RM_0F01_REG_0,
881 	RM_0F01_REG_1,
882 	RM_0F01_REG_2,
883 	RM_0F01_REG_3,
884 	RM_0F01_REG_5,
885 	RM_0F01_REG_7,
886 	RM_0FAE_REG_5,
887 	RM_0FAE_REG_6,
888 	RM_0FAE_REG_7
889 };
890 
891 enum
892 {
893 	PREFIX_90 = 0,
894 	PREFIX_0F10,
895 	PREFIX_0F11,
896 	PREFIX_0F12,
897 	PREFIX_0F16,
898 	PREFIX_0F1A,
899 	PREFIX_0F1B,
900 	PREFIX_0F2A,
901 	PREFIX_0F2B,
902 	PREFIX_0F2C,
903 	PREFIX_0F2D,
904 	PREFIX_0F2E,
905 	PREFIX_0F2F,
906 	PREFIX_0F51,
907 	PREFIX_0F52,
908 	PREFIX_0F53,
909 	PREFIX_0F58,
910 	PREFIX_0F59,
911 	PREFIX_0F5A,
912 	PREFIX_0F5B,
913 	PREFIX_0F5C,
914 	PREFIX_0F5D,
915 	PREFIX_0F5E,
916 	PREFIX_0F5F,
917 	PREFIX_0F60,
918 	PREFIX_0F61,
919 	PREFIX_0F62,
920 	PREFIX_0F6C,
921 	PREFIX_0F6D,
922 	PREFIX_0F6F,
923 	PREFIX_0F70,
924 	PREFIX_0F73_REG_3,
925 	PREFIX_0F73_REG_7,
926 	PREFIX_0F78,
927 	PREFIX_0F79,
928 	PREFIX_0F7C,
929 	PREFIX_0F7D,
930 	PREFIX_0F7E,
931 	PREFIX_0F7F,
932 	PREFIX_0FAE_REG_0,
933 	PREFIX_0FAE_REG_1,
934 	PREFIX_0FAE_REG_2,
935 	PREFIX_0FAE_REG_3,
936 	PREFIX_MOD_0_0FAE_REG_4,
937 	PREFIX_MOD_3_0FAE_REG_4,
938 	PREFIX_0FAE_REG_6,
939 	PREFIX_0FAE_REG_7,
940 	PREFIX_0FB8,
941 	PREFIX_0FBC,
942 	PREFIX_0FBD,
943 	PREFIX_0FC2,
944 	PREFIX_MOD_0_0FC3,
945 	PREFIX_MOD_0_0FC7_REG_6,
946 	PREFIX_MOD_3_0FC7_REG_6,
947 	PREFIX_MOD_3_0FC7_REG_7,
948 	PREFIX_0FD0,
949 	PREFIX_0FD6,
950 	PREFIX_0FE6,
951 	PREFIX_0FE7,
952 	PREFIX_0FF0,
953 	PREFIX_0FF7,
954 	PREFIX_0F3810,
955 	PREFIX_0F3814,
956 	PREFIX_0F3815,
957 	PREFIX_0F3817,
958 	PREFIX_0F3820,
959 	PREFIX_0F3821,
960 	PREFIX_0F3822,
961 	PREFIX_0F3823,
962 	PREFIX_0F3824,
963 	PREFIX_0F3825,
964 	PREFIX_0F3828,
965 	PREFIX_0F3829,
966 	PREFIX_0F382A,
967 	PREFIX_0F382B,
968 	PREFIX_0F3830,
969 	PREFIX_0F3831,
970 	PREFIX_0F3832,
971 	PREFIX_0F3833,
972 	PREFIX_0F3834,
973 	PREFIX_0F3835,
974 	PREFIX_0F3837,
975 	PREFIX_0F3838,
976 	PREFIX_0F3839,
977 	PREFIX_0F383A,
978 	PREFIX_0F383B,
979 	PREFIX_0F383C,
980 	PREFIX_0F383D,
981 	PREFIX_0F383E,
982 	PREFIX_0F383F,
983 	PREFIX_0F3840,
984 	PREFIX_0F3841,
985 	PREFIX_0F3880,
986 	PREFIX_0F3881,
987 	PREFIX_0F3882,
988 	PREFIX_0F38C8,
989 	PREFIX_0F38C9,
990 	PREFIX_0F38CA,
991 	PREFIX_0F38CB,
992 	PREFIX_0F38CC,
993 	PREFIX_0F38CD,
994 	PREFIX_0F38DB,
995 	PREFIX_0F38DC,
996 	PREFIX_0F38DD,
997 	PREFIX_0F38DE,
998 	PREFIX_0F38DF,
999 	PREFIX_0F38F0,
1000 	PREFIX_0F38F1,
1001 	PREFIX_0F38F6,
1002 	PREFIX_0F3A08,
1003 	PREFIX_0F3A09,
1004 	PREFIX_0F3A0A,
1005 	PREFIX_0F3A0B,
1006 	PREFIX_0F3A0C,
1007 	PREFIX_0F3A0D,
1008 	PREFIX_0F3A0E,
1009 	PREFIX_0F3A14,
1010 	PREFIX_0F3A15,
1011 	PREFIX_0F3A16,
1012 	PREFIX_0F3A17,
1013 	PREFIX_0F3A20,
1014 	PREFIX_0F3A21,
1015 	PREFIX_0F3A22,
1016 	PREFIX_0F3A40,
1017 	PREFIX_0F3A41,
1018 	PREFIX_0F3A42,
1019 	PREFIX_0F3A44,
1020 	PREFIX_0F3A60,
1021 	PREFIX_0F3A61,
1022 	PREFIX_0F3A62,
1023 	PREFIX_0F3A63,
1024 	PREFIX_0F3ACC,
1025 	PREFIX_0F3ADF,
1026 	PREFIX_VEX_0F10,
1027 	PREFIX_VEX_0F11,
1028 	PREFIX_VEX_0F12,
1029 	PREFIX_VEX_0F16,
1030 	PREFIX_VEX_0F2A,
1031 	PREFIX_VEX_0F2C,
1032 	PREFIX_VEX_0F2D,
1033 	PREFIX_VEX_0F2E,
1034 	PREFIX_VEX_0F2F,
1035 	PREFIX_VEX_0F41,
1036 	PREFIX_VEX_0F42,
1037 	PREFIX_VEX_0F44,
1038 	PREFIX_VEX_0F45,
1039 	PREFIX_VEX_0F46,
1040 	PREFIX_VEX_0F47,
1041 	PREFIX_VEX_0F4A,
1042 	PREFIX_VEX_0F4B,
1043 	PREFIX_VEX_0F51,
1044 	PREFIX_VEX_0F52,
1045 	PREFIX_VEX_0F53,
1046 	PREFIX_VEX_0F58,
1047 	PREFIX_VEX_0F59,
1048 	PREFIX_VEX_0F5A,
1049 	PREFIX_VEX_0F5B,
1050 	PREFIX_VEX_0F5C,
1051 	PREFIX_VEX_0F5D,
1052 	PREFIX_VEX_0F5E,
1053 	PREFIX_VEX_0F5F,
1054 	PREFIX_VEX_0F60,
1055 	PREFIX_VEX_0F61,
1056 	PREFIX_VEX_0F62,
1057 	PREFIX_VEX_0F63,
1058 	PREFIX_VEX_0F64,
1059 	PREFIX_VEX_0F65,
1060 	PREFIX_VEX_0F66,
1061 	PREFIX_VEX_0F67,
1062 	PREFIX_VEX_0F68,
1063 	PREFIX_VEX_0F69,
1064 	PREFIX_VEX_0F6A,
1065 	PREFIX_VEX_0F6B,
1066 	PREFIX_VEX_0F6C,
1067 	PREFIX_VEX_0F6D,
1068 	PREFIX_VEX_0F6E,
1069 	PREFIX_VEX_0F6F,
1070 	PREFIX_VEX_0F70,
1071 	PREFIX_VEX_0F71_REG_2,
1072 	PREFIX_VEX_0F71_REG_4,
1073 	PREFIX_VEX_0F71_REG_6,
1074 	PREFIX_VEX_0F72_REG_2,
1075 	PREFIX_VEX_0F72_REG_4,
1076 	PREFIX_VEX_0F72_REG_6,
1077 	PREFIX_VEX_0F73_REG_2,
1078 	PREFIX_VEX_0F73_REG_3,
1079 	PREFIX_VEX_0F73_REG_6,
1080 	PREFIX_VEX_0F73_REG_7,
1081 	PREFIX_VEX_0F74,
1082 	PREFIX_VEX_0F75,
1083 	PREFIX_VEX_0F76,
1084 	PREFIX_VEX_0F77,
1085 	PREFIX_VEX_0F7C,
1086 	PREFIX_VEX_0F7D,
1087 	PREFIX_VEX_0F7E,
1088 	PREFIX_VEX_0F7F,
1089 	PREFIX_VEX_0F90,
1090 	PREFIX_VEX_0F91,
1091 	PREFIX_VEX_0F92,
1092 	PREFIX_VEX_0F93,
1093 	PREFIX_VEX_0F98,
1094 	PREFIX_VEX_0F99,
1095 	PREFIX_VEX_0FC2,
1096 	PREFIX_VEX_0FC4,
1097 	PREFIX_VEX_0FC5,
1098 	PREFIX_VEX_0FD0,
1099 	PREFIX_VEX_0FD1,
1100 	PREFIX_VEX_0FD2,
1101 	PREFIX_VEX_0FD3,
1102 	PREFIX_VEX_0FD4,
1103 	PREFIX_VEX_0FD5,
1104 	PREFIX_VEX_0FD6,
1105 	PREFIX_VEX_0FD7,
1106 	PREFIX_VEX_0FD8,
1107 	PREFIX_VEX_0FD9,
1108 	PREFIX_VEX_0FDA,
1109 	PREFIX_VEX_0FDB,
1110 	PREFIX_VEX_0FDC,
1111 	PREFIX_VEX_0FDD,
1112 	PREFIX_VEX_0FDE,
1113 	PREFIX_VEX_0FDF,
1114 	PREFIX_VEX_0FE0,
1115 	PREFIX_VEX_0FE1,
1116 	PREFIX_VEX_0FE2,
1117 	PREFIX_VEX_0FE3,
1118 	PREFIX_VEX_0FE4,
1119 	PREFIX_VEX_0FE5,
1120 	PREFIX_VEX_0FE6,
1121 	PREFIX_VEX_0FE7,
1122 	PREFIX_VEX_0FE8,
1123 	PREFIX_VEX_0FE9,
1124 	PREFIX_VEX_0FEA,
1125 	PREFIX_VEX_0FEB,
1126 	PREFIX_VEX_0FEC,
1127 	PREFIX_VEX_0FED,
1128 	PREFIX_VEX_0FEE,
1129 	PREFIX_VEX_0FEF,
1130 	PREFIX_VEX_0FF0,
1131 	PREFIX_VEX_0FF1,
1132 	PREFIX_VEX_0FF2,
1133 	PREFIX_VEX_0FF3,
1134 	PREFIX_VEX_0FF4,
1135 	PREFIX_VEX_0FF5,
1136 	PREFIX_VEX_0FF6,
1137 	PREFIX_VEX_0FF7,
1138 	PREFIX_VEX_0FF8,
1139 	PREFIX_VEX_0FF9,
1140 	PREFIX_VEX_0FFA,
1141 	PREFIX_VEX_0FFB,
1142 	PREFIX_VEX_0FFC,
1143 	PREFIX_VEX_0FFD,
1144 	PREFIX_VEX_0FFE,
1145 	PREFIX_VEX_0F3800,
1146 	PREFIX_VEX_0F3801,
1147 	PREFIX_VEX_0F3802,
1148 	PREFIX_VEX_0F3803,
1149 	PREFIX_VEX_0F3804,
1150 	PREFIX_VEX_0F3805,
1151 	PREFIX_VEX_0F3806,
1152 	PREFIX_VEX_0F3807,
1153 	PREFIX_VEX_0F3808,
1154 	PREFIX_VEX_0F3809,
1155 	PREFIX_VEX_0F380A,
1156 	PREFIX_VEX_0F380B,
1157 	PREFIX_VEX_0F380C,
1158 	PREFIX_VEX_0F380D,
1159 	PREFIX_VEX_0F380E,
1160 	PREFIX_VEX_0F380F,
1161 	PREFIX_VEX_0F3813,
1162 	PREFIX_VEX_0F3816,
1163 	PREFIX_VEX_0F3817,
1164 	PREFIX_VEX_0F3818,
1165 	PREFIX_VEX_0F3819,
1166 	PREFIX_VEX_0F381A,
1167 	PREFIX_VEX_0F381C,
1168 	PREFIX_VEX_0F381D,
1169 	PREFIX_VEX_0F381E,
1170 	PREFIX_VEX_0F3820,
1171 	PREFIX_VEX_0F3821,
1172 	PREFIX_VEX_0F3822,
1173 	PREFIX_VEX_0F3823,
1174 	PREFIX_VEX_0F3824,
1175 	PREFIX_VEX_0F3825,
1176 	PREFIX_VEX_0F3828,
1177 	PREFIX_VEX_0F3829,
1178 	PREFIX_VEX_0F382A,
1179 	PREFIX_VEX_0F382B,
1180 	PREFIX_VEX_0F382C,
1181 	PREFIX_VEX_0F382D,
1182 	PREFIX_VEX_0F382E,
1183 	PREFIX_VEX_0F382F,
1184 	PREFIX_VEX_0F3830,
1185 	PREFIX_VEX_0F3831,
1186 	PREFIX_VEX_0F3832,
1187 	PREFIX_VEX_0F3833,
1188 	PREFIX_VEX_0F3834,
1189 	PREFIX_VEX_0F3835,
1190 	PREFIX_VEX_0F3836,
1191 	PREFIX_VEX_0F3837,
1192 	PREFIX_VEX_0F3838,
1193 	PREFIX_VEX_0F3839,
1194 	PREFIX_VEX_0F383A,
1195 	PREFIX_VEX_0F383B,
1196 	PREFIX_VEX_0F383C,
1197 	PREFIX_VEX_0F383D,
1198 	PREFIX_VEX_0F383E,
1199 	PREFIX_VEX_0F383F,
1200 	PREFIX_VEX_0F3840,
1201 	PREFIX_VEX_0F3841,
1202 	PREFIX_VEX_0F3845,
1203 	PREFIX_VEX_0F3846,
1204 	PREFIX_VEX_0F3847,
1205 	PREFIX_VEX_0F3858,
1206 	PREFIX_VEX_0F3859,
1207 	PREFIX_VEX_0F385A,
1208 	PREFIX_VEX_0F3878,
1209 	PREFIX_VEX_0F3879,
1210 	PREFIX_VEX_0F388C,
1211 	PREFIX_VEX_0F388E,
1212 	PREFIX_VEX_0F3890,
1213 	PREFIX_VEX_0F3891,
1214 	PREFIX_VEX_0F3892,
1215 	PREFIX_VEX_0F3893,
1216 	PREFIX_VEX_0F3896,
1217 	PREFIX_VEX_0F3897,
1218 	PREFIX_VEX_0F3898,
1219 	PREFIX_VEX_0F3899,
1220 	PREFIX_VEX_0F389A,
1221 	PREFIX_VEX_0F389B,
1222 	PREFIX_VEX_0F389C,
1223 	PREFIX_VEX_0F389D,
1224 	PREFIX_VEX_0F389E,
1225 	PREFIX_VEX_0F389F,
1226 	PREFIX_VEX_0F38A6,
1227 	PREFIX_VEX_0F38A7,
1228 	PREFIX_VEX_0F38A8,
1229 	PREFIX_VEX_0F38A9,
1230 	PREFIX_VEX_0F38AA,
1231 	PREFIX_VEX_0F38AB,
1232 	PREFIX_VEX_0F38AC,
1233 	PREFIX_VEX_0F38AD,
1234 	PREFIX_VEX_0F38AE,
1235 	PREFIX_VEX_0F38AF,
1236 	PREFIX_VEX_0F38B6,
1237 	PREFIX_VEX_0F38B7,
1238 	PREFIX_VEX_0F38B8,
1239 	PREFIX_VEX_0F38B9,
1240 	PREFIX_VEX_0F38BA,
1241 	PREFIX_VEX_0F38BB,
1242 	PREFIX_VEX_0F38BC,
1243 	PREFIX_VEX_0F38BD,
1244 	PREFIX_VEX_0F38BE,
1245 	PREFIX_VEX_0F38BF,
1246 	PREFIX_VEX_0F38DB,
1247 	PREFIX_VEX_0F38DC,
1248 	PREFIX_VEX_0F38DD,
1249 	PREFIX_VEX_0F38DE,
1250 	PREFIX_VEX_0F38DF,
1251 	PREFIX_VEX_0F38F2,
1252 	PREFIX_VEX_0F38F3_REG_1,
1253 	PREFIX_VEX_0F38F3_REG_2,
1254 	PREFIX_VEX_0F38F3_REG_3,
1255 	PREFIX_VEX_0F38F5,
1256 	PREFIX_VEX_0F38F6,
1257 	PREFIX_VEX_0F38F7,
1258 	PREFIX_VEX_0F3A00,
1259 	PREFIX_VEX_0F3A01,
1260 	PREFIX_VEX_0F3A02,
1261 	PREFIX_VEX_0F3A04,
1262 	PREFIX_VEX_0F3A05,
1263 	PREFIX_VEX_0F3A06,
1264 	PREFIX_VEX_0F3A08,
1265 	PREFIX_VEX_0F3A09,
1266 	PREFIX_VEX_0F3A0A,
1267 	PREFIX_VEX_0F3A0B,
1268 	PREFIX_VEX_0F3A0C,
1269 	PREFIX_VEX_0F3A0D,
1270 	PREFIX_VEX_0F3A0E,
1271 	PREFIX_VEX_0F3A0F,
1272 	PREFIX_VEX_0F3A14,
1273 	PREFIX_VEX_0F3A15,
1274 	PREFIX_VEX_0F3A16,
1275 	PREFIX_VEX_0F3A17,
1276 	PREFIX_VEX_0F3A18,
1277 	PREFIX_VEX_0F3A19,
1278 	PREFIX_VEX_0F3A1D,
1279 	PREFIX_VEX_0F3A20,
1280 	PREFIX_VEX_0F3A21,
1281 	PREFIX_VEX_0F3A22,
1282 	PREFIX_VEX_0F3A30,
1283 	PREFIX_VEX_0F3A31,
1284 	PREFIX_VEX_0F3A32,
1285 	PREFIX_VEX_0F3A33,
1286 	PREFIX_VEX_0F3A38,
1287 	PREFIX_VEX_0F3A39,
1288 	PREFIX_VEX_0F3A40,
1289 	PREFIX_VEX_0F3A41,
1290 	PREFIX_VEX_0F3A42,
1291 	PREFIX_VEX_0F3A44,
1292 	PREFIX_VEX_0F3A46,
1293 	PREFIX_VEX_0F3A48,
1294 	PREFIX_VEX_0F3A49,
1295 	PREFIX_VEX_0F3A4A,
1296 	PREFIX_VEX_0F3A4B,
1297 	PREFIX_VEX_0F3A4C,
1298 	PREFIX_VEX_0F3A5C,
1299 	PREFIX_VEX_0F3A5D,
1300 	PREFIX_VEX_0F3A5E,
1301 	PREFIX_VEX_0F3A5F,
1302 	PREFIX_VEX_0F3A60,
1303 	PREFIX_VEX_0F3A61,
1304 	PREFIX_VEX_0F3A62,
1305 	PREFIX_VEX_0F3A63,
1306 	PREFIX_VEX_0F3A68,
1307 	PREFIX_VEX_0F3A69,
1308 	PREFIX_VEX_0F3A6A,
1309 	PREFIX_VEX_0F3A6B,
1310 	PREFIX_VEX_0F3A6C,
1311 	PREFIX_VEX_0F3A6D,
1312 	PREFIX_VEX_0F3A6E,
1313 	PREFIX_VEX_0F3A6F,
1314 	PREFIX_VEX_0F3A78,
1315 	PREFIX_VEX_0F3A79,
1316 	PREFIX_VEX_0F3A7A,
1317 	PREFIX_VEX_0F3A7B,
1318 	PREFIX_VEX_0F3A7C,
1319 	PREFIX_VEX_0F3A7D,
1320 	PREFIX_VEX_0F3A7E,
1321 	PREFIX_VEX_0F3A7F,
1322 	PREFIX_VEX_0F3ADF,
1323 	PREFIX_VEX_0F3AF0,
1324 
1325 	PREFIX_EVEX_0F10,
1326 	PREFIX_EVEX_0F11,
1327 	PREFIX_EVEX_0F12,
1328 	PREFIX_EVEX_0F13,
1329 	PREFIX_EVEX_0F14,
1330 	PREFIX_EVEX_0F15,
1331 	PREFIX_EVEX_0F16,
1332 	PREFIX_EVEX_0F17,
1333 	PREFIX_EVEX_0F28,
1334 	PREFIX_EVEX_0F29,
1335 	PREFIX_EVEX_0F2A,
1336 	PREFIX_EVEX_0F2B,
1337 	PREFIX_EVEX_0F2C,
1338 	PREFIX_EVEX_0F2D,
1339 	PREFIX_EVEX_0F2E,
1340 	PREFIX_EVEX_0F2F,
1341 	PREFIX_EVEX_0F51,
1342 	PREFIX_EVEX_0F54,
1343 	PREFIX_EVEX_0F55,
1344 	PREFIX_EVEX_0F56,
1345 	PREFIX_EVEX_0F57,
1346 	PREFIX_EVEX_0F58,
1347 	PREFIX_EVEX_0F59,
1348 	PREFIX_EVEX_0F5A,
1349 	PREFIX_EVEX_0F5B,
1350 	PREFIX_EVEX_0F5C,
1351 	PREFIX_EVEX_0F5D,
1352 	PREFIX_EVEX_0F5E,
1353 	PREFIX_EVEX_0F5F,
1354 	PREFIX_EVEX_0F60,
1355 	PREFIX_EVEX_0F61,
1356 	PREFIX_EVEX_0F62,
1357 	PREFIX_EVEX_0F63,
1358 	PREFIX_EVEX_0F64,
1359 	PREFIX_EVEX_0F65,
1360 	PREFIX_EVEX_0F66,
1361 	PREFIX_EVEX_0F67,
1362 	PREFIX_EVEX_0F68,
1363 	PREFIX_EVEX_0F69,
1364 	PREFIX_EVEX_0F6A,
1365 	PREFIX_EVEX_0F6B,
1366 	PREFIX_EVEX_0F6C,
1367 	PREFIX_EVEX_0F6D,
1368 	PREFIX_EVEX_0F6E,
1369 	PREFIX_EVEX_0F6F,
1370 	PREFIX_EVEX_0F70,
1371 	PREFIX_EVEX_0F71_REG_2,
1372 	PREFIX_EVEX_0F71_REG_4,
1373 	PREFIX_EVEX_0F71_REG_6,
1374 	PREFIX_EVEX_0F72_REG_0,
1375 	PREFIX_EVEX_0F72_REG_1,
1376 	PREFIX_EVEX_0F72_REG_2,
1377 	PREFIX_EVEX_0F72_REG_4,
1378 	PREFIX_EVEX_0F72_REG_6,
1379 	PREFIX_EVEX_0F73_REG_2,
1380 	PREFIX_EVEX_0F73_REG_3,
1381 	PREFIX_EVEX_0F73_REG_6,
1382 	PREFIX_EVEX_0F73_REG_7,
1383 	PREFIX_EVEX_0F74,
1384 	PREFIX_EVEX_0F75,
1385 	PREFIX_EVEX_0F76,
1386 	PREFIX_EVEX_0F78,
1387 	PREFIX_EVEX_0F79,
1388 	PREFIX_EVEX_0F7A,
1389 	PREFIX_EVEX_0F7B,
1390 	PREFIX_EVEX_0F7E,
1391 	PREFIX_EVEX_0F7F,
1392 	PREFIX_EVEX_0FC2,
1393 	PREFIX_EVEX_0FC4,
1394 	PREFIX_EVEX_0FC5,
1395 	PREFIX_EVEX_0FC6,
1396 	PREFIX_EVEX_0FD1,
1397 	PREFIX_EVEX_0FD2,
1398 	PREFIX_EVEX_0FD3,
1399 	PREFIX_EVEX_0FD4,
1400 	PREFIX_EVEX_0FD5,
1401 	PREFIX_EVEX_0FD6,
1402 	PREFIX_EVEX_0FD8,
1403 	PREFIX_EVEX_0FD9,
1404 	PREFIX_EVEX_0FDA,
1405 	PREFIX_EVEX_0FDB,
1406 	PREFIX_EVEX_0FDC,
1407 	PREFIX_EVEX_0FDD,
1408 	PREFIX_EVEX_0FDE,
1409 	PREFIX_EVEX_0FDF,
1410 	PREFIX_EVEX_0FE0,
1411 	PREFIX_EVEX_0FE1,
1412 	PREFIX_EVEX_0FE2,
1413 	PREFIX_EVEX_0FE3,
1414 	PREFIX_EVEX_0FE4,
1415 	PREFIX_EVEX_0FE5,
1416 	PREFIX_EVEX_0FE6,
1417 	PREFIX_EVEX_0FE7,
1418 	PREFIX_EVEX_0FE8,
1419 	PREFIX_EVEX_0FE9,
1420 	PREFIX_EVEX_0FEA,
1421 	PREFIX_EVEX_0FEB,
1422 	PREFIX_EVEX_0FEC,
1423 	PREFIX_EVEX_0FED,
1424 	PREFIX_EVEX_0FEE,
1425 	PREFIX_EVEX_0FEF,
1426 	PREFIX_EVEX_0FF1,
1427 	PREFIX_EVEX_0FF2,
1428 	PREFIX_EVEX_0FF3,
1429 	PREFIX_EVEX_0FF4,
1430 	PREFIX_EVEX_0FF5,
1431 	PREFIX_EVEX_0FF6,
1432 	PREFIX_EVEX_0FF8,
1433 	PREFIX_EVEX_0FF9,
1434 	PREFIX_EVEX_0FFA,
1435 	PREFIX_EVEX_0FFB,
1436 	PREFIX_EVEX_0FFC,
1437 	PREFIX_EVEX_0FFD,
1438 	PREFIX_EVEX_0FFE,
1439 	PREFIX_EVEX_0F3800,
1440 	PREFIX_EVEX_0F3804,
1441 	PREFIX_EVEX_0F380B,
1442 	PREFIX_EVEX_0F380C,
1443 	PREFIX_EVEX_0F380D,
1444 	PREFIX_EVEX_0F3810,
1445 	PREFIX_EVEX_0F3811,
1446 	PREFIX_EVEX_0F3812,
1447 	PREFIX_EVEX_0F3813,
1448 	PREFIX_EVEX_0F3814,
1449 	PREFIX_EVEX_0F3815,
1450 	PREFIX_EVEX_0F3816,
1451 	PREFIX_EVEX_0F3818,
1452 	PREFIX_EVEX_0F3819,
1453 	PREFIX_EVEX_0F381A,
1454 	PREFIX_EVEX_0F381B,
1455 	PREFIX_EVEX_0F381C,
1456 	PREFIX_EVEX_0F381D,
1457 	PREFIX_EVEX_0F381E,
1458 	PREFIX_EVEX_0F381F,
1459 	PREFIX_EVEX_0F3820,
1460 	PREFIX_EVEX_0F3821,
1461 	PREFIX_EVEX_0F3822,
1462 	PREFIX_EVEX_0F3823,
1463 	PREFIX_EVEX_0F3824,
1464 	PREFIX_EVEX_0F3825,
1465 	PREFIX_EVEX_0F3826,
1466 	PREFIX_EVEX_0F3827,
1467 	PREFIX_EVEX_0F3828,
1468 	PREFIX_EVEX_0F3829,
1469 	PREFIX_EVEX_0F382A,
1470 	PREFIX_EVEX_0F382B,
1471 	PREFIX_EVEX_0F382C,
1472 	PREFIX_EVEX_0F382D,
1473 	PREFIX_EVEX_0F3830,
1474 	PREFIX_EVEX_0F3831,
1475 	PREFIX_EVEX_0F3832,
1476 	PREFIX_EVEX_0F3833,
1477 	PREFIX_EVEX_0F3834,
1478 	PREFIX_EVEX_0F3835,
1479 	PREFIX_EVEX_0F3836,
1480 	PREFIX_EVEX_0F3837,
1481 	PREFIX_EVEX_0F3838,
1482 	PREFIX_EVEX_0F3839,
1483 	PREFIX_EVEX_0F383A,
1484 	PREFIX_EVEX_0F383B,
1485 	PREFIX_EVEX_0F383C,
1486 	PREFIX_EVEX_0F383D,
1487 	PREFIX_EVEX_0F383E,
1488 	PREFIX_EVEX_0F383F,
1489 	PREFIX_EVEX_0F3840,
1490 	PREFIX_EVEX_0F3842,
1491 	PREFIX_EVEX_0F3843,
1492 	PREFIX_EVEX_0F3844,
1493 	PREFIX_EVEX_0F3845,
1494 	PREFIX_EVEX_0F3846,
1495 	PREFIX_EVEX_0F3847,
1496 	PREFIX_EVEX_0F384C,
1497 	PREFIX_EVEX_0F384D,
1498 	PREFIX_EVEX_0F384E,
1499 	PREFIX_EVEX_0F384F,
1500 	PREFIX_EVEX_0F3852,
1501 	PREFIX_EVEX_0F3853,
1502 	PREFIX_EVEX_0F3855,
1503 	PREFIX_EVEX_0F3858,
1504 	PREFIX_EVEX_0F3859,
1505 	PREFIX_EVEX_0F385A,
1506 	PREFIX_EVEX_0F385B,
1507 	PREFIX_EVEX_0F3864,
1508 	PREFIX_EVEX_0F3865,
1509 	PREFIX_EVEX_0F3866,
1510 	PREFIX_EVEX_0F3875,
1511 	PREFIX_EVEX_0F3876,
1512 	PREFIX_EVEX_0F3877,
1513 	PREFIX_EVEX_0F3878,
1514 	PREFIX_EVEX_0F3879,
1515 	PREFIX_EVEX_0F387A,
1516 	PREFIX_EVEX_0F387B,
1517 	PREFIX_EVEX_0F387C,
1518 	PREFIX_EVEX_0F387D,
1519 	PREFIX_EVEX_0F387E,
1520 	PREFIX_EVEX_0F387F,
1521 	PREFIX_EVEX_0F3883,
1522 	PREFIX_EVEX_0F3888,
1523 	PREFIX_EVEX_0F3889,
1524 	PREFIX_EVEX_0F388A,
1525 	PREFIX_EVEX_0F388B,
1526 	PREFIX_EVEX_0F388D,
1527 	PREFIX_EVEX_0F3890,
1528 	PREFIX_EVEX_0F3891,
1529 	PREFIX_EVEX_0F3892,
1530 	PREFIX_EVEX_0F3893,
1531 	PREFIX_EVEX_0F3896,
1532 	PREFIX_EVEX_0F3897,
1533 	PREFIX_EVEX_0F3898,
1534 	PREFIX_EVEX_0F3899,
1535 	PREFIX_EVEX_0F389A,
1536 	PREFIX_EVEX_0F389B,
1537 	PREFIX_EVEX_0F389C,
1538 	PREFIX_EVEX_0F389D,
1539 	PREFIX_EVEX_0F389E,
1540 	PREFIX_EVEX_0F389F,
1541 	PREFIX_EVEX_0F38A0,
1542 	PREFIX_EVEX_0F38A1,
1543 	PREFIX_EVEX_0F38A2,
1544 	PREFIX_EVEX_0F38A3,
1545 	PREFIX_EVEX_0F38A6,
1546 	PREFIX_EVEX_0F38A7,
1547 	PREFIX_EVEX_0F38A8,
1548 	PREFIX_EVEX_0F38A9,
1549 	PREFIX_EVEX_0F38AA,
1550 	PREFIX_EVEX_0F38AB,
1551 	PREFIX_EVEX_0F38AC,
1552 	PREFIX_EVEX_0F38AD,
1553 	PREFIX_EVEX_0F38AE,
1554 	PREFIX_EVEX_0F38AF,
1555 	PREFIX_EVEX_0F38B4,
1556 	PREFIX_EVEX_0F38B5,
1557 	PREFIX_EVEX_0F38B6,
1558 	PREFIX_EVEX_0F38B7,
1559 	PREFIX_EVEX_0F38B8,
1560 	PREFIX_EVEX_0F38B9,
1561 	PREFIX_EVEX_0F38BA,
1562 	PREFIX_EVEX_0F38BB,
1563 	PREFIX_EVEX_0F38BC,
1564 	PREFIX_EVEX_0F38BD,
1565 	PREFIX_EVEX_0F38BE,
1566 	PREFIX_EVEX_0F38BF,
1567 	PREFIX_EVEX_0F38C4,
1568 	PREFIX_EVEX_0F38C6_REG_1,
1569 	PREFIX_EVEX_0F38C6_REG_2,
1570 	PREFIX_EVEX_0F38C6_REG_5,
1571 	PREFIX_EVEX_0F38C6_REG_6,
1572 	PREFIX_EVEX_0F38C7_REG_1,
1573 	PREFIX_EVEX_0F38C7_REG_2,
1574 	PREFIX_EVEX_0F38C7_REG_5,
1575 	PREFIX_EVEX_0F38C7_REG_6,
1576 	PREFIX_EVEX_0F38C8,
1577 	PREFIX_EVEX_0F38CA,
1578 	PREFIX_EVEX_0F38CB,
1579 	PREFIX_EVEX_0F38CC,
1580 	PREFIX_EVEX_0F38CD,
1581 
1582 	PREFIX_EVEX_0F3A00,
1583 	PREFIX_EVEX_0F3A01,
1584 	PREFIX_EVEX_0F3A03,
1585 	PREFIX_EVEX_0F3A04,
1586 	PREFIX_EVEX_0F3A05,
1587 	PREFIX_EVEX_0F3A08,
1588 	PREFIX_EVEX_0F3A09,
1589 	PREFIX_EVEX_0F3A0A,
1590 	PREFIX_EVEX_0F3A0B,
1591 	PREFIX_EVEX_0F3A0F,
1592 	PREFIX_EVEX_0F3A14,
1593 	PREFIX_EVEX_0F3A15,
1594 	PREFIX_EVEX_0F3A16,
1595 	PREFIX_EVEX_0F3A17,
1596 	PREFIX_EVEX_0F3A18,
1597 	PREFIX_EVEX_0F3A19,
1598 	PREFIX_EVEX_0F3A1A,
1599 	PREFIX_EVEX_0F3A1B,
1600 	PREFIX_EVEX_0F3A1D,
1601 	PREFIX_EVEX_0F3A1E,
1602 	PREFIX_EVEX_0F3A1F,
1603 	PREFIX_EVEX_0F3A20,
1604 	PREFIX_EVEX_0F3A21,
1605 	PREFIX_EVEX_0F3A22,
1606 	PREFIX_EVEX_0F3A23,
1607 	PREFIX_EVEX_0F3A25,
1608 	PREFIX_EVEX_0F3A26,
1609 	PREFIX_EVEX_0F3A27,
1610 	PREFIX_EVEX_0F3A38,
1611 	PREFIX_EVEX_0F3A39,
1612 	PREFIX_EVEX_0F3A3A,
1613 	PREFIX_EVEX_0F3A3B,
1614 	PREFIX_EVEX_0F3A3E,
1615 	PREFIX_EVEX_0F3A3F,
1616 	PREFIX_EVEX_0F3A42,
1617 	PREFIX_EVEX_0F3A43,
1618 	PREFIX_EVEX_0F3A50,
1619 	PREFIX_EVEX_0F3A51,
1620 	PREFIX_EVEX_0F3A54,
1621 	PREFIX_EVEX_0F3A55,
1622 	PREFIX_EVEX_0F3A56,
1623 	PREFIX_EVEX_0F3A57,
1624 	PREFIX_EVEX_0F3A66,
1625 	PREFIX_EVEX_0F3A67
1626 };
1627 
1628 enum
1629 {
1630 	X86_64_06 = 0,
1631 	X86_64_07,
1632 	X86_64_0D,
1633 	X86_64_16,
1634 	X86_64_17,
1635 	X86_64_1E,
1636 	X86_64_1F,
1637 	X86_64_27,
1638 	X86_64_2F,
1639 	X86_64_37,
1640 	X86_64_3F,
1641 	X86_64_60,
1642 	X86_64_61,
1643 	X86_64_62,
1644 	X86_64_63,
1645 	X86_64_6D,
1646 	X86_64_6F,
1647 	X86_64_82,
1648 	X86_64_9A,
1649 	X86_64_C4,
1650 	X86_64_C5,
1651 	X86_64_CE,
1652 	X86_64_D4,
1653 	X86_64_D5,
1654 	X86_64_E8,
1655 	X86_64_E9,
1656 	X86_64_EA,
1657 	X86_64_0F01_REG_0,
1658 	X86_64_0F01_REG_1,
1659 	X86_64_0F01_REG_2,
1660 	X86_64_0F01_REG_3
1661 };
1662 
1663 enum
1664 {
1665 	THREE_BYTE_0F38 = 0,
1666 	THREE_BYTE_0F3A
1667 };
1668 
1669 enum
1670 {
1671 	XOP_08 = 0,
1672 	XOP_09,
1673 	XOP_0A
1674 };
1675 
1676 enum
1677 {
1678 	VEX_0F = 0,
1679 	VEX_0F38,
1680 	VEX_0F3A
1681 };
1682 
1683 enum
1684 {
1685 	EVEX_0F = 0,
1686 	EVEX_0F38,
1687 	EVEX_0F3A
1688 };
1689 
1690 enum
1691 {
1692 	VEX_LEN_0F10_P_1 = 0,
1693 	VEX_LEN_0F10_P_3,
1694 	VEX_LEN_0F11_P_1,
1695 	VEX_LEN_0F11_P_3,
1696 	VEX_LEN_0F12_P_0_M_0,
1697 	VEX_LEN_0F12_P_0_M_1,
1698 	VEX_LEN_0F12_P_2,
1699 	VEX_LEN_0F13_M_0,
1700 	VEX_LEN_0F16_P_0_M_0,
1701 	VEX_LEN_0F16_P_0_M_1,
1702 	VEX_LEN_0F16_P_2,
1703 	VEX_LEN_0F17_M_0,
1704 	VEX_LEN_0F2A_P_1,
1705 	VEX_LEN_0F2A_P_3,
1706 	VEX_LEN_0F2C_P_1,
1707 	VEX_LEN_0F2C_P_3,
1708 	VEX_LEN_0F2D_P_1,
1709 	VEX_LEN_0F2D_P_3,
1710 	VEX_LEN_0F2E_P_0,
1711 	VEX_LEN_0F2E_P_2,
1712 	VEX_LEN_0F2F_P_0,
1713 	VEX_LEN_0F2F_P_2,
1714 	VEX_LEN_0F41_P_0,
1715 	VEX_LEN_0F41_P_2,
1716 	VEX_LEN_0F42_P_0,
1717 	VEX_LEN_0F42_P_2,
1718 	VEX_LEN_0F44_P_0,
1719 	VEX_LEN_0F44_P_2,
1720 	VEX_LEN_0F45_P_0,
1721 	VEX_LEN_0F45_P_2,
1722 	VEX_LEN_0F46_P_0,
1723 	VEX_LEN_0F46_P_2,
1724 	VEX_LEN_0F47_P_0,
1725 	VEX_LEN_0F47_P_2,
1726 	VEX_LEN_0F4A_P_0,
1727 	VEX_LEN_0F4A_P_2,
1728 	VEX_LEN_0F4B_P_0,
1729 	VEX_LEN_0F4B_P_2,
1730 	VEX_LEN_0F51_P_1,
1731 	VEX_LEN_0F51_P_3,
1732 	VEX_LEN_0F52_P_1,
1733 	VEX_LEN_0F53_P_1,
1734 	VEX_LEN_0F58_P_1,
1735 	VEX_LEN_0F58_P_3,
1736 	VEX_LEN_0F59_P_1,
1737 	VEX_LEN_0F59_P_3,
1738 	VEX_LEN_0F5A_P_1,
1739 	VEX_LEN_0F5A_P_3,
1740 	VEX_LEN_0F5C_P_1,
1741 	VEX_LEN_0F5C_P_3,
1742 	VEX_LEN_0F5D_P_1,
1743 	VEX_LEN_0F5D_P_3,
1744 	VEX_LEN_0F5E_P_1,
1745 	VEX_LEN_0F5E_P_3,
1746 	VEX_LEN_0F5F_P_1,
1747 	VEX_LEN_0F5F_P_3,
1748 	VEX_LEN_0F6E_P_2,
1749 	VEX_LEN_0F7E_P_1,
1750 	VEX_LEN_0F7E_P_2,
1751 	VEX_LEN_0F90_P_0,
1752 	VEX_LEN_0F90_P_2,
1753 	VEX_LEN_0F91_P_0,
1754 	VEX_LEN_0F91_P_2,
1755 	VEX_LEN_0F92_P_0,
1756 	VEX_LEN_0F92_P_2,
1757 	VEX_LEN_0F92_P_3,
1758 	VEX_LEN_0F93_P_0,
1759 	VEX_LEN_0F93_P_2,
1760 	VEX_LEN_0F93_P_3,
1761 	VEX_LEN_0F98_P_0,
1762 	VEX_LEN_0F98_P_2,
1763 	VEX_LEN_0F99_P_0,
1764 	VEX_LEN_0F99_P_2,
1765 	VEX_LEN_0FAE_R_2_M_0,
1766 	VEX_LEN_0FAE_R_3_M_0,
1767 	VEX_LEN_0FC2_P_1,
1768 	VEX_LEN_0FC2_P_3,
1769 	VEX_LEN_0FC4_P_2,
1770 	VEX_LEN_0FC5_P_2,
1771 	VEX_LEN_0FD6_P_2,
1772 	VEX_LEN_0FF7_P_2,
1773 	VEX_LEN_0F3816_P_2,
1774 	VEX_LEN_0F3819_P_2,
1775 	VEX_LEN_0F381A_P_2_M_0,
1776 	VEX_LEN_0F3836_P_2,
1777 	VEX_LEN_0F3841_P_2,
1778 	VEX_LEN_0F385A_P_2_M_0,
1779 	VEX_LEN_0F38DB_P_2,
1780 	VEX_LEN_0F38DC_P_2,
1781 	VEX_LEN_0F38DD_P_2,
1782 	VEX_LEN_0F38DE_P_2,
1783 	VEX_LEN_0F38DF_P_2,
1784 	VEX_LEN_0F38F2_P_0,
1785 	VEX_LEN_0F38F3_R_1_P_0,
1786 	VEX_LEN_0F38F3_R_2_P_0,
1787 	VEX_LEN_0F38F3_R_3_P_0,
1788 	VEX_LEN_0F38F5_P_0,
1789 	VEX_LEN_0F38F5_P_1,
1790 	VEX_LEN_0F38F5_P_3,
1791 	VEX_LEN_0F38F6_P_3,
1792 	VEX_LEN_0F38F7_P_0,
1793 	VEX_LEN_0F38F7_P_1,
1794 	VEX_LEN_0F38F7_P_2,
1795 	VEX_LEN_0F38F7_P_3,
1796 	VEX_LEN_0F3A00_P_2,
1797 	VEX_LEN_0F3A01_P_2,
1798 	VEX_LEN_0F3A06_P_2,
1799 	VEX_LEN_0F3A0A_P_2,
1800 	VEX_LEN_0F3A0B_P_2,
1801 	VEX_LEN_0F3A14_P_2,
1802 	VEX_LEN_0F3A15_P_2,
1803 	VEX_LEN_0F3A16_P_2,
1804 	VEX_LEN_0F3A17_P_2,
1805 	VEX_LEN_0F3A18_P_2,
1806 	VEX_LEN_0F3A19_P_2,
1807 	VEX_LEN_0F3A20_P_2,
1808 	VEX_LEN_0F3A21_P_2,
1809 	VEX_LEN_0F3A22_P_2,
1810 	VEX_LEN_0F3A30_P_2,
1811 	VEX_LEN_0F3A31_P_2,
1812 	VEX_LEN_0F3A32_P_2,
1813 	VEX_LEN_0F3A33_P_2,
1814 	VEX_LEN_0F3A38_P_2,
1815 	VEX_LEN_0F3A39_P_2,
1816 	VEX_LEN_0F3A41_P_2,
1817 	VEX_LEN_0F3A44_P_2,
1818 	VEX_LEN_0F3A46_P_2,
1819 	VEX_LEN_0F3A60_P_2,
1820 	VEX_LEN_0F3A61_P_2,
1821 	VEX_LEN_0F3A62_P_2,
1822 	VEX_LEN_0F3A63_P_2,
1823 	VEX_LEN_0F3A6A_P_2,
1824 	VEX_LEN_0F3A6B_P_2,
1825 	VEX_LEN_0F3A6E_P_2,
1826 	VEX_LEN_0F3A6F_P_2,
1827 	VEX_LEN_0F3A7A_P_2,
1828 	VEX_LEN_0F3A7B_P_2,
1829 	VEX_LEN_0F3A7E_P_2,
1830 	VEX_LEN_0F3A7F_P_2,
1831 	VEX_LEN_0F3ADF_P_2,
1832 	VEX_LEN_0F3AF0_P_3,
1833 	VEX_LEN_0FXOP_08_CC,
1834 	VEX_LEN_0FXOP_08_CD,
1835 	VEX_LEN_0FXOP_08_CE,
1836 	VEX_LEN_0FXOP_08_CF,
1837 	VEX_LEN_0FXOP_08_EC,
1838 	VEX_LEN_0FXOP_08_ED,
1839 	VEX_LEN_0FXOP_08_EE,
1840 	VEX_LEN_0FXOP_08_EF,
1841 	VEX_LEN_0FXOP_09_80,
1842 	VEX_LEN_0FXOP_09_81
1843 };
1844 
1845 enum
1846 {
1847 	VEX_W_0F10_P_0 = 0,
1848 	VEX_W_0F10_P_1,
1849 	VEX_W_0F10_P_2,
1850 	VEX_W_0F10_P_3,
1851 	VEX_W_0F11_P_0,
1852 	VEX_W_0F11_P_1,
1853 	VEX_W_0F11_P_2,
1854 	VEX_W_0F11_P_3,
1855 	VEX_W_0F12_P_0_M_0,
1856 	VEX_W_0F12_P_0_M_1,
1857 	VEX_W_0F12_P_1,
1858 	VEX_W_0F12_P_2,
1859 	VEX_W_0F12_P_3,
1860 	VEX_W_0F13_M_0,
1861 	VEX_W_0F14,
1862 	VEX_W_0F15,
1863 	VEX_W_0F16_P_0_M_0,
1864 	VEX_W_0F16_P_0_M_1,
1865 	VEX_W_0F16_P_1,
1866 	VEX_W_0F16_P_2,
1867 	VEX_W_0F17_M_0,
1868 	VEX_W_0F28,
1869 	VEX_W_0F29,
1870 	VEX_W_0F2B_M_0,
1871 	VEX_W_0F2E_P_0,
1872 	VEX_W_0F2E_P_2,
1873 	VEX_W_0F2F_P_0,
1874 	VEX_W_0F2F_P_2,
1875 	VEX_W_0F41_P_0_LEN_1,
1876 	VEX_W_0F41_P_2_LEN_1,
1877 	VEX_W_0F42_P_0_LEN_1,
1878 	VEX_W_0F42_P_2_LEN_1,
1879 	VEX_W_0F44_P_0_LEN_0,
1880 	VEX_W_0F44_P_2_LEN_0,
1881 	VEX_W_0F45_P_0_LEN_1,
1882 	VEX_W_0F45_P_2_LEN_1,
1883 	VEX_W_0F46_P_0_LEN_1,
1884 	VEX_W_0F46_P_2_LEN_1,
1885 	VEX_W_0F47_P_0_LEN_1,
1886 	VEX_W_0F47_P_2_LEN_1,
1887 	VEX_W_0F4A_P_0_LEN_1,
1888 	VEX_W_0F4A_P_2_LEN_1,
1889 	VEX_W_0F4B_P_0_LEN_1,
1890 	VEX_W_0F4B_P_2_LEN_1,
1891 	VEX_W_0F50_M_0,
1892 	VEX_W_0F51_P_0,
1893 	VEX_W_0F51_P_1,
1894 	VEX_W_0F51_P_2,
1895 	VEX_W_0F51_P_3,
1896 	VEX_W_0F52_P_0,
1897 	VEX_W_0F52_P_1,
1898 	VEX_W_0F53_P_0,
1899 	VEX_W_0F53_P_1,
1900 	VEX_W_0F58_P_0,
1901 	VEX_W_0F58_P_1,
1902 	VEX_W_0F58_P_2,
1903 	VEX_W_0F58_P_3,
1904 	VEX_W_0F59_P_0,
1905 	VEX_W_0F59_P_1,
1906 	VEX_W_0F59_P_2,
1907 	VEX_W_0F59_P_3,
1908 	VEX_W_0F5A_P_0,
1909 	VEX_W_0F5A_P_1,
1910 	VEX_W_0F5A_P_3,
1911 	VEX_W_0F5B_P_0,
1912 	VEX_W_0F5B_P_1,
1913 	VEX_W_0F5B_P_2,
1914 	VEX_W_0F5C_P_0,
1915 	VEX_W_0F5C_P_1,
1916 	VEX_W_0F5C_P_2,
1917 	VEX_W_0F5C_P_3,
1918 	VEX_W_0F5D_P_0,
1919 	VEX_W_0F5D_P_1,
1920 	VEX_W_0F5D_P_2,
1921 	VEX_W_0F5D_P_3,
1922 	VEX_W_0F5E_P_0,
1923 	VEX_W_0F5E_P_1,
1924 	VEX_W_0F5E_P_2,
1925 	VEX_W_0F5E_P_3,
1926 	VEX_W_0F5F_P_0,
1927 	VEX_W_0F5F_P_1,
1928 	VEX_W_0F5F_P_2,
1929 	VEX_W_0F5F_P_3,
1930 	VEX_W_0F60_P_2,
1931 	VEX_W_0F61_P_2,
1932 	VEX_W_0F62_P_2,
1933 	VEX_W_0F63_P_2,
1934 	VEX_W_0F64_P_2,
1935 	VEX_W_0F65_P_2,
1936 	VEX_W_0F66_P_2,
1937 	VEX_W_0F67_P_2,
1938 	VEX_W_0F68_P_2,
1939 	VEX_W_0F69_P_2,
1940 	VEX_W_0F6A_P_2,
1941 	VEX_W_0F6B_P_2,
1942 	VEX_W_0F6C_P_2,
1943 	VEX_W_0F6D_P_2,
1944 	VEX_W_0F6F_P_1,
1945 	VEX_W_0F6F_P_2,
1946 	VEX_W_0F70_P_1,
1947 	VEX_W_0F70_P_2,
1948 	VEX_W_0F70_P_3,
1949 	VEX_W_0F71_R_2_P_2,
1950 	VEX_W_0F71_R_4_P_2,
1951 	VEX_W_0F71_R_6_P_2,
1952 	VEX_W_0F72_R_2_P_2,
1953 	VEX_W_0F72_R_4_P_2,
1954 	VEX_W_0F72_R_6_P_2,
1955 	VEX_W_0F73_R_2_P_2,
1956 	VEX_W_0F73_R_3_P_2,
1957 	VEX_W_0F73_R_6_P_2,
1958 	VEX_W_0F73_R_7_P_2,
1959 	VEX_W_0F74_P_2,
1960 	VEX_W_0F75_P_2,
1961 	VEX_W_0F76_P_2,
1962 	VEX_W_0F77_P_0,
1963 	VEX_W_0F7C_P_2,
1964 	VEX_W_0F7C_P_3,
1965 	VEX_W_0F7D_P_2,
1966 	VEX_W_0F7D_P_3,
1967 	VEX_W_0F7E_P_1,
1968 	VEX_W_0F7F_P_1,
1969 	VEX_W_0F7F_P_2,
1970 	VEX_W_0F90_P_0_LEN_0,
1971 	VEX_W_0F90_P_2_LEN_0,
1972 	VEX_W_0F91_P_0_LEN_0,
1973 	VEX_W_0F91_P_2_LEN_0,
1974 	VEX_W_0F92_P_0_LEN_0,
1975 	VEX_W_0F92_P_2_LEN_0,
1976 	VEX_W_0F92_P_3_LEN_0,
1977 	VEX_W_0F93_P_0_LEN_0,
1978 	VEX_W_0F93_P_2_LEN_0,
1979 	VEX_W_0F93_P_3_LEN_0,
1980 	VEX_W_0F98_P_0_LEN_0,
1981 	VEX_W_0F98_P_2_LEN_0,
1982 	VEX_W_0F99_P_0_LEN_0,
1983 	VEX_W_0F99_P_2_LEN_0,
1984 	VEX_W_0FAE_R_2_M_0,
1985 	VEX_W_0FAE_R_3_M_0,
1986 	VEX_W_0FC2_P_0,
1987 	VEX_W_0FC2_P_1,
1988 	VEX_W_0FC2_P_2,
1989 	VEX_W_0FC2_P_3,
1990 	VEX_W_0FC4_P_2,
1991 	VEX_W_0FC5_P_2,
1992 	VEX_W_0FD0_P_2,
1993 	VEX_W_0FD0_P_3,
1994 	VEX_W_0FD1_P_2,
1995 	VEX_W_0FD2_P_2,
1996 	VEX_W_0FD3_P_2,
1997 	VEX_W_0FD4_P_2,
1998 	VEX_W_0FD5_P_2,
1999 	VEX_W_0FD6_P_2,
2000 	VEX_W_0FD7_P_2_M_1,
2001 	VEX_W_0FD8_P_2,
2002 	VEX_W_0FD9_P_2,
2003 	VEX_W_0FDA_P_2,
2004 	VEX_W_0FDB_P_2,
2005 	VEX_W_0FDC_P_2,
2006 	VEX_W_0FDD_P_2,
2007 	VEX_W_0FDE_P_2,
2008 	VEX_W_0FDF_P_2,
2009 	VEX_W_0FE0_P_2,
2010 	VEX_W_0FE1_P_2,
2011 	VEX_W_0FE2_P_2,
2012 	VEX_W_0FE3_P_2,
2013 	VEX_W_0FE4_P_2,
2014 	VEX_W_0FE5_P_2,
2015 	VEX_W_0FE6_P_1,
2016 	VEX_W_0FE6_P_2,
2017 	VEX_W_0FE6_P_3,
2018 	VEX_W_0FE7_P_2_M_0,
2019 	VEX_W_0FE8_P_2,
2020 	VEX_W_0FE9_P_2,
2021 	VEX_W_0FEA_P_2,
2022 	VEX_W_0FEB_P_2,
2023 	VEX_W_0FEC_P_2,
2024 	VEX_W_0FED_P_2,
2025 	VEX_W_0FEE_P_2,
2026 	VEX_W_0FEF_P_2,
2027 	VEX_W_0FF0_P_3_M_0,
2028 	VEX_W_0FF1_P_2,
2029 	VEX_W_0FF2_P_2,
2030 	VEX_W_0FF3_P_2,
2031 	VEX_W_0FF4_P_2,
2032 	VEX_W_0FF5_P_2,
2033 	VEX_W_0FF6_P_2,
2034 	VEX_W_0FF7_P_2,
2035 	VEX_W_0FF8_P_2,
2036 	VEX_W_0FF9_P_2,
2037 	VEX_W_0FFA_P_2,
2038 	VEX_W_0FFB_P_2,
2039 	VEX_W_0FFC_P_2,
2040 	VEX_W_0FFD_P_2,
2041 	VEX_W_0FFE_P_2,
2042 	VEX_W_0F3800_P_2,
2043 	VEX_W_0F3801_P_2,
2044 	VEX_W_0F3802_P_2,
2045 	VEX_W_0F3803_P_2,
2046 	VEX_W_0F3804_P_2,
2047 	VEX_W_0F3805_P_2,
2048 	VEX_W_0F3806_P_2,
2049 	VEX_W_0F3807_P_2,
2050 	VEX_W_0F3808_P_2,
2051 	VEX_W_0F3809_P_2,
2052 	VEX_W_0F380A_P_2,
2053 	VEX_W_0F380B_P_2,
2054 	VEX_W_0F380C_P_2,
2055 	VEX_W_0F380D_P_2,
2056 	VEX_W_0F380E_P_2,
2057 	VEX_W_0F380F_P_2,
2058 	VEX_W_0F3816_P_2,
2059 	VEX_W_0F3817_P_2,
2060 	VEX_W_0F3818_P_2,
2061 	VEX_W_0F3819_P_2,
2062 	VEX_W_0F381A_P_2_M_0,
2063 	VEX_W_0F381C_P_2,
2064 	VEX_W_0F381D_P_2,
2065 	VEX_W_0F381E_P_2,
2066 	VEX_W_0F3820_P_2,
2067 	VEX_W_0F3821_P_2,
2068 	VEX_W_0F3822_P_2,
2069 	VEX_W_0F3823_P_2,
2070 	VEX_W_0F3824_P_2,
2071 	VEX_W_0F3825_P_2,
2072 	VEX_W_0F3828_P_2,
2073 	VEX_W_0F3829_P_2,
2074 	VEX_W_0F382A_P_2_M_0,
2075 	VEX_W_0F382B_P_2,
2076 	VEX_W_0F382C_P_2_M_0,
2077 	VEX_W_0F382D_P_2_M_0,
2078 	VEX_W_0F382E_P_2_M_0,
2079 	VEX_W_0F382F_P_2_M_0,
2080 	VEX_W_0F3830_P_2,
2081 	VEX_W_0F3831_P_2,
2082 	VEX_W_0F3832_P_2,
2083 	VEX_W_0F3833_P_2,
2084 	VEX_W_0F3834_P_2,
2085 	VEX_W_0F3835_P_2,
2086 	VEX_W_0F3836_P_2,
2087 	VEX_W_0F3837_P_2,
2088 	VEX_W_0F3838_P_2,
2089 	VEX_W_0F3839_P_2,
2090 	VEX_W_0F383A_P_2,
2091 	VEX_W_0F383B_P_2,
2092 	VEX_W_0F383C_P_2,
2093 	VEX_W_0F383D_P_2,
2094 	VEX_W_0F383E_P_2,
2095 	VEX_W_0F383F_P_2,
2096 	VEX_W_0F3840_P_2,
2097 	VEX_W_0F3841_P_2,
2098 	VEX_W_0F3846_P_2,
2099 	VEX_W_0F3858_P_2,
2100 	VEX_W_0F3859_P_2,
2101 	VEX_W_0F385A_P_2_M_0,
2102 	VEX_W_0F3878_P_2,
2103 	VEX_W_0F3879_P_2,
2104 	VEX_W_0F38DB_P_2,
2105 	VEX_W_0F38DC_P_2,
2106 	VEX_W_0F38DD_P_2,
2107 	VEX_W_0F38DE_P_2,
2108 	VEX_W_0F38DF_P_2,
2109 	VEX_W_0F3A00_P_2,
2110 	VEX_W_0F3A01_P_2,
2111 	VEX_W_0F3A02_P_2,
2112 	VEX_W_0F3A04_P_2,
2113 	VEX_W_0F3A05_P_2,
2114 	VEX_W_0F3A06_P_2,
2115 	VEX_W_0F3A08_P_2,
2116 	VEX_W_0F3A09_P_2,
2117 	VEX_W_0F3A0A_P_2,
2118 	VEX_W_0F3A0B_P_2,
2119 	VEX_W_0F3A0C_P_2,
2120 	VEX_W_0F3A0D_P_2,
2121 	VEX_W_0F3A0E_P_2,
2122 	VEX_W_0F3A0F_P_2,
2123 	VEX_W_0F3A14_P_2,
2124 	VEX_W_0F3A15_P_2,
2125 	VEX_W_0F3A18_P_2,
2126 	VEX_W_0F3A19_P_2,
2127 	VEX_W_0F3A20_P_2,
2128 	VEX_W_0F3A21_P_2,
2129 	VEX_W_0F3A30_P_2_LEN_0,
2130 	VEX_W_0F3A31_P_2_LEN_0,
2131 	VEX_W_0F3A32_P_2_LEN_0,
2132 	VEX_W_0F3A33_P_2_LEN_0,
2133 	VEX_W_0F3A38_P_2,
2134 	VEX_W_0F3A39_P_2,
2135 	VEX_W_0F3A40_P_2,
2136 	VEX_W_0F3A41_P_2,
2137 	VEX_W_0F3A42_P_2,
2138 	VEX_W_0F3A44_P_2,
2139 	VEX_W_0F3A46_P_2,
2140 	VEX_W_0F3A48_P_2,
2141 	VEX_W_0F3A49_P_2,
2142 	VEX_W_0F3A4A_P_2,
2143 	VEX_W_0F3A4B_P_2,
2144 	VEX_W_0F3A4C_P_2,
2145 	VEX_W_0F3A60_P_2,
2146 	VEX_W_0F3A61_P_2,
2147 	VEX_W_0F3A62_P_2,
2148 	VEX_W_0F3A63_P_2,
2149 	VEX_W_0F3ADF_P_2,
2150 
2151 	EVEX_W_0F10_P_0,
2152 	EVEX_W_0F10_P_1_M_0,
2153 	EVEX_W_0F10_P_1_M_1,
2154 	EVEX_W_0F10_P_2,
2155 	EVEX_W_0F10_P_3_M_0,
2156 	EVEX_W_0F10_P_3_M_1,
2157 	EVEX_W_0F11_P_0,
2158 	EVEX_W_0F11_P_1_M_0,
2159 	EVEX_W_0F11_P_1_M_1,
2160 	EVEX_W_0F11_P_2,
2161 	EVEX_W_0F11_P_3_M_0,
2162 	EVEX_W_0F11_P_3_M_1,
2163 	EVEX_W_0F12_P_0_M_0,
2164 	EVEX_W_0F12_P_0_M_1,
2165 	EVEX_W_0F12_P_1,
2166 	EVEX_W_0F12_P_2,
2167 	EVEX_W_0F12_P_3,
2168 	EVEX_W_0F13_P_0,
2169 	EVEX_W_0F13_P_2,
2170 	EVEX_W_0F14_P_0,
2171 	EVEX_W_0F14_P_2,
2172 	EVEX_W_0F15_P_0,
2173 	EVEX_W_0F15_P_2,
2174 	EVEX_W_0F16_P_0_M_0,
2175 	EVEX_W_0F16_P_0_M_1,
2176 	EVEX_W_0F16_P_1,
2177 	EVEX_W_0F16_P_2,
2178 	EVEX_W_0F17_P_0,
2179 	EVEX_W_0F17_P_2,
2180 	EVEX_W_0F28_P_0,
2181 	EVEX_W_0F28_P_2,
2182 	EVEX_W_0F29_P_0,
2183 	EVEX_W_0F29_P_2,
2184 	EVEX_W_0F2A_P_1,
2185 	EVEX_W_0F2A_P_3,
2186 	EVEX_W_0F2B_P_0,
2187 	EVEX_W_0F2B_P_2,
2188 	EVEX_W_0F2E_P_0,
2189 	EVEX_W_0F2E_P_2,
2190 	EVEX_W_0F2F_P_0,
2191 	EVEX_W_0F2F_P_2,
2192 	EVEX_W_0F51_P_0,
2193 	EVEX_W_0F51_P_1,
2194 	EVEX_W_0F51_P_2,
2195 	EVEX_W_0F51_P_3,
2196 	EVEX_W_0F54_P_0,
2197 	EVEX_W_0F54_P_2,
2198 	EVEX_W_0F55_P_0,
2199 	EVEX_W_0F55_P_2,
2200 	EVEX_W_0F56_P_0,
2201 	EVEX_W_0F56_P_2,
2202 	EVEX_W_0F57_P_0,
2203 	EVEX_W_0F57_P_2,
2204 	EVEX_W_0F58_P_0,
2205 	EVEX_W_0F58_P_1,
2206 	EVEX_W_0F58_P_2,
2207 	EVEX_W_0F58_P_3,
2208 	EVEX_W_0F59_P_0,
2209 	EVEX_W_0F59_P_1,
2210 	EVEX_W_0F59_P_2,
2211 	EVEX_W_0F59_P_3,
2212 	EVEX_W_0F5A_P_0,
2213 	EVEX_W_0F5A_P_1,
2214 	EVEX_W_0F5A_P_2,
2215 	EVEX_W_0F5A_P_3,
2216 	EVEX_W_0F5B_P_0,
2217 	EVEX_W_0F5B_P_1,
2218 	EVEX_W_0F5B_P_2,
2219 	EVEX_W_0F5C_P_0,
2220 	EVEX_W_0F5C_P_1,
2221 	EVEX_W_0F5C_P_2,
2222 	EVEX_W_0F5C_P_3,
2223 	EVEX_W_0F5D_P_0,
2224 	EVEX_W_0F5D_P_1,
2225 	EVEX_W_0F5D_P_2,
2226 	EVEX_W_0F5D_P_3,
2227 	EVEX_W_0F5E_P_0,
2228 	EVEX_W_0F5E_P_1,
2229 	EVEX_W_0F5E_P_2,
2230 	EVEX_W_0F5E_P_3,
2231 	EVEX_W_0F5F_P_0,
2232 	EVEX_W_0F5F_P_1,
2233 	EVEX_W_0F5F_P_2,
2234 	EVEX_W_0F5F_P_3,
2235 	EVEX_W_0F62_P_2,
2236 	EVEX_W_0F66_P_2,
2237 	EVEX_W_0F6A_P_2,
2238 	EVEX_W_0F6B_P_2,
2239 	EVEX_W_0F6C_P_2,
2240 	EVEX_W_0F6D_P_2,
2241 	EVEX_W_0F6E_P_2,
2242 	EVEX_W_0F6F_P_1,
2243 	EVEX_W_0F6F_P_2,
2244 	EVEX_W_0F6F_P_3,
2245 	EVEX_W_0F70_P_2,
2246 	EVEX_W_0F72_R_2_P_2,
2247 	EVEX_W_0F72_R_6_P_2,
2248 	EVEX_W_0F73_R_2_P_2,
2249 	EVEX_W_0F73_R_6_P_2,
2250 	EVEX_W_0F76_P_2,
2251 	EVEX_W_0F78_P_0,
2252 	EVEX_W_0F78_P_2,
2253 	EVEX_W_0F79_P_0,
2254 	EVEX_W_0F79_P_2,
2255 	EVEX_W_0F7A_P_1,
2256 	EVEX_W_0F7A_P_2,
2257 	EVEX_W_0F7A_P_3,
2258 	EVEX_W_0F7B_P_1,
2259 	EVEX_W_0F7B_P_2,
2260 	EVEX_W_0F7B_P_3,
2261 	EVEX_W_0F7E_P_1,
2262 	EVEX_W_0F7E_P_2,
2263 	EVEX_W_0F7F_P_1,
2264 	EVEX_W_0F7F_P_2,
2265 	EVEX_W_0F7F_P_3,
2266 	EVEX_W_0FC2_P_0,
2267 	EVEX_W_0FC2_P_1,
2268 	EVEX_W_0FC2_P_2,
2269 	EVEX_W_0FC2_P_3,
2270 	EVEX_W_0FC6_P_0,
2271 	EVEX_W_0FC6_P_2,
2272 	EVEX_W_0FD2_P_2,
2273 	EVEX_W_0FD3_P_2,
2274 	EVEX_W_0FD4_P_2,
2275 	EVEX_W_0FD6_P_2,
2276 	EVEX_W_0FE6_P_1,
2277 	EVEX_W_0FE6_P_2,
2278 	EVEX_W_0FE6_P_3,
2279 	EVEX_W_0FE7_P_2,
2280 	EVEX_W_0FF2_P_2,
2281 	EVEX_W_0FF3_P_2,
2282 	EVEX_W_0FF4_P_2,
2283 	EVEX_W_0FFA_P_2,
2284 	EVEX_W_0FFB_P_2,
2285 	EVEX_W_0FFE_P_2,
2286 	EVEX_W_0F380C_P_2,
2287 	EVEX_W_0F380D_P_2,
2288 	EVEX_W_0F3810_P_1,
2289 	EVEX_W_0F3810_P_2,
2290 	EVEX_W_0F3811_P_1,
2291 	EVEX_W_0F3811_P_2,
2292 	EVEX_W_0F3812_P_1,
2293 	EVEX_W_0F3812_P_2,
2294 	EVEX_W_0F3813_P_1,
2295 	EVEX_W_0F3813_P_2,
2296 	EVEX_W_0F3814_P_1,
2297 	EVEX_W_0F3815_P_1,
2298 	EVEX_W_0F3818_P_2,
2299 	EVEX_W_0F3819_P_2,
2300 	EVEX_W_0F381A_P_2,
2301 	EVEX_W_0F381B_P_2,
2302 	EVEX_W_0F381E_P_2,
2303 	EVEX_W_0F381F_P_2,
2304 	EVEX_W_0F3820_P_1,
2305 	EVEX_W_0F3821_P_1,
2306 	EVEX_W_0F3822_P_1,
2307 	EVEX_W_0F3823_P_1,
2308 	EVEX_W_0F3824_P_1,
2309 	EVEX_W_0F3825_P_1,
2310 	EVEX_W_0F3825_P_2,
2311 	EVEX_W_0F3826_P_1,
2312 	EVEX_W_0F3826_P_2,
2313 	EVEX_W_0F3828_P_1,
2314 	EVEX_W_0F3828_P_2,
2315 	EVEX_W_0F3829_P_1,
2316 	EVEX_W_0F3829_P_2,
2317 	EVEX_W_0F382A_P_1,
2318 	EVEX_W_0F382A_P_2,
2319 	EVEX_W_0F382B_P_2,
2320 	EVEX_W_0F3830_P_1,
2321 	EVEX_W_0F3831_P_1,
2322 	EVEX_W_0F3832_P_1,
2323 	EVEX_W_0F3833_P_1,
2324 	EVEX_W_0F3834_P_1,
2325 	EVEX_W_0F3835_P_1,
2326 	EVEX_W_0F3835_P_2,
2327 	EVEX_W_0F3837_P_2,
2328 	EVEX_W_0F3838_P_1,
2329 	EVEX_W_0F3839_P_1,
2330 	EVEX_W_0F383A_P_1,
2331 	EVEX_W_0F3840_P_2,
2332 	EVEX_W_0F3855_P_2,
2333 	EVEX_W_0F3858_P_2,
2334 	EVEX_W_0F3859_P_2,
2335 	EVEX_W_0F385A_P_2,
2336 	EVEX_W_0F385B_P_2,
2337 	EVEX_W_0F3866_P_2,
2338 	EVEX_W_0F3875_P_2,
2339 	EVEX_W_0F3878_P_2,
2340 	EVEX_W_0F3879_P_2,
2341 	EVEX_W_0F387A_P_2,
2342 	EVEX_W_0F387B_P_2,
2343 	EVEX_W_0F387D_P_2,
2344 	EVEX_W_0F3883_P_2,
2345 	EVEX_W_0F388D_P_2,
2346 	EVEX_W_0F3891_P_2,
2347 	EVEX_W_0F3893_P_2,
2348 	EVEX_W_0F38A1_P_2,
2349 	EVEX_W_0F38A3_P_2,
2350 	EVEX_W_0F38C7_R_1_P_2,
2351 	EVEX_W_0F38C7_R_2_P_2,
2352 	EVEX_W_0F38C7_R_5_P_2,
2353 	EVEX_W_0F38C7_R_6_P_2,
2354 
2355 	EVEX_W_0F3A00_P_2,
2356 	EVEX_W_0F3A01_P_2,
2357 	EVEX_W_0F3A04_P_2,
2358 	EVEX_W_0F3A05_P_2,
2359 	EVEX_W_0F3A08_P_2,
2360 	EVEX_W_0F3A09_P_2,
2361 	EVEX_W_0F3A0A_P_2,
2362 	EVEX_W_0F3A0B_P_2,
2363 	EVEX_W_0F3A16_P_2,
2364 	EVEX_W_0F3A18_P_2,
2365 	EVEX_W_0F3A19_P_2,
2366 	EVEX_W_0F3A1A_P_2,
2367 	EVEX_W_0F3A1B_P_2,
2368 	EVEX_W_0F3A1D_P_2,
2369 	EVEX_W_0F3A21_P_2,
2370 	EVEX_W_0F3A22_P_2,
2371 	EVEX_W_0F3A23_P_2,
2372 	EVEX_W_0F3A38_P_2,
2373 	EVEX_W_0F3A39_P_2,
2374 	EVEX_W_0F3A3A_P_2,
2375 	EVEX_W_0F3A3B_P_2,
2376 	EVEX_W_0F3A3E_P_2,
2377 	EVEX_W_0F3A3F_P_2,
2378 	EVEX_W_0F3A42_P_2,
2379 	EVEX_W_0F3A43_P_2,
2380 	EVEX_W_0F3A50_P_2,
2381 	EVEX_W_0F3A51_P_2,
2382 	EVEX_W_0F3A56_P_2,
2383 	EVEX_W_0F3A57_P_2,
2384 	EVEX_W_0F3A66_P_2,
2385 	EVEX_W_0F3A67_P_2
2386 };
2387 
2388 typedef void (*op_rtn) (disassemble_info *info, int bytemode, int sizeflag);
2389 
2390 struct dis386
2391 {
2392 	const char *name;
2393 	struct
2394 	{
2395 		op_rtn rtn;
2396 		int bytemode;
2397 	} op[MAX_OPERANDS];
2398 	unsigned int prefix_requirement;
2399 };
2400 
2401 
2402 /* If we are accessing mod/rm/reg without need_modrm set, then the
2403    values are stale.  Hitting this abort likely indicates that you
2404    need to update onebyte_has_modrm or twobyte_has_modrm.  */
2405 #define MODRM_CHECK(act)  if (!info->need_modrm) { internal_error(info); act; }
2406 
2407 
swap_operand(disassemble_info * info)2408 static void swap_operand(disassemble_info *info)
2409 {
2410 	info->mnemonicendp[0] = '.';
2411 	info->mnemonicendp[1] = 's';
2412 	info->mnemonicendp += 2;
2413 }
2414 
2415 
append_seg(disassemble_info * info)2416 static void append_seg(disassemble_info *info)
2417 {
2418 	/* Only print the active segment register.  */
2419 	if (!info->active_seg_prefix)
2420 		return;
2421 
2422 	info->used_prefixes |= info->active_seg_prefix;
2423 	switch (info->active_seg_prefix)
2424 	{
2425 	case PREFIX_CS:
2426 		oappend_maybe_intel(info, "%cs:");
2427 		break;
2428 	case PREFIX_DS:
2429 		oappend_maybe_intel(info, "%ds:");
2430 		break;
2431 	case PREFIX_SS:
2432 		oappend_maybe_intel(info, "%ss:");
2433 		break;
2434 	case PREFIX_ES:
2435 		oappend_maybe_intel(info, "%es:");
2436 		break;
2437 	case PREFIX_FS:
2438 		oappend_maybe_intel(info, "%fs:");
2439 		break;
2440 	case PREFIX_GS:
2441 		oappend_maybe_intel(info, "%gs:");
2442 		break;
2443 	default:
2444 		break;
2445 	}
2446 }
2447 
2448 
2449 /* Put DISP in BUF as signed hex number.  */
2450 
print_displacement(disassemble_info * info,char * buf,bfd_vma disp)2451 static void print_displacement(disassemble_info *info, char *buf, bfd_vma disp)
2452 {
2453 	bfd_signed_vma val = disp;
2454 	char tmp[30];
2455 	int i, j = 0;
2456 
2457 	if (val < 0)
2458 	{
2459 		buf[j++] = '-';
2460 		val = -disp;
2461 
2462 		/* Check for possible overflow.  */
2463 		if (val < 0)
2464 		{
2465 			switch (info->address_mode)
2466 			{
2467 			case mode_64bit:
2468 				strcpy(buf + j, "0x8000000000000000");
2469 				break;
2470 			case mode_32bit:
2471 				strcpy(buf + j, "0x80000000");
2472 				break;
2473 			case mode_16bit:
2474 				strcpy(buf + j, "0x8000");
2475 				break;
2476 			}
2477 			return;
2478 		}
2479 	}
2480 
2481 	buf[j++] = '0';
2482 	buf[j++] = 'x';
2483 
2484 	sprintf(tmp, "%016" PRIx64, (uint64_t)val);
2485 	for (i = 0; tmp[i] == '0'; i++)
2486 		continue;
2487 	if (tmp[i] == '\0')
2488 		i--;
2489 	strcpy(buf + j, tmp + i);
2490 }
2491 
2492 
intel_operand_size(disassemble_info * info,int bytemode,int sizeflag)2493 static void intel_operand_size(disassemble_info *info, int bytemode, int sizeflag)
2494 {
2495 	if (info->vex.evex && info->vex.b && (bytemode == x_mode || bytemode == evex_half_bcst_xmmq_mode))
2496 	{
2497 		if (info->vex.w)
2498 			oappend(info, "QWORD PTR ");
2499 		else
2500 			oappend(info, "DWORD PTR ");
2501 		return;
2502 	}
2503 	switch (bytemode)
2504 	{
2505 	case b_mode:
2506 	case b_swap_mode:
2507 	case dqb_mode:
2508 	case db_mode:
2509 		oappend(info, "BYTE PTR ");
2510 		break;
2511 	case w_mode:
2512 	case dw_mode:
2513 	case dqw_mode:
2514 	case dqw_swap_mode:
2515 		oappend(info, "WORD PTR ");
2516 		break;
2517 	case indir_v_mode:
2518 		if (info->address_mode == mode_64bit && info->isa64 == intel64)
2519 		{
2520 			oappend(info, "QWORD PTR ");
2521 			break;
2522 		}
2523 		/* Fall through.  */
2524 	case stack_v_mode:
2525 		if (info->address_mode == mode_64bit && ((sizeflag & DFLAG) || (info->rex & REX_W)))
2526 		{
2527 			oappend(info, "QWORD PTR ");
2528 			break;
2529 		}
2530 		/* Fall through.  */
2531 	case v_mode:
2532 	case v_swap_mode:
2533 	case dq_mode:
2534 		USED_REX(REX_W);
2535 		if (info->rex & REX_W)
2536 			oappend(info, "QWORD PTR ");
2537 		else
2538 		{
2539 			if ((sizeflag & DFLAG) || bytemode == dq_mode)
2540 				oappend(info, "DWORD PTR ");
2541 			else
2542 				oappend(info, "WORD PTR ");
2543 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
2544 		}
2545 		break;
2546 	case z_mode:
2547 		if ((info->rex & REX_W) || (sizeflag & DFLAG))
2548 			*info->obufp++ = 'D';
2549 		oappend(info, "WORD PTR ");
2550 		if (!(info->rex & REX_W))
2551 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
2552 		break;
2553 	case a_mode:
2554 		if (sizeflag & DFLAG)
2555 			oappend(info, "QWORD PTR ");
2556 		else
2557 			oappend(info, "DWORD PTR ");
2558 		info->used_prefixes |= (info->prefixes & PREFIX_DATA);
2559 		break;
2560 	case d_mode:
2561 	case d_scalar_mode:
2562 	case d_scalar_swap_mode:
2563 	case d_swap_mode:
2564 	case dqd_mode:
2565 		oappend(info, "DWORD PTR ");
2566 		break;
2567 	case q_mode:
2568 	case q_scalar_mode:
2569 	case q_scalar_swap_mode:
2570 	case q_swap_mode:
2571 		oappend(info, "QWORD PTR ");
2572 		break;
2573 	case m_mode:
2574 		if (info->address_mode == mode_64bit)
2575 			oappend(info, "QWORD PTR ");
2576 		else
2577 			oappend(info, "DWORD PTR ");
2578 		break;
2579 	case f_mode:
2580 		if (sizeflag & DFLAG)
2581 			oappend(info, "FWORD PTR ");
2582 		else
2583 			oappend(info, "DWORD PTR ");
2584 		info->used_prefixes |= (info->prefixes & PREFIX_DATA);
2585 		break;
2586 	case t_mode:
2587 		oappend(info, "TBYTE PTR ");
2588 		break;
2589 	case x_mode:
2590 	case x_swap_mode:
2591 	case evex_x_gscat_mode:
2592 	case evex_x_nobcst_mode:
2593 		if (info->need_vex)
2594 		{
2595 			switch (info->vex.length)
2596 			{
2597 			case 128:
2598 				oappend(info, "XMMWORD PTR ");
2599 				break;
2600 			case 256:
2601 				oappend(info, "YMMWORD PTR ");
2602 				break;
2603 			case 512:
2604 				oappend(info, "ZMMWORD PTR ");
2605 				break;
2606 			default:
2607 				internal_error(info);
2608 				return;
2609 			}
2610 		} else
2611 			oappend(info, "XMMWORD PTR ");
2612 		break;
2613 	case xmm_mode:
2614 		oappend(info, "XMMWORD PTR ");
2615 		break;
2616 	case ymm_mode:
2617 		oappend(info, "YMMWORD PTR ");
2618 		break;
2619 	case xmmq_mode:
2620 	case evex_half_bcst_xmmq_mode:
2621 		if (!info->need_vex)
2622 		{
2623 			internal_error(info);
2624 			return;
2625 		}
2626 
2627 		switch (info->vex.length)
2628 		{
2629 		case 128:
2630 			oappend(info, "QWORD PTR ");
2631 			break;
2632 		case 256:
2633 			oappend(info, "XMMWORD PTR ");
2634 			break;
2635 		case 512:
2636 			oappend(info, "YMMWORD PTR ");
2637 			break;
2638 		default:
2639 			internal_error(info);
2640 			return;
2641 		}
2642 		break;
2643 	case xmm_mb_mode:
2644 		if (!info->need_vex)
2645 		{
2646 			internal_error(info);
2647 			return;
2648 		}
2649 
2650 		switch (info->vex.length)
2651 		{
2652 		case 128:
2653 		case 256:
2654 		case 512:
2655 			oappend(info, "BYTE PTR ");
2656 			break;
2657 		default:
2658 			internal_error(info);
2659 			return;
2660 		}
2661 		break;
2662 	case xmm_mw_mode:
2663 		if (!info->need_vex)
2664 		{
2665 			internal_error(info);
2666 			return;
2667 		}
2668 
2669 		switch (info->vex.length)
2670 		{
2671 		case 128:
2672 		case 256:
2673 		case 512:
2674 			oappend(info, "WORD PTR ");
2675 			break;
2676 		default:
2677 			internal_error(info);
2678 			return;
2679 		}
2680 		break;
2681 	case xmm_md_mode:
2682 		if (!info->need_vex)
2683 		{
2684 			internal_error(info);
2685 			return;
2686 		}
2687 
2688 		switch (info->vex.length)
2689 		{
2690 		case 128:
2691 		case 256:
2692 		case 512:
2693 			oappend(info, "DWORD PTR ");
2694 			break;
2695 		default:
2696 			internal_error(info);
2697 			return;
2698 		}
2699 		break;
2700 	case xmm_mq_mode:
2701 		if (!info->need_vex)
2702 		{
2703 			internal_error(info);
2704 			return;
2705 		}
2706 
2707 		switch (info->vex.length)
2708 		{
2709 		case 128:
2710 		case 256:
2711 		case 512:
2712 			oappend(info, "QWORD PTR ");
2713 			break;
2714 		default:
2715 			internal_error(info);
2716 			return;
2717 		}
2718 		break;
2719 	case xmmdw_mode:
2720 		if (!info->need_vex)
2721 		{
2722 			internal_error(info);
2723 			return;
2724 		}
2725 
2726 		switch (info->vex.length)
2727 		{
2728 		case 128:
2729 			oappend(info, "WORD PTR ");
2730 			break;
2731 		case 256:
2732 			oappend(info, "DWORD PTR ");
2733 			break;
2734 		case 512:
2735 			oappend(info, "QWORD PTR ");
2736 			break;
2737 		default:
2738 			internal_error(info);
2739 			return;
2740 		}
2741 		break;
2742 	case xmmqd_mode:
2743 		if (!info->need_vex)
2744 		{
2745 			internal_error(info);
2746 			return;
2747 		}
2748 
2749 		switch (info->vex.length)
2750 		{
2751 		case 128:
2752 			oappend(info, "DWORD PTR ");
2753 			break;
2754 		case 256:
2755 			oappend(info, "QWORD PTR ");
2756 			break;
2757 		case 512:
2758 			oappend(info, "XMMWORD PTR ");
2759 			break;
2760 		default:
2761 			internal_error(info);
2762 			return;
2763 		}
2764 		break;
2765 	case ymmq_mode:
2766 		if (!info->need_vex)
2767 		{
2768 			internal_error(info);
2769 			return;
2770 		}
2771 
2772 		switch (info->vex.length)
2773 		{
2774 		case 128:
2775 			oappend(info, "QWORD PTR ");
2776 			break;
2777 		case 256:
2778 			oappend(info, "YMMWORD PTR ");
2779 			break;
2780 		case 512:
2781 			oappend(info, "ZMMWORD PTR ");
2782 			break;
2783 		default:
2784 			internal_error(info);
2785 			return;
2786 		}
2787 		break;
2788 	case ymmxmm_mode:
2789 		if (!info->need_vex)
2790 		{
2791 			internal_error(info);
2792 			return;
2793 		}
2794 
2795 		switch (info->vex.length)
2796 		{
2797 		case 128:
2798 		case 256:
2799 			oappend(info, "XMMWORD PTR ");
2800 			break;
2801 		default:
2802 			internal_error(info);
2803 			return;
2804 		}
2805 		break;
2806 	case o_mode:
2807 		oappend(info, "OWORD PTR ");
2808 		break;
2809 	case xmm_mdq_mode:
2810 	case vex_w_dq_mode:
2811 	case vex_scalar_w_dq_mode:
2812 		if (!info->need_vex)
2813 		{
2814 			internal_error(info);
2815 			return;
2816 		}
2817 
2818 		if (info->vex.w)
2819 			oappend(info, "QWORD PTR ");
2820 		else
2821 			oappend(info, "DWORD PTR ");
2822 		break;
2823 	case vex_vsib_d_w_dq_mode:
2824 	case vex_vsib_q_w_dq_mode:
2825 		if (!info->need_vex)
2826 		{
2827 			internal_error(info);
2828 			return;
2829 		}
2830 
2831 		if (!info->vex.evex)
2832 		{
2833 			if (info->vex.w)
2834 				oappend(info, "QWORD PTR ");
2835 			else
2836 				oappend(info, "DWORD PTR ");
2837 		} else
2838 		{
2839 			switch (info->vex.length)
2840 			{
2841 			case 128:
2842 				oappend(info, "XMMWORD PTR ");
2843 				break;
2844 			case 256:
2845 				oappend(info, "YMMWORD PTR ");
2846 				break;
2847 			case 512:
2848 				oappend(info, "ZMMWORD PTR ");
2849 				break;
2850 			default:
2851 				internal_error(info);
2852 				return;
2853 			}
2854 		}
2855 		break;
2856 	case vex_vsib_q_w_d_mode:
2857 	case vex_vsib_d_w_d_mode:
2858 		if (!info->need_vex || !info->vex.evex)
2859 		{
2860 			internal_error(info);
2861 			return;
2862 		}
2863 
2864 		switch (info->vex.length)
2865 		{
2866 		case 128:
2867 			oappend(info, "QWORD PTR ");
2868 			break;
2869 		case 256:
2870 			oappend(info, "XMMWORD PTR ");
2871 			break;
2872 		case 512:
2873 			oappend(info, "YMMWORD PTR ");
2874 			break;
2875 		default:
2876 			internal_error(info);
2877 			return;
2878 		}
2879 
2880 		break;
2881 	case mask_bd_mode:
2882 		if (!info->need_vex || info->vex.length != 128)
2883 		{
2884 			internal_error(info);
2885 			return;
2886 		}
2887 		if (info->vex.w)
2888 			oappend(info, "DWORD PTR ");
2889 		else
2890 			oappend(info, "BYTE PTR ");
2891 		break;
2892 	case mask_mode:
2893 		if (!info->need_vex)
2894 		{
2895 			internal_error(info);
2896 			return;
2897 		}
2898 		if (info->vex.w)
2899 			oappend(info, "QWORD PTR ");
2900 		else
2901 			oappend(info, "WORD PTR ");
2902 		break;
2903 	case v_bnd_mode:
2904 	default:
2905 		break;
2906 	}
2907 }
2908 
2909 
print_operand_value(disassemble_info * info,char * buf,int hex,bfd_vma disp)2910 static void print_operand_value(disassemble_info *info, char *buf, int hex, bfd_vma disp)
2911 {
2912 	if (info->address_mode == mode_64bit)
2913 	{
2914 		if (hex)
2915 		{
2916 			char tmp[30];
2917 			int i;
2918 
2919 			buf[0] = '0';
2920 			buf[1] = 'x';
2921 			sprintf(tmp, "%016" PRIx64, (uint64_t)disp);
2922 			for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++)
2923 				;
2924 			strcpy(buf + 2, tmp + i);
2925 		} else
2926 		{
2927 			bfd_signed_vma v = disp;
2928 			char tmp[30];
2929 			int i;
2930 
2931 			if (v < 0)
2932 			{
2933 				*(buf++) = '-';
2934 				v = -disp;
2935 				/* Check for possible overflow on 0x8000000000000000.  */
2936 				if (v < 0)
2937 				{
2938 					strcpy(buf, "9223372036854775808");
2939 					return;
2940 				}
2941 			}
2942 			if (!v)
2943 			{
2944 				strcpy(buf, "0");
2945 				return;
2946 			}
2947 
2948 			i = 0;
2949 			tmp[29] = 0;
2950 			while (v)
2951 			{
2952 				tmp[28 - i] = (v % 10) + '0';
2953 				v /= 10;
2954 				i++;
2955 			}
2956 			strcpy(buf, tmp + 29 - i);
2957 		}
2958 	} else
2959 	{
2960 		if (hex)
2961 			sprintf(buf, "0x%x", (unsigned int) disp);
2962 		else
2963 			sprintf(buf, "%d", (int) disp);
2964 	}
2965 }
2966 
2967 
xget32(disassemble_info * info)2968 static bfd_signed_vma xget32(disassemble_info *info)
2969 {
2970 	bfd_signed_vma x = 0;
2971 
2972 	FETCH_DATA(info, info->codep + 4);
2973 	x = *info->codep++ & (bfd_signed_vma) 0xff;
2974 	x |= (*info->codep++ & (bfd_signed_vma) 0xff) << 8;
2975 	x |= (*info->codep++ & (bfd_signed_vma) 0xff) << 16;
2976 	x |= (*info->codep++ & (bfd_signed_vma) 0xff) << 24;
2977 	return x;
2978 }
2979 
2980 
xget32s(disassemble_info * info)2981 static bfd_signed_vma xget32s(disassemble_info *info)
2982 {
2983 	bfd_signed_vma x = 0;
2984 
2985 	FETCH_DATA(info, info->codep + 4);
2986 	x = *info->codep++ & (bfd_signed_vma) 0xff;
2987 	x |= (*info->codep++ & (bfd_signed_vma) 0xff) << 8;
2988 	x |= (*info->codep++ & (bfd_signed_vma) 0xff) << 16;
2989 	x |= (*info->codep++ & (bfd_signed_vma) 0xff) << 24;
2990 
2991 	x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
2992 
2993 	return x;
2994 }
2995 
2996 
xget64(disassemble_info * info)2997 static bfd_vma xget64(disassemble_info *info)
2998 {
2999 	bfd_vma x;
3000 	uint32_t a;
3001 	uint32_t b;
3002 
3003 	FETCH_DATA(info, info->codep + 8);
3004 	a = *info->codep++ & 0xff;
3005 	a |= (*info->codep++ & 0xff) << 8;
3006 	a |= (*info->codep++ & 0xff) << 16;
3007 	a |= (*info->codep++ & 0xffu) << 24;
3008 	b = *info->codep++ & 0xff;
3009 	b |= (*info->codep++ & 0xff) << 8;
3010 	b |= (*info->codep++ & 0xff) << 16;
3011 	b |= (*info->codep++ & 0xffu) << 24;
3012 	x = a + ((bfd_vma) b << 32);
3013 	return x;
3014 }
3015 
3016 
xget16(disassemble_info * info)3017 static int xget16(disassemble_info *info)
3018 {
3019 	int x = 0;
3020 
3021 	FETCH_DATA(info, info->codep + 2);
3022 	x = *info->codep++ & 0xff;
3023 	x |= (*info->codep++ & 0xff) << 8;
3024 	return x;
3025 }
3026 
3027 
set_op(disassemble_info * info,bfd_vma op,int riprel)3028 static void set_op(disassemble_info *info, bfd_vma op, int riprel)
3029 {
3030 	info->op_index[info->op_ad] = info->op_ad;
3031 	if (info->address_mode == mode_64bit)
3032 	{
3033 		info->op_address[info->op_ad] = op;
3034 		info->op_riprel[info->op_ad] = riprel;
3035 	} else
3036 	{
3037 		/* Mask to get a 32-bit address.  */
3038 		info->op_address[info->op_ad] = op & 0xffffffff;
3039 		info->op_riprel[info->op_ad] = riprel;
3040 	}
3041 }
3042 
3043 
OP_E_register(disassemble_info * info,int bytemode,int sizeflag)3044 static void OP_E_register(disassemble_info *info, int bytemode, int sizeflag)
3045 {
3046 	int reg = info->modrm.rm;
3047 	const char *const *names;
3048 
3049 	USED_REX(REX_B);
3050 	if ((info->rex & REX_B))
3051 		reg += 8;
3052 
3053 	if ((sizeflag & SUFFIX_ALWAYS) && (bytemode == b_swap_mode || bytemode == v_swap_mode || bytemode == dqw_swap_mode))
3054 		swap_operand(info);
3055 
3056 	switch (bytemode)
3057 	{
3058 	case b_mode:
3059 	case b_swap_mode:
3060 		USED_REX(0);
3061 		if (info->rex)
3062 			names = info->names8rex;
3063 		else
3064 			names = info->names8;
3065 		break;
3066 	case w_mode:
3067 		names = info->names16;
3068 		break;
3069 	case d_mode:
3070 	case dw_mode:
3071 	case db_mode:
3072 		names = info->names32;
3073 		break;
3074 	case q_mode:
3075 		names = info->names64;
3076 		break;
3077 	case m_mode:
3078 	case v_bnd_mode:
3079 		names = info->address_mode == mode_64bit ? info->names64 : info->names32;
3080 		break;
3081 	case bnd_mode:
3082 		names = info->names_bnd;
3083 		break;
3084 	case indir_v_mode:
3085 		if (info->address_mode == mode_64bit && info->isa64 == intel64)
3086 		{
3087 			names = info->names64;
3088 			break;
3089 		}
3090 		/* Fall through.  */
3091 	case stack_v_mode:
3092 		if (info->address_mode == mode_64bit && ((sizeflag & DFLAG) || (info->rex & REX_W)))
3093 		{
3094 			names = info->names64;
3095 			break;
3096 		}
3097 		bytemode = v_mode;
3098 		/* Fall through.  */
3099 	case v_mode:
3100 	case v_swap_mode:
3101 	case dq_mode:
3102 	case dqb_mode:
3103 	case dqd_mode:
3104 	case dqw_mode:
3105 	case dqw_swap_mode:
3106 		USED_REX(REX_W);
3107 		if (info->rex & REX_W)
3108 			names = info->names64;
3109 		else
3110 		{
3111 			if ((sizeflag & DFLAG) || (bytemode != v_mode && bytemode != v_swap_mode))
3112 				names = info->names32;
3113 			else
3114 				names = info->names16;
3115 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
3116 		}
3117 		break;
3118 	case mask_bd_mode:
3119 	case mask_mode:
3120 		if (reg > 0x7)
3121 		{
3122 			oappend(info, "(bad)");
3123 			return;
3124 		}
3125 		names = info->names_mask;
3126 		break;
3127 	case 0:
3128 		return;
3129 	default:
3130 		internal_error(info);
3131 		return;
3132 	}
3133 	oappend(info, names[reg]);
3134 }
3135 
3136 
BadOp(disassemble_info * info)3137 static void BadOp(disassemble_info *info)
3138 {
3139 	/* Throw away prefixes and 1st. opcode byte.  */
3140 	info->codep = info->insn_codep + 1;
3141 	oappend(info, "(bad)");
3142 }
3143 
3144 
OP_E_memory(disassemble_info * info,int bytemode,int sizeflag)3145 static void OP_E_memory(disassemble_info *info, int bytemode, int sizeflag)
3146 {
3147 	bfd_vma disp = 0;
3148 	int add = (info->rex & REX_B) ? 8 : 0;
3149 	int riprel = 0;
3150 	int shift;
3151 
3152 	if (info->vex.evex)
3153 	{
3154 		/* In EVEX, if operand doesn't allow broadcast, vex.b should be 0.  */
3155 		if (info->vex.b && bytemode != x_mode && bytemode != xmmq_mode && bytemode != evex_half_bcst_xmmq_mode)
3156 		{
3157 			BadOp(info);
3158 			return;
3159 		}
3160 		switch (bytemode)
3161 		{
3162 		case dqw_mode:
3163 		case dw_mode:
3164 		case dqw_swap_mode:
3165 			shift = 1;
3166 			break;
3167 		case dqb_mode:
3168 		case db_mode:
3169 			shift = 0;
3170 			break;
3171 		case vex_vsib_d_w_dq_mode:
3172 		case vex_vsib_d_w_d_mode:
3173 		case vex_vsib_q_w_dq_mode:
3174 		case vex_vsib_q_w_d_mode:
3175 		case evex_x_gscat_mode:
3176 		case xmm_mdq_mode:
3177 			shift = info->vex.w ? 3 : 2;
3178 			break;
3179 		case x_mode:
3180 		case evex_half_bcst_xmmq_mode:
3181 		case xmmq_mode:
3182 			if (info->vex.b)
3183 			{
3184 				shift = info->vex.w ? 3 : 2;
3185 				break;
3186 			}
3187 			/* Fall through. */
3188 		case xmmqd_mode:
3189 		case xmmdw_mode:
3190 		case ymmq_mode:
3191 		case evex_x_nobcst_mode:
3192 		case x_swap_mode:
3193 			switch (info->vex.length)
3194 			{
3195 			case 128:
3196 				shift = 4;
3197 				break;
3198 			case 256:
3199 				shift = 5;
3200 				break;
3201 			case 512:
3202 				shift = 6;
3203 				break;
3204 			default:
3205 				internal_error(info);
3206 				return;
3207 			}
3208 			break;
3209 		case ymm_mode:
3210 			shift = 5;
3211 			break;
3212 		case xmm_mode:
3213 			shift = 4;
3214 			break;
3215 		case xmm_mq_mode:
3216 		case q_mode:
3217 		case q_scalar_mode:
3218 		case q_swap_mode:
3219 		case q_scalar_swap_mode:
3220 			shift = 3;
3221 			break;
3222 		case dqd_mode:
3223 		case xmm_md_mode:
3224 		case d_mode:
3225 		case d_scalar_mode:
3226 		case d_swap_mode:
3227 		case d_scalar_swap_mode:
3228 			shift = 2;
3229 			break;
3230 		case xmm_mw_mode:
3231 			shift = 1;
3232 			break;
3233 		case xmm_mb_mode:
3234 			shift = 0;
3235 			break;
3236 		default:
3237 			internal_error(info);
3238 			return;
3239 		}
3240 		/* Make necessary corrections to shift for modes that need it.
3241 		   For these modes we currently have shift 4, 5 or 6 depending on
3242 		   vex.length (it corresponds to xmmword, ymmword or zmmword
3243 		   operand).  We might want to make it 3, 4 or 5 (e.g. for
3244 		   xmmq_mode).  In case of broadcast enabled the corrections
3245 		   aren't needed, as element size is always 32 or 64 bits.  */
3246 		if (!info->vex.b && (bytemode == xmmq_mode || bytemode == evex_half_bcst_xmmq_mode))
3247 			shift -= 1;
3248 		else if (bytemode == xmmqd_mode)
3249 			shift -= 2;
3250 		else if (bytemode == xmmdw_mode)
3251 			shift -= 3;
3252 		else if (bytemode == ymmq_mode && info->vex.length == 128)
3253 			shift -= 1;
3254 	} else
3255 		shift = 0;
3256 
3257 	USED_REX(REX_B);
3258 	if (info->intel_syntax)
3259 		intel_operand_size(info, bytemode, sizeflag);
3260 	append_seg(info);
3261 
3262 	if ((sizeflag & AFLAG) || info->address_mode == mode_64bit)
3263 	{
3264 		/* 32/64 bit address mode */
3265 		int havedisp;
3266 		int havesib;
3267 		int havebase;
3268 		int haveindex;
3269 		int needindex;
3270 		int base, rbase;
3271 		int vindex = 0;
3272 		int scale = 0;
3273 
3274 		int addr32flag = !((sizeflag & AFLAG) || bytemode == v_bnd_mode || bytemode == bnd_mode);
3275 
3276 		const char *const *indexes64 = info->names64;
3277 		const char *const *indexes32 = info->names32;
3278 
3279 		havesib = 0;
3280 		havebase = 1;
3281 		haveindex = 0;
3282 		base = info->modrm.rm;
3283 
3284 		if (base == 4)
3285 		{
3286 			havesib = 1;
3287 			vindex = info->sib.index;
3288 			USED_REX(REX_X);
3289 			if (info->rex & REX_X)
3290 				vindex += 8;
3291 			switch (bytemode)
3292 			{
3293 			case vex_vsib_d_w_dq_mode:
3294 			case vex_vsib_d_w_d_mode:
3295 			case vex_vsib_q_w_dq_mode:
3296 			case vex_vsib_q_w_d_mode:
3297 				if (!info->need_vex)
3298 				{
3299 					internal_error(info);
3300 					return;
3301 				}
3302 				if (info->vex.evex)
3303 				{
3304 					if (!info->vex.v)
3305 						vindex += 16;
3306 				}
3307 
3308 				haveindex = 1;
3309 				switch (info->vex.length)
3310 				{
3311 				case 128:
3312 					indexes64 = indexes32 = info->names_xmm;
3313 					break;
3314 				case 256:
3315 					if (!info->vex.w || bytemode == vex_vsib_q_w_dq_mode || bytemode == vex_vsib_q_w_d_mode)
3316 						indexes64 = indexes32 = info->names_ymm;
3317 					else
3318 						indexes64 = indexes32 = info->names_xmm;
3319 					break;
3320 				case 512:
3321 					if (!info->vex.w || bytemode == vex_vsib_q_w_dq_mode || bytemode == vex_vsib_q_w_d_mode)
3322 						indexes64 = indexes32 = info->names_zmm;
3323 					else
3324 						indexes64 = indexes32 = info->names_ymm;
3325 					break;
3326 				default:
3327 					internal_error(info);
3328 					return;
3329 				}
3330 				break;
3331 			default:
3332 				haveindex = vindex != 4;
3333 				break;
3334 			}
3335 			scale = info->sib.scale;
3336 			base = info->sib.base;
3337 			info->codep++;
3338 		}
3339 		rbase = base + add;
3340 
3341 		switch (info->modrm.mod)
3342 		{
3343 		case 0:
3344 			if (base == 5)
3345 			{
3346 				havebase = 0;
3347 				if (info->address_mode == mode_64bit && !havesib)
3348 					riprel = 1;
3349 				disp = xget32s(info);
3350 			}
3351 			break;
3352 		case 1:
3353 			FETCH_DATA(info, info->codep + 1);
3354 			disp = *info->codep++;
3355 			if ((disp & 0x80) != 0)
3356 				disp -= 0x100;
3357 			if (info->vex.evex && shift > 0)
3358 				disp <<= shift;
3359 			break;
3360 		case 2:
3361 			disp = xget32s(info);
3362 			break;
3363 		}
3364 
3365 		/* In 32bit mode, we need index register to tell [offset] from
3366 		   [eiz*1 + offset].  */
3367 		needindex = (havesib && !havebase && !haveindex && info->address_mode == mode_32bit);
3368 		havedisp = (havebase || needindex || (havesib && (haveindex || scale != 0)));
3369 
3370 		if (!info->intel_syntax)
3371 			if (info->modrm.mod != 0 || base == 5)
3372 			{
3373 				char scratchbuf[100];
3374 
3375 				if (havedisp || riprel)
3376 					print_displacement(info, scratchbuf, disp);
3377 				else
3378 					print_operand_value(info, scratchbuf, 1, disp);
3379 				oappend(info, scratchbuf);
3380 				if (riprel)
3381 				{
3382 					set_op(info, disp, 1);
3383 					oappend(info, !addr32flag ? "(%rip)" : "(%eip)");
3384 				}
3385 			}
3386 
3387 		if ((havebase || haveindex || riprel) && (bytemode != v_bnd_mode) && (bytemode != bnd_mode))
3388 			info->used_prefixes |= PREFIX_ADDR;
3389 
3390 		if (havedisp || (info->intel_syntax && riprel))
3391 		{
3392 			*info->obufp++ = info->open_char;
3393 			if (info->intel_syntax && riprel)
3394 			{
3395 				set_op(info, disp, 1);
3396 				oappend(info, !addr32flag ? "rip" : "eip");
3397 			}
3398 			*info->obufp = '\0';
3399 			if (havebase)
3400 				oappend(info, info->address_mode == mode_64bit && !addr32flag ? info->names64[rbase] : info->names32[rbase]);
3401 			if (havesib)
3402 			{
3403 				/* ESP/RSP won't allow index.  If base isn't ESP/RSP,
3404 				   print index to tell base + index from base.  */
3405 				if (scale != 0 || needindex || haveindex || (havebase && base != ESP_REG_NUM))
3406 				{
3407 					char scratchbuf[100];
3408 
3409 					if (!info->intel_syntax || havebase)
3410 					{
3411 						*info->obufp++ = info->separator_char;
3412 						*info->obufp = '\0';
3413 					}
3414 					if (haveindex)
3415 						oappend(info, info->address_mode == mode_64bit && !addr32flag ? indexes64[vindex] : indexes32[vindex]);
3416 					else
3417 						oappend(info, info->address_mode == mode_64bit && !addr32flag ? info->index64 : info->index32);
3418 
3419 					*info->obufp++ = info->scale_char;
3420 					*info->obufp = '\0';
3421 					sprintf(scratchbuf, "%d", 1 << scale);
3422 					oappend(info, scratchbuf);
3423 				}
3424 			}
3425 			if (info->intel_syntax && (disp || info->modrm.mod != 0 || base == 5))
3426 			{
3427 				char scratchbuf[100];
3428 
3429 				if (!havedisp || (bfd_signed_vma) disp >= 0)
3430 				{
3431 					*info->obufp++ = '+';
3432 					*info->obufp = '\0';
3433 				} else if (info->modrm.mod != 1 && disp != -disp)
3434 				{
3435 					*info->obufp++ = '-';
3436 					*info->obufp = '\0';
3437 					disp = -(bfd_signed_vma) disp;
3438 				}
3439 
3440 				if (havedisp)
3441 					print_displacement(info, scratchbuf, disp);
3442 				else
3443 					print_operand_value(info, scratchbuf, 1, disp);
3444 				oappend(info, scratchbuf);
3445 			}
3446 
3447 			*info->obufp++ = info->close_char;
3448 			*info->obufp = '\0';
3449 		} else if (info->intel_syntax)
3450 		{
3451 			if (info->modrm.mod != 0 || base == 5)
3452 			{
3453 				char scratchbuf[100];
3454 
3455 				if (!info->active_seg_prefix)
3456 				{
3457 					oappend(info, info->names_seg[ds_reg - es_reg]);
3458 					oappend(info, ":");
3459 				}
3460 				print_operand_value(info, scratchbuf, 1, disp);
3461 				oappend(info, scratchbuf);
3462 			}
3463 		}
3464 	} else
3465 	{
3466 		/* 16 bit address mode */
3467 		info->used_prefixes |= info->prefixes & PREFIX_ADDR;
3468 		switch (info->modrm.mod)
3469 		{
3470 		case 0:
3471 			if (info->modrm.rm == 6)
3472 			{
3473 				disp = xget16(info);
3474 				if ((disp & 0x8000) != 0)
3475 					disp -= 0x10000;
3476 			}
3477 			break;
3478 		case 1:
3479 			FETCH_DATA(info, info->codep + 1);
3480 			disp = *info->codep++;
3481 			if ((disp & 0x80) != 0)
3482 				disp -= 0x100;
3483 			break;
3484 		case 2:
3485 			disp = xget16(info);
3486 			if ((disp & 0x8000) != 0)
3487 				disp -= 0x10000;
3488 			break;
3489 		}
3490 
3491 		if (!info->intel_syntax)
3492 			if (info->modrm.mod != 0 || info->modrm.rm == 6)
3493 			{
3494 				char scratchbuf[100];
3495 
3496 				print_displacement(info, scratchbuf, disp);
3497 				oappend(info, scratchbuf);
3498 			}
3499 
3500 		if (info->modrm.mod != 0 || info->modrm.rm != 6)
3501 		{
3502 			*info->obufp++ = info->open_char;
3503 			*info->obufp = '\0';
3504 			oappend(info, info->index16[info->modrm.rm]);
3505 			if (info->intel_syntax && (disp || info->modrm.mod != 0 || info->modrm.rm == 6))
3506 			{
3507 				char scratchbuf[100];
3508 
3509 				if ((bfd_signed_vma) disp >= 0)
3510 				{
3511 					*info->obufp++ = '+';
3512 					*info->obufp = '\0';
3513 				} else if (info->modrm.mod != 1)
3514 				{
3515 					*info->obufp++ = '-';
3516 					*info->obufp = '\0';
3517 					disp = -(bfd_signed_vma) disp;
3518 				}
3519 
3520 				print_displacement(info, scratchbuf, disp);
3521 				oappend(info, scratchbuf);
3522 			}
3523 
3524 			*info->obufp++ = info->close_char;
3525 			*info->obufp = '\0';
3526 		} else if (info->intel_syntax)
3527 		{
3528 			char scratchbuf[100];
3529 
3530 			if (!info->active_seg_prefix)
3531 			{
3532 				oappend(info, info->names_seg[ds_reg - es_reg]);
3533 				oappend(info, ":");
3534 			}
3535 			print_operand_value(info, scratchbuf, 1, disp & 0xffff);
3536 			oappend(info, scratchbuf);
3537 		}
3538 	}
3539 	if (info->vex.evex && info->vex.b && (bytemode == x_mode || bytemode == xmmq_mode || bytemode == evex_half_bcst_xmmq_mode))
3540 	{
3541 		if (info->vex.w || bytemode == xmmq_mode || bytemode == evex_half_bcst_xmmq_mode)
3542 		{
3543 			switch (info->vex.length)
3544 			{
3545 			case 128:
3546 				oappend(info, "{1to2}");
3547 				break;
3548 			case 256:
3549 				oappend(info, "{1to4}");
3550 				break;
3551 			case 512:
3552 				oappend(info, "{1to8}");
3553 				break;
3554 			default:
3555 				internal_error(info);
3556 				return;
3557 			}
3558 		} else
3559 		{
3560 			switch (info->vex.length)
3561 			{
3562 			case 128:
3563 				oappend(info, "{1to4}");
3564 				break;
3565 			case 256:
3566 				oappend(info, "{1to8}");
3567 				break;
3568 			case 512:
3569 				oappend(info, "{1to16}");
3570 				break;
3571 			default:
3572 				internal_error(info);
3573 				return;
3574 			}
3575 		}
3576 	}
3577 }
3578 
3579 
OP_E(disassemble_info * info,int bytemode,int sizeflag)3580 static void OP_E(disassemble_info *info, int bytemode, int sizeflag)
3581 {
3582 	/* Skip mod/rm byte.  */
3583 	MODRM_CHECK(return);
3584 	info->codep++;
3585 
3586 	if (info->modrm.mod == 3)
3587 		OP_E_register(info, bytemode, sizeflag);
3588 	else
3589 		OP_E_memory(info, bytemode, sizeflag);
3590 }
3591 
3592 
OP_G(disassemble_info * info,int bytemode,int sizeflag)3593 static void OP_G(disassemble_info *info, int bytemode, int sizeflag)
3594 {
3595 	int add = 0;
3596 
3597 	USED_REX(REX_R);
3598 	if (info->rex & REX_R)
3599 		add += 8;
3600 	switch (bytemode)
3601 	{
3602 	case b_mode:
3603 		USED_REX(0);
3604 		if (info->rex)
3605 			oappend(info, info->names8rex[info->modrm.reg + add]);
3606 		else
3607 			oappend(info, info->names8[info->modrm.reg + add]);
3608 		break;
3609 	case w_mode:
3610 		oappend(info, info->names16[info->modrm.reg + add]);
3611 		break;
3612 	case d_mode:
3613 	case db_mode:
3614 	case dw_mode:
3615 		oappend(info, info->names32[info->modrm.reg + add]);
3616 		break;
3617 	case q_mode:
3618 		oappend(info, info->names64[info->modrm.reg + add]);
3619 		break;
3620 	case bnd_mode:
3621 		oappend(info, info->names_bnd[info->modrm.reg]);
3622 		break;
3623 	case v_mode:
3624 	case dq_mode:
3625 	case dqb_mode:
3626 	case dqd_mode:
3627 	case dqw_mode:
3628 	case dqw_swap_mode:
3629 		USED_REX(REX_W);
3630 		if (info->rex & REX_W)
3631 			oappend(info, info->names64[info->modrm.reg + add]);
3632 		else
3633 		{
3634 			if ((sizeflag & DFLAG) || bytemode != v_mode)
3635 				oappend(info, info->names32[info->modrm.reg + add]);
3636 			else
3637 				oappend(info, info->names16[info->modrm.reg + add]);
3638 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
3639 		}
3640 		break;
3641 	case m_mode:
3642 		if (info->address_mode == mode_64bit)
3643 			oappend(info, info->names64[info->modrm.reg + add]);
3644 		else
3645 			oappend(info, info->names32[info->modrm.reg + add]);
3646 		break;
3647 	case mask_bd_mode:
3648 	case mask_mode:
3649 		if ((info->modrm.reg + add) > 0x7)
3650 		{
3651 			oappend(info, "(bad)");
3652 			return;
3653 		}
3654 		oappend(info, info->names_mask[info->modrm.reg + add]);
3655 		break;
3656 	default:
3657 		internal_error(info);
3658 		break;
3659 	}
3660 }
3661 
3662 
OP_indirE(disassemble_info * info,int bytemode,int sizeflag)3663 static void OP_indirE(disassemble_info *info, int bytemode, int sizeflag)
3664 {
3665 	if (!info->intel_syntax)
3666 		oappend(info, "*");
3667 	OP_E(info, bytemode, sizeflag);
3668 }
3669 
3670 
OP_Skip_MODRM(disassemble_info * info,int bytemode,int sizeflag)3671 static void OP_Skip_MODRM(disassemble_info *info, int bytemode, int sizeflag)
3672 {
3673 	UNUSED(bytemode);
3674 	UNUSED(sizeflag);
3675 	/* Skip mod/rm byte.  */
3676 	MODRM_CHECK(return);
3677 	info->codep++;
3678 }
3679 
3680 
OP_REG(disassemble_info * info,int code,int sizeflag)3681 static void OP_REG(disassemble_info *info, int code, int sizeflag)
3682 {
3683 	const char *s;
3684 	int add;
3685 
3686 	switch (code)
3687 	{
3688 	case es_reg:
3689 	case ss_reg:
3690 	case cs_reg:
3691 	case ds_reg:
3692 	case fs_reg:
3693 	case gs_reg:
3694 		oappend(info, info->names_seg[code - es_reg]);
3695 		return;
3696 	}
3697 
3698 	USED_REX(REX_B);
3699 	if (info->rex & REX_B)
3700 		add = 8;
3701 	else
3702 		add = 0;
3703 
3704 	switch (code)
3705 	{
3706 	case ax_reg:
3707 	case cx_reg:
3708 	case dx_reg:
3709 	case bx_reg:
3710 	case sp_reg:
3711 	case bp_reg:
3712 	case si_reg:
3713 	case di_reg:
3714 		s = info->names16[code - ax_reg + add];
3715 		break;
3716 	case al_reg:
3717 	case ah_reg:
3718 	case cl_reg:
3719 	case ch_reg:
3720 	case dl_reg:
3721 	case dh_reg:
3722 	case bl_reg:
3723 	case bh_reg:
3724 		USED_REX(0);
3725 		if (info->rex)
3726 			s = info->names8rex[code - al_reg + add];
3727 		else
3728 			s = info->names8[code - al_reg];
3729 		break;
3730 	case rAX_reg:
3731 	case rCX_reg:
3732 	case rDX_reg:
3733 	case rBX_reg:
3734 	case rSP_reg:
3735 	case rBP_reg:
3736 	case rSI_reg:
3737 	case rDI_reg:
3738 		if (info->address_mode == mode_64bit && ((sizeflag & DFLAG) || (info->rex & REX_W)))
3739 		{
3740 			s = info->names64[code - rAX_reg + add];
3741 			break;
3742 		}
3743 		code += eAX_reg - rAX_reg;
3744 		/* Fall through.  */
3745 	case eAX_reg:
3746 	case eCX_reg:
3747 	case eDX_reg:
3748 	case eBX_reg:
3749 	case eSP_reg:
3750 	case eBP_reg:
3751 	case eSI_reg:
3752 	case eDI_reg:
3753 		USED_REX(REX_W);
3754 		if (info->rex & REX_W)
3755 			s = info->names64[code - eAX_reg + add];
3756 		else
3757 		{
3758 			if (sizeflag & DFLAG)
3759 				s = info->names32[code - eAX_reg + add];
3760 			else
3761 				s = info->names16[code - eAX_reg + add];
3762 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
3763 		}
3764 		break;
3765 	default:
3766 		s = INTERNAL_DISASSEMBLER_ERROR;
3767 		break;
3768 	}
3769 	oappend(info, s);
3770 }
3771 
3772 
OP_IMREG(disassemble_info * info,int code,int sizeflag)3773 static void OP_IMREG(disassemble_info *info, int code, int sizeflag)
3774 {
3775 	const char *s;
3776 
3777 	switch (code)
3778 	{
3779 	case indir_dx_reg:
3780 		if (info->intel_syntax)
3781 			s = "dx";
3782 		else
3783 			s = "(%dx)";
3784 		break;
3785 	case ax_reg:
3786 	case cx_reg:
3787 	case dx_reg:
3788 	case bx_reg:
3789 	case sp_reg:
3790 	case bp_reg:
3791 	case si_reg:
3792 	case di_reg:
3793 		s = info->names16[code - ax_reg];
3794 		break;
3795 	case es_reg:
3796 	case ss_reg:
3797 	case cs_reg:
3798 	case ds_reg:
3799 	case fs_reg:
3800 	case gs_reg:
3801 		s = info->names_seg[code - es_reg];
3802 		break;
3803 	case al_reg:
3804 	case ah_reg:
3805 	case cl_reg:
3806 	case ch_reg:
3807 	case dl_reg:
3808 	case dh_reg:
3809 	case bl_reg:
3810 	case bh_reg:
3811 		USED_REX(0);
3812 		if (info->rex)
3813 			s = info->names8rex[code - al_reg];
3814 		else
3815 			s = info->names8[code - al_reg];
3816 		break;
3817 	case eAX_reg:
3818 	case eCX_reg:
3819 	case eDX_reg:
3820 	case eBX_reg:
3821 	case eSP_reg:
3822 	case eBP_reg:
3823 	case eSI_reg:
3824 	case eDI_reg:
3825 		USED_REX(REX_W);
3826 		if (info->rex & REX_W)
3827 			s = info->names64[code - eAX_reg];
3828 		else
3829 		{
3830 			if (sizeflag & DFLAG)
3831 				s = info->names32[code - eAX_reg];
3832 			else
3833 				s = info->names16[code - eAX_reg];
3834 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
3835 		}
3836 		break;
3837 	case z_mode_ax_reg:
3838 		if ((info->rex & REX_W) || (sizeflag & DFLAG))
3839 			s = *info->names32;
3840 		else
3841 			s = *info->names16;
3842 		if (!(info->rex & REX_W))
3843 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
3844 		break;
3845 	default:
3846 		s = INTERNAL_DISASSEMBLER_ERROR;
3847 		break;
3848 	}
3849 	oappend(info, s);
3850 }
3851 
3852 
OP_I(disassemble_info * info,int bytemode,int sizeflag)3853 static void OP_I(disassemble_info *info, int bytemode, int sizeflag)
3854 {
3855 	bfd_signed_vma op;
3856 	bfd_signed_vma mask = -1;
3857 	char scratchbuf[100];
3858 
3859 	switch (bytemode)
3860 	{
3861 	case b_mode:
3862 		FETCH_DATA(info, info->codep + 1);
3863 		op = *info->codep++;
3864 		mask = 0xff;
3865 		break;
3866 	case q_mode:
3867 		if (info->address_mode == mode_64bit)
3868 		{
3869 			op = xget32s(info);
3870 			break;
3871 		}
3872 		/* Fall through.  */
3873 	case v_mode:
3874 		USED_REX(REX_W);
3875 		if (info->rex & REX_W)
3876 			op = xget32s(info);
3877 		else
3878 		{
3879 			if (sizeflag & DFLAG)
3880 			{
3881 				op = xget32(info);
3882 				mask = 0xffffffff;
3883 			} else
3884 			{
3885 				op = xget16(info);
3886 				mask = 0xfffff;
3887 			}
3888 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
3889 		}
3890 		break;
3891 	case w_mode:
3892 		mask = 0xfffff;
3893 		op = xget16(info);
3894 		break;
3895 	case const_1_mode:
3896 		if (info->intel_syntax)
3897 			oappend(info, "1");
3898 		return;
3899 	default:
3900 		internal_error(info);
3901 		return;
3902 	}
3903 
3904 	op &= mask;
3905 	scratchbuf[0] = '$';
3906 	print_operand_value(info, scratchbuf + 1, 1, op);
3907 	oappend_maybe_intel(info, scratchbuf);
3908 }
3909 
3910 
OP_I64(disassemble_info * info,int bytemode,int sizeflag)3911 static void OP_I64(disassemble_info *info, int bytemode, int sizeflag)
3912 {
3913 	bfd_signed_vma op;
3914 	bfd_signed_vma mask = -1;
3915 	char scratchbuf[100];
3916 
3917 	if (info->address_mode != mode_64bit)
3918 	{
3919 		OP_I(info, bytemode, sizeflag);
3920 		return;
3921 	}
3922 
3923 	switch (bytemode)
3924 	{
3925 	case b_mode:
3926 		FETCH_DATA(info, info->codep + 1);
3927 		op = *info->codep++;
3928 		mask = 0xff;
3929 		break;
3930 	case v_mode:
3931 		USED_REX(REX_W);
3932 		if (info->rex & REX_W)
3933 			op = xget64(info);
3934 		else
3935 		{
3936 			if (sizeflag & DFLAG)
3937 			{
3938 				op = xget32(info);
3939 				mask = 0xffffffff;
3940 			} else
3941 			{
3942 				op = xget16(info);
3943 				mask = 0xfffff;
3944 			}
3945 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
3946 		}
3947 		break;
3948 	case w_mode:
3949 		mask = 0xfffff;
3950 		op = xget16(info);
3951 		break;
3952 	default:
3953 		internal_error(info);
3954 		return;
3955 	}
3956 
3957 	op &= mask;
3958 	scratchbuf[0] = '$';
3959 	print_operand_value(info, scratchbuf + 1, 1, op);
3960 	oappend_maybe_intel(info, scratchbuf);
3961 }
3962 
3963 
OP_sI(disassemble_info * info,int bytemode,int sizeflag)3964 static void OP_sI(disassemble_info *info, int bytemode, int sizeflag)
3965 {
3966 	bfd_signed_vma op;
3967 	char scratchbuf[100];
3968 
3969 	switch (bytemode)
3970 	{
3971 	case b_mode:
3972 	case b_T_mode:
3973 		FETCH_DATA(info, info->codep + 1);
3974 		op = *info->codep++;
3975 		if ((op & 0x80) != 0)
3976 			op -= 0x100;
3977 		if (bytemode == b_T_mode)
3978 		{
3979 			if (info->address_mode != mode_64bit || !((sizeflag & DFLAG) || (info->rex & REX_W)))
3980 			{
3981 				/* The operand-size prefix is overridden by a REX prefix.  */
3982 				if ((sizeflag & DFLAG) || (info->rex & REX_W))
3983 					op &= 0xffffffff;
3984 				else
3985 					op &= 0xffff;
3986 			}
3987 		} else
3988 		{
3989 			if (!(info->rex & REX_W))
3990 			{
3991 				if (sizeflag & DFLAG)
3992 					op &= 0xffffffff;
3993 				else
3994 					op &= 0xffff;
3995 			}
3996 		}
3997 		break;
3998 	case v_mode:
3999 		/* The operand-size prefix is overridden by a REX prefix.  */
4000 		if ((sizeflag & DFLAG) || (info->rex & REX_W))
4001 			op = xget32s(info);
4002 		else
4003 			op = xget16(info);
4004 		break;
4005 	default:
4006 		internal_error(info);
4007 		return;
4008 	}
4009 
4010 	scratchbuf[0] = '$';
4011 	print_operand_value(info, scratchbuf + 1, 1, op);
4012 	oappend_maybe_intel(info, scratchbuf);
4013 }
4014 
4015 
OP_J(disassemble_info * info,int bytemode,int sizeflag)4016 static void OP_J(disassemble_info *info, int bytemode, int sizeflag)
4017 {
4018 	bfd_vma disp;
4019 	bfd_vma mask = -1;
4020 	bfd_vma segment = 0;
4021 	char scratchbuf[100];
4022 
4023 	switch (bytemode)
4024 	{
4025 	case b_mode:
4026 		FETCH_DATA(info, info->codep + 1);
4027 		disp = *info->codep++;
4028 		if ((disp & 0x80) != 0)
4029 			disp -= 0x100;
4030 		break;
4031 	case v_mode:
4032 		if (info->isa64 == amd64)
4033 			USED_REX(REX_W);
4034 		if ((sizeflag & DFLAG) || (info->address_mode == mode_64bit && (info->isa64 != amd64 || (info->rex & REX_W))))
4035 			disp = xget32s(info);
4036 		else
4037 		{
4038 			disp = xget16(info);
4039 			if ((disp & 0x8000) != 0)
4040 				disp -= 0x10000;
4041 			/* In 16bit mode, address is wrapped around at 64k within
4042 			   the same segment.  Otherwise, a data16 prefix on a jump
4043 			   instruction means that the pc is masked to 16 bits after
4044 			   the displacement is added!  */
4045 			mask = 0xffff;
4046 			if ((info->prefixes & PREFIX_DATA) == 0)
4047 				segment = ((info->start_pc + (info->codep - info->start_codep)) & ~((bfd_vma) 0xffff));
4048 		}
4049 		if (info->address_mode != mode_64bit || (info->isa64 == amd64 && !(info->rex & REX_W)))
4050 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4051 		break;
4052 	default:
4053 		internal_error(info);
4054 		return;
4055 	}
4056 	disp = ((info->start_pc + (info->codep - info->start_codep) + disp) & mask) | segment;
4057 	set_op(info, disp, 0);
4058 	print_operand_value(info, scratchbuf, 1, disp);
4059 	oappend(info, scratchbuf);
4060 }
4061 
4062 
OP_SEG(disassemble_info * info,int bytemode,int sizeflag)4063 static void OP_SEG(disassemble_info *info, int bytemode, int sizeflag)
4064 {
4065 	if (bytemode == w_mode)
4066 		oappend(info, info->names_seg[info->modrm.reg]);
4067 	else
4068 		OP_E(info, info->modrm.mod == 3 ? bytemode : w_mode, sizeflag);
4069 }
4070 
4071 
OP_DIR(disassemble_info * info,int bytemode,int sizeflag)4072 static void OP_DIR(disassemble_info *info, int bytemode, int sizeflag)
4073 {
4074 	int seg;
4075 	int offset;
4076 	char scratchbuf[100];
4077 
4078 	UNUSED(bytemode);
4079 	if (sizeflag & DFLAG)
4080 	{
4081 		offset = xget32(info);
4082 		seg = xget16(info);
4083 	} else
4084 	{
4085 		offset = xget16(info);
4086 		seg = xget16(info);
4087 	}
4088 	info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4089 	if (info->intel_syntax)
4090 		sprintf(scratchbuf, "0x%x:0x%x", seg, offset);
4091 	else
4092 		sprintf(scratchbuf, "$0x%x,$0x%x", seg, offset);
4093 	oappend(info, scratchbuf);
4094 }
4095 
4096 
OP_OFF(disassemble_info * info,int bytemode,int sizeflag)4097 static void OP_OFF(disassemble_info *info, int bytemode, int sizeflag)
4098 {
4099 	bfd_vma off;
4100 	char scratchbuf[100];
4101 
4102 	if (info->intel_syntax && (sizeflag & SUFFIX_ALWAYS))
4103 		intel_operand_size(info, bytemode, sizeflag);
4104 	append_seg(info);
4105 
4106 	if ((sizeflag & AFLAG) || info->address_mode == mode_64bit)
4107 		off = xget32(info);
4108 	else
4109 		off = xget16(info);
4110 
4111 	if (info->intel_syntax)
4112 	{
4113 		if (!info->active_seg_prefix)
4114 		{
4115 			oappend(info, info->names_seg[ds_reg - es_reg]);
4116 			oappend(info, ":");
4117 		}
4118 	}
4119 	print_operand_value(info, scratchbuf, 1, off);
4120 	oappend(info, scratchbuf);
4121 }
4122 
4123 
OP_OFF64(disassemble_info * info,int bytemode,int sizeflag)4124 static void OP_OFF64(disassemble_info *info, int bytemode, int sizeflag)
4125 {
4126 	bfd_vma off;
4127 	char scratchbuf[100];
4128 
4129 	if (info->address_mode != mode_64bit || (info->prefixes & PREFIX_ADDR))
4130 	{
4131 		OP_OFF(info, bytemode, sizeflag);
4132 		return;
4133 	}
4134 
4135 	if (info->intel_syntax && (sizeflag & SUFFIX_ALWAYS))
4136 		intel_operand_size(info, bytemode, sizeflag);
4137 	append_seg(info);
4138 
4139 	off = xget64(info);
4140 
4141 	if (info->intel_syntax)
4142 	{
4143 		if (!info->active_seg_prefix)
4144 		{
4145 			oappend(info, info->names_seg[ds_reg - es_reg]);
4146 			oappend(info, ":");
4147 		}
4148 	}
4149 	print_operand_value(info, scratchbuf, 1, off);
4150 	oappend(info, scratchbuf);
4151 }
4152 
4153 
ptr_reg(disassemble_info * info,int code,int sizeflag)4154 static void ptr_reg(disassemble_info *info, int code, int sizeflag)
4155 {
4156 	const char *s;
4157 
4158 	*info->obufp++ = info->open_char;
4159 	info->used_prefixes |= (info->prefixes & PREFIX_ADDR);
4160 	if (info->address_mode == mode_64bit)
4161 	{
4162 		if (!(sizeflag & AFLAG))
4163 			s = info->names32[code - eAX_reg];
4164 		else
4165 			s = info->names64[code - eAX_reg];
4166 	} else if (sizeflag & AFLAG)
4167 		s = info->names32[code - eAX_reg];
4168 	else
4169 		s = info->names16[code - eAX_reg];
4170 	oappend(info, s);
4171 	*info->obufp++ = info->close_char;
4172 	*info->obufp = 0;
4173 }
4174 
4175 
OP_ESreg(disassemble_info * info,int code,int sizeflag)4176 static void OP_ESreg(disassemble_info *info, int code, int sizeflag)
4177 {
4178 	if (info->intel_syntax)
4179 	{
4180 		switch (info->codep[-1])
4181 		{
4182 		case 0x6d:						/* insw/insl */
4183 			intel_operand_size(info, z_mode, sizeflag);
4184 			break;
4185 		case 0xa5:						/* movsw/movsl/movsq */
4186 		case 0xa7:						/* cmpsw/cmpsl/cmpsq */
4187 		case 0xab:						/* stosw/stosl */
4188 		case 0xaf:						/* scasw/scasl */
4189 			intel_operand_size(info, v_mode, sizeflag);
4190 			break;
4191 		default:
4192 			intel_operand_size(info, b_mode, sizeflag);
4193 			break;
4194 		}
4195 	}
4196 	oappend_maybe_intel(info, "%es:");
4197 	ptr_reg(info, code, sizeflag);
4198 }
4199 
4200 
OP_DSreg(disassemble_info * info,int code,int sizeflag)4201 static void OP_DSreg(disassemble_info *info, int code, int sizeflag)
4202 {
4203 	if (info->intel_syntax)
4204 	{
4205 		switch (info->codep[-1])
4206 		{
4207 		case 0x6f:						/* outsw/outsl */
4208 			intel_operand_size(info, z_mode, sizeflag);
4209 			break;
4210 		case 0xa5:						/* movsw/movsl/movsq */
4211 		case 0xa7:						/* cmpsw/cmpsl/cmpsq */
4212 		case 0xad:						/* lodsw/lodsl/lodsq */
4213 			intel_operand_size(info, v_mode, sizeflag);
4214 			break;
4215 		default:
4216 			intel_operand_size(info, b_mode, sizeflag);
4217 			break;
4218 		}
4219 	}
4220 	/* Set active_seg_prefix to PREFIX_DS if it is unset so that the
4221 	   default segment register DS is printed.  */
4222 	if (!info->active_seg_prefix)
4223 		info->active_seg_prefix = PREFIX_DS;
4224 	append_seg(info);
4225 	ptr_reg(info, code, sizeflag);
4226 }
4227 
4228 
OP_C(disassemble_info * info,int bytemode,int sizeflag)4229 static void OP_C(disassemble_info *info, int bytemode, int sizeflag)
4230 {
4231 	int add;
4232 	char scratchbuf[100];
4233 
4234 	UNUSED(bytemode);
4235 	UNUSED(sizeflag);
4236 	if (info->rex & REX_R)
4237 	{
4238 		USED_REX(REX_R);
4239 		add = 8;
4240 	} else if (info->address_mode != mode_64bit && (info->prefixes & PREFIX_LOCK))
4241 	{
4242 		info->all_prefixes[info->last_lock_prefix] = 0;
4243 		info->used_prefixes |= PREFIX_LOCK;
4244 		add = 8;
4245 	} else
4246 	{
4247 		add = 0;
4248 	}
4249 	sprintf(scratchbuf, "%%cr%d", info->modrm.reg + add);
4250 	oappend_maybe_intel(info, scratchbuf);
4251 }
4252 
4253 
OP_D(disassemble_info * info,int bytemode,int sizeflag)4254 static void OP_D(disassemble_info *info, int bytemode, int sizeflag)
4255 {
4256 	int add;
4257 	char scratchbuf[100];
4258 
4259 	UNUSED(bytemode);
4260 	UNUSED(sizeflag);
4261 	USED_REX(REX_R);
4262 	if (info->rex & REX_R)
4263 		add = 8;
4264 	else
4265 		add = 0;
4266 	if (info->intel_syntax)
4267 		sprintf(scratchbuf, "db%d", info->modrm.reg + add);
4268 	else
4269 		sprintf(scratchbuf, "%%db%d", info->modrm.reg + add);
4270 	oappend(info, scratchbuf);
4271 }
4272 
4273 
OP_T(disassemble_info * info,int bytemode,int sizeflag)4274 static void OP_T(disassemble_info *info, int bytemode, int sizeflag)
4275 {
4276 	char scratchbuf[100];
4277 
4278 	UNUSED(bytemode);
4279 	UNUSED(sizeflag);
4280 	sprintf(scratchbuf, "%%tr%d", info->modrm.reg);
4281 	oappend_maybe_intel(info, scratchbuf);
4282 }
4283 
4284 
OP_R(disassemble_info * info,int bytemode,int sizeflag)4285 static void OP_R(disassemble_info *info, int bytemode, int sizeflag)
4286 {
4287 	/* Skip mod/rm byte.  */
4288 	MODRM_CHECK(return);
4289 	info->codep++;
4290 	OP_E_register(info, bytemode, sizeflag);
4291 }
4292 
4293 
OP_MMX(disassemble_info * info,int bytemode,int sizeflag)4294 static void OP_MMX(disassemble_info *info, int bytemode, int sizeflag)
4295 {
4296 	int reg = info->modrm.reg;
4297 	const char *const *names;
4298 
4299 	UNUSED(bytemode);
4300 	UNUSED(sizeflag);
4301 	info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4302 	if (info->prefixes & PREFIX_DATA)
4303 	{
4304 		names = info->names_xmm;
4305 		USED_REX(REX_R);
4306 		if (info->rex & REX_R)
4307 			reg += 8;
4308 	} else
4309 	{
4310 		names = info->names_mm;
4311 	}
4312 	oappend(info, names[reg]);
4313 }
4314 
4315 
OP_XMM(disassemble_info * info,int bytemode,int sizeflag)4316 static void OP_XMM(disassemble_info *info, int bytemode, int sizeflag)
4317 {
4318 	int reg = info->modrm.reg;
4319 	const char *const *names;
4320 
4321 	UNUSED(sizeflag);
4322 	USED_REX(REX_R);
4323 	if (info->rex & REX_R)
4324 		reg += 8;
4325 	if (info->vex.evex)
4326 	{
4327 		if (!info->vex.r)
4328 			reg += 16;
4329 	}
4330 
4331 	if (info->need_vex
4332 		&& bytemode != xmm_mode
4333 		&& bytemode != xmmq_mode
4334 		&& bytemode != evex_half_bcst_xmmq_mode && bytemode != ymm_mode && bytemode != scalar_mode)
4335 	{
4336 		switch (info->vex.length)
4337 		{
4338 		case 128:
4339 			names = info->names_xmm;
4340 			break;
4341 		case 256:
4342 			if (info->vex.w || (bytemode != vex_vsib_q_w_dq_mode && bytemode != vex_vsib_q_w_d_mode))
4343 				names = info->names_ymm;
4344 			else
4345 				names = info->names_xmm;
4346 			break;
4347 		case 512:
4348 			names = info->names_zmm;
4349 			break;
4350 		default:
4351 			internal_error(info);
4352 			return;
4353 		}
4354 	} else if (bytemode == xmmq_mode || bytemode == evex_half_bcst_xmmq_mode)
4355 	{
4356 		switch (info->vex.length)
4357 		{
4358 		case 128:
4359 		case 256:
4360 			names = info->names_xmm;
4361 			break;
4362 		case 512:
4363 			names = info->names_ymm;
4364 			break;
4365 		default:
4366 			internal_error(info);
4367 			return;
4368 		}
4369 	} else if (bytemode == ymm_mode)
4370 	{
4371 		names = info->names_ymm;
4372 	} else
4373 	{
4374 		names = info->names_xmm;
4375 	}
4376 	oappend(info, names[reg]);
4377 }
4378 
4379 
OP_EM(disassemble_info * info,int bytemode,int sizeflag)4380 static void OP_EM(disassemble_info *info, int bytemode, int sizeflag)
4381 {
4382 	int reg;
4383 	const char *const *names;
4384 
4385 	if (info->modrm.mod != 3)
4386 	{
4387 		if (info->intel_syntax && (bytemode == v_mode || bytemode == v_swap_mode))
4388 		{
4389 			bytemode = (info->prefixes & PREFIX_DATA) ? x_mode : q_mode;
4390 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4391 		}
4392 		OP_E(info, bytemode, sizeflag);
4393 		return;
4394 	}
4395 
4396 	if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
4397 		swap_operand(info);
4398 
4399 	/* Skip mod/rm byte.  */
4400 	MODRM_CHECK(return);
4401 	info->codep++;
4402 	info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4403 	reg = info->modrm.rm;
4404 	if (info->prefixes & PREFIX_DATA)
4405 	{
4406 		names = info->names_xmm;
4407 		USED_REX(REX_B);
4408 		if (info->rex & REX_B)
4409 			reg += 8;
4410 	} else
4411 	{
4412 		names = info->names_mm;
4413 	}
4414 	oappend(info, names[reg]);
4415 }
4416 
4417 
4418 /* cvt* are the only instructions in sse2 which have
4419    both SSE and MMX operands and also have 0x66 prefix
4420    in their opcode. 0x66 was originally used to differentiate
4421    between SSE and MMX instruction(operands). So we have to handle the
4422    cvt* separately using OP_EMC and OP_MXC */
OP_EMC(disassemble_info * info,int bytemode,int sizeflag)4423 static void OP_EMC(disassemble_info *info, int bytemode, int sizeflag)
4424 {
4425 	if (info->modrm.mod != 3)
4426 	{
4427 		if (info->intel_syntax && bytemode == v_mode)
4428 		{
4429 			bytemode = (info->prefixes & PREFIX_DATA) ? x_mode : q_mode;
4430 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4431 		}
4432 		OP_E(info, bytemode, sizeflag);
4433 		return;
4434 	}
4435 
4436 	/* Skip mod/rm byte.  */
4437 	MODRM_CHECK(return);
4438 	info->codep++;
4439 	info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4440 	oappend(info, info->names_mm[info->modrm.rm]);
4441 }
4442 
4443 
OP_MXC(disassemble_info * info,int bytemode,int sizeflag)4444 static void OP_MXC(disassemble_info *info, int bytemode, int sizeflag)
4445 {
4446 	UNUSED(bytemode);
4447 	UNUSED(sizeflag);
4448 	info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4449 	oappend(info, info->names_mm[info->modrm.reg]);
4450 }
4451 
4452 
OP_EX(disassemble_info * info,int bytemode,int sizeflag)4453 static void OP_EX(disassemble_info *info, int bytemode, int sizeflag)
4454 {
4455 	int reg;
4456 	const char *const *names;
4457 
4458 	/* Skip mod/rm byte.  */
4459 	MODRM_CHECK(return);
4460 	info->codep++;
4461 
4462 	if (info->modrm.mod != 3)
4463 	{
4464 		OP_E_memory(info, bytemode, sizeflag);
4465 		return;
4466 	}
4467 
4468 	reg = info->modrm.rm;
4469 	USED_REX(REX_B);
4470 	if (info->rex & REX_B)
4471 		reg += 8;
4472 	if (info->vex.evex)
4473 	{
4474 		USED_REX(REX_X);
4475 		if ((info->rex & REX_X))
4476 			reg += 16;
4477 	}
4478 
4479 	if ((sizeflag & SUFFIX_ALWAYS)
4480 		&& (bytemode == x_swap_mode ||
4481 			bytemode == d_swap_mode ||
4482 			bytemode == dqw_swap_mode ||
4483 			bytemode == d_scalar_swap_mode ||
4484 			bytemode == q_swap_mode ||
4485 			bytemode == q_scalar_swap_mode))
4486 		swap_operand(info);
4487 
4488 	if (info->need_vex
4489 		&& bytemode != xmm_mode
4490 		&& bytemode != xmmdw_mode
4491 		&& bytemode != xmmqd_mode
4492 		&& bytemode != xmm_mb_mode
4493 		&& bytemode != xmm_mw_mode
4494 		&& bytemode != xmm_md_mode
4495 		&& bytemode != xmm_mq_mode
4496 		&& bytemode != xmm_mdq_mode
4497 		&& bytemode != xmmq_mode
4498 		&& bytemode != evex_half_bcst_xmmq_mode
4499 		&& bytemode != ymm_mode
4500 		&& bytemode != d_scalar_mode
4501 		&& bytemode != d_scalar_swap_mode
4502 		&& bytemode != q_scalar_mode
4503 		&& bytemode != q_scalar_swap_mode
4504 		&& bytemode != vex_scalar_w_dq_mode)
4505 	{
4506 		switch (info->vex.length)
4507 		{
4508 		case 128:
4509 			names = info->names_xmm;
4510 			break;
4511 		case 256:
4512 			names = info->names_ymm;
4513 			break;
4514 		case 512:
4515 			names = info->names_zmm;
4516 			break;
4517 		default:
4518 			internal_error(info);
4519 			return;
4520 		}
4521 	} else if (bytemode == xmmq_mode || bytemode == evex_half_bcst_xmmq_mode)
4522 	{
4523 		switch (info->vex.length)
4524 		{
4525 		case 128:
4526 		case 256:
4527 			names = info->names_xmm;
4528 			break;
4529 		case 512:
4530 			names = info->names_ymm;
4531 			break;
4532 		default:
4533 			internal_error(info);
4534 			return;
4535 		}
4536 	} else if (bytemode == ymm_mode)
4537 	{
4538 		names = info->names_ymm;
4539 	} else
4540 	{
4541 		names = info->names_xmm;
4542 	}
4543 	oappend(info, names[reg]);
4544 }
4545 
4546 
OP_MS(disassemble_info * info,int bytemode,int sizeflag)4547 static void OP_MS(disassemble_info *info, int bytemode, int sizeflag)
4548 {
4549 	if (info->modrm.mod == 3)
4550 		OP_EM(info, bytemode, sizeflag);
4551 	else
4552 		BadOp(info);
4553 }
4554 
4555 
OP_XS(disassemble_info * info,int bytemode,int sizeflag)4556 static void OP_XS(disassemble_info *info, int bytemode, int sizeflag)
4557 {
4558 	if (info->modrm.mod == 3)
4559 		OP_EX(info, bytemode, sizeflag);
4560 	else
4561 		BadOp(info);
4562 }
4563 
4564 
OP_M(disassemble_info * info,int bytemode,int sizeflag)4565 static void OP_M(disassemble_info *info, int bytemode, int sizeflag)
4566 {
4567 	if (info->modrm.mod == 3)
4568 		/* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
4569 		BadOp(info);
4570 	else
4571 		OP_E(info, bytemode, sizeflag);
4572 }
4573 
4574 
OP_0f07(disassemble_info * info,int bytemode,int sizeflag)4575 static void OP_0f07(disassemble_info *info, int bytemode, int sizeflag)
4576 {
4577 	if (info->modrm.mod != 3 || info->modrm.rm != 0)
4578 		BadOp(info);
4579 	else
4580 		OP_E(info, bytemode, sizeflag);
4581 }
4582 
4583 /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
4584    32bit mode and "xchg %rax,%rax" in 64bit mode.  */
4585 
NOP_Fixup1(disassemble_info * info,int bytemode,int sizeflag)4586 static void NOP_Fixup1(disassemble_info *info, int bytemode, int sizeflag)
4587 {
4588 	if ((info->prefixes & PREFIX_DATA) != 0 || (info->rex != 0 && info->rex != 0x48 && info->address_mode == mode_64bit))
4589 		OP_REG(info, bytemode, sizeflag);
4590 	else
4591 		strcpy(info->obuf, "nop");
4592 }
4593 
4594 
NOP_Fixup2(disassemble_info * info,int bytemode,int sizeflag)4595 static void NOP_Fixup2(disassemble_info *info, int bytemode, int sizeflag)
4596 {
4597 	if ((info->prefixes & PREFIX_DATA) != 0 || (info->rex != 0 && info->rex != 0x48 && info->address_mode == mode_64bit))
4598 		OP_IMREG(info, bytemode, sizeflag);
4599 }
4600 
4601 
4602 static const char *const Suffix3DNow[] = {
4603 /* 00 */ NULL, NULL, NULL, NULL,
4604 /* 04 */ NULL, NULL, NULL, NULL,
4605 /* 08 */ NULL, NULL, NULL, NULL,
4606 /* 0C */ "pi2fw", "pi2fd", NULL, NULL,
4607 /* 10 */ NULL, NULL, NULL, NULL,
4608 /* 14 */ NULL, NULL, NULL, NULL,
4609 /* 18 */ NULL, NULL, NULL, NULL,
4610 /* 1C */ "pf2iw", "pf2id", NULL, NULL,
4611 /* 20 */ NULL, NULL, NULL, NULL,
4612 /* 24 */ NULL, NULL, NULL, NULL,
4613 /* 28 */ NULL, NULL, NULL, NULL,
4614 /* 2C */ NULL, NULL, NULL, NULL,
4615 /* 30 */ NULL, NULL, NULL, NULL,
4616 /* 34 */ NULL, NULL, NULL, NULL,
4617 /* 38 */ NULL, NULL, NULL, NULL,
4618 /* 3C */ NULL, NULL, NULL, NULL,
4619 /* 40 */ NULL, NULL, NULL, NULL,
4620 /* 44 */ NULL, NULL, NULL, NULL,
4621 /* 48 */ NULL, NULL, NULL, NULL,
4622 /* 4C */ NULL, NULL, NULL, NULL,
4623 /* 50 */ NULL, NULL, NULL, NULL,
4624 /* 54 */ NULL, NULL, NULL, NULL,
4625 /* 58 */ NULL, NULL, NULL, NULL,
4626 /* 5C */ NULL, NULL, NULL, NULL,
4627 /* 60 */ NULL, NULL, NULL, NULL,
4628 /* 64 */ NULL, NULL, NULL, NULL,
4629 /* 68 */ NULL, NULL, NULL, NULL,
4630 /* 6C */ NULL, NULL, NULL, NULL,
4631 /* 70 */ NULL, NULL, NULL, NULL,
4632 /* 74 */ NULL, NULL, NULL, NULL,
4633 /* 78 */ NULL, NULL, NULL, NULL,
4634 /* 7C */ NULL, NULL, NULL, NULL,
4635 /* 80 */ NULL, NULL, NULL, NULL,
4636 /* 84 */ NULL, NULL, NULL, NULL,
4637 /* 88 */ NULL, NULL, "pfnacc", NULL,
4638 /* 8C */ NULL, NULL, "pfpnacc", NULL,
4639 /* 90 */ "pfcmpge", NULL, NULL, NULL,
4640 /* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
4641 /* 98 */ NULL, NULL, "pfsub", NULL,
4642 /* 9C */ NULL, NULL, "pfadd", NULL,
4643 /* A0 */ "pfcmpgt", NULL, NULL, NULL,
4644 /* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
4645 /* A8 */ NULL, NULL, "pfsubr", NULL,
4646 /* AC */ NULL, NULL, "pfacc", NULL,
4647 /* B0 */ "pfcmpeq", NULL, NULL, NULL,
4648 /* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
4649 /* B8 */ NULL, NULL, NULL, "pswapd",
4650 /* BC */ NULL, NULL, NULL, "pavgusb",
4651 /* C0 */ NULL, NULL, NULL, NULL,
4652 /* C4 */ NULL, NULL, NULL, NULL,
4653 /* C8 */ NULL, NULL, NULL, NULL,
4654 /* CC */ NULL, NULL, NULL, NULL,
4655 /* D0 */ NULL, NULL, NULL, NULL,
4656 /* D4 */ NULL, NULL, NULL, NULL,
4657 /* D8 */ NULL, NULL, NULL, NULL,
4658 /* DC */ NULL, NULL, NULL, NULL,
4659 /* E0 */ NULL, NULL, NULL, NULL,
4660 /* E4 */ NULL, NULL, NULL, NULL,
4661 /* E8 */ NULL, NULL, NULL, NULL,
4662 /* EC */ NULL, NULL, NULL, NULL,
4663 /* F0 */ NULL, NULL, NULL, NULL,
4664 /* F4 */ NULL, NULL, NULL, NULL,
4665 /* F8 */ NULL, NULL, NULL, NULL,
4666 /* FC */ NULL, NULL, NULL, NULL,
4667 };
4668 
OP_3DNowSuffix(disassemble_info * info,int bytemode,int sizeflag)4669 static void OP_3DNowSuffix(disassemble_info *info, int bytemode, int sizeflag)
4670 {
4671 	const char *mnemonic;
4672 
4673 	UNUSED(bytemode);
4674 	UNUSED(sizeflag);
4675 	FETCH_DATA(info, info->codep + 1);
4676 	/* AMD 3DNow! instructions are specified by an opcode suffix in the
4677 	   place where an 8-bit immediate would normally go.  ie. the last
4678 	   byte of the instruction.  */
4679 	info->obufp = info->mnemonicendp;
4680 	mnemonic = Suffix3DNow[*info->codep++ & 0xff];
4681 	if (mnemonic)
4682 	{
4683 		oappend(info, mnemonic);
4684 	} else
4685 	{
4686 		/* Since a variable sized modrm/sib chunk is between the start
4687 		   of the opcode (0x0f0f) and the opcode suffix, we need to do
4688 		   all the modrm processing first, and don't know until now that
4689 		   we have a bad opcode.  This necessitates some cleaning up.  */
4690 		info->op_out[0][0] = '\0';
4691 		info->op_out[1][0] = '\0';
4692 		BadOp(info);
4693 	}
4694 	info->mnemonicendp = info->obufp;
4695 }
4696 
4697 static struct op const simd_cmp_op[] = {
4698 	{ STRING_COMMA_LEN("eq") },
4699 	{ STRING_COMMA_LEN("lt") },
4700 	{ STRING_COMMA_LEN("le") },
4701 	{ STRING_COMMA_LEN("unord") },
4702 	{ STRING_COMMA_LEN("neq") },
4703 	{ STRING_COMMA_LEN("nlt") },
4704 	{ STRING_COMMA_LEN("nle") },
4705 	{ STRING_COMMA_LEN("ord") }
4706 };
4707 
4708 
CMP_Fixup(disassemble_info * info,int bytemode,int sizeflag)4709 static void CMP_Fixup(disassemble_info *info, int bytemode, int sizeflag)
4710 {
4711 	unsigned int cmp_type;
4712 	char scratchbuf[100];
4713 
4714 	UNUSED(bytemode);
4715 	UNUSED(sizeflag);
4716 	FETCH_DATA(info, info->codep + 1);
4717 	cmp_type = *info->codep++ & 0xff;
4718 	if (cmp_type < ARRAY_SIZE(simd_cmp_op))
4719 	{
4720 		char suffix[3];
4721 
4722 		char *p = info->mnemonicendp - 2;
4723 
4724 		suffix[0] = p[0];
4725 		suffix[1] = p[1];
4726 		suffix[2] = '\0';
4727 		sprintf(p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
4728 		info->mnemonicendp += simd_cmp_op[cmp_type].len;
4729 	} else
4730 	{
4731 		/* We have a reserved extension byte.  Output it directly.  */
4732 		scratchbuf[0] = '$';
4733 		print_operand_value(info, scratchbuf + 1, 1, cmp_type);
4734 		oappend_maybe_intel(info, scratchbuf);
4735 	}
4736 }
4737 
4738 
OP_Mwaitx(disassemble_info * info,int bytemode,int sizeflag)4739 static void OP_Mwaitx(disassemble_info *info, int bytemode, int sizeflag)
4740 {
4741 	UNUSED(bytemode);
4742 	UNUSED(sizeflag);
4743 	/* mwaitx %eax,%ecx,%ebx */
4744 	if (!info->intel_syntax)
4745 	{
4746 		const char *const *names = (info->address_mode == mode_64bit ? info->names64 : info->names32);
4747 
4748 		strcpy(info->op_out[0], names[0]);
4749 		strcpy(info->op_out[1], names[1]);
4750 		strcpy(info->op_out[2], names[3]);
4751 		info->two_source_ops = 1;
4752 	}
4753 	/* Skip mod/rm byte.  */
4754 	MODRM_CHECK(return);
4755 	info->codep++;
4756 }
4757 
4758 
OP_Mwait(disassemble_info * info,int bytemode,int sizeflag)4759 static void OP_Mwait(disassemble_info *info, int bytemode, int sizeflag)
4760 {
4761 	UNUSED(bytemode);
4762 	UNUSED(sizeflag);
4763 	/* mwait %eax,%ecx  */
4764 	if (!info->intel_syntax)
4765 	{
4766 		const char *const *names = (info->address_mode == mode_64bit ? info->names64 : info->names32);
4767 
4768 		strcpy(info->op_out[0], names[0]);
4769 		strcpy(info->op_out[1], names[1]);
4770 		info->two_source_ops = 1;
4771 	}
4772 	/* Skip mod/rm byte.  */
4773 	MODRM_CHECK(return);
4774 	info->codep++;
4775 }
4776 
4777 
OP_Monitor(disassemble_info * info,int bytemode,int sizeflag)4778 static void OP_Monitor(disassemble_info *info, int bytemode, int sizeflag)
4779 {
4780 	UNUSED(bytemode);
4781 	UNUSED(sizeflag);
4782 	/* monitor %eax,%ecx,%edx"  */
4783 	if (!info->intel_syntax)
4784 	{
4785 		const char *const *op1_names;
4786 		const char *const *names = (info->address_mode == mode_64bit ? info->names64 : info->names32);
4787 
4788 		if (!(info->prefixes & PREFIX_ADDR))
4789 		{
4790 			op1_names = (info->address_mode == mode_16bit ? info->names16 : names);
4791 		} else
4792 		{
4793 			/* Remove "addr16/addr32".  */
4794 			info->all_prefixes[info->last_addr_prefix] = 0;
4795 			op1_names = (info->address_mode != mode_32bit ? info->names32 : info->names16);
4796 			info->used_prefixes |= PREFIX_ADDR;
4797 		}
4798 		strcpy(info->op_out[0], op1_names[0]);
4799 		strcpy(info->op_out[1], names[1]);
4800 		strcpy(info->op_out[2], names[2]);
4801 		info->two_source_ops = 1;
4802 	}
4803 	/* Skip mod/rm byte.  */
4804 	MODRM_CHECK(return);
4805 	info->codep++;
4806 }
4807 
4808 
4809 /* We use the high bit to indicate different name for the same
4810    prefix.  */
4811 #define REP_PREFIX	(REPE_PREFIX_OPCODE | 0x100)
4812 #define XACQUIRE_PREFIX	(XACQUIRE_PREFIX_OPCODE | 0x200)
4813 #define XRELEASE_PREFIX	(XRELEASE_PREFIX_OPCODE | 0x400)
4814 #define BND_PREFIX	(BND_PREFIX_OPCODE | 0x400)
4815 
REP_Fixup(disassemble_info * info,int bytemode,int sizeflag)4816 static void REP_Fixup(disassemble_info *info, int bytemode, int sizeflag)
4817 {
4818 	/* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
4819 	   lods and stos.  */
4820 	if (info->prefixes & PREFIX_REPZ)
4821 		info->all_prefixes[info->last_repz_prefix] = REP_PREFIX;
4822 
4823 	switch (bytemode)
4824 	{
4825 	case al_reg:
4826 	case eAX_reg:
4827 	case indir_dx_reg:
4828 		OP_IMREG(info, bytemode, sizeflag);
4829 		break;
4830 	case eDI_reg:
4831 		OP_ESreg(info, bytemode, sizeflag);
4832 		break;
4833 	case eSI_reg:
4834 		OP_DSreg(info, bytemode, sizeflag);
4835 		break;
4836 	default:
4837 		internal_error(info);
4838 		return;
4839 	}
4840 }
4841 
4842 
4843 /* For BND-prefixed instructions 0xF2 prefix should be displayed as
4844    "bnd".  */
4845 
BND_Fixup(disassemble_info * info,int bytemode,int sizeflag)4846 static void BND_Fixup(disassemble_info *info, int bytemode, int sizeflag)
4847 {
4848 	UNUSED(bytemode);
4849 	UNUSED(sizeflag);
4850 	if (info->prefixes & PREFIX_REPNZ)
4851 		info->all_prefixes[info->last_repnz_prefix] = BND_PREFIX;
4852 }
4853 
4854 /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
4855    "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
4856  */
4857 
HLE_Fixup1(disassemble_info * info,int bytemode,int sizeflag)4858 static void HLE_Fixup1(disassemble_info *info, int bytemode, int sizeflag)
4859 {
4860 	if (info->modrm.mod != 3 && (info->prefixes & PREFIX_LOCK) != 0)
4861 	{
4862 		if (info->prefixes & PREFIX_REPZ)
4863 			info->all_prefixes[info->last_repz_prefix] = XRELEASE_PREFIX;
4864 		if (info->prefixes & PREFIX_REPNZ)
4865 			info->all_prefixes[info->last_repnz_prefix] = XACQUIRE_PREFIX;
4866 	}
4867 
4868 	OP_E(info, bytemode, sizeflag);
4869 }
4870 
4871 /* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
4872    "xacquire"/"xrelease" for memory operand.  No check for LOCK prefix.
4873  */
4874 
HLE_Fixup2(disassemble_info * info,int bytemode,int sizeflag)4875 static void HLE_Fixup2(disassemble_info *info, int bytemode, int sizeflag)
4876 {
4877 	if (info->modrm.mod != 3)
4878 	{
4879 		if (info->prefixes & PREFIX_REPZ)
4880 			info->all_prefixes[info->last_repz_prefix] = XRELEASE_PREFIX;
4881 		if (info->prefixes & PREFIX_REPNZ)
4882 			info->all_prefixes[info->last_repnz_prefix] = XACQUIRE_PREFIX;
4883 	}
4884 
4885 	OP_E(info, bytemode, sizeflag);
4886 }
4887 
4888 /* Similar to OP_E.  But the 0xf3 prefixes should be displayed as
4889    "xrelease" for memory operand.  No check for LOCK prefix.   */
4890 
HLE_Fixup3(disassemble_info * info,int bytemode,int sizeflag)4891 static void HLE_Fixup3(disassemble_info *info, int bytemode, int sizeflag)
4892 {
4893 	if (info->modrm.mod != 3 && info->last_repz_prefix > info->last_repnz_prefix && (info->prefixes & PREFIX_REPZ) != 0)
4894 		info->all_prefixes[info->last_repz_prefix] = XRELEASE_PREFIX;
4895 
4896 	OP_E(info, bytemode, sizeflag);
4897 }
4898 
CMPXCHG8B_Fixup(disassemble_info * info,int bytemode,int sizeflag)4899 static void CMPXCHG8B_Fixup(disassemble_info *info, int bytemode, int sizeflag)
4900 {
4901 	USED_REX(REX_W);
4902 	if (info->rex & REX_W)
4903 	{
4904 		/* Change cmpxchg8b to cmpxchg16b.  */
4905 		char *p = info->mnemonicendp - 2;
4906 
4907 		info->mnemonicendp = stpcpy(p, "16b");
4908 		bytemode = o_mode;
4909 	} else if ((info->prefixes & PREFIX_LOCK) != 0)
4910 	{
4911 		if (info->prefixes & PREFIX_REPZ)
4912 			info->all_prefixes[info->last_repz_prefix] = XRELEASE_PREFIX;
4913 		if (info->prefixes & PREFIX_REPNZ)
4914 			info->all_prefixes[info->last_repnz_prefix] = XACQUIRE_PREFIX;
4915 	}
4916 
4917 	OP_M(info, bytemode, sizeflag);
4918 }
4919 
4920 
XMM_Fixup(disassemble_info * info,int reg,int sizeflag)4921 static void XMM_Fixup(disassemble_info *info, int reg, int sizeflag)
4922 {
4923 	const char *const *names;
4924 
4925 	UNUSED(sizeflag);
4926 	if (info->need_vex)
4927 	{
4928 		switch (info->vex.length)
4929 		{
4930 		case 128:
4931 			names = info->names_xmm;
4932 			break;
4933 		case 256:
4934 			names = info->names_ymm;
4935 			break;
4936 		default:
4937 			internal_error(info);
4938 			return;
4939 		}
4940 	} else
4941 	{
4942 		names = info->names_xmm;
4943 	}
4944 	oappend(info, names[reg]);
4945 }
4946 
4947 
CRC32_Fixup(disassemble_info * info,int bytemode,int sizeflag)4948 static void CRC32_Fixup(disassemble_info *info, int bytemode, int sizeflag)
4949 {
4950 	/* Add proper suffix to "crc32".  */
4951 	char *p = info->mnemonicendp;
4952 
4953 	switch (bytemode)
4954 	{
4955 	case b_mode:
4956 		if (info->intel_syntax)
4957 			goto skip;
4958 
4959 		*p++ = 'b';
4960 		break;
4961 	case v_mode:
4962 		if (info->intel_syntax)
4963 			goto skip;
4964 
4965 		USED_REX(REX_W);
4966 		if (info->rex & REX_W)
4967 			*p++ = 'q';
4968 		else
4969 		{
4970 			if (sizeflag & DFLAG)
4971 				*p++ = 'l';
4972 			else
4973 				*p++ = 'w';
4974 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
4975 		}
4976 		break;
4977 	default:
4978 		internal_error(info);
4979 		break;
4980 	}
4981 	info->mnemonicendp = p;
4982 	*p = '\0';
4983 
4984   skip:
4985 	if (info->modrm.mod == 3)
4986 	{
4987 		int add;
4988 
4989 		/* Skip mod/rm byte.  */
4990 		MODRM_CHECK(return);
4991 		info->codep++;
4992 
4993 		USED_REX(REX_B);
4994 		add = (info->rex & REX_B) ? 8 : 0;
4995 		if (bytemode == b_mode)
4996 		{
4997 			USED_REX(0);
4998 			if (info->rex)
4999 				oappend(info, info->names8rex[info->modrm.rm + add]);
5000 			else
5001 				oappend(info, info->names8[info->modrm.rm + add]);
5002 		} else
5003 		{
5004 			USED_REX(REX_W);
5005 			if (info->rex & REX_W)
5006 				oappend(info, info->names64[info->modrm.rm + add]);
5007 			else if ((info->prefixes & PREFIX_DATA))
5008 				oappend(info, info->names16[info->modrm.rm + add]);
5009 			else
5010 				oappend(info, info->names32[info->modrm.rm + add]);
5011 		}
5012 	} else
5013 	{
5014 		OP_E(info, bytemode, sizeflag);
5015 	}
5016 }
5017 
5018 
FXSAVE_Fixup(disassemble_info * info,int bytemode,int sizeflag)5019 static void FXSAVE_Fixup(disassemble_info *info, int bytemode, int sizeflag)
5020 {
5021 	/* Add proper suffix to "fxsave" and "fxrstor".  */
5022 	USED_REX(REX_W);
5023 	if (info->rex & REX_W)
5024 	{
5025 		char *p = info->mnemonicendp;
5026 
5027 		*p++ = '6';
5028 		*p++ = '4';
5029 		*p = '\0';
5030 		info->mnemonicendp = p;
5031 	}
5032 	OP_M(info, bytemode, sizeflag);
5033 }
5034 
5035 
5036 /* Display the destination register operand for instructions with
5037    VEX. */
5038 
OP_VEX(disassemble_info * info,int bytemode,int sizeflag)5039 static void OP_VEX(disassemble_info *info, int bytemode, int sizeflag)
5040 {
5041 	int reg;
5042 	const char *const *names;
5043 
5044 	UNUSED(sizeflag);
5045 	if (!info->need_vex)
5046 	{
5047 		internal_error(info);
5048 		return;
5049 	}
5050 
5051 	if (!info->need_vex_reg)
5052 		return;
5053 
5054 	reg = info->vex.register_specifier;
5055 	if (info->vex.evex)
5056 	{
5057 		if (!info->vex.v)
5058 			reg += 16;
5059 	}
5060 
5061 	if (bytemode == vex_scalar_mode)
5062 	{
5063 		oappend(info, info->names_xmm[reg]);
5064 		return;
5065 	}
5066 
5067 	switch (info->vex.length)
5068 	{
5069 	case 128:
5070 		switch (bytemode)
5071 		{
5072 		case vex_mode:
5073 		case vex128_mode:
5074 		case vex_vsib_q_w_dq_mode:
5075 		case vex_vsib_q_w_d_mode:
5076 			names = info->names_xmm;
5077 			break;
5078 		case dq_mode:
5079 			if (info->vex.w)
5080 				names = info->names64;
5081 			else
5082 				names = info->names32;
5083 			break;
5084 		case mask_bd_mode:
5085 		case mask_mode:
5086 			if (reg > 0x7)
5087 			{
5088 				oappend(info, "(bad)");
5089 				return;
5090 			}
5091 			names = info->names_mask;
5092 			break;
5093 		default:
5094 			internal_error(info);
5095 			return;
5096 		}
5097 		break;
5098 	case 256:
5099 		switch (bytemode)
5100 		{
5101 		case vex_mode:
5102 		case vex256_mode:
5103 			names = info->names_ymm;
5104 			break;
5105 		case vex_vsib_q_w_dq_mode:
5106 		case vex_vsib_q_w_d_mode:
5107 			names = info->vex.w ? info->names_ymm : info->names_xmm;
5108 			break;
5109 		case mask_bd_mode:
5110 		case mask_mode:
5111 			if (reg > 0x7)
5112 			{
5113 				oappend(info, "(bad)");
5114 				return;
5115 			}
5116 			names = info->names_mask;
5117 			break;
5118 		default:
5119 			/* See PR binutils/20893 for a reproducer.  */
5120 			oappend(info, "(bad)");
5121 			return;
5122 		}
5123 		break;
5124 	case 512:
5125 		names = info->names_zmm;
5126 		break;
5127 	default:
5128 		internal_error(info);
5129 		return;
5130 	}
5131 	oappend(info, names[reg]);
5132 }
5133 
5134 
5135 /* Get the VEX immediate byte without moving codep.  */
5136 
get_vex_imm8(disassemble_info * info,int sizeflag,int opnum)5137 static unsigned char get_vex_imm8(disassemble_info *info, int sizeflag, int opnum)
5138 {
5139 	int bytes_before_imm = 0;
5140 
5141 	if (info->modrm.mod != 3)
5142 	{
5143 		/* There are SIB/displacement bytes.  */
5144 		if ((sizeflag & AFLAG) || info->address_mode == mode_64bit)
5145 		{
5146 			/* 32/64 bit address mode */
5147 			int base = info->modrm.rm;
5148 
5149 			/* Check SIB byte.  */
5150 			if (base == 4)
5151 			{
5152 				FETCH_DATA(info, info->codep + 1);
5153 				base = *info->codep & 7;
5154 				/* When decoding the third source, don't increase
5155 				   bytes_before_imm as this has already been incremented
5156 				   by one in OP_E_memory while decoding the second
5157 				   source operand.  */
5158 				if (opnum == 0)
5159 					bytes_before_imm++;
5160 			}
5161 
5162 			/* Don't increase bytes_before_imm when decoding the third source,
5163 			   it has already been incremented by OP_E_memory while decoding
5164 			   the second source operand.  */
5165 			if (opnum == 0)
5166 			{
5167 				switch (info->modrm.mod)
5168 				{
5169 				case 0:
5170 					/* When modrm.rm == 5 or modrm.rm == 4 and base in
5171 					   SIB == 5, there is a 4 byte displacement.  */
5172 					if (base != 5)
5173 						/* No displacement. */
5174 						break;
5175 					/* Fall through.  */
5176 				case 2:
5177 					/* 4 byte displacement.  */
5178 					bytes_before_imm += 4;
5179 					break;
5180 				case 1:
5181 					/* 1 byte displacement.  */
5182 					bytes_before_imm++;
5183 					break;
5184 				}
5185 			}
5186 		} else
5187 		{
5188 			/* 16 bit address mode */
5189 			/* Don't increase bytes_before_imm when decoding the third source,
5190 			   it has already been incremented by OP_E_memory while decoding
5191 			   the second source operand.  */
5192 			if (opnum == 0)
5193 			{
5194 				switch (info->modrm.mod)
5195 				{
5196 				case 0:
5197 					/* When modrm.rm == 6, there is a 2 byte displacement.  */
5198 					if (info->modrm.rm != 6)
5199 						/* No displacement. */
5200 						break;
5201 					/* Fall through.  */
5202 				case 2:
5203 					/* 2 byte displacement.  */
5204 					bytes_before_imm += 2;
5205 					break;
5206 				case 1:
5207 					/* 1 byte displacement: when decoding the third source,
5208 					   don't increase bytes_before_imm as this has already
5209 					   been incremented by one in OP_E_memory while decoding
5210 					   the second source operand.  */
5211 					if (opnum == 0)
5212 						bytes_before_imm++;
5213 
5214 					break;
5215 				}
5216 			}
5217 		}
5218 	}
5219 
5220 	FETCH_DATA(info, info->codep + bytes_before_imm + 1);
5221 	return info->codep[bytes_before_imm];
5222 }
5223 
5224 
OP_EX_VexReg(disassemble_info * info,int bytemode,int sizeflag,int reg)5225 static void OP_EX_VexReg(disassemble_info *info, int bytemode, int sizeflag, int reg)
5226 {
5227 	const char *const *names;
5228 
5229 	if (reg == -1 && info->modrm.mod != 3)
5230 	{
5231 		OP_E_memory(info, bytemode, sizeflag);
5232 		return;
5233 	} else
5234 	{
5235 		if (reg == -1)
5236 		{
5237 			reg = info->modrm.rm;
5238 			USED_REX(REX_B);
5239 			if (info->rex & REX_B)
5240 				reg += 8;
5241 		} else if (reg > 7 && info->address_mode != mode_64bit)
5242 		{
5243 			BadOp(info);
5244 		}
5245 	}
5246 
5247 	switch (info->vex.length)
5248 	{
5249 	case 128:
5250 		names = info->names_xmm;
5251 		break;
5252 	case 256:
5253 		names = info->names_ymm;
5254 		break;
5255 	default:
5256 		internal_error(info);
5257 		return;
5258 	}
5259 	oappend(info, names[reg]);
5260 }
5261 
5262 
OP_EX_VexImmW(disassemble_info * info,int bytemode,int sizeflag)5263 static void OP_EX_VexImmW(disassemble_info *info, int bytemode, int sizeflag)
5264 {
5265 	int reg = -1;
5266 	char scratchbuf[100];
5267 
5268 	if (info->vex_w_done == 0)
5269 	{
5270 		info->vex_w_done = 1;
5271 
5272 		/* Skip mod/rm byte.  */
5273 		MODRM_CHECK(return);
5274 		info->codep++;
5275 
5276 		info->vex_imm8 = get_vex_imm8(info, sizeflag, 0);
5277 
5278 		if (info->vex.w)
5279 			reg = info->vex_imm8 >> 4;
5280 
5281 		OP_EX_VexReg(info, bytemode, sizeflag, reg);
5282 	} else if (info->vex_w_done == 1)
5283 	{
5284 		info->vex_w_done = 2;
5285 
5286 		if (!info->vex.w)
5287 			reg = info->vex_imm8 >> 4;
5288 
5289 		OP_EX_VexReg(info, bytemode, sizeflag, reg);
5290 	} else
5291 	{
5292 		/* Output the imm8 directly.  */
5293 		scratchbuf[0] = '$';
5294 		print_operand_value(info, scratchbuf + 1, 1, info->vex_imm8 & 0xf);
5295 		oappend_maybe_intel(info, scratchbuf);
5296 		info->codep++;
5297 	}
5298 }
5299 
5300 
OP_Vex_2src(disassemble_info * info,int bytemode,int sizeflag)5301 static void OP_Vex_2src(disassemble_info *info, int bytemode, int sizeflag)
5302 {
5303 	if (info->modrm.mod == 3)
5304 	{
5305 		int reg = info->modrm.rm;
5306 
5307 		USED_REX(REX_B);
5308 		if (info->rex & REX_B)
5309 			reg += 8;
5310 		oappend(info, info->names_xmm[reg]);
5311 	} else
5312 	{
5313 		if (info->intel_syntax && (bytemode == v_mode || bytemode == v_swap_mode))
5314 		{
5315 			bytemode = (info->prefixes & PREFIX_DATA) ? x_mode : q_mode;
5316 			info->used_prefixes |= (info->prefixes & PREFIX_DATA);
5317 		}
5318 		OP_E(info, bytemode, sizeflag);
5319 	}
5320 }
5321 
5322 
OP_Vex_2src_1(disassemble_info * info,int bytemode,int sizeflag)5323 static void OP_Vex_2src_1(disassemble_info *info, int bytemode, int sizeflag)
5324 {
5325 	if (info->modrm.mod == 3)
5326 	{
5327 		/* Skip mod/rm byte.   */
5328 		MODRM_CHECK(return);
5329 		info->codep++;
5330 	}
5331 
5332 	if (info->vex.w)
5333 		oappend(info, info->names_xmm[info->vex.register_specifier]);
5334 	else
5335 		OP_Vex_2src(info, bytemode, sizeflag);
5336 }
5337 
5338 
OP_Vex_2src_2(disassemble_info * info,int bytemode,int sizeflag)5339 static void OP_Vex_2src_2(disassemble_info *info, int bytemode, int sizeflag)
5340 {
5341 	if (info->vex.w)
5342 		OP_Vex_2src(info, bytemode, sizeflag);
5343 	else
5344 		oappend(info, info->names_xmm[info->vex.register_specifier]);
5345 }
5346 
5347 
OP_EX_VexW(disassemble_info * info,int bytemode,int sizeflag)5348 static void OP_EX_VexW(disassemble_info *info, int bytemode, int sizeflag)
5349 {
5350 	int reg = -1;
5351 
5352 	if (!info->vex_w_done)
5353 	{
5354 		info->vex_w_done = 1;
5355 
5356 		/* Skip mod/rm byte.  */
5357 		MODRM_CHECK(return);
5358 		info->codep++;
5359 
5360 		if (info->vex.w)
5361 			reg = get_vex_imm8(info, sizeflag, 0) >> 4;
5362 	} else
5363 	{
5364 		if (!info->vex.w)
5365 			reg = get_vex_imm8(info, sizeflag, 1) >> 4;
5366 	}
5367 
5368 	OP_EX_VexReg(info, bytemode, sizeflag, reg);
5369 }
5370 
5371 
VEXI4_Fixup(disassemble_info * info,int bytemode,int sizeflag)5372 static void VEXI4_Fixup(disassemble_info *info, int bytemode, int sizeflag)
5373 {
5374 	UNUSED(bytemode);
5375 	UNUSED(sizeflag);
5376 	/* Skip the immediate byte and check for invalid bits.  */
5377 	FETCH_DATA(info, info->codep + 1);
5378 	if (*info->codep++ & 0xf)
5379 		BadOp(info);
5380 }
5381 
5382 
OP_REG_VexI4(disassemble_info * info,int bytemode,int sizeflag)5383 static void OP_REG_VexI4(disassemble_info *info, int bytemode, int sizeflag)
5384 {
5385 	int reg;
5386 	const char *const *names;
5387 
5388 	UNUSED(sizeflag);
5389 
5390 	FETCH_DATA(info, info->codep + 1);
5391 	reg = *info->codep++;
5392 
5393 	if (bytemode != x_mode)
5394 	{
5395 		internal_error(info);
5396 		return;
5397 	}
5398 
5399 	if (reg & 0xf)
5400 		BadOp(info);
5401 
5402 	reg >>= 4;
5403 	if (reg > 7 && info->address_mode != mode_64bit)
5404 		BadOp(info);
5405 
5406 	switch (info->vex.length)
5407 	{
5408 	case 128:
5409 		names = info->names_xmm;
5410 		break;
5411 	case 256:
5412 		names = info->names_ymm;
5413 		break;
5414 	default:
5415 		internal_error(info);
5416 		return;
5417 	}
5418 	oappend(info, names[reg]);
5419 }
5420 
5421 
OP_XMM_VexW(disassemble_info * info,int bytemode,int sizeflag)5422 static void OP_XMM_VexW(disassemble_info *info, int bytemode, int sizeflag)
5423 {
5424 	/* Turn off the REX.W bit since it is used for swapping operands
5425 	   now.  */
5426 	info->rex &= ~REX_W;
5427 	OP_XMM(info, bytemode, sizeflag);
5428 }
5429 
5430 
OP_EX_Vex(disassemble_info * info,int bytemode,int sizeflag)5431 static void OP_EX_Vex(disassemble_info *info, int bytemode, int sizeflag)
5432 {
5433 	if (info->modrm.mod != 3)
5434 	{
5435 		if (info->vex.register_specifier != 0)
5436 			BadOp(info);
5437 		info->need_vex_reg = 0;
5438 	}
5439 	OP_EX(info, bytemode, sizeflag);
5440 }
5441 
5442 
OP_XMM_Vex(disassemble_info * info,int bytemode,int sizeflag)5443 static void OP_XMM_Vex(disassemble_info *info, int bytemode, int sizeflag)
5444 {
5445 	if (info->modrm.mod != 3)
5446 	{
5447 		if (info->vex.register_specifier != 0)
5448 			BadOp(info);
5449 		info->need_vex_reg = 0;
5450 	}
5451 	OP_XMM(info, bytemode, sizeflag);
5452 }
5453 
5454 
VZERO_Fixup(disassemble_info * info,int bytemode,int sizeflag)5455 static void VZERO_Fixup(disassemble_info *info, int bytemode, int sizeflag)
5456 {
5457 	UNUSED(bytemode);
5458 	UNUSED(sizeflag);
5459 	switch (info->vex.length)
5460 	{
5461 	case 128:
5462 		info->mnemonicendp = stpcpy(info->obuf, "vzeroupper");
5463 		break;
5464 	case 256:
5465 		info->mnemonicendp = stpcpy(info->obuf, "vzeroall");
5466 		break;
5467 	default:
5468 		internal_error(info);
5469 		return;
5470 	}
5471 }
5472 
5473 
5474 static struct op const vex_cmp_op[] = {
5475 	{ STRING_COMMA_LEN("eq") },
5476 	{ STRING_COMMA_LEN("lt") },
5477 	{ STRING_COMMA_LEN("le") },
5478 	{ STRING_COMMA_LEN("unord") },
5479 	{ STRING_COMMA_LEN("neq") },
5480 	{ STRING_COMMA_LEN("nlt") },
5481 	{ STRING_COMMA_LEN("nle") },
5482 	{ STRING_COMMA_LEN("ord") },
5483 	{ STRING_COMMA_LEN("eq_uq") },
5484 	{ STRING_COMMA_LEN("nge") },
5485 	{ STRING_COMMA_LEN("ngt") },
5486 	{ STRING_COMMA_LEN("false") },
5487 	{ STRING_COMMA_LEN("neq_oq") },
5488 	{ STRING_COMMA_LEN("ge") },
5489 	{ STRING_COMMA_LEN("gt") },
5490 	{ STRING_COMMA_LEN("true") },
5491 	{ STRING_COMMA_LEN("eq_os") },
5492 	{ STRING_COMMA_LEN("lt_oq") },
5493 	{ STRING_COMMA_LEN("le_oq") },
5494 	{ STRING_COMMA_LEN("unord_s") },
5495 	{ STRING_COMMA_LEN("neq_us") },
5496 	{ STRING_COMMA_LEN("nlt_uq") },
5497 	{ STRING_COMMA_LEN("nle_uq") },
5498 	{ STRING_COMMA_LEN("ord_s") },
5499 	{ STRING_COMMA_LEN("eq_us") },
5500 	{ STRING_COMMA_LEN("nge_uq") },
5501 	{ STRING_COMMA_LEN("ngt_uq") },
5502 	{ STRING_COMMA_LEN("false_os") },
5503 	{ STRING_COMMA_LEN("neq_os") },
5504 	{ STRING_COMMA_LEN("ge_oq") },
5505 	{ STRING_COMMA_LEN("gt_oq") },
5506 	{ STRING_COMMA_LEN("true_us") },
5507 };
5508 
VCMP_Fixup(disassemble_info * info,int bytemode,int sizeflag)5509 static void VCMP_Fixup(disassemble_info *info, int bytemode, int sizeflag)
5510 {
5511 	unsigned int cmp_type;
5512 	char scratchbuf[100];
5513 
5514 	UNUSED(bytemode);
5515 	UNUSED(sizeflag);
5516 	FETCH_DATA(info, info->codep + 1);
5517 	cmp_type = *info->codep++ & 0xff;
5518 	if (cmp_type < ARRAY_SIZE(vex_cmp_op))
5519 	{
5520 		char suffix[3];
5521 		char *p = info->mnemonicendp - 2;
5522 
5523 		suffix[0] = p[0];
5524 		suffix[1] = p[1];
5525 		suffix[2] = '\0';
5526 		sprintf(p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
5527 		info->mnemonicendp += vex_cmp_op[cmp_type].len;
5528 	} else
5529 	{
5530 		/* We have a reserved extension byte.  Output it directly.  */
5531 		scratchbuf[0] = '$';
5532 		print_operand_value(info, scratchbuf + 1, 1, cmp_type);
5533 		oappend_maybe_intel(info, scratchbuf);
5534 	}
5535 }
5536 
5537 
VPCMP_Fixup(disassemble_info * info,int bytemode,int sizeflag)5538 static void VPCMP_Fixup(disassemble_info *info, int bytemode, int sizeflag)
5539 {
5540 	unsigned int cmp_type;
5541 	char scratchbuf[100];
5542 
5543 	UNUSED(bytemode);
5544 	UNUSED(sizeflag);
5545 
5546 	if (!info->vex.evex)
5547 	{
5548 		internal_error(info);
5549 		return;
5550 	}
5551 
5552 	FETCH_DATA(info, info->codep + 1);
5553 	cmp_type = *info->codep++ & 0xff;
5554 	/* There are aliases for immediates 0, 1, 2, 4, 5, 6.
5555 	   If it's the case, print suffix, otherwise - print the immediate.  */
5556 	if (cmp_type < ARRAY_SIZE(simd_cmp_op) && cmp_type != 3 && cmp_type != 7)
5557 	{
5558 		char suffix[3];
5559 		char *p = info->mnemonicendp - 2;
5560 
5561 		/* vpcmp* can have both one- and two-lettered suffix.  */
5562 		if (p[0] == 'p')
5563 		{
5564 			p++;
5565 			suffix[0] = p[0];
5566 			suffix[1] = '\0';
5567 		} else
5568 		{
5569 			suffix[0] = p[0];
5570 			suffix[1] = p[1];
5571 			suffix[2] = '\0';
5572 		}
5573 
5574 		sprintf(p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
5575 		info->mnemonicendp += simd_cmp_op[cmp_type].len;
5576 	} else
5577 	{
5578 		/* We have a reserved extension byte.  Output it directly.  */
5579 		scratchbuf[0] = '$';
5580 		print_operand_value(info, scratchbuf + 1, 1, cmp_type);
5581 		oappend_maybe_intel(info, scratchbuf);
5582 	}
5583 }
5584 
5585 static const struct op pclmul_op[] = {
5586 	{ STRING_COMMA_LEN("lql") },
5587 	{ STRING_COMMA_LEN("hql") },
5588 	{ STRING_COMMA_LEN("lqh") },
5589 	{ STRING_COMMA_LEN("hqh") }
5590 };
5591 
5592 
PCLMUL_Fixup(disassemble_info * info,int bytemode,int sizeflag)5593 static void PCLMUL_Fixup(disassemble_info *info, int bytemode, int sizeflag)
5594 {
5595 	unsigned int pclmul_type;
5596 	char scratchbuf[100];
5597 
5598 	UNUSED(bytemode);
5599 	UNUSED(sizeflag);
5600 
5601 	FETCH_DATA(info, info->codep + 1);
5602 	pclmul_type = *info->codep++ & 0xff;
5603 	switch (pclmul_type)
5604 	{
5605 	case 0x10:
5606 		pclmul_type = 2;
5607 		break;
5608 	case 0x11:
5609 		pclmul_type = 3;
5610 		break;
5611 	default:
5612 		break;
5613 	}
5614 	if (pclmul_type < ARRAY_SIZE(pclmul_op))
5615 	{
5616 		char suffix[4];
5617 		char *p = info->mnemonicendp - 3;
5618 
5619 		suffix[0] = p[0];
5620 		suffix[1] = p[1];
5621 		suffix[2] = p[2];
5622 		suffix[3] = '\0';
5623 		sprintf(p, "%s%s", pclmul_op[pclmul_type].name, suffix);
5624 		info->mnemonicendp += pclmul_op[pclmul_type].len;
5625 	} else
5626 	{
5627 		/* We have a reserved extension byte.  Output it directly.  */
5628 		scratchbuf[0] = '$';
5629 		print_operand_value(info, scratchbuf + 1, 1, pclmul_type);
5630 		oappend_maybe_intel(info, scratchbuf);
5631 	}
5632 }
5633 
5634 
MOVBE_Fixup(disassemble_info * info,int bytemode,int sizeflag)5635 static void MOVBE_Fixup(disassemble_info *info, int bytemode, int sizeflag)
5636 {
5637 	/* Add proper suffix to "movbe".  */
5638 	char *p = info->mnemonicendp;
5639 
5640 	switch (bytemode)
5641 	{
5642 	case v_mode:
5643 		if (info->intel_syntax)
5644 			goto skip;
5645 
5646 		USED_REX(REX_W);
5647 		if (sizeflag & SUFFIX_ALWAYS)
5648 		{
5649 			if (info->rex & REX_W)
5650 				*p++ = 'q';
5651 			else
5652 			{
5653 				if (sizeflag & DFLAG)
5654 					*p++ = 'l';
5655 				else
5656 					*p++ = 'w';
5657 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
5658 			}
5659 		}
5660 		break;
5661 	default:
5662 		internal_error(info);
5663 		break;
5664 	}
5665 	info->mnemonicendp = p;
5666 	*p = '\0';
5667 
5668   skip:
5669 	OP_M(info, bytemode, sizeflag);
5670 }
5671 
5672 
OP_LWPCB_E(disassemble_info * info,int bytemode,int sizeflag)5673 static void OP_LWPCB_E(disassemble_info *info, int bytemode, int sizeflag)
5674 {
5675 	int reg;
5676 	const char *const *names;
5677 
5678 	UNUSED(bytemode);
5679 	UNUSED(sizeflag);
5680 	/* Skip mod/rm byte.  */
5681 	MODRM_CHECK(return);
5682 	info->codep++;
5683 
5684 	if (info->vex.w)
5685 		names = info->names64;
5686 	else
5687 		names = info->names32;
5688 
5689 	reg = info->modrm.rm;
5690 	USED_REX(REX_B);
5691 	if (info->rex & REX_B)
5692 		reg += 8;
5693 
5694 	oappend(info, names[reg]);
5695 }
5696 
5697 
OP_LWP_E(disassemble_info * info,int bytemode,int sizeflag)5698 static void OP_LWP_E(disassemble_info *info, int bytemode, int sizeflag)
5699 {
5700 	const char *const *names;
5701 
5702 	UNUSED(bytemode);
5703 	UNUSED(sizeflag);
5704 
5705 	if (info->vex.w)
5706 		names = info->names64;
5707 	else
5708 		names = info->names32;
5709 
5710 	oappend(info, names[info->vex.register_specifier]);
5711 }
5712 
5713 
OP_Mask(disassemble_info * info,int bytemode,int sizeflag)5714 static void OP_Mask(disassemble_info *info, int bytemode, int sizeflag)
5715 {
5716 	UNUSED(sizeflag);
5717 
5718 	if (!info->vex.evex || (bytemode != mask_mode && bytemode != mask_bd_mode))
5719 	{
5720 		internal_error(info);
5721 		return;
5722 	}
5723 
5724 	USED_REX(REX_R);
5725 	if ((info->rex & REX_R) != 0 || !info->vex.r)
5726 	{
5727 		BadOp(info);
5728 		return;
5729 	}
5730 
5731 	oappend(info, info->names_mask[info->modrm.reg]);
5732 }
5733 
5734 static const char *const names_rounding[] = {
5735 	"{rn-sae}",
5736 	"{rd-sae}",
5737 	"{ru-sae}",
5738 	"{rz-sae}"
5739 };
5740 
OP_Rounding(disassemble_info * info,int bytemode,int sizeflag)5741 static void OP_Rounding(disassemble_info *info, int bytemode, int sizeflag)
5742 {
5743 	UNUSED(sizeflag);
5744 
5745 	if (!info->vex.evex || (bytemode != evex_rounding_mode && bytemode != evex_sae_mode))
5746 	{
5747 		internal_error(info);
5748 		return;
5749 	}
5750 	if (info->modrm.mod == 3 && info->vex.b)
5751 	{
5752 		switch (bytemode)
5753 		{
5754 		case evex_rounding_mode:
5755 			oappend(info, names_rounding[info->vex.ll]);
5756 			break;
5757 		case evex_sae_mode:
5758 			oappend(info, "{sae}");
5759 			break;
5760 		default:
5761 			break;
5762 		}
5763 	}
5764 }
5765 
5766 
5767 /* Upper case letters in the instruction names here are macros.
5768    'A' => print 'b' if no register operands or suffix_always is true
5769    'B' => print 'b' if suffix_always is true
5770    'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
5771 	  size prefix
5772    'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
5773 	  suffix_always is true
5774    'E' => print 'e' if 32-bit form of jcxz
5775    'F' => print 'w' or 'l' depending on address size prefix (loop insns)
5776    'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5777    'H' => print ",pt" or ",pn" branch hint
5778    'I' => honor following macro letter even in Intel mode (implemented only
5779 	  for some of the macro letters)
5780    'J' => print 'l'
5781    'K' => print 'd' or 'q' if rex prefix is present.
5782    'L' => print 'l' if suffix_always is true
5783    'M' => print 'r' if intel_mnemonic is false.
5784    'N' => print 'n' if instruction has no wait "prefix"
5785    'O' => print 'd' or 'o' (or 'q' in Intel mode)
5786    'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
5787 	  or suffix_always is true.  print 'q' if rex prefix is present.
5788    'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
5789 	  is true
5790    'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
5791    'S' => print 'w', 'l' or 'q' if suffix_always is true
5792    'T' => print 'q' in 64bit mode if instruction has no operand size
5793 	  prefix and behave as 'P' otherwise
5794    'U' => print 'q' in 64bit mode if instruction has no operand size
5795 	  prefix and behave as 'Q' otherwise
5796    'V' => print 'q' in 64bit mode if instruction has no operand size
5797 	  prefix and behave as 'S' otherwise
5798    'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
5799    'X' => print 's', 'd' depending on data16 prefix (for XMM)
5800    'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
5801 	  suffix_always is true.
5802    'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
5803    '!' => change condition from true to false or from false to true.
5804    '%' => add 1 upper case letter to the macro.
5805    '^' => print 'w' or 'l' depending on operand size prefix or
5806 	  suffix_always is true (lcall/ljmp).
5807    '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
5808 	  on operand size prefix.
5809    '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
5810 	  has no operand size prefix for AMD64 ISA, behave as 'P'
5811 	  otherwise
5812 
5813    2 upper case letter macros:
5814    "XY" => print 'x' or 'y' if suffix_always is true or no register
5815 	   operands and no broadcast.
5816    "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
5817 	   register operands and no broadcast.
5818    "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
5819    "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
5820 	   or suffix_always is true
5821    "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
5822    "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
5823    "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
5824    "LW" => print 'd', 'q' depending on the VEX.W bit
5825    "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
5826 	   an operand size prefix, or suffix_always is true.  print
5827 	   'q' if rex prefix is present.
5828 
5829    Many of the above letters print nothing in Intel mode.  See "putop"
5830    for the details.
5831 
5832    Braces '{' and '}', and vertical bars '|', indicate alternative
5833    mnemonic strings for AT&T and Intel.  */
5834 
5835 static const struct dis386 dis386[] = {
5836 	/* 00 */
5837 	{ "addB", { Ebh1, Gb }, 0 },
5838 	{ "addS", { Evh1, Gv }, 0 },
5839 	{ "addB", { Gb, EbS }, 0 },
5840 	{ "addS", { Gv, EvS }, 0 },
5841 	{ "addB", { AL, Ib }, 0 },
5842 	{ "addS", { eAX, Iv }, 0 },
5843 	{ X86_64_TABLE(X86_64_06) },
5844 	{ X86_64_TABLE(X86_64_07) },
5845 	/* 08 */
5846 	{ "orB", { Ebh1, Gb }, 0 },
5847 	{ "orS", { Evh1, Gv }, 0 },
5848 	{ "orB", { Gb, EbS }, 0 },
5849 	{ "orS", { Gv, EvS }, 0 },
5850 	{ "orB", { AL, Ib }, 0 },
5851 	{ "orS", { eAX, Iv }, 0 },
5852 	{ X86_64_TABLE(X86_64_0D) },
5853 	{ Bad_Opcode },						/* 0x0f extended opcode escape */
5854 	/* 10 */
5855 	{ "adcB", { Ebh1, Gb }, 0 },
5856 	{ "adcS", { Evh1, Gv }, 0 },
5857 	{ "adcB", { Gb, EbS }, 0 },
5858 	{ "adcS", { Gv, EvS }, 0 },
5859 	{ "adcB", { AL, Ib }, 0 },
5860 	{ "adcS", { eAX, Iv }, 0 },
5861 	{ X86_64_TABLE(X86_64_16) },
5862 	{ X86_64_TABLE(X86_64_17) },
5863 	/* 18 */
5864 	{ "sbbB", { Ebh1, Gb }, 0 },
5865 	{ "sbbS", { Evh1, Gv }, 0 },
5866 	{ "sbbB", { Gb, EbS }, 0 },
5867 	{ "sbbS", { Gv, EvS }, 0 },
5868 	{ "sbbB", { AL, Ib }, 0 },
5869 	{ "sbbS", { eAX, Iv }, 0 },
5870 	{ X86_64_TABLE(X86_64_1E) },
5871 	{ X86_64_TABLE(X86_64_1F) },
5872 	/* 20 */
5873 	{ "andB", { Ebh1, Gb }, 0 },
5874 	{ "andS", { Evh1, Gv }, 0 },
5875 	{ "andB", { Gb, EbS }, 0 },
5876 	{ "andS", { Gv, EvS }, 0 },
5877 	{ "andB", { AL, Ib }, 0 },
5878 	{ "andS", { eAX, Iv }, 0 },
5879 	{ Bad_Opcode },						/* SEG ES prefix */
5880 	{ X86_64_TABLE(X86_64_27) },
5881 	/* 28 */
5882 	{ "subB", { Ebh1, Gb }, 0 },
5883 	{ "subS", { Evh1, Gv }, 0 },
5884 	{ "subB", { Gb, EbS }, 0 },
5885 	{ "subS", { Gv, EvS }, 0 },
5886 	{ "subB", { AL, Ib }, 0 },
5887 	{ "subS", { eAX, Iv }, 0 },
5888 	{ Bad_Opcode },						/* SEG CS prefix */
5889 	{ X86_64_TABLE(X86_64_2F) },
5890 	/* 30 */
5891 	{ "xorB", { Ebh1, Gb }, 0 },
5892 	{ "xorS", { Evh1, Gv }, 0 },
5893 	{ "xorB", { Gb, EbS }, 0 },
5894 	{ "xorS", { Gv, EvS }, 0 },
5895 	{ "xorB", { AL, Ib }, 0 },
5896 	{ "xorS", { eAX, Iv }, 0 },
5897 	{ Bad_Opcode },						/* SEG SS prefix */
5898 	{ X86_64_TABLE(X86_64_37) },
5899 	/* 38 */
5900 	{ "cmpB", { Eb, Gb }, 0 },
5901 	{ "cmpS", { Ev, Gv }, 0 },
5902 	{ "cmpB", { Gb, EbS }, 0 },
5903 	{ "cmpS", { Gv, EvS }, 0 },
5904 	{ "cmpB", { AL, Ib }, 0 },
5905 	{ "cmpS", { eAX, Iv }, 0 },
5906 	{ Bad_Opcode },						/* SEG DS prefix */
5907 	{ X86_64_TABLE(X86_64_3F) },
5908 	/* 40 */
5909 	{ "inc{S|}", { RMeAX }, 0 },
5910 	{ "inc{S|}", { RMeCX }, 0 },
5911 	{ "inc{S|}", { RMeDX }, 0 },
5912 	{ "inc{S|}", { RMeBX }, 0 },
5913 	{ "inc{S|}", { RMeSP }, 0 },
5914 	{ "inc{S|}", { RMeBP }, 0 },
5915 	{ "inc{S|}", { RMeSI }, 0 },
5916 	{ "inc{S|}", { RMeDI }, 0 },
5917 	/* 48 */
5918 	{ "dec{S|}", { RMeAX }, 0 },
5919 	{ "dec{S|}", { RMeCX }, 0 },
5920 	{ "dec{S|}", { RMeDX }, 0 },
5921 	{ "dec{S|}", { RMeBX }, 0 },
5922 	{ "dec{S|}", { RMeSP }, 0 },
5923 	{ "dec{S|}", { RMeBP }, 0 },
5924 	{ "dec{S|}", { RMeSI }, 0 },
5925 	{ "dec{S|}", { RMeDI }, 0 },
5926 	/* 50 */
5927 	{ "pushV", { RMrAX }, 0 },
5928 	{ "pushV", { RMrCX }, 0 },
5929 	{ "pushV", { RMrDX }, 0 },
5930 	{ "pushV", { RMrBX }, 0 },
5931 	{ "pushV", { RMrSP }, 0 },
5932 	{ "pushV", { RMrBP }, 0 },
5933 	{ "pushV", { RMrSI }, 0 },
5934 	{ "pushV", { RMrDI }, 0 },
5935 	/* 58 */
5936 	{ "popV", { RMrAX }, 0 },
5937 	{ "popV", { RMrCX }, 0 },
5938 	{ "popV", { RMrDX }, 0 },
5939 	{ "popV", { RMrBX }, 0 },
5940 	{ "popV", { RMrSP }, 0 },
5941 	{ "popV", { RMrBP }, 0 },
5942 	{ "popV", { RMrSI }, 0 },
5943 	{ "popV", { RMrDI }, 0 },
5944 	/* 60 */
5945 	{ X86_64_TABLE(X86_64_60) },
5946 	{ X86_64_TABLE(X86_64_61) },
5947 	{ X86_64_TABLE(X86_64_62) },
5948 	{ X86_64_TABLE(X86_64_63) },
5949 	{ Bad_Opcode },						/* seg fs */
5950 	{ Bad_Opcode },						/* seg gs */
5951 	{ Bad_Opcode },						/* op size prefix */
5952 	{ Bad_Opcode },						/* adr size prefix */
5953 	/* 68 */
5954 	{ "pushT", { sIv }, 0 },
5955 	{ "imulS", { Gv, Ev, Iv }, 0 },
5956 	{ "pushT", { sIbT }, 0 },
5957 	{ "imulS", { Gv, Ev, sIb }, 0 },
5958 	{ "ins{b|}", { Ybr, indirDX }, 0 },
5959 	{ X86_64_TABLE(X86_64_6D) },
5960 	{ "outs{b|}", { indirDXr, Xb }, 0 },
5961 	{ X86_64_TABLE(X86_64_6F) },
5962 	/* 70 */
5963 	{ "joH", { Jb, BND, cond_jump_flag }, 0 },
5964 	{ "jnoH", { Jb, BND, cond_jump_flag }, 0 },
5965 	{ "jbH", { Jb, BND, cond_jump_flag }, 0 },
5966 	{ "jaeH", { Jb, BND, cond_jump_flag }, 0 },
5967 	{ "jeH", { Jb, BND, cond_jump_flag }, 0 },
5968 	{ "jneH", { Jb, BND, cond_jump_flag }, 0 },
5969 	{ "jbeH", { Jb, BND, cond_jump_flag }, 0 },
5970 	{ "jaH", { Jb, BND, cond_jump_flag }, 0 },
5971 	/* 78 */
5972 	{ "jsH", { Jb, BND, cond_jump_flag }, 0 },
5973 	{ "jnsH", { Jb, BND, cond_jump_flag }, 0 },
5974 	{ "jpH", { Jb, BND, cond_jump_flag }, 0 },
5975 	{ "jnpH", { Jb, BND, cond_jump_flag }, 0 },
5976 	{ "jlH", { Jb, BND, cond_jump_flag }, 0 },
5977 	{ "jgeH", { Jb, BND, cond_jump_flag }, 0 },
5978 	{ "jleH", { Jb, BND, cond_jump_flag }, 0 },
5979 	{ "jgH", { Jb, BND, cond_jump_flag }, 0 },
5980 	/* 80 */
5981 	{ REG_TABLE(REG_80) },
5982 	{ REG_TABLE(REG_81) },
5983 	{ X86_64_TABLE(X86_64_82) },
5984 	{ REG_TABLE(REG_83) },
5985 	{ "testB", { Eb, Gb }, 0 },
5986 	{ "testS", { Ev, Gv }, 0 },
5987 	{ "xchgB", { Ebh2, Gb }, 0 },
5988 	{ "xchgS", { Evh2, Gv }, 0 },
5989 	/* 88 */
5990 	{ "movB", { Ebh3, Gb }, 0 },
5991 	{ "movS", { Evh3, Gv }, 0 },
5992 	{ "movB", { Gb, EbS }, 0 },
5993 	{ "movS", { Gv, EvS }, 0 },
5994 	{ "movD", { Sv, Sw }, 0 },
5995 	{ MOD_TABLE(MOD_8D) },
5996 	{ "movD", { Sw, Sv }, 0 },
5997 	{ REG_TABLE(REG_8F) },
5998 	/* 90 */
5999 	{ PREFIX_TABLE(PREFIX_90) },
6000 	{ "xchgS", { RMeCX, eAX }, 0 },
6001 	{ "xchgS", { RMeDX, eAX }, 0 },
6002 	{ "xchgS", { RMeBX, eAX }, 0 },
6003 	{ "xchgS", { RMeSP, eAX }, 0 },
6004 	{ "xchgS", { RMeBP, eAX }, 0 },
6005 	{ "xchgS", { RMeSI, eAX }, 0 },
6006 	{ "xchgS", { RMeDI, eAX }, 0 },
6007 	/* 98 */
6008 	{ "cW{t|}R", { XX }, 0 },
6009 	{ "cR{t|}O", { XX }, 0 },
6010 	{ X86_64_TABLE(X86_64_9A) },
6011 	{ Bad_Opcode },						/* fwait */
6012 	{ "pushfT", { XX }, 0 },
6013 	{ "popfT", { XX }, 0 },
6014 	{ "sahf", { XX }, 0 },
6015 	{ "lahf", { XX }, 0 },
6016 	/* a0 */
6017 	{ "mov%LB", { AL, Ob }, 0 },
6018 	{ "mov%LS", { eAX, Ov }, 0 },
6019 	{ "mov%LB", { Ob, AL }, 0 },
6020 	{ "mov%LS", { Ov, eAX }, 0 },
6021 	{ "movs{b|}", { Ybr, Xb }, 0 },
6022 	{ "movs{R|}", { Yvr, Xv }, 0 },
6023 	{ "cmps{b|}", { Xb, Yb }, 0 },
6024 	{ "cmps{R|}", { Xv, Yv }, 0 },
6025 	/* a8 */
6026 	{ "testB", { AL, Ib }, 0 },
6027 	{ "testS", { eAX, Iv }, 0 },
6028 	{ "stosB", { Ybr, AL }, 0 },
6029 	{ "stosS", { Yvr, eAX }, 0 },
6030 	{ "lodsB", { ALr, Xb }, 0 },
6031 	{ "lodsS", { eAXr, Xv }, 0 },
6032 	{ "scasB", { AL, Yb }, 0 },
6033 	{ "scasS", { eAX, Yv }, 0 },
6034 	/* b0 */
6035 	{ "movB", { RMAL, Ib }, 0 },
6036 	{ "movB", { RMCL, Ib }, 0 },
6037 	{ "movB", { RMDL, Ib }, 0 },
6038 	{ "movB", { RMBL, Ib }, 0 },
6039 	{ "movB", { RMAH, Ib }, 0 },
6040 	{ "movB", { RMCH, Ib }, 0 },
6041 	{ "movB", { RMDH, Ib }, 0 },
6042 	{ "movB", { RMBH, Ib }, 0 },
6043 	/* b8 */
6044 	{ "mov%LV", { RMeAX, Iv64 }, 0 },
6045 	{ "mov%LV", { RMeCX, Iv64 }, 0 },
6046 	{ "mov%LV", { RMeDX, Iv64 }, 0 },
6047 	{ "mov%LV", { RMeBX, Iv64 }, 0 },
6048 	{ "mov%LV", { RMeSP, Iv64 }, 0 },
6049 	{ "mov%LV", { RMeBP, Iv64 }, 0 },
6050 	{ "mov%LV", { RMeSI, Iv64 }, 0 },
6051 	{ "mov%LV", { RMeDI, Iv64 }, 0 },
6052 	/* c0 */
6053 	{ REG_TABLE(REG_C0) },
6054 	{ REG_TABLE(REG_C1) },
6055 	{ "retT", { Iw, BND }, 0 },
6056 	{ "retT", { BND }, 0 },
6057 	{ X86_64_TABLE(X86_64_C4) },
6058 	{ X86_64_TABLE(X86_64_C5) },
6059 	{ REG_TABLE(REG_C6) },
6060 	{ REG_TABLE(REG_C7) },
6061 	/* c8 */
6062 	{ "enterT", { Iw, Ib }, 0 },
6063 	{ "leaveT", { XX }, 0 },
6064 	{ "Jret{|f}P", { Iw }, 0 },
6065 	{ "Jret{|f}P", { XX }, 0 },
6066 	{ "int3", { XX }, 0 },
6067 	{ "int", { Ib }, 0 },
6068 	{ X86_64_TABLE(X86_64_CE) },
6069 	{ "iret%LP", { XX }, 0 },
6070 	/* d0 */
6071 	{ REG_TABLE(REG_D0) },
6072 	{ REG_TABLE(REG_D1) },
6073 	{ REG_TABLE(REG_D2) },
6074 	{ REG_TABLE(REG_D3) },
6075 	{ X86_64_TABLE(X86_64_D4) },
6076 	{ X86_64_TABLE(X86_64_D5) },
6077 	{ Bad_Opcode },
6078 	{ "xlat", { DSBX }, 0 },
6079 	/* d8 */
6080 	{ FLOAT },
6081 	{ FLOAT },
6082 	{ FLOAT },
6083 	{ FLOAT },
6084 	{ FLOAT },
6085 	{ FLOAT },
6086 	{ FLOAT },
6087 	{ FLOAT },
6088 	/* e0 */
6089 	{ "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
6090 	{ "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
6091 	{ "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
6092 	{ "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
6093 	{ "inB", { AL, Ib }, 0 },
6094 	{ "inG", { zAX, Ib }, 0 },
6095 	{ "outB", { Ib, AL }, 0 },
6096 	{ "outG", { Ib, zAX }, 0 },
6097 	/* e8 */
6098 	{ X86_64_TABLE(X86_64_E8) },
6099 	{ X86_64_TABLE(X86_64_E9) },
6100 	{ X86_64_TABLE(X86_64_EA) },
6101 	{ "jmp", { Jb, BND }, 0 },
6102 	{ "inB", { AL, indirDX }, 0 },
6103 	{ "inG", { zAX, indirDX }, 0 },
6104 	{ "outB", { indirDX, AL }, 0 },
6105 	{ "outG", { indirDX, zAX }, 0 },
6106 	/* f0 */
6107 	{ Bad_Opcode },						/* lock prefix */
6108 	{ "icebp", { XX }, 0 },
6109 	{ Bad_Opcode },						/* repne */
6110 	{ Bad_Opcode },						/* repz */
6111 	{ "hlt", { XX }, 0 },
6112 	{ "cmc", { XX }, 0 },
6113 	{ REG_TABLE(REG_F6) },
6114 	{ REG_TABLE(REG_F7) },
6115 	/* f8 */
6116 	{ "clc", { XX }, 0 },
6117 	{ "stc", { XX }, 0 },
6118 	{ "cli", { XX }, 0 },
6119 	{ "sti", { XX }, 0 },
6120 	{ "cld", { XX }, 0 },
6121 	{ "std", { XX }, 0 },
6122 	{ REG_TABLE(REG_FE) },
6123 	{ REG_TABLE(REG_FF) },
6124 };
6125 
6126 static const struct dis386 dis386_twobyte[] = {
6127 	/* 00 */
6128 	{ REG_TABLE(REG_0F00) },
6129 	{ REG_TABLE(REG_0F01) },
6130 	{ "larS", { Gv, Ew }, 0 },
6131 	{ "lslS", { Gv, Ew }, 0 },
6132 	{ Bad_Opcode },
6133 	{ "syscall", { XX }, 0 },
6134 	{ "clts", { XX }, 0 },
6135 	{ "sysret%LP", { XX }, 0 },
6136 	/* 08 */
6137 	{ "invd", { XX }, 0 },
6138 	{ "wbinvd", { XX }, 0 },
6139 	{ Bad_Opcode },
6140 	{ "ud2", { XX }, 0 },
6141 	{ Bad_Opcode },
6142 	{ REG_TABLE(REG_0F0D) },
6143 	{ "femms", { XX }, 0 },
6144 	{ "", { MX, EM, OPSUF }, 0 },			/* See OP_3DNowSuffix.  */
6145 	/* 10 */
6146 	{ PREFIX_TABLE(PREFIX_0F10) },
6147 	{ PREFIX_TABLE(PREFIX_0F11) },
6148 	{ PREFIX_TABLE(PREFIX_0F12) },
6149 	{ MOD_TABLE(MOD_0F13) },
6150 	{ "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
6151 	{ "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
6152 	{ PREFIX_TABLE(PREFIX_0F16) },
6153 	{ MOD_TABLE(MOD_0F17) },
6154 	/* 18 */
6155 	{ REG_TABLE(REG_0F18) },
6156 	{ "nopQ", { Ev }, 0 },
6157 	{ PREFIX_TABLE(PREFIX_0F1A) },
6158 	{ PREFIX_TABLE(PREFIX_0F1B) },
6159 	{ "nopQ", { Ev }, 0 },
6160 	{ "nopQ", { Ev }, 0 },
6161 	{ "nopQ", { Ev }, 0 },
6162 	{ "nopQ", { Ev }, 0 },
6163 	/* 20 */
6164 	{ "movZ", { Rm, Cm }, 0 },
6165 	{ "movZ", { Rm, Dm }, 0 },
6166 	{ "movZ", { Cm, Rm }, 0 },
6167 	{ "movZ", { Dm, Rm }, 0 },
6168 	{ MOD_TABLE(MOD_0F24) },
6169 	{ Bad_Opcode },
6170 	{ MOD_TABLE(MOD_0F26) },
6171 	{ Bad_Opcode },
6172 	/* 28 */
6173 	{ "movapX", { XM, EXx }, PREFIX_OPCODE },
6174 	{ "movapX", { EXxS, XM }, PREFIX_OPCODE },
6175 	{ PREFIX_TABLE(PREFIX_0F2A) },
6176 	{ PREFIX_TABLE(PREFIX_0F2B) },
6177 	{ PREFIX_TABLE(PREFIX_0F2C) },
6178 	{ PREFIX_TABLE(PREFIX_0F2D) },
6179 	{ PREFIX_TABLE(PREFIX_0F2E) },
6180 	{ PREFIX_TABLE(PREFIX_0F2F) },
6181 	/* 30 */
6182 	{ "wrmsr", { XX }, 0 },
6183 	{ "rdtsc", { XX }, 0 },
6184 	{ "rdmsr", { XX }, 0 },
6185 	{ "rdpmc", { XX }, 0 },
6186 	{ "sysenter", { XX }, 0 },
6187 	{ "sysexit", { XX }, 0 },
6188 	{ Bad_Opcode },
6189 	{ "getsec", { XX }, 0 },
6190 	/* 38 */
6191 	{ THREE_BYTE_TABLE_PREFIX(THREE_BYTE_0F38, PREFIX_OPCODE) },
6192 	{ Bad_Opcode },
6193 	{ THREE_BYTE_TABLE_PREFIX(THREE_BYTE_0F3A, PREFIX_OPCODE) },
6194 	{ Bad_Opcode },
6195 	{ Bad_Opcode },
6196 	{ Bad_Opcode },
6197 	{ Bad_Opcode },
6198 	{ Bad_Opcode },
6199 	/* 40 */
6200 	{ "cmovoS", { Gv, Ev }, 0 },
6201 	{ "cmovnoS", { Gv, Ev }, 0 },
6202 	{ "cmovbS", { Gv, Ev }, 0 },
6203 	{ "cmovaeS", { Gv, Ev }, 0 },
6204 	{ "cmoveS", { Gv, Ev }, 0 },
6205 	{ "cmovneS", { Gv, Ev }, 0 },
6206 	{ "cmovbeS", { Gv, Ev }, 0 },
6207 	{ "cmovaS", { Gv, Ev }, 0 },
6208 	/* 48 */
6209 	{ "cmovsS", { Gv, Ev }, 0 },
6210 	{ "cmovnsS", { Gv, Ev }, 0 },
6211 	{ "cmovpS", { Gv, Ev }, 0 },
6212 	{ "cmovnpS", { Gv, Ev }, 0 },
6213 	{ "cmovlS", { Gv, Ev }, 0 },
6214 	{ "cmovgeS", { Gv, Ev }, 0 },
6215 	{ "cmovleS", { Gv, Ev }, 0 },
6216 	{ "cmovgS", { Gv, Ev }, 0 },
6217 	/* 50 */
6218 	{ MOD_TABLE(MOD_0F51) },
6219 	{ PREFIX_TABLE(PREFIX_0F51) },
6220 	{ PREFIX_TABLE(PREFIX_0F52) },
6221 	{ PREFIX_TABLE(PREFIX_0F53) },
6222 	{ "andpX", { XM, EXx }, PREFIX_OPCODE },
6223 	{ "andnpX", { XM, EXx }, PREFIX_OPCODE },
6224 	{ "orpX", { XM, EXx }, PREFIX_OPCODE },
6225 	{ "xorpX", { XM, EXx }, PREFIX_OPCODE },
6226 	/* 58 */
6227 	{ PREFIX_TABLE(PREFIX_0F58) },
6228 	{ PREFIX_TABLE(PREFIX_0F59) },
6229 	{ PREFIX_TABLE(PREFIX_0F5A) },
6230 	{ PREFIX_TABLE(PREFIX_0F5B) },
6231 	{ PREFIX_TABLE(PREFIX_0F5C) },
6232 	{ PREFIX_TABLE(PREFIX_0F5D) },
6233 	{ PREFIX_TABLE(PREFIX_0F5E) },
6234 	{ PREFIX_TABLE(PREFIX_0F5F) },
6235 	/* 60 */
6236 	{ PREFIX_TABLE(PREFIX_0F60) },
6237 	{ PREFIX_TABLE(PREFIX_0F61) },
6238 	{ PREFIX_TABLE(PREFIX_0F62) },
6239 	{ "packsswb", { MX, EM }, PREFIX_OPCODE },
6240 	{ "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
6241 	{ "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
6242 	{ "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
6243 	{ "packuswb", { MX, EM }, PREFIX_OPCODE },
6244 	/* 68 */
6245 	{ "punpckhbw", { MX, EM }, PREFIX_OPCODE },
6246 	{ "punpckhwd", { MX, EM }, PREFIX_OPCODE },
6247 	{ "punpckhdq", { MX, EM }, PREFIX_OPCODE },
6248 	{ "packssdw", { MX, EM }, PREFIX_OPCODE },
6249 	{ PREFIX_TABLE(PREFIX_0F6C) },
6250 	{ PREFIX_TABLE(PREFIX_0F6D) },
6251 	{ "movK", { MX, Edq }, PREFIX_OPCODE },
6252 	{ PREFIX_TABLE(PREFIX_0F6F) },
6253 	/* 70 */
6254 	{ PREFIX_TABLE(PREFIX_0F70) },
6255 	{ REG_TABLE(REG_0F71) },
6256 	{ REG_TABLE(REG_0F72) },
6257 	{ REG_TABLE(REG_0F73) },
6258 	{ "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
6259 	{ "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
6260 	{ "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
6261 	{ "emms", { XX }, PREFIX_OPCODE },
6262 	/* 78 */
6263 	{ PREFIX_TABLE(PREFIX_0F78) },
6264 	{ PREFIX_TABLE(PREFIX_0F79) },
6265 	{ Bad_Opcode },
6266 	{ Bad_Opcode },
6267 	{ PREFIX_TABLE(PREFIX_0F7C) },
6268 	{ PREFIX_TABLE(PREFIX_0F7D) },
6269 	{ PREFIX_TABLE(PREFIX_0F7E) },
6270 	{ PREFIX_TABLE(PREFIX_0F7F) },
6271 	/* 80 */
6272 	{ "joH", { Jv, BND, cond_jump_flag }, 0 },
6273 	{ "jnoH", { Jv, BND, cond_jump_flag }, 0 },
6274 	{ "jbH", { Jv, BND, cond_jump_flag }, 0 },
6275 	{ "jaeH", { Jv, BND, cond_jump_flag }, 0 },
6276 	{ "jeH", { Jv, BND, cond_jump_flag }, 0 },
6277 	{ "jneH", { Jv, BND, cond_jump_flag }, 0 },
6278 	{ "jbeH", { Jv, BND, cond_jump_flag }, 0 },
6279 	{ "jaH", { Jv, BND, cond_jump_flag }, 0 },
6280 	/* 88 */
6281 	{ "jsH", { Jv, BND, cond_jump_flag }, 0 },
6282 	{ "jnsH", { Jv, BND, cond_jump_flag }, 0 },
6283 	{ "jpH", { Jv, BND, cond_jump_flag }, 0 },
6284 	{ "jnpH", { Jv, BND, cond_jump_flag }, 0 },
6285 	{ "jlH", { Jv, BND, cond_jump_flag }, 0 },
6286 	{ "jgeH", { Jv, BND, cond_jump_flag }, 0 },
6287 	{ "jleH", { Jv, BND, cond_jump_flag }, 0 },
6288 	{ "jgH", { Jv, BND, cond_jump_flag }, 0 },
6289 	/* 90 */
6290 	{ "seto", { Eb }, 0 },
6291 	{ "setno", { Eb }, 0 },
6292 	{ "setb", { Eb }, 0 },
6293 	{ "setae", { Eb }, 0 },
6294 	{ "sete", { Eb }, 0 },
6295 	{ "setne", { Eb }, 0 },
6296 	{ "setbe", { Eb }, 0 },
6297 	{ "seta", { Eb }, 0 },
6298 	/* 98 */
6299 	{ "sets", { Eb }, 0 },
6300 	{ "setns", { Eb }, 0 },
6301 	{ "setp", { Eb }, 0 },
6302 	{ "setnp", { Eb }, 0 },
6303 	{ "setl", { Eb }, 0 },
6304 	{ "setge", { Eb }, 0 },
6305 	{ "setle", { Eb }, 0 },
6306 	{ "setg", { Eb }, 0 },
6307 	/* a0 */
6308 	{ "pushT", { fs }, 0 },
6309 	{ "popT", { fs }, 0 },
6310 	{ "cpuid", { XX }, 0 },
6311 	{ "btS", { Ev, Gv }, 0 },
6312 	{ "shldS", { Ev, Gv, Ib }, 0 },
6313 	{ "shldS", { Ev, Gv, CL }, 0 },
6314 	{ REG_TABLE(REG_0FA6) },
6315 	{ REG_TABLE(REG_0FA7) },
6316 	/* a8 */
6317 	{ "pushT", { gs }, 0 },
6318 	{ "popT", { gs }, 0 },
6319 	{ "rsm", { XX }, 0 },
6320 	{ "btsS", { Evh1, Gv }, 0 },
6321 	{ "shrdS", { Ev, Gv, Ib }, 0 },
6322 	{ "shrdS", { Ev, Gv, CL }, 0 },
6323 	{ REG_TABLE(REG_0FAE) },
6324 	{ "imulS", { Gv, Ev }, 0 },
6325 	/* b0 */
6326 	{ "cmpxchgB", { Ebh1, Gb }, 0 },
6327 	{ "cmpxchgS", { Evh1, Gv }, 0 },
6328 	{ MOD_TABLE(MOD_0FB2) },
6329 	{ "btrS", { Evh1, Gv }, 0 },
6330 	{ MOD_TABLE(MOD_0FB4) },
6331 	{ MOD_TABLE(MOD_0FB5) },
6332 	{ "movz{bR|x}", { Gv, Eb }, 0 },
6333 	{ "movz{wR|x}", { Gv, Ew }, 0 },		/* yes, there really is movzww ! */
6334 	/* b8 */
6335 	{ PREFIX_TABLE(PREFIX_0FB8) },
6336 	{ "ud1", { XX }, 0 },
6337 	{ REG_TABLE(REG_0FBA) },
6338 	{ "btcS", { Evh1, Gv }, 0 },
6339 	{ PREFIX_TABLE(PREFIX_0FBC) },
6340 	{ PREFIX_TABLE(PREFIX_0FBD) },
6341 	{ "movs{bR|x}", { Gv, Eb }, 0 },
6342 	{ "movs{wR|x}", { Gv, Ew }, 0 },		/* yes, there really is movsww ! */
6343 	/* c0 */
6344 	{ "xaddB", { Ebh1, Gb }, 0 },
6345 	{ "xaddS", { Evh1, Gv }, 0 },
6346 	{ PREFIX_TABLE(PREFIX_0FC2) },
6347 	{ MOD_TABLE(MOD_0FC3) },
6348 	{ "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
6349 	{ "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
6350 	{ "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
6351 	{ REG_TABLE(REG_0FC7) },
6352 	/* c8 */
6353 	{ "bswap", { RMeAX }, 0 },
6354 	{ "bswap", { RMeCX }, 0 },
6355 	{ "bswap", { RMeDX }, 0 },
6356 	{ "bswap", { RMeBX }, 0 },
6357 	{ "bswap", { RMeSP }, 0 },
6358 	{ "bswap", { RMeBP }, 0 },
6359 	{ "bswap", { RMeSI }, 0 },
6360 	{ "bswap", { RMeDI }, 0 },
6361 	/* d0 */
6362 	{ PREFIX_TABLE(PREFIX_0FD0) },
6363 	{ "psrlw", { MX, EM }, PREFIX_OPCODE },
6364 	{ "psrld", { MX, EM }, PREFIX_OPCODE },
6365 	{ "psrlq", { MX, EM }, PREFIX_OPCODE },
6366 	{ "paddq", { MX, EM }, PREFIX_OPCODE },
6367 	{ "pmullw", { MX, EM }, PREFIX_OPCODE },
6368 	{ PREFIX_TABLE(PREFIX_0FD6) },
6369 	{ MOD_TABLE(MOD_0FD7) },
6370 	/* d8 */
6371 	{ "psubusb", { MX, EM }, PREFIX_OPCODE },
6372 	{ "psubusw", { MX, EM }, PREFIX_OPCODE },
6373 	{ "pminub", { MX, EM }, PREFIX_OPCODE },
6374 	{ "pand", { MX, EM }, PREFIX_OPCODE },
6375 	{ "paddusb", { MX, EM }, PREFIX_OPCODE },
6376 	{ "paddusw", { MX, EM }, PREFIX_OPCODE },
6377 	{ "pmaxub", { MX, EM }, PREFIX_OPCODE },
6378 	{ "pandn", { MX, EM }, PREFIX_OPCODE },
6379 	/* e0 */
6380 	{ "pavgb", { MX, EM }, PREFIX_OPCODE },
6381 	{ "psraw", { MX, EM }, PREFIX_OPCODE },
6382 	{ "psrad", { MX, EM }, PREFIX_OPCODE },
6383 	{ "pavgw", { MX, EM }, PREFIX_OPCODE },
6384 	{ "pmulhuw", { MX, EM }, PREFIX_OPCODE },
6385 	{ "pmulhw", { MX, EM }, PREFIX_OPCODE },
6386 	{ PREFIX_TABLE(PREFIX_0FE6) },
6387 	{ PREFIX_TABLE(PREFIX_0FE7) },
6388 	/* e8 */
6389 	{ "psubsb", { MX, EM }, PREFIX_OPCODE },
6390 	{ "psubsw", { MX, EM }, PREFIX_OPCODE },
6391 	{ "pminsw", { MX, EM }, PREFIX_OPCODE },
6392 	{ "por", { MX, EM }, PREFIX_OPCODE },
6393 	{ "paddsb", { MX, EM }, PREFIX_OPCODE },
6394 	{ "paddsw", { MX, EM }, PREFIX_OPCODE },
6395 	{ "pmaxsw", { MX, EM }, PREFIX_OPCODE },
6396 	{ "pxor", { MX, EM }, PREFIX_OPCODE },
6397 	/* f0 */
6398 	{ PREFIX_TABLE(PREFIX_0FF0) },
6399 	{ "psllw", { MX, EM }, PREFIX_OPCODE },
6400 	{ "pslld", { MX, EM }, PREFIX_OPCODE },
6401 	{ "psllq", { MX, EM }, PREFIX_OPCODE },
6402 	{ "pmuludq", { MX, EM }, PREFIX_OPCODE },
6403 	{ "pmaddwd", { MX, EM }, PREFIX_OPCODE },
6404 	{ "psadbw", { MX, EM }, PREFIX_OPCODE },
6405 	{ PREFIX_TABLE(PREFIX_0FF7) },
6406 	/* f8 */
6407 	{ "psubb", { MX, EM }, PREFIX_OPCODE },
6408 	{ "psubw", { MX, EM }, PREFIX_OPCODE },
6409 	{ "psubd", { MX, EM }, PREFIX_OPCODE },
6410 	{ "psubq", { MX, EM }, PREFIX_OPCODE },
6411 	{ "paddb", { MX, EM }, PREFIX_OPCODE },
6412 	{ "paddw", { MX, EM }, PREFIX_OPCODE },
6413 	{ "paddd", { MX, EM }, PREFIX_OPCODE },
6414 	{ Bad_Opcode },
6415 };
6416 
6417 static const unsigned char onebyte_has_modrm[256] = {
6418 	/*       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f        */
6419 	/*       ----------------------------------------------        */
6420 	/* 00 */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /* 00 */
6421 	/* 10 */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /* 10 */
6422 	/* 20 */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /* 20 */
6423 	/* 30 */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /* 30 */
6424 	/* 40 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 40 */
6425 	/* 50 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 50 */
6426 	/* 60 */ 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, /* 60 */
6427 	/* 70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 */
6428 	/* 80 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 80 */
6429 	/* 90 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 */
6430 	/* a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* a0 */
6431 	/* b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* b0 */
6432 	/* c0 */ 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* c0 */
6433 	/* d0 */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /* d0 */
6434 	/* e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* e0 */
6435 	/* f0 */ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1  /* f0 */
6436 	/*       ----------------------------------------------        */
6437 	/*       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f        */
6438 };
6439 
6440 static const unsigned char twobyte_has_modrm[256] = {
6441 	/*       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f        */
6442 	/*       ----------------------------------------------        */
6443 	/* 00 */ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, /* 0f */
6444 	/* 10 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 1f */
6445 	/* 20 */ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, /* 2f */
6446 	/* 30 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, /* 3f */
6447 	/* 40 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4f */
6448 	/* 50 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 5f */
6449 	/* 60 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6f */
6450 	/* 70 */ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, /* 7f */
6451 	/* 80 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8f */
6452 	/* 90 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 9f */
6453 	/* a0 */ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, /* af */
6454 	/* b0 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, /* bf */
6455 	/* c0 */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* cf */
6456 	/* d0 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* df */
6457 	/* e0 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* ef */
6458 	/* f0 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0  /* ff */
6459 	/*       ----------------------------------------------        */
6460 	/*       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f        */
6461 };
6462 
6463 static const char *const intel_names64[] = {
6464 	"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
6465 	"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
6466 };
6467 
6468 static const char *const intel_names32[] = {
6469 	"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
6470 	"r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
6471 };
6472 
6473 static const char *const intel_names16[] = {
6474 	"ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
6475 	"r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
6476 };
6477 
6478 static const char *const intel_names8[] = {
6479 	"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
6480 };
6481 
6482 static const char *const intel_names8rex[] = {
6483 	"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
6484 	"r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
6485 };
6486 
6487 static const char *const intel_names_seg[] = {
6488 	"es", "cs", "ss", "ds", "fs", "gs", "?", "?",
6489 };
6490 
6491 static const char *intel_index64 = "riz";
6492 
6493 static const char *intel_index32 = "eiz";
6494 
6495 static const char *const intel_index16[] = {
6496 	"bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
6497 };
6498 
6499 static const char *const att_names64[] = {
6500 	"%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
6501 	"%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
6502 };
6503 
6504 static const char *const att_names32[] = {
6505 	"%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
6506 	"%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
6507 };
6508 
6509 static const char *const att_names16[] = {
6510 	"%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
6511 	"%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
6512 };
6513 
6514 static const char *const att_names8[] = {
6515 	"%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
6516 };
6517 
6518 static const char *const att_names8rex[] = {
6519 	"%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
6520 	"%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
6521 };
6522 
6523 static const char *const att_names_seg[] = {
6524 	"%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
6525 };
6526 
6527 static const char *att_index64 = "%riz";
6528 
6529 static const char *att_index32 = "%eiz";
6530 
6531 static const char *const att_index16[] = {
6532 	"%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
6533 };
6534 
6535 static const char *const intel_names_mm[] = {
6536 	"mm0", "mm1", "mm2", "mm3",
6537 	"mm4", "mm5", "mm6", "mm7"
6538 };
6539 
6540 static const char *const att_names_mm[] = {
6541 	"%mm0", "%mm1", "%mm2", "%mm3",
6542 	"%mm4", "%mm5", "%mm6", "%mm7"
6543 };
6544 
6545 static const char *const intel_names_bnd[] = {
6546 	"bnd0", "bnd1", "bnd2", "bnd3"
6547 };
6548 
6549 static const char *const att_names_bnd[] = {
6550 	"%bnd0", "%bnd1", "%bnd2", "%bnd3"
6551 };
6552 
6553 static const char *const intel_names_xmm[] = {
6554 	"xmm0", "xmm1", "xmm2", "xmm3",
6555 	"xmm4", "xmm5", "xmm6", "xmm7",
6556 	"xmm8", "xmm9", "xmm10", "xmm11",
6557 	"xmm12", "xmm13", "xmm14", "xmm15",
6558 	"xmm16", "xmm17", "xmm18", "xmm19",
6559 	"xmm20", "xmm21", "xmm22", "xmm23",
6560 	"xmm24", "xmm25", "xmm26", "xmm27",
6561 	"xmm28", "xmm29", "xmm30", "xmm31"
6562 };
6563 
6564 static const char *const att_names_xmm[] = {
6565 	"%xmm0", "%xmm1", "%xmm2", "%xmm3",
6566 	"%xmm4", "%xmm5", "%xmm6", "%xmm7",
6567 	"%xmm8", "%xmm9", "%xmm10", "%xmm11",
6568 	"%xmm12", "%xmm13", "%xmm14", "%xmm15",
6569 	"%xmm16", "%xmm17", "%xmm18", "%xmm19",
6570 	"%xmm20", "%xmm21", "%xmm22", "%xmm23",
6571 	"%xmm24", "%xmm25", "%xmm26", "%xmm27",
6572 	"%xmm28", "%xmm29", "%xmm30", "%xmm31"
6573 };
6574 
6575 static const char *const intel_names_ymm[] = {
6576 	"ymm0", "ymm1", "ymm2", "ymm3",
6577 	"ymm4", "ymm5", "ymm6", "ymm7",
6578 	"ymm8", "ymm9", "ymm10", "ymm11",
6579 	"ymm12", "ymm13", "ymm14", "ymm15",
6580 	"ymm16", "ymm17", "ymm18", "ymm19",
6581 	"ymm20", "ymm21", "ymm22", "ymm23",
6582 	"ymm24", "ymm25", "ymm26", "ymm27",
6583 	"ymm28", "ymm29", "ymm30", "ymm31"
6584 };
6585 
6586 static const char *const att_names_ymm[] = {
6587 	"%ymm0", "%ymm1", "%ymm2", "%ymm3",
6588 	"%ymm4", "%ymm5", "%ymm6", "%ymm7",
6589 	"%ymm8", "%ymm9", "%ymm10", "%ymm11",
6590 	"%ymm12", "%ymm13", "%ymm14", "%ymm15",
6591 	"%ymm16", "%ymm17", "%ymm18", "%ymm19",
6592 	"%ymm20", "%ymm21", "%ymm22", "%ymm23",
6593 	"%ymm24", "%ymm25", "%ymm26", "%ymm27",
6594 	"%ymm28", "%ymm29", "%ymm30", "%ymm31"
6595 };
6596 
6597 static const char *const intel_names_zmm[] = {
6598 	"zmm0", "zmm1", "zmm2", "zmm3",
6599 	"zmm4", "zmm5", "zmm6", "zmm7",
6600 	"zmm8", "zmm9", "zmm10", "zmm11",
6601 	"zmm12", "zmm13", "zmm14", "zmm15",
6602 	"zmm16", "zmm17", "zmm18", "zmm19",
6603 	"zmm20", "zmm21", "zmm22", "zmm23",
6604 	"zmm24", "zmm25", "zmm26", "zmm27",
6605 	"zmm28", "zmm29", "zmm30", "zmm31"
6606 };
6607 
6608 static const char *const att_names_zmm[] = {
6609 	"%zmm0", "%zmm1", "%zmm2", "%zmm3",
6610 	"%zmm4", "%zmm5", "%zmm6", "%zmm7",
6611 	"%zmm8", "%zmm9", "%zmm10", "%zmm11",
6612 	"%zmm12", "%zmm13", "%zmm14", "%zmm15",
6613 	"%zmm16", "%zmm17", "%zmm18", "%zmm19",
6614 	"%zmm20", "%zmm21", "%zmm22", "%zmm23",
6615 	"%zmm24", "%zmm25", "%zmm26", "%zmm27",
6616 	"%zmm28", "%zmm29", "%zmm30", "%zmm31"
6617 };
6618 
6619 static const char *const intel_names_mask[] = {
6620 	"k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
6621 };
6622 
6623 static const char *const att_names_mask[] = {
6624 	"%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
6625 };
6626 
6627 static struct dis386 const reg_table[][8] = {
6628 	/* REG_80 */
6629 	{
6630 	 { "addA", { Ebh1, Ib }, 0 },
6631 	 { "orA", { Ebh1, Ib }, 0 },
6632 	 { "adcA", { Ebh1, Ib }, 0 },
6633 	 { "sbbA", { Ebh1, Ib }, 0 },
6634 	 { "andA", { Ebh1, Ib }, 0 },
6635 	 { "subA", { Ebh1, Ib }, 0 },
6636 	 { "xorA", { Ebh1, Ib }, 0 },
6637 	 { "cmpA", { Eb, Ib }, 0 },
6638 	 },
6639 	/* REG_81 */
6640 	{
6641 	 { "addQ", { Evh1, Iv }, 0 },
6642 	 { "orQ", { Evh1, Iv }, 0 },
6643 	 { "adcQ", { Evh1, Iv }, 0 },
6644 	 { "sbbQ", { Evh1, Iv }, 0 },
6645 	 { "andQ", { Evh1, Iv }, 0 },
6646 	 { "subQ", { Evh1, Iv }, 0 },
6647 	 { "xorQ", { Evh1, Iv }, 0 },
6648 	 { "cmpQ", { Ev, Iv }, 0 },
6649 	 },
6650 	/* REG_83 */
6651 	{
6652 	 { "addQ", { Evh1, sIb }, 0 },
6653 	 { "orQ", { Evh1, sIb }, 0 },
6654 	 { "adcQ", { Evh1, sIb }, 0 },
6655 	 { "sbbQ", { Evh1, sIb }, 0 },
6656 	 { "andQ", { Evh1, sIb }, 0 },
6657 	 { "subQ", { Evh1, sIb }, 0 },
6658 	 { "xorQ", { Evh1, sIb }, 0 },
6659 	 { "cmpQ", { Ev, sIb }, 0 },
6660 	 },
6661 	/* REG_8F */
6662 	{
6663 	 { "popU", { stackEv }, 0 },
6664 	 { XOP_8F_TABLE(XOP_09) },
6665 	 { Bad_Opcode },
6666 	 { Bad_Opcode },
6667 	 { Bad_Opcode },
6668 	 { XOP_8F_TABLE(XOP_09) },
6669 	 },
6670 	/* REG_C0 */
6671 	{
6672 	 { "rolA", { Eb, Ib }, 0 },
6673 	 { "rorA", { Eb, Ib }, 0 },
6674 	 { "rclA", { Eb, Ib }, 0 },
6675 	 { "rcrA", { Eb, Ib }, 0 },
6676 	 { "shlA", { Eb, Ib }, 0 },
6677 	 { "shrA", { Eb, Ib }, 0 },
6678 	 { Bad_Opcode },
6679 	 { "sarA", { Eb, Ib }, 0 },
6680 	 },
6681 	/* REG_C1 */
6682 	{
6683 	 { "rolQ", { Ev, Ib }, 0 },
6684 	 { "rorQ", { Ev, Ib }, 0 },
6685 	 { "rclQ", { Ev, Ib }, 0 },
6686 	 { "rcrQ", { Ev, Ib }, 0 },
6687 	 { "shlQ", { Ev, Ib }, 0 },
6688 	 { "shrQ", { Ev, Ib }, 0 },
6689 	 { Bad_Opcode },
6690 	 { "sarQ", { Ev, Ib }, 0 },
6691 	 },
6692 	/* REG_C6 */
6693 	{
6694 	 { "movA", { Ebh3, Ib }, 0 },
6695 	 { Bad_Opcode },
6696 	 { Bad_Opcode },
6697 	 { Bad_Opcode },
6698 	 { Bad_Opcode },
6699 	 { Bad_Opcode },
6700 	 { Bad_Opcode },
6701 	 { MOD_TABLE(MOD_C6_REG_7) },
6702 	 },
6703 	/* REG_C7 */
6704 	{
6705 	 { "movQ", { Evh3, Iv }, 0 },
6706 	 { Bad_Opcode },
6707 	 { Bad_Opcode },
6708 	 { Bad_Opcode },
6709 	 { Bad_Opcode },
6710 	 { Bad_Opcode },
6711 	 { Bad_Opcode },
6712 	 { MOD_TABLE(MOD_C7_REG_7) },
6713 	 },
6714 	/* REG_D0 */
6715 	{
6716 	 { "rolA", { Eb, I1 }, 0 },
6717 	 { "rorA", { Eb, I1 }, 0 },
6718 	 { "rclA", { Eb, I1 }, 0 },
6719 	 { "rcrA", { Eb, I1 }, 0 },
6720 	 { "shlA", { Eb, I1 }, 0 },
6721 	 { "shrA", { Eb, I1 }, 0 },
6722 	 { Bad_Opcode },
6723 	 { "sarA", { Eb, I1 }, 0 },
6724 	 },
6725 	/* REG_D1 */
6726 	{
6727 	 { "rolQ", { Ev, I1 }, 0 },
6728 	 { "rorQ", { Ev, I1 }, 0 },
6729 	 { "rclQ", { Ev, I1 }, 0 },
6730 	 { "rcrQ", { Ev, I1 }, 0 },
6731 	 { "shlQ", { Ev, I1 }, 0 },
6732 	 { "shrQ", { Ev, I1 }, 0 },
6733 	 { Bad_Opcode },
6734 	 { "sarQ", { Ev, I1 }, 0 },
6735 	 },
6736 	/* REG_D2 */
6737 	{
6738 	 { "rolA", { Eb, CL }, 0 },
6739 	 { "rorA", { Eb, CL }, 0 },
6740 	 { "rclA", { Eb, CL }, 0 },
6741 	 { "rcrA", { Eb, CL }, 0 },
6742 	 { "shlA", { Eb, CL }, 0 },
6743 	 { "shrA", { Eb, CL }, 0 },
6744 	 { Bad_Opcode },
6745 	 { "sarA", { Eb, CL }, 0 },
6746 	 },
6747 	/* REG_D3 */
6748 	{
6749 	 { "rolQ", { Ev, CL }, 0 },
6750 	 { "rorQ", { Ev, CL }, 0 },
6751 	 { "rclQ", { Ev, CL }, 0 },
6752 	 { "rcrQ", { Ev, CL }, 0 },
6753 	 { "shlQ", { Ev, CL }, 0 },
6754 	 { "shrQ", { Ev, CL }, 0 },
6755 	 { Bad_Opcode },
6756 	 { "sarQ", { Ev, CL }, 0 },
6757 	 },
6758 	/* REG_F6 */
6759 	{
6760 	 { "testA", { Eb, Ib }, 0 },
6761 	 { Bad_Opcode },
6762 	 { "notA", { Ebh1 }, 0 },
6763 	 { "negA", { Ebh1 }, 0 },
6764 	 { "mulA", { Eb }, 0 },					/* Don't print the implicit %al register,  */
6765 	 { "imulA", { Eb }, 0 },				/* to distinguish these opcodes from other */
6766 	 { "divA", { Eb }, 0 },					/* mul/imul opcodes.  Do the same for div  */
6767 	 { "idivA", { Eb }, 0 },				/* and idiv for consistency.           */
6768 	 },
6769 	/* REG_F7 */
6770 	{
6771 	 { "testQ", { Ev, Iv }, 0 },
6772 	 { Bad_Opcode },
6773 	 { "notQ", { Evh1 }, 0 },
6774 	 { "negQ", { Evh1 }, 0 },
6775 	 { "mulQ", { Ev }, 0 },					/* Don't print the implicit register.  */
6776 	 { "imulQ", { Ev }, 0 },
6777 	 { "divQ", { Ev }, 0 },
6778 	 { "idivQ", { Ev }, 0 },
6779 	 },
6780 	/* REG_FE */
6781 	{
6782 	 { "incA", { Ebh1 }, 0 },
6783 	 { "decA", { Ebh1 }, 0 },
6784 	 },
6785 	/* REG_FF */
6786 	{
6787 	 { "incQ", { Evh1 }, 0 },
6788 	 { "decQ", { Evh1 }, 0 },
6789 	 { "call{&|}", { indirEv, BND }, 0 },
6790 	 { MOD_TABLE(MOD_FF_REG_3) },
6791 	 { "jmp{&|}", { indirEv, BND }, 0 },
6792 	 { MOD_TABLE(MOD_FF_REG_5) },
6793 	 { "pushU", { stackEv }, 0 },
6794 	 { Bad_Opcode },
6795 	 },
6796 	/* REG_0F00 */
6797 	{
6798 	 { "sldtD", { Sv }, 0 },
6799 	 { "strD", { Sv }, 0 },
6800 	 { "lldt", { Ew }, 0 },
6801 	 { "ltr", { Ew }, 0 },
6802 	 { "verr", { Ew }, 0 },
6803 	 { "verw", { Ew }, 0 },
6804 	 { Bad_Opcode },
6805 	 { Bad_Opcode },
6806 	 },
6807 	/* REG_0F01 */
6808 	{
6809 	 { MOD_TABLE(MOD_0F01_REG_0) },
6810 	 { MOD_TABLE(MOD_0F01_REG_1) },
6811 	 { MOD_TABLE(MOD_0F01_REG_2) },
6812 	 { MOD_TABLE(MOD_0F01_REG_3) },
6813 	 { "smswD", { Sv }, 0 },
6814 	 { MOD_TABLE(MOD_0F01_REG_5) },
6815 	 { "lmsw", { Ew }, 0 },
6816 	 { MOD_TABLE(MOD_0F01_REG_7) },
6817 	 },
6818 	/* REG_0F0D */
6819 	{
6820 	 { "prefetch", { Mb }, 0 },
6821 	 { "prefetchw", { Mb }, 0 },
6822 	 { "prefetchwt1", { Mb }, 0 },
6823 	 { "prefetch", { Mb }, 0 },
6824 	 { "prefetch", { Mb }, 0 },
6825 	 { "prefetch", { Mb }, 0 },
6826 	 { "prefetch", { Mb }, 0 },
6827 	 { "prefetch", { Mb }, 0 },
6828 	 },
6829 	/* REG_0F18 */
6830 	{
6831 	 { MOD_TABLE(MOD_0F18_REG_0) },
6832 	 { MOD_TABLE(MOD_0F18_REG_1) },
6833 	 { MOD_TABLE(MOD_0F18_REG_2) },
6834 	 { MOD_TABLE(MOD_0F18_REG_3) },
6835 	 { MOD_TABLE(MOD_0F18_REG_4) },
6836 	 { MOD_TABLE(MOD_0F18_REG_5) },
6837 	 { MOD_TABLE(MOD_0F18_REG_6) },
6838 	 { MOD_TABLE(MOD_0F18_REG_7) },
6839 	 },
6840 	/* REG_0F71 */
6841 	{
6842 	 { Bad_Opcode },
6843 	 { Bad_Opcode },
6844 	 { MOD_TABLE(MOD_0F71_REG_2) },
6845 	 { Bad_Opcode },
6846 	 { MOD_TABLE(MOD_0F71_REG_4) },
6847 	 { Bad_Opcode },
6848 	 { MOD_TABLE(MOD_0F71_REG_6) },
6849 	 },
6850 	/* REG_0F72 */
6851 	{
6852 	 { Bad_Opcode },
6853 	 { Bad_Opcode },
6854 	 { MOD_TABLE(MOD_0F72_REG_2) },
6855 	 { Bad_Opcode },
6856 	 { MOD_TABLE(MOD_0F72_REG_4) },
6857 	 { Bad_Opcode },
6858 	 { MOD_TABLE(MOD_0F72_REG_6) },
6859 	 },
6860 	/* REG_0F73 */
6861 	{
6862 	 { Bad_Opcode },
6863 	 { Bad_Opcode },
6864 	 { MOD_TABLE(MOD_0F73_REG_2) },
6865 	 { MOD_TABLE(MOD_0F73_REG_3) },
6866 	 { Bad_Opcode },
6867 	 { Bad_Opcode },
6868 	 { MOD_TABLE(MOD_0F73_REG_6) },
6869 	 { MOD_TABLE(MOD_0F73_REG_7) },
6870 	 },
6871 	/* REG_0FA6 */
6872 	{
6873 	 { "montmul", { { OP_0f07, 0 } }, 0 },
6874 	 { "xsha1",   { { OP_0f07, 0 } }, 0 },
6875 	 { "xsha256", { { OP_0f07, 0 } }, 0 },
6876 	 },
6877 	/* REG_0FA7 */
6878 	{
6879 	 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
6880 	 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
6881 	 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
6882 	 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
6883 	 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
6884 	 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
6885 	 },
6886 	/* REG_0FAE */
6887 	{
6888 	 { MOD_TABLE(MOD_0FAE_REG_0) },
6889 	 { MOD_TABLE(MOD_0FAE_REG_1) },
6890 	 { MOD_TABLE(MOD_0FAE_REG_2) },
6891 	 { MOD_TABLE(MOD_0FAE_REG_3) },
6892 	 { MOD_TABLE(MOD_0FAE_REG_4) },
6893 	 { MOD_TABLE(MOD_0FAE_REG_5) },
6894 	 { MOD_TABLE(MOD_0FAE_REG_6) },
6895 	 { MOD_TABLE(MOD_0FAE_REG_7) },
6896 	 },
6897 	/* REG_0FBA */
6898 	{
6899 	 { Bad_Opcode },
6900 	 { Bad_Opcode },
6901 	 { Bad_Opcode },
6902 	 { Bad_Opcode },
6903 	 { "btQ", { Ev, Ib }, 0 },
6904 	 { "btsQ", { Evh1, Ib }, 0 },
6905 	 { "btrQ", { Evh1, Ib }, 0 },
6906 	 { "btcQ", { Evh1, Ib }, 0 },
6907 	 },
6908 	/* REG_0FC7 */
6909 	{
6910 	 { Bad_Opcode },
6911 	 { "cmpxchg8b", { {CMPXCHG8B_Fixup, q_mode } }, 0 },
6912 	 { Bad_Opcode },
6913 	 { MOD_TABLE(MOD_0FC7_REG_3) },
6914 	 { MOD_TABLE(MOD_0FC7_REG_4) },
6915 	 { MOD_TABLE(MOD_0FC7_REG_5) },
6916 	 { MOD_TABLE(MOD_0FC7_REG_6) },
6917 	 { MOD_TABLE(MOD_0FC7_REG_7) },
6918 	 },
6919 	/* REG_VEX_0F71 */
6920 	{
6921 	 { Bad_Opcode },
6922 	 { Bad_Opcode },
6923 	 { MOD_TABLE(MOD_VEX_0F71_REG_2) },
6924 	 { Bad_Opcode },
6925 	 { MOD_TABLE(MOD_VEX_0F71_REG_4) },
6926 	 { Bad_Opcode },
6927 	 { MOD_TABLE(MOD_VEX_0F71_REG_6) },
6928 	 },
6929 	/* REG_VEX_0F72 */
6930 	{
6931 	 { Bad_Opcode },
6932 	 { Bad_Opcode },
6933 	 { MOD_TABLE(MOD_VEX_0F72_REG_2) },
6934 	 { Bad_Opcode },
6935 	 { MOD_TABLE(MOD_VEX_0F72_REG_4) },
6936 	 { Bad_Opcode },
6937 	 { MOD_TABLE(MOD_VEX_0F72_REG_6) },
6938 	 },
6939 	/* REG_VEX_0F73 */
6940 	{
6941 	 { Bad_Opcode },
6942 	 { Bad_Opcode },
6943 	 { MOD_TABLE(MOD_VEX_0F73_REG_2) },
6944 	 { MOD_TABLE(MOD_VEX_0F73_REG_3) },
6945 	 { Bad_Opcode },
6946 	 { Bad_Opcode },
6947 	 { MOD_TABLE(MOD_VEX_0F73_REG_6) },
6948 	 { MOD_TABLE(MOD_VEX_0F73_REG_7) },
6949 	 },
6950 	/* REG_VEX_0FAE */
6951 	{
6952 	 { Bad_Opcode },
6953 	 { Bad_Opcode },
6954 	 { MOD_TABLE(MOD_VEX_0FAE_REG_2) },
6955 	 { MOD_TABLE(MOD_VEX_0FAE_REG_3) },
6956 	 },
6957 	/* REG_VEX_0F38F3 */
6958 	{
6959 	 { Bad_Opcode },
6960 	 { PREFIX_TABLE(PREFIX_VEX_0F38F3_REG_1) },
6961 	 { PREFIX_TABLE(PREFIX_VEX_0F38F3_REG_2) },
6962 	 { PREFIX_TABLE(PREFIX_VEX_0F38F3_REG_3) },
6963 	 },
6964 	/* REG_XOP_LWPCB */
6965 	{
6966 	 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
6967 	 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
6968 	 },
6969 	/* REG_XOP_LWP */
6970 	{
6971 	 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
6972 	 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
6973 	},
6974 	/* REG_XOP_TBM_01 */
6975 	{
6976 	 { Bad_Opcode },
6977 	 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
6978 	 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
6979 	 { "blcs",    { { OP_LWP_E, 0 }, Ev }, 0 },
6980 	 { "tzmsk",   { { OP_LWP_E, 0 }, Ev }, 0 },
6981 	 { "blcic",   { { OP_LWP_E, 0 }, Ev }, 0 },
6982 	 { "blsic",   { { OP_LWP_E, 0 }, Ev }, 0 },
6983 	 { "t1mskc",  { { OP_LWP_E, 0 }, Ev }, 0 },
6984 	 },
6985 	/* REG_XOP_TBM_02 */
6986 	{
6987 	 { Bad_Opcode },
6988 	 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
6989 	 { Bad_Opcode },
6990 	 { Bad_Opcode },
6991 	 { Bad_Opcode },
6992 	 { Bad_Opcode },
6993 	 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
6994 	 },
6995 #define NEED_REG_TABLE
6996 #include "i386-dis-evex.h"
6997 #undef NEED_REG_TABLE
6998 };
6999 
7000 static const struct dis386 prefix_table[][4] = {
7001 	/* PREFIX_90 */
7002 	{
7003 	 { "xchgS", { {NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
7004 	 { "pause", { XX }, 0 },
7005 	 { "xchgS", { {NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
7006 	 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
7007 	 },
7008 
7009 	/* PREFIX_0F10 */
7010 	{
7011 	 { "movups", { XM, EXx }, PREFIX_OPCODE },
7012 	 { "movss", { XM, EXd }, PREFIX_OPCODE },
7013 	 { "movupd", { XM, EXx }, PREFIX_OPCODE },
7014 	 { "movsd", { XM, EXq }, PREFIX_OPCODE },
7015 	 },
7016 
7017 	/* PREFIX_0F11 */
7018 	{
7019 	 { "movups", { EXxS, XM }, PREFIX_OPCODE },
7020 	 { "movss", { EXdS, XM }, PREFIX_OPCODE },
7021 	 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
7022 	 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
7023 	 },
7024 
7025 	/* PREFIX_0F12 */
7026 	{
7027 	 { MOD_TABLE(MOD_0F12_PREFIX_0) },
7028 	 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
7029 	 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
7030 	 { "movddup", { XM, EXq }, PREFIX_OPCODE },
7031 	 },
7032 
7033 	/* PREFIX_0F16 */
7034 	{
7035 	 { MOD_TABLE(MOD_0F16_PREFIX_0) },
7036 	 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
7037 	 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
7038 	 },
7039 
7040 	/* PREFIX_0F1A */
7041 	{
7042 	 { MOD_TABLE(MOD_0F1A_PREFIX_0) },
7043 	 { "bndcl", { Gbnd, Ev_bnd }, 0 },
7044 	 { "bndmov", { Gbnd, Ebnd }, 0 },
7045 	 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7046 	 },
7047 
7048 	/* PREFIX_0F1B */
7049 	{
7050 	 { MOD_TABLE(MOD_0F1B_PREFIX_0) },
7051 	 { MOD_TABLE(MOD_0F1B_PREFIX_1) },
7052 	 { "bndmov", { Ebnd, Gbnd }, 0 },
7053 	 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7054 	 },
7055 
7056 	/* PREFIX_0F2A */
7057 	{
7058 	 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
7059 	 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
7060 	 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
7061 	 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
7062 	 },
7063 
7064 	/* PREFIX_0F2B */
7065 	{
7066 	 { MOD_TABLE(MOD_0F2B_PREFIX_0) },
7067 	 { MOD_TABLE(MOD_0F2B_PREFIX_1) },
7068 	 { MOD_TABLE(MOD_0F2B_PREFIX_2) },
7069 	 { MOD_TABLE(MOD_0F2B_PREFIX_3) },
7070 	 },
7071 
7072 	/* PREFIX_0F2C */
7073 	{
7074 	 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
7075 	 { "cvttss2siY", { Gv, EXd }, PREFIX_OPCODE },
7076 	 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
7077 	 { "cvttsd2siY", { Gv, EXq }, PREFIX_OPCODE },
7078 	 },
7079 
7080 	/* PREFIX_0F2D */
7081 	{
7082 	 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
7083 	 { "cvtss2siY", { Gv, EXd }, PREFIX_OPCODE },
7084 	 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
7085 	 { "cvtsd2siY", { Gv, EXq }, PREFIX_OPCODE },
7086 	 },
7087 
7088 	/* PREFIX_0F2E */
7089 	{
7090 	 { "ucomiss", { XM, EXd }, 0 },
7091 	 { Bad_Opcode },
7092 	 { "ucomisd", { XM, EXq }, 0 },
7093 	 },
7094 
7095 	/* PREFIX_0F2F */
7096 	{
7097 	 { "comiss", { XM, EXd }, 0 },
7098 	 { Bad_Opcode },
7099 	 { "comisd", { XM, EXq }, 0 },
7100 	 },
7101 
7102 	/* PREFIX_0F51 */
7103 	{
7104 	 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
7105 	 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
7106 	 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
7107 	 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
7108 	 },
7109 
7110 	/* PREFIX_0F52 */
7111 	{
7112 	 { "rsqrtps", { XM, EXx }, PREFIX_OPCODE },
7113 	 { "rsqrtss", { XM, EXd }, PREFIX_OPCODE },
7114 	 },
7115 
7116 	/* PREFIX_0F53 */
7117 	{
7118 	 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
7119 	 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
7120 	 },
7121 
7122 	/* PREFIX_0F58 */
7123 	{
7124 	 { "addps", { XM, EXx }, PREFIX_OPCODE },
7125 	 { "addss", { XM, EXd }, PREFIX_OPCODE },
7126 	 { "addpd", { XM, EXx }, PREFIX_OPCODE },
7127 	 { "addsd", { XM, EXq }, PREFIX_OPCODE },
7128 	 },
7129 
7130 	/* PREFIX_0F59 */
7131 	{
7132 	 { "mulps", { XM, EXx }, PREFIX_OPCODE },
7133 	 { "mulss", { XM, EXd }, PREFIX_OPCODE },
7134 	 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
7135 	 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
7136 	 },
7137 
7138 	/* PREFIX_0F5A */
7139 	{
7140 	 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
7141 	 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
7142 	 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
7143 	 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
7144 	 },
7145 
7146 	/* PREFIX_0F5B */
7147 	{
7148 	 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
7149 	 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
7150 	 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
7151 	 },
7152 
7153 	/* PREFIX_0F5C */
7154 	{
7155 	 { "subps", { XM, EXx }, PREFIX_OPCODE },
7156 	 { "subss", { XM, EXd }, PREFIX_OPCODE },
7157 	 { "subpd", { XM, EXx }, PREFIX_OPCODE },
7158 	 { "subsd", { XM, EXq }, PREFIX_OPCODE },
7159 	 },
7160 
7161 	/* PREFIX_0F5D */
7162 	{
7163 	 { "minps", { XM, EXx }, PREFIX_OPCODE },
7164 	 { "minss", { XM, EXd }, PREFIX_OPCODE },
7165 	 { "minpd", { XM, EXx }, PREFIX_OPCODE },
7166 	 { "minsd", { XM, EXq }, PREFIX_OPCODE },
7167 	 },
7168 
7169 	/* PREFIX_0F5E */
7170 	{
7171 	 { "divps", { XM, EXx }, PREFIX_OPCODE },
7172 	 { "divss", { XM, EXd }, PREFIX_OPCODE },
7173 	 { "divpd", { XM, EXx }, PREFIX_OPCODE },
7174 	 { "divsd", { XM, EXq }, PREFIX_OPCODE },
7175 	 },
7176 
7177 	/* PREFIX_0F5F */
7178 	{
7179 	 { "maxps", { XM, EXx }, PREFIX_OPCODE },
7180 	 { "maxss", { XM, EXd }, PREFIX_OPCODE },
7181 	 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
7182 	 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
7183 	 },
7184 
7185 	/* PREFIX_0F60 */
7186 	{
7187 	 { "punpcklbw", { MX, EMd }, PREFIX_OPCODE },
7188 	 { Bad_Opcode },
7189 	 { "punpcklbw", { MX, EMx }, PREFIX_OPCODE },
7190 	 },
7191 
7192 	/* PREFIX_0F61 */
7193 	{
7194 	 { "punpcklwd", { MX, EMd }, PREFIX_OPCODE },
7195 	 { Bad_Opcode },
7196 	 { "punpcklwd", { MX, EMx }, PREFIX_OPCODE },
7197 	 },
7198 
7199 	/* PREFIX_0F62 */
7200 	{
7201 	 { "punpckldq", { MX, EMd }, PREFIX_OPCODE },
7202 	 { Bad_Opcode },
7203 	 { "punpckldq", { MX, EMx }, PREFIX_OPCODE },
7204 	 },
7205 
7206 	/* PREFIX_0F6C */
7207 	{
7208 	 { Bad_Opcode },
7209 	 { Bad_Opcode },
7210 	 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
7211 	 },
7212 
7213 	/* PREFIX_0F6D */
7214 	{
7215 	 { Bad_Opcode },
7216 	 { Bad_Opcode },
7217 	 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
7218 	 },
7219 
7220 	/* PREFIX_0F6F */
7221 	{
7222 	 { "movq", { MX, EM }, PREFIX_OPCODE },
7223 	 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
7224 	 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
7225 	 },
7226 
7227 	/* PREFIX_0F70 */
7228 	{
7229 	 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
7230 	 { "pshufhw", { XM, EXx, Ib }, PREFIX_OPCODE },
7231 	 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
7232 	 { "pshuflw", { XM, EXx, Ib }, PREFIX_OPCODE },
7233 	 },
7234 
7235 	/* PREFIX_0F73_REG_3 */
7236 	{
7237 	 { Bad_Opcode },
7238 	 { Bad_Opcode },
7239 	 { "psrldq", { XS, Ib }, 0 },
7240 	 },
7241 
7242 	/* PREFIX_0F73_REG_7 */
7243 	{
7244 	 { Bad_Opcode },
7245 	 { Bad_Opcode },
7246 	 { "pslldq", { XS, Ib }, 0 },
7247 	 },
7248 
7249 	/* PREFIX_0F78 */
7250 	{
7251 	 { "vmread", { Em, Gm }, 0 },
7252 	 { Bad_Opcode },
7253 	 { "extrq", { XS, Ib, Ib }, 0 },
7254 	 { "insertq", { XM, XS, Ib, Ib }, 0 },
7255 	 },
7256 
7257 	/* PREFIX_0F79 */
7258 	{
7259 	 { "vmwrite", { Gm, Em }, 0 },
7260 	 { Bad_Opcode },
7261 	 { "extrq", { XM, XS }, 0 },
7262 	 { "insertq", { XM, XS }, 0 },
7263 	 },
7264 
7265 	/* PREFIX_0F7C */
7266 	{
7267 	 { Bad_Opcode },
7268 	 { Bad_Opcode },
7269 	 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
7270 	 { "haddps", { XM, EXx }, PREFIX_OPCODE },
7271 	 },
7272 
7273 	/* PREFIX_0F7D */
7274 	{
7275 	 { Bad_Opcode },
7276 	 { Bad_Opcode },
7277 	 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
7278 	 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
7279 	 },
7280 
7281 	/* PREFIX_0F7E */
7282 	{
7283 	 { "movK", { Edq, MX }, PREFIX_OPCODE },
7284 	 { "movq", { XM, EXq }, PREFIX_OPCODE },
7285 	 { "movK", { Edq, XM }, PREFIX_OPCODE },
7286 	 },
7287 
7288 	/* PREFIX_0F7F */
7289 	{
7290 	 { "movq", { EMS, MX }, PREFIX_OPCODE },
7291 	 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
7292 	 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
7293 	 },
7294 
7295 	/* PREFIX_0FAE_REG_0 */
7296 	{
7297 	 { Bad_Opcode },
7298 	 { "rdfsbase", { Ev }, 0 },
7299 	 },
7300 
7301 	/* PREFIX_0FAE_REG_1 */
7302 	{
7303 	 { Bad_Opcode },
7304 	 { "rdgsbase", { Ev }, 0 },
7305 	 },
7306 
7307 	/* PREFIX_0FAE_REG_2 */
7308 	{
7309 	 { Bad_Opcode },
7310 	 { "wrfsbase", { Ev }, 0 },
7311 	 },
7312 
7313 	/* PREFIX_0FAE_REG_3 */
7314 	{
7315 	 { Bad_Opcode },
7316 	 { "wrgsbase", { Ev }, 0 },
7317 	 },
7318 
7319 	/* PREFIX_MOD_0_0FAE_REG_4 */
7320 	{
7321 	 { "xsave", { FXSAVE }, 0 },
7322 	 { "ptwrite%LQ", { Edq }, 0 },
7323 	 },
7324 
7325 	/* PREFIX_MOD_3_0FAE_REG_4 */
7326 	{
7327 	 { Bad_Opcode },
7328 	 { "ptwrite%LQ", { Edq }, 0 },
7329 	 },
7330 
7331 	/* PREFIX_0FAE_REG_6 */
7332 	{
7333 	 { "xsaveopt", { FXSAVE }, 0 },
7334 	 { Bad_Opcode },
7335 	 { "clwb", { Mb }, 0 },
7336 	 },
7337 
7338 	/* PREFIX_0FAE_REG_7 */
7339 	{
7340 	 { "clflush", { Mb }, 0 },
7341 	 { Bad_Opcode },
7342 	 { "clflushopt", { Mb }, 0 },
7343 	 },
7344 
7345 	/* PREFIX_0FB8 */
7346 	{
7347 	 { Bad_Opcode },
7348 	 { "popcntS", { Gv, Ev }, 0 },
7349 	 },
7350 
7351 	/* PREFIX_0FBC */
7352 	{
7353 	 { "bsfS", { Gv, Ev }, 0 },
7354 	 { "tzcntS", { Gv, Ev }, 0 },
7355 	 { "bsfS", { Gv, Ev }, 0 },
7356 	 },
7357 
7358 	/* PREFIX_0FBD */
7359 	{
7360 	 { "bsrS", { Gv, Ev }, 0 },
7361 	 { "lzcntS", { Gv, Ev }, 0 },
7362 	 { "bsrS", { Gv, Ev }, 0 },
7363 	 },
7364 
7365 	/* PREFIX_0FC2 */
7366 	{
7367 	 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
7368 	 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
7369 	 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
7370 	 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
7371 	 },
7372 
7373 	/* PREFIX_MOD_0_0FC3 */
7374 	{
7375 	 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
7376 	 },
7377 
7378 	/* PREFIX_MOD_0_0FC7_REG_6 */
7379 	{
7380 	 { "vmptrld", { Mq }, 0 },
7381 	 { "vmxon", { Mq }, 0 },
7382 	 { "vmclear", { Mq }, 0 },
7383 	 },
7384 
7385 	/* PREFIX_MOD_3_0FC7_REG_6 */
7386 	{
7387 	 { "rdrand", { Ev }, 0 },
7388 	 { Bad_Opcode },
7389 	 { "rdrand", { Ev }, 0 }
7390 	 },
7391 
7392 	/* PREFIX_MOD_3_0FC7_REG_7 */
7393 	{
7394 	 { "rdseed", { Ev }, 0 },
7395 	 { "rdpid", { Em }, 0 },
7396 	 { "rdseed", { Ev }, 0 },
7397 	 },
7398 
7399 	/* PREFIX_0FD0 */
7400 	{
7401 	 { Bad_Opcode },
7402 	 { Bad_Opcode },
7403 	 { "addsubpd", { XM, EXx }, 0 },
7404 	 { "addsubps", { XM, EXx }, 0 },
7405 	 },
7406 
7407 	/* PREFIX_0FD6 */
7408 	{
7409 	 { Bad_Opcode },
7410 	 { "movq2dq", { XM, MS }, 0 },
7411 	 { "movq", { EXqS, XM }, 0 },
7412 	 { "movdq2q", { MX, XS }, 0 },
7413 	 },
7414 
7415 	/* PREFIX_0FE6 */
7416 	{
7417 	 { Bad_Opcode },
7418 	 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
7419 	 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
7420 	 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7421 	 },
7422 
7423 	/* PREFIX_0FE7 */
7424 	{
7425 	 { "movntq", { Mq, MX }, PREFIX_OPCODE },
7426 	 { Bad_Opcode },
7427 	 { MOD_TABLE(MOD_0FE7_PREFIX_2) },
7428 	 },
7429 
7430 	/* PREFIX_0FF0 */
7431 	{
7432 	 { Bad_Opcode },
7433 	 { Bad_Opcode },
7434 	 { Bad_Opcode },
7435 	 { MOD_TABLE(MOD_0FF0_PREFIX_3) },
7436 	 },
7437 
7438 	/* PREFIX_0FF7 */
7439 	{
7440 	 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
7441 	 { Bad_Opcode },
7442 	 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
7443 	 },
7444 
7445 	/* PREFIX_0F3810 */
7446 	{
7447 	 { Bad_Opcode },
7448 	 { Bad_Opcode },
7449 	 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
7450 	 },
7451 
7452 	/* PREFIX_0F3814 */
7453 	{
7454 	 { Bad_Opcode },
7455 	 { Bad_Opcode },
7456 	 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
7457 	 },
7458 
7459 	/* PREFIX_0F3815 */
7460 	{
7461 	 { Bad_Opcode },
7462 	 { Bad_Opcode },
7463 	 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
7464 	 },
7465 
7466 	/* PREFIX_0F3817 */
7467 	{
7468 	 { Bad_Opcode },
7469 	 { Bad_Opcode },
7470 	 { "ptest", { XM, EXx }, PREFIX_OPCODE },
7471 	 },
7472 
7473 	/* PREFIX_0F3820 */
7474 	{
7475 	 { Bad_Opcode },
7476 	 { Bad_Opcode },
7477 	 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
7478 	 },
7479 
7480 	/* PREFIX_0F3821 */
7481 	{
7482 	 { Bad_Opcode },
7483 	 { Bad_Opcode },
7484 	 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
7485 	 },
7486 
7487 	/* PREFIX_0F3822 */
7488 	{
7489 	 { Bad_Opcode },
7490 	 { Bad_Opcode },
7491 	 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
7492 	 },
7493 
7494 	/* PREFIX_0F3823 */
7495 	{
7496 	 { Bad_Opcode },
7497 	 { Bad_Opcode },
7498 	 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
7499 	 },
7500 
7501 	/* PREFIX_0F3824 */
7502 	{
7503 	 { Bad_Opcode },
7504 	 { Bad_Opcode },
7505 	 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
7506 	 },
7507 
7508 	/* PREFIX_0F3825 */
7509 	{
7510 	 { Bad_Opcode },
7511 	 { Bad_Opcode },
7512 	 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
7513 	 },
7514 
7515 	/* PREFIX_0F3828 */
7516 	{
7517 	 { Bad_Opcode },
7518 	 { Bad_Opcode },
7519 	 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
7520 	 },
7521 
7522 	/* PREFIX_0F3829 */
7523 	{
7524 	 { Bad_Opcode },
7525 	 { Bad_Opcode },
7526 	 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
7527 	 },
7528 
7529 	/* PREFIX_0F382A */
7530 	{
7531 	 { Bad_Opcode },
7532 	 { Bad_Opcode },
7533 	 { MOD_TABLE(MOD_0F382A_PREFIX_2) },
7534 	 },
7535 
7536 	/* PREFIX_0F382B */
7537 	{
7538 	 { Bad_Opcode },
7539 	 { Bad_Opcode },
7540 	 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
7541 	 },
7542 
7543 	/* PREFIX_0F3830 */
7544 	{
7545 	 { Bad_Opcode },
7546 	 { Bad_Opcode },
7547 	 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
7548 	 },
7549 
7550 	/* PREFIX_0F3831 */
7551 	{
7552 	 { Bad_Opcode },
7553 	 { Bad_Opcode },
7554 	 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
7555 	 },
7556 
7557 	/* PREFIX_0F3832 */
7558 	{
7559 	 { Bad_Opcode },
7560 	 { Bad_Opcode },
7561 	 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
7562 	 },
7563 
7564 	/* PREFIX_0F3833 */
7565 	{
7566 	 { Bad_Opcode },
7567 	 { Bad_Opcode },
7568 	 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
7569 	 },
7570 
7571 	/* PREFIX_0F3834 */
7572 	{
7573 	 { Bad_Opcode },
7574 	 { Bad_Opcode },
7575 	 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
7576 	 },
7577 
7578 	/* PREFIX_0F3835 */
7579 	{
7580 	 { Bad_Opcode },
7581 	 { Bad_Opcode },
7582 	 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
7583 	 },
7584 
7585 	/* PREFIX_0F3837 */
7586 	{
7587 	 { Bad_Opcode },
7588 	 { Bad_Opcode },
7589 	 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
7590 	 },
7591 
7592 	/* PREFIX_0F3838 */
7593 	{
7594 	 { Bad_Opcode },
7595 	 { Bad_Opcode },
7596 	 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
7597 	 },
7598 
7599 	/* PREFIX_0F3839 */
7600 	{
7601 	 { Bad_Opcode },
7602 	 { Bad_Opcode },
7603 	 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
7604 	 },
7605 
7606 	/* PREFIX_0F383A */
7607 	{
7608 	 { Bad_Opcode },
7609 	 { Bad_Opcode },
7610 	 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
7611 	 },
7612 
7613 	/* PREFIX_0F383B */
7614 	{
7615 	 { Bad_Opcode },
7616 	 { Bad_Opcode },
7617 	 { "pminud", { XM, EXx }, PREFIX_OPCODE },
7618 	 },
7619 
7620 	/* PREFIX_0F383C */
7621 	{
7622 	 { Bad_Opcode },
7623 	 { Bad_Opcode },
7624 	 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
7625 	 },
7626 
7627 	/* PREFIX_0F383D */
7628 	{
7629 	 { Bad_Opcode },
7630 	 { Bad_Opcode },
7631 	 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
7632 	 },
7633 
7634 	/* PREFIX_0F383E */
7635 	{
7636 	 { Bad_Opcode },
7637 	 { Bad_Opcode },
7638 	 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
7639 	 },
7640 
7641 	/* PREFIX_0F383F */
7642 	{
7643 	 { Bad_Opcode },
7644 	 { Bad_Opcode },
7645 	 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
7646 	 },
7647 
7648 	/* PREFIX_0F3840 */
7649 	{
7650 	 { Bad_Opcode },
7651 	 { Bad_Opcode },
7652 	 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
7653 	 },
7654 
7655 	/* PREFIX_0F3841 */
7656 	{
7657 	 { Bad_Opcode },
7658 	 { Bad_Opcode },
7659 	 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
7660 	 },
7661 
7662 	/* PREFIX_0F3880 */
7663 	{
7664 	 { Bad_Opcode },
7665 	 { Bad_Opcode },
7666 	 { "invept", { Gm, Mo }, PREFIX_OPCODE },
7667 	 },
7668 
7669 	/* PREFIX_0F3881 */
7670 	{
7671 	 { Bad_Opcode },
7672 	 { Bad_Opcode },
7673 	 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
7674 	 },
7675 
7676 	/* PREFIX_0F3882 */
7677 	{
7678 	 { Bad_Opcode },
7679 	 { Bad_Opcode },
7680 	 { "invpcid", { Gm, M }, PREFIX_OPCODE },
7681 	 },
7682 
7683 	/* PREFIX_0F38C8 */
7684 	{
7685 	 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
7686 	 },
7687 
7688 	/* PREFIX_0F38C9 */
7689 	{
7690 	 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
7691 	 },
7692 
7693 	/* PREFIX_0F38CA */
7694 	{
7695 	 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
7696 	 },
7697 
7698 	/* PREFIX_0F38CB */
7699 	{
7700 	 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
7701 	 },
7702 
7703 	/* PREFIX_0F38CC */
7704 	{
7705 	 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
7706 	 },
7707 
7708 	/* PREFIX_0F38CD */
7709 	{
7710 	 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
7711 	 },
7712 
7713 	/* PREFIX_0F38DB */
7714 	{
7715 	 { Bad_Opcode },
7716 	 { Bad_Opcode },
7717 	 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
7718 	 },
7719 
7720 	/* PREFIX_0F38DC */
7721 	{
7722 	 { Bad_Opcode },
7723 	 { Bad_Opcode },
7724 	 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
7725 	 },
7726 
7727 	/* PREFIX_0F38DD */
7728 	{
7729 	 { Bad_Opcode },
7730 	 { Bad_Opcode },
7731 	 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
7732 	 },
7733 
7734 	/* PREFIX_0F38DE */
7735 	{
7736 	 { Bad_Opcode },
7737 	 { Bad_Opcode },
7738 	 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
7739 	 },
7740 
7741 	/* PREFIX_0F38DF */
7742 	{
7743 	 { Bad_Opcode },
7744 	 { Bad_Opcode },
7745 	 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
7746 	 },
7747 
7748 	/* PREFIX_0F38F0 */
7749 	{
7750 	 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
7751 	 { Bad_Opcode },
7752 	 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
7753 	 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
7754 	 },
7755 
7756 	/* PREFIX_0F38F1 */
7757 	{
7758 	 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
7759 	 { Bad_Opcode },
7760 	 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
7761 	 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
7762 	 },
7763 
7764 	/* PREFIX_0F38F6 */
7765 	{
7766 	 { Bad_Opcode },
7767 	 { "adoxS", { Gdq, Edq }, PREFIX_OPCODE },
7768 	 { "adcxS", { Gdq, Edq }, PREFIX_OPCODE },
7769 	 { Bad_Opcode },
7770 	 },
7771 
7772 	/* PREFIX_0F3A08 */
7773 	{
7774 	 { Bad_Opcode },
7775 	 { Bad_Opcode },
7776 	 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
7777 	 },
7778 
7779 	/* PREFIX_0F3A09 */
7780 	{
7781 	 { Bad_Opcode },
7782 	 { Bad_Opcode },
7783 	 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
7784 	 },
7785 
7786 	/* PREFIX_0F3A0A */
7787 	{
7788 	 { Bad_Opcode },
7789 	 { Bad_Opcode },
7790 	 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
7791 	 },
7792 
7793 	/* PREFIX_0F3A0B */
7794 	{
7795 	 { Bad_Opcode },
7796 	 { Bad_Opcode },
7797 	 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
7798 	 },
7799 
7800 	/* PREFIX_0F3A0C */
7801 	{
7802 	 { Bad_Opcode },
7803 	 { Bad_Opcode },
7804 	 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
7805 	 },
7806 
7807 	/* PREFIX_0F3A0D */
7808 	{
7809 	 { Bad_Opcode },
7810 	 { Bad_Opcode },
7811 	 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
7812 	 },
7813 
7814 	/* PREFIX_0F3A0E */
7815 	{
7816 	 { Bad_Opcode },
7817 	 { Bad_Opcode },
7818 	 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
7819 	 },
7820 
7821 	/* PREFIX_0F3A14 */
7822 	{
7823 	 { Bad_Opcode },
7824 	 { Bad_Opcode },
7825 	 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
7826 	 },
7827 
7828 	/* PREFIX_0F3A15 */
7829 	{
7830 	 { Bad_Opcode },
7831 	 { Bad_Opcode },
7832 	 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
7833 	 },
7834 
7835 	/* PREFIX_0F3A16 */
7836 	{
7837 	 { Bad_Opcode },
7838 	 { Bad_Opcode },
7839 	 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
7840 	 },
7841 
7842 	/* PREFIX_0F3A17 */
7843 	{
7844 	 { Bad_Opcode },
7845 	 { Bad_Opcode },
7846 	 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
7847 	 },
7848 
7849 	/* PREFIX_0F3A20 */
7850 	{
7851 	 { Bad_Opcode },
7852 	 { Bad_Opcode },
7853 	 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
7854 	 },
7855 
7856 	/* PREFIX_0F3A21 */
7857 	{
7858 	 { Bad_Opcode },
7859 	 { Bad_Opcode },
7860 	 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
7861 	 },
7862 
7863 	/* PREFIX_0F3A22 */
7864 	{
7865 	 { Bad_Opcode },
7866 	 { Bad_Opcode },
7867 	 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
7868 	 },
7869 
7870 	/* PREFIX_0F3A40 */
7871 	{
7872 	 { Bad_Opcode },
7873 	 { Bad_Opcode },
7874 	 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
7875 	 },
7876 
7877 	/* PREFIX_0F3A41 */
7878 	{
7879 	 { Bad_Opcode },
7880 	 { Bad_Opcode },
7881 	 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
7882 	 },
7883 
7884 	/* PREFIX_0F3A42 */
7885 	{
7886 	 { Bad_Opcode },
7887 	 { Bad_Opcode },
7888 	 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
7889 	 },
7890 
7891 	/* PREFIX_0F3A44 */
7892 	{
7893 	 { Bad_Opcode },
7894 	 { Bad_Opcode },
7895 	 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
7896 	 },
7897 
7898 	/* PREFIX_0F3A60 */
7899 	{
7900 	 { Bad_Opcode },
7901 	 { Bad_Opcode },
7902 	 { "pcmpestrm", { XM, EXx, Ib }, PREFIX_OPCODE },
7903 	 },
7904 
7905 	/* PREFIX_0F3A61 */
7906 	{
7907 	 { Bad_Opcode },
7908 	 { Bad_Opcode },
7909 	 { "pcmpestri", { XM, EXx, Ib }, PREFIX_OPCODE },
7910 	 },
7911 
7912 	/* PREFIX_0F3A62 */
7913 	{
7914 	 { Bad_Opcode },
7915 	 { Bad_Opcode },
7916 	 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
7917 	 },
7918 
7919 	/* PREFIX_0F3A63 */
7920 	{
7921 	 { Bad_Opcode },
7922 	 { Bad_Opcode },
7923 	 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
7924 	 },
7925 
7926 	/* PREFIX_0F3ACC */
7927 	{
7928 	 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
7929 	 },
7930 
7931 	/* PREFIX_0F3ADF */
7932 	{
7933 	 { Bad_Opcode },
7934 	 { Bad_Opcode },
7935 	 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
7936 	 },
7937 
7938 	/* PREFIX_VEX_0F10 */
7939 	{
7940 	 { VEX_W_TABLE(VEX_W_0F10_P_0) },
7941 	 { VEX_LEN_TABLE(VEX_LEN_0F10_P_1) },
7942 	 { VEX_W_TABLE(VEX_W_0F10_P_2) },
7943 	 { VEX_LEN_TABLE(VEX_LEN_0F10_P_3) },
7944 	 },
7945 
7946 	/* PREFIX_VEX_0F11 */
7947 	{
7948 	 { VEX_W_TABLE(VEX_W_0F11_P_0) },
7949 	 { VEX_LEN_TABLE(VEX_LEN_0F11_P_1) },
7950 	 { VEX_W_TABLE(VEX_W_0F11_P_2) },
7951 	 { VEX_LEN_TABLE(VEX_LEN_0F11_P_3) },
7952 	 },
7953 
7954 	/* PREFIX_VEX_0F12 */
7955 	{
7956 	 { MOD_TABLE(MOD_VEX_0F12_PREFIX_0) },
7957 	 { VEX_W_TABLE(VEX_W_0F12_P_1) },
7958 	 { VEX_LEN_TABLE(VEX_LEN_0F12_P_2) },
7959 	 { VEX_W_TABLE(VEX_W_0F12_P_3) },
7960 	 },
7961 
7962 	/* PREFIX_VEX_0F16 */
7963 	{
7964 	 { MOD_TABLE(MOD_VEX_0F16_PREFIX_0) },
7965 	 { VEX_W_TABLE(VEX_W_0F16_P_1) },
7966 	 { VEX_LEN_TABLE(VEX_LEN_0F16_P_2) },
7967 	 },
7968 
7969 	/* PREFIX_VEX_0F2A */
7970 	{
7971 	 { Bad_Opcode },
7972 	 { VEX_LEN_TABLE(VEX_LEN_0F2A_P_1) },
7973 	 { Bad_Opcode },
7974 	 { VEX_LEN_TABLE(VEX_LEN_0F2A_P_3) },
7975 	 },
7976 
7977 	/* PREFIX_VEX_0F2C */
7978 	{
7979 	 { Bad_Opcode },
7980 	 { VEX_LEN_TABLE(VEX_LEN_0F2C_P_1) },
7981 	 { Bad_Opcode },
7982 	 { VEX_LEN_TABLE(VEX_LEN_0F2C_P_3) },
7983 	 },
7984 
7985 	/* PREFIX_VEX_0F2D */
7986 	{
7987 	 { Bad_Opcode },
7988 	 { VEX_LEN_TABLE(VEX_LEN_0F2D_P_1) },
7989 	 { Bad_Opcode },
7990 	 { VEX_LEN_TABLE(VEX_LEN_0F2D_P_3) },
7991 	 },
7992 
7993 	/* PREFIX_VEX_0F2E */
7994 	{
7995 	 { VEX_LEN_TABLE(VEX_LEN_0F2E_P_0) },
7996 	 { Bad_Opcode },
7997 	 { VEX_LEN_TABLE(VEX_LEN_0F2E_P_2) },
7998 	 },
7999 
8000 	/* PREFIX_VEX_0F2F */
8001 	{
8002 	 { VEX_LEN_TABLE(VEX_LEN_0F2F_P_0) },
8003 	 { Bad_Opcode },
8004 	 { VEX_LEN_TABLE(VEX_LEN_0F2F_P_2) },
8005 	 },
8006 
8007 	/* PREFIX_VEX_0F41 */
8008 	{
8009 	 { VEX_LEN_TABLE(VEX_LEN_0F41_P_0) },
8010 	 { Bad_Opcode },
8011 	 { VEX_LEN_TABLE(VEX_LEN_0F41_P_2) },
8012 	 },
8013 
8014 	/* PREFIX_VEX_0F42 */
8015 	{
8016 	 { VEX_LEN_TABLE(VEX_LEN_0F42_P_0) },
8017 	 { Bad_Opcode },
8018 	 { VEX_LEN_TABLE(VEX_LEN_0F42_P_2) },
8019 	 },
8020 
8021 	/* PREFIX_VEX_0F44 */
8022 	{
8023 	 { VEX_LEN_TABLE(VEX_LEN_0F44_P_0) },
8024 	 { Bad_Opcode },
8025 	 { VEX_LEN_TABLE(VEX_LEN_0F44_P_2) },
8026 	 },
8027 
8028 	/* PREFIX_VEX_0F45 */
8029 	{
8030 	 { VEX_LEN_TABLE(VEX_LEN_0F45_P_0) },
8031 	 { Bad_Opcode },
8032 	 { VEX_LEN_TABLE(VEX_LEN_0F45_P_2) },
8033 	 },
8034 
8035 	/* PREFIX_VEX_0F46 */
8036 	{
8037 	 { VEX_LEN_TABLE(VEX_LEN_0F46_P_0) },
8038 	 { Bad_Opcode },
8039 	 { VEX_LEN_TABLE(VEX_LEN_0F46_P_2) },
8040 	 },
8041 
8042 	/* PREFIX_VEX_0F47 */
8043 	{
8044 	 { VEX_LEN_TABLE(VEX_LEN_0F47_P_0) },
8045 	 { Bad_Opcode },
8046 	 { VEX_LEN_TABLE(VEX_LEN_0F47_P_2) },
8047 	 },
8048 
8049 	/* PREFIX_VEX_0F4A */
8050 	{
8051 	 { VEX_LEN_TABLE(VEX_LEN_0F4A_P_0) },
8052 	 { Bad_Opcode },
8053 	 { VEX_LEN_TABLE(VEX_LEN_0F4A_P_2) },
8054 	 },
8055 
8056 	/* PREFIX_VEX_0F4B */
8057 	{
8058 	 { VEX_LEN_TABLE(VEX_LEN_0F4B_P_0) },
8059 	 { Bad_Opcode },
8060 	 { VEX_LEN_TABLE(VEX_LEN_0F4B_P_2) },
8061 	 },
8062 
8063 	/* PREFIX_VEX_0F51 */
8064 	{
8065 	 { VEX_W_TABLE(VEX_W_0F51_P_0) },
8066 	 { VEX_LEN_TABLE(VEX_LEN_0F51_P_1) },
8067 	 { VEX_W_TABLE(VEX_W_0F51_P_2) },
8068 	 { VEX_LEN_TABLE(VEX_LEN_0F51_P_3) },
8069 	 },
8070 
8071 	/* PREFIX_VEX_0F52 */
8072 	{
8073 	 { VEX_W_TABLE(VEX_W_0F52_P_0) },
8074 	 { VEX_LEN_TABLE(VEX_LEN_0F52_P_1) },
8075 	 },
8076 
8077 	/* PREFIX_VEX_0F53 */
8078 	{
8079 	 { VEX_W_TABLE(VEX_W_0F53_P_0) },
8080 	 { VEX_LEN_TABLE(VEX_LEN_0F53_P_1) },
8081 	 },
8082 
8083 	/* PREFIX_VEX_0F58 */
8084 	{
8085 	 { VEX_W_TABLE(VEX_W_0F58_P_0) },
8086 	 { VEX_LEN_TABLE(VEX_LEN_0F58_P_1) },
8087 	 { VEX_W_TABLE(VEX_W_0F58_P_2) },
8088 	 { VEX_LEN_TABLE(VEX_LEN_0F58_P_3) },
8089 	 },
8090 
8091 	/* PREFIX_VEX_0F59 */
8092 	{
8093 	 { VEX_W_TABLE(VEX_W_0F59_P_0) },
8094 	 { VEX_LEN_TABLE(VEX_LEN_0F59_P_1) },
8095 	 { VEX_W_TABLE(VEX_W_0F59_P_2) },
8096 	 { VEX_LEN_TABLE(VEX_LEN_0F59_P_3) },
8097 	 },
8098 
8099 	/* PREFIX_VEX_0F5A */
8100 	{
8101 	 { VEX_W_TABLE(VEX_W_0F5A_P_0) },
8102 	 { VEX_LEN_TABLE(VEX_LEN_0F5A_P_1) },
8103 	 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
8104 	 { VEX_LEN_TABLE(VEX_LEN_0F5A_P_3) },
8105 	 },
8106 
8107 	/* PREFIX_VEX_0F5B */
8108 	{
8109 	 { VEX_W_TABLE(VEX_W_0F5B_P_0) },
8110 	 { VEX_W_TABLE(VEX_W_0F5B_P_1) },
8111 	 { VEX_W_TABLE(VEX_W_0F5B_P_2) },
8112 	 },
8113 
8114 	/* PREFIX_VEX_0F5C */
8115 	{
8116 	 { VEX_W_TABLE(VEX_W_0F5C_P_0) },
8117 	 { VEX_LEN_TABLE(VEX_LEN_0F5C_P_1) },
8118 	 { VEX_W_TABLE(VEX_W_0F5C_P_2) },
8119 	 { VEX_LEN_TABLE(VEX_LEN_0F5C_P_3) },
8120 	 },
8121 
8122 	/* PREFIX_VEX_0F5D */
8123 	{
8124 	 { VEX_W_TABLE(VEX_W_0F5D_P_0) },
8125 	 { VEX_LEN_TABLE(VEX_LEN_0F5D_P_1) },
8126 	 { VEX_W_TABLE(VEX_W_0F5D_P_2) },
8127 	 { VEX_LEN_TABLE(VEX_LEN_0F5D_P_3) },
8128 	 },
8129 
8130 	/* PREFIX_VEX_0F5E */
8131 	{
8132 	 { VEX_W_TABLE(VEX_W_0F5E_P_0) },
8133 	 { VEX_LEN_TABLE(VEX_LEN_0F5E_P_1) },
8134 	 { VEX_W_TABLE(VEX_W_0F5E_P_2) },
8135 	 { VEX_LEN_TABLE(VEX_LEN_0F5E_P_3) },
8136 	 },
8137 
8138 	/* PREFIX_VEX_0F5F */
8139 	{
8140 	 { VEX_W_TABLE(VEX_W_0F5F_P_0) },
8141 	 { VEX_LEN_TABLE(VEX_LEN_0F5F_P_1) },
8142 	 { VEX_W_TABLE(VEX_W_0F5F_P_2) },
8143 	 { VEX_LEN_TABLE(VEX_LEN_0F5F_P_3) },
8144 	 },
8145 
8146 	/* PREFIX_VEX_0F60 */
8147 	{
8148 	 { Bad_Opcode },
8149 	 { Bad_Opcode },
8150 	 { VEX_W_TABLE(VEX_W_0F60_P_2) },
8151 	 },
8152 
8153 	/* PREFIX_VEX_0F61 */
8154 	{
8155 	 { Bad_Opcode },
8156 	 { Bad_Opcode },
8157 	 { VEX_W_TABLE(VEX_W_0F61_P_2) },
8158 	 },
8159 
8160 	/* PREFIX_VEX_0F62 */
8161 	{
8162 	 { Bad_Opcode },
8163 	 { Bad_Opcode },
8164 	 { VEX_W_TABLE(VEX_W_0F62_P_2) },
8165 	 },
8166 
8167 	/* PREFIX_VEX_0F63 */
8168 	{
8169 	 { Bad_Opcode },
8170 	 { Bad_Opcode },
8171 	 { VEX_W_TABLE(VEX_W_0F63_P_2) },
8172 	 },
8173 
8174 	/* PREFIX_VEX_0F64 */
8175 	{
8176 	 { Bad_Opcode },
8177 	 { Bad_Opcode },
8178 	 { VEX_W_TABLE(VEX_W_0F64_P_2) },
8179 	 },
8180 
8181 	/* PREFIX_VEX_0F65 */
8182 	{
8183 	 { Bad_Opcode },
8184 	 { Bad_Opcode },
8185 	 { VEX_W_TABLE(VEX_W_0F65_P_2) },
8186 	 },
8187 
8188 	/* PREFIX_VEX_0F66 */
8189 	{
8190 	 { Bad_Opcode },
8191 	 { Bad_Opcode },
8192 	 { VEX_W_TABLE(VEX_W_0F66_P_2) },
8193 	 },
8194 
8195 	/* PREFIX_VEX_0F67 */
8196 	{
8197 	 { Bad_Opcode },
8198 	 { Bad_Opcode },
8199 	 { VEX_W_TABLE(VEX_W_0F67_P_2) },
8200 	 },
8201 
8202 	/* PREFIX_VEX_0F68 */
8203 	{
8204 	 { Bad_Opcode },
8205 	 { Bad_Opcode },
8206 	 { VEX_W_TABLE(VEX_W_0F68_P_2) },
8207 	 },
8208 
8209 	/* PREFIX_VEX_0F69 */
8210 	{
8211 	 { Bad_Opcode },
8212 	 { Bad_Opcode },
8213 	 { VEX_W_TABLE(VEX_W_0F69_P_2) },
8214 	 },
8215 
8216 	/* PREFIX_VEX_0F6A */
8217 	{
8218 	 { Bad_Opcode },
8219 	 { Bad_Opcode },
8220 	 { VEX_W_TABLE(VEX_W_0F6A_P_2) },
8221 	 },
8222 
8223 	/* PREFIX_VEX_0F6B */
8224 	{
8225 	 { Bad_Opcode },
8226 	 { Bad_Opcode },
8227 	 { VEX_W_TABLE(VEX_W_0F6B_P_2) },
8228 	 },
8229 
8230 	/* PREFIX_VEX_0F6C */
8231 	{
8232 	 { Bad_Opcode },
8233 	 { Bad_Opcode },
8234 	 { VEX_W_TABLE(VEX_W_0F6C_P_2) },
8235 	 },
8236 
8237 	/* PREFIX_VEX_0F6D */
8238 	{
8239 	 { Bad_Opcode },
8240 	 { Bad_Opcode },
8241 	 { VEX_W_TABLE(VEX_W_0F6D_P_2) },
8242 	 },
8243 
8244 	/* PREFIX_VEX_0F6E */
8245 	{
8246 	 { Bad_Opcode },
8247 	 { Bad_Opcode },
8248 	 { VEX_LEN_TABLE(VEX_LEN_0F6E_P_2) },
8249 	 },
8250 
8251 	/* PREFIX_VEX_0F6F */
8252 	{
8253 	 { Bad_Opcode },
8254 	 { VEX_W_TABLE(VEX_W_0F6F_P_1) },
8255 	 { VEX_W_TABLE(VEX_W_0F6F_P_2) },
8256 	 },
8257 
8258 	/* PREFIX_VEX_0F70 */
8259 	{
8260 	 { Bad_Opcode },
8261 	 { VEX_W_TABLE(VEX_W_0F70_P_1) },
8262 	 { VEX_W_TABLE(VEX_W_0F70_P_2) },
8263 	 { VEX_W_TABLE(VEX_W_0F70_P_3) },
8264 	 },
8265 
8266 	/* PREFIX_VEX_0F71_REG_2 */
8267 	{
8268 	 { Bad_Opcode },
8269 	 { Bad_Opcode },
8270 	 { VEX_W_TABLE(VEX_W_0F71_R_2_P_2) },
8271 	 },
8272 
8273 	/* PREFIX_VEX_0F71_REG_4 */
8274 	{
8275 	 { Bad_Opcode },
8276 	 { Bad_Opcode },
8277 	 { VEX_W_TABLE(VEX_W_0F71_R_4_P_2) },
8278 	 },
8279 
8280 	/* PREFIX_VEX_0F71_REG_6 */
8281 	{
8282 	 { Bad_Opcode },
8283 	 { Bad_Opcode },
8284 	 { VEX_W_TABLE(VEX_W_0F71_R_6_P_2) },
8285 	 },
8286 
8287 	/* PREFIX_VEX_0F72_REG_2 */
8288 	{
8289 	 { Bad_Opcode },
8290 	 { Bad_Opcode },
8291 	 { VEX_W_TABLE(VEX_W_0F72_R_2_P_2) },
8292 	 },
8293 
8294 	/* PREFIX_VEX_0F72_REG_4 */
8295 	{
8296 	 { Bad_Opcode },
8297 	 { Bad_Opcode },
8298 	 { VEX_W_TABLE(VEX_W_0F72_R_4_P_2) },
8299 	 },
8300 
8301 	/* PREFIX_VEX_0F72_REG_6 */
8302 	{
8303 	 { Bad_Opcode },
8304 	 { Bad_Opcode },
8305 	 { VEX_W_TABLE(VEX_W_0F72_R_6_P_2) },
8306 	 },
8307 
8308 	/* PREFIX_VEX_0F73_REG_2 */
8309 	{
8310 	 { Bad_Opcode },
8311 	 { Bad_Opcode },
8312 	 { VEX_W_TABLE(VEX_W_0F73_R_2_P_2) },
8313 	 },
8314 
8315 	/* PREFIX_VEX_0F73_REG_3 */
8316 	{
8317 	 { Bad_Opcode },
8318 	 { Bad_Opcode },
8319 	 { VEX_W_TABLE(VEX_W_0F73_R_3_P_2) },
8320 	 },
8321 
8322 	/* PREFIX_VEX_0F73_REG_6 */
8323 	{
8324 	 { Bad_Opcode },
8325 	 { Bad_Opcode },
8326 	 { VEX_W_TABLE(VEX_W_0F73_R_6_P_2) },
8327 	 },
8328 
8329 	/* PREFIX_VEX_0F73_REG_7 */
8330 	{
8331 	 { Bad_Opcode },
8332 	 { Bad_Opcode },
8333 	 { VEX_W_TABLE(VEX_W_0F73_R_7_P_2) },
8334 	 },
8335 
8336 	/* PREFIX_VEX_0F74 */
8337 	{
8338 	 { Bad_Opcode },
8339 	 { Bad_Opcode },
8340 	 { VEX_W_TABLE(VEX_W_0F74_P_2) },
8341 	 },
8342 
8343 	/* PREFIX_VEX_0F75 */
8344 	{
8345 	 { Bad_Opcode },
8346 	 { Bad_Opcode },
8347 	 { VEX_W_TABLE(VEX_W_0F75_P_2) },
8348 	 },
8349 
8350 	/* PREFIX_VEX_0F76 */
8351 	{
8352 	 { Bad_Opcode },
8353 	 { Bad_Opcode },
8354 	 { VEX_W_TABLE(VEX_W_0F76_P_2) },
8355 	 },
8356 
8357 	/* PREFIX_VEX_0F77 */
8358 	{
8359 	 { VEX_W_TABLE(VEX_W_0F77_P_0) },
8360 	 },
8361 
8362 	/* PREFIX_VEX_0F7C */
8363 	{
8364 	 { Bad_Opcode },
8365 	 { Bad_Opcode },
8366 	 { VEX_W_TABLE(VEX_W_0F7C_P_2) },
8367 	 { VEX_W_TABLE(VEX_W_0F7C_P_3) },
8368 	 },
8369 
8370 	/* PREFIX_VEX_0F7D */
8371 	{
8372 	 { Bad_Opcode },
8373 	 { Bad_Opcode },
8374 	 { VEX_W_TABLE(VEX_W_0F7D_P_2) },
8375 	 { VEX_W_TABLE(VEX_W_0F7D_P_3) },
8376 	 },
8377 
8378 	/* PREFIX_VEX_0F7E */
8379 	{
8380 	 { Bad_Opcode },
8381 	 { VEX_LEN_TABLE(VEX_LEN_0F7E_P_1) },
8382 	 { VEX_LEN_TABLE(VEX_LEN_0F7E_P_2) },
8383 	 },
8384 
8385 	/* PREFIX_VEX_0F7F */
8386 	{
8387 	 { Bad_Opcode },
8388 	 { VEX_W_TABLE(VEX_W_0F7F_P_1) },
8389 	 { VEX_W_TABLE(VEX_W_0F7F_P_2) },
8390 	 },
8391 
8392 	/* PREFIX_VEX_0F90 */
8393 	{
8394 	 { VEX_LEN_TABLE(VEX_LEN_0F90_P_0) },
8395 	 { Bad_Opcode },
8396 	 { VEX_LEN_TABLE(VEX_LEN_0F90_P_2) },
8397 	 },
8398 
8399 	/* PREFIX_VEX_0F91 */
8400 	{
8401 	 { VEX_LEN_TABLE(VEX_LEN_0F91_P_0) },
8402 	 { Bad_Opcode },
8403 	 { VEX_LEN_TABLE(VEX_LEN_0F91_P_2) },
8404 	 },
8405 
8406 	/* PREFIX_VEX_0F92 */
8407 	{
8408 	 { VEX_LEN_TABLE(VEX_LEN_0F92_P_0) },
8409 	 { Bad_Opcode },
8410 	 { VEX_LEN_TABLE(VEX_LEN_0F92_P_2) },
8411 	 { VEX_LEN_TABLE(VEX_LEN_0F92_P_3) },
8412 	 },
8413 
8414 	/* PREFIX_VEX_0F93 */
8415 	{
8416 	 { VEX_LEN_TABLE(VEX_LEN_0F93_P_0) },
8417 	 { Bad_Opcode },
8418 	 { VEX_LEN_TABLE(VEX_LEN_0F93_P_2) },
8419 	 { VEX_LEN_TABLE(VEX_LEN_0F93_P_3) },
8420 	 },
8421 
8422 	/* PREFIX_VEX_0F98 */
8423 	{
8424 	 { VEX_LEN_TABLE(VEX_LEN_0F98_P_0) },
8425 	 { Bad_Opcode },
8426 	 { VEX_LEN_TABLE(VEX_LEN_0F98_P_2) },
8427 	 },
8428 
8429 	/* PREFIX_VEX_0F99 */
8430 	{
8431 	 { VEX_LEN_TABLE(VEX_LEN_0F99_P_0) },
8432 	 { Bad_Opcode },
8433 	 { VEX_LEN_TABLE(VEX_LEN_0F99_P_2) },
8434 	 },
8435 
8436 	/* PREFIX_VEX_0FC2 */
8437 	{
8438 	 { VEX_W_TABLE(VEX_W_0FC2_P_0) },
8439 	 { VEX_LEN_TABLE(VEX_LEN_0FC2_P_1) },
8440 	 { VEX_W_TABLE(VEX_W_0FC2_P_2) },
8441 	 { VEX_LEN_TABLE(VEX_LEN_0FC2_P_3) },
8442 	 },
8443 
8444 	/* PREFIX_VEX_0FC4 */
8445 	{
8446 	 { Bad_Opcode },
8447 	 { Bad_Opcode },
8448 	 { VEX_LEN_TABLE(VEX_LEN_0FC4_P_2) },
8449 	 },
8450 
8451 	/* PREFIX_VEX_0FC5 */
8452 	{
8453 	 { Bad_Opcode },
8454 	 { Bad_Opcode },
8455 	 { VEX_LEN_TABLE(VEX_LEN_0FC5_P_2) },
8456 	 },
8457 
8458 	/* PREFIX_VEX_0FD0 */
8459 	{
8460 	 { Bad_Opcode },
8461 	 { Bad_Opcode },
8462 	 { VEX_W_TABLE(VEX_W_0FD0_P_2) },
8463 	 { VEX_W_TABLE(VEX_W_0FD0_P_3) },
8464 	 },
8465 
8466 	/* PREFIX_VEX_0FD1 */
8467 	{
8468 	 { Bad_Opcode },
8469 	 { Bad_Opcode },
8470 	 { VEX_W_TABLE(VEX_W_0FD1_P_2) },
8471 	 },
8472 
8473 	/* PREFIX_VEX_0FD2 */
8474 	{
8475 	 { Bad_Opcode },
8476 	 { Bad_Opcode },
8477 	 { VEX_W_TABLE(VEX_W_0FD2_P_2) },
8478 	 },
8479 
8480 	/* PREFIX_VEX_0FD3 */
8481 	{
8482 	 { Bad_Opcode },
8483 	 { Bad_Opcode },
8484 	 { VEX_W_TABLE(VEX_W_0FD3_P_2) },
8485 	 },
8486 
8487 	/* PREFIX_VEX_0FD4 */
8488 	{
8489 	 { Bad_Opcode },
8490 	 { Bad_Opcode },
8491 	 { VEX_W_TABLE(VEX_W_0FD4_P_2) },
8492 	 },
8493 
8494 	/* PREFIX_VEX_0FD5 */
8495 	{
8496 	 { Bad_Opcode },
8497 	 { Bad_Opcode },
8498 	 { VEX_W_TABLE(VEX_W_0FD5_P_2) },
8499 	 },
8500 
8501 	/* PREFIX_VEX_0FD6 */
8502 	{
8503 	 { Bad_Opcode },
8504 	 { Bad_Opcode },
8505 	 { VEX_LEN_TABLE(VEX_LEN_0FD6_P_2) },
8506 	 },
8507 
8508 	/* PREFIX_VEX_0FD7 */
8509 	{
8510 	 { Bad_Opcode },
8511 	 { Bad_Opcode },
8512 	 { MOD_TABLE(MOD_VEX_0FD7_PREFIX_2) },
8513 	 },
8514 
8515 	/* PREFIX_VEX_0FD8 */
8516 	{
8517 	 { Bad_Opcode },
8518 	 { Bad_Opcode },
8519 	 { VEX_W_TABLE(VEX_W_0FD8_P_2) },
8520 	 },
8521 
8522 	/* PREFIX_VEX_0FD9 */
8523 	{
8524 	 { Bad_Opcode },
8525 	 { Bad_Opcode },
8526 	 { VEX_W_TABLE(VEX_W_0FD9_P_2) },
8527 	 },
8528 
8529 	/* PREFIX_VEX_0FDA */
8530 	{
8531 	 { Bad_Opcode },
8532 	 { Bad_Opcode },
8533 	 { VEX_W_TABLE(VEX_W_0FDA_P_2) },
8534 	 },
8535 
8536 	/* PREFIX_VEX_0FDB */
8537 	{
8538 	 { Bad_Opcode },
8539 	 { Bad_Opcode },
8540 	 { VEX_W_TABLE(VEX_W_0FDB_P_2) },
8541 	 },
8542 
8543 	/* PREFIX_VEX_0FDC */
8544 	{
8545 	 { Bad_Opcode },
8546 	 { Bad_Opcode },
8547 	 { VEX_W_TABLE(VEX_W_0FDC_P_2) },
8548 	 },
8549 
8550 	/* PREFIX_VEX_0FDD */
8551 	{
8552 	 { Bad_Opcode },
8553 	 { Bad_Opcode },
8554 	 { VEX_W_TABLE(VEX_W_0FDD_P_2) },
8555 	 },
8556 
8557 	/* PREFIX_VEX_0FDE */
8558 	{
8559 	 { Bad_Opcode },
8560 	 { Bad_Opcode },
8561 	 { VEX_W_TABLE(VEX_W_0FDE_P_2) },
8562 	 },
8563 
8564 	/* PREFIX_VEX_0FDF */
8565 	{
8566 	 { Bad_Opcode },
8567 	 { Bad_Opcode },
8568 	 { VEX_W_TABLE(VEX_W_0FDF_P_2) },
8569 	 },
8570 
8571 	/* PREFIX_VEX_0FE0 */
8572 	{
8573 	 { Bad_Opcode },
8574 	 { Bad_Opcode },
8575 	 { VEX_W_TABLE(VEX_W_0FE0_P_2) },
8576 	 },
8577 
8578 	/* PREFIX_VEX_0FE1 */
8579 	{
8580 	 { Bad_Opcode },
8581 	 { Bad_Opcode },
8582 	 { VEX_W_TABLE(VEX_W_0FE1_P_2) },
8583 	 },
8584 
8585 	/* PREFIX_VEX_0FE2 */
8586 	{
8587 	 { Bad_Opcode },
8588 	 { Bad_Opcode },
8589 	 { VEX_W_TABLE(VEX_W_0FE2_P_2) },
8590 	 },
8591 
8592 	/* PREFIX_VEX_0FE3 */
8593 	{
8594 	 { Bad_Opcode },
8595 	 { Bad_Opcode },
8596 	 { VEX_W_TABLE(VEX_W_0FE3_P_2) },
8597 	 },
8598 
8599 	/* PREFIX_VEX_0FE4 */
8600 	{
8601 	 { Bad_Opcode },
8602 	 { Bad_Opcode },
8603 	 { VEX_W_TABLE(VEX_W_0FE4_P_2) },
8604 	 },
8605 
8606 	/* PREFIX_VEX_0FE5 */
8607 	{
8608 	 { Bad_Opcode },
8609 	 { Bad_Opcode },
8610 	 { VEX_W_TABLE(VEX_W_0FE5_P_2) },
8611 	 },
8612 
8613 	/* PREFIX_VEX_0FE6 */
8614 	{
8615 	 { Bad_Opcode },
8616 	 { VEX_W_TABLE(VEX_W_0FE6_P_1) },
8617 	 { VEX_W_TABLE(VEX_W_0FE6_P_2) },
8618 	 { VEX_W_TABLE(VEX_W_0FE6_P_3) },
8619 	 },
8620 
8621 	/* PREFIX_VEX_0FE7 */
8622 	{
8623 	 { Bad_Opcode },
8624 	 { Bad_Opcode },
8625 	 { MOD_TABLE(MOD_VEX_0FE7_PREFIX_2) },
8626 	 },
8627 
8628 	/* PREFIX_VEX_0FE8 */
8629 	{
8630 	 { Bad_Opcode },
8631 	 { Bad_Opcode },
8632 	 { VEX_W_TABLE(VEX_W_0FE8_P_2) },
8633 	 },
8634 
8635 	/* PREFIX_VEX_0FE9 */
8636 	{
8637 	 { Bad_Opcode },
8638 	 { Bad_Opcode },
8639 	 { VEX_W_TABLE(VEX_W_0FE9_P_2) },
8640 	 },
8641 
8642 	/* PREFIX_VEX_0FEA */
8643 	{
8644 	 { Bad_Opcode },
8645 	 { Bad_Opcode },
8646 	 { VEX_W_TABLE(VEX_W_0FEA_P_2) },
8647 	 },
8648 
8649 	/* PREFIX_VEX_0FEB */
8650 	{
8651 	 { Bad_Opcode },
8652 	 { Bad_Opcode },
8653 	 { VEX_W_TABLE(VEX_W_0FEB_P_2) },
8654 	 },
8655 
8656 	/* PREFIX_VEX_0FEC */
8657 	{
8658 	 { Bad_Opcode },
8659 	 { Bad_Opcode },
8660 	 { VEX_W_TABLE(VEX_W_0FEC_P_2) },
8661 	 },
8662 
8663 	/* PREFIX_VEX_0FED */
8664 	{
8665 	 { Bad_Opcode },
8666 	 { Bad_Opcode },
8667 	 { VEX_W_TABLE(VEX_W_0FED_P_2) },
8668 	 },
8669 
8670 	/* PREFIX_VEX_0FEE */
8671 	{
8672 	 { Bad_Opcode },
8673 	 { Bad_Opcode },
8674 	 { VEX_W_TABLE(VEX_W_0FEE_P_2) },
8675 	 },
8676 
8677 	/* PREFIX_VEX_0FEF */
8678 	{
8679 	 { Bad_Opcode },
8680 	 { Bad_Opcode },
8681 	 { VEX_W_TABLE(VEX_W_0FEF_P_2) },
8682 	 },
8683 
8684 	/* PREFIX_VEX_0FF0 */
8685 	{
8686 	 { Bad_Opcode },
8687 	 { Bad_Opcode },
8688 	 { Bad_Opcode },
8689 	 { MOD_TABLE(MOD_VEX_0FF0_PREFIX_3) },
8690 	 },
8691 
8692 	/* PREFIX_VEX_0FF1 */
8693 	{
8694 	 { Bad_Opcode },
8695 	 { Bad_Opcode },
8696 	 { VEX_W_TABLE(VEX_W_0FF1_P_2) },
8697 	 },
8698 
8699 	/* PREFIX_VEX_0FF2 */
8700 	{
8701 	 { Bad_Opcode },
8702 	 { Bad_Opcode },
8703 	 { VEX_W_TABLE(VEX_W_0FF2_P_2) },
8704 	 },
8705 
8706 	/* PREFIX_VEX_0FF3 */
8707 	{
8708 	 { Bad_Opcode },
8709 	 { Bad_Opcode },
8710 	 { VEX_W_TABLE(VEX_W_0FF3_P_2) },
8711 	 },
8712 
8713 	/* PREFIX_VEX_0FF4 */
8714 	{
8715 	 { Bad_Opcode },
8716 	 { Bad_Opcode },
8717 	 { VEX_W_TABLE(VEX_W_0FF4_P_2) },
8718 	 },
8719 
8720 	/* PREFIX_VEX_0FF5 */
8721 	{
8722 	 { Bad_Opcode },
8723 	 { Bad_Opcode },
8724 	 { VEX_W_TABLE(VEX_W_0FF5_P_2) },
8725 	 },
8726 
8727 	/* PREFIX_VEX_0FF6 */
8728 	{
8729 	 { Bad_Opcode },
8730 	 { Bad_Opcode },
8731 	 { VEX_W_TABLE(VEX_W_0FF6_P_2) },
8732 	 },
8733 
8734 	/* PREFIX_VEX_0FF7 */
8735 	{
8736 	 { Bad_Opcode },
8737 	 { Bad_Opcode },
8738 	 { VEX_LEN_TABLE(VEX_LEN_0FF7_P_2) },
8739 	 },
8740 
8741 	/* PREFIX_VEX_0FF8 */
8742 	{
8743 	 { Bad_Opcode },
8744 	 { Bad_Opcode },
8745 	 { VEX_W_TABLE(VEX_W_0FF8_P_2) },
8746 	 },
8747 
8748 	/* PREFIX_VEX_0FF9 */
8749 	{
8750 	 { Bad_Opcode },
8751 	 { Bad_Opcode },
8752 	 { VEX_W_TABLE(VEX_W_0FF9_P_2) },
8753 	 },
8754 
8755 	/* PREFIX_VEX_0FFA */
8756 	{
8757 	 { Bad_Opcode },
8758 	 { Bad_Opcode },
8759 	 { VEX_W_TABLE(VEX_W_0FFA_P_2) },
8760 	 },
8761 
8762 	/* PREFIX_VEX_0FFB */
8763 	{
8764 	 { Bad_Opcode },
8765 	 { Bad_Opcode },
8766 	 { VEX_W_TABLE(VEX_W_0FFB_P_2) },
8767 	 },
8768 
8769 	/* PREFIX_VEX_0FFC */
8770 	{
8771 	 { Bad_Opcode },
8772 	 { Bad_Opcode },
8773 	 { VEX_W_TABLE(VEX_W_0FFC_P_2) },
8774 	 },
8775 
8776 	/* PREFIX_VEX_0FFD */
8777 	{
8778 	 { Bad_Opcode },
8779 	 { Bad_Opcode },
8780 	 { VEX_W_TABLE(VEX_W_0FFD_P_2) },
8781 	 },
8782 
8783 	/* PREFIX_VEX_0FFE */
8784 	{
8785 	 { Bad_Opcode },
8786 	 { Bad_Opcode },
8787 	 { VEX_W_TABLE(VEX_W_0FFE_P_2) },
8788 	 },
8789 
8790 	/* PREFIX_VEX_0F3800 */
8791 	{
8792 	 { Bad_Opcode },
8793 	 { Bad_Opcode },
8794 	 { VEX_W_TABLE(VEX_W_0F3800_P_2) },
8795 	 },
8796 
8797 	/* PREFIX_VEX_0F3801 */
8798 	{
8799 	 { Bad_Opcode },
8800 	 { Bad_Opcode },
8801 	 { VEX_W_TABLE(VEX_W_0F3801_P_2) },
8802 	 },
8803 
8804 	/* PREFIX_VEX_0F3802 */
8805 	{
8806 	 { Bad_Opcode },
8807 	 { Bad_Opcode },
8808 	 { VEX_W_TABLE(VEX_W_0F3802_P_2) },
8809 	 },
8810 
8811 	/* PREFIX_VEX_0F3803 */
8812 	{
8813 	 { Bad_Opcode },
8814 	 { Bad_Opcode },
8815 	 { VEX_W_TABLE(VEX_W_0F3803_P_2) },
8816 	 },
8817 
8818 	/* PREFIX_VEX_0F3804 */
8819 	{
8820 	 { Bad_Opcode },
8821 	 { Bad_Opcode },
8822 	 { VEX_W_TABLE(VEX_W_0F3804_P_2) },
8823 	 },
8824 
8825 	/* PREFIX_VEX_0F3805 */
8826 	{
8827 	 { Bad_Opcode },
8828 	 { Bad_Opcode },
8829 	 { VEX_W_TABLE(VEX_W_0F3805_P_2) },
8830 	 },
8831 
8832 	/* PREFIX_VEX_0F3806 */
8833 	{
8834 	 { Bad_Opcode },
8835 	 { Bad_Opcode },
8836 	 { VEX_W_TABLE(VEX_W_0F3806_P_2) },
8837 	 },
8838 
8839 	/* PREFIX_VEX_0F3807 */
8840 	{
8841 	 { Bad_Opcode },
8842 	 { Bad_Opcode },
8843 	 { VEX_W_TABLE(VEX_W_0F3807_P_2) },
8844 	 },
8845 
8846 	/* PREFIX_VEX_0F3808 */
8847 	{
8848 	 { Bad_Opcode },
8849 	 { Bad_Opcode },
8850 	 { VEX_W_TABLE(VEX_W_0F3808_P_2) },
8851 	 },
8852 
8853 	/* PREFIX_VEX_0F3809 */
8854 	{
8855 	 { Bad_Opcode },
8856 	 { Bad_Opcode },
8857 	 { VEX_W_TABLE(VEX_W_0F3809_P_2) },
8858 	 },
8859 
8860 	/* PREFIX_VEX_0F380A */
8861 	{
8862 	 { Bad_Opcode },
8863 	 { Bad_Opcode },
8864 	 { VEX_W_TABLE(VEX_W_0F380A_P_2) },
8865 	 },
8866 
8867 	/* PREFIX_VEX_0F380B */
8868 	{
8869 	 { Bad_Opcode },
8870 	 { Bad_Opcode },
8871 	 { VEX_W_TABLE(VEX_W_0F380B_P_2) },
8872 	 },
8873 
8874 	/* PREFIX_VEX_0F380C */
8875 	{
8876 	 { Bad_Opcode },
8877 	 { Bad_Opcode },
8878 	 { VEX_W_TABLE(VEX_W_0F380C_P_2) },
8879 	 },
8880 
8881 	/* PREFIX_VEX_0F380D */
8882 	{
8883 	 { Bad_Opcode },
8884 	 { Bad_Opcode },
8885 	 { VEX_W_TABLE(VEX_W_0F380D_P_2) },
8886 	 },
8887 
8888 	/* PREFIX_VEX_0F380E */
8889 	{
8890 	 { Bad_Opcode },
8891 	 { Bad_Opcode },
8892 	 { VEX_W_TABLE(VEX_W_0F380E_P_2) },
8893 	 },
8894 
8895 	/* PREFIX_VEX_0F380F */
8896 	{
8897 	 { Bad_Opcode },
8898 	 { Bad_Opcode },
8899 	 { VEX_W_TABLE(VEX_W_0F380F_P_2) },
8900 	 },
8901 
8902 	/* PREFIX_VEX_0F3813 */
8903 	{
8904 	 { Bad_Opcode },
8905 	 { Bad_Opcode },
8906 	 { "vcvtph2ps", { XM, EXxmmq }, 0 },
8907 	 },
8908 
8909 	/* PREFIX_VEX_0F3816 */
8910 	{
8911 	 { Bad_Opcode },
8912 	 { Bad_Opcode },
8913 	 { VEX_LEN_TABLE(VEX_LEN_0F3816_P_2) },
8914 	 },
8915 
8916 	/* PREFIX_VEX_0F3817 */
8917 	{
8918 	 { Bad_Opcode },
8919 	 { Bad_Opcode },
8920 	 { VEX_W_TABLE(VEX_W_0F3817_P_2) },
8921 	 },
8922 
8923 	/* PREFIX_VEX_0F3818 */
8924 	{
8925 	 { Bad_Opcode },
8926 	 { Bad_Opcode },
8927 	 { VEX_W_TABLE(VEX_W_0F3818_P_2) },
8928 	 },
8929 
8930 	/* PREFIX_VEX_0F3819 */
8931 	{
8932 	 { Bad_Opcode },
8933 	 { Bad_Opcode },
8934 	 { VEX_LEN_TABLE(VEX_LEN_0F3819_P_2) },
8935 	 },
8936 
8937 	/* PREFIX_VEX_0F381A */
8938 	{
8939 	 { Bad_Opcode },
8940 	 { Bad_Opcode },
8941 	 { MOD_TABLE(MOD_VEX_0F381A_PREFIX_2) },
8942 	 },
8943 
8944 	/* PREFIX_VEX_0F381C */
8945 	{
8946 	 { Bad_Opcode },
8947 	 { Bad_Opcode },
8948 	 { VEX_W_TABLE(VEX_W_0F381C_P_2) },
8949 	 },
8950 
8951 	/* PREFIX_VEX_0F381D */
8952 	{
8953 	 { Bad_Opcode },
8954 	 { Bad_Opcode },
8955 	 { VEX_W_TABLE(VEX_W_0F381D_P_2) },
8956 	 },
8957 
8958 	/* PREFIX_VEX_0F381E */
8959 	{
8960 	 { Bad_Opcode },
8961 	 { Bad_Opcode },
8962 	 { VEX_W_TABLE(VEX_W_0F381E_P_2) },
8963 	 },
8964 
8965 	/* PREFIX_VEX_0F3820 */
8966 	{
8967 	 { Bad_Opcode },
8968 	 { Bad_Opcode },
8969 	 { VEX_W_TABLE(VEX_W_0F3820_P_2) },
8970 	 },
8971 
8972 	/* PREFIX_VEX_0F3821 */
8973 	{
8974 	 { Bad_Opcode },
8975 	 { Bad_Opcode },
8976 	 { VEX_W_TABLE(VEX_W_0F3821_P_2) },
8977 	 },
8978 
8979 	/* PREFIX_VEX_0F3822 */
8980 	{
8981 	 { Bad_Opcode },
8982 	 { Bad_Opcode },
8983 	 { VEX_W_TABLE(VEX_W_0F3822_P_2) },
8984 	 },
8985 
8986 	/* PREFIX_VEX_0F3823 */
8987 	{
8988 	 { Bad_Opcode },
8989 	 { Bad_Opcode },
8990 	 { VEX_W_TABLE(VEX_W_0F3823_P_2) },
8991 	 },
8992 
8993 	/* PREFIX_VEX_0F3824 */
8994 	{
8995 	 { Bad_Opcode },
8996 	 { Bad_Opcode },
8997 	 { VEX_W_TABLE(VEX_W_0F3824_P_2) },
8998 	 },
8999 
9000 	/* PREFIX_VEX_0F3825 */
9001 	{
9002 	 { Bad_Opcode },
9003 	 { Bad_Opcode },
9004 	 { VEX_W_TABLE(VEX_W_0F3825_P_2) },
9005 	 },
9006 
9007 	/* PREFIX_VEX_0F3828 */
9008 	{
9009 	 { Bad_Opcode },
9010 	 { Bad_Opcode },
9011 	 { VEX_W_TABLE(VEX_W_0F3828_P_2) },
9012 	 },
9013 
9014 	/* PREFIX_VEX_0F3829 */
9015 	{
9016 	 { Bad_Opcode },
9017 	 { Bad_Opcode },
9018 	 { VEX_W_TABLE(VEX_W_0F3829_P_2) },
9019 	 },
9020 
9021 	/* PREFIX_VEX_0F382A */
9022 	{
9023 	 { Bad_Opcode },
9024 	 { Bad_Opcode },
9025 	 { MOD_TABLE(MOD_VEX_0F382A_PREFIX_2) },
9026 	 },
9027 
9028 	/* PREFIX_VEX_0F382B */
9029 	{
9030 	 { Bad_Opcode },
9031 	 { Bad_Opcode },
9032 	 { VEX_W_TABLE(VEX_W_0F382B_P_2) },
9033 	 },
9034 
9035 	/* PREFIX_VEX_0F382C */
9036 	{
9037 	 { Bad_Opcode },
9038 	 { Bad_Opcode },
9039 	 { MOD_TABLE(MOD_VEX_0F382C_PREFIX_2) },
9040 	 },
9041 
9042 	/* PREFIX_VEX_0F382D */
9043 	{
9044 	 { Bad_Opcode },
9045 	 { Bad_Opcode },
9046 	 { MOD_TABLE(MOD_VEX_0F382D_PREFIX_2) },
9047 	 },
9048 
9049 	/* PREFIX_VEX_0F382E */
9050 	{
9051 	 { Bad_Opcode },
9052 	 { Bad_Opcode },
9053 	 { MOD_TABLE(MOD_VEX_0F382E_PREFIX_2) },
9054 	 },
9055 
9056 	/* PREFIX_VEX_0F382F */
9057 	{
9058 	 { Bad_Opcode },
9059 	 { Bad_Opcode },
9060 	 { MOD_TABLE(MOD_VEX_0F382F_PREFIX_2) },
9061 	 },
9062 
9063 	/* PREFIX_VEX_0F3830 */
9064 	{
9065 	 { Bad_Opcode },
9066 	 { Bad_Opcode },
9067 	 { VEX_W_TABLE(VEX_W_0F3830_P_2) },
9068 	 },
9069 
9070 	/* PREFIX_VEX_0F3831 */
9071 	{
9072 	 { Bad_Opcode },
9073 	 { Bad_Opcode },
9074 	 { VEX_W_TABLE(VEX_W_0F3831_P_2) },
9075 	 },
9076 
9077 	/* PREFIX_VEX_0F3832 */
9078 	{
9079 	 { Bad_Opcode },
9080 	 { Bad_Opcode },
9081 	 { VEX_W_TABLE(VEX_W_0F3832_P_2) },
9082 	 },
9083 
9084 	/* PREFIX_VEX_0F3833 */
9085 	{
9086 	 { Bad_Opcode },
9087 	 { Bad_Opcode },
9088 	 { VEX_W_TABLE(VEX_W_0F3833_P_2) },
9089 	 },
9090 
9091 	/* PREFIX_VEX_0F3834 */
9092 	{
9093 	 { Bad_Opcode },
9094 	 { Bad_Opcode },
9095 	 { VEX_W_TABLE(VEX_W_0F3834_P_2) },
9096 	 },
9097 
9098 	/* PREFIX_VEX_0F3835 */
9099 	{
9100 	 { Bad_Opcode },
9101 	 { Bad_Opcode },
9102 	 { VEX_W_TABLE(VEX_W_0F3835_P_2) },
9103 	 },
9104 
9105 	/* PREFIX_VEX_0F3836 */
9106 	{
9107 	 { Bad_Opcode },
9108 	 { Bad_Opcode },
9109 	 { VEX_LEN_TABLE(VEX_LEN_0F3836_P_2) },
9110 	 },
9111 
9112 	/* PREFIX_VEX_0F3837 */
9113 	{
9114 	 { Bad_Opcode },
9115 	 { Bad_Opcode },
9116 	 { VEX_W_TABLE(VEX_W_0F3837_P_2) },
9117 	 },
9118 
9119 	/* PREFIX_VEX_0F3838 */
9120 	{
9121 	 { Bad_Opcode },
9122 	 { Bad_Opcode },
9123 	 { VEX_W_TABLE(VEX_W_0F3838_P_2) },
9124 	 },
9125 
9126 	/* PREFIX_VEX_0F3839 */
9127 	{
9128 	 { Bad_Opcode },
9129 	 { Bad_Opcode },
9130 	 { VEX_W_TABLE(VEX_W_0F3839_P_2) },
9131 	 },
9132 
9133 	/* PREFIX_VEX_0F383A */
9134 	{
9135 	 { Bad_Opcode },
9136 	 { Bad_Opcode },
9137 	 { VEX_W_TABLE(VEX_W_0F383A_P_2) },
9138 	 },
9139 
9140 	/* PREFIX_VEX_0F383B */
9141 	{
9142 	 { Bad_Opcode },
9143 	 { Bad_Opcode },
9144 	 { VEX_W_TABLE(VEX_W_0F383B_P_2) },
9145 	 },
9146 
9147 	/* PREFIX_VEX_0F383C */
9148 	{
9149 	 { Bad_Opcode },
9150 	 { Bad_Opcode },
9151 	 { VEX_W_TABLE(VEX_W_0F383C_P_2) },
9152 	 },
9153 
9154 	/* PREFIX_VEX_0F383D */
9155 	{
9156 	 { Bad_Opcode },
9157 	 { Bad_Opcode },
9158 	 { VEX_W_TABLE(VEX_W_0F383D_P_2) },
9159 	 },
9160 
9161 	/* PREFIX_VEX_0F383E */
9162 	{
9163 	 { Bad_Opcode },
9164 	 { Bad_Opcode },
9165 	 { VEX_W_TABLE(VEX_W_0F383E_P_2) },
9166 	 },
9167 
9168 	/* PREFIX_VEX_0F383F */
9169 	{
9170 	 { Bad_Opcode },
9171 	 { Bad_Opcode },
9172 	 { VEX_W_TABLE(VEX_W_0F383F_P_2) },
9173 	 },
9174 
9175 	/* PREFIX_VEX_0F3840 */
9176 	{
9177 	 { Bad_Opcode },
9178 	 { Bad_Opcode },
9179 	 { VEX_W_TABLE(VEX_W_0F3840_P_2) },
9180 	 },
9181 
9182 	/* PREFIX_VEX_0F3841 */
9183 	{
9184 	 { Bad_Opcode },
9185 	 { Bad_Opcode },
9186 	 { VEX_LEN_TABLE(VEX_LEN_0F3841_P_2) },
9187 	 },
9188 
9189 	/* PREFIX_VEX_0F3845 */
9190 	{
9191 	 { Bad_Opcode },
9192 	 { Bad_Opcode },
9193 	 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
9194 	 },
9195 
9196 	/* PREFIX_VEX_0F3846 */
9197 	{
9198 	 { Bad_Opcode },
9199 	 { Bad_Opcode },
9200 	 { VEX_W_TABLE(VEX_W_0F3846_P_2) },
9201 	 },
9202 
9203 	/* PREFIX_VEX_0F3847 */
9204 	{
9205 	 { Bad_Opcode },
9206 	 { Bad_Opcode },
9207 	 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
9208 	 },
9209 
9210 	/* PREFIX_VEX_0F3858 */
9211 	{
9212 	 { Bad_Opcode },
9213 	 { Bad_Opcode },
9214 	 { VEX_W_TABLE(VEX_W_0F3858_P_2) },
9215 	 },
9216 
9217 	/* PREFIX_VEX_0F3859 */
9218 	{
9219 	 { Bad_Opcode },
9220 	 { Bad_Opcode },
9221 	 { VEX_W_TABLE(VEX_W_0F3859_P_2) },
9222 	 },
9223 
9224 	/* PREFIX_VEX_0F385A */
9225 	{
9226 	 { Bad_Opcode },
9227 	 { Bad_Opcode },
9228 	 { MOD_TABLE(MOD_VEX_0F385A_PREFIX_2) },
9229 	 },
9230 
9231 	/* PREFIX_VEX_0F3878 */
9232 	{
9233 	 { Bad_Opcode },
9234 	 { Bad_Opcode },
9235 	 { VEX_W_TABLE(VEX_W_0F3878_P_2) },
9236 	 },
9237 
9238 	/* PREFIX_VEX_0F3879 */
9239 	{
9240 	 { Bad_Opcode },
9241 	 { Bad_Opcode },
9242 	 { VEX_W_TABLE(VEX_W_0F3879_P_2) },
9243 	 },
9244 
9245 	/* PREFIX_VEX_0F388C */
9246 	{
9247 	 { Bad_Opcode },
9248 	 { Bad_Opcode },
9249 	 { MOD_TABLE(MOD_VEX_0F388C_PREFIX_2) },
9250 	 },
9251 
9252 	/* PREFIX_VEX_0F388E */
9253 	{
9254 	 { Bad_Opcode },
9255 	 { Bad_Opcode },
9256 	 { MOD_TABLE(MOD_VEX_0F388E_PREFIX_2) },
9257 	 },
9258 
9259 	/* PREFIX_VEX_0F3890 */
9260 	{
9261 	 { Bad_Opcode },
9262 	 { Bad_Opcode },
9263 	 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
9264 	 },
9265 
9266 	/* PREFIX_VEX_0F3891 */
9267 	{
9268 	 { Bad_Opcode },
9269 	 { Bad_Opcode },
9270 	 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
9271 	 },
9272 
9273 	/* PREFIX_VEX_0F3892 */
9274 	{
9275 	 { Bad_Opcode },
9276 	 { Bad_Opcode },
9277 	 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
9278 	 },
9279 
9280 	/* PREFIX_VEX_0F3893 */
9281 	{
9282 	 { Bad_Opcode },
9283 	 { Bad_Opcode },
9284 	 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
9285 	 },
9286 
9287 	/* PREFIX_VEX_0F3896 */
9288 	{
9289 	 { Bad_Opcode },
9290 	 { Bad_Opcode },
9291 	 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
9292 	 },
9293 
9294 	/* PREFIX_VEX_0F3897 */
9295 	{
9296 	 { Bad_Opcode },
9297 	 { Bad_Opcode },
9298 	 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
9299 	 },
9300 
9301 	/* PREFIX_VEX_0F3898 */
9302 	{
9303 	 { Bad_Opcode },
9304 	 { Bad_Opcode },
9305 	 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
9306 	 },
9307 
9308 	/* PREFIX_VEX_0F3899 */
9309 	{
9310 	 { Bad_Opcode },
9311 	 { Bad_Opcode },
9312 	 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9313 	 },
9314 
9315 	/* PREFIX_VEX_0F389A */
9316 	{
9317 	 { Bad_Opcode },
9318 	 { Bad_Opcode },
9319 	 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
9320 	 },
9321 
9322 	/* PREFIX_VEX_0F389B */
9323 	{
9324 	 { Bad_Opcode },
9325 	 { Bad_Opcode },
9326 	 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9327 	 },
9328 
9329 	/* PREFIX_VEX_0F389C */
9330 	{
9331 	 { Bad_Opcode },
9332 	 { Bad_Opcode },
9333 	 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
9334 	 },
9335 
9336 	/* PREFIX_VEX_0F389D */
9337 	{
9338 	 { Bad_Opcode },
9339 	 { Bad_Opcode },
9340 	 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9341 	 },
9342 
9343 	/* PREFIX_VEX_0F389E */
9344 	{
9345 	 { Bad_Opcode },
9346 	 { Bad_Opcode },
9347 	 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
9348 	 },
9349 
9350 	/* PREFIX_VEX_0F389F */
9351 	{
9352 	 { Bad_Opcode },
9353 	 { Bad_Opcode },
9354 	 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9355 	 },
9356 
9357 	/* PREFIX_VEX_0F38A6 */
9358 	{
9359 	 { Bad_Opcode },
9360 	 { Bad_Opcode },
9361 	 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
9362 	 { Bad_Opcode },
9363 	 },
9364 
9365 	/* PREFIX_VEX_0F38A7 */
9366 	{
9367 	 { Bad_Opcode },
9368 	 { Bad_Opcode },
9369 	 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
9370 	 },
9371 
9372 	/* PREFIX_VEX_0F38A8 */
9373 	{
9374 	 { Bad_Opcode },
9375 	 { Bad_Opcode },
9376 	 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
9377 	 },
9378 
9379 	/* PREFIX_VEX_0F38A9 */
9380 	{
9381 	 { Bad_Opcode },
9382 	 { Bad_Opcode },
9383 	 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9384 	 },
9385 
9386 	/* PREFIX_VEX_0F38AA */
9387 	{
9388 	 { Bad_Opcode },
9389 	 { Bad_Opcode },
9390 	 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
9391 	 },
9392 
9393 	/* PREFIX_VEX_0F38AB */
9394 	{
9395 	 { Bad_Opcode },
9396 	 { Bad_Opcode },
9397 	 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9398 	 },
9399 
9400 	/* PREFIX_VEX_0F38AC */
9401 	{
9402 	 { Bad_Opcode },
9403 	 { Bad_Opcode },
9404 	 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
9405 	 },
9406 
9407 	/* PREFIX_VEX_0F38AD */
9408 	{
9409 	 { Bad_Opcode },
9410 	 { Bad_Opcode },
9411 	 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9412 	 },
9413 
9414 	/* PREFIX_VEX_0F38AE */
9415 	{
9416 	 { Bad_Opcode },
9417 	 { Bad_Opcode },
9418 	 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
9419 	 },
9420 
9421 	/* PREFIX_VEX_0F38AF */
9422 	{
9423 	 { Bad_Opcode },
9424 	 { Bad_Opcode },
9425 	 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9426 	 },
9427 
9428 	/* PREFIX_VEX_0F38B6 */
9429 	{
9430 	 { Bad_Opcode },
9431 	 { Bad_Opcode },
9432 	 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
9433 	 },
9434 
9435 	/* PREFIX_VEX_0F38B7 */
9436 	{
9437 	 { Bad_Opcode },
9438 	 { Bad_Opcode },
9439 	 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
9440 	 },
9441 
9442 	/* PREFIX_VEX_0F38B8 */
9443 	{
9444 	 { Bad_Opcode },
9445 	 { Bad_Opcode },
9446 	 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
9447 	 },
9448 
9449 	/* PREFIX_VEX_0F38B9 */
9450 	{
9451 	 { Bad_Opcode },
9452 	 { Bad_Opcode },
9453 	 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9454 	 },
9455 
9456 	/* PREFIX_VEX_0F38BA */
9457 	{
9458 	 { Bad_Opcode },
9459 	 { Bad_Opcode },
9460 	 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
9461 	 },
9462 
9463 	/* PREFIX_VEX_0F38BB */
9464 	{
9465 	 { Bad_Opcode },
9466 	 { Bad_Opcode },
9467 	 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9468 	 },
9469 
9470 	/* PREFIX_VEX_0F38BC */
9471 	{
9472 	 { Bad_Opcode },
9473 	 { Bad_Opcode },
9474 	 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
9475 	 },
9476 
9477 	/* PREFIX_VEX_0F38BD */
9478 	{
9479 	 { Bad_Opcode },
9480 	 { Bad_Opcode },
9481 	 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9482 	 },
9483 
9484 	/* PREFIX_VEX_0F38BE */
9485 	{
9486 	 { Bad_Opcode },
9487 	 { Bad_Opcode },
9488 	 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
9489 	 },
9490 
9491 	/* PREFIX_VEX_0F38BF */
9492 	{
9493 	 { Bad_Opcode },
9494 	 { Bad_Opcode },
9495 	 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
9496 	 },
9497 
9498 	/* PREFIX_VEX_0F38DB */
9499 	{
9500 	 { Bad_Opcode },
9501 	 { Bad_Opcode },
9502 	 { VEX_LEN_TABLE(VEX_LEN_0F38DB_P_2) },
9503 	 },
9504 
9505 	/* PREFIX_VEX_0F38DC */
9506 	{
9507 	 { Bad_Opcode },
9508 	 { Bad_Opcode },
9509 	 { VEX_LEN_TABLE(VEX_LEN_0F38DC_P_2) },
9510 	 },
9511 
9512 	/* PREFIX_VEX_0F38DD */
9513 	{
9514 	 { Bad_Opcode },
9515 	 { Bad_Opcode },
9516 	 { VEX_LEN_TABLE(VEX_LEN_0F38DD_P_2) },
9517 	 },
9518 
9519 	/* PREFIX_VEX_0F38DE */
9520 	{
9521 	 { Bad_Opcode },
9522 	 { Bad_Opcode },
9523 	 { VEX_LEN_TABLE(VEX_LEN_0F38DE_P_2) },
9524 	 },
9525 
9526 	/* PREFIX_VEX_0F38DF */
9527 	{
9528 	 { Bad_Opcode },
9529 	 { Bad_Opcode },
9530 	 { VEX_LEN_TABLE(VEX_LEN_0F38DF_P_2) },
9531 	 },
9532 
9533 	/* PREFIX_VEX_0F38F2 */
9534 	{
9535 	 { VEX_LEN_TABLE(VEX_LEN_0F38F2_P_0) },
9536 	 },
9537 
9538 	/* PREFIX_VEX_0F38F3_REG_1 */
9539 	{
9540 	 { VEX_LEN_TABLE(VEX_LEN_0F38F3_R_1_P_0) },
9541 	 },
9542 
9543 	/* PREFIX_VEX_0F38F3_REG_2 */
9544 	{
9545 	 { VEX_LEN_TABLE(VEX_LEN_0F38F3_R_2_P_0) },
9546 	 },
9547 
9548 	/* PREFIX_VEX_0F38F3_REG_3 */
9549 	{
9550 	 { VEX_LEN_TABLE(VEX_LEN_0F38F3_R_3_P_0) },
9551 	 },
9552 
9553 	/* PREFIX_VEX_0F38F5 */
9554 	{
9555 	 { VEX_LEN_TABLE(VEX_LEN_0F38F5_P_0) },
9556 	 { VEX_LEN_TABLE(VEX_LEN_0F38F5_P_1) },
9557 	 { Bad_Opcode },
9558 	 { VEX_LEN_TABLE(VEX_LEN_0F38F5_P_3) },
9559 	 },
9560 
9561 	/* PREFIX_VEX_0F38F6 */
9562 	{
9563 	 { Bad_Opcode },
9564 	 { Bad_Opcode },
9565 	 { Bad_Opcode },
9566 	 { VEX_LEN_TABLE(VEX_LEN_0F38F6_P_3) },
9567 	 },
9568 
9569 	/* PREFIX_VEX_0F38F7 */
9570 	{
9571 	 { VEX_LEN_TABLE(VEX_LEN_0F38F7_P_0) },
9572 	 { VEX_LEN_TABLE(VEX_LEN_0F38F7_P_1) },
9573 	 { VEX_LEN_TABLE(VEX_LEN_0F38F7_P_2) },
9574 	 { VEX_LEN_TABLE(VEX_LEN_0F38F7_P_3) },
9575 	 },
9576 
9577 	/* PREFIX_VEX_0F3A00 */
9578 	{
9579 	 { Bad_Opcode },
9580 	 { Bad_Opcode },
9581 	 { VEX_LEN_TABLE(VEX_LEN_0F3A00_P_2) },
9582 	 },
9583 
9584 	/* PREFIX_VEX_0F3A01 */
9585 	{
9586 	 { Bad_Opcode },
9587 	 { Bad_Opcode },
9588 	 { VEX_LEN_TABLE(VEX_LEN_0F3A01_P_2) },
9589 	 },
9590 
9591 	/* PREFIX_VEX_0F3A02 */
9592 	{
9593 	 { Bad_Opcode },
9594 	 { Bad_Opcode },
9595 	 { VEX_W_TABLE(VEX_W_0F3A02_P_2) },
9596 	 },
9597 
9598 	/* PREFIX_VEX_0F3A04 */
9599 	{
9600 	 { Bad_Opcode },
9601 	 { Bad_Opcode },
9602 	 { VEX_W_TABLE(VEX_W_0F3A04_P_2) },
9603 	 },
9604 
9605 	/* PREFIX_VEX_0F3A05 */
9606 	{
9607 	 { Bad_Opcode },
9608 	 { Bad_Opcode },
9609 	 { VEX_W_TABLE(VEX_W_0F3A05_P_2) },
9610 	 },
9611 
9612 	/* PREFIX_VEX_0F3A06 */
9613 	{
9614 	 { Bad_Opcode },
9615 	 { Bad_Opcode },
9616 	 { VEX_LEN_TABLE(VEX_LEN_0F3A06_P_2) },
9617 	 },
9618 
9619 	/* PREFIX_VEX_0F3A08 */
9620 	{
9621 	 { Bad_Opcode },
9622 	 { Bad_Opcode },
9623 	 { VEX_W_TABLE(VEX_W_0F3A08_P_2) },
9624 	 },
9625 
9626 	/* PREFIX_VEX_0F3A09 */
9627 	{
9628 	 { Bad_Opcode },
9629 	 { Bad_Opcode },
9630 	 { VEX_W_TABLE(VEX_W_0F3A09_P_2) },
9631 	 },
9632 
9633 	/* PREFIX_VEX_0F3A0A */
9634 	{
9635 	 { Bad_Opcode },
9636 	 { Bad_Opcode },
9637 	 { VEX_LEN_TABLE(VEX_LEN_0F3A0A_P_2) },
9638 	 },
9639 
9640 	/* PREFIX_VEX_0F3A0B */
9641 	{
9642 	 { Bad_Opcode },
9643 	 { Bad_Opcode },
9644 	 { VEX_LEN_TABLE(VEX_LEN_0F3A0B_P_2) },
9645 	 },
9646 
9647 	/* PREFIX_VEX_0F3A0C */
9648 	{
9649 	 { Bad_Opcode },
9650 	 { Bad_Opcode },
9651 	 { VEX_W_TABLE(VEX_W_0F3A0C_P_2) },
9652 	 },
9653 
9654 	/* PREFIX_VEX_0F3A0D */
9655 	{
9656 	 { Bad_Opcode },
9657 	 { Bad_Opcode },
9658 	 { VEX_W_TABLE(VEX_W_0F3A0D_P_2) },
9659 	 },
9660 
9661 	/* PREFIX_VEX_0F3A0E */
9662 	{
9663 	 { Bad_Opcode },
9664 	 { Bad_Opcode },
9665 	 { VEX_W_TABLE(VEX_W_0F3A0E_P_2) },
9666 	 },
9667 
9668 	/* PREFIX_VEX_0F3A0F */
9669 	{
9670 	 { Bad_Opcode },
9671 	 { Bad_Opcode },
9672 	 { VEX_W_TABLE(VEX_W_0F3A0F_P_2) },
9673 	 },
9674 
9675 	/* PREFIX_VEX_0F3A14 */
9676 	{
9677 	 { Bad_Opcode },
9678 	 { Bad_Opcode },
9679 	 { VEX_LEN_TABLE(VEX_LEN_0F3A14_P_2) },
9680 	 },
9681 
9682 	/* PREFIX_VEX_0F3A15 */
9683 	{
9684 	 { Bad_Opcode },
9685 	 { Bad_Opcode },
9686 	 { VEX_LEN_TABLE(VEX_LEN_0F3A15_P_2) },
9687 	 },
9688 
9689 	/* PREFIX_VEX_0F3A16 */
9690 	{
9691 	 { Bad_Opcode },
9692 	 { Bad_Opcode },
9693 	 { VEX_LEN_TABLE(VEX_LEN_0F3A16_P_2) },
9694 	 },
9695 
9696 	/* PREFIX_VEX_0F3A17 */
9697 	{
9698 	 { Bad_Opcode },
9699 	 { Bad_Opcode },
9700 	 { VEX_LEN_TABLE(VEX_LEN_0F3A17_P_2) },
9701 	 },
9702 
9703 	/* PREFIX_VEX_0F3A18 */
9704 	{
9705 	 { Bad_Opcode },
9706 	 { Bad_Opcode },
9707 	 { VEX_LEN_TABLE(VEX_LEN_0F3A18_P_2) },
9708 	 },
9709 
9710 	/* PREFIX_VEX_0F3A19 */
9711 	{
9712 	 { Bad_Opcode },
9713 	 { Bad_Opcode },
9714 	 { VEX_LEN_TABLE(VEX_LEN_0F3A19_P_2) },
9715 	 },
9716 
9717 	/* PREFIX_VEX_0F3A1D */
9718 	{
9719 	 { Bad_Opcode },
9720 	 { Bad_Opcode },
9721 	 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
9722 	 },
9723 
9724 	/* PREFIX_VEX_0F3A20 */
9725 	{
9726 	 { Bad_Opcode },
9727 	 { Bad_Opcode },
9728 	 { VEX_LEN_TABLE(VEX_LEN_0F3A20_P_2) },
9729 	 },
9730 
9731 	/* PREFIX_VEX_0F3A21 */
9732 	{
9733 	 { Bad_Opcode },
9734 	 { Bad_Opcode },
9735 	 { VEX_LEN_TABLE(VEX_LEN_0F3A21_P_2) },
9736 	 },
9737 
9738 	/* PREFIX_VEX_0F3A22 */
9739 	{
9740 	 { Bad_Opcode },
9741 	 { Bad_Opcode },
9742 	 { VEX_LEN_TABLE(VEX_LEN_0F3A22_P_2) },
9743 	 },
9744 
9745 	/* PREFIX_VEX_0F3A30 */
9746 	{
9747 	 { Bad_Opcode },
9748 	 { Bad_Opcode },
9749 	 { VEX_LEN_TABLE(VEX_LEN_0F3A30_P_2) },
9750 	 },
9751 
9752 	/* PREFIX_VEX_0F3A31 */
9753 	{
9754 	 { Bad_Opcode },
9755 	 { Bad_Opcode },
9756 	 { VEX_LEN_TABLE(VEX_LEN_0F3A31_P_2) },
9757 	 },
9758 
9759 	/* PREFIX_VEX_0F3A32 */
9760 	{
9761 	 { Bad_Opcode },
9762 	 { Bad_Opcode },
9763 	 { VEX_LEN_TABLE(VEX_LEN_0F3A32_P_2) },
9764 	 },
9765 
9766 	/* PREFIX_VEX_0F3A33 */
9767 	{
9768 	 { Bad_Opcode },
9769 	 { Bad_Opcode },
9770 	 { VEX_LEN_TABLE(VEX_LEN_0F3A33_P_2) },
9771 	 },
9772 
9773 	/* PREFIX_VEX_0F3A38 */
9774 	{
9775 	 { Bad_Opcode },
9776 	 { Bad_Opcode },
9777 	 { VEX_LEN_TABLE(VEX_LEN_0F3A38_P_2) },
9778 	 },
9779 
9780 	/* PREFIX_VEX_0F3A39 */
9781 	{
9782 	 { Bad_Opcode },
9783 	 { Bad_Opcode },
9784 	 { VEX_LEN_TABLE(VEX_LEN_0F3A39_P_2) },
9785 	 },
9786 
9787 	/* PREFIX_VEX_0F3A40 */
9788 	{
9789 	 { Bad_Opcode },
9790 	 { Bad_Opcode },
9791 	 { VEX_W_TABLE(VEX_W_0F3A40_P_2) },
9792 	 },
9793 
9794 	/* PREFIX_VEX_0F3A41 */
9795 	{
9796 	 { Bad_Opcode },
9797 	 { Bad_Opcode },
9798 	 { VEX_LEN_TABLE(VEX_LEN_0F3A41_P_2) },
9799 	 },
9800 
9801 	/* PREFIX_VEX_0F3A42 */
9802 	{
9803 	 { Bad_Opcode },
9804 	 { Bad_Opcode },
9805 	 { VEX_W_TABLE(VEX_W_0F3A42_P_2) },
9806 	 },
9807 
9808 	/* PREFIX_VEX_0F3A44 */
9809 	{
9810 	 { Bad_Opcode },
9811 	 { Bad_Opcode },
9812 	 { VEX_LEN_TABLE(VEX_LEN_0F3A44_P_2) },
9813 	 },
9814 
9815 	/* PREFIX_VEX_0F3A46 */
9816 	{
9817 	 { Bad_Opcode },
9818 	 { Bad_Opcode },
9819 	 { VEX_LEN_TABLE(VEX_LEN_0F3A46_P_2) },
9820 	 },
9821 
9822 	/* PREFIX_VEX_0F3A48 */
9823 	{
9824 	 { Bad_Opcode },
9825 	 { Bad_Opcode },
9826 	 { VEX_W_TABLE(VEX_W_0F3A48_P_2) },
9827 	 },
9828 
9829 	/* PREFIX_VEX_0F3A49 */
9830 	{
9831 	 { Bad_Opcode },
9832 	 { Bad_Opcode },
9833 	 { VEX_W_TABLE(VEX_W_0F3A49_P_2) },
9834 	 },
9835 
9836 	/* PREFIX_VEX_0F3A4A */
9837 	{
9838 	 { Bad_Opcode },
9839 	 { Bad_Opcode },
9840 	 { VEX_W_TABLE(VEX_W_0F3A4A_P_2) },
9841 	 },
9842 
9843 	/* PREFIX_VEX_0F3A4B */
9844 	{
9845 	 { Bad_Opcode },
9846 	 { Bad_Opcode },
9847 	 { VEX_W_TABLE(VEX_W_0F3A4B_P_2) },
9848 	 },
9849 
9850 	/* PREFIX_VEX_0F3A4C */
9851 	{
9852 	 { Bad_Opcode },
9853 	 { Bad_Opcode },
9854 	 { VEX_W_TABLE(VEX_W_0F3A4C_P_2) },
9855 	 },
9856 
9857 	/* PREFIX_VEX_0F3A5C */
9858 	{
9859 	 { Bad_Opcode },
9860 	 { Bad_Opcode },
9861 	 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9862 	 },
9863 
9864 	/* PREFIX_VEX_0F3A5D */
9865 	{
9866 	 { Bad_Opcode },
9867 	 { Bad_Opcode },
9868 	 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9869 	 },
9870 
9871 	/* PREFIX_VEX_0F3A5E */
9872 	{
9873 	 { Bad_Opcode },
9874 	 { Bad_Opcode },
9875 	 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9876 	 },
9877 
9878 	/* PREFIX_VEX_0F3A5F */
9879 	{
9880 	 { Bad_Opcode },
9881 	 { Bad_Opcode },
9882 	 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9883 	 },
9884 
9885 	/* PREFIX_VEX_0F3A60 */
9886 	{
9887 	 { Bad_Opcode },
9888 	 { Bad_Opcode },
9889 	 { VEX_LEN_TABLE(VEX_LEN_0F3A60_P_2) },
9890 	 { Bad_Opcode },
9891 	 },
9892 
9893 	/* PREFIX_VEX_0F3A61 */
9894 	{
9895 	 { Bad_Opcode },
9896 	 { Bad_Opcode },
9897 	 { VEX_LEN_TABLE(VEX_LEN_0F3A61_P_2) },
9898 	 },
9899 
9900 	/* PREFIX_VEX_0F3A62 */
9901 	{
9902 	 { Bad_Opcode },
9903 	 { Bad_Opcode },
9904 	 { VEX_LEN_TABLE(VEX_LEN_0F3A62_P_2) },
9905 	 },
9906 
9907 	/* PREFIX_VEX_0F3A63 */
9908 	{
9909 	 { Bad_Opcode },
9910 	 { Bad_Opcode },
9911 	 { VEX_LEN_TABLE(VEX_LEN_0F3A63_P_2) },
9912 	 },
9913 
9914 	/* PREFIX_VEX_0F3A68 */
9915 	{
9916 	 { Bad_Opcode },
9917 	 { Bad_Opcode },
9918 	 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9919 	 },
9920 
9921 	/* PREFIX_VEX_0F3A69 */
9922 	{
9923 	 { Bad_Opcode },
9924 	 { Bad_Opcode },
9925 	 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9926 	 },
9927 
9928 	/* PREFIX_VEX_0F3A6A */
9929 	{
9930 	 { Bad_Opcode },
9931 	 { Bad_Opcode },
9932 	 { VEX_LEN_TABLE(VEX_LEN_0F3A6A_P_2) },
9933 	 },
9934 
9935 	/* PREFIX_VEX_0F3A6B */
9936 	{
9937 	 { Bad_Opcode },
9938 	 { Bad_Opcode },
9939 	 { VEX_LEN_TABLE(VEX_LEN_0F3A6B_P_2) },
9940 	 },
9941 
9942 	/* PREFIX_VEX_0F3A6C */
9943 	{
9944 	 { Bad_Opcode },
9945 	 { Bad_Opcode },
9946 	 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9947 	 },
9948 
9949 	/* PREFIX_VEX_0F3A6D */
9950 	{
9951 	 { Bad_Opcode },
9952 	 { Bad_Opcode },
9953 	 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9954 	 },
9955 
9956 	/* PREFIX_VEX_0F3A6E */
9957 	{
9958 	 { Bad_Opcode },
9959 	 { Bad_Opcode },
9960 	 { VEX_LEN_TABLE(VEX_LEN_0F3A6E_P_2) },
9961 	 },
9962 
9963 	/* PREFIX_VEX_0F3A6F */
9964 	{
9965 	 { Bad_Opcode },
9966 	 { Bad_Opcode },
9967 	 { VEX_LEN_TABLE(VEX_LEN_0F3A6F_P_2) },
9968 	 },
9969 
9970 	/* PREFIX_VEX_0F3A78 */
9971 	{
9972 	 { Bad_Opcode },
9973 	 { Bad_Opcode },
9974 	 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9975 	 },
9976 
9977 	/* PREFIX_VEX_0F3A79 */
9978 	{
9979 	 { Bad_Opcode },
9980 	 { Bad_Opcode },
9981 	 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
9982 	 },
9983 
9984 	/* PREFIX_VEX_0F3A7A */
9985 	{
9986 	 { Bad_Opcode },
9987 	 { Bad_Opcode },
9988 	 { VEX_LEN_TABLE(VEX_LEN_0F3A7A_P_2) },
9989 	 },
9990 
9991 	/* PREFIX_VEX_0F3A7B */
9992 	{
9993 	 { Bad_Opcode },
9994 	 { Bad_Opcode },
9995 	 { VEX_LEN_TABLE(VEX_LEN_0F3A7B_P_2) },
9996 	 },
9997 
9998 	/* PREFIX_VEX_0F3A7C */
9999 	{
10000 	 { Bad_Opcode },
10001 	 { Bad_Opcode },
10002 	 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
10003 	 { Bad_Opcode },
10004 	 },
10005 
10006 	/* PREFIX_VEX_0F3A7D */
10007 	{
10008 	 { Bad_Opcode },
10009 	 { Bad_Opcode },
10010 	 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
10011 	 },
10012 
10013 	/* PREFIX_VEX_0F3A7E */
10014 	{
10015 	 { Bad_Opcode },
10016 	 { Bad_Opcode },
10017 	 { VEX_LEN_TABLE(VEX_LEN_0F3A7E_P_2) },
10018 	 },
10019 
10020 	/* PREFIX_VEX_0F3A7F */
10021 	{
10022 	 { Bad_Opcode },
10023 	 { Bad_Opcode },
10024 	 { VEX_LEN_TABLE(VEX_LEN_0F3A7F_P_2) },
10025 	 },
10026 
10027 	/* PREFIX_VEX_0F3ADF */
10028 	{
10029 	 { Bad_Opcode },
10030 	 { Bad_Opcode },
10031 	 { VEX_LEN_TABLE(VEX_LEN_0F3ADF_P_2) },
10032 	 },
10033 
10034 	/* PREFIX_VEX_0F3AF0 */
10035 	{
10036 	 { Bad_Opcode },
10037 	 { Bad_Opcode },
10038 	 { Bad_Opcode },
10039 	 { VEX_LEN_TABLE(VEX_LEN_0F3AF0_P_3) },
10040 	 },
10041 
10042 #define NEED_PREFIX_TABLE
10043 #include "i386-dis-evex.h"
10044 #undef NEED_PREFIX_TABLE
10045 };
10046 
10047 static const struct dis386 x86_64_table[][2] = {
10048 	/* X86_64_06 */
10049 	{
10050 	 { "pushP", { es }, 0 },
10051 	 },
10052 
10053 	/* X86_64_07 */
10054 	{
10055 	 { "popP", { es }, 0 },
10056 	 },
10057 
10058 	/* X86_64_0D */
10059 	{
10060 	 { "pushP", { cs }, 0 },
10061 	 },
10062 
10063 	/* X86_64_16 */
10064 	{
10065 	 { "pushP", { ss }, 0 },
10066 	 },
10067 
10068 	/* X86_64_17 */
10069 	{
10070 	 { "popP", { ss }, 0 },
10071 	 },
10072 
10073 	/* X86_64_1E */
10074 	{
10075 	 { "pushP", { ds }, 0 },
10076 	 },
10077 
10078 	/* X86_64_1F */
10079 	{
10080 	 { "popP", { ds }, 0 },
10081 	 },
10082 
10083 	/* X86_64_27 */
10084 	{
10085 	 { "daa", { XX }, 0 },
10086 	 },
10087 
10088 	/* X86_64_2F */
10089 	{
10090 	 { "das", { XX }, 0 },
10091 	 },
10092 
10093 	/* X86_64_37 */
10094 	{
10095 	 { "aaa", { XX }, 0 },
10096 	 },
10097 
10098 	/* X86_64_3F */
10099 	{
10100 	 { "aas", { XX }, 0 },
10101 	 },
10102 
10103 	/* X86_64_60 */
10104 	{
10105 	 { "pushaP", { XX }, 0 },
10106 	 },
10107 
10108 	/* X86_64_61 */
10109 	{
10110 	 { "popaP", { XX }, 0 },
10111 	 },
10112 
10113 	/* X86_64_62 */
10114 	{
10115 	 { MOD_TABLE(MOD_62_32BIT) },
10116 	 { EVEX_TABLE(EVEX_0F) },
10117 	 },
10118 
10119 	/* X86_64_63 */
10120 	{
10121 	 { "arpl", { Ew, Gw }, 0 },
10122 	 { "movs{lq|xd}", { Gv, Ed }, 0 },
10123 	 },
10124 
10125 	/* X86_64_6D */
10126 	{
10127 	 { "ins{R|}", { Yzr, indirDX }, 0 },
10128 	 { "ins{G|}", { Yzr, indirDX }, 0 },
10129 	 },
10130 
10131 	/* X86_64_6F */
10132 	{
10133 	 { "outs{R|}", { indirDXr, Xz }, 0 },
10134 	 { "outs{G|}", { indirDXr, Xz }, 0 },
10135 	 },
10136 
10137 	/* X86_64_82 */
10138 	{
10139 	 /* Opcode 0x82 is an alias of of opcode 0x80 in 32-bit mode.  */
10140 	 { REG_TABLE(REG_80) },
10141 	 },
10142 
10143 	/* X86_64_9A */
10144 	{
10145 	 { "Jcall{T|}", { Ap }, 0 },
10146 	 },
10147 
10148 	/* X86_64_C4 */
10149 	{
10150 	 { MOD_TABLE(MOD_C4_32BIT) },
10151 	 { VEX_C4_TABLE(VEX_0F) },
10152 	 },
10153 
10154 	/* X86_64_C5 */
10155 	{
10156 	 { MOD_TABLE(MOD_C5_32BIT) },
10157 	 { VEX_C5_TABLE(VEX_0F) },
10158 	 },
10159 
10160 	/* X86_64_CE */
10161 	{
10162 	 { "into", { XX }, 0 },
10163 	 },
10164 
10165 	/* X86_64_D4 */
10166 	{
10167 	 { "aam", { Ib }, 0 },
10168 	 },
10169 
10170 	/* X86_64_D5 */
10171 	{
10172 	 { "aad", { Ib }, 0 },
10173 	 },
10174 
10175 	/* X86_64_E8 */
10176 	{
10177 	 { "callP", { Jv, BND }, 0 },
10178 	 { "call@", { Jv, BND }, 0 }
10179 	 },
10180 
10181 	/* X86_64_E9 */
10182 	{
10183 	 { "jmpP", { Jv, BND }, 0 },
10184 	 { "jmp@", { Jv, BND }, 0 }
10185 	 },
10186 
10187 	/* X86_64_EA */
10188 	{
10189 	 { "Jjmp{T|}", { Ap }, 0 },
10190 	 },
10191 
10192 	/* X86_64_0F01_REG_0 */
10193 	{
10194 	 { "sgdt{Q|IQ}", { M }, 0 },
10195 	 { "sgdt", { M }, 0 },
10196 	 },
10197 
10198 	/* X86_64_0F01_REG_1 */
10199 	{
10200 	 { "sidt{Q|IQ}", { M }, 0 },
10201 	 { "sidt", { M }, 0 },
10202 	 },
10203 
10204 	/* X86_64_0F01_REG_2 */
10205 	{
10206 	 { "lgdt{Q|Q}", { M }, 0 },
10207 	 { "lgdt", { M }, 0 },
10208 	 },
10209 
10210 	/* X86_64_0F01_REG_3 */
10211 	{
10212 	 { "lidt{Q|Q}", { M }, 0 },
10213 	 { "lidt", { M }, 0 },
10214 	 },
10215 };
10216 
10217 static const struct dis386 three_byte_table[][256] = {
10218 
10219 	/* THREE_BYTE_0F38 */
10220 	{
10221 	 /* 00 */
10222 	 { "pshufb", { MX, EM }, PREFIX_OPCODE },
10223 	 { "phaddw", { MX, EM }, PREFIX_OPCODE },
10224 	 { "phaddd", { MX, EM }, PREFIX_OPCODE },
10225 	 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
10226 	 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
10227 	 { "phsubw", { MX, EM }, PREFIX_OPCODE },
10228 	 { "phsubd", { MX, EM }, PREFIX_OPCODE },
10229 	 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
10230 	 /* 08 */
10231 	 { "psignb", { MX, EM }, PREFIX_OPCODE },
10232 	 { "psignw", { MX, EM }, PREFIX_OPCODE },
10233 	 { "psignd", { MX, EM }, PREFIX_OPCODE },
10234 	 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
10235 	 { Bad_Opcode },
10236 	 { Bad_Opcode },
10237 	 { Bad_Opcode },
10238 	 { Bad_Opcode },
10239 	 /* 10 */
10240 	 { PREFIX_TABLE(PREFIX_0F3810) },
10241 	 { Bad_Opcode },
10242 	 { Bad_Opcode },
10243 	 { Bad_Opcode },
10244 	 { PREFIX_TABLE(PREFIX_0F3814) },
10245 	 { PREFIX_TABLE(PREFIX_0F3815) },
10246 	 { Bad_Opcode },
10247 	 { PREFIX_TABLE(PREFIX_0F3817) },
10248 	 /* 18 */
10249 	 { Bad_Opcode },
10250 	 { Bad_Opcode },
10251 	 { Bad_Opcode },
10252 	 { Bad_Opcode },
10253 	 { "pabsb", { MX, EM }, PREFIX_OPCODE },
10254 	 { "pabsw", { MX, EM }, PREFIX_OPCODE },
10255 	 { "pabsd", { MX, EM }, PREFIX_OPCODE },
10256 	 { Bad_Opcode },
10257 	 /* 20 */
10258 	 { PREFIX_TABLE(PREFIX_0F3820) },
10259 	 { PREFIX_TABLE(PREFIX_0F3821) },
10260 	 { PREFIX_TABLE(PREFIX_0F3822) },
10261 	 { PREFIX_TABLE(PREFIX_0F3823) },
10262 	 { PREFIX_TABLE(PREFIX_0F3824) },
10263 	 { PREFIX_TABLE(PREFIX_0F3825) },
10264 	 { Bad_Opcode },
10265 	 { Bad_Opcode },
10266 	 /* 28 */
10267 	 { PREFIX_TABLE(PREFIX_0F3828) },
10268 	 { PREFIX_TABLE(PREFIX_0F3829) },
10269 	 { PREFIX_TABLE(PREFIX_0F382A) },
10270 	 { PREFIX_TABLE(PREFIX_0F382B) },
10271 	 { Bad_Opcode },
10272 	 { Bad_Opcode },
10273 	 { Bad_Opcode },
10274 	 { Bad_Opcode },
10275 	 /* 30 */
10276 	 { PREFIX_TABLE(PREFIX_0F3830) },
10277 	 { PREFIX_TABLE(PREFIX_0F3831) },
10278 	 { PREFIX_TABLE(PREFIX_0F3832) },
10279 	 { PREFIX_TABLE(PREFIX_0F3833) },
10280 	 { PREFIX_TABLE(PREFIX_0F3834) },
10281 	 { PREFIX_TABLE(PREFIX_0F3835) },
10282 	 { Bad_Opcode },
10283 	 { PREFIX_TABLE(PREFIX_0F3837) },
10284 	 /* 38 */
10285 	 { PREFIX_TABLE(PREFIX_0F3838) },
10286 	 { PREFIX_TABLE(PREFIX_0F3839) },
10287 	 { PREFIX_TABLE(PREFIX_0F383A) },
10288 	 { PREFIX_TABLE(PREFIX_0F383B) },
10289 	 { PREFIX_TABLE(PREFIX_0F383C) },
10290 	 { PREFIX_TABLE(PREFIX_0F383D) },
10291 	 { PREFIX_TABLE(PREFIX_0F383E) },
10292 	 { PREFIX_TABLE(PREFIX_0F383F) },
10293 	 /* 40 */
10294 	 { PREFIX_TABLE(PREFIX_0F3840) },
10295 	 { PREFIX_TABLE(PREFIX_0F3841) },
10296 	 { Bad_Opcode },
10297 	 { Bad_Opcode },
10298 	 { Bad_Opcode },
10299 	 { Bad_Opcode },
10300 	 { Bad_Opcode },
10301 	 { Bad_Opcode },
10302 	 /* 48 */
10303 	 { Bad_Opcode },
10304 	 { Bad_Opcode },
10305 	 { Bad_Opcode },
10306 	 { Bad_Opcode },
10307 	 { Bad_Opcode },
10308 	 { Bad_Opcode },
10309 	 { Bad_Opcode },
10310 	 { Bad_Opcode },
10311 	 /* 50 */
10312 	 { Bad_Opcode },
10313 	 { Bad_Opcode },
10314 	 { Bad_Opcode },
10315 	 { Bad_Opcode },
10316 	 { Bad_Opcode },
10317 	 { Bad_Opcode },
10318 	 { Bad_Opcode },
10319 	 { Bad_Opcode },
10320 	 /* 58 */
10321 	 { Bad_Opcode },
10322 	 { Bad_Opcode },
10323 	 { Bad_Opcode },
10324 	 { Bad_Opcode },
10325 	 { Bad_Opcode },
10326 	 { Bad_Opcode },
10327 	 { Bad_Opcode },
10328 	 { Bad_Opcode },
10329 	 /* 60 */
10330 	 { Bad_Opcode },
10331 	 { Bad_Opcode },
10332 	 { Bad_Opcode },
10333 	 { Bad_Opcode },
10334 	 { Bad_Opcode },
10335 	 { Bad_Opcode },
10336 	 { Bad_Opcode },
10337 	 { Bad_Opcode },
10338 	 /* 68 */
10339 	 { Bad_Opcode },
10340 	 { Bad_Opcode },
10341 	 { Bad_Opcode },
10342 	 { Bad_Opcode },
10343 	 { Bad_Opcode },
10344 	 { Bad_Opcode },
10345 	 { Bad_Opcode },
10346 	 { Bad_Opcode },
10347 	 /* 70 */
10348 	 { Bad_Opcode },
10349 	 { Bad_Opcode },
10350 	 { Bad_Opcode },
10351 	 { Bad_Opcode },
10352 	 { Bad_Opcode },
10353 	 { Bad_Opcode },
10354 	 { Bad_Opcode },
10355 	 { Bad_Opcode },
10356 	 /* 78 */
10357 	 { Bad_Opcode },
10358 	 { Bad_Opcode },
10359 	 { Bad_Opcode },
10360 	 { Bad_Opcode },
10361 	 { Bad_Opcode },
10362 	 { Bad_Opcode },
10363 	 { Bad_Opcode },
10364 	 { Bad_Opcode },
10365 	 /* 80 */
10366 	 { PREFIX_TABLE(PREFIX_0F3880) },
10367 	 { PREFIX_TABLE(PREFIX_0F3881) },
10368 	 { PREFIX_TABLE(PREFIX_0F3882) },
10369 	 { Bad_Opcode },
10370 	 { Bad_Opcode },
10371 	 { Bad_Opcode },
10372 	 { Bad_Opcode },
10373 	 { Bad_Opcode },
10374 	 /* 88 */
10375 	 { Bad_Opcode },
10376 	 { Bad_Opcode },
10377 	 { Bad_Opcode },
10378 	 { Bad_Opcode },
10379 	 { Bad_Opcode },
10380 	 { Bad_Opcode },
10381 	 { Bad_Opcode },
10382 	 { Bad_Opcode },
10383 	 /* 90 */
10384 	 { Bad_Opcode },
10385 	 { Bad_Opcode },
10386 	 { Bad_Opcode },
10387 	 { Bad_Opcode },
10388 	 { Bad_Opcode },
10389 	 { Bad_Opcode },
10390 	 { Bad_Opcode },
10391 	 { Bad_Opcode },
10392 	 /* 98 */
10393 	 { Bad_Opcode },
10394 	 { Bad_Opcode },
10395 	 { Bad_Opcode },
10396 	 { Bad_Opcode },
10397 	 { Bad_Opcode },
10398 	 { Bad_Opcode },
10399 	 { Bad_Opcode },
10400 	 { Bad_Opcode },
10401 	 /* a0 */
10402 	 { Bad_Opcode },
10403 	 { Bad_Opcode },
10404 	 { Bad_Opcode },
10405 	 { Bad_Opcode },
10406 	 { Bad_Opcode },
10407 	 { Bad_Opcode },
10408 	 { Bad_Opcode },
10409 	 { Bad_Opcode },
10410 	 /* a8 */
10411 	 { Bad_Opcode },
10412 	 { Bad_Opcode },
10413 	 { Bad_Opcode },
10414 	 { Bad_Opcode },
10415 	 { Bad_Opcode },
10416 	 { Bad_Opcode },
10417 	 { Bad_Opcode },
10418 	 { Bad_Opcode },
10419 	 /* b0 */
10420 	 { Bad_Opcode },
10421 	 { Bad_Opcode },
10422 	 { Bad_Opcode },
10423 	 { Bad_Opcode },
10424 	 { Bad_Opcode },
10425 	 { Bad_Opcode },
10426 	 { Bad_Opcode },
10427 	 { Bad_Opcode },
10428 	 /* b8 */
10429 	 { Bad_Opcode },
10430 	 { Bad_Opcode },
10431 	 { Bad_Opcode },
10432 	 { Bad_Opcode },
10433 	 { Bad_Opcode },
10434 	 { Bad_Opcode },
10435 	 { Bad_Opcode },
10436 	 { Bad_Opcode },
10437 	 /* c0 */
10438 	 { Bad_Opcode },
10439 	 { Bad_Opcode },
10440 	 { Bad_Opcode },
10441 	 { Bad_Opcode },
10442 	 { Bad_Opcode },
10443 	 { Bad_Opcode },
10444 	 { Bad_Opcode },
10445 	 { Bad_Opcode },
10446 	 /* c8 */
10447 	 { PREFIX_TABLE(PREFIX_0F38C8) },
10448 	 { PREFIX_TABLE(PREFIX_0F38C9) },
10449 	 { PREFIX_TABLE(PREFIX_0F38CA) },
10450 	 { PREFIX_TABLE(PREFIX_0F38CB) },
10451 	 { PREFIX_TABLE(PREFIX_0F38CC) },
10452 	 { PREFIX_TABLE(PREFIX_0F38CD) },
10453 	 { Bad_Opcode },
10454 	 { Bad_Opcode },
10455 	 /* d0 */
10456 	 { Bad_Opcode },
10457 	 { Bad_Opcode },
10458 	 { Bad_Opcode },
10459 	 { Bad_Opcode },
10460 	 { Bad_Opcode },
10461 	 { Bad_Opcode },
10462 	 { Bad_Opcode },
10463 	 { Bad_Opcode },
10464 	 /* d8 */
10465 	 { Bad_Opcode },
10466 	 { Bad_Opcode },
10467 	 { Bad_Opcode },
10468 	 { PREFIX_TABLE(PREFIX_0F38DB) },
10469 	 { PREFIX_TABLE(PREFIX_0F38DC) },
10470 	 { PREFIX_TABLE(PREFIX_0F38DD) },
10471 	 { PREFIX_TABLE(PREFIX_0F38DE) },
10472 	 { PREFIX_TABLE(PREFIX_0F38DF) },
10473 	 /* e0 */
10474 	 { Bad_Opcode },
10475 	 { Bad_Opcode },
10476 	 { Bad_Opcode },
10477 	 { Bad_Opcode },
10478 	 { Bad_Opcode },
10479 	 { Bad_Opcode },
10480 	 { Bad_Opcode },
10481 	 { Bad_Opcode },
10482 	 /* e8 */
10483 	 { Bad_Opcode },
10484 	 { Bad_Opcode },
10485 	 { Bad_Opcode },
10486 	 { Bad_Opcode },
10487 	 { Bad_Opcode },
10488 	 { Bad_Opcode },
10489 	 { Bad_Opcode },
10490 	 { Bad_Opcode },
10491 	 /* f0 */
10492 	 { PREFIX_TABLE(PREFIX_0F38F0) },
10493 	 { PREFIX_TABLE(PREFIX_0F38F1) },
10494 	 { Bad_Opcode },
10495 	 { Bad_Opcode },
10496 	 { Bad_Opcode },
10497 	 { Bad_Opcode },
10498 	 { PREFIX_TABLE(PREFIX_0F38F6) },
10499 	 { Bad_Opcode },
10500 	 /* f8 */
10501 	 { Bad_Opcode },
10502 	 { Bad_Opcode },
10503 	 { Bad_Opcode },
10504 	 { Bad_Opcode },
10505 	 { Bad_Opcode },
10506 	 { Bad_Opcode },
10507 	 { Bad_Opcode },
10508 	 { Bad_Opcode },
10509 	 },
10510 	/* THREE_BYTE_0F3A */
10511 	{
10512 	 /* 00 */
10513 	 { Bad_Opcode },
10514 	 { Bad_Opcode },
10515 	 { Bad_Opcode },
10516 	 { Bad_Opcode },
10517 	 { Bad_Opcode },
10518 	 { Bad_Opcode },
10519 	 { Bad_Opcode },
10520 	 { Bad_Opcode },
10521 	 /* 08 */
10522 	 { PREFIX_TABLE(PREFIX_0F3A08) },
10523 	 { PREFIX_TABLE(PREFIX_0F3A09) },
10524 	 { PREFIX_TABLE(PREFIX_0F3A0A) },
10525 	 { PREFIX_TABLE(PREFIX_0F3A0B) },
10526 	 { PREFIX_TABLE(PREFIX_0F3A0C) },
10527 	 { PREFIX_TABLE(PREFIX_0F3A0D) },
10528 	 { PREFIX_TABLE(PREFIX_0F3A0E) },
10529 	 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
10530 	 /* 10 */
10531 	 { Bad_Opcode },
10532 	 { Bad_Opcode },
10533 	 { Bad_Opcode },
10534 	 { Bad_Opcode },
10535 	 { PREFIX_TABLE(PREFIX_0F3A14) },
10536 	 { PREFIX_TABLE(PREFIX_0F3A15) },
10537 	 { PREFIX_TABLE(PREFIX_0F3A16) },
10538 	 { PREFIX_TABLE(PREFIX_0F3A17) },
10539 	 /* 18 */
10540 	 { Bad_Opcode },
10541 	 { Bad_Opcode },
10542 	 { Bad_Opcode },
10543 	 { Bad_Opcode },
10544 	 { Bad_Opcode },
10545 	 { Bad_Opcode },
10546 	 { Bad_Opcode },
10547 	 { Bad_Opcode },
10548 	 /* 20 */
10549 	 { PREFIX_TABLE(PREFIX_0F3A20) },
10550 	 { PREFIX_TABLE(PREFIX_0F3A21) },
10551 	 { PREFIX_TABLE(PREFIX_0F3A22) },
10552 	 { Bad_Opcode },
10553 	 { Bad_Opcode },
10554 	 { Bad_Opcode },
10555 	 { Bad_Opcode },
10556 	 { Bad_Opcode },
10557 	 /* 28 */
10558 	 { Bad_Opcode },
10559 	 { Bad_Opcode },
10560 	 { Bad_Opcode },
10561 	 { Bad_Opcode },
10562 	 { Bad_Opcode },
10563 	 { Bad_Opcode },
10564 	 { Bad_Opcode },
10565 	 { Bad_Opcode },
10566 	 /* 30 */
10567 	 { Bad_Opcode },
10568 	 { Bad_Opcode },
10569 	 { Bad_Opcode },
10570 	 { Bad_Opcode },
10571 	 { Bad_Opcode },
10572 	 { Bad_Opcode },
10573 	 { Bad_Opcode },
10574 	 { Bad_Opcode },
10575 	 /* 38 */
10576 	 { Bad_Opcode },
10577 	 { Bad_Opcode },
10578 	 { Bad_Opcode },
10579 	 { Bad_Opcode },
10580 	 { Bad_Opcode },
10581 	 { Bad_Opcode },
10582 	 { Bad_Opcode },
10583 	 { Bad_Opcode },
10584 	 /* 40 */
10585 	 { PREFIX_TABLE(PREFIX_0F3A40) },
10586 	 { PREFIX_TABLE(PREFIX_0F3A41) },
10587 	 { PREFIX_TABLE(PREFIX_0F3A42) },
10588 	 { Bad_Opcode },
10589 	 { PREFIX_TABLE(PREFIX_0F3A44) },
10590 	 { Bad_Opcode },
10591 	 { Bad_Opcode },
10592 	 { Bad_Opcode },
10593 	 /* 48 */
10594 	 { Bad_Opcode },
10595 	 { Bad_Opcode },
10596 	 { Bad_Opcode },
10597 	 { Bad_Opcode },
10598 	 { Bad_Opcode },
10599 	 { Bad_Opcode },
10600 	 { Bad_Opcode },
10601 	 { Bad_Opcode },
10602 	 /* 50 */
10603 	 { Bad_Opcode },
10604 	 { Bad_Opcode },
10605 	 { Bad_Opcode },
10606 	 { Bad_Opcode },
10607 	 { Bad_Opcode },
10608 	 { Bad_Opcode },
10609 	 { Bad_Opcode },
10610 	 { Bad_Opcode },
10611 	 /* 58 */
10612 	 { Bad_Opcode },
10613 	 { Bad_Opcode },
10614 	 { Bad_Opcode },
10615 	 { Bad_Opcode },
10616 	 { Bad_Opcode },
10617 	 { Bad_Opcode },
10618 	 { Bad_Opcode },
10619 	 { Bad_Opcode },
10620 	 /* 60 */
10621 	 { PREFIX_TABLE(PREFIX_0F3A60) },
10622 	 { PREFIX_TABLE(PREFIX_0F3A61) },
10623 	 { PREFIX_TABLE(PREFIX_0F3A62) },
10624 	 { PREFIX_TABLE(PREFIX_0F3A63) },
10625 	 { Bad_Opcode },
10626 	 { Bad_Opcode },
10627 	 { Bad_Opcode },
10628 	 { Bad_Opcode },
10629 	 /* 68 */
10630 	 { Bad_Opcode },
10631 	 { Bad_Opcode },
10632 	 { Bad_Opcode },
10633 	 { Bad_Opcode },
10634 	 { Bad_Opcode },
10635 	 { Bad_Opcode },
10636 	 { Bad_Opcode },
10637 	 { Bad_Opcode },
10638 	 /* 70 */
10639 	 { Bad_Opcode },
10640 	 { Bad_Opcode },
10641 	 { Bad_Opcode },
10642 	 { Bad_Opcode },
10643 	 { Bad_Opcode },
10644 	 { Bad_Opcode },
10645 	 { Bad_Opcode },
10646 	 { Bad_Opcode },
10647 	 /* 78 */
10648 	 { Bad_Opcode },
10649 	 { Bad_Opcode },
10650 	 { Bad_Opcode },
10651 	 { Bad_Opcode },
10652 	 { Bad_Opcode },
10653 	 { Bad_Opcode },
10654 	 { Bad_Opcode },
10655 	 { Bad_Opcode },
10656 	 /* 80 */
10657 	 { Bad_Opcode },
10658 	 { Bad_Opcode },
10659 	 { Bad_Opcode },
10660 	 { Bad_Opcode },
10661 	 { Bad_Opcode },
10662 	 { Bad_Opcode },
10663 	 { Bad_Opcode },
10664 	 { Bad_Opcode },
10665 	 /* 88 */
10666 	 { Bad_Opcode },
10667 	 { Bad_Opcode },
10668 	 { Bad_Opcode },
10669 	 { Bad_Opcode },
10670 	 { Bad_Opcode },
10671 	 { Bad_Opcode },
10672 	 { Bad_Opcode },
10673 	 { Bad_Opcode },
10674 	 /* 90 */
10675 	 { Bad_Opcode },
10676 	 { Bad_Opcode },
10677 	 { Bad_Opcode },
10678 	 { Bad_Opcode },
10679 	 { Bad_Opcode },
10680 	 { Bad_Opcode },
10681 	 { Bad_Opcode },
10682 	 { Bad_Opcode },
10683 	 /* 98 */
10684 	 { Bad_Opcode },
10685 	 { Bad_Opcode },
10686 	 { Bad_Opcode },
10687 	 { Bad_Opcode },
10688 	 { Bad_Opcode },
10689 	 { Bad_Opcode },
10690 	 { Bad_Opcode },
10691 	 { Bad_Opcode },
10692 	 /* a0 */
10693 	 { Bad_Opcode },
10694 	 { Bad_Opcode },
10695 	 { Bad_Opcode },
10696 	 { Bad_Opcode },
10697 	 { Bad_Opcode },
10698 	 { Bad_Opcode },
10699 	 { Bad_Opcode },
10700 	 { Bad_Opcode },
10701 	 /* a8 */
10702 	 { Bad_Opcode },
10703 	 { Bad_Opcode },
10704 	 { Bad_Opcode },
10705 	 { Bad_Opcode },
10706 	 { Bad_Opcode },
10707 	 { Bad_Opcode },
10708 	 { Bad_Opcode },
10709 	 { Bad_Opcode },
10710 	 /* b0 */
10711 	 { Bad_Opcode },
10712 	 { Bad_Opcode },
10713 	 { Bad_Opcode },
10714 	 { Bad_Opcode },
10715 	 { Bad_Opcode },
10716 	 { Bad_Opcode },
10717 	 { Bad_Opcode },
10718 	 { Bad_Opcode },
10719 	 /* b8 */
10720 	 { Bad_Opcode },
10721 	 { Bad_Opcode },
10722 	 { Bad_Opcode },
10723 	 { Bad_Opcode },
10724 	 { Bad_Opcode },
10725 	 { Bad_Opcode },
10726 	 { Bad_Opcode },
10727 	 { Bad_Opcode },
10728 	 /* c0 */
10729 	 { Bad_Opcode },
10730 	 { Bad_Opcode },
10731 	 { Bad_Opcode },
10732 	 { Bad_Opcode },
10733 	 { Bad_Opcode },
10734 	 { Bad_Opcode },
10735 	 { Bad_Opcode },
10736 	 { Bad_Opcode },
10737 	 /* c8 */
10738 	 { Bad_Opcode },
10739 	 { Bad_Opcode },
10740 	 { Bad_Opcode },
10741 	 { Bad_Opcode },
10742 	 { PREFIX_TABLE(PREFIX_0F3ACC) },
10743 	 { Bad_Opcode },
10744 	 { Bad_Opcode },
10745 	 { Bad_Opcode },
10746 	 /* d0 */
10747 	 { Bad_Opcode },
10748 	 { Bad_Opcode },
10749 	 { Bad_Opcode },
10750 	 { Bad_Opcode },
10751 	 { Bad_Opcode },
10752 	 { Bad_Opcode },
10753 	 { Bad_Opcode },
10754 	 { Bad_Opcode },
10755 	 /* d8 */
10756 	 { Bad_Opcode },
10757 	 { Bad_Opcode },
10758 	 { Bad_Opcode },
10759 	 { Bad_Opcode },
10760 	 { Bad_Opcode },
10761 	 { Bad_Opcode },
10762 	 { Bad_Opcode },
10763 	 { PREFIX_TABLE(PREFIX_0F3ADF) },
10764 	 /* e0 */
10765 	 { Bad_Opcode },
10766 	 { Bad_Opcode },
10767 	 { Bad_Opcode },
10768 	 { Bad_Opcode },
10769 	 { Bad_Opcode },
10770 	 { Bad_Opcode },
10771 	 { Bad_Opcode },
10772 	 { Bad_Opcode },
10773 	 /* e8 */
10774 	 { Bad_Opcode },
10775 	 { Bad_Opcode },
10776 	 { Bad_Opcode },
10777 	 { Bad_Opcode },
10778 	 { Bad_Opcode },
10779 	 { Bad_Opcode },
10780 	 { Bad_Opcode },
10781 	 { Bad_Opcode },
10782 	 /* f0 */
10783 	 { Bad_Opcode },
10784 	 { Bad_Opcode },
10785 	 { Bad_Opcode },
10786 	 { Bad_Opcode },
10787 	 { Bad_Opcode },
10788 	 { Bad_Opcode },
10789 	 { Bad_Opcode },
10790 	 { Bad_Opcode },
10791 	 /* f8 */
10792 	 { Bad_Opcode },
10793 	 { Bad_Opcode },
10794 	 { Bad_Opcode },
10795 	 { Bad_Opcode },
10796 	 { Bad_Opcode },
10797 	 { Bad_Opcode },
10798 	 { Bad_Opcode },
10799 	 { Bad_Opcode },
10800 	 },
10801 
10802 	/* THREE_BYTE_0F7A */
10803 	{
10804 	 /* 00 */
10805 	 { Bad_Opcode },
10806 	 { Bad_Opcode },
10807 	 { Bad_Opcode },
10808 	 { Bad_Opcode },
10809 	 { Bad_Opcode },
10810 	 { Bad_Opcode },
10811 	 { Bad_Opcode },
10812 	 { Bad_Opcode },
10813 	 /* 08 */
10814 	 { Bad_Opcode },
10815 	 { Bad_Opcode },
10816 	 { Bad_Opcode },
10817 	 { Bad_Opcode },
10818 	 { Bad_Opcode },
10819 	 { Bad_Opcode },
10820 	 { Bad_Opcode },
10821 	 { Bad_Opcode },
10822 	 /* 10 */
10823 	 { Bad_Opcode },
10824 	 { Bad_Opcode },
10825 	 { Bad_Opcode },
10826 	 { Bad_Opcode },
10827 	 { Bad_Opcode },
10828 	 { Bad_Opcode },
10829 	 { Bad_Opcode },
10830 	 { Bad_Opcode },
10831 	 /* 18 */
10832 	 { Bad_Opcode },
10833 	 { Bad_Opcode },
10834 	 { Bad_Opcode },
10835 	 { Bad_Opcode },
10836 	 { Bad_Opcode },
10837 	 { Bad_Opcode },
10838 	 { Bad_Opcode },
10839 	 { Bad_Opcode },
10840 	 /* 20 */
10841 	 { "ptest", { XX }, PREFIX_OPCODE },
10842 	 { Bad_Opcode },
10843 	 { Bad_Opcode },
10844 	 { Bad_Opcode },
10845 	 { Bad_Opcode },
10846 	 { Bad_Opcode },
10847 	 { Bad_Opcode },
10848 	 { Bad_Opcode },
10849 	 /* 28 */
10850 	 { Bad_Opcode },
10851 	 { Bad_Opcode },
10852 	 { Bad_Opcode },
10853 	 { Bad_Opcode },
10854 	 { Bad_Opcode },
10855 	 { Bad_Opcode },
10856 	 { Bad_Opcode },
10857 	 { Bad_Opcode },
10858 	 /* 30 */
10859 	 { Bad_Opcode },
10860 	 { Bad_Opcode },
10861 	 { Bad_Opcode },
10862 	 { Bad_Opcode },
10863 	 { Bad_Opcode },
10864 	 { Bad_Opcode },
10865 	 { Bad_Opcode },
10866 	 { Bad_Opcode },
10867 	 /* 38 */
10868 	 { Bad_Opcode },
10869 	 { Bad_Opcode },
10870 	 { Bad_Opcode },
10871 	 { Bad_Opcode },
10872 	 { Bad_Opcode },
10873 	 { Bad_Opcode },
10874 	 { Bad_Opcode },
10875 	 { Bad_Opcode },
10876 	 /* 40 */
10877 	 { Bad_Opcode },
10878 	 { "phaddbw", { XM, EXq }, PREFIX_OPCODE },
10879 	 { "phaddbd", { XM, EXq }, PREFIX_OPCODE },
10880 	 { "phaddbq", { XM, EXq }, PREFIX_OPCODE },
10881 	 { Bad_Opcode },
10882 	 { Bad_Opcode },
10883 	 { "phaddwd", { XM, EXq }, PREFIX_OPCODE },
10884 	 { "phaddwq", { XM, EXq }, PREFIX_OPCODE },
10885 	 /* 48 */
10886 	 { Bad_Opcode },
10887 	 { Bad_Opcode },
10888 	 { Bad_Opcode },
10889 	 { "phadddq", { XM, EXq }, PREFIX_OPCODE },
10890 	 { Bad_Opcode },
10891 	 { Bad_Opcode },
10892 	 { Bad_Opcode },
10893 	 { Bad_Opcode },
10894 	 /* 50 */
10895 	 { Bad_Opcode },
10896 	 { "phaddubw", { XM, EXq }, PREFIX_OPCODE },
10897 	 { "phaddubd", { XM, EXq }, PREFIX_OPCODE },
10898 	 { "phaddubq", { XM, EXq }, PREFIX_OPCODE },
10899 	 { Bad_Opcode },
10900 	 { Bad_Opcode },
10901 	 { "phadduwd", { XM, EXq }, PREFIX_OPCODE },
10902 	 { "phadduwq", { XM, EXq }, PREFIX_OPCODE },
10903 	 /* 58 */
10904 	 { Bad_Opcode },
10905 	 { Bad_Opcode },
10906 	 { Bad_Opcode },
10907 	 { "phaddudq", { XM, EXq }, PREFIX_OPCODE },
10908 	 { Bad_Opcode },
10909 	 { Bad_Opcode },
10910 	 { Bad_Opcode },
10911 	 { Bad_Opcode },
10912 	 /* 60 */
10913 	 { Bad_Opcode },
10914 	 { "phsubbw", { XM, EXq }, PREFIX_OPCODE },
10915 	 { "phsubbd", { XM, EXq }, PREFIX_OPCODE },
10916 	 { "phsubbq", { XM, EXq }, PREFIX_OPCODE },
10917 	 { Bad_Opcode },
10918 	 { Bad_Opcode },
10919 	 { Bad_Opcode },
10920 	 { Bad_Opcode },
10921 	 /* 68 */
10922 	 { Bad_Opcode },
10923 	 { Bad_Opcode },
10924 	 { Bad_Opcode },
10925 	 { Bad_Opcode },
10926 	 { Bad_Opcode },
10927 	 { Bad_Opcode },
10928 	 { Bad_Opcode },
10929 	 { Bad_Opcode },
10930 	 /* 70 */
10931 	 { Bad_Opcode },
10932 	 { Bad_Opcode },
10933 	 { Bad_Opcode },
10934 	 { Bad_Opcode },
10935 	 { Bad_Opcode },
10936 	 { Bad_Opcode },
10937 	 { Bad_Opcode },
10938 	 { Bad_Opcode },
10939 	 /* 78 */
10940 	 { Bad_Opcode },
10941 	 { Bad_Opcode },
10942 	 { Bad_Opcode },
10943 	 { Bad_Opcode },
10944 	 { Bad_Opcode },
10945 	 { Bad_Opcode },
10946 	 { Bad_Opcode },
10947 	 { Bad_Opcode },
10948 	 /* 80 */
10949 	 { Bad_Opcode },
10950 	 { Bad_Opcode },
10951 	 { Bad_Opcode },
10952 	 { Bad_Opcode },
10953 	 { Bad_Opcode },
10954 	 { Bad_Opcode },
10955 	 { Bad_Opcode },
10956 	 { Bad_Opcode },
10957 	 /* 88 */
10958 	 { Bad_Opcode },
10959 	 { Bad_Opcode },
10960 	 { Bad_Opcode },
10961 	 { Bad_Opcode },
10962 	 { Bad_Opcode },
10963 	 { Bad_Opcode },
10964 	 { Bad_Opcode },
10965 	 { Bad_Opcode },
10966 	 /* 90 */
10967 	 { Bad_Opcode },
10968 	 { Bad_Opcode },
10969 	 { Bad_Opcode },
10970 	 { Bad_Opcode },
10971 	 { Bad_Opcode },
10972 	 { Bad_Opcode },
10973 	 { Bad_Opcode },
10974 	 { Bad_Opcode },
10975 	 /* 98 */
10976 	 { Bad_Opcode },
10977 	 { Bad_Opcode },
10978 	 { Bad_Opcode },
10979 	 { Bad_Opcode },
10980 	 { Bad_Opcode },
10981 	 { Bad_Opcode },
10982 	 { Bad_Opcode },
10983 	 { Bad_Opcode },
10984 	 /* a0 */
10985 	 { Bad_Opcode },
10986 	 { Bad_Opcode },
10987 	 { Bad_Opcode },
10988 	 { Bad_Opcode },
10989 	 { Bad_Opcode },
10990 	 { Bad_Opcode },
10991 	 { Bad_Opcode },
10992 	 { Bad_Opcode },
10993 	 /* a8 */
10994 	 { Bad_Opcode },
10995 	 { Bad_Opcode },
10996 	 { Bad_Opcode },
10997 	 { Bad_Opcode },
10998 	 { Bad_Opcode },
10999 	 { Bad_Opcode },
11000 	 { Bad_Opcode },
11001 	 { Bad_Opcode },
11002 	 /* b0 */
11003 	 { Bad_Opcode },
11004 	 { Bad_Opcode },
11005 	 { Bad_Opcode },
11006 	 { Bad_Opcode },
11007 	 { Bad_Opcode },
11008 	 { Bad_Opcode },
11009 	 { Bad_Opcode },
11010 	 { Bad_Opcode },
11011 	 /* b8 */
11012 	 { Bad_Opcode },
11013 	 { Bad_Opcode },
11014 	 { Bad_Opcode },
11015 	 { Bad_Opcode },
11016 	 { Bad_Opcode },
11017 	 { Bad_Opcode },
11018 	 { Bad_Opcode },
11019 	 { Bad_Opcode },
11020 	 /* c0 */
11021 	 { Bad_Opcode },
11022 	 { Bad_Opcode },
11023 	 { Bad_Opcode },
11024 	 { Bad_Opcode },
11025 	 { Bad_Opcode },
11026 	 { Bad_Opcode },
11027 	 { Bad_Opcode },
11028 	 { Bad_Opcode },
11029 	 /* c8 */
11030 	 { Bad_Opcode },
11031 	 { Bad_Opcode },
11032 	 { Bad_Opcode },
11033 	 { Bad_Opcode },
11034 	 { Bad_Opcode },
11035 	 { Bad_Opcode },
11036 	 { Bad_Opcode },
11037 	 { Bad_Opcode },
11038 	 /* d0 */
11039 	 { Bad_Opcode },
11040 	 { Bad_Opcode },
11041 	 { Bad_Opcode },
11042 	 { Bad_Opcode },
11043 	 { Bad_Opcode },
11044 	 { Bad_Opcode },
11045 	 { Bad_Opcode },
11046 	 { Bad_Opcode },
11047 	 /* d8 */
11048 	 { Bad_Opcode },
11049 	 { Bad_Opcode },
11050 	 { Bad_Opcode },
11051 	 { Bad_Opcode },
11052 	 { Bad_Opcode },
11053 	 { Bad_Opcode },
11054 	 { Bad_Opcode },
11055 	 { Bad_Opcode },
11056 	 /* e0 */
11057 	 { Bad_Opcode },
11058 	 { Bad_Opcode },
11059 	 { Bad_Opcode },
11060 	 { Bad_Opcode },
11061 	 { Bad_Opcode },
11062 	 { Bad_Opcode },
11063 	 { Bad_Opcode },
11064 	 { Bad_Opcode },
11065 	 /* e8 */
11066 	 { Bad_Opcode },
11067 	 { Bad_Opcode },
11068 	 { Bad_Opcode },
11069 	 { Bad_Opcode },
11070 	 { Bad_Opcode },
11071 	 { Bad_Opcode },
11072 	 { Bad_Opcode },
11073 	 { Bad_Opcode },
11074 	 /* f0 */
11075 	 { Bad_Opcode },
11076 	 { Bad_Opcode },
11077 	 { Bad_Opcode },
11078 	 { Bad_Opcode },
11079 	 { Bad_Opcode },
11080 	 { Bad_Opcode },
11081 	 { Bad_Opcode },
11082 	 { Bad_Opcode },
11083 	 /* f8 */
11084 	 { Bad_Opcode },
11085 	 { Bad_Opcode },
11086 	 { Bad_Opcode },
11087 	 { Bad_Opcode },
11088 	 { Bad_Opcode },
11089 	 { Bad_Opcode },
11090 	 { Bad_Opcode },
11091 	 { Bad_Opcode },
11092 	 },
11093 };
11094 
11095 static const struct dis386 xop_table[][256] = {
11096 	/* XOP_08 */
11097 	{
11098 	 /* 00 */
11099 	 { Bad_Opcode },
11100 	 { Bad_Opcode },
11101 	 { Bad_Opcode },
11102 	 { Bad_Opcode },
11103 	 { Bad_Opcode },
11104 	 { Bad_Opcode },
11105 	 { Bad_Opcode },
11106 	 { Bad_Opcode },
11107 	 /* 08 */
11108 	 { Bad_Opcode },
11109 	 { Bad_Opcode },
11110 	 { Bad_Opcode },
11111 	 { Bad_Opcode },
11112 	 { Bad_Opcode },
11113 	 { Bad_Opcode },
11114 	 { Bad_Opcode },
11115 	 { Bad_Opcode },
11116 	 /* 10 */
11117 	 { Bad_Opcode },
11118 	 { Bad_Opcode },
11119 	 { Bad_Opcode },
11120 	 { Bad_Opcode },
11121 	 { Bad_Opcode },
11122 	 { Bad_Opcode },
11123 	 { Bad_Opcode },
11124 	 { Bad_Opcode },
11125 	 /* 18 */
11126 	 { Bad_Opcode },
11127 	 { Bad_Opcode },
11128 	 { Bad_Opcode },
11129 	 { Bad_Opcode },
11130 	 { Bad_Opcode },
11131 	 { Bad_Opcode },
11132 	 { Bad_Opcode },
11133 	 { Bad_Opcode },
11134 	 /* 20 */
11135 	 { Bad_Opcode },
11136 	 { Bad_Opcode },
11137 	 { Bad_Opcode },
11138 	 { Bad_Opcode },
11139 	 { Bad_Opcode },
11140 	 { Bad_Opcode },
11141 	 { Bad_Opcode },
11142 	 { Bad_Opcode },
11143 	 /* 28 */
11144 	 { Bad_Opcode },
11145 	 { Bad_Opcode },
11146 	 { Bad_Opcode },
11147 	 { Bad_Opcode },
11148 	 { Bad_Opcode },
11149 	 { Bad_Opcode },
11150 	 { Bad_Opcode },
11151 	 { Bad_Opcode },
11152 	 /* 30 */
11153 	 { Bad_Opcode },
11154 	 { Bad_Opcode },
11155 	 { Bad_Opcode },
11156 	 { Bad_Opcode },
11157 	 { Bad_Opcode },
11158 	 { Bad_Opcode },
11159 	 { Bad_Opcode },
11160 	 { Bad_Opcode },
11161 	 /* 38 */
11162 	 { Bad_Opcode },
11163 	 { Bad_Opcode },
11164 	 { Bad_Opcode },
11165 	 { Bad_Opcode },
11166 	 { Bad_Opcode },
11167 	 { Bad_Opcode },
11168 	 { Bad_Opcode },
11169 	 { Bad_Opcode },
11170 	 /* 40 */
11171 	 { Bad_Opcode },
11172 	 { Bad_Opcode },
11173 	 { Bad_Opcode },
11174 	 { Bad_Opcode },
11175 	 { Bad_Opcode },
11176 	 { Bad_Opcode },
11177 	 { Bad_Opcode },
11178 	 { Bad_Opcode },
11179 	 /* 48 */
11180 	 { Bad_Opcode },
11181 	 { Bad_Opcode },
11182 	 { Bad_Opcode },
11183 	 { Bad_Opcode },
11184 	 { Bad_Opcode },
11185 	 { Bad_Opcode },
11186 	 { Bad_Opcode },
11187 	 { Bad_Opcode },
11188 	 /* 50 */
11189 	 { Bad_Opcode },
11190 	 { Bad_Opcode },
11191 	 { Bad_Opcode },
11192 	 { Bad_Opcode },
11193 	 { Bad_Opcode },
11194 	 { Bad_Opcode },
11195 	 { Bad_Opcode },
11196 	 { Bad_Opcode },
11197 	 /* 58 */
11198 	 { Bad_Opcode },
11199 	 { Bad_Opcode },
11200 	 { Bad_Opcode },
11201 	 { Bad_Opcode },
11202 	 { Bad_Opcode },
11203 	 { Bad_Opcode },
11204 	 { Bad_Opcode },
11205 	 { Bad_Opcode },
11206 	 /* 60 */
11207 	 { Bad_Opcode },
11208 	 { Bad_Opcode },
11209 	 { Bad_Opcode },
11210 	 { Bad_Opcode },
11211 	 { Bad_Opcode },
11212 	 { Bad_Opcode },
11213 	 { Bad_Opcode },
11214 	 { Bad_Opcode },
11215 	 /* 68 */
11216 	 { Bad_Opcode },
11217 	 { Bad_Opcode },
11218 	 { Bad_Opcode },
11219 	 { Bad_Opcode },
11220 	 { Bad_Opcode },
11221 	 { Bad_Opcode },
11222 	 { Bad_Opcode },
11223 	 { Bad_Opcode },
11224 	 /* 70 */
11225 	 { Bad_Opcode },
11226 	 { Bad_Opcode },
11227 	 { Bad_Opcode },
11228 	 { Bad_Opcode },
11229 	 { Bad_Opcode },
11230 	 { Bad_Opcode },
11231 	 { Bad_Opcode },
11232 	 { Bad_Opcode },
11233 	 /* 78 */
11234 	 { Bad_Opcode },
11235 	 { Bad_Opcode },
11236 	 { Bad_Opcode },
11237 	 { Bad_Opcode },
11238 	 { Bad_Opcode },
11239 	 { Bad_Opcode },
11240 	 { Bad_Opcode },
11241 	 { Bad_Opcode },
11242 	 /* 80 */
11243 	 { Bad_Opcode },
11244 	 { Bad_Opcode },
11245 	 { Bad_Opcode },
11246 	 { Bad_Opcode },
11247 	 { Bad_Opcode },
11248 	 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11249 	 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11250 	 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11251 	 /* 88 */
11252 	 { Bad_Opcode },
11253 	 { Bad_Opcode },
11254 	 { Bad_Opcode },
11255 	 { Bad_Opcode },
11256 	 { Bad_Opcode },
11257 	 { Bad_Opcode },
11258 	 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11259 	 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11260 	 /* 90 */
11261 	 { Bad_Opcode },
11262 	 { Bad_Opcode },
11263 	 { Bad_Opcode },
11264 	 { Bad_Opcode },
11265 	 { Bad_Opcode },
11266 	 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11267 	 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11268 	 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11269 	 /* 98 */
11270 	 { Bad_Opcode },
11271 	 { Bad_Opcode },
11272 	 { Bad_Opcode },
11273 	 { Bad_Opcode },
11274 	 { Bad_Opcode },
11275 	 { Bad_Opcode },
11276 	 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11277 	 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11278 	 /* a0 */
11279 	 { Bad_Opcode },
11280 	 { Bad_Opcode },
11281 	 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11282 	 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11283 	 { Bad_Opcode },
11284 	 { Bad_Opcode },
11285 	 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11286 	 { Bad_Opcode },
11287 	 /* a8 */
11288 	 { Bad_Opcode },
11289 	 { Bad_Opcode },
11290 	 { Bad_Opcode },
11291 	 { Bad_Opcode },
11292 	 { Bad_Opcode },
11293 	 { Bad_Opcode },
11294 	 { Bad_Opcode },
11295 	 { Bad_Opcode },
11296 	 /* b0 */
11297 	 { Bad_Opcode },
11298 	 { Bad_Opcode },
11299 	 { Bad_Opcode },
11300 	 { Bad_Opcode },
11301 	 { Bad_Opcode },
11302 	 { Bad_Opcode },
11303 	 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 }, 0 },
11304 	 { Bad_Opcode },
11305 	 /* b8 */
11306 	 { Bad_Opcode },
11307 	 { Bad_Opcode },
11308 	 { Bad_Opcode },
11309 	 { Bad_Opcode },
11310 	 { Bad_Opcode },
11311 	 { Bad_Opcode },
11312 	 { Bad_Opcode },
11313 	 { Bad_Opcode },
11314 	 /* c0 */
11315 	 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
11316 	 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
11317 	 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
11318 	 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
11319 	 { Bad_Opcode },
11320 	 { Bad_Opcode },
11321 	 { Bad_Opcode },
11322 	 { Bad_Opcode },
11323 	 /* c8 */
11324 	 { Bad_Opcode },
11325 	 { Bad_Opcode },
11326 	 { Bad_Opcode },
11327 	 { Bad_Opcode },
11328 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_CC) },
11329 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_CD) },
11330 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_CE) },
11331 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_CF) },
11332 	 /* d0 */
11333 	 { Bad_Opcode },
11334 	 { Bad_Opcode },
11335 	 { Bad_Opcode },
11336 	 { Bad_Opcode },
11337 	 { Bad_Opcode },
11338 	 { Bad_Opcode },
11339 	 { Bad_Opcode },
11340 	 { Bad_Opcode },
11341 	 /* d8 */
11342 	 { Bad_Opcode },
11343 	 { Bad_Opcode },
11344 	 { Bad_Opcode },
11345 	 { Bad_Opcode },
11346 	 { Bad_Opcode },
11347 	 { Bad_Opcode },
11348 	 { Bad_Opcode },
11349 	 { Bad_Opcode },
11350 	 /* e0 */
11351 	 { Bad_Opcode },
11352 	 { Bad_Opcode },
11353 	 { Bad_Opcode },
11354 	 { Bad_Opcode },
11355 	 { Bad_Opcode },
11356 	 { Bad_Opcode },
11357 	 { Bad_Opcode },
11358 	 { Bad_Opcode },
11359 	 /* e8 */
11360 	 { Bad_Opcode },
11361 	 { Bad_Opcode },
11362 	 { Bad_Opcode },
11363 	 { Bad_Opcode },
11364 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_EC) },
11365 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_ED) },
11366 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_EE) },
11367 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_08_EF) },
11368 	 /* f0 */
11369 	 { Bad_Opcode },
11370 	 { Bad_Opcode },
11371 	 { Bad_Opcode },
11372 	 { Bad_Opcode },
11373 	 { Bad_Opcode },
11374 	 { Bad_Opcode },
11375 	 { Bad_Opcode },
11376 	 { Bad_Opcode },
11377 	 /* f8 */
11378 	 { Bad_Opcode },
11379 	 { Bad_Opcode },
11380 	 { Bad_Opcode },
11381 	 { Bad_Opcode },
11382 	 { Bad_Opcode },
11383 	 { Bad_Opcode },
11384 	 { Bad_Opcode },
11385 	 { Bad_Opcode },
11386 	 },
11387 	/* XOP_09 */
11388 	{
11389 	 /* 00 */
11390 	 { Bad_Opcode },
11391 	 { REG_TABLE(REG_XOP_TBM_01) },
11392 	 { REG_TABLE(REG_XOP_TBM_02) },
11393 	 { Bad_Opcode },
11394 	 { Bad_Opcode },
11395 	 { Bad_Opcode },
11396 	 { Bad_Opcode },
11397 	 { Bad_Opcode },
11398 	 /* 08 */
11399 	 { Bad_Opcode },
11400 	 { Bad_Opcode },
11401 	 { Bad_Opcode },
11402 	 { Bad_Opcode },
11403 	 { Bad_Opcode },
11404 	 { Bad_Opcode },
11405 	 { Bad_Opcode },
11406 	 { Bad_Opcode },
11407 	 /* 10 */
11408 	 { Bad_Opcode },
11409 	 { Bad_Opcode },
11410 	 { REG_TABLE(REG_XOP_LWPCB) },
11411 	 { Bad_Opcode },
11412 	 { Bad_Opcode },
11413 	 { Bad_Opcode },
11414 	 { Bad_Opcode },
11415 	 { Bad_Opcode },
11416 	 /* 18 */
11417 	 { Bad_Opcode },
11418 	 { Bad_Opcode },
11419 	 { Bad_Opcode },
11420 	 { Bad_Opcode },
11421 	 { Bad_Opcode },
11422 	 { Bad_Opcode },
11423 	 { Bad_Opcode },
11424 	 { Bad_Opcode },
11425 	 /* 20 */
11426 	 { Bad_Opcode },
11427 	 { Bad_Opcode },
11428 	 { Bad_Opcode },
11429 	 { Bad_Opcode },
11430 	 { Bad_Opcode },
11431 	 { Bad_Opcode },
11432 	 { Bad_Opcode },
11433 	 { Bad_Opcode },
11434 	 /* 28 */
11435 	 { Bad_Opcode },
11436 	 { Bad_Opcode },
11437 	 { Bad_Opcode },
11438 	 { Bad_Opcode },
11439 	 { Bad_Opcode },
11440 	 { Bad_Opcode },
11441 	 { Bad_Opcode },
11442 	 { Bad_Opcode },
11443 	 /* 30 */
11444 	 { Bad_Opcode },
11445 	 { Bad_Opcode },
11446 	 { Bad_Opcode },
11447 	 { Bad_Opcode },
11448 	 { Bad_Opcode },
11449 	 { Bad_Opcode },
11450 	 { Bad_Opcode },
11451 	 { Bad_Opcode },
11452 	 /* 38 */
11453 	 { Bad_Opcode },
11454 	 { Bad_Opcode },
11455 	 { Bad_Opcode },
11456 	 { Bad_Opcode },
11457 	 { Bad_Opcode },
11458 	 { Bad_Opcode },
11459 	 { Bad_Opcode },
11460 	 { Bad_Opcode },
11461 	 /* 40 */
11462 	 { Bad_Opcode },
11463 	 { Bad_Opcode },
11464 	 { Bad_Opcode },
11465 	 { Bad_Opcode },
11466 	 { Bad_Opcode },
11467 	 { Bad_Opcode },
11468 	 { Bad_Opcode },
11469 	 { Bad_Opcode },
11470 	 /* 48 */
11471 	 { Bad_Opcode },
11472 	 { Bad_Opcode },
11473 	 { Bad_Opcode },
11474 	 { Bad_Opcode },
11475 	 { Bad_Opcode },
11476 	 { Bad_Opcode },
11477 	 { Bad_Opcode },
11478 	 { Bad_Opcode },
11479 	 /* 50 */
11480 	 { Bad_Opcode },
11481 	 { Bad_Opcode },
11482 	 { Bad_Opcode },
11483 	 { Bad_Opcode },
11484 	 { Bad_Opcode },
11485 	 { Bad_Opcode },
11486 	 { Bad_Opcode },
11487 	 { Bad_Opcode },
11488 	 /* 58 */
11489 	 { Bad_Opcode },
11490 	 { Bad_Opcode },
11491 	 { Bad_Opcode },
11492 	 { Bad_Opcode },
11493 	 { Bad_Opcode },
11494 	 { Bad_Opcode },
11495 	 { Bad_Opcode },
11496 	 { Bad_Opcode },
11497 	 /* 60 */
11498 	 { Bad_Opcode },
11499 	 { Bad_Opcode },
11500 	 { Bad_Opcode },
11501 	 { Bad_Opcode },
11502 	 { Bad_Opcode },
11503 	 { Bad_Opcode },
11504 	 { Bad_Opcode },
11505 	 { Bad_Opcode },
11506 	 /* 68 */
11507 	 { Bad_Opcode },
11508 	 { Bad_Opcode },
11509 	 { Bad_Opcode },
11510 	 { Bad_Opcode },
11511 	 { Bad_Opcode },
11512 	 { Bad_Opcode },
11513 	 { Bad_Opcode },
11514 	 { Bad_Opcode },
11515 	 /* 70 */
11516 	 { Bad_Opcode },
11517 	 { Bad_Opcode },
11518 	 { Bad_Opcode },
11519 	 { Bad_Opcode },
11520 	 { Bad_Opcode },
11521 	 { Bad_Opcode },
11522 	 { Bad_Opcode },
11523 	 { Bad_Opcode },
11524 	 /* 78 */
11525 	 { Bad_Opcode },
11526 	 { Bad_Opcode },
11527 	 { Bad_Opcode },
11528 	 { Bad_Opcode },
11529 	 { Bad_Opcode },
11530 	 { Bad_Opcode },
11531 	 { Bad_Opcode },
11532 	 { Bad_Opcode },
11533 	 /* 80 */
11534 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_09_80) },
11535 	 { VEX_LEN_TABLE(VEX_LEN_0FXOP_09_81) },
11536 	 { "vfrczss", { XM, EXd }, 0 },
11537 	 { "vfrczsd", { XM, EXq }, 0 },
11538 	 { Bad_Opcode },
11539 	 { Bad_Opcode },
11540 	 { Bad_Opcode },
11541 	 { Bad_Opcode },
11542 	 /* 88 */
11543 	 { Bad_Opcode },
11544 	 { Bad_Opcode },
11545 	 { Bad_Opcode },
11546 	 { Bad_Opcode },
11547 	 { Bad_Opcode },
11548 	 { Bad_Opcode },
11549 	 { Bad_Opcode },
11550 	 { Bad_Opcode },
11551 	 /* 90 */
11552 	 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11553 	 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11554 	 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11555 	 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11556 	 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11557 	 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11558 	 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11559 	 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11560 	 /* 98 */
11561 	 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11562 	 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11563 	 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11564 	 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
11565 	 { Bad_Opcode },
11566 	 { Bad_Opcode },
11567 	 { Bad_Opcode },
11568 	 { Bad_Opcode },
11569 	 /* a0 */
11570 	 { Bad_Opcode },
11571 	 { Bad_Opcode },
11572 	 { Bad_Opcode },
11573 	 { Bad_Opcode },
11574 	 { Bad_Opcode },
11575 	 { Bad_Opcode },
11576 	 { Bad_Opcode },
11577 	 { Bad_Opcode },
11578 	 /* a8 */
11579 	 { Bad_Opcode },
11580 	 { Bad_Opcode },
11581 	 { Bad_Opcode },
11582 	 { Bad_Opcode },
11583 	 { Bad_Opcode },
11584 	 { Bad_Opcode },
11585 	 { Bad_Opcode },
11586 	 { Bad_Opcode },
11587 	 /* b0 */
11588 	 { Bad_Opcode },
11589 	 { Bad_Opcode },
11590 	 { Bad_Opcode },
11591 	 { Bad_Opcode },
11592 	 { Bad_Opcode },
11593 	 { Bad_Opcode },
11594 	 { Bad_Opcode },
11595 	 { Bad_Opcode },
11596 	 /* b8 */
11597 	 { Bad_Opcode },
11598 	 { Bad_Opcode },
11599 	 { Bad_Opcode },
11600 	 { Bad_Opcode },
11601 	 { Bad_Opcode },
11602 	 { Bad_Opcode },
11603 	 { Bad_Opcode },
11604 	 { Bad_Opcode },
11605 	 /* c0 */
11606 	 { Bad_Opcode },
11607 	 { "vphaddbw", { XM, EXxmm }, 0 },
11608 	 { "vphaddbd", { XM, EXxmm }, 0 },
11609 	 { "vphaddbq", { XM, EXxmm }, 0 },
11610 	 { Bad_Opcode },
11611 	 { Bad_Opcode },
11612 	 { "vphaddwd", { XM, EXxmm }, 0 },
11613 	 { "vphaddwq", { XM, EXxmm }, 0 },
11614 	 /* c8 */
11615 	 { Bad_Opcode },
11616 	 { Bad_Opcode },
11617 	 { Bad_Opcode },
11618 	 { "vphadddq", { XM, EXxmm }, 0 },
11619 	 { Bad_Opcode },
11620 	 { Bad_Opcode },
11621 	 { Bad_Opcode },
11622 	 { Bad_Opcode },
11623 	 /* d0 */
11624 	 { Bad_Opcode },
11625 	 { "vphaddubw", { XM, EXxmm }, 0 },
11626 	 { "vphaddubd", { XM, EXxmm }, 0 },
11627 	 { "vphaddubq", { XM, EXxmm }, 0 },
11628 	 { Bad_Opcode },
11629 	 { Bad_Opcode },
11630 	 { "vphadduwd", { XM, EXxmm }, 0 },
11631 	 { "vphadduwq", { XM, EXxmm }, 0 },
11632 	 /* d8 */
11633 	 { Bad_Opcode },
11634 	 { Bad_Opcode },
11635 	 { Bad_Opcode },
11636 	 { "vphaddudq", { XM, EXxmm }, 0 },
11637 	 { Bad_Opcode },
11638 	 { Bad_Opcode },
11639 	 { Bad_Opcode },
11640 	 { Bad_Opcode },
11641 	 /* e0 */
11642 	 { Bad_Opcode },
11643 	 { "vphsubbw", { XM, EXxmm }, 0 },
11644 	 { "vphsubwd", { XM, EXxmm }, 0 },
11645 	 { "vphsubdq", { XM, EXxmm }, 0 },
11646 	 { Bad_Opcode },
11647 	 { Bad_Opcode },
11648 	 { Bad_Opcode },
11649 	 { Bad_Opcode },
11650 	 /* e8 */
11651 	 { Bad_Opcode },
11652 	 { Bad_Opcode },
11653 	 { Bad_Opcode },
11654 	 { Bad_Opcode },
11655 	 { Bad_Opcode },
11656 	 { Bad_Opcode },
11657 	 { Bad_Opcode },
11658 	 { Bad_Opcode },
11659 	 /* f0 */
11660 	 { Bad_Opcode },
11661 	 { Bad_Opcode },
11662 	 { Bad_Opcode },
11663 	 { Bad_Opcode },
11664 	 { Bad_Opcode },
11665 	 { Bad_Opcode },
11666 	 { Bad_Opcode },
11667 	 { Bad_Opcode },
11668 	 /* f8 */
11669 	 { Bad_Opcode },
11670 	 { Bad_Opcode },
11671 	 { Bad_Opcode },
11672 	 { Bad_Opcode },
11673 	 { Bad_Opcode },
11674 	 { Bad_Opcode },
11675 	 { Bad_Opcode },
11676 	 { Bad_Opcode },
11677 	 },
11678 	/* XOP_0A */
11679 	{
11680 	 /* 00 */
11681 	 { Bad_Opcode },
11682 	 { Bad_Opcode },
11683 	 { Bad_Opcode },
11684 	 { Bad_Opcode },
11685 	 { Bad_Opcode },
11686 	 { Bad_Opcode },
11687 	 { Bad_Opcode },
11688 	 { Bad_Opcode },
11689 	 /* 08 */
11690 	 { Bad_Opcode },
11691 	 { Bad_Opcode },
11692 	 { Bad_Opcode },
11693 	 { Bad_Opcode },
11694 	 { Bad_Opcode },
11695 	 { Bad_Opcode },
11696 	 { Bad_Opcode },
11697 	 { Bad_Opcode },
11698 	 /* 10 */
11699 	 { "bextr", { Gv, Ev, Iq }, 0 },
11700 	 { Bad_Opcode },
11701 	 { REG_TABLE(REG_XOP_LWP) },
11702 	 { Bad_Opcode },
11703 	 { Bad_Opcode },
11704 	 { Bad_Opcode },
11705 	 { Bad_Opcode },
11706 	 { Bad_Opcode },
11707 	 /* 18 */
11708 	 { Bad_Opcode },
11709 	 { Bad_Opcode },
11710 	 { Bad_Opcode },
11711 	 { Bad_Opcode },
11712 	 { Bad_Opcode },
11713 	 { Bad_Opcode },
11714 	 { Bad_Opcode },
11715 	 { Bad_Opcode },
11716 	 /* 20 */
11717 	 { Bad_Opcode },
11718 	 { Bad_Opcode },
11719 	 { Bad_Opcode },
11720 	 { Bad_Opcode },
11721 	 { Bad_Opcode },
11722 	 { Bad_Opcode },
11723 	 { Bad_Opcode },
11724 	 { Bad_Opcode },
11725 	 /* 28 */
11726 	 { Bad_Opcode },
11727 	 { Bad_Opcode },
11728 	 { Bad_Opcode },
11729 	 { Bad_Opcode },
11730 	 { Bad_Opcode },
11731 	 { Bad_Opcode },
11732 	 { Bad_Opcode },
11733 	 { Bad_Opcode },
11734 	 /* 30 */
11735 	 { Bad_Opcode },
11736 	 { Bad_Opcode },
11737 	 { Bad_Opcode },
11738 	 { Bad_Opcode },
11739 	 { Bad_Opcode },
11740 	 { Bad_Opcode },
11741 	 { Bad_Opcode },
11742 	 { Bad_Opcode },
11743 	 /* 38 */
11744 	 { Bad_Opcode },
11745 	 { Bad_Opcode },
11746 	 { Bad_Opcode },
11747 	 { Bad_Opcode },
11748 	 { Bad_Opcode },
11749 	 { Bad_Opcode },
11750 	 { Bad_Opcode },
11751 	 { Bad_Opcode },
11752 	 /* 40 */
11753 	 { Bad_Opcode },
11754 	 { Bad_Opcode },
11755 	 { Bad_Opcode },
11756 	 { Bad_Opcode },
11757 	 { Bad_Opcode },
11758 	 { Bad_Opcode },
11759 	 { Bad_Opcode },
11760 	 { Bad_Opcode },
11761 	 /* 48 */
11762 	 { Bad_Opcode },
11763 	 { Bad_Opcode },
11764 	 { Bad_Opcode },
11765 	 { Bad_Opcode },
11766 	 { Bad_Opcode },
11767 	 { Bad_Opcode },
11768 	 { Bad_Opcode },
11769 	 { Bad_Opcode },
11770 	 /* 50 */
11771 	 { Bad_Opcode },
11772 	 { Bad_Opcode },
11773 	 { Bad_Opcode },
11774 	 { Bad_Opcode },
11775 	 { Bad_Opcode },
11776 	 { Bad_Opcode },
11777 	 { Bad_Opcode },
11778 	 { Bad_Opcode },
11779 	 /* 58 */
11780 	 { Bad_Opcode },
11781 	 { Bad_Opcode },
11782 	 { Bad_Opcode },
11783 	 { Bad_Opcode },
11784 	 { Bad_Opcode },
11785 	 { Bad_Opcode },
11786 	 { Bad_Opcode },
11787 	 { Bad_Opcode },
11788 	 /* 60 */
11789 	 { Bad_Opcode },
11790 	 { Bad_Opcode },
11791 	 { Bad_Opcode },
11792 	 { Bad_Opcode },
11793 	 { Bad_Opcode },
11794 	 { Bad_Opcode },
11795 	 { Bad_Opcode },
11796 	 { Bad_Opcode },
11797 	 /* 68 */
11798 	 { Bad_Opcode },
11799 	 { Bad_Opcode },
11800 	 { Bad_Opcode },
11801 	 { Bad_Opcode },
11802 	 { Bad_Opcode },
11803 	 { Bad_Opcode },
11804 	 { Bad_Opcode },
11805 	 { Bad_Opcode },
11806 	 /* 70 */
11807 	 { Bad_Opcode },
11808 	 { Bad_Opcode },
11809 	 { Bad_Opcode },
11810 	 { Bad_Opcode },
11811 	 { Bad_Opcode },
11812 	 { Bad_Opcode },
11813 	 { Bad_Opcode },
11814 	 { Bad_Opcode },
11815 	 /* 78 */
11816 	 { Bad_Opcode },
11817 	 { Bad_Opcode },
11818 	 { Bad_Opcode },
11819 	 { Bad_Opcode },
11820 	 { Bad_Opcode },
11821 	 { Bad_Opcode },
11822 	 { Bad_Opcode },
11823 	 { Bad_Opcode },
11824 	 /* 80 */
11825 	 { Bad_Opcode },
11826 	 { Bad_Opcode },
11827 	 { Bad_Opcode },
11828 	 { Bad_Opcode },
11829 	 { Bad_Opcode },
11830 	 { Bad_Opcode },
11831 	 { Bad_Opcode },
11832 	 { Bad_Opcode },
11833 	 /* 88 */
11834 	 { Bad_Opcode },
11835 	 { Bad_Opcode },
11836 	 { Bad_Opcode },
11837 	 { Bad_Opcode },
11838 	 { Bad_Opcode },
11839 	 { Bad_Opcode },
11840 	 { Bad_Opcode },
11841 	 { Bad_Opcode },
11842 	 /* 90 */
11843 	 { Bad_Opcode },
11844 	 { Bad_Opcode },
11845 	 { Bad_Opcode },
11846 	 { Bad_Opcode },
11847 	 { Bad_Opcode },
11848 	 { Bad_Opcode },
11849 	 { Bad_Opcode },
11850 	 { Bad_Opcode },
11851 	 /* 98 */
11852 	 { Bad_Opcode },
11853 	 { Bad_Opcode },
11854 	 { Bad_Opcode },
11855 	 { Bad_Opcode },
11856 	 { Bad_Opcode },
11857 	 { Bad_Opcode },
11858 	 { Bad_Opcode },
11859 	 { Bad_Opcode },
11860 	 /* a0 */
11861 	 { Bad_Opcode },
11862 	 { Bad_Opcode },
11863 	 { Bad_Opcode },
11864 	 { Bad_Opcode },
11865 	 { Bad_Opcode },
11866 	 { Bad_Opcode },
11867 	 { Bad_Opcode },
11868 	 { Bad_Opcode },
11869 	 /* a8 */
11870 	 { Bad_Opcode },
11871 	 { Bad_Opcode },
11872 	 { Bad_Opcode },
11873 	 { Bad_Opcode },
11874 	 { Bad_Opcode },
11875 	 { Bad_Opcode },
11876 	 { Bad_Opcode },
11877 	 { Bad_Opcode },
11878 	 /* b0 */
11879 	 { Bad_Opcode },
11880 	 { Bad_Opcode },
11881 	 { Bad_Opcode },
11882 	 { Bad_Opcode },
11883 	 { Bad_Opcode },
11884 	 { Bad_Opcode },
11885 	 { Bad_Opcode },
11886 	 { Bad_Opcode },
11887 	 /* b8 */
11888 	 { Bad_Opcode },
11889 	 { Bad_Opcode },
11890 	 { Bad_Opcode },
11891 	 { Bad_Opcode },
11892 	 { Bad_Opcode },
11893 	 { Bad_Opcode },
11894 	 { Bad_Opcode },
11895 	 { Bad_Opcode },
11896 	 /* c0 */
11897 	 { Bad_Opcode },
11898 	 { Bad_Opcode },
11899 	 { Bad_Opcode },
11900 	 { Bad_Opcode },
11901 	 { Bad_Opcode },
11902 	 { Bad_Opcode },
11903 	 { Bad_Opcode },
11904 	 { Bad_Opcode },
11905 	 /* c8 */
11906 	 { Bad_Opcode },
11907 	 { Bad_Opcode },
11908 	 { Bad_Opcode },
11909 	 { Bad_Opcode },
11910 	 { Bad_Opcode },
11911 	 { Bad_Opcode },
11912 	 { Bad_Opcode },
11913 	 { Bad_Opcode },
11914 	 /* d0 */
11915 	 { Bad_Opcode },
11916 	 { Bad_Opcode },
11917 	 { Bad_Opcode },
11918 	 { Bad_Opcode },
11919 	 { Bad_Opcode },
11920 	 { Bad_Opcode },
11921 	 { Bad_Opcode },
11922 	 { Bad_Opcode },
11923 	 /* d8 */
11924 	 { Bad_Opcode },
11925 	 { Bad_Opcode },
11926 	 { Bad_Opcode },
11927 	 { Bad_Opcode },
11928 	 { Bad_Opcode },
11929 	 { Bad_Opcode },
11930 	 { Bad_Opcode },
11931 	 { Bad_Opcode },
11932 	 /* e0 */
11933 	 { Bad_Opcode },
11934 	 { Bad_Opcode },
11935 	 { Bad_Opcode },
11936 	 { Bad_Opcode },
11937 	 { Bad_Opcode },
11938 	 { Bad_Opcode },
11939 	 { Bad_Opcode },
11940 	 { Bad_Opcode },
11941 	 /* e8 */
11942 	 { Bad_Opcode },
11943 	 { Bad_Opcode },
11944 	 { Bad_Opcode },
11945 	 { Bad_Opcode },
11946 	 { Bad_Opcode },
11947 	 { Bad_Opcode },
11948 	 { Bad_Opcode },
11949 	 { Bad_Opcode },
11950 	 /* f0 */
11951 	 { Bad_Opcode },
11952 	 { Bad_Opcode },
11953 	 { Bad_Opcode },
11954 	 { Bad_Opcode },
11955 	 { Bad_Opcode },
11956 	 { Bad_Opcode },
11957 	 { Bad_Opcode },
11958 	 { Bad_Opcode },
11959 	 /* f8 */
11960 	 { Bad_Opcode },
11961 	 { Bad_Opcode },
11962 	 { Bad_Opcode },
11963 	 { Bad_Opcode },
11964 	 { Bad_Opcode },
11965 	 { Bad_Opcode },
11966 	 { Bad_Opcode },
11967 	 { Bad_Opcode },
11968 	 },
11969 };
11970 
11971 static const struct dis386 vex_table[][256] = {
11972 	/* VEX_0F */
11973 	{
11974 	 /* 00 */
11975 	 { Bad_Opcode },
11976 	 { Bad_Opcode },
11977 	 { Bad_Opcode },
11978 	 { Bad_Opcode },
11979 	 { Bad_Opcode },
11980 	 { Bad_Opcode },
11981 	 { Bad_Opcode },
11982 	 { Bad_Opcode },
11983 	 /* 08 */
11984 	 { Bad_Opcode },
11985 	 { Bad_Opcode },
11986 	 { Bad_Opcode },
11987 	 { Bad_Opcode },
11988 	 { Bad_Opcode },
11989 	 { Bad_Opcode },
11990 	 { Bad_Opcode },
11991 	 { Bad_Opcode },
11992 	 /* 10 */
11993 	 { PREFIX_TABLE(PREFIX_VEX_0F10) },
11994 	 { PREFIX_TABLE(PREFIX_VEX_0F11) },
11995 	 { PREFIX_TABLE(PREFIX_VEX_0F12) },
11996 	 { MOD_TABLE(MOD_VEX_0F13) },
11997 	 { VEX_W_TABLE(VEX_W_0F14) },
11998 	 { VEX_W_TABLE(VEX_W_0F15) },
11999 	 { PREFIX_TABLE(PREFIX_VEX_0F16) },
12000 	 { MOD_TABLE(MOD_VEX_0F17) },
12001 	 /* 18 */
12002 	 { Bad_Opcode },
12003 	 { Bad_Opcode },
12004 	 { Bad_Opcode },
12005 	 { Bad_Opcode },
12006 	 { Bad_Opcode },
12007 	 { Bad_Opcode },
12008 	 { Bad_Opcode },
12009 	 { Bad_Opcode },
12010 	 /* 20 */
12011 	 { Bad_Opcode },
12012 	 { Bad_Opcode },
12013 	 { Bad_Opcode },
12014 	 { Bad_Opcode },
12015 	 { Bad_Opcode },
12016 	 { Bad_Opcode },
12017 	 { Bad_Opcode },
12018 	 { Bad_Opcode },
12019 	 /* 28 */
12020 	 { VEX_W_TABLE(VEX_W_0F28) },
12021 	 { VEX_W_TABLE(VEX_W_0F29) },
12022 	 { PREFIX_TABLE(PREFIX_VEX_0F2A) },
12023 	 { MOD_TABLE(MOD_VEX_0F2B) },
12024 	 { PREFIX_TABLE(PREFIX_VEX_0F2C) },
12025 	 { PREFIX_TABLE(PREFIX_VEX_0F2D) },
12026 	 { PREFIX_TABLE(PREFIX_VEX_0F2E) },
12027 	 { PREFIX_TABLE(PREFIX_VEX_0F2F) },
12028 	 /* 30 */
12029 	 { Bad_Opcode },
12030 	 { Bad_Opcode },
12031 	 { Bad_Opcode },
12032 	 { Bad_Opcode },
12033 	 { Bad_Opcode },
12034 	 { Bad_Opcode },
12035 	 { Bad_Opcode },
12036 	 { Bad_Opcode },
12037 	 /* 38 */
12038 	 { Bad_Opcode },
12039 	 { Bad_Opcode },
12040 	 { Bad_Opcode },
12041 	 { Bad_Opcode },
12042 	 { Bad_Opcode },
12043 	 { Bad_Opcode },
12044 	 { Bad_Opcode },
12045 	 { Bad_Opcode },
12046 	 /* 40 */
12047 	 { Bad_Opcode },
12048 	 { PREFIX_TABLE(PREFIX_VEX_0F41) },
12049 	 { PREFIX_TABLE(PREFIX_VEX_0F42) },
12050 	 { Bad_Opcode },
12051 	 { PREFIX_TABLE(PREFIX_VEX_0F44) },
12052 	 { PREFIX_TABLE(PREFIX_VEX_0F45) },
12053 	 { PREFIX_TABLE(PREFIX_VEX_0F46) },
12054 	 { PREFIX_TABLE(PREFIX_VEX_0F47) },
12055 	 /* 48 */
12056 	 { Bad_Opcode },
12057 	 { Bad_Opcode },
12058 	 { PREFIX_TABLE(PREFIX_VEX_0F4A) },
12059 	 { PREFIX_TABLE(PREFIX_VEX_0F4B) },
12060 	 { Bad_Opcode },
12061 	 { Bad_Opcode },
12062 	 { Bad_Opcode },
12063 	 { Bad_Opcode },
12064 	 /* 50 */
12065 	 { MOD_TABLE(MOD_VEX_0F50) },
12066 	 { PREFIX_TABLE(PREFIX_VEX_0F51) },
12067 	 { PREFIX_TABLE(PREFIX_VEX_0F52) },
12068 	 { PREFIX_TABLE(PREFIX_VEX_0F53) },
12069 	 { "vandpX", { XM, Vex, EXx }, 0 },
12070 	 { "vandnpX", { XM, Vex, EXx }, 0 },
12071 	 { "vorpX", { XM, Vex, EXx }, 0 },
12072 	 { "vxorpX", { XM, Vex, EXx }, 0 },
12073 	 /* 58 */
12074 	 { PREFIX_TABLE(PREFIX_VEX_0F58) },
12075 	 { PREFIX_TABLE(PREFIX_VEX_0F59) },
12076 	 { PREFIX_TABLE(PREFIX_VEX_0F5A) },
12077 	 { PREFIX_TABLE(PREFIX_VEX_0F5B) },
12078 	 { PREFIX_TABLE(PREFIX_VEX_0F5C) },
12079 	 { PREFIX_TABLE(PREFIX_VEX_0F5D) },
12080 	 { PREFIX_TABLE(PREFIX_VEX_0F5E) },
12081 	 { PREFIX_TABLE(PREFIX_VEX_0F5F) },
12082 	 /* 60 */
12083 	 { PREFIX_TABLE(PREFIX_VEX_0F60) },
12084 	 { PREFIX_TABLE(PREFIX_VEX_0F61) },
12085 	 { PREFIX_TABLE(PREFIX_VEX_0F62) },
12086 	 { PREFIX_TABLE(PREFIX_VEX_0F63) },
12087 	 { PREFIX_TABLE(PREFIX_VEX_0F64) },
12088 	 { PREFIX_TABLE(PREFIX_VEX_0F65) },
12089 	 { PREFIX_TABLE(PREFIX_VEX_0F66) },
12090 	 { PREFIX_TABLE(PREFIX_VEX_0F67) },
12091 	 /* 68 */
12092 	 { PREFIX_TABLE(PREFIX_VEX_0F68) },
12093 	 { PREFIX_TABLE(PREFIX_VEX_0F69) },
12094 	 { PREFIX_TABLE(PREFIX_VEX_0F6A) },
12095 	 { PREFIX_TABLE(PREFIX_VEX_0F6B) },
12096 	 { PREFIX_TABLE(PREFIX_VEX_0F6C) },
12097 	 { PREFIX_TABLE(PREFIX_VEX_0F6D) },
12098 	 { PREFIX_TABLE(PREFIX_VEX_0F6E) },
12099 	 { PREFIX_TABLE(PREFIX_VEX_0F6F) },
12100 	 /* 70 */
12101 	 { PREFIX_TABLE(PREFIX_VEX_0F70) },
12102 	 { REG_TABLE(REG_VEX_0F71) },
12103 	 { REG_TABLE(REG_VEX_0F72) },
12104 	 { REG_TABLE(REG_VEX_0F73) },
12105 	 { PREFIX_TABLE(PREFIX_VEX_0F74) },
12106 	 { PREFIX_TABLE(PREFIX_VEX_0F75) },
12107 	 { PREFIX_TABLE(PREFIX_VEX_0F76) },
12108 	 { PREFIX_TABLE(PREFIX_VEX_0F77) },
12109 	 /* 78 */
12110 	 { Bad_Opcode },
12111 	 { Bad_Opcode },
12112 	 { Bad_Opcode },
12113 	 { Bad_Opcode },
12114 	 { PREFIX_TABLE(PREFIX_VEX_0F7C) },
12115 	 { PREFIX_TABLE(PREFIX_VEX_0F7D) },
12116 	 { PREFIX_TABLE(PREFIX_VEX_0F7E) },
12117 	 { PREFIX_TABLE(PREFIX_VEX_0F7F) },
12118 	 /* 80 */
12119 	 { Bad_Opcode },
12120 	 { Bad_Opcode },
12121 	 { Bad_Opcode },
12122 	 { Bad_Opcode },
12123 	 { Bad_Opcode },
12124 	 { Bad_Opcode },
12125 	 { Bad_Opcode },
12126 	 { Bad_Opcode },
12127 	 /* 88 */
12128 	 { Bad_Opcode },
12129 	 { Bad_Opcode },
12130 	 { Bad_Opcode },
12131 	 { Bad_Opcode },
12132 	 { Bad_Opcode },
12133 	 { Bad_Opcode },
12134 	 { Bad_Opcode },
12135 	 { Bad_Opcode },
12136 	 /* 90 */
12137 	 { PREFIX_TABLE(PREFIX_VEX_0F90) },
12138 	 { PREFIX_TABLE(PREFIX_VEX_0F91) },
12139 	 { PREFIX_TABLE(PREFIX_VEX_0F92) },
12140 	 { PREFIX_TABLE(PREFIX_VEX_0F93) },
12141 	 { Bad_Opcode },
12142 	 { Bad_Opcode },
12143 	 { Bad_Opcode },
12144 	 { Bad_Opcode },
12145 	 /* 98 */
12146 	 { PREFIX_TABLE(PREFIX_VEX_0F98) },
12147 	 { PREFIX_TABLE(PREFIX_VEX_0F99) },
12148 	 { Bad_Opcode },
12149 	 { Bad_Opcode },
12150 	 { Bad_Opcode },
12151 	 { Bad_Opcode },
12152 	 { Bad_Opcode },
12153 	 { Bad_Opcode },
12154 	 /* a0 */
12155 	 { Bad_Opcode },
12156 	 { Bad_Opcode },
12157 	 { Bad_Opcode },
12158 	 { Bad_Opcode },
12159 	 { Bad_Opcode },
12160 	 { Bad_Opcode },
12161 	 { Bad_Opcode },
12162 	 { Bad_Opcode },
12163 	 /* a8 */
12164 	 { Bad_Opcode },
12165 	 { Bad_Opcode },
12166 	 { Bad_Opcode },
12167 	 { Bad_Opcode },
12168 	 { Bad_Opcode },
12169 	 { Bad_Opcode },
12170 	 { REG_TABLE(REG_VEX_0FAE) },
12171 	 { Bad_Opcode },
12172 	 /* b0 */
12173 	 { Bad_Opcode },
12174 	 { Bad_Opcode },
12175 	 { Bad_Opcode },
12176 	 { Bad_Opcode },
12177 	 { Bad_Opcode },
12178 	 { Bad_Opcode },
12179 	 { Bad_Opcode },
12180 	 { Bad_Opcode },
12181 	 /* b8 */
12182 	 { Bad_Opcode },
12183 	 { Bad_Opcode },
12184 	 { Bad_Opcode },
12185 	 { Bad_Opcode },
12186 	 { Bad_Opcode },
12187 	 { Bad_Opcode },
12188 	 { Bad_Opcode },
12189 	 { Bad_Opcode },
12190 	 /* c0 */
12191 	 { Bad_Opcode },
12192 	 { Bad_Opcode },
12193 	 { PREFIX_TABLE(PREFIX_VEX_0FC2) },
12194 	 { Bad_Opcode },
12195 	 { PREFIX_TABLE(PREFIX_VEX_0FC4) },
12196 	 { PREFIX_TABLE(PREFIX_VEX_0FC5) },
12197 	 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
12198 	 { Bad_Opcode },
12199 	 /* c8 */
12200 	 { Bad_Opcode },
12201 	 { Bad_Opcode },
12202 	 { Bad_Opcode },
12203 	 { Bad_Opcode },
12204 	 { Bad_Opcode },
12205 	 { Bad_Opcode },
12206 	 { Bad_Opcode },
12207 	 { Bad_Opcode },
12208 	 /* d0 */
12209 	 { PREFIX_TABLE(PREFIX_VEX_0FD0) },
12210 	 { PREFIX_TABLE(PREFIX_VEX_0FD1) },
12211 	 { PREFIX_TABLE(PREFIX_VEX_0FD2) },
12212 	 { PREFIX_TABLE(PREFIX_VEX_0FD3) },
12213 	 { PREFIX_TABLE(PREFIX_VEX_0FD4) },
12214 	 { PREFIX_TABLE(PREFIX_VEX_0FD5) },
12215 	 { PREFIX_TABLE(PREFIX_VEX_0FD6) },
12216 	 { PREFIX_TABLE(PREFIX_VEX_0FD7) },
12217 	 /* d8 */
12218 	 { PREFIX_TABLE(PREFIX_VEX_0FD8) },
12219 	 { PREFIX_TABLE(PREFIX_VEX_0FD9) },
12220 	 { PREFIX_TABLE(PREFIX_VEX_0FDA) },
12221 	 { PREFIX_TABLE(PREFIX_VEX_0FDB) },
12222 	 { PREFIX_TABLE(PREFIX_VEX_0FDC) },
12223 	 { PREFIX_TABLE(PREFIX_VEX_0FDD) },
12224 	 { PREFIX_TABLE(PREFIX_VEX_0FDE) },
12225 	 { PREFIX_TABLE(PREFIX_VEX_0FDF) },
12226 	 /* e0 */
12227 	 { PREFIX_TABLE(PREFIX_VEX_0FE0) },
12228 	 { PREFIX_TABLE(PREFIX_VEX_0FE1) },
12229 	 { PREFIX_TABLE(PREFIX_VEX_0FE2) },
12230 	 { PREFIX_TABLE(PREFIX_VEX_0FE3) },
12231 	 { PREFIX_TABLE(PREFIX_VEX_0FE4) },
12232 	 { PREFIX_TABLE(PREFIX_VEX_0FE5) },
12233 	 { PREFIX_TABLE(PREFIX_VEX_0FE6) },
12234 	 { PREFIX_TABLE(PREFIX_VEX_0FE7) },
12235 	 /* e8 */
12236 	 { PREFIX_TABLE(PREFIX_VEX_0FE8) },
12237 	 { PREFIX_TABLE(PREFIX_VEX_0FE9) },
12238 	 { PREFIX_TABLE(PREFIX_VEX_0FEA) },
12239 	 { PREFIX_TABLE(PREFIX_VEX_0FEB) },
12240 	 { PREFIX_TABLE(PREFIX_VEX_0FEC) },
12241 	 { PREFIX_TABLE(PREFIX_VEX_0FED) },
12242 	 { PREFIX_TABLE(PREFIX_VEX_0FEE) },
12243 	 { PREFIX_TABLE(PREFIX_VEX_0FEF) },
12244 	 /* f0 */
12245 	 { PREFIX_TABLE(PREFIX_VEX_0FF0) },
12246 	 { PREFIX_TABLE(PREFIX_VEX_0FF1) },
12247 	 { PREFIX_TABLE(PREFIX_VEX_0FF2) },
12248 	 { PREFIX_TABLE(PREFIX_VEX_0FF3) },
12249 	 { PREFIX_TABLE(PREFIX_VEX_0FF4) },
12250 	 { PREFIX_TABLE(PREFIX_VEX_0FF5) },
12251 	 { PREFIX_TABLE(PREFIX_VEX_0FF6) },
12252 	 { PREFIX_TABLE(PREFIX_VEX_0FF7) },
12253 	 /* f8 */
12254 	 { PREFIX_TABLE(PREFIX_VEX_0FF8) },
12255 	 { PREFIX_TABLE(PREFIX_VEX_0FF9) },
12256 	 { PREFIX_TABLE(PREFIX_VEX_0FFA) },
12257 	 { PREFIX_TABLE(PREFIX_VEX_0FFB) },
12258 	 { PREFIX_TABLE(PREFIX_VEX_0FFC) },
12259 	 { PREFIX_TABLE(PREFIX_VEX_0FFD) },
12260 	 { PREFIX_TABLE(PREFIX_VEX_0FFE) },
12261 	 { Bad_Opcode },
12262 	 },
12263 	/* VEX_0F38 */
12264 	{
12265 	 /* 00 */
12266 	 { PREFIX_TABLE(PREFIX_VEX_0F3800) },
12267 	 { PREFIX_TABLE(PREFIX_VEX_0F3801) },
12268 	 { PREFIX_TABLE(PREFIX_VEX_0F3802) },
12269 	 { PREFIX_TABLE(PREFIX_VEX_0F3803) },
12270 	 { PREFIX_TABLE(PREFIX_VEX_0F3804) },
12271 	 { PREFIX_TABLE(PREFIX_VEX_0F3805) },
12272 	 { PREFIX_TABLE(PREFIX_VEX_0F3806) },
12273 	 { PREFIX_TABLE(PREFIX_VEX_0F3807) },
12274 	 /* 08 */
12275 	 { PREFIX_TABLE(PREFIX_VEX_0F3808) },
12276 	 { PREFIX_TABLE(PREFIX_VEX_0F3809) },
12277 	 { PREFIX_TABLE(PREFIX_VEX_0F380A) },
12278 	 { PREFIX_TABLE(PREFIX_VEX_0F380B) },
12279 	 { PREFIX_TABLE(PREFIX_VEX_0F380C) },
12280 	 { PREFIX_TABLE(PREFIX_VEX_0F380D) },
12281 	 { PREFIX_TABLE(PREFIX_VEX_0F380E) },
12282 	 { PREFIX_TABLE(PREFIX_VEX_0F380F) },
12283 	 /* 10 */
12284 	 { Bad_Opcode },
12285 	 { Bad_Opcode },
12286 	 { Bad_Opcode },
12287 	 { PREFIX_TABLE(PREFIX_VEX_0F3813) },
12288 	 { Bad_Opcode },
12289 	 { Bad_Opcode },
12290 	 { PREFIX_TABLE(PREFIX_VEX_0F3816) },
12291 	 { PREFIX_TABLE(PREFIX_VEX_0F3817) },
12292 	 /* 18 */
12293 	 { PREFIX_TABLE(PREFIX_VEX_0F3818) },
12294 	 { PREFIX_TABLE(PREFIX_VEX_0F3819) },
12295 	 { PREFIX_TABLE(PREFIX_VEX_0F381A) },
12296 	 { Bad_Opcode },
12297 	 { PREFIX_TABLE(PREFIX_VEX_0F381C) },
12298 	 { PREFIX_TABLE(PREFIX_VEX_0F381D) },
12299 	 { PREFIX_TABLE(PREFIX_VEX_0F381E) },
12300 	 { Bad_Opcode },
12301 	 /* 20 */
12302 	 { PREFIX_TABLE(PREFIX_VEX_0F3820) },
12303 	 { PREFIX_TABLE(PREFIX_VEX_0F3821) },
12304 	 { PREFIX_TABLE(PREFIX_VEX_0F3822) },
12305 	 { PREFIX_TABLE(PREFIX_VEX_0F3823) },
12306 	 { PREFIX_TABLE(PREFIX_VEX_0F3824) },
12307 	 { PREFIX_TABLE(PREFIX_VEX_0F3825) },
12308 	 { Bad_Opcode },
12309 	 { Bad_Opcode },
12310 	 /* 28 */
12311 	 { PREFIX_TABLE(PREFIX_VEX_0F3828) },
12312 	 { PREFIX_TABLE(PREFIX_VEX_0F3829) },
12313 	 { PREFIX_TABLE(PREFIX_VEX_0F382A) },
12314 	 { PREFIX_TABLE(PREFIX_VEX_0F382B) },
12315 	 { PREFIX_TABLE(PREFIX_VEX_0F382C) },
12316 	 { PREFIX_TABLE(PREFIX_VEX_0F382D) },
12317 	 { PREFIX_TABLE(PREFIX_VEX_0F382E) },
12318 	 { PREFIX_TABLE(PREFIX_VEX_0F382F) },
12319 	 /* 30 */
12320 	 { PREFIX_TABLE(PREFIX_VEX_0F3830) },
12321 	 { PREFIX_TABLE(PREFIX_VEX_0F3831) },
12322 	 { PREFIX_TABLE(PREFIX_VEX_0F3832) },
12323 	 { PREFIX_TABLE(PREFIX_VEX_0F3833) },
12324 	 { PREFIX_TABLE(PREFIX_VEX_0F3834) },
12325 	 { PREFIX_TABLE(PREFIX_VEX_0F3835) },
12326 	 { PREFIX_TABLE(PREFIX_VEX_0F3836) },
12327 	 { PREFIX_TABLE(PREFIX_VEX_0F3837) },
12328 	 /* 38 */
12329 	 { PREFIX_TABLE(PREFIX_VEX_0F3838) },
12330 	 { PREFIX_TABLE(PREFIX_VEX_0F3839) },
12331 	 { PREFIX_TABLE(PREFIX_VEX_0F383A) },
12332 	 { PREFIX_TABLE(PREFIX_VEX_0F383B) },
12333 	 { PREFIX_TABLE(PREFIX_VEX_0F383C) },
12334 	 { PREFIX_TABLE(PREFIX_VEX_0F383D) },
12335 	 { PREFIX_TABLE(PREFIX_VEX_0F383E) },
12336 	 { PREFIX_TABLE(PREFIX_VEX_0F383F) },
12337 	 /* 40 */
12338 	 { PREFIX_TABLE(PREFIX_VEX_0F3840) },
12339 	 { PREFIX_TABLE(PREFIX_VEX_0F3841) },
12340 	 { Bad_Opcode },
12341 	 { Bad_Opcode },
12342 	 { Bad_Opcode },
12343 	 { PREFIX_TABLE(PREFIX_VEX_0F3845) },
12344 	 { PREFIX_TABLE(PREFIX_VEX_0F3846) },
12345 	 { PREFIX_TABLE(PREFIX_VEX_0F3847) },
12346 	 /* 48 */
12347 	 { Bad_Opcode },
12348 	 { Bad_Opcode },
12349 	 { Bad_Opcode },
12350 	 { Bad_Opcode },
12351 	 { Bad_Opcode },
12352 	 { Bad_Opcode },
12353 	 { Bad_Opcode },
12354 	 { Bad_Opcode },
12355 	 /* 50 */
12356 	 { Bad_Opcode },
12357 	 { Bad_Opcode },
12358 	 { Bad_Opcode },
12359 	 { Bad_Opcode },
12360 	 { Bad_Opcode },
12361 	 { Bad_Opcode },
12362 	 { Bad_Opcode },
12363 	 { Bad_Opcode },
12364 	 /* 58 */
12365 	 { PREFIX_TABLE(PREFIX_VEX_0F3858) },
12366 	 { PREFIX_TABLE(PREFIX_VEX_0F3859) },
12367 	 { PREFIX_TABLE(PREFIX_VEX_0F385A) },
12368 	 { Bad_Opcode },
12369 	 { Bad_Opcode },
12370 	 { Bad_Opcode },
12371 	 { Bad_Opcode },
12372 	 { Bad_Opcode },
12373 	 /* 60 */
12374 	 { Bad_Opcode },
12375 	 { Bad_Opcode },
12376 	 { Bad_Opcode },
12377 	 { Bad_Opcode },
12378 	 { Bad_Opcode },
12379 	 { Bad_Opcode },
12380 	 { Bad_Opcode },
12381 	 { Bad_Opcode },
12382 	 /* 68 */
12383 	 { Bad_Opcode },
12384 	 { Bad_Opcode },
12385 	 { Bad_Opcode },
12386 	 { Bad_Opcode },
12387 	 { Bad_Opcode },
12388 	 { Bad_Opcode },
12389 	 { Bad_Opcode },
12390 	 { Bad_Opcode },
12391 	 /* 70 */
12392 	 { Bad_Opcode },
12393 	 { Bad_Opcode },
12394 	 { Bad_Opcode },
12395 	 { Bad_Opcode },
12396 	 { Bad_Opcode },
12397 	 { Bad_Opcode },
12398 	 { Bad_Opcode },
12399 	 { Bad_Opcode },
12400 	 /* 78 */
12401 	 { PREFIX_TABLE(PREFIX_VEX_0F3878) },
12402 	 { PREFIX_TABLE(PREFIX_VEX_0F3879) },
12403 	 { Bad_Opcode },
12404 	 { Bad_Opcode },
12405 	 { Bad_Opcode },
12406 	 { Bad_Opcode },
12407 	 { Bad_Opcode },
12408 	 { Bad_Opcode },
12409 	 /* 80 */
12410 	 { Bad_Opcode },
12411 	 { Bad_Opcode },
12412 	 { Bad_Opcode },
12413 	 { Bad_Opcode },
12414 	 { Bad_Opcode },
12415 	 { Bad_Opcode },
12416 	 { Bad_Opcode },
12417 	 { Bad_Opcode },
12418 	 /* 88 */
12419 	 { Bad_Opcode },
12420 	 { Bad_Opcode },
12421 	 { Bad_Opcode },
12422 	 { Bad_Opcode },
12423 	 { PREFIX_TABLE(PREFIX_VEX_0F388C) },
12424 	 { Bad_Opcode },
12425 	 { PREFIX_TABLE(PREFIX_VEX_0F388E) },
12426 	 { Bad_Opcode },
12427 	 /* 90 */
12428 	 { PREFIX_TABLE(PREFIX_VEX_0F3890) },
12429 	 { PREFIX_TABLE(PREFIX_VEX_0F3891) },
12430 	 { PREFIX_TABLE(PREFIX_VEX_0F3892) },
12431 	 { PREFIX_TABLE(PREFIX_VEX_0F3893) },
12432 	 { Bad_Opcode },
12433 	 { Bad_Opcode },
12434 	 { PREFIX_TABLE(PREFIX_VEX_0F3896) },
12435 	 { PREFIX_TABLE(PREFIX_VEX_0F3897) },
12436 	 /* 98 */
12437 	 { PREFIX_TABLE(PREFIX_VEX_0F3898) },
12438 	 { PREFIX_TABLE(PREFIX_VEX_0F3899) },
12439 	 { PREFIX_TABLE(PREFIX_VEX_0F389A) },
12440 	 { PREFIX_TABLE(PREFIX_VEX_0F389B) },
12441 	 { PREFIX_TABLE(PREFIX_VEX_0F389C) },
12442 	 { PREFIX_TABLE(PREFIX_VEX_0F389D) },
12443 	 { PREFIX_TABLE(PREFIX_VEX_0F389E) },
12444 	 { PREFIX_TABLE(PREFIX_VEX_0F389F) },
12445 	 /* a0 */
12446 	 { Bad_Opcode },
12447 	 { Bad_Opcode },
12448 	 { Bad_Opcode },
12449 	 { Bad_Opcode },
12450 	 { Bad_Opcode },
12451 	 { Bad_Opcode },
12452 	 { PREFIX_TABLE(PREFIX_VEX_0F38A6) },
12453 	 { PREFIX_TABLE(PREFIX_VEX_0F38A7) },
12454 	 /* a8 */
12455 	 { PREFIX_TABLE(PREFIX_VEX_0F38A8) },
12456 	 { PREFIX_TABLE(PREFIX_VEX_0F38A9) },
12457 	 { PREFIX_TABLE(PREFIX_VEX_0F38AA) },
12458 	 { PREFIX_TABLE(PREFIX_VEX_0F38AB) },
12459 	 { PREFIX_TABLE(PREFIX_VEX_0F38AC) },
12460 	 { PREFIX_TABLE(PREFIX_VEX_0F38AD) },
12461 	 { PREFIX_TABLE(PREFIX_VEX_0F38AE) },
12462 	 { PREFIX_TABLE(PREFIX_VEX_0F38AF) },
12463 	 /* b0 */
12464 	 { Bad_Opcode },
12465 	 { Bad_Opcode },
12466 	 { Bad_Opcode },
12467 	 { Bad_Opcode },
12468 	 { Bad_Opcode },
12469 	 { Bad_Opcode },
12470 	 { PREFIX_TABLE(PREFIX_VEX_0F38B6) },
12471 	 { PREFIX_TABLE(PREFIX_VEX_0F38B7) },
12472 	 /* b8 */
12473 	 { PREFIX_TABLE(PREFIX_VEX_0F38B8) },
12474 	 { PREFIX_TABLE(PREFIX_VEX_0F38B9) },
12475 	 { PREFIX_TABLE(PREFIX_VEX_0F38BA) },
12476 	 { PREFIX_TABLE(PREFIX_VEX_0F38BB) },
12477 	 { PREFIX_TABLE(PREFIX_VEX_0F38BC) },
12478 	 { PREFIX_TABLE(PREFIX_VEX_0F38BD) },
12479 	 { PREFIX_TABLE(PREFIX_VEX_0F38BE) },
12480 	 { PREFIX_TABLE(PREFIX_VEX_0F38BF) },
12481 	 /* c0 */
12482 	 { Bad_Opcode },
12483 	 { Bad_Opcode },
12484 	 { Bad_Opcode },
12485 	 { Bad_Opcode },
12486 	 { Bad_Opcode },
12487 	 { Bad_Opcode },
12488 	 { Bad_Opcode },
12489 	 { Bad_Opcode },
12490 	 /* c8 */
12491 	 { Bad_Opcode },
12492 	 { Bad_Opcode },
12493 	 { Bad_Opcode },
12494 	 { Bad_Opcode },
12495 	 { Bad_Opcode },
12496 	 { Bad_Opcode },
12497 	 { Bad_Opcode },
12498 	 { Bad_Opcode },
12499 	 /* d0 */
12500 	 { Bad_Opcode },
12501 	 { Bad_Opcode },
12502 	 { Bad_Opcode },
12503 	 { Bad_Opcode },
12504 	 { Bad_Opcode },
12505 	 { Bad_Opcode },
12506 	 { Bad_Opcode },
12507 	 { Bad_Opcode },
12508 	 /* d8 */
12509 	 { Bad_Opcode },
12510 	 { Bad_Opcode },
12511 	 { Bad_Opcode },
12512 	 { PREFIX_TABLE(PREFIX_VEX_0F38DB) },
12513 	 { PREFIX_TABLE(PREFIX_VEX_0F38DC) },
12514 	 { PREFIX_TABLE(PREFIX_VEX_0F38DD) },
12515 	 { PREFIX_TABLE(PREFIX_VEX_0F38DE) },
12516 	 { PREFIX_TABLE(PREFIX_VEX_0F38DF) },
12517 	 /* e0 */
12518 	 { Bad_Opcode },
12519 	 { Bad_Opcode },
12520 	 { Bad_Opcode },
12521 	 { Bad_Opcode },
12522 	 { Bad_Opcode },
12523 	 { Bad_Opcode },
12524 	 { Bad_Opcode },
12525 	 { Bad_Opcode },
12526 	 /* e8 */
12527 	 { Bad_Opcode },
12528 	 { Bad_Opcode },
12529 	 { Bad_Opcode },
12530 	 { Bad_Opcode },
12531 	 { Bad_Opcode },
12532 	 { Bad_Opcode },
12533 	 { Bad_Opcode },
12534 	 { Bad_Opcode },
12535 	 /* f0 */
12536 	 { Bad_Opcode },
12537 	 { Bad_Opcode },
12538 	 { PREFIX_TABLE(PREFIX_VEX_0F38F2) },
12539 	 { REG_TABLE(REG_VEX_0F38F3) },
12540 	 { Bad_Opcode },
12541 	 { PREFIX_TABLE(PREFIX_VEX_0F38F5) },
12542 	 { PREFIX_TABLE(PREFIX_VEX_0F38F6) },
12543 	 { PREFIX_TABLE(PREFIX_VEX_0F38F7) },
12544 	 /* f8 */
12545 	 { Bad_Opcode },
12546 	 { Bad_Opcode },
12547 	 { Bad_Opcode },
12548 	 { Bad_Opcode },
12549 	 { Bad_Opcode },
12550 	 { Bad_Opcode },
12551 	 { Bad_Opcode },
12552 	 { Bad_Opcode },
12553 	 },
12554 	/* VEX_0F3A */
12555 	{
12556 	 /* 00 */
12557 	 { PREFIX_TABLE(PREFIX_VEX_0F3A00) },
12558 	 { PREFIX_TABLE(PREFIX_VEX_0F3A01) },
12559 	 { PREFIX_TABLE(PREFIX_VEX_0F3A02) },
12560 	 { Bad_Opcode },
12561 	 { PREFIX_TABLE(PREFIX_VEX_0F3A04) },
12562 	 { PREFIX_TABLE(PREFIX_VEX_0F3A05) },
12563 	 { PREFIX_TABLE(PREFIX_VEX_0F3A06) },
12564 	 { Bad_Opcode },
12565 	 /* 08 */
12566 	 { PREFIX_TABLE(PREFIX_VEX_0F3A08) },
12567 	 { PREFIX_TABLE(PREFIX_VEX_0F3A09) },
12568 	 { PREFIX_TABLE(PREFIX_VEX_0F3A0A) },
12569 	 { PREFIX_TABLE(PREFIX_VEX_0F3A0B) },
12570 	 { PREFIX_TABLE(PREFIX_VEX_0F3A0C) },
12571 	 { PREFIX_TABLE(PREFIX_VEX_0F3A0D) },
12572 	 { PREFIX_TABLE(PREFIX_VEX_0F3A0E) },
12573 	 { PREFIX_TABLE(PREFIX_VEX_0F3A0F) },
12574 	 /* 10 */
12575 	 { Bad_Opcode },
12576 	 { Bad_Opcode },
12577 	 { Bad_Opcode },
12578 	 { Bad_Opcode },
12579 	 { PREFIX_TABLE(PREFIX_VEX_0F3A14) },
12580 	 { PREFIX_TABLE(PREFIX_VEX_0F3A15) },
12581 	 { PREFIX_TABLE(PREFIX_VEX_0F3A16) },
12582 	 { PREFIX_TABLE(PREFIX_VEX_0F3A17) },
12583 	 /* 18 */
12584 	 { PREFIX_TABLE(PREFIX_VEX_0F3A18) },
12585 	 { PREFIX_TABLE(PREFIX_VEX_0F3A19) },
12586 	 { Bad_Opcode },
12587 	 { Bad_Opcode },
12588 	 { Bad_Opcode },
12589 	 { PREFIX_TABLE(PREFIX_VEX_0F3A1D) },
12590 	 { Bad_Opcode },
12591 	 { Bad_Opcode },
12592 	 /* 20 */
12593 	 { PREFIX_TABLE(PREFIX_VEX_0F3A20) },
12594 	 { PREFIX_TABLE(PREFIX_VEX_0F3A21) },
12595 	 { PREFIX_TABLE(PREFIX_VEX_0F3A22) },
12596 	 { Bad_Opcode },
12597 	 { Bad_Opcode },
12598 	 { Bad_Opcode },
12599 	 { Bad_Opcode },
12600 	 { Bad_Opcode },
12601 	 /* 28 */
12602 	 { Bad_Opcode },
12603 	 { Bad_Opcode },
12604 	 { Bad_Opcode },
12605 	 { Bad_Opcode },
12606 	 { Bad_Opcode },
12607 	 { Bad_Opcode },
12608 	 { Bad_Opcode },
12609 	 { Bad_Opcode },
12610 	 /* 30 */
12611 	 { PREFIX_TABLE(PREFIX_VEX_0F3A30) },
12612 	 { PREFIX_TABLE(PREFIX_VEX_0F3A31) },
12613 	 { PREFIX_TABLE(PREFIX_VEX_0F3A32) },
12614 	 { PREFIX_TABLE(PREFIX_VEX_0F3A33) },
12615 	 { Bad_Opcode },
12616 	 { Bad_Opcode },
12617 	 { Bad_Opcode },
12618 	 { Bad_Opcode },
12619 	 /* 38 */
12620 	 { PREFIX_TABLE(PREFIX_VEX_0F3A38) },
12621 	 { PREFIX_TABLE(PREFIX_VEX_0F3A39) },
12622 	 { Bad_Opcode },
12623 	 { Bad_Opcode },
12624 	 { Bad_Opcode },
12625 	 { Bad_Opcode },
12626 	 { Bad_Opcode },
12627 	 { Bad_Opcode },
12628 	 /* 40 */
12629 	 { PREFIX_TABLE(PREFIX_VEX_0F3A40) },
12630 	 { PREFIX_TABLE(PREFIX_VEX_0F3A41) },
12631 	 { PREFIX_TABLE(PREFIX_VEX_0F3A42) },
12632 	 { Bad_Opcode },
12633 	 { PREFIX_TABLE(PREFIX_VEX_0F3A44) },
12634 	 { Bad_Opcode },
12635 	 { PREFIX_TABLE(PREFIX_VEX_0F3A46) },
12636 	 { Bad_Opcode },
12637 	 /* 48 */
12638 	 { PREFIX_TABLE(PREFIX_VEX_0F3A48) },
12639 	 { PREFIX_TABLE(PREFIX_VEX_0F3A49) },
12640 	 { PREFIX_TABLE(PREFIX_VEX_0F3A4A) },
12641 	 { PREFIX_TABLE(PREFIX_VEX_0F3A4B) },
12642 	 { PREFIX_TABLE(PREFIX_VEX_0F3A4C) },
12643 	 { Bad_Opcode },
12644 	 { Bad_Opcode },
12645 	 { Bad_Opcode },
12646 	 /* 50 */
12647 	 { Bad_Opcode },
12648 	 { Bad_Opcode },
12649 	 { Bad_Opcode },
12650 	 { Bad_Opcode },
12651 	 { Bad_Opcode },
12652 	 { Bad_Opcode },
12653 	 { Bad_Opcode },
12654 	 { Bad_Opcode },
12655 	 /* 58 */
12656 	 { Bad_Opcode },
12657 	 { Bad_Opcode },
12658 	 { Bad_Opcode },
12659 	 { Bad_Opcode },
12660 	 { PREFIX_TABLE(PREFIX_VEX_0F3A5C) },
12661 	 { PREFIX_TABLE(PREFIX_VEX_0F3A5D) },
12662 	 { PREFIX_TABLE(PREFIX_VEX_0F3A5E) },
12663 	 { PREFIX_TABLE(PREFIX_VEX_0F3A5F) },
12664 	 /* 60 */
12665 	 { PREFIX_TABLE(PREFIX_VEX_0F3A60) },
12666 	 { PREFIX_TABLE(PREFIX_VEX_0F3A61) },
12667 	 { PREFIX_TABLE(PREFIX_VEX_0F3A62) },
12668 	 { PREFIX_TABLE(PREFIX_VEX_0F3A63) },
12669 	 { Bad_Opcode },
12670 	 { Bad_Opcode },
12671 	 { Bad_Opcode },
12672 	 { Bad_Opcode },
12673 	 /* 68 */
12674 	 { PREFIX_TABLE(PREFIX_VEX_0F3A68) },
12675 	 { PREFIX_TABLE(PREFIX_VEX_0F3A69) },
12676 	 { PREFIX_TABLE(PREFIX_VEX_0F3A6A) },
12677 	 { PREFIX_TABLE(PREFIX_VEX_0F3A6B) },
12678 	 { PREFIX_TABLE(PREFIX_VEX_0F3A6C) },
12679 	 { PREFIX_TABLE(PREFIX_VEX_0F3A6D) },
12680 	 { PREFIX_TABLE(PREFIX_VEX_0F3A6E) },
12681 	 { PREFIX_TABLE(PREFIX_VEX_0F3A6F) },
12682 	 /* 70 */
12683 	 { Bad_Opcode },
12684 	 { Bad_Opcode },
12685 	 { Bad_Opcode },
12686 	 { Bad_Opcode },
12687 	 { Bad_Opcode },
12688 	 { Bad_Opcode },
12689 	 { Bad_Opcode },
12690 	 { Bad_Opcode },
12691 	 /* 78 */
12692 	 { PREFIX_TABLE(PREFIX_VEX_0F3A78) },
12693 	 { PREFIX_TABLE(PREFIX_VEX_0F3A79) },
12694 	 { PREFIX_TABLE(PREFIX_VEX_0F3A7A) },
12695 	 { PREFIX_TABLE(PREFIX_VEX_0F3A7B) },
12696 	 { PREFIX_TABLE(PREFIX_VEX_0F3A7C) },
12697 	 { PREFIX_TABLE(PREFIX_VEX_0F3A7D) },
12698 	 { PREFIX_TABLE(PREFIX_VEX_0F3A7E) },
12699 	 { PREFIX_TABLE(PREFIX_VEX_0F3A7F) },
12700 	 /* 80 */
12701 	 { Bad_Opcode },
12702 	 { Bad_Opcode },
12703 	 { Bad_Opcode },
12704 	 { Bad_Opcode },
12705 	 { Bad_Opcode },
12706 	 { Bad_Opcode },
12707 	 { Bad_Opcode },
12708 	 { Bad_Opcode },
12709 	 /* 88 */
12710 	 { Bad_Opcode },
12711 	 { Bad_Opcode },
12712 	 { Bad_Opcode },
12713 	 { Bad_Opcode },
12714 	 { Bad_Opcode },
12715 	 { Bad_Opcode },
12716 	 { Bad_Opcode },
12717 	 { Bad_Opcode },
12718 	 /* 90 */
12719 	 { Bad_Opcode },
12720 	 { Bad_Opcode },
12721 	 { Bad_Opcode },
12722 	 { Bad_Opcode },
12723 	 { Bad_Opcode },
12724 	 { Bad_Opcode },
12725 	 { Bad_Opcode },
12726 	 { Bad_Opcode },
12727 	 /* 98 */
12728 	 { Bad_Opcode },
12729 	 { Bad_Opcode },
12730 	 { Bad_Opcode },
12731 	 { Bad_Opcode },
12732 	 { Bad_Opcode },
12733 	 { Bad_Opcode },
12734 	 { Bad_Opcode },
12735 	 { Bad_Opcode },
12736 	 /* a0 */
12737 	 { Bad_Opcode },
12738 	 { Bad_Opcode },
12739 	 { Bad_Opcode },
12740 	 { Bad_Opcode },
12741 	 { Bad_Opcode },
12742 	 { Bad_Opcode },
12743 	 { Bad_Opcode },
12744 	 { Bad_Opcode },
12745 	 /* a8 */
12746 	 { Bad_Opcode },
12747 	 { Bad_Opcode },
12748 	 { Bad_Opcode },
12749 	 { Bad_Opcode },
12750 	 { Bad_Opcode },
12751 	 { Bad_Opcode },
12752 	 { Bad_Opcode },
12753 	 { Bad_Opcode },
12754 	 /* b0 */
12755 	 { Bad_Opcode },
12756 	 { Bad_Opcode },
12757 	 { Bad_Opcode },
12758 	 { Bad_Opcode },
12759 	 { Bad_Opcode },
12760 	 { Bad_Opcode },
12761 	 { Bad_Opcode },
12762 	 { Bad_Opcode },
12763 	 /* b8 */
12764 	 { Bad_Opcode },
12765 	 { Bad_Opcode },
12766 	 { Bad_Opcode },
12767 	 { Bad_Opcode },
12768 	 { Bad_Opcode },
12769 	 { Bad_Opcode },
12770 	 { Bad_Opcode },
12771 	 { Bad_Opcode },
12772 	 /* c0 */
12773 	 { Bad_Opcode },
12774 	 { Bad_Opcode },
12775 	 { Bad_Opcode },
12776 	 { Bad_Opcode },
12777 	 { Bad_Opcode },
12778 	 { Bad_Opcode },
12779 	 { Bad_Opcode },
12780 	 { Bad_Opcode },
12781 	 /* c8 */
12782 	 { Bad_Opcode },
12783 	 { Bad_Opcode },
12784 	 { Bad_Opcode },
12785 	 { Bad_Opcode },
12786 	 { Bad_Opcode },
12787 	 { Bad_Opcode },
12788 	 { Bad_Opcode },
12789 	 { Bad_Opcode },
12790 	 /* d0 */
12791 	 { Bad_Opcode },
12792 	 { Bad_Opcode },
12793 	 { Bad_Opcode },
12794 	 { Bad_Opcode },
12795 	 { Bad_Opcode },
12796 	 { Bad_Opcode },
12797 	 { Bad_Opcode },
12798 	 { Bad_Opcode },
12799 	 /* d8 */
12800 	 { Bad_Opcode },
12801 	 { Bad_Opcode },
12802 	 { Bad_Opcode },
12803 	 { Bad_Opcode },
12804 	 { Bad_Opcode },
12805 	 { Bad_Opcode },
12806 	 { Bad_Opcode },
12807 	 { PREFIX_TABLE(PREFIX_VEX_0F3ADF) },
12808 	 /* e0 */
12809 	 { Bad_Opcode },
12810 	 { Bad_Opcode },
12811 	 { Bad_Opcode },
12812 	 { Bad_Opcode },
12813 	 { Bad_Opcode },
12814 	 { Bad_Opcode },
12815 	 { Bad_Opcode },
12816 	 { Bad_Opcode },
12817 	 /* e8 */
12818 	 { Bad_Opcode },
12819 	 { Bad_Opcode },
12820 	 { Bad_Opcode },
12821 	 { Bad_Opcode },
12822 	 { Bad_Opcode },
12823 	 { Bad_Opcode },
12824 	 { Bad_Opcode },
12825 	 { Bad_Opcode },
12826 	 /* f0 */
12827 	 { PREFIX_TABLE(PREFIX_VEX_0F3AF0) },
12828 	 { Bad_Opcode },
12829 	 { Bad_Opcode },
12830 	 { Bad_Opcode },
12831 	 { Bad_Opcode },
12832 	 { Bad_Opcode },
12833 	 { Bad_Opcode },
12834 	 { Bad_Opcode },
12835 	 /* f8 */
12836 	 { Bad_Opcode },
12837 	 { Bad_Opcode },
12838 	 { Bad_Opcode },
12839 	 { Bad_Opcode },
12840 	 { Bad_Opcode },
12841 	 { Bad_Opcode },
12842 	 { Bad_Opcode },
12843 	 { Bad_Opcode },
12844 	 },
12845 };
12846 
12847 #define NEED_OPCODE_TABLE
12848 #include "i386-dis-evex.h"
12849 #undef NEED_OPCODE_TABLE
12850 static const struct dis386 vex_len_table[][2] = {
12851 	/* VEX_LEN_0F10_P_1 */
12852 	{
12853 	 { VEX_W_TABLE(VEX_W_0F10_P_1) },
12854 	 { VEX_W_TABLE(VEX_W_0F10_P_1) },
12855 	 },
12856 
12857 	/* VEX_LEN_0F10_P_3 */
12858 	{
12859 	 { VEX_W_TABLE(VEX_W_0F10_P_3) },
12860 	 { VEX_W_TABLE(VEX_W_0F10_P_3) },
12861 	 },
12862 
12863 	/* VEX_LEN_0F11_P_1 */
12864 	{
12865 	 { VEX_W_TABLE(VEX_W_0F11_P_1) },
12866 	 { VEX_W_TABLE(VEX_W_0F11_P_1) },
12867 	 },
12868 
12869 	/* VEX_LEN_0F11_P_3 */
12870 	{
12871 	 { VEX_W_TABLE(VEX_W_0F11_P_3) },
12872 	 { VEX_W_TABLE(VEX_W_0F11_P_3) },
12873 	 },
12874 
12875 	/* VEX_LEN_0F12_P_0_M_0 */
12876 	{
12877 	 { VEX_W_TABLE(VEX_W_0F12_P_0_M_0) },
12878 	 },
12879 
12880 	/* VEX_LEN_0F12_P_0_M_1 */
12881 	{
12882 	 { VEX_W_TABLE(VEX_W_0F12_P_0_M_1) },
12883 	 },
12884 
12885 	/* VEX_LEN_0F12_P_2 */
12886 	{
12887 	 { VEX_W_TABLE(VEX_W_0F12_P_2) },
12888 	 },
12889 
12890 	/* VEX_LEN_0F13_M_0 */
12891 	{
12892 	 { VEX_W_TABLE(VEX_W_0F13_M_0) },
12893 	 },
12894 
12895 	/* VEX_LEN_0F16_P_0_M_0 */
12896 	{
12897 	 { VEX_W_TABLE(VEX_W_0F16_P_0_M_0) },
12898 	 },
12899 
12900 	/* VEX_LEN_0F16_P_0_M_1 */
12901 	{
12902 	 { VEX_W_TABLE(VEX_W_0F16_P_0_M_1) },
12903 	 },
12904 
12905 	/* VEX_LEN_0F16_P_2 */
12906 	{
12907 	 { VEX_W_TABLE(VEX_W_0F16_P_2) },
12908 	 },
12909 
12910 	/* VEX_LEN_0F17_M_0 */
12911 	{
12912 	 { VEX_W_TABLE(VEX_W_0F17_M_0) },
12913 	 },
12914 
12915 	/* VEX_LEN_0F2A_P_1 */
12916 	{
12917 	 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
12918 	 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
12919 	 },
12920 
12921 	/* VEX_LEN_0F2A_P_3 */
12922 	{
12923 	 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
12924 	 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
12925 	 },
12926 
12927 	/* VEX_LEN_0F2C_P_1 */
12928 	{
12929 	 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
12930 	 { "vcvttss2siY", { Gv, EXdScalar }, 0 },
12931 	 },
12932 
12933 	/* VEX_LEN_0F2C_P_3 */
12934 	{
12935 	 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
12936 	 { "vcvttsd2siY", { Gv, EXqScalar }, 0 },
12937 	 },
12938 
12939 	/* VEX_LEN_0F2D_P_1 */
12940 	{
12941 	 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
12942 	 { "vcvtss2siY", { Gv, EXdScalar }, 0 },
12943 	 },
12944 
12945 	/* VEX_LEN_0F2D_P_3 */
12946 	{
12947 	 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
12948 	 { "vcvtsd2siY", { Gv, EXqScalar }, 0 },
12949 	 },
12950 
12951 	/* VEX_LEN_0F2E_P_0 */
12952 	{
12953 	 { VEX_W_TABLE(VEX_W_0F2E_P_0) },
12954 	 { VEX_W_TABLE(VEX_W_0F2E_P_0) },
12955 	 },
12956 
12957 	/* VEX_LEN_0F2E_P_2 */
12958 	{
12959 	 { VEX_W_TABLE(VEX_W_0F2E_P_2) },
12960 	 { VEX_W_TABLE(VEX_W_0F2E_P_2) },
12961 	 },
12962 
12963 	/* VEX_LEN_0F2F_P_0 */
12964 	{
12965 	 { VEX_W_TABLE(VEX_W_0F2F_P_0) },
12966 	 { VEX_W_TABLE(VEX_W_0F2F_P_0) },
12967 	 },
12968 
12969 	/* VEX_LEN_0F2F_P_2 */
12970 	{
12971 	 { VEX_W_TABLE(VEX_W_0F2F_P_2) },
12972 	 { VEX_W_TABLE(VEX_W_0F2F_P_2) },
12973 	 },
12974 
12975 	/* VEX_LEN_0F41_P_0 */
12976 	{
12977 	 { Bad_Opcode },
12978 	 { VEX_W_TABLE(VEX_W_0F41_P_0_LEN_1) },
12979 	 },
12980 	/* VEX_LEN_0F41_P_2 */
12981 	{
12982 	 { Bad_Opcode },
12983 	 { VEX_W_TABLE(VEX_W_0F41_P_2_LEN_1) },
12984 	 },
12985 	/* VEX_LEN_0F42_P_0 */
12986 	{
12987 	 { Bad_Opcode },
12988 	 { VEX_W_TABLE(VEX_W_0F42_P_0_LEN_1) },
12989 	 },
12990 	/* VEX_LEN_0F42_P_2 */
12991 	{
12992 	 { Bad_Opcode },
12993 	 { VEX_W_TABLE(VEX_W_0F42_P_2_LEN_1) },
12994 	 },
12995 	/* VEX_LEN_0F44_P_0 */
12996 	{
12997 	 { VEX_W_TABLE(VEX_W_0F44_P_0_LEN_0) },
12998 	 },
12999 	/* VEX_LEN_0F44_P_2 */
13000 	{
13001 	 { VEX_W_TABLE(VEX_W_0F44_P_2_LEN_0) },
13002 	 },
13003 	/* VEX_LEN_0F45_P_0 */
13004 	{
13005 	 { Bad_Opcode },
13006 	 { VEX_W_TABLE(VEX_W_0F45_P_0_LEN_1) },
13007 	 },
13008 	/* VEX_LEN_0F45_P_2 */
13009 	{
13010 	 { Bad_Opcode },
13011 	 { VEX_W_TABLE(VEX_W_0F45_P_2_LEN_1) },
13012 	 },
13013 	/* VEX_LEN_0F46_P_0 */
13014 	{
13015 	 { Bad_Opcode },
13016 	 { VEX_W_TABLE(VEX_W_0F46_P_0_LEN_1) },
13017 	 },
13018 	/* VEX_LEN_0F46_P_2 */
13019 	{
13020 	 { Bad_Opcode },
13021 	 { VEX_W_TABLE(VEX_W_0F46_P_2_LEN_1) },
13022 	 },
13023 	/* VEX_LEN_0F47_P_0 */
13024 	{
13025 	 { Bad_Opcode },
13026 	 { VEX_W_TABLE(VEX_W_0F47_P_0_LEN_1) },
13027 	 },
13028 	/* VEX_LEN_0F47_P_2 */
13029 	{
13030 	 { Bad_Opcode },
13031 	 { VEX_W_TABLE(VEX_W_0F47_P_2_LEN_1) },
13032 	 },
13033 	/* VEX_LEN_0F4A_P_0 */
13034 	{
13035 	 { Bad_Opcode },
13036 	 { VEX_W_TABLE(VEX_W_0F4A_P_0_LEN_1) },
13037 	 },
13038 	/* VEX_LEN_0F4A_P_2 */
13039 	{
13040 	 { Bad_Opcode },
13041 	 { VEX_W_TABLE(VEX_W_0F4A_P_2_LEN_1) },
13042 	 },
13043 	/* VEX_LEN_0F4B_P_0 */
13044 	{
13045 	 { Bad_Opcode },
13046 	 { VEX_W_TABLE(VEX_W_0F4B_P_0_LEN_1) },
13047 	 },
13048 	/* VEX_LEN_0F4B_P_2 */
13049 	{
13050 	 { Bad_Opcode },
13051 	 { VEX_W_TABLE(VEX_W_0F4B_P_2_LEN_1) },
13052 	 },
13053 
13054 	/* VEX_LEN_0F51_P_1 */
13055 	{
13056 	 { VEX_W_TABLE(VEX_W_0F51_P_1) },
13057 	 { VEX_W_TABLE(VEX_W_0F51_P_1) },
13058 	 },
13059 
13060 	/* VEX_LEN_0F51_P_3 */
13061 	{
13062 	 { VEX_W_TABLE(VEX_W_0F51_P_3) },
13063 	 { VEX_W_TABLE(VEX_W_0F51_P_3) },
13064 	 },
13065 
13066 	/* VEX_LEN_0F52_P_1 */
13067 	{
13068 	 { VEX_W_TABLE(VEX_W_0F52_P_1) },
13069 	 { VEX_W_TABLE(VEX_W_0F52_P_1) },
13070 	 },
13071 
13072 	/* VEX_LEN_0F53_P_1 */
13073 	{
13074 	 { VEX_W_TABLE(VEX_W_0F53_P_1) },
13075 	 { VEX_W_TABLE(VEX_W_0F53_P_1) },
13076 	 },
13077 
13078 	/* VEX_LEN_0F58_P_1 */
13079 	{
13080 	 { VEX_W_TABLE(VEX_W_0F58_P_1) },
13081 	 { VEX_W_TABLE(VEX_W_0F58_P_1) },
13082 	 },
13083 
13084 	/* VEX_LEN_0F58_P_3 */
13085 	{
13086 	 { VEX_W_TABLE(VEX_W_0F58_P_3) },
13087 	 { VEX_W_TABLE(VEX_W_0F58_P_3) },
13088 	 },
13089 
13090 	/* VEX_LEN_0F59_P_1 */
13091 	{
13092 	 { VEX_W_TABLE(VEX_W_0F59_P_1) },
13093 	 { VEX_W_TABLE(VEX_W_0F59_P_1) },
13094 	 },
13095 
13096 	/* VEX_LEN_0F59_P_3 */
13097 	{
13098 	 { VEX_W_TABLE(VEX_W_0F59_P_3) },
13099 	 { VEX_W_TABLE(VEX_W_0F59_P_3) },
13100 	 },
13101 
13102 	/* VEX_LEN_0F5A_P_1 */
13103 	{
13104 	 { VEX_W_TABLE(VEX_W_0F5A_P_1) },
13105 	 { VEX_W_TABLE(VEX_W_0F5A_P_1) },
13106 	 },
13107 
13108 	/* VEX_LEN_0F5A_P_3 */
13109 	{
13110 	 { VEX_W_TABLE(VEX_W_0F5A_P_3) },
13111 	 { VEX_W_TABLE(VEX_W_0F5A_P_3) },
13112 	 },
13113 
13114 	/* VEX_LEN_0F5C_P_1 */
13115 	{
13116 	 { VEX_W_TABLE(VEX_W_0F5C_P_1) },
13117 	 { VEX_W_TABLE(VEX_W_0F5C_P_1) },
13118 	 },
13119 
13120 	/* VEX_LEN_0F5C_P_3 */
13121 	{
13122 	 { VEX_W_TABLE(VEX_W_0F5C_P_3) },
13123 	 { VEX_W_TABLE(VEX_W_0F5C_P_3) },
13124 	 },
13125 
13126 	/* VEX_LEN_0F5D_P_1 */
13127 	{
13128 	 { VEX_W_TABLE(VEX_W_0F5D_P_1) },
13129 	 { VEX_W_TABLE(VEX_W_0F5D_P_1) },
13130 	 },
13131 
13132 	/* VEX_LEN_0F5D_P_3 */
13133 	{
13134 	 { VEX_W_TABLE(VEX_W_0F5D_P_3) },
13135 	 { VEX_W_TABLE(VEX_W_0F5D_P_3) },
13136 	 },
13137 
13138 	/* VEX_LEN_0F5E_P_1 */
13139 	{
13140 	 { VEX_W_TABLE(VEX_W_0F5E_P_1) },
13141 	 { VEX_W_TABLE(VEX_W_0F5E_P_1) },
13142 	 },
13143 
13144 	/* VEX_LEN_0F5E_P_3 */
13145 	{
13146 	 { VEX_W_TABLE(VEX_W_0F5E_P_3) },
13147 	 { VEX_W_TABLE(VEX_W_0F5E_P_3) },
13148 	 },
13149 
13150 	/* VEX_LEN_0F5F_P_1 */
13151 	{
13152 	 { VEX_W_TABLE(VEX_W_0F5F_P_1) },
13153 	 { VEX_W_TABLE(VEX_W_0F5F_P_1) },
13154 	 },
13155 
13156 	/* VEX_LEN_0F5F_P_3 */
13157 	{
13158 	 { VEX_W_TABLE(VEX_W_0F5F_P_3) },
13159 	 { VEX_W_TABLE(VEX_W_0F5F_P_3) },
13160 	 },
13161 
13162 	/* VEX_LEN_0F6E_P_2 */
13163 	{
13164 	 { "vmovK", { XMScalar, Edq }, 0 },
13165 	 { "vmovK", { XMScalar, Edq }, 0 },
13166 	 },
13167 
13168 	/* VEX_LEN_0F7E_P_1 */
13169 	{
13170 	 { VEX_W_TABLE(VEX_W_0F7E_P_1) },
13171 	 { VEX_W_TABLE(VEX_W_0F7E_P_1) },
13172 	 },
13173 
13174 	/* VEX_LEN_0F7E_P_2 */
13175 	{
13176 	 { "vmovK", { Edq, XMScalar }, 0 },
13177 	 { "vmovK", { Edq, XMScalar }, 0 },
13178 	 },
13179 
13180 	/* VEX_LEN_0F90_P_0 */
13181 	{
13182 	 { VEX_W_TABLE(VEX_W_0F90_P_0_LEN_0) },
13183 	 },
13184 
13185 	/* VEX_LEN_0F90_P_2 */
13186 	{
13187 	 { VEX_W_TABLE(VEX_W_0F90_P_2_LEN_0) },
13188 	 },
13189 
13190 	/* VEX_LEN_0F91_P_0 */
13191 	{
13192 	 { VEX_W_TABLE(VEX_W_0F91_P_0_LEN_0) },
13193 	 },
13194 
13195 	/* VEX_LEN_0F91_P_2 */
13196 	{
13197 	 { VEX_W_TABLE(VEX_W_0F91_P_2_LEN_0) },
13198 	 },
13199 
13200 	/* VEX_LEN_0F92_P_0 */
13201 	{
13202 	 { VEX_W_TABLE(VEX_W_0F92_P_0_LEN_0) },
13203 	 },
13204 
13205 	/* VEX_LEN_0F92_P_2 */
13206 	{
13207 	 { VEX_W_TABLE(VEX_W_0F92_P_2_LEN_0) },
13208 	 },
13209 
13210 	/* VEX_LEN_0F92_P_3 */
13211 	{
13212 	 { VEX_W_TABLE(VEX_W_0F92_P_3_LEN_0) },
13213 	 },
13214 
13215 	/* VEX_LEN_0F93_P_0 */
13216 	{
13217 	 { VEX_W_TABLE(VEX_W_0F93_P_0_LEN_0) },
13218 	 },
13219 
13220 	/* VEX_LEN_0F93_P_2 */
13221 	{
13222 	 { VEX_W_TABLE(VEX_W_0F93_P_2_LEN_0) },
13223 	 },
13224 
13225 	/* VEX_LEN_0F93_P_3 */
13226 	{
13227 	 { VEX_W_TABLE(VEX_W_0F93_P_3_LEN_0) },
13228 	 },
13229 
13230 	/* VEX_LEN_0F98_P_0 */
13231 	{
13232 	 { VEX_W_TABLE(VEX_W_0F98_P_0_LEN_0) },
13233 	 },
13234 
13235 	/* VEX_LEN_0F98_P_2 */
13236 	{
13237 	 { VEX_W_TABLE(VEX_W_0F98_P_2_LEN_0) },
13238 	 },
13239 
13240 	/* VEX_LEN_0F99_P_0 */
13241 	{
13242 	 { VEX_W_TABLE(VEX_W_0F99_P_0_LEN_0) },
13243 	 },
13244 
13245 	/* VEX_LEN_0F99_P_2 */
13246 	{
13247 	 { VEX_W_TABLE(VEX_W_0F99_P_2_LEN_0) },
13248 	 },
13249 
13250 	/* VEX_LEN_0FAE_R_2_M_0 */
13251 	{
13252 	 { VEX_W_TABLE(VEX_W_0FAE_R_2_M_0) },
13253 	 },
13254 
13255 	/* VEX_LEN_0FAE_R_3_M_0 */
13256 	{
13257 	 { VEX_W_TABLE(VEX_W_0FAE_R_3_M_0) },
13258 	 },
13259 
13260 	/* VEX_LEN_0FC2_P_1 */
13261 	{
13262 	 { VEX_W_TABLE(VEX_W_0FC2_P_1) },
13263 	 { VEX_W_TABLE(VEX_W_0FC2_P_1) },
13264 	 },
13265 
13266 	/* VEX_LEN_0FC2_P_3 */
13267 	{
13268 	 { VEX_W_TABLE(VEX_W_0FC2_P_3) },
13269 	 { VEX_W_TABLE(VEX_W_0FC2_P_3) },
13270 	 },
13271 
13272 	/* VEX_LEN_0FC4_P_2 */
13273 	{
13274 	 { VEX_W_TABLE(VEX_W_0FC4_P_2) },
13275 	 },
13276 
13277 	/* VEX_LEN_0FC5_P_2 */
13278 	{
13279 	 { VEX_W_TABLE(VEX_W_0FC5_P_2) },
13280 	 },
13281 
13282 	/* VEX_LEN_0FD6_P_2 */
13283 	{
13284 	 { VEX_W_TABLE(VEX_W_0FD6_P_2) },
13285 	 { VEX_W_TABLE(VEX_W_0FD6_P_2) },
13286 	 },
13287 
13288 	/* VEX_LEN_0FF7_P_2 */
13289 	{
13290 	 { VEX_W_TABLE(VEX_W_0FF7_P_2) },
13291 	 },
13292 
13293 	/* VEX_LEN_0F3816_P_2 */
13294 	{
13295 	 { Bad_Opcode },
13296 	 { VEX_W_TABLE(VEX_W_0F3816_P_2) },
13297 	 },
13298 
13299 	/* VEX_LEN_0F3819_P_2 */
13300 	{
13301 	 { Bad_Opcode },
13302 	 { VEX_W_TABLE(VEX_W_0F3819_P_2) },
13303 	 },
13304 
13305 	/* VEX_LEN_0F381A_P_2_M_0 */
13306 	{
13307 	 { Bad_Opcode },
13308 	 { VEX_W_TABLE(VEX_W_0F381A_P_2_M_0) },
13309 	 },
13310 
13311 	/* VEX_LEN_0F3836_P_2 */
13312 	{
13313 	 { Bad_Opcode },
13314 	 { VEX_W_TABLE(VEX_W_0F3836_P_2) },
13315 	 },
13316 
13317 	/* VEX_LEN_0F3841_P_2 */
13318 	{
13319 	 { VEX_W_TABLE(VEX_W_0F3841_P_2) },
13320 	 },
13321 
13322 	/* VEX_LEN_0F385A_P_2_M_0 */
13323 	{
13324 	 { Bad_Opcode },
13325 	 { VEX_W_TABLE(VEX_W_0F385A_P_2_M_0) },
13326 	 },
13327 
13328 	/* VEX_LEN_0F38DB_P_2 */
13329 	{
13330 	 { VEX_W_TABLE(VEX_W_0F38DB_P_2) },
13331 	 },
13332 
13333 	/* VEX_LEN_0F38DC_P_2 */
13334 	{
13335 	 { VEX_W_TABLE(VEX_W_0F38DC_P_2) },
13336 	 },
13337 
13338 	/* VEX_LEN_0F38DD_P_2 */
13339 	{
13340 	 { VEX_W_TABLE(VEX_W_0F38DD_P_2) },
13341 	 },
13342 
13343 	/* VEX_LEN_0F38DE_P_2 */
13344 	{
13345 	 { VEX_W_TABLE(VEX_W_0F38DE_P_2) },
13346 	 },
13347 
13348 	/* VEX_LEN_0F38DF_P_2 */
13349 	{
13350 	 { VEX_W_TABLE(VEX_W_0F38DF_P_2) },
13351 	 },
13352 
13353 	/* VEX_LEN_0F38F2_P_0 */
13354 	{
13355 	 { "andnS", { Gdq, VexGdq, Edq }, 0 },
13356 	 },
13357 
13358 	/* VEX_LEN_0F38F3_R_1_P_0 */
13359 	{
13360 	 { "blsrS", { VexGdq, Edq }, 0 },
13361 	 },
13362 
13363 	/* VEX_LEN_0F38F3_R_2_P_0 */
13364 	{
13365 	 { "blsmskS", { VexGdq, Edq }, 0 },
13366 	 },
13367 
13368 	/* VEX_LEN_0F38F3_R_3_P_0 */
13369 	{
13370 	 { "blsiS", { VexGdq, Edq }, 0 },
13371 	 },
13372 
13373 	/* VEX_LEN_0F38F5_P_0 */
13374 	{
13375 	 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
13376 	 },
13377 
13378 	/* VEX_LEN_0F38F5_P_1 */
13379 	{
13380 	 { "pextS", { Gdq, VexGdq, Edq }, 0 },
13381 	 },
13382 
13383 	/* VEX_LEN_0F38F5_P_3 */
13384 	{
13385 	 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
13386 	 },
13387 
13388 	/* VEX_LEN_0F38F6_P_3 */
13389 	{
13390 	 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
13391 	 },
13392 
13393 	/* VEX_LEN_0F38F7_P_0 */
13394 	{
13395 	 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
13396 	 },
13397 
13398 	/* VEX_LEN_0F38F7_P_1 */
13399 	{
13400 	 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
13401 	 },
13402 
13403 	/* VEX_LEN_0F38F7_P_2 */
13404 	{
13405 	 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
13406 	 },
13407 
13408 	/* VEX_LEN_0F38F7_P_3 */
13409 	{
13410 	 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
13411 	 },
13412 
13413 	/* VEX_LEN_0F3A00_P_2 */
13414 	{
13415 	 { Bad_Opcode },
13416 	 { VEX_W_TABLE(VEX_W_0F3A00_P_2) },
13417 	 },
13418 
13419 	/* VEX_LEN_0F3A01_P_2 */
13420 	{
13421 	 { Bad_Opcode },
13422 	 { VEX_W_TABLE(VEX_W_0F3A01_P_2) },
13423 	 },
13424 
13425 	/* VEX_LEN_0F3A06_P_2 */
13426 	{
13427 	 { Bad_Opcode },
13428 	 { VEX_W_TABLE(VEX_W_0F3A06_P_2) },
13429 	 },
13430 
13431 	/* VEX_LEN_0F3A0A_P_2 */
13432 	{
13433 	 { VEX_W_TABLE(VEX_W_0F3A0A_P_2) },
13434 	 { VEX_W_TABLE(VEX_W_0F3A0A_P_2) },
13435 	 },
13436 
13437 	/* VEX_LEN_0F3A0B_P_2 */
13438 	{
13439 	 { VEX_W_TABLE(VEX_W_0F3A0B_P_2) },
13440 	 { VEX_W_TABLE(VEX_W_0F3A0B_P_2) },
13441 	 },
13442 
13443 	/* VEX_LEN_0F3A14_P_2 */
13444 	{
13445 	 { VEX_W_TABLE(VEX_W_0F3A14_P_2) },
13446 	 },
13447 
13448 	/* VEX_LEN_0F3A15_P_2 */
13449 	{
13450 	 { VEX_W_TABLE(VEX_W_0F3A15_P_2) },
13451 	 },
13452 
13453 	/* VEX_LEN_0F3A16_P_2  */
13454 	{
13455 	 { "vpextrK", { Edq, XM, Ib }, 0 },
13456 	 },
13457 
13458 	/* VEX_LEN_0F3A17_P_2 */
13459 	{
13460 	 { "vextractps", { Edqd, XM, Ib }, 0 },
13461 	 },
13462 
13463 	/* VEX_LEN_0F3A18_P_2 */
13464 	{
13465 	 { Bad_Opcode },
13466 	 { VEX_W_TABLE(VEX_W_0F3A18_P_2) },
13467 	 },
13468 
13469 	/* VEX_LEN_0F3A19_P_2 */
13470 	{
13471 	 { Bad_Opcode },
13472 	 { VEX_W_TABLE(VEX_W_0F3A19_P_2) },
13473 	 },
13474 
13475 	/* VEX_LEN_0F3A20_P_2 */
13476 	{
13477 	 { VEX_W_TABLE(VEX_W_0F3A20_P_2) },
13478 	 },
13479 
13480 	/* VEX_LEN_0F3A21_P_2 */
13481 	{
13482 	 { VEX_W_TABLE(VEX_W_0F3A21_P_2) },
13483 	 },
13484 
13485 	/* VEX_LEN_0F3A22_P_2 */
13486 	{
13487 	 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
13488 	 },
13489 
13490 	/* VEX_LEN_0F3A30_P_2 */
13491 	{
13492 	 { VEX_W_TABLE(VEX_W_0F3A30_P_2_LEN_0) },
13493 	 },
13494 
13495 	/* VEX_LEN_0F3A31_P_2 */
13496 	{
13497 	 { VEX_W_TABLE(VEX_W_0F3A31_P_2_LEN_0) },
13498 	 },
13499 
13500 	/* VEX_LEN_0F3A32_P_2 */
13501 	{
13502 	 { VEX_W_TABLE(VEX_W_0F3A32_P_2_LEN_0) },
13503 	 },
13504 
13505 	/* VEX_LEN_0F3A33_P_2 */
13506 	{
13507 	 { VEX_W_TABLE(VEX_W_0F3A33_P_2_LEN_0) },
13508 	 },
13509 
13510 	/* VEX_LEN_0F3A38_P_2 */
13511 	{
13512 	 { Bad_Opcode },
13513 	 { VEX_W_TABLE(VEX_W_0F3A38_P_2) },
13514 	 },
13515 
13516 	/* VEX_LEN_0F3A39_P_2 */
13517 	{
13518 	 { Bad_Opcode },
13519 	 { VEX_W_TABLE(VEX_W_0F3A39_P_2) },
13520 	 },
13521 
13522 	/* VEX_LEN_0F3A41_P_2 */
13523 	{
13524 	 { VEX_W_TABLE(VEX_W_0F3A41_P_2) },
13525 	 },
13526 
13527 	/* VEX_LEN_0F3A44_P_2 */
13528 	{
13529 	 { VEX_W_TABLE(VEX_W_0F3A44_P_2) },
13530 	 },
13531 
13532 	/* VEX_LEN_0F3A46_P_2 */
13533 	{
13534 	 { Bad_Opcode },
13535 	 { VEX_W_TABLE(VEX_W_0F3A46_P_2) },
13536 	 },
13537 
13538 	/* VEX_LEN_0F3A60_P_2 */
13539 	{
13540 	 { VEX_W_TABLE(VEX_W_0F3A60_P_2) },
13541 	 },
13542 
13543 	/* VEX_LEN_0F3A61_P_2 */
13544 	{
13545 	 { VEX_W_TABLE(VEX_W_0F3A61_P_2) },
13546 	 },
13547 
13548 	/* VEX_LEN_0F3A62_P_2 */
13549 	{
13550 	 { VEX_W_TABLE(VEX_W_0F3A62_P_2) },
13551 	 },
13552 
13553 	/* VEX_LEN_0F3A63_P_2 */
13554 	{
13555 	 { VEX_W_TABLE(VEX_W_0F3A63_P_2) },
13556 	 },
13557 
13558 	/* VEX_LEN_0F3A6A_P_2 */
13559 	{
13560 	 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
13561 	 },
13562 
13563 	/* VEX_LEN_0F3A6B_P_2 */
13564 	{
13565 	 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
13566 	 },
13567 
13568 	/* VEX_LEN_0F3A6E_P_2 */
13569 	{
13570 	 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
13571 	 },
13572 
13573 	/* VEX_LEN_0F3A6F_P_2 */
13574 	{
13575 	 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
13576 	 },
13577 
13578 	/* VEX_LEN_0F3A7A_P_2 */
13579 	{
13580 	 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
13581 	 },
13582 
13583 	/* VEX_LEN_0F3A7B_P_2 */
13584 	{
13585 	 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
13586 	 },
13587 
13588 	/* VEX_LEN_0F3A7E_P_2 */
13589 	{
13590 	 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 }, 0 },
13591 	 },
13592 
13593 	/* VEX_LEN_0F3A7F_P_2 */
13594 	{
13595 	 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 }, 0 },
13596 	 },
13597 
13598 	/* VEX_LEN_0F3ADF_P_2 */
13599 	{
13600 	 { VEX_W_TABLE(VEX_W_0F3ADF_P_2) },
13601 	 },
13602 
13603 	/* VEX_LEN_0F3AF0_P_3 */
13604 	{
13605 	 { "rorxS", { Gdq, Edq, Ib }, 0 },
13606 	 },
13607 
13608 	/* VEX_LEN_0FXOP_08_CC */
13609 	{
13610 	 { "vpcomb", { XM, Vex128, EXx, Ib }, 0 },
13611 	 },
13612 
13613 	/* VEX_LEN_0FXOP_08_CD */
13614 	{
13615 	 { "vpcomw", { XM, Vex128, EXx, Ib }, 0 },
13616 	 },
13617 
13618 	/* VEX_LEN_0FXOP_08_CE */
13619 	{
13620 	 { "vpcomd", { XM, Vex128, EXx, Ib }, 0 },
13621 	 },
13622 
13623 	/* VEX_LEN_0FXOP_08_CF */
13624 	{
13625 	 { "vpcomq", { XM, Vex128, EXx, Ib }, 0 },
13626 	 },
13627 
13628 	/* VEX_LEN_0FXOP_08_EC */
13629 	{
13630 	 { "vpcomub", { XM, Vex128, EXx, Ib }, 0 },
13631 	 },
13632 
13633 	/* VEX_LEN_0FXOP_08_ED */
13634 	{
13635 	 { "vpcomuw", { XM, Vex128, EXx, Ib }, 0 },
13636 	 },
13637 
13638 	/* VEX_LEN_0FXOP_08_EE */
13639 	{
13640 	 { "vpcomud", { XM, Vex128, EXx, Ib }, 0 },
13641 	 },
13642 
13643 	/* VEX_LEN_0FXOP_08_EF */
13644 	{
13645 	 { "vpcomuq", { XM, Vex128, EXx, Ib }, 0 },
13646 	 },
13647 
13648 	/* VEX_LEN_0FXOP_09_80 */
13649 	{
13650 	 { "vfrczps", { XM, EXxmm }, 0 },
13651 	 { "vfrczps", { XM, EXymmq }, 0 },
13652 	 },
13653 
13654 	/* VEX_LEN_0FXOP_09_81 */
13655 	{
13656 	 { "vfrczpd", { XM, EXxmm }, 0 },
13657 	 { "vfrczpd", { XM, EXymmq }, 0 },
13658 	 },
13659 };
13660 
13661 static const struct dis386 vex_w_table[][2] = {
13662 	{
13663 	 /* VEX_W_0F10_P_0 */
13664 	 { "vmovups", { XM, EXx }, 0 },
13665 	 },
13666 	{
13667 	 /* VEX_W_0F10_P_1 */
13668 	 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
13669 	 },
13670 	{
13671 	 /* VEX_W_0F10_P_2 */
13672 	 { "vmovupd", { XM, EXx }, 0 },
13673 	 },
13674 	{
13675 	 /* VEX_W_0F10_P_3 */
13676 	 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
13677 	 },
13678 	{
13679 	 /* VEX_W_0F11_P_0 */
13680 	 { "vmovups", { EXxS, XM }, 0 },
13681 	 },
13682 	{
13683 	 /* VEX_W_0F11_P_1 */
13684 	 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
13685 	 },
13686 	{
13687 	 /* VEX_W_0F11_P_2 */
13688 	 { "vmovupd", { EXxS, XM }, 0 },
13689 	 },
13690 	{
13691 	 /* VEX_W_0F11_P_3 */
13692 	 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
13693 	 },
13694 	{
13695 	 /* VEX_W_0F12_P_0_M_0 */
13696 	 { "vmovlps", { XM, Vex128, EXq }, 0 },
13697 	 },
13698 	{
13699 	 /* VEX_W_0F12_P_0_M_1 */
13700 	 { "vmovhlps", { XM, Vex128, EXq }, 0 },
13701 	 },
13702 	{
13703 	 /* VEX_W_0F12_P_1 */
13704 	 { "vmovsldup", { XM, EXx }, 0 },
13705 	 },
13706 	{
13707 	 /* VEX_W_0F12_P_2 */
13708 	 { "vmovlpd", { XM, Vex128, EXq }, 0 },
13709 	 },
13710 	{
13711 	 /* VEX_W_0F12_P_3 */
13712 	 { "vmovddup", { XM, EXymmq }, 0 },
13713 	 },
13714 	{
13715 	 /* VEX_W_0F13_M_0 */
13716 	 { "vmovlpX", { EXq, XM }, 0 },
13717 	 },
13718 	{
13719 	 /* VEX_W_0F14 */
13720 	 { "vunpcklpX", { XM, Vex, EXx }, 0 },
13721 	 },
13722 	{
13723 	 /* VEX_W_0F15 */
13724 	 { "vunpckhpX", { XM, Vex, EXx }, 0 },
13725 	 },
13726 	{
13727 	 /* VEX_W_0F16_P_0_M_0 */
13728 	 { "vmovhps", { XM, Vex128, EXq }, 0 },
13729 	 },
13730 	{
13731 	 /* VEX_W_0F16_P_0_M_1 */
13732 	 { "vmovlhps", { XM, Vex128, EXq }, 0 },
13733 	 },
13734 	{
13735 	 /* VEX_W_0F16_P_1 */
13736 	 { "vmovshdup", { XM, EXx }, 0 },
13737 	 },
13738 	{
13739 	 /* VEX_W_0F16_P_2 */
13740 	 { "vmovhpd", { XM, Vex128, EXq }, 0 },
13741 	 },
13742 	{
13743 	 /* VEX_W_0F17_M_0 */
13744 	 { "vmovhpX", { EXq, XM }, 0 },
13745 	 },
13746 	{
13747 	 /* VEX_W_0F28 */
13748 	 { "vmovapX", { XM, EXx }, 0 },
13749 	 },
13750 	{
13751 	 /* VEX_W_0F29 */
13752 	 { "vmovapX", { EXxS, XM }, 0 },
13753 	 },
13754 	{
13755 	 /* VEX_W_0F2B_M_0 */
13756 	 { "vmovntpX", { Mx, XM }, 0 },
13757 	 },
13758 	{
13759 	 /* VEX_W_0F2E_P_0 */
13760 	 { "vucomiss", { XMScalar, EXdScalar }, 0 },
13761 	 },
13762 	{
13763 	 /* VEX_W_0F2E_P_2 */
13764 	 { "vucomisd", { XMScalar, EXqScalar }, 0 },
13765 	 },
13766 	{
13767 	 /* VEX_W_0F2F_P_0 */
13768 	 { "vcomiss", { XMScalar, EXdScalar }, 0 },
13769 	 },
13770 	{
13771 	 /* VEX_W_0F2F_P_2 */
13772 	 { "vcomisd", { XMScalar, EXqScalar }, 0 },
13773 	 },
13774 	{
13775 	 /* VEX_W_0F41_P_0_LEN_1 */
13776 	 { MOD_TABLE(MOD_VEX_W_0_0F41_P_0_LEN_1) },
13777 	 { MOD_TABLE(MOD_VEX_W_1_0F41_P_0_LEN_1) },
13778 	 },
13779 	{
13780 	 /* VEX_W_0F41_P_2_LEN_1 */
13781 	 { MOD_TABLE(MOD_VEX_W_0_0F41_P_2_LEN_1) },
13782 	 { MOD_TABLE(MOD_VEX_W_1_0F41_P_2_LEN_1) }
13783 	 },
13784 	{
13785 	 /* VEX_W_0F42_P_0_LEN_1 */
13786 	 { MOD_TABLE(MOD_VEX_W_0_0F42_P_0_LEN_1) },
13787 	 { MOD_TABLE(MOD_VEX_W_1_0F42_P_0_LEN_1) },
13788 	 },
13789 	{
13790 	 /* VEX_W_0F42_P_2_LEN_1 */
13791 	 { MOD_TABLE(MOD_VEX_W_0_0F42_P_2_LEN_1) },
13792 	 { MOD_TABLE(MOD_VEX_W_1_0F42_P_2_LEN_1) },
13793 	 },
13794 	{
13795 	 /* VEX_W_0F44_P_0_LEN_0 */
13796 	 { MOD_TABLE(MOD_VEX_W_0_0F44_P_0_LEN_1) },
13797 	 { MOD_TABLE(MOD_VEX_W_1_0F44_P_0_LEN_1) },
13798 	 },
13799 	{
13800 	 /* VEX_W_0F44_P_2_LEN_0 */
13801 	 { MOD_TABLE(MOD_VEX_W_0_0F44_P_2_LEN_1) },
13802 	 { MOD_TABLE(MOD_VEX_W_1_0F44_P_2_LEN_1) },
13803 	 },
13804 	{
13805 	 /* VEX_W_0F45_P_0_LEN_1 */
13806 	 { MOD_TABLE(MOD_VEX_W_0_0F45_P_0_LEN_1) },
13807 	 { MOD_TABLE(MOD_VEX_W_1_0F45_P_0_LEN_1) },
13808 	 },
13809 	{
13810 	 /* VEX_W_0F45_P_2_LEN_1 */
13811 	 { MOD_TABLE(MOD_VEX_W_0_0F45_P_2_LEN_1) },
13812 	 { MOD_TABLE(MOD_VEX_W_1_0F45_P_2_LEN_1) },
13813 	 },
13814 	{
13815 	 /* VEX_W_0F46_P_0_LEN_1 */
13816 	 { MOD_TABLE(MOD_VEX_W_0_0F46_P_0_LEN_1) },
13817 	 { MOD_TABLE(MOD_VEX_W_1_0F46_P_0_LEN_1) },
13818 	 },
13819 	{
13820 	 /* VEX_W_0F46_P_2_LEN_1 */
13821 	 { MOD_TABLE(MOD_VEX_W_0_0F46_P_2_LEN_1) },
13822 	 { MOD_TABLE(MOD_VEX_W_1_0F46_P_2_LEN_1) },
13823 	 },
13824 	{
13825 	 /* VEX_W_0F47_P_0_LEN_1 */
13826 	 { MOD_TABLE(MOD_VEX_W_0_0F47_P_0_LEN_1) },
13827 	 { MOD_TABLE(MOD_VEX_W_1_0F47_P_0_LEN_1) },
13828 	 },
13829 	{
13830 	 /* VEX_W_0F47_P_2_LEN_1 */
13831 	 { MOD_TABLE(MOD_VEX_W_0_0F47_P_2_LEN_1) },
13832 	 { MOD_TABLE(MOD_VEX_W_1_0F47_P_2_LEN_1) },
13833 	 },
13834 	{
13835 	 /* VEX_W_0F4A_P_0_LEN_1 */
13836 	 { MOD_TABLE(MOD_VEX_W_0_0F4A_P_0_LEN_1) },
13837 	 { MOD_TABLE(MOD_VEX_W_1_0F4A_P_0_LEN_1) },
13838 	 },
13839 	{
13840 	 /* VEX_W_0F4A_P_2_LEN_1 */
13841 	 { MOD_TABLE(MOD_VEX_W_0_0F4A_P_2_LEN_1) },
13842 	 { MOD_TABLE(MOD_VEX_W_1_0F4A_P_2_LEN_1) },
13843 	 },
13844 	{
13845 	 /* VEX_W_0F4B_P_0_LEN_1 */
13846 	 { MOD_TABLE(MOD_VEX_W_0_0F4B_P_0_LEN_1) },
13847 	 { MOD_TABLE(MOD_VEX_W_1_0F4B_P_0_LEN_1) },
13848 	 },
13849 	{
13850 	 /* VEX_W_0F4B_P_2_LEN_1 */
13851 	 { MOD_TABLE(MOD_VEX_W_0_0F4B_P_2_LEN_1) },
13852 	 },
13853 	{
13854 	 /* VEX_W_0F50_M_0 */
13855 	 { "vmovmskpX", { Gdq, XS }, 0 },
13856 	 },
13857 	{
13858 	 /* VEX_W_0F51_P_0 */
13859 	 { "vsqrtps", { XM, EXx }, 0 },
13860 	 },
13861 	{
13862 	 /* VEX_W_0F51_P_1 */
13863 	 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
13864 	 },
13865 	{
13866 	 /* VEX_W_0F51_P_2  */
13867 	 { "vsqrtpd", { XM, EXx }, 0 },
13868 	 },
13869 	{
13870 	 /* VEX_W_0F51_P_3 */
13871 	 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
13872 	 },
13873 	{
13874 	 /* VEX_W_0F52_P_0 */
13875 	 { "vrsqrtps", { XM, EXx }, 0 },
13876 	 },
13877 	{
13878 	 /* VEX_W_0F52_P_1 */
13879 	 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
13880 	 },
13881 	{
13882 	 /* VEX_W_0F53_P_0  */
13883 	 { "vrcpps", { XM, EXx }, 0 },
13884 	 },
13885 	{
13886 	 /* VEX_W_0F53_P_1  */
13887 	 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
13888 	 },
13889 	{
13890 	 /* VEX_W_0F58_P_0  */
13891 	 { "vaddps", { XM, Vex, EXx }, 0 },
13892 	 },
13893 	{
13894 	 /* VEX_W_0F58_P_1  */
13895 	 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
13896 	 },
13897 	{
13898 	 /* VEX_W_0F58_P_2  */
13899 	 { "vaddpd", { XM, Vex, EXx }, 0 },
13900 	 },
13901 	{
13902 	 /* VEX_W_0F58_P_3  */
13903 	 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
13904 	 },
13905 	{
13906 	 /* VEX_W_0F59_P_0  */
13907 	 { "vmulps", { XM, Vex, EXx }, 0 },
13908 	 },
13909 	{
13910 	 /* VEX_W_0F59_P_1  */
13911 	 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
13912 	 },
13913 	{
13914 	 /* VEX_W_0F59_P_2  */
13915 	 { "vmulpd", { XM, Vex, EXx }, 0 },
13916 	 },
13917 	{
13918 	 /* VEX_W_0F59_P_3  */
13919 	 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
13920 	 },
13921 	{
13922 	 /* VEX_W_0F5A_P_0  */
13923 	 { "vcvtps2pd", { XM, EXxmmq }, 0 },
13924 	 },
13925 	{
13926 	 /* VEX_W_0F5A_P_1  */
13927 	 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
13928 	 },
13929 	{
13930 	 /* VEX_W_0F5A_P_3  */
13931 	 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
13932 	 },
13933 	{
13934 	 /* VEX_W_0F5B_P_0  */
13935 	 { "vcvtdq2ps", { XM, EXx }, 0 },
13936 	 },
13937 	{
13938 	 /* VEX_W_0F5B_P_1  */
13939 	 { "vcvttps2dq", { XM, EXx }, 0 },
13940 	 },
13941 	{
13942 	 /* VEX_W_0F5B_P_2  */
13943 	 { "vcvtps2dq", { XM, EXx }, 0 },
13944 	 },
13945 	{
13946 	 /* VEX_W_0F5C_P_0  */
13947 	 { "vsubps", { XM, Vex, EXx }, 0 },
13948 	 },
13949 	{
13950 	 /* VEX_W_0F5C_P_1  */
13951 	 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
13952 	 },
13953 	{
13954 	 /* VEX_W_0F5C_P_2  */
13955 	 { "vsubpd", { XM, Vex, EXx }, 0 },
13956 	 },
13957 	{
13958 	 /* VEX_W_0F5C_P_3  */
13959 	 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
13960 	 },
13961 	{
13962 	 /* VEX_W_0F5D_P_0  */
13963 	 { "vminps", { XM, Vex, EXx }, 0 },
13964 	 },
13965 	{
13966 	 /* VEX_W_0F5D_P_1  */
13967 	 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
13968 	 },
13969 	{
13970 	 /* VEX_W_0F5D_P_2  */
13971 	 { "vminpd", { XM, Vex, EXx }, 0 },
13972 	 },
13973 	{
13974 	 /* VEX_W_0F5D_P_3  */
13975 	 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
13976 	 },
13977 	{
13978 	 /* VEX_W_0F5E_P_0  */
13979 	 { "vdivps", { XM, Vex, EXx }, 0 },
13980 	 },
13981 	{
13982 	 /* VEX_W_0F5E_P_1  */
13983 	 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
13984 	 },
13985 	{
13986 	 /* VEX_W_0F5E_P_2  */
13987 	 { "vdivpd", { XM, Vex, EXx }, 0 },
13988 	 },
13989 	{
13990 	 /* VEX_W_0F5E_P_3  */
13991 	 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
13992 	 },
13993 	{
13994 	 /* VEX_W_0F5F_P_0  */
13995 	 { "vmaxps", { XM, Vex, EXx }, 0 },
13996 	 },
13997 	{
13998 	 /* VEX_W_0F5F_P_1  */
13999 	 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
14000 	 },
14001 	{
14002 	 /* VEX_W_0F5F_P_2  */
14003 	 { "vmaxpd", { XM, Vex, EXx }, 0 },
14004 	 },
14005 	{
14006 	 /* VEX_W_0F5F_P_3  */
14007 	 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
14008 	 },
14009 	{
14010 	 /* VEX_W_0F60_P_2  */
14011 	 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
14012 	 },
14013 	{
14014 	 /* VEX_W_0F61_P_2  */
14015 	 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
14016 	 },
14017 	{
14018 	 /* VEX_W_0F62_P_2  */
14019 	 { "vpunpckldq", { XM, Vex, EXx }, 0 },
14020 	 },
14021 	{
14022 	 /* VEX_W_0F63_P_2  */
14023 	 { "vpacksswb", { XM, Vex, EXx }, 0 },
14024 	 },
14025 	{
14026 	 /* VEX_W_0F64_P_2  */
14027 	 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
14028 	 },
14029 	{
14030 	 /* VEX_W_0F65_P_2  */
14031 	 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
14032 	 },
14033 	{
14034 	 /* VEX_W_0F66_P_2  */
14035 	 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
14036 	 },
14037 	{
14038 	 /* VEX_W_0F67_P_2  */
14039 	 { "vpackuswb", { XM, Vex, EXx }, 0 },
14040 	 },
14041 	{
14042 	 /* VEX_W_0F68_P_2  */
14043 	 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
14044 	 },
14045 	{
14046 	 /* VEX_W_0F69_P_2  */
14047 	 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
14048 	 },
14049 	{
14050 	 /* VEX_W_0F6A_P_2  */
14051 	 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
14052 	 },
14053 	{
14054 	 /* VEX_W_0F6B_P_2  */
14055 	 { "vpackssdw", { XM, Vex, EXx }, 0 },
14056 	 },
14057 	{
14058 	 /* VEX_W_0F6C_P_2  */
14059 	 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
14060 	 },
14061 	{
14062 	 /* VEX_W_0F6D_P_2  */
14063 	 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
14064 	 },
14065 	{
14066 	 /* VEX_W_0F6F_P_1  */
14067 	 { "vmovdqu", { XM, EXx }, 0 },
14068 	 },
14069 	{
14070 	 /* VEX_W_0F6F_P_2  */
14071 	 { "vmovdqa", { XM, EXx }, 0 },
14072 	 },
14073 	{
14074 	 /* VEX_W_0F70_P_1 */
14075 	 { "vpshufhw", { XM, EXx, Ib }, 0 },
14076 	 },
14077 	{
14078 	 /* VEX_W_0F70_P_2 */
14079 	 { "vpshufd", { XM, EXx, Ib }, 0 },
14080 	 },
14081 	{
14082 	 /* VEX_W_0F70_P_3 */
14083 	 { "vpshuflw", { XM, EXx, Ib }, 0 },
14084 	 },
14085 	{
14086 	 /* VEX_W_0F71_R_2_P_2  */
14087 	 { "vpsrlw", { Vex, XS, Ib }, 0 },
14088 	 },
14089 	{
14090 	 /* VEX_W_0F71_R_4_P_2  */
14091 	 { "vpsraw", { Vex, XS, Ib }, 0 },
14092 	 },
14093 	{
14094 	 /* VEX_W_0F71_R_6_P_2  */
14095 	 { "vpsllw", { Vex, XS, Ib }, 0 },
14096 	 },
14097 	{
14098 	 /* VEX_W_0F72_R_2_P_2  */
14099 	 { "vpsrld", { Vex, XS, Ib }, 0 },
14100 	 },
14101 	{
14102 	 /* VEX_W_0F72_R_4_P_2  */
14103 	 { "vpsrad", { Vex, XS, Ib }, 0 },
14104 	 },
14105 	{
14106 	 /* VEX_W_0F72_R_6_P_2  */
14107 	 { "vpslld", { Vex, XS, Ib }, 0 },
14108 	 },
14109 	{
14110 	 /* VEX_W_0F73_R_2_P_2  */
14111 	 { "vpsrlq", { Vex, XS, Ib }, 0 },
14112 	 },
14113 	{
14114 	 /* VEX_W_0F73_R_3_P_2  */
14115 	 { "vpsrldq", { Vex, XS, Ib }, 0 },
14116 	 },
14117 	{
14118 	 /* VEX_W_0F73_R_6_P_2  */
14119 	 { "vpsllq", { Vex, XS, Ib }, 0 },
14120 	 },
14121 	{
14122 	 /* VEX_W_0F73_R_7_P_2  */
14123 	 { "vpslldq", { Vex, XS, Ib }, 0 },
14124 	 },
14125 	{
14126 	 /* VEX_W_0F74_P_2 */
14127 	 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
14128 	 },
14129 	{
14130 	 /* VEX_W_0F75_P_2 */
14131 	 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
14132 	 },
14133 	{
14134 	 /* VEX_W_0F76_P_2 */
14135 	 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
14136 	 },
14137 	{
14138 	 /* VEX_W_0F77_P_0 */
14139 	 { "", { VZERO }, 0 },
14140 	 },
14141 	{
14142 	 /* VEX_W_0F7C_P_2 */
14143 	 { "vhaddpd", { XM, Vex, EXx }, 0 },
14144 	 },
14145 	{
14146 	 /* VEX_W_0F7C_P_3 */
14147 	 { "vhaddps", { XM, Vex, EXx }, 0 },
14148 	 },
14149 	{
14150 	 /* VEX_W_0F7D_P_2 */
14151 	 { "vhsubpd", { XM, Vex, EXx }, 0 },
14152 	 },
14153 	{
14154 	 /* VEX_W_0F7D_P_3 */
14155 	 { "vhsubps", { XM, Vex, EXx }, 0 },
14156 	 },
14157 	{
14158 	 /* VEX_W_0F7E_P_1 */
14159 	 { "vmovq", { XMScalar, EXqScalar }, 0 },
14160 	 },
14161 	{
14162 	 /* VEX_W_0F7F_P_1 */
14163 	 { "vmovdqu", { EXxS, XM }, 0 },
14164 	 },
14165 	{
14166 	 /* VEX_W_0F7F_P_2 */
14167 	 { "vmovdqa", { EXxS, XM }, 0 },
14168 	 },
14169 	{
14170 	 /* VEX_W_0F90_P_0_LEN_0 */
14171 	 { "kmovw", { MaskG, MaskE }, 0 },
14172 	 { "kmovq", { MaskG, MaskE }, 0 },
14173 	 },
14174 	{
14175 	 /* VEX_W_0F90_P_2_LEN_0 */
14176 	 { "kmovb", { MaskG, MaskBDE }, 0 },
14177 	 { "kmovd", { MaskG, MaskBDE }, 0 },
14178 	 },
14179 	{
14180 	 /* VEX_W_0F91_P_0_LEN_0 */
14181 	 { MOD_TABLE(MOD_VEX_W_0_0F91_P_0_LEN_0) },
14182 	 { MOD_TABLE(MOD_VEX_W_1_0F91_P_0_LEN_0) },
14183 	 },
14184 	{
14185 	 /* VEX_W_0F91_P_2_LEN_0 */
14186 	 { MOD_TABLE(MOD_VEX_W_0_0F91_P_2_LEN_0) },
14187 	 { MOD_TABLE(MOD_VEX_W_1_0F91_P_2_LEN_0) },
14188 	 },
14189 	{
14190 	 /* VEX_W_0F92_P_0_LEN_0 */
14191 	 { MOD_TABLE(MOD_VEX_W_0_0F92_P_0_LEN_0) },
14192 	 },
14193 	{
14194 	 /* VEX_W_0F92_P_2_LEN_0 */
14195 	 { MOD_TABLE(MOD_VEX_W_0_0F92_P_2_LEN_0) },
14196 	 },
14197 	{
14198 	 /* VEX_W_0F92_P_3_LEN_0 */
14199 	 { MOD_TABLE(MOD_VEX_W_0_0F92_P_3_LEN_0) },
14200 	 { MOD_TABLE(MOD_VEX_W_1_0F92_P_3_LEN_0) },
14201 	 },
14202 	{
14203 	 /* VEX_W_0F93_P_0_LEN_0 */
14204 	 { MOD_TABLE(MOD_VEX_W_0_0F93_P_0_LEN_0) },
14205 	 },
14206 	{
14207 	 /* VEX_W_0F93_P_2_LEN_0 */
14208 	 { MOD_TABLE(MOD_VEX_W_0_0F93_P_2_LEN_0) },
14209 	 },
14210 	{
14211 	 /* VEX_W_0F93_P_3_LEN_0 */
14212 	 { MOD_TABLE(MOD_VEX_W_0_0F93_P_3_LEN_0) },
14213 	 { MOD_TABLE(MOD_VEX_W_1_0F93_P_3_LEN_0) },
14214 	 },
14215 	{
14216 	 /* VEX_W_0F98_P_0_LEN_0 */
14217 	 { MOD_TABLE(MOD_VEX_W_0_0F98_P_0_LEN_0) },
14218 	 { MOD_TABLE(MOD_VEX_W_1_0F98_P_0_LEN_0) },
14219 	 },
14220 	{
14221 	 /* VEX_W_0F98_P_2_LEN_0 */
14222 	 { MOD_TABLE(MOD_VEX_W_0_0F98_P_2_LEN_0) },
14223 	 { MOD_TABLE(MOD_VEX_W_1_0F98_P_2_LEN_0) },
14224 	 },
14225 	{
14226 	 /* VEX_W_0F99_P_0_LEN_0 */
14227 	 { MOD_TABLE(MOD_VEX_W_0_0F99_P_0_LEN_0) },
14228 	 { MOD_TABLE(MOD_VEX_W_1_0F99_P_0_LEN_0) },
14229 	 },
14230 	{
14231 	 /* VEX_W_0F99_P_2_LEN_0 */
14232 	 { MOD_TABLE(MOD_VEX_W_0_0F99_P_2_LEN_0) },
14233 	 { MOD_TABLE(MOD_VEX_W_1_0F99_P_2_LEN_0) },
14234 	 },
14235 	{
14236 	 /* VEX_W_0FAE_R_2_M_0 */
14237 	 { "vldmxcsr", { Md }, 0 },
14238 	 },
14239 	{
14240 	 /* VEX_W_0FAE_R_3_M_0 */
14241 	 { "vstmxcsr", { Md }, 0 },
14242 	 },
14243 	{
14244 	 /* VEX_W_0FC2_P_0 */
14245 	 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
14246 	 },
14247 	{
14248 	 /* VEX_W_0FC2_P_1 */
14249 	 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
14250 	 },
14251 	{
14252 	 /* VEX_W_0FC2_P_2 */
14253 	 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
14254 	 },
14255 	{
14256 	 /* VEX_W_0FC2_P_3 */
14257 	 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
14258 	 },
14259 	{
14260 	 /* VEX_W_0FC4_P_2 */
14261 	 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
14262 	 },
14263 	{
14264 	 /* VEX_W_0FC5_P_2 */
14265 	 { "vpextrw", { Gdq, XS, Ib }, 0 },
14266 	 },
14267 	{
14268 	 /* VEX_W_0FD0_P_2 */
14269 	 { "vaddsubpd", { XM, Vex, EXx }, 0 },
14270 	 },
14271 	{
14272 	 /* VEX_W_0FD0_P_3 */
14273 	 { "vaddsubps", { XM, Vex, EXx }, 0 },
14274 	 },
14275 	{
14276 	 /* VEX_W_0FD1_P_2 */
14277 	 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
14278 	 },
14279 	{
14280 	 /* VEX_W_0FD2_P_2 */
14281 	 { "vpsrld", { XM, Vex, EXxmm }, 0 },
14282 	 },
14283 	{
14284 	 /* VEX_W_0FD3_P_2 */
14285 	 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
14286 	 },
14287 	{
14288 	 /* VEX_W_0FD4_P_2 */
14289 	 { "vpaddq", { XM, Vex, EXx }, 0 },
14290 	 },
14291 	{
14292 	 /* VEX_W_0FD5_P_2 */
14293 	 { "vpmullw", { XM, Vex, EXx }, 0 },
14294 	 },
14295 	{
14296 	 /* VEX_W_0FD6_P_2 */
14297 	 { "vmovq", { EXqScalarS, XMScalar }, 0 },
14298 	 },
14299 	{
14300 	 /* VEX_W_0FD7_P_2_M_1 */
14301 	 { "vpmovmskb", { Gdq, XS }, 0 },
14302 	 },
14303 	{
14304 	 /* VEX_W_0FD8_P_2 */
14305 	 { "vpsubusb", { XM, Vex, EXx }, 0 },
14306 	 },
14307 	{
14308 	 /* VEX_W_0FD9_P_2 */
14309 	 { "vpsubusw", { XM, Vex, EXx }, 0 },
14310 	 },
14311 	{
14312 	 /* VEX_W_0FDA_P_2 */
14313 	 { "vpminub", { XM, Vex, EXx }, 0 },
14314 	 },
14315 	{
14316 	 /* VEX_W_0FDB_P_2 */
14317 	 { "vpand", { XM, Vex, EXx }, 0 },
14318 	 },
14319 	{
14320 	 /* VEX_W_0FDC_P_2 */
14321 	 { "vpaddusb", { XM, Vex, EXx }, 0 },
14322 	 },
14323 	{
14324 	 /* VEX_W_0FDD_P_2 */
14325 	 { "vpaddusw", { XM, Vex, EXx }, 0 },
14326 	 },
14327 	{
14328 	 /* VEX_W_0FDE_P_2 */
14329 	 { "vpmaxub", { XM, Vex, EXx }, 0 },
14330 	 },
14331 	{
14332 	 /* VEX_W_0FDF_P_2 */
14333 	 { "vpandn", { XM, Vex, EXx }, 0 },
14334 	 },
14335 	{
14336 	 /* VEX_W_0FE0_P_2  */
14337 	 { "vpavgb", { XM, Vex, EXx }, 0 },
14338 	 },
14339 	{
14340 	 /* VEX_W_0FE1_P_2  */
14341 	 { "vpsraw", { XM, Vex, EXxmm }, 0 },
14342 	 },
14343 	{
14344 	 /* VEX_W_0FE2_P_2  */
14345 	 { "vpsrad", { XM, Vex, EXxmm }, 0 },
14346 	 },
14347 	{
14348 	 /* VEX_W_0FE3_P_2  */
14349 	 { "vpavgw", { XM, Vex, EXx }, 0 },
14350 	 },
14351 	{
14352 	 /* VEX_W_0FE4_P_2  */
14353 	 { "vpmulhuw", { XM, Vex, EXx }, 0 },
14354 	 },
14355 	{
14356 	 /* VEX_W_0FE5_P_2  */
14357 	 { "vpmulhw", { XM, Vex, EXx }, 0 },
14358 	 },
14359 	{
14360 	 /* VEX_W_0FE6_P_1  */
14361 	 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
14362 	 },
14363 	{
14364 	 /* VEX_W_0FE6_P_2  */
14365 	 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
14366 	 },
14367 	{
14368 	 /* VEX_W_0FE6_P_3  */
14369 	 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
14370 	 },
14371 	{
14372 	 /* VEX_W_0FE7_P_2_M_0 */
14373 	 { "vmovntdq", { Mx, XM }, 0 },
14374 	 },
14375 	{
14376 	 /* VEX_W_0FE8_P_2  */
14377 	 { "vpsubsb", { XM, Vex, EXx }, 0 },
14378 	 },
14379 	{
14380 	 /* VEX_W_0FE9_P_2  */
14381 	 { "vpsubsw", { XM, Vex, EXx }, 0 },
14382 	 },
14383 	{
14384 	 /* VEX_W_0FEA_P_2  */
14385 	 { "vpminsw", { XM, Vex, EXx }, 0 },
14386 	 },
14387 	{
14388 	 /* VEX_W_0FEB_P_2  */
14389 	 { "vpor", { XM, Vex, EXx }, 0 },
14390 	 },
14391 	{
14392 	 /* VEX_W_0FEC_P_2  */
14393 	 { "vpaddsb", { XM, Vex, EXx }, 0 },
14394 	 },
14395 	{
14396 	 /* VEX_W_0FED_P_2  */
14397 	 { "vpaddsw", { XM, Vex, EXx }, 0 },
14398 	 },
14399 	{
14400 	 /* VEX_W_0FEE_P_2  */
14401 	 { "vpmaxsw", { XM, Vex, EXx }, 0 },
14402 	 },
14403 	{
14404 	 /* VEX_W_0FEF_P_2  */
14405 	 { "vpxor", { XM, Vex, EXx }, 0 },
14406 	 },
14407 	{
14408 	 /* VEX_W_0FF0_P_3_M_0 */
14409 	 { "vlddqu", { XM, M }, 0 },
14410 	 },
14411 	{
14412 	 /* VEX_W_0FF1_P_2 */
14413 	 { "vpsllw", { XM, Vex, EXxmm }, 0 },
14414 	 },
14415 	{
14416 	 /* VEX_W_0FF2_P_2 */
14417 	 { "vpslld", { XM, Vex, EXxmm }, 0 },
14418 	 },
14419 	{
14420 	 /* VEX_W_0FF3_P_2 */
14421 	 { "vpsllq", { XM, Vex, EXxmm }, 0 },
14422 	 },
14423 	{
14424 	 /* VEX_W_0FF4_P_2 */
14425 	 { "vpmuludq", { XM, Vex, EXx }, 0 },
14426 	 },
14427 	{
14428 	 /* VEX_W_0FF5_P_2 */
14429 	 { "vpmaddwd", { XM, Vex, EXx }, 0 },
14430 	 },
14431 	{
14432 	 /* VEX_W_0FF6_P_2 */
14433 	 { "vpsadbw", { XM, Vex, EXx }, 0 },
14434 	 },
14435 	{
14436 	 /* VEX_W_0FF7_P_2 */
14437 	 { "vmaskmovdqu", { XM, XS }, 0 },
14438 	 },
14439 	{
14440 	 /* VEX_W_0FF8_P_2 */
14441 	 { "vpsubb", { XM, Vex, EXx }, 0 },
14442 	 },
14443 	{
14444 	 /* VEX_W_0FF9_P_2 */
14445 	 { "vpsubw", { XM, Vex, EXx }, 0 },
14446 	 },
14447 	{
14448 	 /* VEX_W_0FFA_P_2 */
14449 	 { "vpsubd", { XM, Vex, EXx }, 0 },
14450 	 },
14451 	{
14452 	 /* VEX_W_0FFB_P_2 */
14453 	 { "vpsubq", { XM, Vex, EXx }, 0 },
14454 	 },
14455 	{
14456 	 /* VEX_W_0FFC_P_2 */
14457 	 { "vpaddb", { XM, Vex, EXx }, 0 },
14458 	 },
14459 	{
14460 	 /* VEX_W_0FFD_P_2 */
14461 	 { "vpaddw", { XM, Vex, EXx }, 0 },
14462 	 },
14463 	{
14464 	 /* VEX_W_0FFE_P_2 */
14465 	 { "vpaddd", { XM, Vex, EXx }, 0 },
14466 	 },
14467 	{
14468 	 /* VEX_W_0F3800_P_2  */
14469 	 { "vpshufb", { XM, Vex, EXx }, 0 },
14470 	 },
14471 	{
14472 	 /* VEX_W_0F3801_P_2  */
14473 	 { "vphaddw", { XM, Vex, EXx }, 0 },
14474 	 },
14475 	{
14476 	 /* VEX_W_0F3802_P_2  */
14477 	 { "vphaddd", { XM, Vex, EXx }, 0 },
14478 	 },
14479 	{
14480 	 /* VEX_W_0F3803_P_2  */
14481 	 { "vphaddsw", { XM, Vex, EXx }, 0 },
14482 	 },
14483 	{
14484 	 /* VEX_W_0F3804_P_2  */
14485 	 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
14486 	 },
14487 	{
14488 	 /* VEX_W_0F3805_P_2  */
14489 	 { "vphsubw", { XM, Vex, EXx }, 0 },
14490 	 },
14491 	{
14492 	 /* VEX_W_0F3806_P_2  */
14493 	 { "vphsubd", { XM, Vex, EXx }, 0 },
14494 	 },
14495 	{
14496 	 /* VEX_W_0F3807_P_2  */
14497 	 { "vphsubsw", { XM, Vex, EXx }, 0 },
14498 	 },
14499 	{
14500 	 /* VEX_W_0F3808_P_2  */
14501 	 { "vpsignb", { XM, Vex, EXx }, 0 },
14502 	 },
14503 	{
14504 	 /* VEX_W_0F3809_P_2  */
14505 	 { "vpsignw", { XM, Vex, EXx }, 0 },
14506 	 },
14507 	{
14508 	 /* VEX_W_0F380A_P_2  */
14509 	 { "vpsignd", { XM, Vex, EXx }, 0 },
14510 	 },
14511 	{
14512 	 /* VEX_W_0F380B_P_2  */
14513 	 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
14514 	 },
14515 	{
14516 	 /* VEX_W_0F380C_P_2  */
14517 	 { "vpermilps", { XM, Vex, EXx }, 0 },
14518 	 },
14519 	{
14520 	 /* VEX_W_0F380D_P_2  */
14521 	 { "vpermilpd", { XM, Vex, EXx }, 0 },
14522 	 },
14523 	{
14524 	 /* VEX_W_0F380E_P_2  */
14525 	 { "vtestps", { XM, EXx }, 0 },
14526 	 },
14527 	{
14528 	 /* VEX_W_0F380F_P_2  */
14529 	 { "vtestpd", { XM, EXx }, 0 },
14530 	 },
14531 	{
14532 	 /* VEX_W_0F3816_P_2  */
14533 	 { "vpermps", { XM, Vex, EXx }, 0 },
14534 	 },
14535 	{
14536 	 /* VEX_W_0F3817_P_2 */
14537 	 { "vptest", { XM, EXx }, 0 },
14538 	 },
14539 	{
14540 	 /* VEX_W_0F3818_P_2 */
14541 	 { "vbroadcastss", { XM, EXxmm_md }, 0 },
14542 	 },
14543 	{
14544 	 /* VEX_W_0F3819_P_2 */
14545 	 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
14546 	 },
14547 	{
14548 	 /* VEX_W_0F381A_P_2_M_0 */
14549 	 { "vbroadcastf128", { XM, Mxmm }, 0 },
14550 	 },
14551 	{
14552 	 /* VEX_W_0F381C_P_2 */
14553 	 { "vpabsb", { XM, EXx }, 0 },
14554 	 },
14555 	{
14556 	 /* VEX_W_0F381D_P_2 */
14557 	 { "vpabsw", { XM, EXx }, 0 },
14558 	 },
14559 	{
14560 	 /* VEX_W_0F381E_P_2 */
14561 	 { "vpabsd", { XM, EXx }, 0 },
14562 	 },
14563 	{
14564 	 /* VEX_W_0F3820_P_2 */
14565 	 { "vpmovsxbw", { XM, EXxmmq }, 0 },
14566 	 },
14567 	{
14568 	 /* VEX_W_0F3821_P_2 */
14569 	 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
14570 	 },
14571 	{
14572 	 /* VEX_W_0F3822_P_2 */
14573 	 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
14574 	 },
14575 	{
14576 	 /* VEX_W_0F3823_P_2 */
14577 	 { "vpmovsxwd", { XM, EXxmmq }, 0 },
14578 	 },
14579 	{
14580 	 /* VEX_W_0F3824_P_2 */
14581 	 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
14582 	 },
14583 	{
14584 	 /* VEX_W_0F3825_P_2 */
14585 	 { "vpmovsxdq", { XM, EXxmmq }, 0 },
14586 	 },
14587 	{
14588 	 /* VEX_W_0F3828_P_2 */
14589 	 { "vpmuldq", { XM, Vex, EXx }, 0 },
14590 	 },
14591 	{
14592 	 /* VEX_W_0F3829_P_2 */
14593 	 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
14594 	 },
14595 	{
14596 	 /* VEX_W_0F382A_P_2_M_0 */
14597 	 { "vmovntdqa", { XM, Mx }, 0 },
14598 	 },
14599 	{
14600 	 /* VEX_W_0F382B_P_2 */
14601 	 { "vpackusdw", { XM, Vex, EXx }, 0 },
14602 	 },
14603 	{
14604 	 /* VEX_W_0F382C_P_2_M_0 */
14605 	 { "vmaskmovps", { XM, Vex, Mx }, 0 },
14606 	 },
14607 	{
14608 	 /* VEX_W_0F382D_P_2_M_0 */
14609 	 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
14610 	 },
14611 	{
14612 	 /* VEX_W_0F382E_P_2_M_0 */
14613 	 { "vmaskmovps", { Mx, Vex, XM }, 0 },
14614 	 },
14615 	{
14616 	 /* VEX_W_0F382F_P_2_M_0 */
14617 	 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
14618 	 },
14619 	{
14620 	 /* VEX_W_0F3830_P_2 */
14621 	 { "vpmovzxbw", { XM, EXxmmq }, 0 },
14622 	 },
14623 	{
14624 	 /* VEX_W_0F3831_P_2 */
14625 	 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
14626 	 },
14627 	{
14628 	 /* VEX_W_0F3832_P_2 */
14629 	 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
14630 	 },
14631 	{
14632 	 /* VEX_W_0F3833_P_2 */
14633 	 { "vpmovzxwd", { XM, EXxmmq }, 0 },
14634 	 },
14635 	{
14636 	 /* VEX_W_0F3834_P_2 */
14637 	 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
14638 	 },
14639 	{
14640 	 /* VEX_W_0F3835_P_2 */
14641 	 { "vpmovzxdq", { XM, EXxmmq }, 0 },
14642 	 },
14643 	{
14644 	 /* VEX_W_0F3836_P_2  */
14645 	 { "vpermd", { XM, Vex, EXx }, 0 },
14646 	 },
14647 	{
14648 	 /* VEX_W_0F3837_P_2 */
14649 	 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
14650 	 },
14651 	{
14652 	 /* VEX_W_0F3838_P_2 */
14653 	 { "vpminsb", { XM, Vex, EXx }, 0 },
14654 	 },
14655 	{
14656 	 /* VEX_W_0F3839_P_2 */
14657 	 { "vpminsd", { XM, Vex, EXx }, 0 },
14658 	 },
14659 	{
14660 	 /* VEX_W_0F383A_P_2 */
14661 	 { "vpminuw", { XM, Vex, EXx }, 0 },
14662 	 },
14663 	{
14664 	 /* VEX_W_0F383B_P_2 */
14665 	 { "vpminud", { XM, Vex, EXx }, 0 },
14666 	 },
14667 	{
14668 	 /* VEX_W_0F383C_P_2 */
14669 	 { "vpmaxsb", { XM, Vex, EXx }, 0 },
14670 	 },
14671 	{
14672 	 /* VEX_W_0F383D_P_2 */
14673 	 { "vpmaxsd", { XM, Vex, EXx }, 0 },
14674 	 },
14675 	{
14676 	 /* VEX_W_0F383E_P_2 */
14677 	 { "vpmaxuw", { XM, Vex, EXx }, 0 },
14678 	 },
14679 	{
14680 	 /* VEX_W_0F383F_P_2 */
14681 	 { "vpmaxud", { XM, Vex, EXx }, 0 },
14682 	 },
14683 	{
14684 	 /* VEX_W_0F3840_P_2 */
14685 	 { "vpmulld", { XM, Vex, EXx }, 0 },
14686 	 },
14687 	{
14688 	 /* VEX_W_0F3841_P_2 */
14689 	 { "vphminposuw", { XM, EXx }, 0 },
14690 	 },
14691 	{
14692 	 /* VEX_W_0F3846_P_2 */
14693 	 { "vpsravd", { XM, Vex, EXx }, 0 },
14694 	 },
14695 	{
14696 	 /* VEX_W_0F3858_P_2 */
14697 	 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
14698 	 },
14699 	{
14700 	 /* VEX_W_0F3859_P_2 */
14701 	 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
14702 	 },
14703 	{
14704 	 /* VEX_W_0F385A_P_2_M_0 */
14705 	 { "vbroadcasti128", { XM, Mxmm }, 0 },
14706 	 },
14707 	{
14708 	 /* VEX_W_0F3878_P_2 */
14709 	 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
14710 	 },
14711 	{
14712 	 /* VEX_W_0F3879_P_2 */
14713 	 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
14714 	 },
14715 	{
14716 	 /* VEX_W_0F38DB_P_2 */
14717 	 { "vaesimc", { XM, EXx }, 0 },
14718 	 },
14719 	{
14720 	 /* VEX_W_0F38DC_P_2 */
14721 	 { "vaesenc", { XM, Vex128, EXx }, 0 },
14722 	 },
14723 	{
14724 	 /* VEX_W_0F38DD_P_2 */
14725 	 { "vaesenclast", { XM, Vex128, EXx }, 0 },
14726 	 },
14727 	{
14728 	 /* VEX_W_0F38DE_P_2 */
14729 	 { "vaesdec", { XM, Vex128, EXx }, 0 },
14730 	 },
14731 	{
14732 	 /* VEX_W_0F38DF_P_2 */
14733 	 { "vaesdeclast", { XM, Vex128, EXx }, 0 },
14734 	 },
14735 	{
14736 	 /* VEX_W_0F3A00_P_2 */
14737 	 { Bad_Opcode },
14738 	 { "vpermq", { XM, EXx, Ib }, 0 },
14739 	 },
14740 	{
14741 	 /* VEX_W_0F3A01_P_2 */
14742 	 { Bad_Opcode },
14743 	 { "vpermpd", { XM, EXx, Ib }, 0 },
14744 	 },
14745 	{
14746 	 /* VEX_W_0F3A02_P_2 */
14747 	 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
14748 	 },
14749 	{
14750 	 /* VEX_W_0F3A04_P_2 */
14751 	 { "vpermilps", { XM, EXx, Ib }, 0 },
14752 	 },
14753 	{
14754 	 /* VEX_W_0F3A05_P_2 */
14755 	 { "vpermilpd", { XM, EXx, Ib }, 0 },
14756 	 },
14757 	{
14758 	 /* VEX_W_0F3A06_P_2 */
14759 	 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
14760 	 },
14761 	{
14762 	 /* VEX_W_0F3A08_P_2 */
14763 	 { "vroundps", { XM, EXx, Ib }, 0 },
14764 	 },
14765 	{
14766 	 /* VEX_W_0F3A09_P_2 */
14767 	 { "vroundpd", { XM, EXx, Ib }, 0 },
14768 	 },
14769 	{
14770 	 /* VEX_W_0F3A0A_P_2 */
14771 	 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
14772 	 },
14773 	{
14774 	 /* VEX_W_0F3A0B_P_2 */
14775 	 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
14776 	 },
14777 	{
14778 	 /* VEX_W_0F3A0C_P_2 */
14779 	 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
14780 	 },
14781 	{
14782 	 /* VEX_W_0F3A0D_P_2 */
14783 	 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
14784 	 },
14785 	{
14786 	 /* VEX_W_0F3A0E_P_2 */
14787 	 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
14788 	 },
14789 	{
14790 	 /* VEX_W_0F3A0F_P_2 */
14791 	 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
14792 	 },
14793 	{
14794 	 /* VEX_W_0F3A14_P_2 */
14795 	 { "vpextrb", { Edqb, XM, Ib }, 0 },
14796 	 },
14797 	{
14798 	 /* VEX_W_0F3A15_P_2 */
14799 	 { "vpextrw", { Edqw, XM, Ib }, 0 },
14800 	 },
14801 	{
14802 	 /* VEX_W_0F3A18_P_2 */
14803 	 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
14804 	 },
14805 	{
14806 	 /* VEX_W_0F3A19_P_2 */
14807 	 { "vextractf128", { EXxmm, XM, Ib }, 0 },
14808 	 },
14809 	{
14810 	 /* VEX_W_0F3A20_P_2 */
14811 	 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
14812 	 },
14813 	{
14814 	 /* VEX_W_0F3A21_P_2 */
14815 	 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
14816 	 },
14817 	{
14818 	 /* VEX_W_0F3A30_P_2_LEN_0 */
14819 	 { MOD_TABLE(MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
14820 	 { MOD_TABLE(MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
14821 	 },
14822 	{
14823 	 /* VEX_W_0F3A31_P_2_LEN_0 */
14824 	 { MOD_TABLE(MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
14825 	 { MOD_TABLE(MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
14826 	 },
14827 	{
14828 	 /* VEX_W_0F3A32_P_2_LEN_0 */
14829 	 { MOD_TABLE(MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
14830 	 { MOD_TABLE(MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
14831 	 },
14832 	{
14833 	 /* VEX_W_0F3A33_P_2_LEN_0 */
14834 	 { MOD_TABLE(MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
14835 	 { MOD_TABLE(MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
14836 	 },
14837 	{
14838 	 /* VEX_W_0F3A38_P_2 */
14839 	 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
14840 	 },
14841 	{
14842 	 /* VEX_W_0F3A39_P_2 */
14843 	 { "vextracti128", { EXxmm, XM, Ib }, 0 },
14844 	 },
14845 	{
14846 	 /* VEX_W_0F3A40_P_2 */
14847 	 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
14848 	 },
14849 	{
14850 	 /* VEX_W_0F3A41_P_2 */
14851 	 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
14852 	 },
14853 	{
14854 	 /* VEX_W_0F3A42_P_2 */
14855 	 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
14856 	 },
14857 	{
14858 	 /* VEX_W_0F3A44_P_2 */
14859 	 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL }, 0 },
14860 	 },
14861 	{
14862 	 /* VEX_W_0F3A46_P_2 */
14863 	 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
14864 	 },
14865 	{
14866 	 /* VEX_W_0F3A48_P_2 */
14867 	 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
14868 	 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
14869 	 },
14870 	{
14871 	 /* VEX_W_0F3A49_P_2 */
14872 	 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
14873 	 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
14874 	 },
14875 	{
14876 	 /* VEX_W_0F3A4A_P_2 */
14877 	 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
14878 	 },
14879 	{
14880 	 /* VEX_W_0F3A4B_P_2 */
14881 	 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
14882 	 },
14883 	{
14884 	 /* VEX_W_0F3A4C_P_2 */
14885 	 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
14886 	 },
14887 	{
14888 	 /* VEX_W_0F3A60_P_2 */
14889 	 { "vpcmpestrm", { XM, EXx, Ib }, 0 },
14890 	 },
14891 	{
14892 	 /* VEX_W_0F3A61_P_2 */
14893 	 { "vpcmpestri", { XM, EXx, Ib }, 0 },
14894 	 },
14895 	{
14896 	 /* VEX_W_0F3A62_P_2 */
14897 	 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
14898 	 },
14899 	{
14900 	 /* VEX_W_0F3A63_P_2 */
14901 	 { "vpcmpistri", { XM, EXx, Ib }, 0 },
14902 	 },
14903 	{
14904 	 /* VEX_W_0F3ADF_P_2 */
14905 	 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
14906 	 },
14907 #define NEED_VEX_W_TABLE
14908 #include "i386-dis-evex.h"
14909 #undef NEED_VEX_W_TABLE
14910 };
14911 
14912 static const struct dis386 mod_table[][2] = {
14913 	{
14914 	 /* MOD_8D */
14915 	 { "leaS", { Gv, M }, 0 },
14916 	 },
14917 	{
14918 	 /* MOD_C6_REG_7 */
14919 	 { Bad_Opcode },
14920 	 { RM_TABLE(RM_C6_REG_7) },
14921 	 },
14922 	{
14923 	 /* MOD_C7_REG_7 */
14924 	 { Bad_Opcode },
14925 	 { RM_TABLE(RM_C7_REG_7) },
14926 	 },
14927 	{
14928 	 /* MOD_FF_REG_3 */
14929 	 { "Jcall^", { indirEp }, 0 },
14930 	 },
14931 	{
14932 	 /* MOD_FF_REG_5 */
14933 	 { "Jjmp^", { indirEp }, 0 },
14934 	 },
14935 	{
14936 	 /* MOD_0F01_REG_0 */
14937 	 { X86_64_TABLE(X86_64_0F01_REG_0) },
14938 	 { RM_TABLE(RM_0F01_REG_0) },
14939 	 },
14940 	{
14941 	 /* MOD_0F01_REG_1 */
14942 	 { X86_64_TABLE(X86_64_0F01_REG_1) },
14943 	 { RM_TABLE(RM_0F01_REG_1) },
14944 	 },
14945 	{
14946 	 /* MOD_0F01_REG_2 */
14947 	 { X86_64_TABLE(X86_64_0F01_REG_2) },
14948 	 { RM_TABLE(RM_0F01_REG_2) },
14949 	 },
14950 	{
14951 	 /* MOD_0F01_REG_3 */
14952 	 { X86_64_TABLE(X86_64_0F01_REG_3) },
14953 	 { RM_TABLE(RM_0F01_REG_3) },
14954 	 },
14955 	{
14956 	 /* MOD_0F01_REG_5 */
14957 	 { Bad_Opcode },
14958 	 { RM_TABLE(RM_0F01_REG_5) },
14959 	 },
14960 	{
14961 	 /* MOD_0F01_REG_7 */
14962 	 { "invlpg", { Mb }, 0 },
14963 	 { RM_TABLE(RM_0F01_REG_7) },
14964 	 },
14965 	{
14966 	 /* MOD_0F12_PREFIX_0 */
14967 	 { "movlps", { XM, EXq }, PREFIX_OPCODE },
14968 	 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
14969 	 },
14970 	{
14971 	 /* MOD_0F13 */
14972 	 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
14973 	 },
14974 	{
14975 	 /* MOD_0F16_PREFIX_0 */
14976 	 { "movhps", { XM, EXq }, 0 },
14977 	 { "movlhps", { XM, EXq }, 0 },
14978 	 },
14979 	{
14980 	 /* MOD_0F17 */
14981 	 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
14982 	 },
14983 	{
14984 	 /* MOD_0F18_REG_0 */
14985 	 { "prefetchnta", { Mb }, 0 },
14986 	 },
14987 	{
14988 	 /* MOD_0F18_REG_1 */
14989 	 { "prefetcht0", { Mb }, 0 },
14990 	 },
14991 	{
14992 	 /* MOD_0F18_REG_2 */
14993 	 { "prefetcht1", { Mb }, 0 },
14994 	 },
14995 	{
14996 	 /* MOD_0F18_REG_3 */
14997 	 { "prefetcht2", { Mb }, 0 },
14998 	 },
14999 	{
15000 	 /* MOD_0F18_REG_4 */
15001 	 { "nop/reserved", { Mb }, 0 },
15002 	 },
15003 	{
15004 	 /* MOD_0F18_REG_5 */
15005 	 { "nop/reserved", { Mb }, 0 },
15006 	 },
15007 	{
15008 	 /* MOD_0F18_REG_6 */
15009 	 { "nop/reserved", { Mb }, 0 },
15010 	 },
15011 	{
15012 	 /* MOD_0F18_REG_7 */
15013 	 { "nop/reserved", { Mb }, 0 },
15014 	 },
15015 	{
15016 	 /* MOD_0F1A_PREFIX_0 */
15017 	 { "bndldx", { Gbnd, Ev_bnd }, 0 },
15018 	 { "nopQ", { Ev }, 0 },
15019 	 },
15020 	{
15021 	 /* MOD_0F1B_PREFIX_0 */
15022 	 { "bndstx", { Ev_bnd, Gbnd }, 0 },
15023 	 { "nopQ", { Ev }, 0 },
15024 	 },
15025 	{
15026 	 /* MOD_0F1B_PREFIX_1 */
15027 	 { "bndmk", { Gbnd, Ev_bnd }, 0 },
15028 	 { "nopQ", { Ev }, 0 },
15029 	 },
15030 	{
15031 	 /* MOD_0F24 */
15032 	 { Bad_Opcode },
15033 	 { "movL", { Rd, Td }, 0 },
15034 	 },
15035 	{
15036 	 /* MOD_0F26 */
15037 	 { Bad_Opcode },
15038 	 { "movL", { Td, Rd }, 0 },
15039 	 },
15040 	{
15041 	 /* MOD_0F2B_PREFIX_0 */
15042 	 { "movntps", { Mx, XM }, PREFIX_OPCODE },
15043 	 },
15044 	{
15045 	 /* MOD_0F2B_PREFIX_1 */
15046 	 { "movntss", { Md, XM }, PREFIX_OPCODE },
15047 	 },
15048 	{
15049 	 /* MOD_0F2B_PREFIX_2 */
15050 	 { "movntpd", { Mx, XM }, PREFIX_OPCODE },
15051 	 },
15052 	{
15053 	 /* MOD_0F2B_PREFIX_3 */
15054 	 { "movntsd", { Mq, XM }, PREFIX_OPCODE },
15055 	 },
15056 	{
15057 	 /* MOD_0F51 */
15058 	 { Bad_Opcode },
15059 	 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
15060 	 },
15061 	{
15062 	 /* MOD_0F71_REG_2 */
15063 	 { Bad_Opcode },
15064 	 { "psrlw", { MS, Ib }, 0 },
15065 	 },
15066 	{
15067 	 /* MOD_0F71_REG_4 */
15068 	 { Bad_Opcode },
15069 	 { "psraw", { MS, Ib }, 0 },
15070 	 },
15071 	{
15072 	 /* MOD_0F71_REG_6 */
15073 	 { Bad_Opcode },
15074 	 { "psllw", { MS, Ib }, 0 },
15075 	 },
15076 	{
15077 	 /* MOD_0F72_REG_2 */
15078 	 { Bad_Opcode },
15079 	 { "psrld", { MS, Ib }, 0 },
15080 	 },
15081 	{
15082 	 /* MOD_0F72_REG_4 */
15083 	 { Bad_Opcode },
15084 	 { "psrad", { MS, Ib }, 0 },
15085 	 },
15086 	{
15087 	 /* MOD_0F72_REG_6 */
15088 	 { Bad_Opcode },
15089 	 { "pslld", { MS, Ib }, 0 },
15090 	 },
15091 	{
15092 	 /* MOD_0F73_REG_2 */
15093 	 { Bad_Opcode },
15094 	 { "psrlq", { MS, Ib }, 0 },
15095 	 },
15096 	{
15097 	 /* MOD_0F73_REG_3 */
15098 	 { Bad_Opcode },
15099 	 { PREFIX_TABLE(PREFIX_0F73_REG_3) },
15100 	 },
15101 	{
15102 	 /* MOD_0F73_REG_6 */
15103 	 { Bad_Opcode },
15104 	 { "psllq", { MS, Ib }, 0 },
15105 	 },
15106 	{
15107 	 /* MOD_0F73_REG_7 */
15108 	 { Bad_Opcode },
15109 	 { PREFIX_TABLE(PREFIX_0F73_REG_7) },
15110 	 },
15111 	{
15112 	 /* MOD_0FAE_REG_0 */
15113 	 { "fxsave", { FXSAVE }, 0 },
15114 	 { PREFIX_TABLE(PREFIX_0FAE_REG_0) },
15115 	 },
15116 	{
15117 	 /* MOD_0FAE_REG_1 */
15118 	 { "fxrstor", { FXSAVE }, 0 },
15119 	 { PREFIX_TABLE(PREFIX_0FAE_REG_1) },
15120 	 },
15121 	{
15122 	 /* MOD_0FAE_REG_2 */
15123 	 { "ldmxcsr", { Md }, 0 },
15124 	 { PREFIX_TABLE(PREFIX_0FAE_REG_2) },
15125 	 },
15126 	{
15127 	 /* MOD_0FAE_REG_3 */
15128 	 { "stmxcsr", { Md }, 0 },
15129 	 { PREFIX_TABLE(PREFIX_0FAE_REG_3) },
15130 	 },
15131 	{
15132 	 /* MOD_0FAE_REG_4 */
15133 	 { PREFIX_TABLE(PREFIX_MOD_0_0FAE_REG_4) },
15134 	 { PREFIX_TABLE(PREFIX_MOD_3_0FAE_REG_4) },
15135 	 },
15136 	{
15137 	 /* MOD_0FAE_REG_5 */
15138 	 { "xrstor", { FXSAVE }, 0 },
15139 	 { RM_TABLE(RM_0FAE_REG_5) },
15140 	 },
15141 	{
15142 	 /* MOD_0FAE_REG_6 */
15143 	 { PREFIX_TABLE(PREFIX_0FAE_REG_6) },
15144 	 { RM_TABLE(RM_0FAE_REG_6) },
15145 	 },
15146 	{
15147 	 /* MOD_0FAE_REG_7 */
15148 	 { PREFIX_TABLE(PREFIX_0FAE_REG_7) },
15149 	 { RM_TABLE(RM_0FAE_REG_7) },
15150 	 },
15151 	{
15152 	 /* MOD_0FB2 */
15153 	 { "lssS", { Gv, Mp }, 0 },
15154 	 },
15155 	{
15156 	 /* MOD_0FB4 */
15157 	 { "lfsS", { Gv, Mp }, 0 },
15158 	 },
15159 	{
15160 	 /* MOD_0FB5 */
15161 	 { "lgsS", { Gv, Mp }, 0 },
15162 	 },
15163 	{
15164 	 /* MOD_0FC3 */
15165 	 { PREFIX_TABLE(PREFIX_MOD_0_0FC3) },
15166 	 },
15167 	{
15168 	 /* MOD_0FC7_REG_3 */
15169 	 { "xrstors", { FXSAVE }, 0 },
15170 	 },
15171 	{
15172 	 /* MOD_0FC7_REG_4 */
15173 	 { "xsavec", { FXSAVE }, 0 },
15174 	 },
15175 	{
15176 	 /* MOD_0FC7_REG_5 */
15177 	 { "xsaves", { FXSAVE }, 0 },
15178 	 },
15179 	{
15180 	 /* MOD_0FC7_REG_6 */
15181 	 { PREFIX_TABLE(PREFIX_MOD_0_0FC7_REG_6) },
15182 	 { PREFIX_TABLE(PREFIX_MOD_3_0FC7_REG_6) }
15183 	 },
15184 	{
15185 	 /* MOD_0FC7_REG_7 */
15186 	 { "vmptrst", { Mq }, 0 },
15187 	 { PREFIX_TABLE(PREFIX_MOD_3_0FC7_REG_7) }
15188 	 },
15189 	{
15190 	 /* MOD_0FD7 */
15191 	 { Bad_Opcode },
15192 	 { "pmovmskb", { Gdq, MS }, 0 },
15193 	 },
15194 	{
15195 	 /* MOD_0FE7_PREFIX_2 */
15196 	 { "movntdq", { Mx, XM }, 0 },
15197 	 },
15198 	{
15199 	 /* MOD_0FF0_PREFIX_3 */
15200 	 { "lddqu", { XM, M }, 0 },
15201 	 },
15202 	{
15203 	 /* MOD_0F382A_PREFIX_2 */
15204 	 { "movntdqa", { XM, Mx }, 0 },
15205 	 },
15206 	{
15207 	 /* MOD_62_32BIT */
15208 	 { "bound{S|}", { Gv, Ma }, 0 },
15209 	 { EVEX_TABLE(EVEX_0F) },
15210 	 },
15211 	{
15212 	 /* MOD_C4_32BIT */
15213 	 { "lesS", { Gv, Mp }, 0 },
15214 	 { VEX_C4_TABLE(VEX_0F) },
15215 	 },
15216 	{
15217 	 /* MOD_C5_32BIT */
15218 	 { "ldsS", { Gv, Mp }, 0 },
15219 	 { VEX_C5_TABLE(VEX_0F) },
15220 	 },
15221 	{
15222 	 /* MOD_VEX_0F12_PREFIX_0 */
15223 	 { VEX_LEN_TABLE(VEX_LEN_0F12_P_0_M_0) },
15224 	 { VEX_LEN_TABLE(VEX_LEN_0F12_P_0_M_1) },
15225 	 },
15226 	{
15227 	 /* MOD_VEX_0F13 */
15228 	 { VEX_LEN_TABLE(VEX_LEN_0F13_M_0) },
15229 	 },
15230 	{
15231 	 /* MOD_VEX_0F16_PREFIX_0 */
15232 	 { VEX_LEN_TABLE(VEX_LEN_0F16_P_0_M_0) },
15233 	 { VEX_LEN_TABLE(VEX_LEN_0F16_P_0_M_1) },
15234 	 },
15235 	{
15236 	 /* MOD_VEX_0F17 */
15237 	 { VEX_LEN_TABLE(VEX_LEN_0F17_M_0) },
15238 	 },
15239 	{
15240 	 /* MOD_VEX_0F2B */
15241 	 { VEX_W_TABLE(VEX_W_0F2B_M_0) },
15242 	 },
15243 	{
15244 	 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
15245 	 { Bad_Opcode },
15246 	 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
15247 	 },
15248 	{
15249 	 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
15250 	 { Bad_Opcode },
15251 	 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
15252 	 },
15253 	{
15254 	 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
15255 	 { Bad_Opcode },
15256 	 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
15257 	 },
15258 	{
15259 	 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
15260 	 { Bad_Opcode },
15261 	 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
15262 	 },
15263 	{
15264 	 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
15265 	 { Bad_Opcode },
15266 	 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
15267 	 },
15268 	{
15269 	 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
15270 	 { Bad_Opcode },
15271 	 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
15272 	 },
15273 	{
15274 	 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
15275 	 { Bad_Opcode },
15276 	 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
15277 	 },
15278 	{
15279 	 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
15280 	 { Bad_Opcode },
15281 	 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
15282 	 },
15283 	{
15284 	 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
15285 	 { Bad_Opcode },
15286 	 { "knotw", { MaskG, MaskR }, 0 },
15287 	 },
15288 	{
15289 	 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
15290 	 { Bad_Opcode },
15291 	 { "knotq", { MaskG, MaskR }, 0 },
15292 	 },
15293 	{
15294 	 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
15295 	 { Bad_Opcode },
15296 	 { "knotb", { MaskG, MaskR }, 0 },
15297 	 },
15298 	{
15299 	 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
15300 	 { Bad_Opcode },
15301 	 { "knotd", { MaskG, MaskR }, 0 },
15302 	 },
15303 	{
15304 	 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
15305 	 { Bad_Opcode },
15306 	 { "korw", { MaskG, MaskVex, MaskR }, 0 },
15307 	 },
15308 	{
15309 	 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
15310 	 { Bad_Opcode },
15311 	 { "korq", { MaskG, MaskVex, MaskR }, 0 },
15312 	 },
15313 	{
15314 	 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
15315 	 { Bad_Opcode },
15316 	 { "korb", { MaskG, MaskVex, MaskR }, 0 },
15317 	 },
15318 	{
15319 	 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
15320 	 { Bad_Opcode },
15321 	 { "kord", { MaskG, MaskVex, MaskR }, 0 },
15322 	 },
15323 	{
15324 	 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
15325 	 { Bad_Opcode },
15326 	 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
15327 	 },
15328 	{
15329 	 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
15330 	 { Bad_Opcode },
15331 	 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
15332 	 },
15333 	{
15334 	 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
15335 	 { Bad_Opcode },
15336 	 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
15337 	 },
15338 	{
15339 	 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
15340 	 { Bad_Opcode },
15341 	 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
15342 	 },
15343 	{
15344 	 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
15345 	 { Bad_Opcode },
15346 	 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
15347 	 },
15348 	{
15349 	 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
15350 	 { Bad_Opcode },
15351 	 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
15352 	 },
15353 	{
15354 	 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
15355 	 { Bad_Opcode },
15356 	 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
15357 	 },
15358 	{
15359 	 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
15360 	 { Bad_Opcode },
15361 	 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
15362 	 },
15363 	{
15364 	 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
15365 	 { Bad_Opcode },
15366 	 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
15367 	 },
15368 	{
15369 	 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
15370 	 { Bad_Opcode },
15371 	 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
15372 	 },
15373 	{
15374 	 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
15375 	 { Bad_Opcode },
15376 	 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
15377 	 },
15378 	{
15379 	 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
15380 	 { Bad_Opcode },
15381 	 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
15382 	 },
15383 	{
15384 	 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
15385 	 { Bad_Opcode },
15386 	 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
15387 	 },
15388 	{
15389 	 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
15390 	 { Bad_Opcode },
15391 	 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
15392 	 },
15393 	{
15394 	 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
15395 	 { Bad_Opcode },
15396 	 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
15397 	 },
15398 	{
15399 	 /* MOD_VEX_0F50 */
15400 	 { Bad_Opcode },
15401 	 { VEX_W_TABLE(VEX_W_0F50_M_0) },
15402 	 },
15403 	{
15404 	 /* MOD_VEX_0F71_REG_2 */
15405 	 { Bad_Opcode },
15406 	 { PREFIX_TABLE(PREFIX_VEX_0F71_REG_2) },
15407 	 },
15408 	{
15409 	 /* MOD_VEX_0F71_REG_4 */
15410 	 { Bad_Opcode },
15411 	 { PREFIX_TABLE(PREFIX_VEX_0F71_REG_4) },
15412 	 },
15413 	{
15414 	 /* MOD_VEX_0F71_REG_6 */
15415 	 { Bad_Opcode },
15416 	 { PREFIX_TABLE(PREFIX_VEX_0F71_REG_6) },
15417 	 },
15418 	{
15419 	 /* MOD_VEX_0F72_REG_2 */
15420 	 { Bad_Opcode },
15421 	 { PREFIX_TABLE(PREFIX_VEX_0F72_REG_2) },
15422 	 },
15423 	{
15424 	 /* MOD_VEX_0F72_REG_4 */
15425 	 { Bad_Opcode },
15426 	 { PREFIX_TABLE(PREFIX_VEX_0F72_REG_4) },
15427 	 },
15428 	{
15429 	 /* MOD_VEX_0F72_REG_6 */
15430 	 { Bad_Opcode },
15431 	 { PREFIX_TABLE(PREFIX_VEX_0F72_REG_6) },
15432 	 },
15433 	{
15434 	 /* MOD_VEX_0F73_REG_2 */
15435 	 { Bad_Opcode },
15436 	 { PREFIX_TABLE(PREFIX_VEX_0F73_REG_2) },
15437 	 },
15438 	{
15439 	 /* MOD_VEX_0F73_REG_3 */
15440 	 { Bad_Opcode },
15441 	 { PREFIX_TABLE(PREFIX_VEX_0F73_REG_3) },
15442 	 },
15443 	{
15444 	 /* MOD_VEX_0F73_REG_6 */
15445 	 { Bad_Opcode },
15446 	 { PREFIX_TABLE(PREFIX_VEX_0F73_REG_6) },
15447 	 },
15448 	{
15449 	 /* MOD_VEX_0F73_REG_7 */
15450 	 { Bad_Opcode },
15451 	 { PREFIX_TABLE(PREFIX_VEX_0F73_REG_7) },
15452 	 },
15453 	{
15454 	 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
15455 	 { "kmovw", { Ew, MaskG }, 0 },
15456 	 { Bad_Opcode },
15457 	 },
15458 	{
15459 	 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
15460 	 { "kmovq", { Eq, MaskG }, 0 },
15461 	 { Bad_Opcode },
15462 	 },
15463 	{
15464 	 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
15465 	 { "kmovb", { Eb, MaskG }, 0 },
15466 	 { Bad_Opcode },
15467 	 },
15468 	{
15469 	 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
15470 	 { "kmovd", { Ed, MaskG }, 0 },
15471 	 { Bad_Opcode },
15472 	 },
15473 	{
15474 	 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
15475 	 { Bad_Opcode },
15476 	 { "kmovw", { MaskG, Rdq }, 0 },
15477 	 },
15478 	{
15479 	 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
15480 	 { Bad_Opcode },
15481 	 { "kmovb", { MaskG, Rdq }, 0 },
15482 	 },
15483 	{
15484 	 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
15485 	 { Bad_Opcode },
15486 	 { "kmovd", { MaskG, Rdq }, 0 },
15487 	 },
15488 	{
15489 	 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
15490 	 { Bad_Opcode },
15491 	 { "kmovq", { MaskG, Rdq }, 0 },
15492 	 },
15493 	{
15494 	 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
15495 	 { Bad_Opcode },
15496 	 { "kmovw", { Gdq, MaskR }, 0 },
15497 	 },
15498 	{
15499 	 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
15500 	 { Bad_Opcode },
15501 	 { "kmovb", { Gdq, MaskR }, 0 },
15502 	 },
15503 	{
15504 	 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
15505 	 { Bad_Opcode },
15506 	 { "kmovd", { Gdq, MaskR }, 0 },
15507 	 },
15508 	{
15509 	 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
15510 	 { Bad_Opcode },
15511 	 { "kmovq", { Gdq, MaskR }, 0 },
15512 	 },
15513 	{
15514 	 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
15515 	 { Bad_Opcode },
15516 	 { "kortestw", { MaskG, MaskR }, 0 },
15517 	 },
15518 	{
15519 	 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
15520 	 { Bad_Opcode },
15521 	 { "kortestq", { MaskG, MaskR }, 0 },
15522 	 },
15523 	{
15524 	 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
15525 	 { Bad_Opcode },
15526 	 { "kortestb", { MaskG, MaskR }, 0 },
15527 	 },
15528 	{
15529 	 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
15530 	 { Bad_Opcode },
15531 	 { "kortestd", { MaskG, MaskR }, 0 },
15532 	 },
15533 	{
15534 	 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
15535 	 { Bad_Opcode },
15536 	 { "ktestw", { MaskG, MaskR }, 0 },
15537 	 },
15538 	{
15539 	 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
15540 	 { Bad_Opcode },
15541 	 { "ktestq", { MaskG, MaskR }, 0 },
15542 	 },
15543 	{
15544 	 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
15545 	 { Bad_Opcode },
15546 	 { "ktestb", { MaskG, MaskR }, 0 },
15547 	 },
15548 	{
15549 	 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
15550 	 { Bad_Opcode },
15551 	 { "ktestd", { MaskG, MaskR }, 0 },
15552 	 },
15553 	{
15554 	 /* MOD_VEX_0FAE_REG_2 */
15555 	 { VEX_LEN_TABLE(VEX_LEN_0FAE_R_2_M_0) },
15556 	 },
15557 	{
15558 	 /* MOD_VEX_0FAE_REG_3 */
15559 	 { VEX_LEN_TABLE(VEX_LEN_0FAE_R_3_M_0) },
15560 	 },
15561 	{
15562 	 /* MOD_VEX_0FD7_PREFIX_2 */
15563 	 { Bad_Opcode },
15564 	 { VEX_W_TABLE(VEX_W_0FD7_P_2_M_1) },
15565 	 },
15566 	{
15567 	 /* MOD_VEX_0FE7_PREFIX_2 */
15568 	 { VEX_W_TABLE(VEX_W_0FE7_P_2_M_0) },
15569 	 },
15570 	{
15571 	 /* MOD_VEX_0FF0_PREFIX_3 */
15572 	 { VEX_W_TABLE(VEX_W_0FF0_P_3_M_0) },
15573 	 },
15574 	{
15575 	 /* MOD_VEX_0F381A_PREFIX_2 */
15576 	 { VEX_LEN_TABLE(VEX_LEN_0F381A_P_2_M_0) },
15577 	 },
15578 	{
15579 	 /* MOD_VEX_0F382A_PREFIX_2 */
15580 	 { VEX_W_TABLE(VEX_W_0F382A_P_2_M_0) },
15581 	 },
15582 	{
15583 	 /* MOD_VEX_0F382C_PREFIX_2 */
15584 	 { VEX_W_TABLE(VEX_W_0F382C_P_2_M_0) },
15585 	 },
15586 	{
15587 	 /* MOD_VEX_0F382D_PREFIX_2 */
15588 	 { VEX_W_TABLE(VEX_W_0F382D_P_2_M_0) },
15589 	 },
15590 	{
15591 	 /* MOD_VEX_0F382E_PREFIX_2 */
15592 	 { VEX_W_TABLE(VEX_W_0F382E_P_2_M_0) },
15593 	 },
15594 	{
15595 	 /* MOD_VEX_0F382F_PREFIX_2 */
15596 	 { VEX_W_TABLE(VEX_W_0F382F_P_2_M_0) },
15597 	 },
15598 	{
15599 	 /* MOD_VEX_0F385A_PREFIX_2 */
15600 	 { VEX_LEN_TABLE(VEX_LEN_0F385A_P_2_M_0) },
15601 	 },
15602 	{
15603 	 /* MOD_VEX_0F388C_PREFIX_2 */
15604 	 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
15605 	 },
15606 	{
15607 	 /* MOD_VEX_0F388E_PREFIX_2 */
15608 	 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
15609 	 },
15610 	{
15611 	 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
15612 	 { Bad_Opcode },
15613 	 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
15614 	 },
15615 	{
15616 	 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
15617 	 { Bad_Opcode },
15618 	 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
15619 	 },
15620 	{
15621 	 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
15622 	 { Bad_Opcode },
15623 	 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
15624 	 },
15625 	{
15626 	 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
15627 	 { Bad_Opcode },
15628 	 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
15629 	 },
15630 	{
15631 	 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
15632 	 { Bad_Opcode },
15633 	 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
15634 	 },
15635 	{
15636 	 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
15637 	 { Bad_Opcode },
15638 	 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
15639 	 },
15640 	{
15641 	 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
15642 	 { Bad_Opcode },
15643 	 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
15644 	 },
15645 	{
15646 	 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
15647 	 { Bad_Opcode },
15648 	 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
15649 	 },
15650 #define NEED_MOD_TABLE
15651 #include "i386-dis-evex.h"
15652 #undef NEED_MOD_TABLE
15653 };
15654 
15655 static const struct dis386 rm_table[][8] = {
15656 	{
15657 	 /* RM_C6_REG_7 */
15658 	 { "xabort", { Skip_MODRM, Ib }, 0 },
15659 	 },
15660 	{
15661 	 /* RM_C7_REG_7 */
15662 	 { "xbeginT", { Skip_MODRM, Jv }, 0 },
15663 	 },
15664 	{
15665 	 /* RM_0F01_REG_0 */
15666 	 { Bad_Opcode },
15667 	 { "vmcall", { Skip_MODRM }, 0 },
15668 	 { "vmlaunch", { Skip_MODRM }, 0 },
15669 	 { "vmresume", { Skip_MODRM }, 0 },
15670 	 { "vmxoff", { Skip_MODRM }, 0 },
15671 	 },
15672 	{
15673 	 /* RM_0F01_REG_1 */
15674 	 { "monitor", { { OP_Monitor, 0 } }, 0 },
15675 	 { "mwait", { { OP_Mwait, 0 } }, 0 },
15676 	 { "clac", { Skip_MODRM }, 0 },
15677 	 { "stac", { Skip_MODRM }, 0 },
15678 	 { Bad_Opcode },
15679 	 { Bad_Opcode },
15680 	 { Bad_Opcode },
15681 	 { "encls", { Skip_MODRM }, 0 },
15682 	 },
15683 	{
15684 	 /* RM_0F01_REG_2 */
15685 	 { "xgetbv", { Skip_MODRM }, 0 },
15686 	 { "xsetbv", { Skip_MODRM }, 0 },
15687 	 { Bad_Opcode },
15688 	 { Bad_Opcode },
15689 	 { "vmfunc", { Skip_MODRM }, 0 },
15690 	 { "xend", { Skip_MODRM }, 0 },
15691 	 { "xtest", { Skip_MODRM }, 0 },
15692 	 { "enclu", { Skip_MODRM }, 0 },
15693 	 },
15694 	{
15695 	 /* RM_0F01_REG_3 */
15696 	 { "vmrun", { Skip_MODRM }, 0 },
15697 	 { "vmmcall", { Skip_MODRM }, 0 },
15698 	 { "vmload", { Skip_MODRM }, 0 },
15699 	 { "vmsave", { Skip_MODRM }, 0 },
15700 	 { "stgi", { Skip_MODRM }, 0 },
15701 	 { "clgi", { Skip_MODRM }, 0 },
15702 	 { "skinit", { Skip_MODRM }, 0 },
15703 	 { "invlpga", { Skip_MODRM }, 0 },
15704 	 },
15705 	{
15706 	 /* RM_0F01_REG_5 */
15707 	 { Bad_Opcode },
15708 	 { Bad_Opcode },
15709 	 { Bad_Opcode },
15710 	 { Bad_Opcode },
15711 	 { Bad_Opcode },
15712 	 { Bad_Opcode },
15713 	 { "rdpkru", { Skip_MODRM }, 0 },
15714 	 { "wrpkru", { Skip_MODRM }, 0 },
15715 	 },
15716 	{
15717 	 /* RM_0F01_REG_7 */
15718 	 { "swapgs", { Skip_MODRM }, 0 },
15719 	 { "rdtscp", { Skip_MODRM }, 0 },
15720 	 { "monitorx", { { OP_Monitor, 0 } }, 0 },
15721 	 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
15722 	 { "clzero", { Skip_MODRM }, 0 },
15723 	 },
15724 	{
15725 	 /* RM_0FAE_REG_5 */
15726 	 { "lfence", { Skip_MODRM }, 0 },
15727 	 },
15728 	{
15729 	 /* RM_0FAE_REG_6 */
15730 	 { "mfence", { Skip_MODRM }, 0 },
15731 	 },
15732 	{
15733 	 /* RM_0FAE_REG_7 */
15734 	 { "sfence", { Skip_MODRM }, 0 },
15735 	 },
15736 };
15737 
15738 
ckprefix(disassemble_info * info)15739 static int ckprefix(disassemble_info *info)
15740 {
15741 	int newrex, i, length;
15742 
15743 	info->rex = 0;
15744 	info->rex_ignored = 0;
15745 	info->prefixes = 0;
15746 	info->used_prefixes = 0;
15747 	info->rex_used = 0;
15748 	info->last_lock_prefix = -1;
15749 	info->last_repz_prefix = -1;
15750 	info->last_repnz_prefix = -1;
15751 	info->last_data_prefix = -1;
15752 	info->last_addr_prefix = -1;
15753 	info->last_rex_prefix = -1;
15754 	info->last_seg_prefix = -1;
15755 	info->fwait_prefix = -1;
15756 	info->active_seg_prefix = 0;
15757 	for (i = 0; i < (int) ARRAY_SIZE(info->all_prefixes); i++)
15758 		info->all_prefixes[i] = 0;
15759 	i = 0;
15760 	length = 0;
15761 	/* The maximum instruction length is 15bytes.  */
15762 	while (length < MAX_CODE_LENGTH - 1)
15763 	{
15764 		FETCH_DATA(info, info->codep + 1);
15765 		newrex = 0;
15766 		switch (*info->codep)
15767 		{
15768 			/* REX prefixes family.  */
15769 		case 0x40:
15770 		case 0x41:
15771 		case 0x42:
15772 		case 0x43:
15773 		case 0x44:
15774 		case 0x45:
15775 		case 0x46:
15776 		case 0x47:
15777 		case 0x48:
15778 		case 0x49:
15779 		case 0x4a:
15780 		case 0x4b:
15781 		case 0x4c:
15782 		case 0x4d:
15783 		case 0x4e:
15784 		case 0x4f:
15785 			if (info->address_mode == mode_64bit)
15786 				newrex = *info->codep;
15787 			else
15788 				return 1;
15789 			info->last_rex_prefix = i;
15790 			break;
15791 		case REPE_PREFIX_OPCODE:
15792 			info->prefixes |= PREFIX_REPZ;
15793 			info->last_repz_prefix = i;
15794 			break;
15795 		case REPNE_PREFIX_OPCODE:
15796 			info->prefixes |= PREFIX_REPNZ;
15797 			info->last_repnz_prefix = i;
15798 			break;
15799 		case LOCK_PREFIX_OPCODE:
15800 			info->prefixes |= PREFIX_LOCK;
15801 			info->last_lock_prefix = i;
15802 			break;
15803 		case CS_PREFIX_OPCODE:
15804 			info->prefixes |= PREFIX_CS;
15805 			info->last_seg_prefix = i;
15806 			info->active_seg_prefix = PREFIX_CS;
15807 			break;
15808 		case SS_PREFIX_OPCODE:
15809 			info->prefixes |= PREFIX_SS;
15810 			info->last_seg_prefix = i;
15811 			info->active_seg_prefix = PREFIX_SS;
15812 			break;
15813 		case DS_PREFIX_OPCODE:
15814 			info->prefixes |= PREFIX_DS;
15815 			info->last_seg_prefix = i;
15816 			info->active_seg_prefix = PREFIX_DS;
15817 			break;
15818 		case ES_PREFIX_OPCODE:
15819 			info->prefixes |= PREFIX_ES;
15820 			info->last_seg_prefix = i;
15821 			info->active_seg_prefix = PREFIX_ES;
15822 			break;
15823 		case FS_PREFIX_OPCODE:
15824 			info->prefixes |= PREFIX_FS;
15825 			info->last_seg_prefix = i;
15826 			info->active_seg_prefix = PREFIX_FS;
15827 			break;
15828 		case GS_PREFIX_OPCODE:
15829 			info->prefixes |= PREFIX_GS;
15830 			info->last_seg_prefix = i;
15831 			info->active_seg_prefix = PREFIX_GS;
15832 			break;
15833 		case DATA_PREFIX_OPCODE:
15834 			info->prefixes |= PREFIX_DATA;
15835 			info->last_data_prefix = i;
15836 			break;
15837 		case ADDR_PREFIX_OPCODE:
15838 			info->prefixes |= PREFIX_ADDR;
15839 			info->last_addr_prefix = i;
15840 			break;
15841 		case FWAIT_OPCODE:
15842 			/* fwait is really an instruction.  If there are prefixes
15843 			   before the fwait, they belong to the fwait, *not* to the
15844 			   following instruction.  */
15845 			info->fwait_prefix = i;
15846 			if (info->prefixes || info->rex)
15847 			{
15848 				info->prefixes |= PREFIX_FWAIT;
15849 				info->codep++;
15850 				/* This ensures that the previous REX prefixes are noticed
15851 				   as unused prefixes, as in the return case below.  */
15852 				info->rex_used = info->rex;
15853 				return 1;
15854 			}
15855 			info->prefixes = PREFIX_FWAIT;
15856 			break;
15857 		default:
15858 			return 1;
15859 		}
15860 		/* Rex is ignored when followed by another prefix.  */
15861 		if (info->rex)
15862 		{
15863 			info->rex_used = info->rex;
15864 			return 1;
15865 		}
15866 		if (*info->codep != FWAIT_OPCODE)
15867 			info->all_prefixes[i++] = *info->codep;
15868 		info->rex = newrex;
15869 		info->codep++;
15870 		length++;
15871 	}
15872 	return 0;
15873 }
15874 
15875 /* Return the name of the prefix byte PREF, or NULL if PREF is not a
15876    prefix byte.  */
15877 
prefix_name(disassemble_info * info,int pref,int sizeflag)15878 static const char *prefix_name(disassemble_info *info, int pref, int sizeflag)
15879 {
15880 	static const char *const rexes[16] = {
15881 		"rex",							/* 0x40 */
15882 		"rex.B",						/* 0x41 */
15883 		"rex.X",						/* 0x42 */
15884 		"rex.XB",						/* 0x43 */
15885 		"rex.R",						/* 0x44 */
15886 		"rex.RB",						/* 0x45 */
15887 		"rex.RX",						/* 0x46 */
15888 		"rex.RXB",						/* 0x47 */
15889 		"rex.W",						/* 0x48 */
15890 		"rex.WB",						/* 0x49 */
15891 		"rex.WX",						/* 0x4a */
15892 		"rex.WXB",						/* 0x4b */
15893 		"rex.WR",						/* 0x4c */
15894 		"rex.WRB",						/* 0x4d */
15895 		"rex.WRX",						/* 0x4e */
15896 		"rex.WRXB",						/* 0x4f */
15897 	};
15898 
15899 	switch (pref)
15900 	{
15901 		/* REX prefixes family.  */
15902 	case 0x40:
15903 	case 0x41:
15904 	case 0x42:
15905 	case 0x43:
15906 	case 0x44:
15907 	case 0x45:
15908 	case 0x46:
15909 	case 0x47:
15910 	case 0x48:
15911 	case 0x49:
15912 	case 0x4a:
15913 	case 0x4b:
15914 	case 0x4c:
15915 	case 0x4d:
15916 	case 0x4e:
15917 	case 0x4f:
15918 		return rexes[pref - 0x40];
15919 	case REPE_PREFIX_OPCODE:
15920 		return "repz";
15921 	case REPNE_PREFIX_OPCODE:
15922 		return "repnz";
15923 	case LOCK_PREFIX_OPCODE:
15924 		return "lock";
15925 	case CS_PREFIX_OPCODE:
15926 		return "cs";
15927 	case SS_PREFIX_OPCODE:
15928 		return "ss";
15929 	case DS_PREFIX_OPCODE:
15930 		return "ds";
15931 	case ES_PREFIX_OPCODE:
15932 		return "es";
15933 	case FS_PREFIX_OPCODE:
15934 		return "fs";
15935 	case GS_PREFIX_OPCODE:
15936 		return "gs";
15937 	case DATA_PREFIX_OPCODE:
15938 		return (sizeflag & DFLAG) ? "data16" : "data32";
15939 	case ADDR_PREFIX_OPCODE:
15940 		if (info->address_mode == mode_64bit)
15941 			return (sizeflag & AFLAG) ? "addr32" : "addr64";
15942 		else
15943 			return (sizeflag & AFLAG) ? "addr16" : "addr32";
15944 	case FWAIT_OPCODE:
15945 		return "fwait";
15946 	case REP_PREFIX:
15947 		return "rep";
15948 	case XACQUIRE_PREFIX:
15949 		return "xacquire";
15950 	case XRELEASE_PREFIX:
15951 		return "xrelease";
15952 	case BND_PREFIX:
15953 		return "bnd";
15954 	default:
15955 		return NULL;
15956 	}
15957 }
15958 
15959 static const char *const float_mem[] = {
15960 	/* d8 */
15961 	"fadd{s|}",
15962 	"fmul{s|}",
15963 	"fcom{s|}",
15964 	"fcomp{s|}",
15965 	"fsub{s|}",
15966 	"fsubr{s|}",
15967 	"fdiv{s|}",
15968 	"fdivr{s|}",
15969 	/* d9 */
15970 	"fld{s|}",
15971 	"(bad)",
15972 	"fst{s|}",
15973 	"fstp{s|}",
15974 	"fldenvIC",
15975 	"fldcw",
15976 	"fNstenvIC",
15977 	"fNstcw",
15978 	/* da */
15979 	"fiadd{l|}",
15980 	"fimul{l|}",
15981 	"ficom{l|}",
15982 	"ficomp{l|}",
15983 	"fisub{l|}",
15984 	"fisubr{l|}",
15985 	"fidiv{l|}",
15986 	"fidivr{l|}",
15987 	/* db */
15988 	"fild{l|}",
15989 	"fisttp{l|}",
15990 	"fist{l|}",
15991 	"fistp{l|}",
15992 	"(bad)",
15993 	"fld{t||t|}",
15994 	"(bad)",
15995 	"fstp{t||t|}",
15996 	/* dc */
15997 	"fadd{l|}",
15998 	"fmul{l|}",
15999 	"fcom{l|}",
16000 	"fcomp{l|}",
16001 	"fsub{l|}",
16002 	"fsubr{l|}",
16003 	"fdiv{l|}",
16004 	"fdivr{l|}",
16005 	/* dd */
16006 	"fld{l|}",
16007 	"fisttp{ll|}",
16008 	"fst{l||}",
16009 	"fstp{l|}",
16010 	"frstorIC",
16011 	"(bad)",
16012 	"fNsaveIC",
16013 	"fNstsw",
16014 	/* de */
16015 	"fiadd",
16016 	"fimul",
16017 	"ficom",
16018 	"ficomp",
16019 	"fisub",
16020 	"fisubr",
16021 	"fidiv",
16022 	"fidivr",
16023 	/* df */
16024 	"fild",
16025 	"fisttp",
16026 	"fist",
16027 	"fistp",
16028 	"fbld",
16029 	"fild{ll|}",
16030 	"fbstp",
16031 	"fistp{ll|}",
16032 };
16033 
16034 static const unsigned char float_mem_mode[] = {
16035 	/* d8 */
16036 	d_mode,
16037 	d_mode,
16038 	d_mode,
16039 	d_mode,
16040 	d_mode,
16041 	d_mode,
16042 	d_mode,
16043 	d_mode,
16044 	/* d9 */
16045 	d_mode,
16046 	0,
16047 	d_mode,
16048 	d_mode,
16049 	0,
16050 	w_mode,
16051 	0,
16052 	w_mode,
16053 	/* da */
16054 	d_mode,
16055 	d_mode,
16056 	d_mode,
16057 	d_mode,
16058 	d_mode,
16059 	d_mode,
16060 	d_mode,
16061 	d_mode,
16062 	/* db */
16063 	d_mode,
16064 	d_mode,
16065 	d_mode,
16066 	d_mode,
16067 	0,
16068 	t_mode,
16069 	0,
16070 	t_mode,
16071 	/* dc */
16072 	q_mode,
16073 	q_mode,
16074 	q_mode,
16075 	q_mode,
16076 	q_mode,
16077 	q_mode,
16078 	q_mode,
16079 	q_mode,
16080 	/* dd */
16081 	q_mode,
16082 	q_mode,
16083 	q_mode,
16084 	q_mode,
16085 	0,
16086 	0,
16087 	0,
16088 	w_mode,
16089 	/* de */
16090 	w_mode,
16091 	w_mode,
16092 	w_mode,
16093 	w_mode,
16094 	w_mode,
16095 	w_mode,
16096 	w_mode,
16097 	w_mode,
16098 	/* df */
16099 	w_mode,
16100 	w_mode,
16101 	w_mode,
16102 	w_mode,
16103 	t_mode,
16104 	q_mode,
16105 	t_mode,
16106 	q_mode
16107 };
16108 
16109 static const char *const fgrps[][8] = {
16110 	/* Bad opcode 0 */
16111 	{
16112 	 "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)",
16113 	 },
16114 
16115 	/* d9_2  1 */
16116 	{
16117 	 "fnop", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)",
16118 	 },
16119 
16120 	/* d9_4  2 */
16121 	{
16122 	 "fchs", "fabs", "(bad)", "(bad)", "ftst", "fxam", "(bad)", "(bad)",
16123 	 },
16124 
16125 	/* d9_5  3 */
16126 	{
16127 	 "fld1", "fldl2t", "fldl2e", "fldpi", "fldlg2", "fldln2", "fldz", "(bad)",
16128 	 },
16129 
16130 	/* d9_6  4 */
16131 	{
16132 	 "f2xm1", "fyl2x", "fptan", "fpatan", "fxtract", "fprem1", "fdecstp", "fincstp",
16133 	 },
16134 
16135 	/* d9_7  5 */
16136 	{
16137 	 "fprem", "fyl2xp1", "fsqrt", "fsincos", "frndint", "fscale", "fsin", "fcos",
16138 	 },
16139 
16140 	/* da_5  6 */
16141 	{
16142 	 "(bad)", "fucompp", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)",
16143 	 },
16144 
16145 	/* db_4  7 */
16146 	{
16147 	 "fNeni(8087 only)", "fNdisi(8087 only)", "fNclex", "fNinit",
16148 	 "fNsetpm(287 only)", "frstpm(287 only)", "(bad)", "(bad)",
16149 	 },
16150 
16151 	/* de_3  8 */
16152 	{
16153 	 "(bad)", "fcompp", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)",
16154 	 },
16155 
16156 	/* df_4  9 */
16157 	{
16158 	 "fNstsw", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)", "(bad)",
16159 	 },
16160 };
16161 
16162 
x86_disassemble_print_options(FILE * stream)16163 void x86_disassemble_print_options(FILE *stream)
16164 {
16165 	fprintf(stream, _("\n\
16166 The following i386/x86-64 specific disassembler options are supported for use\n\
16167 with the -M switch (multiple options should be separated by commas):\n"));
16168 
16169 	fprintf(stream, _("  x86-64      Disassemble in 64bit mode\n"));
16170 	fprintf(stream, _("  i386        Disassemble in 32bit mode\n"));
16171 	fprintf(stream, _("  i8086       Disassemble in 16bit mode\n"));
16172 	fprintf(stream, _("  att         Display instruction in AT&T syntax\n"));
16173 	fprintf(stream, _("  intel       Display instruction in Intel syntax\n"));
16174 	fprintf(stream, _("  att-mnemonic\n" "              Display instruction in AT&T mnemonic\n"));
16175 	fprintf(stream, _("  intel-mnemonic\n" "              Display instruction in Intel mnemonic\n"));
16176 	fprintf(stream, _("  addr64      Assume 64bit address size\n"));
16177 	fprintf(stream, _("  addr32      Assume 32bit address size\n"));
16178 	fprintf(stream, _("  addr16      Assume 16bit address size\n"));
16179 	fprintf(stream, _("  data32      Assume 32bit data size\n"));
16180 	fprintf(stream, _("  data16      Assume 16bit data size\n"));
16181 	fprintf(stream, _("  suffix      Always display instruction suffix in AT&T syntax\n"));
16182 	fprintf(stream, _("  amd64       Display instruction in AMD64 ISA\n"));
16183 	fprintf(stream, _("  intel64     Display instruction in Intel64 ISA\n"));
16184 }
16185 
16186 /* Bad opcode.  */
16187 static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
16188 
16189 /* Get a pointer to struct dis386 with a valid name.  */
16190 
get_valid_dis386(const struct dis386 * dp,disassemble_info * info)16191 static const struct dis386 *get_valid_dis386(const struct dis386 *dp, disassemble_info *info)
16192 {
16193 	int vindex;
16194 	int vex_table_index;
16195 
16196 	if (dp->name != NULL)
16197 		return dp;
16198 
16199 	switch (dp->op[0].bytemode)
16200 	{
16201 	case USE_REG_TABLE:
16202 		dp = &reg_table[dp->op[1].bytemode][info->modrm.reg];
16203 		break;
16204 
16205 	case USE_MOD_TABLE:
16206 		vindex = info->modrm.mod == 0x3 ? 1 : 0;
16207 		dp = &mod_table[dp->op[1].bytemode][vindex];
16208 		break;
16209 
16210 	case USE_RM_TABLE:
16211 		dp = &rm_table[dp->op[1].bytemode][info->modrm.rm];
16212 		break;
16213 
16214 	case USE_PREFIX_TABLE:
16215 		if (info->need_vex)
16216 		{
16217 			/* The prefix in VEX is implicit.  */
16218 			switch (info->vex.prefix)
16219 			{
16220 			case 0:
16221 				vindex = 0;
16222 				break;
16223 			case REPE_PREFIX_OPCODE:
16224 				vindex = 1;
16225 				break;
16226 			case DATA_PREFIX_OPCODE:
16227 				vindex = 2;
16228 				break;
16229 			case REPNE_PREFIX_OPCODE:
16230 				vindex = 3;
16231 				break;
16232 			default:
16233 				internal_error(info);
16234 				return NULL;
16235 			}
16236 		} else
16237 		{
16238 			int last_prefix = -1;
16239 			int prefix = 0;
16240 
16241 			vindex = 0;
16242 			/* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
16243 			   When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
16244 			   last one wins.  */
16245 			if ((info->prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
16246 			{
16247 				if (info->last_repz_prefix > info->last_repnz_prefix)
16248 				{
16249 					vindex = 1;
16250 					prefix = PREFIX_REPZ;
16251 					last_prefix = info->last_repz_prefix;
16252 				} else
16253 				{
16254 					vindex = 3;
16255 					prefix = PREFIX_REPNZ;
16256 					last_prefix = info->last_repnz_prefix;
16257 				}
16258 
16259 				/* Check if prefix should be ignored.  */
16260 				if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
16261 					   & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT) & prefix) != 0)
16262 					vindex = 0;
16263 			}
16264 
16265 			if (vindex == 0 && (info->prefixes & PREFIX_DATA) != 0)
16266 			{
16267 				vindex = 2;
16268 				prefix = PREFIX_DATA;
16269 				last_prefix = info->last_data_prefix;
16270 			}
16271 
16272 			if (vindex != 0)
16273 			{
16274 				info->used_prefixes |= prefix;
16275 				info->all_prefixes[last_prefix] = 0;
16276 			}
16277 		}
16278 		dp = &prefix_table[dp->op[1].bytemode][vindex];
16279 		break;
16280 
16281 	case USE_X86_64_TABLE:
16282 		vindex = info->address_mode == mode_64bit ? 1 : 0;
16283 		dp = &x86_64_table[dp->op[1].bytemode][vindex];
16284 		break;
16285 
16286 	case USE_3BYTE_TABLE:
16287 		FETCH_DATA(info, info->codep + 2);
16288 		vindex = *info->codep++;
16289 		dp = &three_byte_table[dp->op[1].bytemode][vindex];
16290 		info->end_codep = info->codep;
16291 		info->modrm.mod = (*info->codep >> 6) & 3;
16292 		info->modrm.reg = (*info->codep >> 3) & 7;
16293 		info->modrm.rm = *info->codep & 7;
16294 		break;
16295 
16296 	case USE_VEX_LEN_TABLE:
16297 		if (!info->need_vex)
16298 		{
16299 			internal_error(info);
16300 			return NULL;
16301 		}
16302 
16303 		switch (info->vex.length)
16304 		{
16305 		case 128:
16306 			vindex = 0;
16307 			break;
16308 		case 256:
16309 			vindex = 1;
16310 			break;
16311 		default:
16312 			internal_error(info);
16313 			return NULL;
16314 		}
16315 
16316 		dp = &vex_len_table[dp->op[1].bytemode][vindex];
16317 		break;
16318 
16319 	case USE_XOP_8F_TABLE:
16320 		FETCH_DATA(info, info->codep + 3);
16321 		/* All bits in the REX prefix are ignored.  */
16322 		info->rex_ignored = info->rex;
16323 		info->rex = ~(*info->codep >> 5) & 0x7;
16324 
16325 		/* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm".  */
16326 		switch ((*info->codep & 0x1f))
16327 		{
16328 		default:
16329 			dp = &bad_opcode;
16330 			return dp;
16331 		case 0x8:
16332 			vex_table_index = XOP_08;
16333 			break;
16334 		case 0x9:
16335 			vex_table_index = XOP_09;
16336 			break;
16337 		case 0xa:
16338 			vex_table_index = XOP_0A;
16339 			break;
16340 		}
16341 		info->codep++;
16342 		info->vex.w = *info->codep & 0x80;
16343 		if (info->vex.w && info->address_mode == mode_64bit)
16344 			info->rex |= REX_W;
16345 
16346 		info->vex.register_specifier = (~(*info->codep >> 3)) & 0xf;
16347 		if (info->address_mode != mode_64bit)
16348 		{
16349 			/* In 16/32-bit mode REX_B is silently ignored.  */
16350 			info->rex &= ~REX_B;
16351 			if (info->vex.register_specifier > 0x7)
16352 			{
16353 				dp = &bad_opcode;
16354 				return dp;
16355 			}
16356 		}
16357 
16358 		info->vex.length = (*info->codep & 0x4) ? 256 : 128;
16359 		switch ((*info->codep & 0x3))
16360 		{
16361 		case 0:
16362 			info->vex.prefix = 0;
16363 			break;
16364 		case 1:
16365 			info->vex.prefix = DATA_PREFIX_OPCODE;
16366 			break;
16367 		case 2:
16368 			info->vex.prefix = REPE_PREFIX_OPCODE;
16369 			break;
16370 		case 3:
16371 			info->vex.prefix = REPNE_PREFIX_OPCODE;
16372 			break;
16373 		}
16374 		info->need_vex = 1;
16375 		info->need_vex_reg = 1;
16376 		info->codep++;
16377 		vindex = *info->codep++;
16378 		dp = &xop_table[vex_table_index][vindex];
16379 
16380 		info->end_codep = info->codep;
16381 		FETCH_DATA(info, info->codep + 1);
16382 		info->modrm.mod = (*info->codep >> 6) & 3;
16383 		info->modrm.reg = (*info->codep >> 3) & 7;
16384 		info->modrm.rm = *info->codep & 7;
16385 		break;
16386 
16387 	case USE_VEX_C4_TABLE:
16388 		/* VEX prefix.  */
16389 		FETCH_DATA(info, info->codep + 3);
16390 		/* All bits in the REX prefix are ignored.  */
16391 		info->rex_ignored = info->rex;
16392 		info->rex = ~(*info->codep >> 5) & 0x7;
16393 		switch ((*info->codep & 0x1f))
16394 		{
16395 		default:
16396 			dp = &bad_opcode;
16397 			return dp;
16398 		case 0x1:
16399 			vex_table_index = VEX_0F;
16400 			break;
16401 		case 0x2:
16402 			vex_table_index = VEX_0F38;
16403 			break;
16404 		case 0x3:
16405 			vex_table_index = VEX_0F3A;
16406 			break;
16407 		}
16408 		info->codep++;
16409 		info->vex.w = *info->codep & 0x80;
16410 		if (info->address_mode == mode_64bit)
16411 		{
16412 			if (info->vex.w)
16413 				info->rex |= REX_W;
16414 			info->vex.register_specifier = (~(*info->codep >> 3)) & 0xf;
16415 		} else
16416 		{
16417 			/* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
16418 			   is ignored, other REX bits are 0 and the highest bit in
16419 			   VEX.vvvv is also ignored.  */
16420 			info->rex = 0;
16421 			info->vex.register_specifier = (~(*info->codep >> 3)) & 0x7;
16422 		}
16423 
16424 		info->vex.length = (*info->codep & 0x4) ? 256 : 128;
16425 		switch ((*info->codep & 0x3))
16426 		{
16427 		case 0:
16428 			info->vex.prefix = 0;
16429 			break;
16430 		case 1:
16431 			info->vex.prefix = DATA_PREFIX_OPCODE;
16432 			break;
16433 		case 2:
16434 			info->vex.prefix = REPE_PREFIX_OPCODE;
16435 			break;
16436 		case 3:
16437 			info->vex.prefix = REPNE_PREFIX_OPCODE;
16438 			break;
16439 		}
16440 		info->need_vex = 1;
16441 		info->need_vex_reg = 1;
16442 		info->codep++;
16443 		vindex = *info->codep++;
16444 		dp = &vex_table[vex_table_index][vindex];
16445 		info->end_codep = info->codep;
16446 		/* There is no MODRM byte for VEX [82|77].  */
16447 		if (vindex != 0x77 && vindex != 0x82)
16448 		{
16449 			FETCH_DATA(info, info->codep + 1);
16450 			info->modrm.mod = (*info->codep >> 6) & 3;
16451 			info->modrm.reg = (*info->codep >> 3) & 7;
16452 			info->modrm.rm = *info->codep & 7;
16453 		}
16454 		break;
16455 
16456 	case USE_VEX_C5_TABLE:
16457 		/* VEX prefix.  */
16458 		FETCH_DATA(info, info->codep + 2);
16459 		/* All bits in the REX prefix are ignored.  */
16460 		info->rex_ignored = info->rex;
16461 		info->rex = (*info->codep & 0x80) ? 0 : REX_R;
16462 
16463 		/* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
16464 		   VEX.vvvv is 1.  */
16465 		info->vex.register_specifier = (~(*info->codep >> 3)) & 0xf;
16466 		info->vex.w = 0;
16467 		info->vex.length = (*info->codep & 0x4) ? 256 : 128;
16468 		switch ((*info->codep & 0x3))
16469 		{
16470 		case 0:
16471 			info->vex.prefix = 0;
16472 			break;
16473 		case 1:
16474 			info->vex.prefix = DATA_PREFIX_OPCODE;
16475 			break;
16476 		case 2:
16477 			info->vex.prefix = REPE_PREFIX_OPCODE;
16478 			break;
16479 		case 3:
16480 			info->vex.prefix = REPNE_PREFIX_OPCODE;
16481 			break;
16482 		}
16483 		info->need_vex = 1;
16484 		info->need_vex_reg = 1;
16485 		info->codep++;
16486 		vindex = *info->codep++;
16487 		dp = &vex_table[dp->op[1].bytemode][vindex];
16488 		info->end_codep = info->codep;
16489 		/* There is no MODRM byte for VEX [82|77].  */
16490 		if (vindex != 0x77 && vindex != 0x82)
16491 		{
16492 			FETCH_DATA(info, info->codep + 1);
16493 			info->modrm.mod = (*info->codep >> 6) & 3;
16494 			info->modrm.reg = (*info->codep >> 3) & 7;
16495 			info->modrm.rm = *info->codep & 7;
16496 		}
16497 		break;
16498 
16499 	case USE_VEX_W_TABLE:
16500 		if (!info->need_vex)
16501 		{
16502 			internal_error(info);
16503 			return NULL;
16504 		}
16505 
16506 		dp = &vex_w_table[dp->op[1].bytemode][info->vex.w ? 1 : 0];
16507 		break;
16508 
16509 	case USE_EVEX_TABLE:
16510 		info->two_source_ops = 0;
16511 		/* EVEX prefix.  */
16512 		info->vex.evex = 1;
16513 		FETCH_DATA(info, info->codep + 4);
16514 		/* All bits in the REX prefix are ignored.  */
16515 		info->rex_ignored = info->rex;
16516 		/* The first byte after 0x62.  */
16517 		info->rex = ~(*info->codep >> 5) & 0x7;
16518 		info->vex.r = *info->codep & 0x10;
16519 		switch ((*info->codep & 0xf))
16520 		{
16521 		default:
16522 			return &bad_opcode;
16523 		case 0x1:
16524 			vex_table_index = EVEX_0F;
16525 			break;
16526 		case 0x2:
16527 			vex_table_index = EVEX_0F38;
16528 			break;
16529 		case 0x3:
16530 			vex_table_index = EVEX_0F3A;
16531 			break;
16532 		}
16533 
16534 		/* The second byte after 0x62.  */
16535 		info->codep++;
16536 		info->vex.w = *info->codep & 0x80;
16537 		if (info->vex.w && info->address_mode == mode_64bit)
16538 			info->rex |= REX_W;
16539 
16540 		info->vex.register_specifier = (~(*info->codep >> 3)) & 0xf;
16541 		if (info->address_mode != mode_64bit)
16542 		{
16543 			/* In 16/32-bit mode silently ignore following bits.  */
16544 			info->rex &= ~REX_B;
16545 			info->vex.r = 1;
16546 			info->vex.v = 1;
16547 			info->vex.register_specifier &= 0x7;
16548 		}
16549 
16550 		/* The U bit.  */
16551 		if (!(*info->codep & 0x4))
16552 			return &bad_opcode;
16553 
16554 		switch ((*info->codep & 0x3))
16555 		{
16556 		case 0:
16557 			info->vex.prefix = 0;
16558 			break;
16559 		case 1:
16560 			info->vex.prefix = DATA_PREFIX_OPCODE;
16561 			break;
16562 		case 2:
16563 			info->vex.prefix = REPE_PREFIX_OPCODE;
16564 			break;
16565 		case 3:
16566 			info->vex.prefix = REPNE_PREFIX_OPCODE;
16567 			break;
16568 		}
16569 
16570 		/* The third byte after 0x62.  */
16571 		info->codep++;
16572 
16573 		/* Remember the static rounding bits.  */
16574 		info->vex.ll = (*info->codep >> 5) & 3;
16575 		info->vex.b = (*info->codep & 0x10) != 0;
16576 
16577 		info->vex.v = *info->codep & 0x8;
16578 		info->vex.mask_register_specifier = *info->codep & 0x7;
16579 		info->vex.zeroing = *info->codep & 0x80;
16580 
16581 		info->need_vex = 1;
16582 		info->need_vex_reg = 1;
16583 		info->codep++;
16584 		vindex = *info->codep++;
16585 		dp = &evex_table[vex_table_index][vindex];
16586 		info->end_codep = info->codep;
16587 		FETCH_DATA(info, info->codep + 1);
16588 		info->modrm.mod = (*info->codep >> 6) & 3;
16589 		info->modrm.reg = (*info->codep >> 3) & 7;
16590 		info->modrm.rm = *info->codep & 7;
16591 
16592 		/* Set vector length.  */
16593 		if (info->modrm.mod == 3 && info->vex.b)
16594 			info->vex.length = 512;
16595 		else
16596 		{
16597 			switch (info->vex.ll)
16598 			{
16599 			case 0x0:
16600 				info->vex.length = 128;
16601 				break;
16602 			case 0x1:
16603 				info->vex.length = 256;
16604 				break;
16605 			case 0x2:
16606 				info->vex.length = 512;
16607 				break;
16608 			default:
16609 				return &bad_opcode;
16610 			}
16611 		}
16612 		break;
16613 
16614 	case 0:
16615 		dp = &bad_opcode;
16616 		break;
16617 
16618 	default:
16619 		internal_error(info);
16620 		return NULL;
16621 	}
16622 
16623 	if (dp->name != NULL)
16624 		return dp;
16625 	else
16626 		return get_valid_dis386(dp, info);
16627 }
16628 
16629 
get_sib(disassemble_info * info,int sizeflag)16630 static void get_sib(disassemble_info *info, int sizeflag)
16631 {
16632 	/* If modrm.mod == 3, operand must be register.  */
16633 	if (info->need_modrm && ((sizeflag & AFLAG) || info->address_mode == mode_64bit) && info->modrm.mod != 3 && info->modrm.rm == 4)
16634 	{
16635 		FETCH_DATA(info, info->codep + 2);
16636 		info->sib.index = (info->codep[1] >> 3) & 7;
16637 		info->sib.scale = (info->codep[1] >> 6) & 3;
16638 		info->sib.base = info->codep[1] & 7;
16639 	}
16640 }
16641 
16642 
16643 /* Capital letters in template are macros.  */
putop(disassemble_info * info,const char * in_template,int sizeflag)16644 static int putop(disassemble_info *info, const char *in_template, int sizeflag)
16645 {
16646 	const char *p;
16647 	int alt = 0;
16648 	int cond = 1;
16649 	unsigned int l = 0,	len = 1;
16650 	char last[4];
16651 
16652 #define SAVE_LAST(c)			\
16653 	if (l < len && l < sizeof (last))	\
16654 	{ \
16655 		last[l++] = c;			\
16656 	} else				\
16657 	{ \
16658 		internal_error(info); \
16659 		return -1; \
16660 	}
16661 
16662 	for (p = in_template; *p; p++)
16663 	{
16664 		switch (*p)
16665 		{
16666 		default:
16667 			*info->obufp++ = *p;
16668 			break;
16669 		case '%':
16670 			len++;
16671 			break;
16672 		case '!':
16673 			cond = 0;
16674 			break;
16675 		case '{':
16676 			alt = 0;
16677 			if (info->intel_syntax)
16678 			{
16679 				while (*++p != '|')
16680 					if (*p == '}' || *p == '\0')
16681 					{
16682 						internal_error(info);
16683 						return -1;
16684 					}
16685 			}
16686 			/* Fall through.  */
16687 		case 'I':
16688 			alt = 1;
16689 			continue;
16690 		case '|':
16691 			while (*++p != '}')
16692 			{
16693 				if (*p == '\0')
16694 				{
16695 					internal_error(info);
16696 					return -1;
16697 				}
16698 			}
16699 			break;
16700 		case '}':
16701 			break;
16702 		case 'A':
16703 			if (info->intel_syntax)
16704 				break;
16705 			if (info->modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
16706 				*info->obufp++ = 'b';
16707 			break;
16708 		case 'B':
16709 			if (l == 0 && len == 1)
16710 			{
16711 			  case_B:
16712 				if (info->intel_syntax)
16713 					break;
16714 				if (sizeflag & SUFFIX_ALWAYS)
16715 					*info->obufp++ = 'b';
16716 			} else
16717 			{
16718 				if (l != 1 || len != 2 || last[0] != 'L')
16719 				{
16720 					SAVE_LAST(*p);
16721 					break;
16722 				}
16723 
16724 				if (info->address_mode == mode_64bit && !(info->prefixes & PREFIX_ADDR))
16725 				{
16726 					*info->obufp++ = 'a';
16727 					*info->obufp++ = 'b';
16728 					*info->obufp++ = 's';
16729 				}
16730 
16731 				goto case_B;
16732 			}
16733 			break;
16734 		case 'C':
16735 			if (info->intel_syntax && !alt)
16736 				break;
16737 			if ((info->prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
16738 			{
16739 				if (sizeflag & DFLAG)
16740 					*info->obufp++ = info->intel_syntax ? 'd' : 'l';
16741 				else
16742 					*info->obufp++ = info->intel_syntax ? 'w' : 's';
16743 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16744 			}
16745 			break;
16746 		case 'D':
16747 			if (info->intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
16748 				break;
16749 			USED_REX(REX_W);
16750 			if (info->modrm.mod == 3)
16751 			{
16752 				if (info->rex & REX_W)
16753 					*info->obufp++ = 'q';
16754 				else
16755 				{
16756 					if (sizeflag & DFLAG)
16757 						*info->obufp++ = info->intel_syntax ? 'd' : 'l';
16758 					else
16759 						*info->obufp++ = 'w';
16760 					info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16761 				}
16762 			} else
16763 				*info->obufp++ = 'w';
16764 			break;
16765 		case 'E':						/* For jcxz/jecxz */
16766 			if (info->address_mode == mode_64bit)
16767 			{
16768 				if (sizeflag & AFLAG)
16769 					*info->obufp++ = 'r';
16770 				else
16771 					*info->obufp++ = 'e';
16772 			} else if (sizeflag & AFLAG)
16773 			{
16774 				*info->obufp++ = 'e';
16775 			}
16776 			info->used_prefixes |= (info->prefixes & PREFIX_ADDR);
16777 			break;
16778 		case 'F':
16779 			if (info->intel_syntax)
16780 				break;
16781 			if ((info->prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
16782 			{
16783 				if (sizeflag & AFLAG)
16784 					*info->obufp++ = info->address_mode == mode_64bit ? 'q' : 'l';
16785 				else
16786 					*info->obufp++ = info->address_mode == mode_64bit ? 'l' : 'w';
16787 				info->used_prefixes |= (info->prefixes & PREFIX_ADDR);
16788 			}
16789 			break;
16790 		case 'G':
16791 			if (info->intel_syntax || (info->obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
16792 				break;
16793 			if ((info->rex & REX_W) || (sizeflag & DFLAG))
16794 				*info->obufp++ = 'l';
16795 			else
16796 				*info->obufp++ = 'w';
16797 			if (!(info->rex & REX_W))
16798 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16799 			break;
16800 		case 'H':
16801 			if (info->intel_syntax)
16802 				break;
16803 			if ((info->prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS || (info->prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
16804 			{
16805 				info->used_prefixes |= info->prefixes & (PREFIX_CS | PREFIX_DS);
16806 				*info->obufp++ = ',';
16807 				*info->obufp++ = 'p';
16808 				if (info->prefixes & PREFIX_DS)
16809 					*info->obufp++ = 't';
16810 				else
16811 					*info->obufp++ = 'n';
16812 			}
16813 			break;
16814 		case 'J':
16815 			if (info->intel_syntax)
16816 				break;
16817 			*info->obufp++ = 'l';
16818 			break;
16819 		case 'K':
16820 			USED_REX(REX_W);
16821 			if (info->rex & REX_W)
16822 				*info->obufp++ = 'q';
16823 			else
16824 				*info->obufp++ = 'd';
16825 			break;
16826 		case 'Z':
16827 			if (l != 0 || len != 1)
16828 			{
16829 				if (l != 1 || len != 2 || last[0] != 'X')
16830 				{
16831 					SAVE_LAST(*p);
16832 					break;
16833 				}
16834 				if (!info->need_vex || !info->vex.evex)
16835 				{
16836 					internal_error(info);
16837 					return -1;
16838 				}
16839 				if (info->intel_syntax || ((info->modrm.mod == 3 || info->vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
16840 					break;
16841 				switch (info->vex.length)
16842 				{
16843 				case 128:
16844 					*info->obufp++ = 'x';
16845 					break;
16846 				case 256:
16847 					*info->obufp++ = 'y';
16848 					break;
16849 				case 512:
16850 					*info->obufp++ = 'z';
16851 					break;
16852 				default:
16853 					internal_error(info);
16854 					return -1;
16855 				}
16856 				break;
16857 			}
16858 			if (info->intel_syntax)
16859 				break;
16860 			if (info->address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
16861 			{
16862 				*info->obufp++ = 'q';
16863 				break;
16864 			}
16865 			/* Fall through.  */
16866 			goto case_L;
16867 		case 'L':
16868 			if (l != 0 || len != 1)
16869 			{
16870 				SAVE_LAST(*p);
16871 				break;
16872 			}
16873 		  case_L:
16874 			if (info->intel_syntax)
16875 				break;
16876 			if (sizeflag & SUFFIX_ALWAYS)
16877 				*info->obufp++ = 'l';
16878 			break;
16879 		case 'M':
16880 			if (info->intel_mnemonic != cond)
16881 				*info->obufp++ = 'r';
16882 			break;
16883 		case 'N':
16884 			if ((info->prefixes & PREFIX_FWAIT) == 0)
16885 				*info->obufp++ = 'n';
16886 			else
16887 				info->used_prefixes |= PREFIX_FWAIT;
16888 			break;
16889 		case 'O':
16890 			USED_REX(REX_W);
16891 			if (info->rex & REX_W)
16892 				*info->obufp++ = 'o';
16893 			else if (info->intel_syntax && (sizeflag & DFLAG))
16894 				*info->obufp++ = 'q';
16895 			else
16896 				*info->obufp++ = 'd';
16897 			if (!(info->rex & REX_W))
16898 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16899 			break;
16900 		case '&':
16901 			if (!info->intel_syntax && info->address_mode == mode_64bit && info->isa64 == intel64)
16902 			{
16903 				*info->obufp++ = 'q';
16904 				break;
16905 			}
16906 			/* Fall through.  */
16907 		case 'T':
16908 			if (!info->intel_syntax && info->address_mode == mode_64bit && ((sizeflag & DFLAG) || (info->rex & REX_W)))
16909 			{
16910 				*info->obufp++ = 'q';
16911 				break;
16912 			}
16913 			/* Fall through.  */
16914 			goto case_P;
16915 		case 'P':
16916 			if (l == 0 && len == 1)
16917 			{
16918 			  case_P:
16919 				if (info->intel_syntax)
16920 				{
16921 					if ((info->rex & REX_W) == 0 && (info->prefixes & PREFIX_DATA))
16922 					{
16923 						if ((sizeflag & DFLAG) == 0)
16924 							*info->obufp++ = 'w';
16925 						info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16926 					}
16927 					break;
16928 				}
16929 				if ((info->prefixes & PREFIX_DATA) || (info->rex & REX_W) || (sizeflag & SUFFIX_ALWAYS))
16930 				{
16931 					USED_REX(REX_W);
16932 					if (info->rex & REX_W)
16933 						*info->obufp++ = 'q';
16934 					else
16935 					{
16936 						if (sizeflag & DFLAG)
16937 							*info->obufp++ = 'l';
16938 						else
16939 							*info->obufp++ = 'w';
16940 						info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16941 					}
16942 				}
16943 			} else
16944 			{
16945 				if (l != 1 || len != 2 || last[0] != 'L')
16946 				{
16947 					SAVE_LAST(*p);
16948 					break;
16949 				}
16950 
16951 				if ((info->prefixes & PREFIX_DATA) || (info->rex & REX_W) || (sizeflag & SUFFIX_ALWAYS))
16952 				{
16953 					USED_REX(REX_W);
16954 					if (info->rex & REX_W)
16955 						*info->obufp++ = 'q';
16956 					else
16957 					{
16958 						if (sizeflag & DFLAG)
16959 							*info->obufp++ = info->intel_syntax ? 'd' : 'l';
16960 						else
16961 							*info->obufp++ = 'w';
16962 						info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16963 					}
16964 				}
16965 			}
16966 			break;
16967 		case 'U':
16968 			if (info->intel_syntax)
16969 				break;
16970 			if (info->address_mode == mode_64bit && ((sizeflag & DFLAG) || (info->rex & REX_W)))
16971 			{
16972 				if (info->modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
16973 					*info->obufp++ = 'q';
16974 				break;
16975 			}
16976 			/* Fall through.  */
16977 			goto case_Q;
16978 		case 'Q':
16979 			if (l == 0 && len == 1)
16980 			{
16981 			  case_Q:
16982 				if (info->intel_syntax && !alt)
16983 					break;
16984 				USED_REX(REX_W);
16985 				if (info->modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
16986 				{
16987 					if (info->rex & REX_W)
16988 						*info->obufp++ = 'q';
16989 					else
16990 					{
16991 						if (sizeflag & DFLAG)
16992 							*info->obufp++ = info->intel_syntax ? 'd' : 'l';
16993 						else
16994 							*info->obufp++ = 'w';
16995 						info->used_prefixes |= (info->prefixes & PREFIX_DATA);
16996 					}
16997 				}
16998 			} else
16999 			{
17000 				if (l != 1 || len != 2 || last[0] != 'L')
17001 				{
17002 					SAVE_LAST(*p);
17003 					break;
17004 				}
17005 				if (info->intel_syntax || (info->modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
17006 					break;
17007 				if ((info->rex & REX_W))
17008 				{
17009 					USED_REX(REX_W);
17010 					*info->obufp++ = 'q';
17011 				} else
17012 					*info->obufp++ = 'l';
17013 			}
17014 			break;
17015 		case 'R':
17016 			USED_REX(REX_W);
17017 			if (info->rex & REX_W)
17018 				*info->obufp++ = 'q';
17019 			else if (sizeflag & DFLAG)
17020 			{
17021 				if (info->intel_syntax)
17022 					*info->obufp++ = 'd';
17023 				else
17024 					*info->obufp++ = 'l';
17025 			} else
17026 				*info->obufp++ = 'w';
17027 			if (info->intel_syntax && !p[1] && ((info->rex & REX_W) || (sizeflag & DFLAG)))
17028 				*info->obufp++ = 'e';
17029 			if (!(info->rex & REX_W))
17030 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
17031 			break;
17032 		case 'V':
17033 			if (l == 0 && len == 1)
17034 			{
17035 				if (info->intel_syntax)
17036 					break;
17037 				if (info->address_mode == mode_64bit && ((sizeflag & DFLAG) || (info->rex & REX_W)))
17038 				{
17039 					if (sizeflag & SUFFIX_ALWAYS)
17040 						*info->obufp++ = 'q';
17041 					break;
17042 				}
17043 			} else
17044 			{
17045 				if (l != 1 || len != 2 || last[0] != 'L')
17046 				{
17047 					SAVE_LAST(*p);
17048 					break;
17049 				}
17050 
17051 				if (info->rex & REX_W)
17052 				{
17053 					*info->obufp++ = 'a';
17054 					*info->obufp++ = 'b';
17055 					*info->obufp++ = 's';
17056 				}
17057 			}
17058 			/* Fall through.  */
17059 			goto case_S;
17060 		case 'S':
17061 			if (l == 0 && len == 1)
17062 			{
17063 			  case_S:
17064 				if (info->intel_syntax)
17065 					break;
17066 				if (sizeflag & SUFFIX_ALWAYS)
17067 				{
17068 					if (info->rex & REX_W)
17069 						*info->obufp++ = 'q';
17070 					else
17071 					{
17072 						if (sizeflag & DFLAG)
17073 							*info->obufp++ = 'l';
17074 						else
17075 							*info->obufp++ = 'w';
17076 						info->used_prefixes |= (info->prefixes & PREFIX_DATA);
17077 					}
17078 				}
17079 			} else
17080 			{
17081 				if (l != 1 || len != 2 || last[0] != 'L')
17082 				{
17083 					SAVE_LAST(*p);
17084 					break;
17085 				}
17086 
17087 				if (info->address_mode == mode_64bit && !(info->prefixes & PREFIX_ADDR))
17088 				{
17089 					*info->obufp++ = 'a';
17090 					*info->obufp++ = 'b';
17091 					*info->obufp++ = 's';
17092 				}
17093 
17094 				goto case_S;
17095 			}
17096 			break;
17097 		case 'X':
17098 			if (l != 0 || len != 1)
17099 			{
17100 				SAVE_LAST(*p);
17101 				break;
17102 			}
17103 			if (info->need_vex && info->vex.prefix)
17104 			{
17105 				if (info->vex.prefix == DATA_PREFIX_OPCODE)
17106 					*info->obufp++ = 'd';
17107 				else
17108 					*info->obufp++ = 's';
17109 			} else
17110 			{
17111 				if (info->prefixes & PREFIX_DATA)
17112 					*info->obufp++ = 'd';
17113 				else
17114 					*info->obufp++ = 's';
17115 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
17116 			}
17117 			break;
17118 		case 'Y':
17119 			if (l == 0 && len == 1)
17120 			{
17121 				if (info->intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
17122 					break;
17123 				if (info->rex & REX_W)
17124 				{
17125 					USED_REX(REX_W);
17126 					*info->obufp++ = 'q';
17127 				}
17128 				break;
17129 			} else
17130 			{
17131 				if (l != 1 || len != 2 || last[0] != 'X')
17132 				{
17133 					SAVE_LAST(*p);
17134 					break;
17135 				}
17136 				if (!info->need_vex)
17137 				{
17138 					internal_error(info);
17139 					return -1;
17140 				}
17141 				if (info->intel_syntax || ((info->modrm.mod == 3 || info->vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
17142 					break;
17143 				switch (info->vex.length)
17144 				{
17145 				case 128:
17146 					*info->obufp++ = 'x';
17147 					break;
17148 				case 256:
17149 					*info->obufp++ = 'y';
17150 					break;
17151 				case 512:
17152 					if (!info->vex.evex)
17153 				default:
17154 					{
17155 						internal_error(info);
17156 						return -1;
17157 					}
17158 					break;
17159 				}
17160 			}
17161 			break;
17162 		case 'W':
17163 			if (l == 0 && len == 1)
17164 			{
17165 				/* operand size flag for cwtl, cbtw */
17166 				USED_REX(REX_W);
17167 				if (info->rex & REX_W)
17168 				{
17169 					if (info->intel_syntax)
17170 						*info->obufp++ = 'd';
17171 					else
17172 						*info->obufp++ = 'l';
17173 				} else if (sizeflag & DFLAG)
17174 					*info->obufp++ = 'w';
17175 				else
17176 					*info->obufp++ = 'b';
17177 				if (!(info->rex & REX_W))
17178 					info->used_prefixes |= (info->prefixes & PREFIX_DATA);
17179 			} else
17180 			{
17181 				if (l != 1 || len != 2 || (last[0] != 'X' && last[0] != 'L'))
17182 				{
17183 					SAVE_LAST(*p);
17184 					break;
17185 				}
17186 				if (!info->need_vex)
17187 				{
17188 					internal_error(info);
17189 					return -1;
17190 				}
17191 				if (last[0] == 'X')
17192 					*info->obufp++ = info->vex.w ? 'd' : 's';
17193 				else
17194 					*info->obufp++ = info->vex.w ? 'q' : 'd';
17195 			}
17196 			break;
17197 		case '^':
17198 			if (info->intel_syntax)
17199 				break;
17200 			if ((info->prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
17201 			{
17202 				if (sizeflag & DFLAG)
17203 					*info->obufp++ = 'l';
17204 				else
17205 					*info->obufp++ = 'w';
17206 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
17207 			}
17208 			break;
17209 		case '@':
17210 			if (info->intel_syntax)
17211 				break;
17212 			if (info->address_mode == mode_64bit && (info->isa64 == intel64 || ((sizeflag & DFLAG) || (info->rex & REX_W))))
17213 			{
17214 				*info->obufp++ = 'q';
17215 			} else if ((info->prefixes & PREFIX_DATA))
17216 			{
17217 				if (!(sizeflag & DFLAG))
17218 					*info->obufp++ = 'w';
17219 				info->used_prefixes |= (info->prefixes & PREFIX_DATA);
17220 			}
17221 			break;
17222 		}
17223 		alt = 0;
17224 	}
17225 	*info->obufp = 0;
17226 	info->mnemonicendp = info->obufp;
17227 	return 0;
17228 }
17229 
17230 
17231 #define ST { OP_ST, 0 }
17232 #define STi { OP_STi, 0 }
17233 
17234 #define FGRPd9_2 NULL, { { NULL, 1 } }, 0
17235 #define FGRPd9_4 NULL, { { NULL, 2 } }, 0
17236 #define FGRPd9_5 NULL, { { NULL, 3 } }, 0
17237 #define FGRPd9_6 NULL, { { NULL, 4 } }, 0
17238 #define FGRPd9_7 NULL, { { NULL, 5 } }, 0
17239 #define FGRPda_5 NULL, { { NULL, 6 } }, 0
17240 #define FGRPdb_4 NULL, { { NULL, 7 } }, 0
17241 #define FGRPde_3 NULL, { { NULL, 8 } }, 0
17242 #define FGRPdf_4 NULL, { { NULL, 9 } }, 0
17243 
17244 
OP_ST(disassemble_info * info,int bytemode,int sizeflag)17245 static void OP_ST(disassemble_info *info, int bytemode, int sizeflag)
17246 {
17247 	UNUSED(bytemode);
17248 	UNUSED(sizeflag);
17249 	oappend_maybe_intel(info, "%st");
17250 }
17251 
17252 
OP_STi(disassemble_info * info,int bytemode,int sizeflag)17253 static void OP_STi(disassemble_info *info, int bytemode, int sizeflag)
17254 {
17255 	char scratchbuf[100];
17256 
17257 	UNUSED(bytemode);
17258 	UNUSED(sizeflag);
17259 	sprintf(scratchbuf, "%%st(%d)", info->modrm.rm);
17260 	oappend_maybe_intel(info, scratchbuf);
17261 }
17262 
17263 
17264 static const struct dis386 float_reg[][8] = {
17265 	/* d8 */
17266 	{
17267 	 { "fadd", { ST, STi }, 0 },
17268 	 { "fmul", { ST, STi }, 0 },
17269 	 { "fcom", { STi }, 0 },
17270 	 { "fcomp", { STi }, 0 },
17271 	 { "fsub", { ST, STi }, 0 },
17272 	 { "fsubr", { ST, STi }, 0 },
17273 	 { "fdiv", { ST, STi }, 0 },
17274 	 { "fdivr", { ST, STi }, 0 },
17275 	 },
17276 	/* d9 */
17277 	{
17278 	 { "fld", { STi }, 0 },
17279 	 { "fxch", { STi }, 0 },
17280 	 { FGRPd9_2 },
17281 	 { Bad_Opcode },
17282 	 { FGRPd9_4 },
17283 	 { FGRPd9_5 },
17284 	 { FGRPd9_6 },
17285 	 { FGRPd9_7 },
17286 	 },
17287 	/* da */
17288 	{
17289 	 { "fcmovb", { ST, STi }, 0 },
17290 	 { "fcmove", { ST, STi }, 0 },
17291 	 { "fcmovbe", { ST, STi }, 0 },
17292 	 { "fcmovu", { ST, STi }, 0 },
17293 	 { Bad_Opcode },
17294 	 { FGRPda_5 },
17295 	 { Bad_Opcode },
17296 	 { Bad_Opcode },
17297 	 },
17298 	/* db */
17299 	{
17300 	 { "fcmovnb", { ST, STi }, 0 },
17301 	 { "fcmovne", { ST, STi }, 0 },
17302 	 { "fcmovnbe", { ST, STi }, 0 },
17303 	 { "fcmovnu", { ST, STi }, 0 },
17304 	 { FGRPdb_4 },
17305 	 { "fucomi", { ST, STi }, 0 },
17306 	 { "fcomi", { ST, STi }, 0 },
17307 	 { Bad_Opcode },
17308 	 },
17309 	/* dc */
17310 	{
17311 	 { "fadd", { STi, ST }, 0 },
17312 	 { "fmul", { STi, ST }, 0 },
17313 	 { Bad_Opcode },
17314 	 { Bad_Opcode },
17315 	 { "fsub!M", { STi, ST }, 0 },
17316 	 { "fsubM", { STi, ST }, 0 },
17317 	 { "fdiv!M", { STi, ST }, 0 },
17318 	 { "fdivM", { STi, ST }, 0 },
17319 	 },
17320 	/* dd */
17321 	{
17322 	 { "ffree", { STi }, 0 },
17323 	 { Bad_Opcode },
17324 	 { "fst", { STi }, 0 },
17325 	 { "fstp", { STi }, 0 },
17326 	 { "fucom", { STi }, 0 },
17327 	 { "fucomp", { STi }, 0 },
17328 	 { Bad_Opcode },
17329 	 { Bad_Opcode },
17330 	 },
17331 	/* de */
17332 	{
17333 	 { "faddp", { STi, ST }, 0 },
17334 	 { "fmulp", { STi, ST }, 0 },
17335 	 { Bad_Opcode },
17336 	 { FGRPde_3 },
17337 	 { "fsub!Mp", { STi, ST }, 0 },
17338 	 { "fsubMp", { STi, ST }, 0 },
17339 	 { "fdiv!Mp", { STi, ST }, 0 },
17340 	 { "fdivMp", { STi, ST }, 0 },
17341 	 },
17342 	/* df */
17343 	{
17344 	 { "ffreep", { STi }, 0 },
17345 	 { Bad_Opcode },
17346 	 { Bad_Opcode },
17347 	 { Bad_Opcode },
17348 	 { FGRPdf_4 },
17349 	 { "fucomip", { ST, STi }, 0 },
17350 	 { "fcomip", { ST, STi }, 0 },
17351 	 { Bad_Opcode },
17352 	 },
17353 };
17354 
dofloat(disassemble_info * info,int sizeflag)17355 static void dofloat(disassemble_info *info, int sizeflag)
17356 {
17357 	const struct dis386 *dp;
17358 	unsigned char floatop;
17359 	floatop = info->codep[-1];
17360 
17361 	if (info->modrm.mod != 3)
17362 	{
17363 		int fp_indx = (floatop - 0xd8) * 8 + info->modrm.reg;
17364 
17365 		if (putop(info, float_mem[fp_indx], sizeflag) < 0)
17366 			return;
17367 		info->obufp = info->op_out[0];
17368 		info->op_ad = 2;
17369 		OP_E(info, float_mem_mode[fp_indx], sizeflag);
17370 		return;
17371 	}
17372 	/* Skip mod/rm byte.  */
17373 	MODRM_CHECK(return);
17374 	info->codep++;
17375 
17376 	dp = &float_reg[floatop - 0xd8][info->modrm.reg];
17377 	if (dp->name == NULL)
17378 	{
17379 		if (putop(info, fgrps[dp->op[0].bytemode][info->modrm.rm], sizeflag) < 0)
17380 			return;
17381 
17382 		/* Instruction fnstsw is only one with strange arg.  */
17383 		if (floatop == 0xdf && info->codep[-1] == 0xe0)
17384 			strcpy(info->op_out[0], info->names16[0]);
17385 	} else
17386 	{
17387 		if (putop(info, dp->name, sizeflag) < 0)
17388 			return;
17389 
17390 		info->obufp = info->op_out[0];
17391 		info->op_ad = 2;
17392 		if (dp->op[0].rtn)
17393 			(*dp->op[0].rtn) (info, dp->op[0].bytemode, sizeflag);
17394 
17395 		info->obufp = info->op_out[1];
17396 		info->op_ad = 1;
17397 		if (dp->op[1].rtn)
17398 			(*dp->op[1].rtn) (info, dp->op[1].bytemode, sizeflag);
17399 	}
17400 }
17401 
17402 
print_insn(bfd_vma pc,disassemble_info * info)17403 static int print_insn(bfd_vma pc, disassemble_info *info)
17404 {
17405 	const struct dis386 *dp;
17406 	int i;
17407 	char *op_txt[MAX_OPERANDS];
17408 	int needcomma;
17409 	int sizeflag, orig_sizeflag;
17410 	int prefix_length;
17411 
17412 	if (info->intel_syntax)
17413 	{
17414 		info->names64 = intel_names64;
17415 		info->names32 = intel_names32;
17416 		info->names16 = intel_names16;
17417 		info->names8 = intel_names8;
17418 		info->names8rex = intel_names8rex;
17419 		info->names_seg = intel_names_seg;
17420 		info->names_mm = intel_names_mm;
17421 		info->names_bnd = intel_names_bnd;
17422 		info->names_xmm = intel_names_xmm;
17423 		info->names_ymm = intel_names_ymm;
17424 		info->names_zmm = intel_names_zmm;
17425 		info->index64 = intel_index64;
17426 		info->index32 = intel_index32;
17427 		info->index16 = intel_index16;
17428 		info->names_mask = intel_names_mask;
17429 		info->open_char = '[';
17430 		info->close_char = ']';
17431 		info->separator_char = '+';
17432 		info->scale_char = '*';
17433 	} else
17434 	{
17435 		info->names64 = att_names64;
17436 		info->names32 = att_names32;
17437 		info->names16 = att_names16;
17438 		info->names8 = att_names8;
17439 		info->names8rex = att_names8rex;
17440 		info->names_seg = att_names_seg;
17441 		info->names_mm = att_names_mm;
17442 		info->names_bnd = att_names_bnd;
17443 		info->names_xmm = att_names_xmm;
17444 		info->names_ymm = att_names_ymm;
17445 		info->names_zmm = att_names_zmm;
17446 		info->index64 = att_index64;
17447 		info->index32 = att_index32;
17448 		info->index16 = att_index16;
17449 		info->names_mask = att_names_mask;
17450 		info->open_char = '(';
17451 		info->close_char = ')';
17452 		info->separator_char = ',';
17453 		info->scale_char = ',';
17454 	}
17455 
17456 	info->dis_private.max_fetched = info->dis_private.the_buffer;
17457 	info->dis_private.insn_start = pc;
17458 
17459 	info->obuf[0] = 0;
17460 	for (i = 0; i < MAX_OPERANDS; ++i)
17461 	{
17462 		info->op_out[i][0] = 0;
17463 		info->op_index[i] = -1;
17464 	}
17465 
17466 	info->start_pc = pc;
17467 	info->start_codep = info->dis_private.the_buffer;
17468 	info->codep = info->dis_private.the_buffer;
17469 
17470 	if (OPCODES_SIGSETJMP(info->dis_private.bailout) != 0)
17471 	{
17472 		const char *name;
17473 
17474 		/* Getting here means we tried for data but didn't get it.  That
17475 		   means we have an incomplete instruction of some sort.  Just
17476 		   print the first byte as a prefix or a .byte pseudo-op.  */
17477 		if (info->codep > info->dis_private.the_buffer)
17478 		{
17479 			name = prefix_name(info, info->dis_private.the_buffer[0], info->dis_private.orig_sizeflag);
17480 			if (name != NULL)
17481 				(*info->fprintf_func) (info->stream, "%s", name);
17482 			else
17483 			{
17484 				/* Just print the first byte as a .byte instruction.  */
17485 				(*info->fprintf_func) (info->stream, ".byte 0x%x", info->dis_private.the_buffer[0]);
17486 			}
17487 
17488 			return 1;
17489 		}
17490 
17491 		return -1;
17492 	}
17493 
17494 	info->obufp = info->obuf;
17495 	sizeflag = info->dis_private.orig_sizeflag;
17496 
17497 	if (!ckprefix(info) || info->rex_used)
17498 	{
17499 		/* Too many prefixes or unused REX prefixes.  */
17500 		for (i = 0; i < (int) ARRAY_SIZE(info->all_prefixes) && info->all_prefixes[i]; i++)
17501 			(*info->fprintf_func) (info->stream, "%s%s", i == 0 ? "" : " ", prefix_name(info, info->all_prefixes[i], sizeflag));
17502 		return i;
17503 	}
17504 
17505 	info->insn_codep = info->codep;
17506 
17507 	FETCH_DATA(info, info->codep + 1);
17508 	info->two_source_ops = (*info->codep == 0x62) || (*info->codep == 0xc8);
17509 
17510 	if (((info->prefixes & PREFIX_FWAIT) && ((*info->codep < 0xd8) || (*info->codep > 0xdf))))
17511 	{
17512 		/* Handle prefixes before fwait.  */
17513 		for (i = 0; i < info->fwait_prefix && info->all_prefixes[i]; i++)
17514 			(*info->fprintf_func) (info->stream, "%s ", prefix_name(info, info->all_prefixes[i], sizeflag));
17515 		(*info->fprintf_func) (info->stream, "fwait");
17516 		return i + 1;
17517 	}
17518 
17519 	if (*info->codep == 0x0f)
17520 	{
17521 		unsigned char threebyte;
17522 
17523 		info->codep++;
17524 		FETCH_DATA(info, info->codep + 1);
17525 		threebyte = *info->codep;
17526 		dp = &dis386_twobyte[threebyte];
17527 		info->need_modrm = twobyte_has_modrm[*info->codep];
17528 		info->codep++;
17529 	} else
17530 	{
17531 		dp = &dis386[*info->codep];
17532 		info->need_modrm = onebyte_has_modrm[*info->codep];
17533 		info->codep++;
17534 	}
17535 
17536 	/* Save sizeflag for printing the extra prefixes later before updating
17537 	   it for mnemonic and operand processing.  The prefix names depend
17538 	   only on the address mode.  */
17539 	orig_sizeflag = sizeflag;
17540 	if (info->prefixes & PREFIX_ADDR)
17541 		sizeflag ^= AFLAG;
17542 	if ((info->prefixes & PREFIX_DATA))
17543 		sizeflag ^= DFLAG;
17544 
17545 	info->end_codep = info->codep;
17546 	if (info->need_modrm)
17547 	{
17548 		FETCH_DATA(info, info->codep + 1);
17549 		info->modrm.mod = (*info->codep >> 6) & 3;
17550 		info->modrm.reg = (*info->codep >> 3) & 7;
17551 		info->modrm.rm = *info->codep & 7;
17552 	}
17553 
17554 	info->need_vex = 0;
17555 	info->need_vex_reg = 0;
17556 	info->vex_w_done = 0;
17557 	info->vex.evex = 0;
17558 
17559 	if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
17560 	{
17561 		get_sib(info, sizeflag);
17562 		dofloat(info, sizeflag);
17563 	} else
17564 	{
17565 		dp = get_valid_dis386(dp, info);
17566 		if (dp != NULL && putop(info, dp->name, sizeflag) == 0)
17567 		{
17568 			get_sib(info, sizeflag);
17569 			for (i = 0; i < MAX_OPERANDS; ++i)
17570 			{
17571 				info->obufp = info->op_out[i];
17572 				info->op_ad = MAX_OPERANDS - 1 - i;
17573 				if (dp->op[i].rtn)
17574 					(*dp->op[i].rtn) (info, dp->op[i].bytemode, sizeflag);
17575 				/* For EVEX instruction after the last operand masking
17576 				   should be printed.  */
17577 				if (i == 0 && info->vex.evex)
17578 				{
17579 					/* Don't print {%k0}.  */
17580 					if (info->vex.mask_register_specifier)
17581 					{
17582 						oappend(info, "{ ");
17583 						oappend(info, info->names_mask[info->vex.mask_register_specifier]);
17584 						oappend(info, " }");
17585 					}
17586 					if (info->vex.zeroing)
17587 						oappend(info, "{z}");
17588 				}
17589 			}
17590 		}
17591 	}
17592 
17593 	/* Check if the REX prefix is used.  */
17594 	if (info->rex_ignored == 0 && (info->rex ^ info->rex_used) == 0 && info->last_rex_prefix >= 0)
17595 		info->all_prefixes[info->last_rex_prefix] = 0;
17596 
17597 	/* Check if the SEG prefix is used.  */
17598 	if ((info->prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
17599 					 | PREFIX_FS | PREFIX_GS)) != 0 && (info->used_prefixes & info->active_seg_prefix) != 0)
17600 		info->all_prefixes[info->last_seg_prefix] = 0;
17601 
17602 	/* Check if the ADDR prefix is used.  */
17603 	if ((info->prefixes & PREFIX_ADDR) != 0 && (info->used_prefixes & PREFIX_ADDR) != 0)
17604 		info->all_prefixes[info->last_addr_prefix] = 0;
17605 
17606 	/* Check if the DATA prefix is used.  */
17607 	if ((info->prefixes & PREFIX_DATA) != 0 && (info->used_prefixes & PREFIX_DATA) != 0)
17608 		info->all_prefixes[info->last_data_prefix] = 0;
17609 
17610 	/* Print the extra prefixes.  */
17611 	prefix_length = 0;
17612 	for (i = 0; i < (int) ARRAY_SIZE(info->all_prefixes); i++)
17613 	{
17614 		if (info->all_prefixes[i])
17615 		{
17616 			const char *name;
17617 
17618 			name = prefix_name(info, info->all_prefixes[i], orig_sizeflag);
17619 			if (name == NULL)
17620 			{
17621 				internal_error(info);
17622 				return -1;
17623 			}
17624 			prefix_length += strlen(name) + 1;
17625 			(*info->fprintf_func) (info->stream, "%s ", name);
17626 		}
17627 	}
17628 
17629 	/* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
17630 	   unused, opcode is invalid.  Since the PREFIX_DATA prefix may be
17631 	   used by putop and MMX/SSE operand and may be overriden by the
17632 	   PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
17633 	   separately.  */
17634 	if (dp->prefix_requirement == PREFIX_OPCODE
17635 		&& dp != &bad_opcode
17636 		&& (((info->prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
17637 			 && (info->used_prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
17638 			|| ((((info->prefixes & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA)) == PREFIX_DATA) && (info->used_prefixes & PREFIX_DATA) == 0))))
17639 	{
17640 		(*info->fprintf_func) (info->stream, "(bad)");
17641 		return info->end_codep - info->dis_private.the_buffer;
17642 	}
17643 
17644 	/* Check maximum code length.  */
17645 	if ((info->codep - info->start_codep) > MAX_CODE_LENGTH)
17646 	{
17647 		(*info->fprintf_func) (info->stream, "(bad)");
17648 		return MAX_CODE_LENGTH;
17649 	}
17650 
17651 	info->obufp = info->mnemonicendp;
17652 	for (i = strlen(info->obuf) + prefix_length; i < 6; i++)
17653 		oappend(info, " ");
17654 	oappend(info, " ");
17655 	(*info->fprintf_func) (info->stream, "%s", info->obuf);
17656 
17657 	/* The enter and bound instructions are printed with operands in the same
17658 	   order as the intel book; everything else is printed in reverse order.  */
17659 	if (info->intel_syntax || info->two_source_ops)
17660 	{
17661 		int riprel;
17662 
17663 		for (i = 0; i < MAX_OPERANDS; ++i)
17664 			op_txt[i] = info->op_out[i];
17665 
17666 		if (info->intel_syntax && dp && dp->op[2].rtn == OP_Rounding && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
17667 		{
17668 			op_txt[2] = info->op_out[3];
17669 			op_txt[3] = info->op_out[2];
17670 		}
17671 
17672 		for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
17673 		{
17674 			info->op_ad = info->op_index[i];
17675 			info->op_index[i] = info->op_index[MAX_OPERANDS - 1 - i];
17676 			info->op_index[MAX_OPERANDS - 1 - i] = info->op_ad;
17677 			riprel = info->op_riprel[i];
17678 			info->op_riprel[i] = info->op_riprel[MAX_OPERANDS - 1 - i];
17679 			info->op_riprel[MAX_OPERANDS - 1 - i] = riprel;
17680 		}
17681 	} else
17682 	{
17683 		for (i = 0; i < MAX_OPERANDS; ++i)
17684 			op_txt[MAX_OPERANDS - 1 - i] = info->op_out[i];
17685 	}
17686 
17687 	needcomma = 0;
17688 	for (i = 0; i < MAX_OPERANDS; ++i)
17689 	{
17690 		if (*op_txt[i])
17691 		{
17692 			if (needcomma)
17693 				(*info->fprintf_func) (info->stream, ",");
17694 			if (info->op_index[i] != -1 && !info->op_riprel[i])
17695 				(*info->print_address_func) (info->op_address[info->op_index[i]], info);
17696 			else
17697 				(*info->fprintf_func) (info->stream, "%s", op_txt[i]);
17698 			needcomma = 1;
17699 		}
17700 	}
17701 
17702 	for (i = 0; i < MAX_OPERANDS; i++)
17703 	{
17704 		if (info->op_index[i] != -1 && info->op_riprel[i])
17705 		{
17706 			(*info->fprintf_func) (info->stream, "        # ");
17707 			(*info->print_address_func) (info->start_pc + (info->codep - info->start_codep) + info->op_address[info->op_index[i]], info);
17708 			break;
17709 		}
17710 	}
17711 	return info->codep - info->dis_private.the_buffer;
17712 }
17713 
17714 
17715 /* Get LENGTH bytes from info's buffer, at target address memaddr.
17716    Transfer them to myaddr.  */
buffer_read_memory(bfd_vma memaddr,bfd_byte * myaddr,size_t length,disassemble_info * info)17717 static int buffer_read_memory(bfd_vma memaddr, bfd_byte *myaddr, size_t length, disassemble_info *info)
17718 {
17719 	size_t opb = 1;
17720 	size_t end_addr_offset = length / opb;
17721 	size_t max_addr_offset = info->buffer_length / opb;
17722 	size_t octets = (memaddr - info->buffer_vma) * opb;
17723 
17724 	if (memaddr < info->buffer_vma
17725 		|| memaddr - info->buffer_vma > max_addr_offset
17726 		|| memaddr - info->buffer_vma + end_addr_offset > max_addr_offset
17727 		|| (info->stop_vma && (memaddr >= info->stop_vma || memaddr + end_addr_offset > info->stop_vma)))
17728 		/* Out of bounds.  Use EIO because GDB uses it.  */
17729 		return EIO;
17730 	memcpy(myaddr, info->buffer + octets, length);
17731 
17732 	return 0;
17733 }
17734 
17735 
17736 /* Print an error message.  We can assume that this is in response to
17737    an error return from buffer_read_memory.  */
17738 
perror_memory(int status,bfd_vma memaddr,disassemble_info * info)17739 static void perror_memory(int status, bfd_vma memaddr, disassemble_info *info)
17740 {
17741 	if (status != EIO)
17742 		/* Can't happen.  */
17743 		info->fprintf_func(info->stream, _("Unknown error %d\n"), status);
17744 	else
17745 	{
17746 		char buf[30];
17747 
17748 		/* Actually, address between memaddr and memaddr + len was
17749 		   out of bounds.  */
17750 		sprintf(buf, "%016" PRIx64, (uint64_t)memaddr);
17751 		info->fprintf_func(info->stream, _("Address 0x%s is out of bounds.\n"), buf);
17752 	}
17753 }
17754 
17755 
x86_disassemble_set_option(disassemble_info * info,const char * options)17756 void x86_disassemble_set_option(disassemble_info *info, const char *options)
17757 {
17758 	const char *p;
17759 
17760 	for (p = options; p != NULL;)
17761 	{
17762 		if (CONST_STRNEQ(p, "amd64"))
17763 		{
17764 			info->isa64 = amd64;
17765 		} else if (CONST_STRNEQ(p, "intel64"))
17766 		{
17767 			info->isa64 = intel64;
17768 		} else if (CONST_STRNEQ(p, "x86-64"))
17769 		{
17770 			info->address_mode = mode_64bit;
17771 			info->dis_private.orig_sizeflag = AFLAG | DFLAG;
17772 		} else if (CONST_STRNEQ(p, "i386"))
17773 		{
17774 			info->address_mode = mode_32bit;
17775 			info->dis_private.orig_sizeflag = AFLAG | DFLAG;
17776 		} else if (CONST_STRNEQ(p, "i8086"))
17777 		{
17778 			info->address_mode = mode_16bit;
17779 			info->dis_private.orig_sizeflag = 0;
17780 		} else if (CONST_STRNEQ(p, "intel"))
17781 		{
17782 			info->intel_syntax = 1;
17783 			if (CONST_STRNEQ(p + 5, "-mnemonic"))
17784 				info->intel_mnemonic = 1;
17785 		} else if (CONST_STRNEQ(p, "att"))
17786 		{
17787 			info->intel_syntax = 0;
17788 			if (CONST_STRNEQ(p + 3, "-mnemonic"))
17789 				info->intel_mnemonic = 0;
17790 		} else if (CONST_STRNEQ(p, "addr"))
17791 		{
17792 			if (info->address_mode == mode_64bit)
17793 			{
17794 				if (p[4] == '3' && p[5] == '2')
17795 					info->dis_private.orig_sizeflag &= ~AFLAG;
17796 				else if (p[4] == '6' && p[5] == '4')
17797 					info->dis_private.orig_sizeflag |= AFLAG;
17798 			} else
17799 			{
17800 				if (p[4] == '1' && p[5] == '6')
17801 					info->dis_private.orig_sizeflag &= ~AFLAG;
17802 				else if (p[4] == '3' && p[5] == '2')
17803 					info->dis_private.orig_sizeflag |= AFLAG;
17804 			}
17805 		} else if (CONST_STRNEQ(p, "data"))
17806 		{
17807 			if (p[4] == '1' && p[5] == '6')
17808 				info->dis_private.orig_sizeflag &= ~DFLAG;
17809 			else if (p[4] == '3' && p[5] == '2')
17810 				info->dis_private.orig_sizeflag |= DFLAG;
17811 		} else if (CONST_STRNEQ(p, "suffix"))
17812 		{
17813 			info->dis_private.orig_sizeflag |= SUFFIX_ALWAYS;
17814 		}
17815 
17816 		p = strchr(p, ',');
17817 		if (p != NULL)
17818 			p++;
17819 	}
17820 }
17821 
17822 
generic_print_address(bfd_vma addr,disassemble_info * info)17823 static void generic_print_address(bfd_vma addr, disassemble_info *info)
17824 {
17825 	char buf[30];
17826 
17827 	if (info->address_mode == mode_64bit)
17828 		sprintf(buf, "%016" PRIx64, (uint64_t)addr);
17829 	else
17830 		sprintf(buf, "%08" PRIx32, (uint32_t)addr);
17831 	(*info->fprintf_func) (info->stream, "0x%s", buf);
17832 }
17833 
17834 
x86_print_insn(bfd_vma ainst,disassemble_info * info)17835 int x86_print_insn(bfd_vma ainst, disassemble_info *info)
17836 {
17837 	info->buffer = (bfd_byte *)ainst;
17838 	info->buffer_length = 16;
17839 	info->buffer_vma = (uintptr_t)ainst;
17840 	return print_insn(ainst, info);
17841 }
17842 
17843 
x86_disassemble_init(disassemble_info ** pinfo,void * stream,fprintf_ftype fprintf_func)17844 void x86_disassemble_init(disassemble_info **pinfo, void *stream, fprintf_ftype fprintf_func)
17845 {
17846 	disassemble_info *info = *pinfo;
17847 
17848 	if (info == NULL)
17849 	{
17850 		info = (disassemble_info *)malloc(sizeof(*info));
17851 		*pinfo = info;
17852 	}
17853 	memset(info, 0, sizeof(*info));
17854 
17855 	info->fprintf_func = fprintf_func;
17856 	info->stream = stream;
17857 	info->read_memory_func = buffer_read_memory;
17858 	info->memory_error_func = perror_memory;
17859 	info->print_address_func = generic_print_address;
17860 
17861 	info->dis_private.orig_sizeflag = AFLAG | DFLAG;
17862 #if BFD_ARCH_SIZE >= 64
17863 	info->address_mode = mode_64bit;
17864 #else
17865 	info->address_mode = mode_32bit;
17866 #endif
17867 	info->intel_syntax = 0;
17868 	info->intel_mnemonic = !SYSV386_COMPAT;
17869 	/* The output looks better if we put 7 bytes on a line, since that
17870 	   puts most long word instructions on a single line.  Use 8 bytes
17871 	   for Intel L1OM.  */
17872 	info->bytes_per_line = 7;
17873 }
17874 
17875 
x86_disassemble_exit(disassemble_info ** pinfo)17876 void x86_disassemble_exit(disassemble_info **pinfo)
17877 {
17878 	free(*pinfo);
17879 	*pinfo = NULL;
17880 }
17881 
17882 #else
17883 
17884 extern int i_dont_care_that_ISOC_doesnt_like_empty_sourcefiles;
17885 
17886 #endif /* DISASM_USE_BUILTIN */
17887