1 /* Print i386 instructions for GDB, the GNU debugger.
2 Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
6 This file is part of the GNU opcodes library.
8 This library is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 It is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
24 /* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
26 modified by John Hassey (hassey@dg-rtp.dg.com)
27 x86-64 support added by Jan Hubicka (jh@suse.cz)
28 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
30 /* The main tables describing the instructions is essentially a copy
31 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
32 Programmers Manual. Usually, there is a capital letter, followed
33 by a small letter. The capital letter tell the addressing mode,
34 and the small letter tells about the operand size. Refer to
35 the Intel manual for details. */
40 #include "opcode/i386.h"
41 #include "libiberty.h"
45 static int fetch_data (struct disassemble_info
*, bfd_byte
*);
46 static void ckprefix (void);
47 static const char *prefix_name (int, int);
48 static int print_insn (bfd_vma
, disassemble_info
*);
49 static void dofloat (int);
50 static void OP_ST (int, int);
51 static void OP_STi (int, int);
52 static int putop (const char *, int);
53 static void oappend (const char *);
54 static void append_seg (void);
55 static void OP_indirE (int, int);
56 static void print_operand_value (char *, int, bfd_vma
);
57 static void OP_E_register (int, int);
58 static void OP_E_memory (int, int, int);
59 static void OP_E_extended (int, int, int);
60 static void print_displacement (char *, bfd_vma
);
61 static void OP_E (int, int);
62 static void OP_G (int, int);
63 static bfd_vma
get64 (void);
64 static bfd_signed_vma
get32 (void);
65 static bfd_signed_vma
get32s (void);
66 static int get16 (void);
67 static void set_op (bfd_vma
, int);
68 static void OP_Skip_MODRM (int, int);
69 static void OP_REG (int, int);
70 static void OP_IMREG (int, int);
71 static void OP_I (int, int);
72 static void OP_I64 (int, int);
73 static void OP_sI (int, int);
74 static void OP_J (int, int);
75 static void OP_SEG (int, int);
76 static void OP_DIR (int, int);
77 static void OP_OFF (int, int);
78 static void OP_OFF64 (int, int);
79 static void ptr_reg (int, int);
80 static void OP_ESreg (int, int);
81 static void OP_DSreg (int, int);
82 static void OP_C (int, int);
83 static void OP_D (int, int);
84 static void OP_T (int, int);
85 static void OP_R (int, int);
86 static void OP_MMX (int, int);
87 static void OP_XMM (int, int);
88 static void OP_EM (int, int);
89 static void OP_EX (int, int);
90 static void OP_EMC (int,int);
91 static void OP_MXC (int,int);
92 static void OP_MS (int, int);
93 static void OP_XS (int, int);
94 static void OP_M (int, int);
95 static void OP_VEX (int, int);
96 static void OP_VEX_FMA (int, int);
97 static void OP_EX_Vex (int, int);
98 static void OP_EX_VexW (int, int);
99 static void OP_EX_VexImmW (int, int);
100 static void OP_XMM_Vex (int, int);
101 static void OP_XMM_VexW (int, int);
102 static void OP_REG_VexI4 (int, int);
103 static void PCLMUL_Fixup (int, int);
104 static void VEXI4_Fixup (int, int);
105 static void VZERO_Fixup (int, int);
106 static void VCMP_Fixup (int, int);
107 static void VPERMIL2_Fixup (int, int);
108 static void OP_0f07 (int, int);
109 static void OP_Monitor (int, int);
110 static void OP_Mwait (int, int);
111 static void NOP_Fixup1 (int, int);
112 static void NOP_Fixup2 (int, int);
113 static void OP_3DNowSuffix (int, int);
114 static void CMP_Fixup (int, int);
115 static void BadOp (void);
116 static void REP_Fixup (int, int);
117 static void CMPXCHG8B_Fixup (int, int);
118 static void XMM_Fixup (int, int);
119 static void CRC32_Fixup (int, int);
120 static void print_drex_arg (unsigned int, int, int);
121 static void OP_DREX4 (int, int);
122 static void OP_DREX3 (int, int);
123 static void OP_DREX_ICMP (int, int);
124 static void OP_DREX_FCMP (int, int);
125 static void MOVBE_Fixup (int, int);
128 /* Points to first byte not fetched. */
129 bfd_byte
*max_fetched
;
130 bfd_byte the_buffer
[MAX_MNEM_SIZE
];
143 enum address_mode address_mode
;
145 /* Flags for the prefixes for the current instruction. See below. */
148 /* REX prefix the current instruction. See below. */
150 /* Bits of REX we've already used. */
152 /* Original REX prefix. */
153 static int rex_original
;
154 /* REX bits in original REX prefix ignored. It may not be the same
155 as rex_original since some bits may not be ignored. */
156 static int rex_ignored
;
157 /* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161 #define USED_REX(value) \
166 rex_used |= (value) | REX_OPCODE; \
169 rex_used |= REX_OPCODE; \
172 /* Special 'registers' for DREX handling */
173 #define DREX_REG_UNKNOWN 1000 /* not initialized */
174 #define DREX_REG_MEMORY 1001 /* use MODRM/SIB/OFFSET memory */
176 /* The DREX byte has the following fields:
177 Bits 7-4 -- DREX.Dest, xmm destination register
178 Bit 3 -- DREX.OC0, operand config bit defines operand order
179 Bit 2 -- DREX.R, equivalent to REX_R bit, to extend ModRM register
180 Bit 1 -- DREX.X, equivalent to REX_X bit, to extend SIB index field
181 Bit 0 -- DREX.W, equivalent to REX_B bit, to extend ModRM r/m field,
182 SIB base field, or opcode reg field. */
183 #define DREX_XMM(drex) ((drex >> 4) & 0xf)
184 #define DREX_OC0(drex) ((drex >> 3) & 0x1)
186 /* Flags for prefixes which we somehow handled when printing the
187 current instruction. */
188 static int used_prefixes
;
190 /* Flags stored in PREFIXES. */
191 #define PREFIX_REPZ 1
192 #define PREFIX_REPNZ 2
193 #define PREFIX_LOCK 4
195 #define PREFIX_SS 0x10
196 #define PREFIX_DS 0x20
197 #define PREFIX_ES 0x40
198 #define PREFIX_FS 0x80
199 #define PREFIX_GS 0x100
200 #define PREFIX_DATA 0x200
201 #define PREFIX_ADDR 0x400
202 #define PREFIX_FWAIT 0x800
204 /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
205 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
207 #define FETCH_DATA(info, addr) \
208 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
209 ? 1 : fetch_data ((info), (addr)))
212 fetch_data (struct disassemble_info
*info
, bfd_byte
*addr
)
215 struct dis_private
*priv
= (struct dis_private
*) info
->private_data
;
216 bfd_vma start
= priv
->insn_start
+ (priv
->max_fetched
- priv
->the_buffer
);
218 if (addr
<= priv
->the_buffer
+ MAX_MNEM_SIZE
)
219 status
= (*info
->read_memory_func
) (start
,
221 addr
- priv
->max_fetched
,
227 /* If we did manage to read at least one byte, then
228 print_insn_i386 will do something sensible. Otherwise, print
229 an error. We do that here because this is where we know
231 if (priv
->max_fetched
== priv
->the_buffer
)
232 (*info
->memory_error_func
) (status
, start
, info
);
233 longjmp (priv
->bailout
, 1);
236 priv
->max_fetched
= addr
;
240 #define XX { NULL, 0 }
242 #define Eb { OP_E, b_mode }
243 #define Ev { OP_E, v_mode }
244 #define Ed { OP_E, d_mode }
245 #define Edq { OP_E, dq_mode }
246 #define Edqw { OP_E, dqw_mode }
247 #define Edqb { OP_E, dqb_mode }
248 #define Edqd { OP_E, dqd_mode }
249 #define Eq { OP_E, q_mode }
250 #define indirEv { OP_indirE, stack_v_mode }
251 #define indirEp { OP_indirE, f_mode }
252 #define stackEv { OP_E, stack_v_mode }
253 #define Em { OP_E, m_mode }
254 #define Ew { OP_E, w_mode }
255 #define M { OP_M, 0 } /* lea, lgdt, etc. */
256 #define Ma { OP_M, a_mode }
257 #define Mb { OP_M, b_mode }
258 #define Md { OP_M, d_mode }
259 #define Mo { OP_M, o_mode }
260 #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
261 #define Mq { OP_M, q_mode }
262 #define Mx { OP_M, x_mode }
263 #define Mxmm { OP_M, xmm_mode }
264 #define Gb { OP_G, b_mode }
265 #define Gv { OP_G, v_mode }
266 #define Gd { OP_G, d_mode }
267 #define Gdq { OP_G, dq_mode }
268 #define Gm { OP_G, m_mode }
269 #define Gw { OP_G, w_mode }
270 #define Rd { OP_R, d_mode }
271 #define Rm { OP_R, m_mode }
272 #define Ib { OP_I, b_mode }
273 #define sIb { OP_sI, b_mode } /* sign extened byte */
274 #define Iv { OP_I, v_mode }
275 #define Iq { OP_I, q_mode }
276 #define Iv64 { OP_I64, v_mode }
277 #define Iw { OP_I, w_mode }
278 #define I1 { OP_I, const_1_mode }
279 #define Jb { OP_J, b_mode }
280 #define Jv { OP_J, v_mode }
281 #define Cm { OP_C, m_mode }
282 #define Dm { OP_D, m_mode }
283 #define Td { OP_T, d_mode }
284 #define Skip_MODRM { OP_Skip_MODRM, 0 }
286 #define RMeAX { OP_REG, eAX_reg }
287 #define RMeBX { OP_REG, eBX_reg }
288 #define RMeCX { OP_REG, eCX_reg }
289 #define RMeDX { OP_REG, eDX_reg }
290 #define RMeSP { OP_REG, eSP_reg }
291 #define RMeBP { OP_REG, eBP_reg }
292 #define RMeSI { OP_REG, eSI_reg }
293 #define RMeDI { OP_REG, eDI_reg }
294 #define RMrAX { OP_REG, rAX_reg }
295 #define RMrBX { OP_REG, rBX_reg }
296 #define RMrCX { OP_REG, rCX_reg }
297 #define RMrDX { OP_REG, rDX_reg }
298 #define RMrSP { OP_REG, rSP_reg }
299 #define RMrBP { OP_REG, rBP_reg }
300 #define RMrSI { OP_REG, rSI_reg }
301 #define RMrDI { OP_REG, rDI_reg }
302 #define RMAL { OP_REG, al_reg }
303 #define RMAL { OP_REG, al_reg }
304 #define RMCL { OP_REG, cl_reg }
305 #define RMDL { OP_REG, dl_reg }
306 #define RMBL { OP_REG, bl_reg }
307 #define RMAH { OP_REG, ah_reg }
308 #define RMCH { OP_REG, ch_reg }
309 #define RMDH { OP_REG, dh_reg }
310 #define RMBH { OP_REG, bh_reg }
311 #define RMAX { OP_REG, ax_reg }
312 #define RMDX { OP_REG, dx_reg }
314 #define eAX { OP_IMREG, eAX_reg }
315 #define eBX { OP_IMREG, eBX_reg }
316 #define eCX { OP_IMREG, eCX_reg }
317 #define eDX { OP_IMREG, eDX_reg }
318 #define eSP { OP_IMREG, eSP_reg }
319 #define eBP { OP_IMREG, eBP_reg }
320 #define eSI { OP_IMREG, eSI_reg }
321 #define eDI { OP_IMREG, eDI_reg }
322 #define AL { OP_IMREG, al_reg }
323 #define CL { OP_IMREG, cl_reg }
324 #define DL { OP_IMREG, dl_reg }
325 #define BL { OP_IMREG, bl_reg }
326 #define AH { OP_IMREG, ah_reg }
327 #define CH { OP_IMREG, ch_reg }
328 #define DH { OP_IMREG, dh_reg }
329 #define BH { OP_IMREG, bh_reg }
330 #define AX { OP_IMREG, ax_reg }
331 #define DX { OP_IMREG, dx_reg }
332 #define zAX { OP_IMREG, z_mode_ax_reg }
333 #define indirDX { OP_IMREG, indir_dx_reg }
335 #define Sw { OP_SEG, w_mode }
336 #define Sv { OP_SEG, v_mode }
337 #define Ap { OP_DIR, 0 }
338 #define Ob { OP_OFF64, b_mode }
339 #define Ov { OP_OFF64, v_mode }
340 #define Xb { OP_DSreg, eSI_reg }
341 #define Xv { OP_DSreg, eSI_reg }
342 #define Xz { OP_DSreg, eSI_reg }
343 #define Yb { OP_ESreg, eDI_reg }
344 #define Yv { OP_ESreg, eDI_reg }
345 #define DSBX { OP_DSreg, eBX_reg }
347 #define es { OP_REG, es_reg }
348 #define ss { OP_REG, ss_reg }
349 #define cs { OP_REG, cs_reg }
350 #define ds { OP_REG, ds_reg }
351 #define fs { OP_REG, fs_reg }
352 #define gs { OP_REG, gs_reg }
354 #define MX { OP_MMX, 0 }
355 #define XM { OP_XMM, 0 }
356 #define XMM { OP_XMM, xmm_mode }
357 #define EM { OP_EM, v_mode }
358 #define EMd { OP_EM, d_mode }
359 #define EMx { OP_EM, x_mode }
360 #define EXw { OP_EX, w_mode }
361 #define EXd { OP_EX, d_mode }
362 #define EXq { OP_EX, q_mode }
363 #define EXx { OP_EX, x_mode }
364 #define EXxmm { OP_EX, xmm_mode }
365 #define EXxmmq { OP_EX, xmmq_mode }
366 #define EXymmq { OP_EX, ymmq_mode }
367 #define MS { OP_MS, v_mode }
368 #define XS { OP_XS, v_mode }
369 #define EMCq { OP_EMC, q_mode }
370 #define MXC { OP_MXC, 0 }
371 #define OPSUF { OP_3DNowSuffix, 0 }
372 #define CMP { CMP_Fixup, 0 }
373 #define XMM0 { XMM_Fixup, 0 }
375 #define Vex { OP_VEX, vex_mode }
376 #define Vex128 { OP_VEX, vex128_mode }
377 #define Vex256 { OP_VEX, vex256_mode }
378 #define VexI4 { VEXI4_Fixup, 0}
379 #define VexFMA { OP_VEX_FMA, vex_mode }
380 #define Vex128FMA { OP_VEX_FMA, vex128_mode }
381 #define EXdVex { OP_EX_Vex, d_mode }
382 #define EXqVex { OP_EX_Vex, q_mode }
383 #define EXVexW { OP_EX_VexW, x_mode }
384 #define EXdVexW { OP_EX_VexW, d_mode }
385 #define EXqVexW { OP_EX_VexW, q_mode }
386 #define EXVexImmW { OP_EX_VexImmW, x_mode }
387 #define XMVex { OP_XMM_Vex, 0 }
388 #define XMVexW { OP_XMM_VexW, 0 }
389 #define XMVexI4 { OP_REG_VexI4, x_mode }
390 #define PCLMUL { PCLMUL_Fixup, 0 }
391 #define VZERO { VZERO_Fixup, 0 }
392 #define VCMP { VCMP_Fixup, 0 }
393 #define VPERMIL2 { VPERMIL2_Fixup, 0 }
395 /* Used handle "rep" prefix for string instructions. */
396 #define Xbr { REP_Fixup, eSI_reg }
397 #define Xvr { REP_Fixup, eSI_reg }
398 #define Ybr { REP_Fixup, eDI_reg }
399 #define Yvr { REP_Fixup, eDI_reg }
400 #define Yzr { REP_Fixup, eDI_reg }
401 #define indirDXr { REP_Fixup, indir_dx_reg }
402 #define ALr { REP_Fixup, al_reg }
403 #define eAXr { REP_Fixup, eAX_reg }
405 #define cond_jump_flag { NULL, cond_jump_mode }
406 #define loop_jcxz_flag { NULL, loop_jcxz_mode }
408 /* bits in sizeflag */
409 #define SUFFIX_ALWAYS 4
415 /* operand size depends on prefixes */
416 #define v_mode (b_mode + 1)
418 #define w_mode (v_mode + 1)
419 /* double word operand */
420 #define d_mode (w_mode + 1)
421 /* quad word operand */
422 #define q_mode (d_mode + 1)
423 /* ten-byte operand */
424 #define t_mode (q_mode + 1)
425 /* 16-byte XMM or 32-byte YMM operand */
426 #define x_mode (t_mode + 1)
427 /* 16-byte XMM operand */
428 #define xmm_mode (x_mode + 1)
429 /* 16-byte XMM or quad word operand */
430 #define xmmq_mode (xmm_mode + 1)
431 /* 32-byte YMM or quad word operand */
432 #define ymmq_mode (xmmq_mode + 1)
433 /* d_mode in 32bit, q_mode in 64bit mode. */
434 #define m_mode (ymmq_mode + 1)
435 /* pair of v_mode operands */
436 #define a_mode (m_mode + 1)
437 #define cond_jump_mode (a_mode + 1)
438 #define loop_jcxz_mode (cond_jump_mode + 1)
439 /* operand size depends on REX prefixes. */
440 #define dq_mode (loop_jcxz_mode + 1)
441 /* registers like dq_mode, memory like w_mode. */
442 #define dqw_mode (dq_mode + 1)
443 /* 4- or 6-byte pointer operand */
444 #define f_mode (dqw_mode + 1)
445 #define const_1_mode (f_mode + 1)
446 /* v_mode for stack-related opcodes. */
447 #define stack_v_mode (const_1_mode + 1)
448 /* non-quad operand size depends on prefixes */
449 #define z_mode (stack_v_mode + 1)
450 /* 16-byte operand */
451 #define o_mode (z_mode + 1)
452 /* registers like dq_mode, memory like b_mode. */
453 #define dqb_mode (o_mode + 1)
454 /* registers like dq_mode, memory like d_mode. */
455 #define dqd_mode (dqb_mode + 1)
456 /* normal vex mode */
457 #define vex_mode (dqd_mode + 1)
458 /* 128bit vex mode */
459 #define vex128_mode (vex_mode + 1)
460 /* 256bit vex mode */
461 #define vex256_mode (vex128_mode + 1)
463 #define es_reg (vex256_mode + 1)
464 #define cs_reg (es_reg + 1)
465 #define ss_reg (cs_reg + 1)
466 #define ds_reg (ss_reg + 1)
467 #define fs_reg (ds_reg + 1)
468 #define gs_reg (fs_reg + 1)
470 #define eAX_reg (gs_reg + 1)
471 #define eCX_reg (eAX_reg + 1)
472 #define eDX_reg (eCX_reg + 1)
473 #define eBX_reg (eDX_reg + 1)
474 #define eSP_reg (eBX_reg + 1)
475 #define eBP_reg (eSP_reg + 1)
476 #define eSI_reg (eBP_reg + 1)
477 #define eDI_reg (eSI_reg + 1)
479 #define al_reg (eDI_reg + 1)
480 #define cl_reg (al_reg + 1)
481 #define dl_reg (cl_reg + 1)
482 #define bl_reg (dl_reg + 1)
483 #define ah_reg (bl_reg + 1)
484 #define ch_reg (ah_reg + 1)
485 #define dh_reg (ch_reg + 1)
486 #define bh_reg (dh_reg + 1)
488 #define ax_reg (bh_reg + 1)
489 #define cx_reg (ax_reg + 1)
490 #define dx_reg (cx_reg + 1)
491 #define bx_reg (dx_reg + 1)
492 #define sp_reg (bx_reg + 1)
493 #define bp_reg (sp_reg + 1)
494 #define si_reg (bp_reg + 1)
495 #define di_reg (si_reg + 1)
497 #define rAX_reg (di_reg + 1)
498 #define rCX_reg (rAX_reg + 1)
499 #define rDX_reg (rCX_reg + 1)
500 #define rBX_reg (rDX_reg + 1)
501 #define rSP_reg (rBX_reg + 1)
502 #define rBP_reg (rSP_reg + 1)
503 #define rSI_reg (rBP_reg + 1)
504 #define rDI_reg (rSI_reg + 1)
506 #define z_mode_ax_reg (rDI_reg + 1)
507 #define indir_dx_reg (z_mode_ax_reg + 1)
509 #define MAX_BYTEMODE indir_dx_reg
511 /* Flags that are OR'ed into the bytemode field to pass extra
513 #define DREX_OC1 0x10000 /* OC1 bit set */
514 #define DREX_NO_OC0 0x20000 /* OC0 bit not used */
515 #define DREX_MASK 0x40000 /* mask to delete */
517 #if MAX_BYTEMODE >= DREX_OC1
518 #error MAX_BYTEMODE must be less than DREX_OC1
522 #define USE_REG_TABLE (FLOATCODE + 1)
523 #define USE_MOD_TABLE (USE_REG_TABLE + 1)
524 #define USE_RM_TABLE (USE_MOD_TABLE + 1)
525 #define USE_PREFIX_TABLE (USE_RM_TABLE + 1)
526 #define USE_X86_64_TABLE (USE_PREFIX_TABLE + 1)
527 #define USE_3BYTE_TABLE (USE_X86_64_TABLE + 1)
528 #define USE_VEX_C4_TABLE (USE_3BYTE_TABLE + 1)
529 #define USE_VEX_C5_TABLE (USE_VEX_C4_TABLE + 1)
530 #define USE_VEX_LEN_TABLE (USE_VEX_C5_TABLE + 1)
532 #define FLOAT NULL, { { NULL, FLOATCODE } }
534 #define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
535 #define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
536 #define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
537 #define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
538 #define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
539 #define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
540 #define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
541 #define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
542 #define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
543 #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
546 #define REG_81 (REG_80 + 1)
547 #define REG_82 (REG_81 + 1)
548 #define REG_8F (REG_82 + 1)
549 #define REG_C0 (REG_8F + 1)
550 #define REG_C1 (REG_C0 + 1)
551 #define REG_C6 (REG_C1 + 1)
552 #define REG_C7 (REG_C6 + 1)
553 #define REG_D0 (REG_C7 + 1)
554 #define REG_D1 (REG_D0 + 1)
555 #define REG_D2 (REG_D1 + 1)
556 #define REG_D3 (REG_D2 + 1)
557 #define REG_F6 (REG_D3 + 1)
558 #define REG_F7 (REG_F6 + 1)
559 #define REG_FE (REG_F7 + 1)
560 #define REG_FF (REG_FE + 1)
561 #define REG_0F00 (REG_FF + 1)
562 #define REG_0F01 (REG_0F00 + 1)
563 #define REG_0F0D (REG_0F01 + 1)
564 #define REG_0F18 (REG_0F0D + 1)
565 #define REG_0F71 (REG_0F18 + 1)
566 #define REG_0F72 (REG_0F71 + 1)
567 #define REG_0F73 (REG_0F72 + 1)
568 #define REG_0FA6 (REG_0F73 + 1)
569 #define REG_0FA7 (REG_0FA6 + 1)
570 #define REG_0FAE (REG_0FA7 + 1)
571 #define REG_0FBA (REG_0FAE + 1)
572 #define REG_0FC7 (REG_0FBA + 1)
573 #define REG_VEX_71 (REG_0FC7 + 1)
574 #define REG_VEX_72 (REG_VEX_71 + 1)
575 #define REG_VEX_73 (REG_VEX_72 + 1)
576 #define REG_VEX_AE (REG_VEX_73 + 1)
579 #define MOD_0F01_REG_0 (MOD_8D + 1)
580 #define MOD_0F01_REG_1 (MOD_0F01_REG_0 + 1)
581 #define MOD_0F01_REG_2 (MOD_0F01_REG_1 + 1)
582 #define MOD_0F01_REG_3 (MOD_0F01_REG_2 + 1)
583 #define MOD_0F01_REG_7 (MOD_0F01_REG_3 + 1)
584 #define MOD_0F12_PREFIX_0 (MOD_0F01_REG_7 + 1)
585 #define MOD_0F13 (MOD_0F12_PREFIX_0 + 1)
586 #define MOD_0F16_PREFIX_0 (MOD_0F13 + 1)
587 #define MOD_0F17 (MOD_0F16_PREFIX_0 + 1)
588 #define MOD_0F18_REG_0 (MOD_0F17 + 1)
589 #define MOD_0F18_REG_1 (MOD_0F18_REG_0 + 1)
590 #define MOD_0F18_REG_2 (MOD_0F18_REG_1 + 1)
591 #define MOD_0F18_REG_3 (MOD_0F18_REG_2 + 1)
592 #define MOD_0F20 (MOD_0F18_REG_3 + 1)
593 #define MOD_0F21 (MOD_0F20 + 1)
594 #define MOD_0F22 (MOD_0F21 + 1)
595 #define MOD_0F23 (MOD_0F22 + 1)
596 #define MOD_0F24 (MOD_0F23 + 1)
597 #define MOD_0F26 (MOD_0F24 + 1)
598 #define MOD_0F2B_PREFIX_0 (MOD_0F26 + 1)
599 #define MOD_0F2B_PREFIX_1 (MOD_0F2B_PREFIX_0 + 1)
600 #define MOD_0F2B_PREFIX_2 (MOD_0F2B_PREFIX_1 + 1)
601 #define MOD_0F2B_PREFIX_3 (MOD_0F2B_PREFIX_2 + 1)
602 #define MOD_0F51 (MOD_0F2B_PREFIX_3 + 1)
603 #define MOD_0F71_REG_2 (MOD_0F51 + 1)
604 #define MOD_0F71_REG_4 (MOD_0F71_REG_2 + 1)
605 #define MOD_0F71_REG_6 (MOD_0F71_REG_4 + 1)
606 #define MOD_0F72_REG_2 (MOD_0F71_REG_6 + 1)
607 #define MOD_0F72_REG_4 (MOD_0F72_REG_2 + 1)
608 #define MOD_0F72_REG_6 (MOD_0F72_REG_4 + 1)
609 #define MOD_0F73_REG_2 (MOD_0F72_REG_6 + 1)
610 #define MOD_0F73_REG_3 (MOD_0F73_REG_2 + 1)
611 #define MOD_0F73_REG_6 (MOD_0F73_REG_3 + 1)
612 #define MOD_0F73_REG_7 (MOD_0F73_REG_6 + 1)
613 #define MOD_0FAE_REG_0 (MOD_0F73_REG_7 + 1)
614 #define MOD_0FAE_REG_1 (MOD_0FAE_REG_0 + 1)
615 #define MOD_0FAE_REG_2 (MOD_0FAE_REG_1 + 1)
616 #define MOD_0FAE_REG_3 (MOD_0FAE_REG_2 + 1)
617 #define MOD_0FAE_REG_4 (MOD_0FAE_REG_3 + 1)
618 #define MOD_0FAE_REG_5 (MOD_0FAE_REG_4 + 1)
619 #define MOD_0FAE_REG_6 (MOD_0FAE_REG_5 + 1)
620 #define MOD_0FAE_REG_7 (MOD_0FAE_REG_6 + 1)
621 #define MOD_0FB2 (MOD_0FAE_REG_7 + 1)
622 #define MOD_0FB4 (MOD_0FB2 + 1)
623 #define MOD_0FB5 (MOD_0FB4 + 1)
624 #define MOD_0FC7_REG_6 (MOD_0FB5 + 1)
625 #define MOD_0FC7_REG_7 (MOD_0FC7_REG_6 + 1)
626 #define MOD_0FD7 (MOD_0FC7_REG_7 + 1)
627 #define MOD_0FE7_PREFIX_2 (MOD_0FD7 + 1)
628 #define MOD_0FF0_PREFIX_3 (MOD_0FE7_PREFIX_2 + 1)
629 #define MOD_0F382A_PREFIX_2 (MOD_0FF0_PREFIX_3 + 1)
630 #define MOD_62_32BIT (MOD_0F382A_PREFIX_2 + 1)
631 #define MOD_C4_32BIT (MOD_62_32BIT + 1)
632 #define MOD_C5_32BIT (MOD_C4_32BIT + 1)
633 #define MOD_VEX_12_PREFIX_0 (MOD_C5_32BIT + 1)
634 #define MOD_VEX_13 (MOD_VEX_12_PREFIX_0 + 1)
635 #define MOD_VEX_16_PREFIX_0 (MOD_VEX_13 + 1)
636 #define MOD_VEX_17 (MOD_VEX_16_PREFIX_0 + 1)
637 #define MOD_VEX_2B (MOD_VEX_17 + 1)
638 #define MOD_VEX_51 (MOD_VEX_2B + 1)
639 #define MOD_VEX_71_REG_2 (MOD_VEX_51 + 1)
640 #define MOD_VEX_71_REG_4 (MOD_VEX_71_REG_2 + 1)
641 #define MOD_VEX_71_REG_6 (MOD_VEX_71_REG_4 + 1)
642 #define MOD_VEX_72_REG_2 (MOD_VEX_71_REG_6 + 1)
643 #define MOD_VEX_72_REG_4 (MOD_VEX_72_REG_2 + 1)
644 #define MOD_VEX_72_REG_6 (MOD_VEX_72_REG_4 + 1)
645 #define MOD_VEX_73_REG_2 (MOD_VEX_72_REG_6 + 1)
646 #define MOD_VEX_73_REG_3 (MOD_VEX_73_REG_2 + 1)
647 #define MOD_VEX_73_REG_6 (MOD_VEX_73_REG_3 + 1)
648 #define MOD_VEX_73_REG_7 (MOD_VEX_73_REG_6 + 1)
649 #define MOD_VEX_AE_REG_2 (MOD_VEX_73_REG_7 + 1)
650 #define MOD_VEX_AE_REG_3 (MOD_VEX_AE_REG_2 + 1)
651 #define MOD_VEX_D7_PREFIX_2 (MOD_VEX_AE_REG_3 + 1)
652 #define MOD_VEX_E7_PREFIX_2 (MOD_VEX_D7_PREFIX_2 + 1)
653 #define MOD_VEX_F0_PREFIX_3 (MOD_VEX_E7_PREFIX_2 + 1)
654 #define MOD_VEX_3818_PREFIX_2 (MOD_VEX_F0_PREFIX_3 + 1)
655 #define MOD_VEX_3819_PREFIX_2 (MOD_VEX_3818_PREFIX_2 + 1)
656 #define MOD_VEX_381A_PREFIX_2 (MOD_VEX_3819_PREFIX_2 + 1)
657 #define MOD_VEX_382A_PREFIX_2 (MOD_VEX_381A_PREFIX_2 + 1)
658 #define MOD_VEX_382C_PREFIX_2 (MOD_VEX_382A_PREFIX_2 + 1)
659 #define MOD_VEX_382D_PREFIX_2 (MOD_VEX_382C_PREFIX_2 + 1)
660 #define MOD_VEX_382E_PREFIX_2 (MOD_VEX_382D_PREFIX_2 + 1)
661 #define MOD_VEX_382F_PREFIX_2 (MOD_VEX_382E_PREFIX_2 + 1)
663 #define RM_0F01_REG_0 0
664 #define RM_0F01_REG_1 (RM_0F01_REG_0 + 1)
665 #define RM_0F01_REG_2 (RM_0F01_REG_1 + 1)
666 #define RM_0F01_REG_3 (RM_0F01_REG_2 + 1)
667 #define RM_0F01_REG_7 (RM_0F01_REG_3 + 1)
668 #define RM_0FAE_REG_5 (RM_0F01_REG_7 + 1)
669 #define RM_0FAE_REG_6 (RM_0FAE_REG_5 + 1)
670 #define RM_0FAE_REG_7 (RM_0FAE_REG_6 + 1)
673 #define PREFIX_0F10 (PREFIX_90 + 1)
674 #define PREFIX_0F11 (PREFIX_0F10 + 1)
675 #define PREFIX_0F12 (PREFIX_0F11 + 1)
676 #define PREFIX_0F16 (PREFIX_0F12 + 1)
677 #define PREFIX_0F2A (PREFIX_0F16 + 1)
678 #define PREFIX_0F2B (PREFIX_0F2A + 1)
679 #define PREFIX_0F2C (PREFIX_0F2B + 1)
680 #define PREFIX_0F2D (PREFIX_0F2C + 1)
681 #define PREFIX_0F2E (PREFIX_0F2D + 1)
682 #define PREFIX_0F2F (PREFIX_0F2E + 1)
683 #define PREFIX_0F51 (PREFIX_0F2F + 1)
684 #define PREFIX_0F52 (PREFIX_0F51 + 1)
685 #define PREFIX_0F53 (PREFIX_0F52 + 1)
686 #define PREFIX_0F58 (PREFIX_0F53 + 1)
687 #define PREFIX_0F59 (PREFIX_0F58 + 1)
688 #define PREFIX_0F5A (PREFIX_0F59 + 1)
689 #define PREFIX_0F5B (PREFIX_0F5A + 1)
690 #define PREFIX_0F5C (PREFIX_0F5B + 1)
691 #define PREFIX_0F5D (PREFIX_0F5C + 1)
692 #define PREFIX_0F5E (PREFIX_0F5D + 1)
693 #define PREFIX_0F5F (PREFIX_0F5E + 1)
694 #define PREFIX_0F60 (PREFIX_0F5F + 1)
695 #define PREFIX_0F61 (PREFIX_0F60 + 1)
696 #define PREFIX_0F62 (PREFIX_0F61 + 1)
697 #define PREFIX_0F6C (PREFIX_0F62 + 1)
698 #define PREFIX_0F6D (PREFIX_0F6C + 1)
699 #define PREFIX_0F6F (PREFIX_0F6D + 1)
700 #define PREFIX_0F70 (PREFIX_0F6F + 1)
701 #define PREFIX_0F73_REG_3 (PREFIX_0F70 + 1)
702 #define PREFIX_0F73_REG_7 (PREFIX_0F73_REG_3 + 1)
703 #define PREFIX_0F78 (PREFIX_0F73_REG_7 + 1)
704 #define PREFIX_0F79 (PREFIX_0F78 + 1)
705 #define PREFIX_0F7C (PREFIX_0F79 + 1)
706 #define PREFIX_0F7D (PREFIX_0F7C + 1)
707 #define PREFIX_0F7E (PREFIX_0F7D + 1)
708 #define PREFIX_0F7F (PREFIX_0F7E + 1)
709 #define PREFIX_0FB8 (PREFIX_0F7F + 1)
710 #define PREFIX_0FBD (PREFIX_0FB8 + 1)
711 #define PREFIX_0FC2 (PREFIX_0FBD + 1)
712 #define PREFIX_0FC3 (PREFIX_0FC2 + 1)
713 #define PREFIX_0FC7_REG_6 (PREFIX_0FC3 + 1)
714 #define PREFIX_0FD0 (PREFIX_0FC7_REG_6 + 1)
715 #define PREFIX_0FD6 (PREFIX_0FD0 + 1)
716 #define PREFIX_0FE6 (PREFIX_0FD6 + 1)
717 #define PREFIX_0FE7 (PREFIX_0FE6 + 1)
718 #define PREFIX_0FF0 (PREFIX_0FE7 + 1)
719 #define PREFIX_0FF7 (PREFIX_0FF0 + 1)
720 #define PREFIX_0F3810 (PREFIX_0FF7 + 1)
721 #define PREFIX_0F3814 (PREFIX_0F3810 + 1)
722 #define PREFIX_0F3815 (PREFIX_0F3814 + 1)
723 #define PREFIX_0F3817 (PREFIX_0F3815 + 1)
724 #define PREFIX_0F3820 (PREFIX_0F3817 + 1)
725 #define PREFIX_0F3821 (PREFIX_0F3820 + 1)
726 #define PREFIX_0F3822 (PREFIX_0F3821 + 1)
727 #define PREFIX_0F3823 (PREFIX_0F3822 + 1)
728 #define PREFIX_0F3824 (PREFIX_0F3823 + 1)
729 #define PREFIX_0F3825 (PREFIX_0F3824 + 1)
730 #define PREFIX_0F3828 (PREFIX_0F3825 + 1)
731 #define PREFIX_0F3829 (PREFIX_0F3828 + 1)
732 #define PREFIX_0F382A (PREFIX_0F3829 + 1)
733 #define PREFIX_0F382B (PREFIX_0F382A + 1)
734 #define PREFIX_0F3830 (PREFIX_0F382B + 1)
735 #define PREFIX_0F3831 (PREFIX_0F3830 + 1)
736 #define PREFIX_0F3832 (PREFIX_0F3831 + 1)
737 #define PREFIX_0F3833 (PREFIX_0F3832 + 1)
738 #define PREFIX_0F3834 (PREFIX_0F3833 + 1)
739 #define PREFIX_0F3835 (PREFIX_0F3834 + 1)
740 #define PREFIX_0F3837 (PREFIX_0F3835 + 1)
741 #define PREFIX_0F3838 (PREFIX_0F3837 + 1)
742 #define PREFIX_0F3839 (PREFIX_0F3838 + 1)
743 #define PREFIX_0F383A (PREFIX_0F3839 + 1)
744 #define PREFIX_0F383B (PREFIX_0F383A + 1)
745 #define PREFIX_0F383C (PREFIX_0F383B + 1)
746 #define PREFIX_0F383D (PREFIX_0F383C + 1)
747 #define PREFIX_0F383E (PREFIX_0F383D + 1)
748 #define PREFIX_0F383F (PREFIX_0F383E + 1)
749 #define PREFIX_0F3840 (PREFIX_0F383F + 1)
750 #define PREFIX_0F3841 (PREFIX_0F3840 + 1)
751 #define PREFIX_0F3880 (PREFIX_0F3841 + 1)
752 #define PREFIX_0F3881 (PREFIX_0F3880 + 1)
753 #define PREFIX_0F38DB (PREFIX_0F3881 + 1)
754 #define PREFIX_0F38DC (PREFIX_0F38DB + 1)
755 #define PREFIX_0F38DD (PREFIX_0F38DC + 1)
756 #define PREFIX_0F38DE (PREFIX_0F38DD + 1)
757 #define PREFIX_0F38DF (PREFIX_0F38DE + 1)
758 #define PREFIX_0F38F0 (PREFIX_0F38DF + 1)
759 #define PREFIX_0F38F1 (PREFIX_0F38F0 + 1)
760 #define PREFIX_0F3A08 (PREFIX_0F38F1 + 1)
761 #define PREFIX_0F3A09 (PREFIX_0F3A08 + 1)
762 #define PREFIX_0F3A0A (PREFIX_0F3A09 + 1)
763 #define PREFIX_0F3A0B (PREFIX_0F3A0A + 1)
764 #define PREFIX_0F3A0C (PREFIX_0F3A0B + 1)
765 #define PREFIX_0F3A0D (PREFIX_0F3A0C + 1)
766 #define PREFIX_0F3A0E (PREFIX_0F3A0D + 1)
767 #define PREFIX_0F3A14 (PREFIX_0F3A0E + 1)
768 #define PREFIX_0F3A15 (PREFIX_0F3A14 + 1)
769 #define PREFIX_0F3A16 (PREFIX_0F3A15 + 1)
770 #define PREFIX_0F3A17 (PREFIX_0F3A16 + 1)
771 #define PREFIX_0F3A20 (PREFIX_0F3A17 + 1)
772 #define PREFIX_0F3A21 (PREFIX_0F3A20 + 1)
773 #define PREFIX_0F3A22 (PREFIX_0F3A21 + 1)
774 #define PREFIX_0F3A40 (PREFIX_0F3A22 + 1)
775 #define PREFIX_0F3A41 (PREFIX_0F3A40 + 1)
776 #define PREFIX_0F3A42 (PREFIX_0F3A41 + 1)
777 #define PREFIX_0F3A44 (PREFIX_0F3A42 + 1)
778 #define PREFIX_0F3A60 (PREFIX_0F3A44 + 1)
779 #define PREFIX_0F3A61 (PREFIX_0F3A60 + 1)
780 #define PREFIX_0F3A62 (PREFIX_0F3A61 + 1)
781 #define PREFIX_0F3A63 (PREFIX_0F3A62 + 1)
782 #define PREFIX_0F3ADF (PREFIX_0F3A63 + 1)
783 #define PREFIX_VEX_10 (PREFIX_0F3ADF + 1)
784 #define PREFIX_VEX_11 (PREFIX_VEX_10 + 1)
785 #define PREFIX_VEX_12 (PREFIX_VEX_11 + 1)
786 #define PREFIX_VEX_16 (PREFIX_VEX_12 + 1)
787 #define PREFIX_VEX_2A (PREFIX_VEX_16 + 1)
788 #define PREFIX_VEX_2C (PREFIX_VEX_2A + 1)
789 #define PREFIX_VEX_2D (PREFIX_VEX_2C + 1)
790 #define PREFIX_VEX_2E (PREFIX_VEX_2D + 1)
791 #define PREFIX_VEX_2F (PREFIX_VEX_2E + 1)
792 #define PREFIX_VEX_51 (PREFIX_VEX_2F + 1)
793 #define PREFIX_VEX_52 (PREFIX_VEX_51 + 1)
794 #define PREFIX_VEX_53 (PREFIX_VEX_52 + 1)
795 #define PREFIX_VEX_58 (PREFIX_VEX_53 + 1)
796 #define PREFIX_VEX_59 (PREFIX_VEX_58 + 1)
797 #define PREFIX_VEX_5A (PREFIX_VEX_59 + 1)
798 #define PREFIX_VEX_5B (PREFIX_VEX_5A + 1)
799 #define PREFIX_VEX_5C (PREFIX_VEX_5B + 1)
800 #define PREFIX_VEX_5D (PREFIX_VEX_5C + 1)
801 #define PREFIX_VEX_5E (PREFIX_VEX_5D + 1)
802 #define PREFIX_VEX_5F (PREFIX_VEX_5E + 1)
803 #define PREFIX_VEX_60 (PREFIX_VEX_5F + 1)
804 #define PREFIX_VEX_61 (PREFIX_VEX_60 + 1)
805 #define PREFIX_VEX_62 (PREFIX_VEX_61 + 1)
806 #define PREFIX_VEX_63 (PREFIX_VEX_62 + 1)
807 #define PREFIX_VEX_64 (PREFIX_VEX_63 + 1)
808 #define PREFIX_VEX_65 (PREFIX_VEX_64 + 1)
809 #define PREFIX_VEX_66 (PREFIX_VEX_65 + 1)
810 #define PREFIX_VEX_67 (PREFIX_VEX_66 + 1)
811 #define PREFIX_VEX_68 (PREFIX_VEX_67 + 1)
812 #define PREFIX_VEX_69 (PREFIX_VEX_68 + 1)
813 #define PREFIX_VEX_6A (PREFIX_VEX_69 + 1)
814 #define PREFIX_VEX_6B (PREFIX_VEX_6A + 1)
815 #define PREFIX_VEX_6C (PREFIX_VEX_6B + 1)
816 #define PREFIX_VEX_6D (PREFIX_VEX_6C + 1)
817 #define PREFIX_VEX_6E (PREFIX_VEX_6D + 1)
818 #define PREFIX_VEX_6F (PREFIX_VEX_6E + 1)
819 #define PREFIX_VEX_70 (PREFIX_VEX_6F + 1)
820 #define PREFIX_VEX_71_REG_2 (PREFIX_VEX_70 + 1)
821 #define PREFIX_VEX_71_REG_4 (PREFIX_VEX_71_REG_2 + 1)
822 #define PREFIX_VEX_71_REG_6 (PREFIX_VEX_71_REG_4 + 1)
823 #define PREFIX_VEX_72_REG_2 (PREFIX_VEX_71_REG_6 + 1)
824 #define PREFIX_VEX_72_REG_4 (PREFIX_VEX_72_REG_2 + 1)
825 #define PREFIX_VEX_72_REG_6 (PREFIX_VEX_72_REG_4 + 1)
826 #define PREFIX_VEX_73_REG_2 (PREFIX_VEX_72_REG_6 + 1)
827 #define PREFIX_VEX_73_REG_3 (PREFIX_VEX_73_REG_2 + 1)
828 #define PREFIX_VEX_73_REG_6 (PREFIX_VEX_73_REG_3 + 1)
829 #define PREFIX_VEX_73_REG_7 (PREFIX_VEX_73_REG_6 + 1)
830 #define PREFIX_VEX_74 (PREFIX_VEX_73_REG_7 + 1)
831 #define PREFIX_VEX_75 (PREFIX_VEX_74 + 1)
832 #define PREFIX_VEX_76 (PREFIX_VEX_75 + 1)
833 #define PREFIX_VEX_77 (PREFIX_VEX_76 + 1)
834 #define PREFIX_VEX_7C (PREFIX_VEX_77 + 1)
835 #define PREFIX_VEX_7D (PREFIX_VEX_7C + 1)
836 #define PREFIX_VEX_7E (PREFIX_VEX_7D + 1)
837 #define PREFIX_VEX_7F (PREFIX_VEX_7E + 1)
838 #define PREFIX_VEX_C2 (PREFIX_VEX_7F + 1)
839 #define PREFIX_VEX_C4 (PREFIX_VEX_C2 + 1)
840 #define PREFIX_VEX_C5 (PREFIX_VEX_C4 + 1)
841 #define PREFIX_VEX_D0 (PREFIX_VEX_C5 + 1)
842 #define PREFIX_VEX_D1 (PREFIX_VEX_D0 + 1)
843 #define PREFIX_VEX_D2 (PREFIX_VEX_D1 + 1)
844 #define PREFIX_VEX_D3 (PREFIX_VEX_D2 + 1)
845 #define PREFIX_VEX_D4 (PREFIX_VEX_D3 + 1)
846 #define PREFIX_VEX_D5 (PREFIX_VEX_D4 + 1)
847 #define PREFIX_VEX_D6 (PREFIX_VEX_D5 + 1)
848 #define PREFIX_VEX_D7 (PREFIX_VEX_D6 + 1)
849 #define PREFIX_VEX_D8 (PREFIX_VEX_D7 + 1)
850 #define PREFIX_VEX_D9 (PREFIX_VEX_D8 + 1)
851 #define PREFIX_VEX_DA (PREFIX_VEX_D9 + 1)
852 #define PREFIX_VEX_DB (PREFIX_VEX_DA + 1)
853 #define PREFIX_VEX_DC (PREFIX_VEX_DB + 1)
854 #define PREFIX_VEX_DD (PREFIX_VEX_DC + 1)
855 #define PREFIX_VEX_DE (PREFIX_VEX_DD + 1)
856 #define PREFIX_VEX_DF (PREFIX_VEX_DE + 1)
857 #define PREFIX_VEX_E0 (PREFIX_VEX_DF + 1)
858 #define PREFIX_VEX_E1 (PREFIX_VEX_E0 + 1)
859 #define PREFIX_VEX_E2 (PREFIX_VEX_E1 + 1)
860 #define PREFIX_VEX_E3 (PREFIX_VEX_E2 + 1)
861 #define PREFIX_VEX_E4 (PREFIX_VEX_E3 + 1)
862 #define PREFIX_VEX_E5 (PREFIX_VEX_E4 + 1)
863 #define PREFIX_VEX_E6 (PREFIX_VEX_E5 + 1)
864 #define PREFIX_VEX_E7 (PREFIX_VEX_E6 + 1)
865 #define PREFIX_VEX_E8 (PREFIX_VEX_E7 + 1)
866 #define PREFIX_VEX_E9 (PREFIX_VEX_E8 + 1)
867 #define PREFIX_VEX_EA (PREFIX_VEX_E9 + 1)
868 #define PREFIX_VEX_EB (PREFIX_VEX_EA + 1)
869 #define PREFIX_VEX_EC (PREFIX_VEX_EB + 1)
870 #define PREFIX_VEX_ED (PREFIX_VEX_EC + 1)
871 #define PREFIX_VEX_EE (PREFIX_VEX_ED + 1)
872 #define PREFIX_VEX_EF (PREFIX_VEX_EE + 1)
873 #define PREFIX_VEX_F0 (PREFIX_VEX_EF + 1)
874 #define PREFIX_VEX_F1 (PREFIX_VEX_F0 + 1)
875 #define PREFIX_VEX_F2 (PREFIX_VEX_F1 + 1)
876 #define PREFIX_VEX_F3 (PREFIX_VEX_F2 + 1)
877 #define PREFIX_VEX_F4 (PREFIX_VEX_F3 + 1)
878 #define PREFIX_VEX_F5 (PREFIX_VEX_F4 + 1)
879 #define PREFIX_VEX_F6 (PREFIX_VEX_F5 + 1)
880 #define PREFIX_VEX_F7 (PREFIX_VEX_F6 + 1)
881 #define PREFIX_VEX_F8 (PREFIX_VEX_F7 + 1)
882 #define PREFIX_VEX_F9 (PREFIX_VEX_F8 + 1)
883 #define PREFIX_VEX_FA (PREFIX_VEX_F9 + 1)
884 #define PREFIX_VEX_FB (PREFIX_VEX_FA + 1)
885 #define PREFIX_VEX_FC (PREFIX_VEX_FB + 1)
886 #define PREFIX_VEX_FD (PREFIX_VEX_FC + 1)
887 #define PREFIX_VEX_FE (PREFIX_VEX_FD + 1)
888 #define PREFIX_VEX_3800 (PREFIX_VEX_FE + 1)
889 #define PREFIX_VEX_3801 (PREFIX_VEX_3800 + 1)
890 #define PREFIX_VEX_3802 (PREFIX_VEX_3801 + 1)
891 #define PREFIX_VEX_3803 (PREFIX_VEX_3802 + 1)
892 #define PREFIX_VEX_3804 (PREFIX_VEX_3803 + 1)
893 #define PREFIX_VEX_3805 (PREFIX_VEX_3804 + 1)
894 #define PREFIX_VEX_3806 (PREFIX_VEX_3805 + 1)
895 #define PREFIX_VEX_3807 (PREFIX_VEX_3806 + 1)
896 #define PREFIX_VEX_3808 (PREFIX_VEX_3807 + 1)
897 #define PREFIX_VEX_3809 (PREFIX_VEX_3808 + 1)
898 #define PREFIX_VEX_380A (PREFIX_VEX_3809 + 1)
899 #define PREFIX_VEX_380B (PREFIX_VEX_380A + 1)
900 #define PREFIX_VEX_380C (PREFIX_VEX_380B + 1)
901 #define PREFIX_VEX_380D (PREFIX_VEX_380C + 1)
902 #define PREFIX_VEX_380E (PREFIX_VEX_380D + 1)
903 #define PREFIX_VEX_380F (PREFIX_VEX_380E + 1)
904 #define PREFIX_VEX_3817 (PREFIX_VEX_380F + 1)
905 #define PREFIX_VEX_3818 (PREFIX_VEX_3817 + 1)
906 #define PREFIX_VEX_3819 (PREFIX_VEX_3818 + 1)
907 #define PREFIX_VEX_381A (PREFIX_VEX_3819 + 1)
908 #define PREFIX_VEX_381C (PREFIX_VEX_381A + 1)
909 #define PREFIX_VEX_381D (PREFIX_VEX_381C + 1)
910 #define PREFIX_VEX_381E (PREFIX_VEX_381D + 1)
911 #define PREFIX_VEX_3820 (PREFIX_VEX_381E + 1)
912 #define PREFIX_VEX_3821 (PREFIX_VEX_3820 + 1)
913 #define PREFIX_VEX_3822 (PREFIX_VEX_3821 + 1)
914 #define PREFIX_VEX_3823 (PREFIX_VEX_3822 + 1)
915 #define PREFIX_VEX_3824 (PREFIX_VEX_3823 + 1)
916 #define PREFIX_VEX_3825 (PREFIX_VEX_3824 + 1)
917 #define PREFIX_VEX_3828 (PREFIX_VEX_3825 + 1)
918 #define PREFIX_VEX_3829 (PREFIX_VEX_3828 + 1)
919 #define PREFIX_VEX_382A (PREFIX_VEX_3829 + 1)
920 #define PREFIX_VEX_382B (PREFIX_VEX_382A + 1)
921 #define PREFIX_VEX_382C (PREFIX_VEX_382B + 1)
922 #define PREFIX_VEX_382D (PREFIX_VEX_382C + 1)
923 #define PREFIX_VEX_382E (PREFIX_VEX_382D + 1)
924 #define PREFIX_VEX_382F (PREFIX_VEX_382E + 1)
925 #define PREFIX_VEX_3830 (PREFIX_VEX_382F + 1)
926 #define PREFIX_VEX_3831 (PREFIX_VEX_3830 + 1)
927 #define PREFIX_VEX_3832 (PREFIX_VEX_3831 + 1)
928 #define PREFIX_VEX_3833 (PREFIX_VEX_3832 + 1)
929 #define PREFIX_VEX_3834 (PREFIX_VEX_3833 + 1)
930 #define PREFIX_VEX_3835 (PREFIX_VEX_3834 + 1)
931 #define PREFIX_VEX_3837 (PREFIX_VEX_3835 + 1)
932 #define PREFIX_VEX_3838 (PREFIX_VEX_3837 + 1)
933 #define PREFIX_VEX_3839 (PREFIX_VEX_3838 + 1)
934 #define PREFIX_VEX_383A (PREFIX_VEX_3839 + 1)
935 #define PREFIX_VEX_383B (PREFIX_VEX_383A + 1)
936 #define PREFIX_VEX_383C (PREFIX_VEX_383B + 1)
937 #define PREFIX_VEX_383D (PREFIX_VEX_383C + 1)
938 #define PREFIX_VEX_383E (PREFIX_VEX_383D + 1)
939 #define PREFIX_VEX_383F (PREFIX_VEX_383E + 1)
940 #define PREFIX_VEX_3840 (PREFIX_VEX_383F + 1)
941 #define PREFIX_VEX_3841 (PREFIX_VEX_3840 + 1)
942 #define PREFIX_VEX_3A04 (PREFIX_VEX_3841 + 1)
943 #define PREFIX_VEX_3A05 (PREFIX_VEX_3A04 + 1)
944 #define PREFIX_VEX_3A06 (PREFIX_VEX_3A05 + 1)
945 #define PREFIX_VEX_3A08 (PREFIX_VEX_3A06 + 1)
946 #define PREFIX_VEX_3A09 (PREFIX_VEX_3A08 + 1)
947 #define PREFIX_VEX_3A0A (PREFIX_VEX_3A09 + 1)
948 #define PREFIX_VEX_3A0B (PREFIX_VEX_3A0A + 1)
949 #define PREFIX_VEX_3A0C (PREFIX_VEX_3A0B + 1)
950 #define PREFIX_VEX_3A0D (PREFIX_VEX_3A0C + 1)
951 #define PREFIX_VEX_3A0E (PREFIX_VEX_3A0D + 1)
952 #define PREFIX_VEX_3A0F (PREFIX_VEX_3A0E + 1)
953 #define PREFIX_VEX_3A14 (PREFIX_VEX_3A0F + 1)
954 #define PREFIX_VEX_3A15 (PREFIX_VEX_3A14 + 1)
955 #define PREFIX_VEX_3A16 (PREFIX_VEX_3A15 + 1)
956 #define PREFIX_VEX_3A17 (PREFIX_VEX_3A16 + 1)
957 #define PREFIX_VEX_3A18 (PREFIX_VEX_3A17 + 1)
958 #define PREFIX_VEX_3A19 (PREFIX_VEX_3A18 + 1)
959 #define PREFIX_VEX_3A20 (PREFIX_VEX_3A19 + 1)
960 #define PREFIX_VEX_3A21 (PREFIX_VEX_3A20 + 1)
961 #define PREFIX_VEX_3A22 (PREFIX_VEX_3A21 + 1)
962 #define PREFIX_VEX_3A40 (PREFIX_VEX_3A22 + 1)
963 #define PREFIX_VEX_3A41 (PREFIX_VEX_3A40 + 1)
964 #define PREFIX_VEX_3A42 (PREFIX_VEX_3A41 + 1)
965 #define PREFIX_VEX_3A48 (PREFIX_VEX_3A42 + 1)
966 #define PREFIX_VEX_3A49 (PREFIX_VEX_3A48 + 1)
967 #define PREFIX_VEX_3A4A (PREFIX_VEX_3A49 + 1)
968 #define PREFIX_VEX_3A4B (PREFIX_VEX_3A4A + 1)
969 #define PREFIX_VEX_3A4C (PREFIX_VEX_3A4B + 1)
970 #define PREFIX_VEX_3A5C (PREFIX_VEX_3A4C + 1)
971 #define PREFIX_VEX_3A5D (PREFIX_VEX_3A5C + 1)
972 #define PREFIX_VEX_3A5E (PREFIX_VEX_3A5D + 1)
973 #define PREFIX_VEX_3A5F (PREFIX_VEX_3A5E + 1)
974 #define PREFIX_VEX_3A60 (PREFIX_VEX_3A5F + 1)
975 #define PREFIX_VEX_3A61 (PREFIX_VEX_3A60 + 1)
976 #define PREFIX_VEX_3A62 (PREFIX_VEX_3A61 + 1)
977 #define PREFIX_VEX_3A63 (PREFIX_VEX_3A62 + 1)
978 #define PREFIX_VEX_3A68 (PREFIX_VEX_3A63 + 1)
979 #define PREFIX_VEX_3A69 (PREFIX_VEX_3A68 + 1)
980 #define PREFIX_VEX_3A6A (PREFIX_VEX_3A69 + 1)
981 #define PREFIX_VEX_3A6B (PREFIX_VEX_3A6A + 1)
982 #define PREFIX_VEX_3A6C (PREFIX_VEX_3A6B + 1)
983 #define PREFIX_VEX_3A6D (PREFIX_VEX_3A6C + 1)
984 #define PREFIX_VEX_3A6E (PREFIX_VEX_3A6D + 1)
985 #define PREFIX_VEX_3A6F (PREFIX_VEX_3A6E + 1)
986 #define PREFIX_VEX_3A78 (PREFIX_VEX_3A6F + 1)
987 #define PREFIX_VEX_3A79 (PREFIX_VEX_3A78 + 1)
988 #define PREFIX_VEX_3A7A (PREFIX_VEX_3A79 + 1)
989 #define PREFIX_VEX_3A7B (PREFIX_VEX_3A7A + 1)
990 #define PREFIX_VEX_3A7C (PREFIX_VEX_3A7B + 1)
991 #define PREFIX_VEX_3A7D (PREFIX_VEX_3A7C + 1)
992 #define PREFIX_VEX_3A7E (PREFIX_VEX_3A7D + 1)
993 #define PREFIX_VEX_3A7F (PREFIX_VEX_3A7E + 1)
996 #define X86_64_07 (X86_64_06 + 1)
997 #define X86_64_0D (X86_64_07 + 1)
998 #define X86_64_16 (X86_64_0D + 1)
999 #define X86_64_17 (X86_64_16 + 1)
1000 #define X86_64_1E (X86_64_17 + 1)
1001 #define X86_64_1F (X86_64_1E + 1)
1002 #define X86_64_27 (X86_64_1F + 1)
1003 #define X86_64_2F (X86_64_27 + 1)
1004 #define X86_64_37 (X86_64_2F + 1)
1005 #define X86_64_3F (X86_64_37 + 1)
1006 #define X86_64_60 (X86_64_3F + 1)
1007 #define X86_64_61 (X86_64_60 + 1)
1008 #define X86_64_62 (X86_64_61 + 1)
1009 #define X86_64_63 (X86_64_62 + 1)
1010 #define X86_64_6D (X86_64_63 + 1)
1011 #define X86_64_6F (X86_64_6D + 1)
1012 #define X86_64_9A (X86_64_6F + 1)
1013 #define X86_64_C4 (X86_64_9A + 1)
1014 #define X86_64_C5 (X86_64_C4 + 1)
1015 #define X86_64_CE (X86_64_C5 + 1)
1016 #define X86_64_D4 (X86_64_CE + 1)
1017 #define X86_64_D5 (X86_64_D4 + 1)
1018 #define X86_64_EA (X86_64_D5 + 1)
1019 #define X86_64_0F01_REG_0 (X86_64_EA + 1)
1020 #define X86_64_0F01_REG_1 (X86_64_0F01_REG_0 + 1)
1021 #define X86_64_0F01_REG_2 (X86_64_0F01_REG_1 + 1)
1022 #define X86_64_0F01_REG_3 (X86_64_0F01_REG_2 + 1)
1024 #define THREE_BYTE_0F24 0
1025 #define THREE_BYTE_0F25 (THREE_BYTE_0F24 + 1)
1026 #define THREE_BYTE_0F38 (THREE_BYTE_0F25 + 1)
1027 #define THREE_BYTE_0F3A (THREE_BYTE_0F38 + 1)
1028 #define THREE_BYTE_0F7A (THREE_BYTE_0F3A + 1)
1029 #define THREE_BYTE_0F7B (THREE_BYTE_0F7A + 1)
1032 #define VEX_0F38 (VEX_0F + 1)
1033 #define VEX_0F3A (VEX_0F38 + 1)
1035 #define VEX_LEN_10_P_1 0
1036 #define VEX_LEN_10_P_3 (VEX_LEN_10_P_1 + 1)
1037 #define VEX_LEN_11_P_1 (VEX_LEN_10_P_3 + 1)
1038 #define VEX_LEN_11_P_3 (VEX_LEN_11_P_1 + 1)
1039 #define VEX_LEN_12_P_0_M_0 (VEX_LEN_11_P_3 + 1)
1040 #define VEX_LEN_12_P_0_M_1 (VEX_LEN_12_P_0_M_0 + 1)
1041 #define VEX_LEN_12_P_2 (VEX_LEN_12_P_0_M_1 + 1)
1042 #define VEX_LEN_13_M_0 (VEX_LEN_12_P_2 + 1)
1043 #define VEX_LEN_16_P_0_M_0 (VEX_LEN_13_M_0 + 1)
1044 #define VEX_LEN_16_P_0_M_1 (VEX_LEN_16_P_0_M_0 + 1)
1045 #define VEX_LEN_16_P_2 (VEX_LEN_16_P_0_M_1 + 1)
1046 #define VEX_LEN_17_M_0 (VEX_LEN_16_P_2 + 1)
1047 #define VEX_LEN_2A_P_1 (VEX_LEN_17_M_0 + 1)
1048 #define VEX_LEN_2A_P_3 (VEX_LEN_2A_P_1 + 1)
1049 #define VEX_LEN_2B_M_0 (VEX_LEN_2A_P_3 + 1)
1050 #define VEX_LEN_2C_P_1 (VEX_LEN_2B_M_0 + 1)
1051 #define VEX_LEN_2C_P_3 (VEX_LEN_2C_P_1 + 1)
1052 #define VEX_LEN_2D_P_1 (VEX_LEN_2C_P_3 + 1)
1053 #define VEX_LEN_2D_P_3 (VEX_LEN_2D_P_1 + 1)
1054 #define VEX_LEN_2E_P_0 (VEX_LEN_2D_P_3 + 1)
1055 #define VEX_LEN_2E_P_2 (VEX_LEN_2E_P_0 + 1)
1056 #define VEX_LEN_2F_P_0 (VEX_LEN_2E_P_2 + 1)
1057 #define VEX_LEN_2F_P_2 (VEX_LEN_2F_P_0 + 1)
1058 #define VEX_LEN_51_P_1 (VEX_LEN_2F_P_2 + 1)
1059 #define VEX_LEN_51_P_3 (VEX_LEN_51_P_1 + 1)
1060 #define VEX_LEN_52_P_1 (VEX_LEN_51_P_3 + 1)
1061 #define VEX_LEN_53_P_1 (VEX_LEN_52_P_1 + 1)
1062 #define VEX_LEN_58_P_1 (VEX_LEN_53_P_1 + 1)
1063 #define VEX_LEN_58_P_3 (VEX_LEN_58_P_1 + 1)
1064 #define VEX_LEN_59_P_1 (VEX_LEN_58_P_3 + 1)
1065 #define VEX_LEN_59_P_3 (VEX_LEN_59_P_1 + 1)
1066 #define VEX_LEN_5A_P_1 (VEX_LEN_59_P_3 + 1)
1067 #define VEX_LEN_5A_P_3 (VEX_LEN_5A_P_1 + 1)
1068 #define VEX_LEN_5C_P_1 (VEX_LEN_5A_P_3 + 1)
1069 #define VEX_LEN_5C_P_3 (VEX_LEN_5C_P_1 + 1)
1070 #define VEX_LEN_5D_P_1 (VEX_LEN_5C_P_3 + 1)
1071 #define VEX_LEN_5D_P_3 (VEX_LEN_5D_P_1 + 1)
1072 #define VEX_LEN_5E_P_1 (VEX_LEN_5D_P_3 + 1)
1073 #define VEX_LEN_5E_P_3 (VEX_LEN_5E_P_1 + 1)
1074 #define VEX_LEN_5F_P_1 (VEX_LEN_5E_P_3 + 1)
1075 #define VEX_LEN_5F_P_3 (VEX_LEN_5F_P_1 + 1)
1076 #define VEX_LEN_60_P_2 (VEX_LEN_5F_P_3 + 1)
1077 #define VEX_LEN_61_P_2 (VEX_LEN_60_P_2 + 1)
1078 #define VEX_LEN_62_P_2 (VEX_LEN_61_P_2 + 1)
1079 #define VEX_LEN_63_P_2 (VEX_LEN_62_P_2 + 1)
1080 #define VEX_LEN_64_P_2 (VEX_LEN_63_P_2 + 1)
1081 #define VEX_LEN_65_P_2 (VEX_LEN_64_P_2 + 1)
1082 #define VEX_LEN_66_P_2 (VEX_LEN_65_P_2 + 1)
1083 #define VEX_LEN_67_P_2 (VEX_LEN_66_P_2 + 1)
1084 #define VEX_LEN_68_P_2 (VEX_LEN_67_P_2 + 1)
1085 #define VEX_LEN_69_P_2 (VEX_LEN_68_P_2 + 1)
1086 #define VEX_LEN_6A_P_2 (VEX_LEN_69_P_2 + 1)
1087 #define VEX_LEN_6B_P_2 (VEX_LEN_6A_P_2 + 1)
1088 #define VEX_LEN_6C_P_2 (VEX_LEN_6B_P_2 + 1)
1089 #define VEX_LEN_6D_P_2 (VEX_LEN_6C_P_2 + 1)
1090 #define VEX_LEN_6E_P_2 (VEX_LEN_6D_P_2 + 1)
1091 #define VEX_LEN_70_P_1 (VEX_LEN_6E_P_2 + 1)
1092 #define VEX_LEN_70_P_2 (VEX_LEN_70_P_1 + 1)
1093 #define VEX_LEN_70_P_3 (VEX_LEN_70_P_2 + 1)
1094 #define VEX_LEN_71_R_2_P_2 (VEX_LEN_70_P_3 + 1)
1095 #define VEX_LEN_71_R_4_P_2 (VEX_LEN_71_R_2_P_2 + 1)
1096 #define VEX_LEN_71_R_6_P_2 (VEX_LEN_71_R_4_P_2 + 1)
1097 #define VEX_LEN_72_R_2_P_2 (VEX_LEN_71_R_6_P_2 + 1)
1098 #define VEX_LEN_72_R_4_P_2 (VEX_LEN_72_R_2_P_2 + 1)
1099 #define VEX_LEN_72_R_6_P_2 (VEX_LEN_72_R_4_P_2 + 1)
1100 #define VEX_LEN_73_R_2_P_2 (VEX_LEN_72_R_6_P_2 + 1)
1101 #define VEX_LEN_73_R_3_P_2 (VEX_LEN_73_R_2_P_2 + 1)
1102 #define VEX_LEN_73_R_6_P_2 (VEX_LEN_73_R_3_P_2 + 1)
1103 #define VEX_LEN_73_R_7_P_2 (VEX_LEN_73_R_6_P_2 + 1)
1104 #define VEX_LEN_74_P_2 (VEX_LEN_73_R_7_P_2 + 1)
1105 #define VEX_LEN_75_P_2 (VEX_LEN_74_P_2 + 1)
1106 #define VEX_LEN_76_P_2 (VEX_LEN_75_P_2 + 1)
1107 #define VEX_LEN_7E_P_1 (VEX_LEN_76_P_2 + 1)
1108 #define VEX_LEN_7E_P_2 (VEX_LEN_7E_P_1 + 1)
1109 #define VEX_LEN_AE_R_2_M_0 (VEX_LEN_7E_P_2 + 1)
1110 #define VEX_LEN_AE_R_3_M_0 (VEX_LEN_AE_R_2_M_0 + 1)
1111 #define VEX_LEN_C2_P_1 (VEX_LEN_AE_R_3_M_0 + 1)
1112 #define VEX_LEN_C2_P_3 (VEX_LEN_C2_P_1 + 1)
1113 #define VEX_LEN_C4_P_2 (VEX_LEN_C2_P_3 + 1)
1114 #define VEX_LEN_C5_P_2 (VEX_LEN_C4_P_2 + 1)
1115 #define VEX_LEN_D1_P_2 (VEX_LEN_C5_P_2 + 1)
1116 #define VEX_LEN_D2_P_2 (VEX_LEN_D1_P_2 + 1)
1117 #define VEX_LEN_D3_P_2 (VEX_LEN_D2_P_2 + 1)
1118 #define VEX_LEN_D4_P_2 (VEX_LEN_D3_P_2 + 1)
1119 #define VEX_LEN_D5_P_2 (VEX_LEN_D4_P_2 + 1)
1120 #define VEX_LEN_D6_P_2 (VEX_LEN_D5_P_2 + 1)
1121 #define VEX_LEN_D7_P_2_M_1 (VEX_LEN_D6_P_2 + 1)
1122 #define VEX_LEN_D8_P_2 (VEX_LEN_D7_P_2_M_1 + 1)
1123 #define VEX_LEN_D9_P_2 (VEX_LEN_D8_P_2 + 1)
1124 #define VEX_LEN_DA_P_2 (VEX_LEN_D9_P_2 + 1)
1125 #define VEX_LEN_DB_P_2 (VEX_LEN_DA_P_2 + 1)
1126 #define VEX_LEN_DC_P_2 (VEX_LEN_DB_P_2 + 1)
1127 #define VEX_LEN_DD_P_2 (VEX_LEN_DC_P_2 + 1)
1128 #define VEX_LEN_DE_P_2 (VEX_LEN_DD_P_2 + 1)
1129 #define VEX_LEN_DF_P_2 (VEX_LEN_DE_P_2 + 1)
1130 #define VEX_LEN_E0_P_2 (VEX_LEN_DF_P_2 + 1)
1131 #define VEX_LEN_E1_P_2 (VEX_LEN_E0_P_2 + 1)
1132 #define VEX_LEN_E2_P_2 (VEX_LEN_E1_P_2 + 1)
1133 #define VEX_LEN_E3_P_2 (VEX_LEN_E2_P_2 + 1)
1134 #define VEX_LEN_E4_P_2 (VEX_LEN_E3_P_2 + 1)
1135 #define VEX_LEN_E5_P_2 (VEX_LEN_E4_P_2 + 1)
1136 #define VEX_LEN_E7_P_2_M_0 (VEX_LEN_E5_P_2 + 1)
1137 #define VEX_LEN_E8_P_2 (VEX_LEN_E7_P_2_M_0 + 1)
1138 #define VEX_LEN_E9_P_2 (VEX_LEN_E8_P_2 + 1)
1139 #define VEX_LEN_EA_P_2 (VEX_LEN_E9_P_2 + 1)
1140 #define VEX_LEN_EB_P_2 (VEX_LEN_EA_P_2 + 1)
1141 #define VEX_LEN_EC_P_2 (VEX_LEN_EB_P_2 + 1)
1142 #define VEX_LEN_ED_P_2 (VEX_LEN_EC_P_2 + 1)
1143 #define VEX_LEN_EE_P_2 (VEX_LEN_ED_P_2 + 1)
1144 #define VEX_LEN_EF_P_2 (VEX_LEN_EE_P_2 + 1)
1145 #define VEX_LEN_F1_P_2 (VEX_LEN_EF_P_2 + 1)
1146 #define VEX_LEN_F2_P_2 (VEX_LEN_F1_P_2 + 1)
1147 #define VEX_LEN_F3_P_2 (VEX_LEN_F2_P_2 + 1)
1148 #define VEX_LEN_F4_P_2 (VEX_LEN_F3_P_2 + 1)
1149 #define VEX_LEN_F5_P_2 (VEX_LEN_F4_P_2 + 1)
1150 #define VEX_LEN_F6_P_2 (VEX_LEN_F5_P_2 + 1)
1151 #define VEX_LEN_F7_P_2 (VEX_LEN_F6_P_2 + 1)
1152 #define VEX_LEN_F8_P_2 (VEX_LEN_F7_P_2 + 1)
1153 #define VEX_LEN_F9_P_2 (VEX_LEN_F8_P_2 + 1)
1154 #define VEX_LEN_FA_P_2 (VEX_LEN_F9_P_2 + 1)
1155 #define VEX_LEN_FB_P_2 (VEX_LEN_FA_P_2 + 1)
1156 #define VEX_LEN_FC_P_2 (VEX_LEN_FB_P_2 + 1)
1157 #define VEX_LEN_FD_P_2 (VEX_LEN_FC_P_2 + 1)
1158 #define VEX_LEN_FE_P_2 (VEX_LEN_FD_P_2 + 1)
1159 #define VEX_LEN_3800_P_2 (VEX_LEN_FE_P_2 + 1)
1160 #define VEX_LEN_3801_P_2 (VEX_LEN_3800_P_2 + 1)
1161 #define VEX_LEN_3802_P_2 (VEX_LEN_3801_P_2 + 1)
1162 #define VEX_LEN_3803_P_2 (VEX_LEN_3802_P_2 + 1)
1163 #define VEX_LEN_3804_P_2 (VEX_LEN_3803_P_2 + 1)
1164 #define VEX_LEN_3805_P_2 (VEX_LEN_3804_P_2 + 1)
1165 #define VEX_LEN_3806_P_2 (VEX_LEN_3805_P_2 + 1)
1166 #define VEX_LEN_3807_P_2 (VEX_LEN_3806_P_2 + 1)
1167 #define VEX_LEN_3808_P_2 (VEX_LEN_3807_P_2 + 1)
1168 #define VEX_LEN_3809_P_2 (VEX_LEN_3808_P_2 + 1)
1169 #define VEX_LEN_380A_P_2 (VEX_LEN_3809_P_2 + 1)
1170 #define VEX_LEN_380B_P_2 (VEX_LEN_380A_P_2 + 1)
1171 #define VEX_LEN_3819_P_2_M_0 (VEX_LEN_380B_P_2 + 1)
1172 #define VEX_LEN_381A_P_2_M_0 (VEX_LEN_3819_P_2_M_0 + 1)
1173 #define VEX_LEN_381C_P_2 (VEX_LEN_381A_P_2_M_0 + 1)
1174 #define VEX_LEN_381D_P_2 (VEX_LEN_381C_P_2 + 1)
1175 #define VEX_LEN_381E_P_2 (VEX_LEN_381D_P_2 + 1)
1176 #define VEX_LEN_3820_P_2 (VEX_LEN_381E_P_2 + 1)
1177 #define VEX_LEN_3821_P_2 (VEX_LEN_3820_P_2 + 1)
1178 #define VEX_LEN_3822_P_2 (VEX_LEN_3821_P_2 + 1)
1179 #define VEX_LEN_3823_P_2 (VEX_LEN_3822_P_2 + 1)
1180 #define VEX_LEN_3824_P_2 (VEX_LEN_3823_P_2 + 1)
1181 #define VEX_LEN_3825_P_2 (VEX_LEN_3824_P_2 + 1)
1182 #define VEX_LEN_3828_P_2 (VEX_LEN_3825_P_2 + 1)
1183 #define VEX_LEN_3829_P_2 (VEX_LEN_3828_P_2 + 1)
1184 #define VEX_LEN_382A_P_2_M_0 (VEX_LEN_3829_P_2 + 1)
1185 #define VEX_LEN_382B_P_2 (VEX_LEN_382A_P_2_M_0 + 1)
1186 #define VEX_LEN_3830_P_2 (VEX_LEN_382B_P_2 + 1)
1187 #define VEX_LEN_3831_P_2 (VEX_LEN_3830_P_2 + 1)
1188 #define VEX_LEN_3832_P_2 (VEX_LEN_3831_P_2 + 1)
1189 #define VEX_LEN_3833_P_2 (VEX_LEN_3832_P_2 + 1)
1190 #define VEX_LEN_3834_P_2 (VEX_LEN_3833_P_2 + 1)
1191 #define VEX_LEN_3835_P_2 (VEX_LEN_3834_P_2 + 1)
1192 #define VEX_LEN_3837_P_2 (VEX_LEN_3835_P_2 + 1)
1193 #define VEX_LEN_3838_P_2 (VEX_LEN_3837_P_2 + 1)
1194 #define VEX_LEN_3839_P_2 (VEX_LEN_3838_P_2 + 1)
1195 #define VEX_LEN_383A_P_2 (VEX_LEN_3839_P_2 + 1)
1196 #define VEX_LEN_383B_P_2 (VEX_LEN_383A_P_2 + 1)
1197 #define VEX_LEN_383C_P_2 (VEX_LEN_383B_P_2 + 1)
1198 #define VEX_LEN_383D_P_2 (VEX_LEN_383C_P_2 + 1)
1199 #define VEX_LEN_383E_P_2 (VEX_LEN_383D_P_2 + 1)
1200 #define VEX_LEN_383F_P_2 (VEX_LEN_383E_P_2 + 1)
1201 #define VEX_LEN_3840_P_2 (VEX_LEN_383F_P_2 + 1)
1202 #define VEX_LEN_3841_P_2 (VEX_LEN_3840_P_2 + 1)
1203 #define VEX_LEN_3A06_P_2 (VEX_LEN_3841_P_2 + 1)
1204 #define VEX_LEN_3A0A_P_2 (VEX_LEN_3A06_P_2 + 1)
1205 #define VEX_LEN_3A0B_P_2 (VEX_LEN_3A0A_P_2 + 1)
1206 #define VEX_LEN_3A0E_P_2 (VEX_LEN_3A0B_P_2 + 1)
1207 #define VEX_LEN_3A0F_P_2 (VEX_LEN_3A0E_P_2 + 1)
1208 #define VEX_LEN_3A14_P_2 (VEX_LEN_3A0F_P_2 + 1)
1209 #define VEX_LEN_3A15_P_2 (VEX_LEN_3A14_P_2 + 1)
1210 #define VEX_LEN_3A16_P_2 (VEX_LEN_3A15_P_2 + 1)
1211 #define VEX_LEN_3A17_P_2 (VEX_LEN_3A16_P_2 + 1)
1212 #define VEX_LEN_3A18_P_2 (VEX_LEN_3A17_P_2 + 1)
1213 #define VEX_LEN_3A19_P_2 (VEX_LEN_3A18_P_2 + 1)
1214 #define VEX_LEN_3A20_P_2 (VEX_LEN_3A19_P_2 + 1)
1215 #define VEX_LEN_3A21_P_2 (VEX_LEN_3A20_P_2 + 1)
1216 #define VEX_LEN_3A22_P_2 (VEX_LEN_3A21_P_2 + 1)
1217 #define VEX_LEN_3A41_P_2 (VEX_LEN_3A22_P_2 + 1)
1218 #define VEX_LEN_3A42_P_2 (VEX_LEN_3A41_P_2 + 1)
1219 #define VEX_LEN_3A4C_P_2 (VEX_LEN_3A42_P_2 + 1)
1220 #define VEX_LEN_3A60_P_2 (VEX_LEN_3A4C_P_2 + 1)
1221 #define VEX_LEN_3A61_P_2 (VEX_LEN_3A60_P_2 + 1)
1222 #define VEX_LEN_3A62_P_2 (VEX_LEN_3A61_P_2 + 1)
1223 #define VEX_LEN_3A63_P_2 (VEX_LEN_3A62_P_2 + 1)
1224 #define VEX_LEN_3A6A_P_2 (VEX_LEN_3A63_P_2 + 1)
1225 #define VEX_LEN_3A6B_P_2 (VEX_LEN_3A6A_P_2 + 1)
1226 #define VEX_LEN_3A6E_P_2 (VEX_LEN_3A6B_P_2 + 1)
1227 #define VEX_LEN_3A6F_P_2 (VEX_LEN_3A6E_P_2 + 1)
1228 #define VEX_LEN_3A7A_P_2 (VEX_LEN_3A6F_P_2 + 1)
1229 #define VEX_LEN_3A7B_P_2 (VEX_LEN_3A7A_P_2 + 1)
1230 #define VEX_LEN_3A7E_P_2 (VEX_LEN_3A7B_P_2 + 1)
1231 #define VEX_LEN_3A7F_P_2 (VEX_LEN_3A7E_P_2 + 1)
1233 typedef void (*op_rtn
) (int bytemode
, int sizeflag
);
1244 /* Upper case letters in the instruction names here are macros.
1245 'A' => print 'b' if no register operands or suffix_always is true
1246 'B' => print 'b' if suffix_always is true
1247 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
1249 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
1250 suffix_always is true
1251 'E' => print 'e' if 32-bit form of jcxz
1252 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
1253 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
1254 'H' => print ",pt" or ",pn" branch hint
1255 'I' => honor following macro letter even in Intel mode (implemented only
1256 for some of the macro letters)
1258 'K' => print 'd' or 'q' if rex prefix is present.
1259 'L' => print 'l' if suffix_always is true
1260 'M' => print 'r' if intel_mnemonic is false.
1261 'N' => print 'n' if instruction has no wait "prefix"
1262 'O' => print 'd' or 'o' (or 'q' in Intel mode)
1263 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
1264 or suffix_always is true. print 'q' if rex prefix is present.
1265 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1267 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
1268 'S' => print 'w', 'l' or 'q' if suffix_always is true
1269 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1270 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1271 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
1272 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
1273 'X' => print 's', 'd' depending on data16 prefix (for XMM)
1274 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1275 suffix_always is true.
1276 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
1277 '!' => change condition from true to false or from false to true.
1278 '%' => add 1 upper case letter to the macro.
1280 2 upper case letter macros:
1281 "XY" => print 'x' or 'y' if no register operands or suffix_always
1283 'LQ' => print 'l' ('d' in Intel mode) or 'q' for memory operand
1284 or suffix_always is true
1286 Many of the above letters print nothing in Intel mode. See "putop"
1289 Braces '{' and '}', and vertical bars '|', indicate alternative
1290 mnemonic strings for AT&T and Intel. */
1292 static const struct dis386 dis386
[] = {
1294 { "addB", { Eb
, Gb
} },
1295 { "addS", { Ev
, Gv
} },
1296 { "addB", { Gb
, Eb
} },
1297 { "addS", { Gv
, Ev
} },
1298 { "addB", { AL
, Ib
} },
1299 { "addS", { eAX
, Iv
} },
1300 { X86_64_TABLE (X86_64_06
) },
1301 { X86_64_TABLE (X86_64_07
) },
1303 { "orB", { Eb
, Gb
} },
1304 { "orS", { Ev
, Gv
} },
1305 { "orB", { Gb
, Eb
} },
1306 { "orS", { Gv
, Ev
} },
1307 { "orB", { AL
, Ib
} },
1308 { "orS", { eAX
, Iv
} },
1309 { X86_64_TABLE (X86_64_0D
) },
1310 { "(bad)", { XX
} }, /* 0x0f extended opcode escape */
1312 { "adcB", { Eb
, Gb
} },
1313 { "adcS", { Ev
, Gv
} },
1314 { "adcB", { Gb
, Eb
} },
1315 { "adcS", { Gv
, Ev
} },
1316 { "adcB", { AL
, Ib
} },
1317 { "adcS", { eAX
, Iv
} },
1318 { X86_64_TABLE (X86_64_16
) },
1319 { X86_64_TABLE (X86_64_17
) },
1321 { "sbbB", { Eb
, Gb
} },
1322 { "sbbS", { Ev
, Gv
} },
1323 { "sbbB", { Gb
, Eb
} },
1324 { "sbbS", { Gv
, Ev
} },
1325 { "sbbB", { AL
, Ib
} },
1326 { "sbbS", { eAX
, Iv
} },
1327 { X86_64_TABLE (X86_64_1E
) },
1328 { X86_64_TABLE (X86_64_1F
) },
1330 { "andB", { Eb
, Gb
} },
1331 { "andS", { Ev
, Gv
} },
1332 { "andB", { Gb
, Eb
} },
1333 { "andS", { Gv
, Ev
} },
1334 { "andB", { AL
, Ib
} },
1335 { "andS", { eAX
, Iv
} },
1336 { "(bad)", { XX
} }, /* SEG ES prefix */
1337 { X86_64_TABLE (X86_64_27
) },
1339 { "subB", { Eb
, Gb
} },
1340 { "subS", { Ev
, Gv
} },
1341 { "subB", { Gb
, Eb
} },
1342 { "subS", { Gv
, Ev
} },
1343 { "subB", { AL
, Ib
} },
1344 { "subS", { eAX
, Iv
} },
1345 { "(bad)", { XX
} }, /* SEG CS prefix */
1346 { X86_64_TABLE (X86_64_2F
) },
1348 { "xorB", { Eb
, Gb
} },
1349 { "xorS", { Ev
, Gv
} },
1350 { "xorB", { Gb
, Eb
} },
1351 { "xorS", { Gv
, Ev
} },
1352 { "xorB", { AL
, Ib
} },
1353 { "xorS", { eAX
, Iv
} },
1354 { "(bad)", { XX
} }, /* SEG SS prefix */
1355 { X86_64_TABLE (X86_64_37
) },
1357 { "cmpB", { Eb
, Gb
} },
1358 { "cmpS", { Ev
, Gv
} },
1359 { "cmpB", { Gb
, Eb
} },
1360 { "cmpS", { Gv
, Ev
} },
1361 { "cmpB", { AL
, Ib
} },
1362 { "cmpS", { eAX
, Iv
} },
1363 { "(bad)", { XX
} }, /* SEG DS prefix */
1364 { X86_64_TABLE (X86_64_3F
) },
1366 { "inc{S|}", { RMeAX
} },
1367 { "inc{S|}", { RMeCX
} },
1368 { "inc{S|}", { RMeDX
} },
1369 { "inc{S|}", { RMeBX
} },
1370 { "inc{S|}", { RMeSP
} },
1371 { "inc{S|}", { RMeBP
} },
1372 { "inc{S|}", { RMeSI
} },
1373 { "inc{S|}", { RMeDI
} },
1375 { "dec{S|}", { RMeAX
} },
1376 { "dec{S|}", { RMeCX
} },
1377 { "dec{S|}", { RMeDX
} },
1378 { "dec{S|}", { RMeBX
} },
1379 { "dec{S|}", { RMeSP
} },
1380 { "dec{S|}", { RMeBP
} },
1381 { "dec{S|}", { RMeSI
} },
1382 { "dec{S|}", { RMeDI
} },
1384 { "pushV", { RMrAX
} },
1385 { "pushV", { RMrCX
} },
1386 { "pushV", { RMrDX
} },
1387 { "pushV", { RMrBX
} },
1388 { "pushV", { RMrSP
} },
1389 { "pushV", { RMrBP
} },
1390 { "pushV", { RMrSI
} },
1391 { "pushV", { RMrDI
} },
1393 { "popV", { RMrAX
} },
1394 { "popV", { RMrCX
} },
1395 { "popV", { RMrDX
} },
1396 { "popV", { RMrBX
} },
1397 { "popV", { RMrSP
} },
1398 { "popV", { RMrBP
} },
1399 { "popV", { RMrSI
} },
1400 { "popV", { RMrDI
} },
1402 { X86_64_TABLE (X86_64_60
) },
1403 { X86_64_TABLE (X86_64_61
) },
1404 { X86_64_TABLE (X86_64_62
) },
1405 { X86_64_TABLE (X86_64_63
) },
1406 { "(bad)", { XX
} }, /* seg fs */
1407 { "(bad)", { XX
} }, /* seg gs */
1408 { "(bad)", { XX
} }, /* op size prefix */
1409 { "(bad)", { XX
} }, /* adr size prefix */
1411 { "pushT", { Iq
} },
1412 { "imulS", { Gv
, Ev
, Iv
} },
1413 { "pushT", { sIb
} },
1414 { "imulS", { Gv
, Ev
, sIb
} },
1415 { "ins{b|}", { Ybr
, indirDX
} },
1416 { X86_64_TABLE (X86_64_6D
) },
1417 { "outs{b|}", { indirDXr
, Xb
} },
1418 { X86_64_TABLE (X86_64_6F
) },
1420 { "joH", { Jb
, XX
, cond_jump_flag
} },
1421 { "jnoH", { Jb
, XX
, cond_jump_flag
} },
1422 { "jbH", { Jb
, XX
, cond_jump_flag
} },
1423 { "jaeH", { Jb
, XX
, cond_jump_flag
} },
1424 { "jeH", { Jb
, XX
, cond_jump_flag
} },
1425 { "jneH", { Jb
, XX
, cond_jump_flag
} },
1426 { "jbeH", { Jb
, XX
, cond_jump_flag
} },
1427 { "jaH", { Jb
, XX
, cond_jump_flag
} },
1429 { "jsH", { Jb
, XX
, cond_jump_flag
} },
1430 { "jnsH", { Jb
, XX
, cond_jump_flag
} },
1431 { "jpH", { Jb
, XX
, cond_jump_flag
} },
1432 { "jnpH", { Jb
, XX
, cond_jump_flag
} },
1433 { "jlH", { Jb
, XX
, cond_jump_flag
} },
1434 { "jgeH", { Jb
, XX
, cond_jump_flag
} },
1435 { "jleH", { Jb
, XX
, cond_jump_flag
} },
1436 { "jgH", { Jb
, XX
, cond_jump_flag
} },
1438 { REG_TABLE (REG_80
) },
1439 { REG_TABLE (REG_81
) },
1440 { "(bad)", { XX
} },
1441 { REG_TABLE (REG_82
) },
1442 { "testB", { Eb
, Gb
} },
1443 { "testS", { Ev
, Gv
} },
1444 { "xchgB", { Eb
, Gb
} },
1445 { "xchgS", { Ev
, Gv
} },
1447 { "movB", { Eb
, Gb
} },
1448 { "movS", { Ev
, Gv
} },
1449 { "movB", { Gb
, Eb
} },
1450 { "movS", { Gv
, Ev
} },
1451 { "movD", { Sv
, Sw
} },
1452 { MOD_TABLE (MOD_8D
) },
1453 { "movD", { Sw
, Sv
} },
1454 { REG_TABLE (REG_8F
) },
1456 { PREFIX_TABLE (PREFIX_90
) },
1457 { "xchgS", { RMeCX
, eAX
} },
1458 { "xchgS", { RMeDX
, eAX
} },
1459 { "xchgS", { RMeBX
, eAX
} },
1460 { "xchgS", { RMeSP
, eAX
} },
1461 { "xchgS", { RMeBP
, eAX
} },
1462 { "xchgS", { RMeSI
, eAX
} },
1463 { "xchgS", { RMeDI
, eAX
} },
1465 { "cW{t|}R", { XX
} },
1466 { "cR{t|}O", { XX
} },
1467 { X86_64_TABLE (X86_64_9A
) },
1468 { "(bad)", { XX
} }, /* fwait */
1469 { "pushfT", { XX
} },
1470 { "popfT", { XX
} },
1474 { "movB", { AL
, Ob
} },
1475 { "movS", { eAX
, Ov
} },
1476 { "movB", { Ob
, AL
} },
1477 { "movS", { Ov
, eAX
} },
1478 { "movs{b|}", { Ybr
, Xb
} },
1479 { "movs{R|}", { Yvr
, Xv
} },
1480 { "cmps{b|}", { Xb
, Yb
} },
1481 { "cmps{R|}", { Xv
, Yv
} },
1483 { "testB", { AL
, Ib
} },
1484 { "testS", { eAX
, Iv
} },
1485 { "stosB", { Ybr
, AL
} },
1486 { "stosS", { Yvr
, eAX
} },
1487 { "lodsB", { ALr
, Xb
} },
1488 { "lodsS", { eAXr
, Xv
} },
1489 { "scasB", { AL
, Yb
} },
1490 { "scasS", { eAX
, Yv
} },
1492 { "movB", { RMAL
, Ib
} },
1493 { "movB", { RMCL
, Ib
} },
1494 { "movB", { RMDL
, Ib
} },
1495 { "movB", { RMBL
, Ib
} },
1496 { "movB", { RMAH
, Ib
} },
1497 { "movB", { RMCH
, Ib
} },
1498 { "movB", { RMDH
, Ib
} },
1499 { "movB", { RMBH
, Ib
} },
1501 { "movS", { RMeAX
, Iv64
} },
1502 { "movS", { RMeCX
, Iv64
} },
1503 { "movS", { RMeDX
, Iv64
} },
1504 { "movS", { RMeBX
, Iv64
} },
1505 { "movS", { RMeSP
, Iv64
} },
1506 { "movS", { RMeBP
, Iv64
} },
1507 { "movS", { RMeSI
, Iv64
} },
1508 { "movS", { RMeDI
, Iv64
} },
1510 { REG_TABLE (REG_C0
) },
1511 { REG_TABLE (REG_C1
) },
1514 { X86_64_TABLE (X86_64_C4
) },
1515 { X86_64_TABLE (X86_64_C5
) },
1516 { REG_TABLE (REG_C6
) },
1517 { REG_TABLE (REG_C7
) },
1519 { "enterT", { Iw
, Ib
} },
1520 { "leaveT", { XX
} },
1521 { "lretP", { Iw
} },
1522 { "lretP", { XX
} },
1525 { X86_64_TABLE (X86_64_CE
) },
1526 { "iretP", { XX
} },
1528 { REG_TABLE (REG_D0
) },
1529 { REG_TABLE (REG_D1
) },
1530 { REG_TABLE (REG_D2
) },
1531 { REG_TABLE (REG_D3
) },
1532 { X86_64_TABLE (X86_64_D4
) },
1533 { X86_64_TABLE (X86_64_D5
) },
1534 { "(bad)", { XX
} },
1535 { "xlat", { DSBX
} },
1546 { "loopneFH", { Jb
, XX
, loop_jcxz_flag
} },
1547 { "loopeFH", { Jb
, XX
, loop_jcxz_flag
} },
1548 { "loopFH", { Jb
, XX
, loop_jcxz_flag
} },
1549 { "jEcxzH", { Jb
, XX
, loop_jcxz_flag
} },
1550 { "inB", { AL
, Ib
} },
1551 { "inG", { zAX
, Ib
} },
1552 { "outB", { Ib
, AL
} },
1553 { "outG", { Ib
, zAX
} },
1555 { "callT", { Jv
} },
1557 { X86_64_TABLE (X86_64_EA
) },
1559 { "inB", { AL
, indirDX
} },
1560 { "inG", { zAX
, indirDX
} },
1561 { "outB", { indirDX
, AL
} },
1562 { "outG", { indirDX
, zAX
} },
1564 { "(bad)", { XX
} }, /* lock prefix */
1565 { "icebp", { XX
} },
1566 { "(bad)", { XX
} }, /* repne */
1567 { "(bad)", { XX
} }, /* repz */
1570 { REG_TABLE (REG_F6
) },
1571 { REG_TABLE (REG_F7
) },
1579 { REG_TABLE (REG_FE
) },
1580 { REG_TABLE (REG_FF
) },
1583 static const struct dis386 dis386_twobyte
[] = {
1585 { REG_TABLE (REG_0F00
) },
1586 { REG_TABLE (REG_0F01
) },
1587 { "larS", { Gv
, Ew
} },
1588 { "lslS", { Gv
, Ew
} },
1589 { "(bad)", { XX
} },
1590 { "syscall", { XX
} },
1592 { "sysretP", { XX
} },
1595 { "wbinvd", { XX
} },
1596 { "(bad)", { XX
} },
1598 { "(bad)", { XX
} },
1599 { REG_TABLE (REG_0F0D
) },
1600 { "femms", { XX
} },
1601 { "", { MX
, EM
, OPSUF
} }, /* See OP_3DNowSuffix. */
1603 { PREFIX_TABLE (PREFIX_0F10
) },
1604 { PREFIX_TABLE (PREFIX_0F11
) },
1605 { PREFIX_TABLE (PREFIX_0F12
) },
1606 { MOD_TABLE (MOD_0F13
) },
1607 { "unpcklpX", { XM
, EXx
} },
1608 { "unpckhpX", { XM
, EXx
} },
1609 { PREFIX_TABLE (PREFIX_0F16
) },
1610 { MOD_TABLE (MOD_0F17
) },
1612 { REG_TABLE (REG_0F18
) },
1621 { MOD_TABLE (MOD_0F20
) },
1622 { MOD_TABLE (MOD_0F21
) },
1623 { MOD_TABLE (MOD_0F22
) },
1624 { MOD_TABLE (MOD_0F23
) },
1625 { MOD_TABLE (MOD_0F24
) },
1626 { THREE_BYTE_TABLE (THREE_BYTE_0F25
) },
1627 { MOD_TABLE (MOD_0F26
) },
1628 { "(bad)", { XX
} },
1630 { "movapX", { XM
, EXx
} },
1631 { "movapX", { EXx
, XM
} },
1632 { PREFIX_TABLE (PREFIX_0F2A
) },
1633 { PREFIX_TABLE (PREFIX_0F2B
) },
1634 { PREFIX_TABLE (PREFIX_0F2C
) },
1635 { PREFIX_TABLE (PREFIX_0F2D
) },
1636 { PREFIX_TABLE (PREFIX_0F2E
) },
1637 { PREFIX_TABLE (PREFIX_0F2F
) },
1639 { "wrmsr", { XX
} },
1640 { "rdtsc", { XX
} },
1641 { "rdmsr", { XX
} },
1642 { "rdpmc", { XX
} },
1643 { "sysenter", { XX
} },
1644 { "sysexit", { XX
} },
1645 { "(bad)", { XX
} },
1646 { "getsec", { XX
} },
1648 { THREE_BYTE_TABLE (THREE_BYTE_0F38
) },
1649 { "(bad)", { XX
} },
1650 { THREE_BYTE_TABLE (THREE_BYTE_0F3A
) },
1651 { "(bad)", { XX
} },
1652 { "(bad)", { XX
} },
1653 { "(bad)", { XX
} },
1654 { "(bad)", { XX
} },
1655 { "(bad)", { XX
} },
1657 { "cmovo", { Gv
, Ev
} },
1658 { "cmovno", { Gv
, Ev
} },
1659 { "cmovb", { Gv
, Ev
} },
1660 { "cmovae", { Gv
, Ev
} },
1661 { "cmove", { Gv
, Ev
} },
1662 { "cmovne", { Gv
, Ev
} },
1663 { "cmovbe", { Gv
, Ev
} },
1664 { "cmova", { Gv
, Ev
} },
1666 { "cmovs", { Gv
, Ev
} },
1667 { "cmovns", { Gv
, Ev
} },
1668 { "cmovp", { Gv
, Ev
} },
1669 { "cmovnp", { Gv
, Ev
} },
1670 { "cmovl", { Gv
, Ev
} },
1671 { "cmovge", { Gv
, Ev
} },
1672 { "cmovle", { Gv
, Ev
} },
1673 { "cmovg", { Gv
, Ev
} },
1675 { MOD_TABLE (MOD_0F51
) },
1676 { PREFIX_TABLE (PREFIX_0F51
) },
1677 { PREFIX_TABLE (PREFIX_0F52
) },
1678 { PREFIX_TABLE (PREFIX_0F53
) },
1679 { "andpX", { XM
, EXx
} },
1680 { "andnpX", { XM
, EXx
} },
1681 { "orpX", { XM
, EXx
} },
1682 { "xorpX", { XM
, EXx
} },
1684 { PREFIX_TABLE (PREFIX_0F58
) },
1685 { PREFIX_TABLE (PREFIX_0F59
) },
1686 { PREFIX_TABLE (PREFIX_0F5A
) },
1687 { PREFIX_TABLE (PREFIX_0F5B
) },
1688 { PREFIX_TABLE (PREFIX_0F5C
) },
1689 { PREFIX_TABLE (PREFIX_0F5D
) },
1690 { PREFIX_TABLE (PREFIX_0F5E
) },
1691 { PREFIX_TABLE (PREFIX_0F5F
) },
1693 { PREFIX_TABLE (PREFIX_0F60
) },
1694 { PREFIX_TABLE (PREFIX_0F61
) },
1695 { PREFIX_TABLE (PREFIX_0F62
) },
1696 { "packsswb", { MX
, EM
} },
1697 { "pcmpgtb", { MX
, EM
} },
1698 { "pcmpgtw", { MX
, EM
} },
1699 { "pcmpgtd", { MX
, EM
} },
1700 { "packuswb", { MX
, EM
} },
1702 { "punpckhbw", { MX
, EM
} },
1703 { "punpckhwd", { MX
, EM
} },
1704 { "punpckhdq", { MX
, EM
} },
1705 { "packssdw", { MX
, EM
} },
1706 { PREFIX_TABLE (PREFIX_0F6C
) },
1707 { PREFIX_TABLE (PREFIX_0F6D
) },
1708 { "movK", { MX
, Edq
} },
1709 { PREFIX_TABLE (PREFIX_0F6F
) },
1711 { PREFIX_TABLE (PREFIX_0F70
) },
1712 { REG_TABLE (REG_0F71
) },
1713 { REG_TABLE (REG_0F72
) },
1714 { REG_TABLE (REG_0F73
) },
1715 { "pcmpeqb", { MX
, EM
} },
1716 { "pcmpeqw", { MX
, EM
} },
1717 { "pcmpeqd", { MX
, EM
} },
1720 { PREFIX_TABLE (PREFIX_0F78
) },
1721 { PREFIX_TABLE (PREFIX_0F79
) },
1722 { THREE_BYTE_TABLE (THREE_BYTE_0F7A
) },
1723 { THREE_BYTE_TABLE (THREE_BYTE_0F7B
) },
1724 { PREFIX_TABLE (PREFIX_0F7C
) },
1725 { PREFIX_TABLE (PREFIX_0F7D
) },
1726 { PREFIX_TABLE (PREFIX_0F7E
) },
1727 { PREFIX_TABLE (PREFIX_0F7F
) },
1729 { "joH", { Jv
, XX
, cond_jump_flag
} },
1730 { "jnoH", { Jv
, XX
, cond_jump_flag
} },
1731 { "jbH", { Jv
, XX
, cond_jump_flag
} },
1732 { "jaeH", { Jv
, XX
, cond_jump_flag
} },
1733 { "jeH", { Jv
, XX
, cond_jump_flag
} },
1734 { "jneH", { Jv
, XX
, cond_jump_flag
} },
1735 { "jbeH", { Jv
, XX
, cond_jump_flag
} },
1736 { "jaH", { Jv
, XX
, cond_jump_flag
} },
1738 { "jsH", { Jv
, XX
, cond_jump_flag
} },
1739 { "jnsH", { Jv
, XX
, cond_jump_flag
} },
1740 { "jpH", { Jv
, XX
, cond_jump_flag
} },
1741 { "jnpH", { Jv
, XX
, cond_jump_flag
} },
1742 { "jlH", { Jv
, XX
, cond_jump_flag
} },
1743 { "jgeH", { Jv
, XX
, cond_jump_flag
} },
1744 { "jleH", { Jv
, XX
, cond_jump_flag
} },
1745 { "jgH", { Jv
, XX
, cond_jump_flag
} },
1748 { "setno", { Eb
} },
1750 { "setae", { Eb
} },
1752 { "setne", { Eb
} },
1753 { "setbe", { Eb
} },
1757 { "setns", { Eb
} },
1759 { "setnp", { Eb
} },
1761 { "setge", { Eb
} },
1762 { "setle", { Eb
} },
1765 { "pushT", { fs
} },
1767 { "cpuid", { XX
} },
1768 { "btS", { Ev
, Gv
} },
1769 { "shldS", { Ev
, Gv
, Ib
} },
1770 { "shldS", { Ev
, Gv
, CL
} },
1771 { REG_TABLE (REG_0FA6
) },
1772 { REG_TABLE (REG_0FA7
) },
1774 { "pushT", { gs
} },
1777 { "btsS", { Ev
, Gv
} },
1778 { "shrdS", { Ev
, Gv
, Ib
} },
1779 { "shrdS", { Ev
, Gv
, CL
} },
1780 { REG_TABLE (REG_0FAE
) },
1781 { "imulS", { Gv
, Ev
} },
1783 { "cmpxchgB", { Eb
, Gb
} },
1784 { "cmpxchgS", { Ev
, Gv
} },
1785 { MOD_TABLE (MOD_0FB2
) },
1786 { "btrS", { Ev
, Gv
} },
1787 { MOD_TABLE (MOD_0FB4
) },
1788 { MOD_TABLE (MOD_0FB5
) },
1789 { "movz{bR|x}", { Gv
, Eb
} },
1790 { "movz{wR|x}", { Gv
, Ew
} }, /* yes, there really is movzww ! */
1792 { PREFIX_TABLE (PREFIX_0FB8
) },
1794 { REG_TABLE (REG_0FBA
) },
1795 { "btcS", { Ev
, Gv
} },
1796 { "bsfS", { Gv
, Ev
} },
1797 { PREFIX_TABLE (PREFIX_0FBD
) },
1798 { "movs{bR|x}", { Gv
, Eb
} },
1799 { "movs{wR|x}", { Gv
, Ew
} }, /* yes, there really is movsww ! */
1801 { "xaddB", { Eb
, Gb
} },
1802 { "xaddS", { Ev
, Gv
} },
1803 { PREFIX_TABLE (PREFIX_0FC2
) },
1804 { PREFIX_TABLE (PREFIX_0FC3
) },
1805 { "pinsrw", { MX
, Edqw
, Ib
} },
1806 { "pextrw", { Gdq
, MS
, Ib
} },
1807 { "shufpX", { XM
, EXx
, Ib
} },
1808 { REG_TABLE (REG_0FC7
) },
1810 { "bswap", { RMeAX
} },
1811 { "bswap", { RMeCX
} },
1812 { "bswap", { RMeDX
} },
1813 { "bswap", { RMeBX
} },
1814 { "bswap", { RMeSP
} },
1815 { "bswap", { RMeBP
} },
1816 { "bswap", { RMeSI
} },
1817 { "bswap", { RMeDI
} },
1819 { PREFIX_TABLE (PREFIX_0FD0
) },
1820 { "psrlw", { MX
, EM
} },
1821 { "psrld", { MX
, EM
} },
1822 { "psrlq", { MX
, EM
} },
1823 { "paddq", { MX
, EM
} },
1824 { "pmullw", { MX
, EM
} },
1825 { PREFIX_TABLE (PREFIX_0FD6
) },
1826 { MOD_TABLE (MOD_0FD7
) },
1828 { "psubusb", { MX
, EM
} },
1829 { "psubusw", { MX
, EM
} },
1830 { "pminub", { MX
, EM
} },
1831 { "pand", { MX
, EM
} },
1832 { "paddusb", { MX
, EM
} },
1833 { "paddusw", { MX
, EM
} },
1834 { "pmaxub", { MX
, EM
} },
1835 { "pandn", { MX
, EM
} },
1837 { "pavgb", { MX
, EM
} },
1838 { "psraw", { MX
, EM
} },
1839 { "psrad", { MX
, EM
} },
1840 { "pavgw", { MX
, EM
} },
1841 { "pmulhuw", { MX
, EM
} },
1842 { "pmulhw", { MX
, EM
} },
1843 { PREFIX_TABLE (PREFIX_0FE6
) },
1844 { PREFIX_TABLE (PREFIX_0FE7
) },
1846 { "psubsb", { MX
, EM
} },
1847 { "psubsw", { MX
, EM
} },
1848 { "pminsw", { MX
, EM
} },
1849 { "por", { MX
, EM
} },
1850 { "paddsb", { MX
, EM
} },
1851 { "paddsw", { MX
, EM
} },
1852 { "pmaxsw", { MX
, EM
} },
1853 { "pxor", { MX
, EM
} },
1855 { PREFIX_TABLE (PREFIX_0FF0
) },
1856 { "psllw", { MX
, EM
} },
1857 { "pslld", { MX
, EM
} },
1858 { "psllq", { MX
, EM
} },
1859 { "pmuludq", { MX
, EM
} },
1860 { "pmaddwd", { MX
, EM
} },
1861 { "psadbw", { MX
, EM
} },
1862 { PREFIX_TABLE (PREFIX_0FF7
) },
1864 { "psubb", { MX
, EM
} },
1865 { "psubw", { MX
, EM
} },
1866 { "psubd", { MX
, EM
} },
1867 { "psubq", { MX
, EM
} },
1868 { "paddb", { MX
, EM
} },
1869 { "paddw", { MX
, EM
} },
1870 { "paddd", { MX
, EM
} },
1871 { "(bad)", { XX
} },
1874 static const unsigned char onebyte_has_modrm
[256] = {
1875 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1876 /* ------------------------------- */
1877 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
1878 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
1879 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
1880 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
1881 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
1882 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
1883 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
1884 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
1885 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
1886 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
1887 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
1888 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
1889 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
1890 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
1891 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
1892 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
1893 /* ------------------------------- */
1894 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1897 static const unsigned char twobyte_has_modrm
[256] = {
1898 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1899 /* ------------------------------- */
1900 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
1901 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
1902 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
1903 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
1904 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
1905 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
1906 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
1907 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
1908 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
1909 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
1910 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
1911 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
1912 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
1913 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
1914 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
1915 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
1916 /* ------------------------------- */
1917 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1920 static char obuf
[100];
1922 static char scratchbuf
[100];
1923 static unsigned char *start_codep
;
1924 static unsigned char *insn_codep
;
1925 static unsigned char *codep
;
1926 static const char *lock_prefix
;
1927 static const char *data_prefix
;
1928 static const char *addr_prefix
;
1929 static const char *repz_prefix
;
1930 static const char *repnz_prefix
;
1931 static disassemble_info
*the_info
;
1939 static unsigned char need_modrm
;
1942 int register_specifier
;
1948 static unsigned char need_vex
;
1949 static unsigned char need_vex_reg
;
1950 static unsigned char vex_w_done
;
1952 /* If we are accessing mod/rm/reg without need_modrm set, then the
1953 values are stale. Hitting this abort likely indicates that you
1954 need to update onebyte_has_modrm or twobyte_has_modrm. */
1955 #define MODRM_CHECK if (!need_modrm) abort ()
1957 static const char **names64
;
1958 static const char **names32
;
1959 static const char **names16
;
1960 static const char **names8
;
1961 static const char **names8rex
;
1962 static const char **names_seg
;
1963 static const char *index64
;
1964 static const char *index32
;
1965 static const char **index16
;
1967 static const char *intel_names64
[] = {
1968 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
1969 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
1971 static const char *intel_names32
[] = {
1972 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
1973 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
1975 static const char *intel_names16
[] = {
1976 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
1977 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
1979 static const char *intel_names8
[] = {
1980 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
1982 static const char *intel_names8rex
[] = {
1983 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
1984 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
1986 static const char *intel_names_seg
[] = {
1987 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
1989 static const char *intel_index64
= "riz";
1990 static const char *intel_index32
= "eiz";
1991 static const char *intel_index16
[] = {
1992 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
1995 static const char *att_names64
[] = {
1996 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
1997 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
1999 static const char *att_names32
[] = {
2000 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
2001 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
2003 static const char *att_names16
[] = {
2004 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
2005 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
2007 static const char *att_names8
[] = {
2008 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
2010 static const char *att_names8rex
[] = {
2011 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
2012 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2014 static const char *att_names_seg
[] = {
2015 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
2017 static const char *att_index64
= "%riz";
2018 static const char *att_index32
= "%eiz";
2019 static const char *att_index16
[] = {
2020 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
2023 static const struct dis386 reg_table
[][8] = {
2026 { "addA", { Eb
, Ib
} },
2027 { "orA", { Eb
, Ib
} },
2028 { "adcA", { Eb
, Ib
} },
2029 { "sbbA", { Eb
, Ib
} },
2030 { "andA", { Eb
, Ib
} },
2031 { "subA", { Eb
, Ib
} },
2032 { "xorA", { Eb
, Ib
} },
2033 { "cmpA", { Eb
, Ib
} },
2037 { "addQ", { Ev
, Iv
} },
2038 { "orQ", { Ev
, Iv
} },
2039 { "adcQ", { Ev
, Iv
} },
2040 { "sbbQ", { Ev
, Iv
} },
2041 { "andQ", { Ev
, Iv
} },
2042 { "subQ", { Ev
, Iv
} },
2043 { "xorQ", { Ev
, Iv
} },
2044 { "cmpQ", { Ev
, Iv
} },
2048 { "addQ", { Ev
, sIb
} },
2049 { "orQ", { Ev
, sIb
} },
2050 { "adcQ", { Ev
, sIb
} },
2051 { "sbbQ", { Ev
, sIb
} },
2052 { "andQ", { Ev
, sIb
} },
2053 { "subQ", { Ev
, sIb
} },
2054 { "xorQ", { Ev
, sIb
} },
2055 { "cmpQ", { Ev
, sIb
} },
2059 { "popU", { stackEv
} },
2060 { "(bad)", { XX
} },
2061 { "(bad)", { XX
} },
2062 { "(bad)", { XX
} },
2063 { "(bad)", { XX
} },
2064 { "(bad)", { XX
} },
2065 { "(bad)", { XX
} },
2066 { "(bad)", { XX
} },
2070 { "rolA", { Eb
, Ib
} },
2071 { "rorA", { Eb
, Ib
} },
2072 { "rclA", { Eb
, Ib
} },
2073 { "rcrA", { Eb
, Ib
} },
2074 { "shlA", { Eb
, Ib
} },
2075 { "shrA", { Eb
, Ib
} },
2076 { "(bad)", { XX
} },
2077 { "sarA", { Eb
, Ib
} },
2081 { "rolQ", { Ev
, Ib
} },
2082 { "rorQ", { Ev
, Ib
} },
2083 { "rclQ", { Ev
, Ib
} },
2084 { "rcrQ", { Ev
, Ib
} },
2085 { "shlQ", { Ev
, Ib
} },
2086 { "shrQ", { Ev
, Ib
} },
2087 { "(bad)", { XX
} },
2088 { "sarQ", { Ev
, Ib
} },
2092 { "movA", { Eb
, Ib
} },
2093 { "(bad)", { XX
} },
2094 { "(bad)", { XX
} },
2095 { "(bad)", { XX
} },
2096 { "(bad)", { XX
} },
2097 { "(bad)", { XX
} },
2098 { "(bad)", { XX
} },
2099 { "(bad)", { XX
} },
2103 { "movQ", { Ev
, Iv
} },
2104 { "(bad)", { XX
} },
2105 { "(bad)", { XX
} },
2106 { "(bad)", { XX
} },
2107 { "(bad)", { XX
} },
2108 { "(bad)", { XX
} },
2109 { "(bad)", { XX
} },
2110 { "(bad)", { XX
} },
2114 { "rolA", { Eb
, I1
} },
2115 { "rorA", { Eb
, I1
} },
2116 { "rclA", { Eb
, I1
} },
2117 { "rcrA", { Eb
, I1
} },
2118 { "shlA", { Eb
, I1
} },
2119 { "shrA", { Eb
, I1
} },
2120 { "(bad)", { XX
} },
2121 { "sarA", { Eb
, I1
} },
2125 { "rolQ", { Ev
, I1
} },
2126 { "rorQ", { Ev
, I1
} },
2127 { "rclQ", { Ev
, I1
} },
2128 { "rcrQ", { Ev
, I1
} },
2129 { "shlQ", { Ev
, I1
} },
2130 { "shrQ", { Ev
, I1
} },
2131 { "(bad)", { XX
} },
2132 { "sarQ", { Ev
, I1
} },
2136 { "rolA", { Eb
, CL
} },
2137 { "rorA", { Eb
, CL
} },
2138 { "rclA", { Eb
, CL
} },
2139 { "rcrA", { Eb
, CL
} },
2140 { "shlA", { Eb
, CL
} },
2141 { "shrA", { Eb
, CL
} },
2142 { "(bad)", { XX
} },
2143 { "sarA", { Eb
, CL
} },
2147 { "rolQ", { Ev
, CL
} },
2148 { "rorQ", { Ev
, CL
} },
2149 { "rclQ", { Ev
, CL
} },
2150 { "rcrQ", { Ev
, CL
} },
2151 { "shlQ", { Ev
, CL
} },
2152 { "shrQ", { Ev
, CL
} },
2153 { "(bad)", { XX
} },
2154 { "sarQ", { Ev
, CL
} },
2158 { "testA", { Eb
, Ib
} },
2159 { "(bad)", { XX
} },
2162 { "mulA", { Eb
} }, /* Don't print the implicit %al register, */
2163 { "imulA", { Eb
} }, /* to distinguish these opcodes from other */
2164 { "divA", { Eb
} }, /* mul/imul opcodes. Do the same for div */
2165 { "idivA", { Eb
} }, /* and idiv for consistency. */
2169 { "testQ", { Ev
, Iv
} },
2170 { "(bad)", { XX
} },
2173 { "mulQ", { Ev
} }, /* Don't print the implicit register. */
2174 { "imulQ", { Ev
} },
2176 { "idivQ", { Ev
} },
2182 { "(bad)", { XX
} },
2183 { "(bad)", { XX
} },
2184 { "(bad)", { XX
} },
2185 { "(bad)", { XX
} },
2186 { "(bad)", { XX
} },
2187 { "(bad)", { XX
} },
2193 { "callT", { indirEv
} },
2194 { "JcallT", { indirEp
} },
2195 { "jmpT", { indirEv
} },
2196 { "JjmpT", { indirEp
} },
2197 { "pushU", { stackEv
} },
2198 { "(bad)", { XX
} },
2202 { "sldtD", { Sv
} },
2208 { "(bad)", { XX
} },
2209 { "(bad)", { XX
} },
2213 { MOD_TABLE (MOD_0F01_REG_0
) },
2214 { MOD_TABLE (MOD_0F01_REG_1
) },
2215 { MOD_TABLE (MOD_0F01_REG_2
) },
2216 { MOD_TABLE (MOD_0F01_REG_3
) },
2217 { "smswD", { Sv
} },
2218 { "(bad)", { XX
} },
2220 { MOD_TABLE (MOD_0F01_REG_7
) },
2224 { "prefetch", { Eb
} },
2225 { "prefetchw", { Eb
} },
2226 { "(bad)", { XX
} },
2227 { "(bad)", { XX
} },
2228 { "(bad)", { XX
} },
2229 { "(bad)", { XX
} },
2230 { "(bad)", { XX
} },
2231 { "(bad)", { XX
} },
2235 { MOD_TABLE (MOD_0F18_REG_0
) },
2236 { MOD_TABLE (MOD_0F18_REG_1
) },
2237 { MOD_TABLE (MOD_0F18_REG_2
) },
2238 { MOD_TABLE (MOD_0F18_REG_3
) },
2239 { "(bad)", { XX
} },
2240 { "(bad)", { XX
} },
2241 { "(bad)", { XX
} },
2242 { "(bad)", { XX
} },
2246 { "(bad)", { XX
} },
2247 { "(bad)", { XX
} },
2248 { MOD_TABLE (MOD_0F71_REG_2
) },
2249 { "(bad)", { XX
} },
2250 { MOD_TABLE (MOD_0F71_REG_4
) },
2251 { "(bad)", { XX
} },
2252 { MOD_TABLE (MOD_0F71_REG_6
) },
2253 { "(bad)", { XX
} },
2257 { "(bad)", { XX
} },
2258 { "(bad)", { XX
} },
2259 { MOD_TABLE (MOD_0F72_REG_2
) },
2260 { "(bad)", { XX
} },
2261 { MOD_TABLE (MOD_0F72_REG_4
) },
2262 { "(bad)", { XX
} },
2263 { MOD_TABLE (MOD_0F72_REG_6
) },
2264 { "(bad)", { XX
} },
2268 { "(bad)", { XX
} },
2269 { "(bad)", { XX
} },
2270 { MOD_TABLE (MOD_0F73_REG_2
) },
2271 { MOD_TABLE (MOD_0F73_REG_3
) },
2272 { "(bad)", { XX
} },
2273 { "(bad)", { XX
} },
2274 { MOD_TABLE (MOD_0F73_REG_6
) },
2275 { MOD_TABLE (MOD_0F73_REG_7
) },
2279 { "montmul", { { OP_0f07
, 0 } } },
2280 { "xsha1", { { OP_0f07
, 0 } } },
2281 { "xsha256", { { OP_0f07
, 0 } } },
2282 { "(bad)", { { OP_0f07
, 0 } } },
2283 { "(bad)", { { OP_0f07
, 0 } } },
2284 { "(bad)", { { OP_0f07
, 0 } } },
2285 { "(bad)", { { OP_0f07
, 0 } } },
2286 { "(bad)", { { OP_0f07
, 0 } } },
2290 { "xstore-rng", { { OP_0f07
, 0 } } },
2291 { "xcrypt-ecb", { { OP_0f07
, 0 } } },
2292 { "xcrypt-cbc", { { OP_0f07
, 0 } } },
2293 { "xcrypt-ctr", { { OP_0f07
, 0 } } },
2294 { "xcrypt-cfb", { { OP_0f07
, 0 } } },
2295 { "xcrypt-ofb", { { OP_0f07
, 0 } } },
2296 { "(bad)", { { OP_0f07
, 0 } } },
2297 { "(bad)", { { OP_0f07
, 0 } } },
2301 { MOD_TABLE (MOD_0FAE_REG_0
) },
2302 { MOD_TABLE (MOD_0FAE_REG_1
) },
2303 { MOD_TABLE (MOD_0FAE_REG_2
) },
2304 { MOD_TABLE (MOD_0FAE_REG_3
) },
2305 { MOD_TABLE (MOD_0FAE_REG_4
) },
2306 { MOD_TABLE (MOD_0FAE_REG_5
) },
2307 { MOD_TABLE (MOD_0FAE_REG_6
) },
2308 { MOD_TABLE (MOD_0FAE_REG_7
) },
2312 { "(bad)", { XX
} },
2313 { "(bad)", { XX
} },
2314 { "(bad)", { XX
} },
2315 { "(bad)", { XX
} },
2316 { "btQ", { Ev
, Ib
} },
2317 { "btsQ", { Ev
, Ib
} },
2318 { "btrQ", { Ev
, Ib
} },
2319 { "btcQ", { Ev
, Ib
} },
2323 { "(bad)", { XX
} },
2324 { "cmpxchg8b", { { CMPXCHG8B_Fixup
, q_mode
} } },
2325 { "(bad)", { XX
} },
2326 { "(bad)", { XX
} },
2327 { "(bad)", { XX
} },
2328 { "(bad)", { XX
} },
2329 { MOD_TABLE (MOD_0FC7_REG_6
) },
2330 { MOD_TABLE (MOD_0FC7_REG_7
) },
2334 { "(bad)", { XX
} },
2335 { "(bad)", { XX
} },
2336 { MOD_TABLE (MOD_VEX_71_REG_2
) },
2337 { "(bad)", { XX
} },
2338 { MOD_TABLE (MOD_VEX_71_REG_4
) },
2339 { "(bad)", { XX
} },
2340 { MOD_TABLE (MOD_VEX_71_REG_6
) },
2341 { "(bad)", { XX
} },
2345 { "(bad)", { XX
} },
2346 { "(bad)", { XX
} },
2347 { MOD_TABLE (MOD_VEX_72_REG_2
) },
2348 { "(bad)", { XX
} },
2349 { MOD_TABLE (MOD_VEX_72_REG_4
) },
2350 { "(bad)", { XX
} },
2351 { MOD_TABLE (MOD_VEX_72_REG_6
) },
2352 { "(bad)", { XX
} },
2356 { "(bad)", { XX
} },
2357 { "(bad)", { XX
} },
2358 { MOD_TABLE (MOD_VEX_73_REG_2
) },
2359 { MOD_TABLE (MOD_VEX_73_REG_3
) },
2360 { "(bad)", { XX
} },
2361 { "(bad)", { XX
} },
2362 { MOD_TABLE (MOD_VEX_73_REG_6
) },
2363 { MOD_TABLE (MOD_VEX_73_REG_7
) },
2367 { "(bad)", { XX
} },
2368 { "(bad)", { XX
} },
2369 { MOD_TABLE (MOD_VEX_AE_REG_2
) },
2370 { MOD_TABLE (MOD_VEX_AE_REG_3
) },
2371 { "(bad)", { XX
} },
2372 { "(bad)", { XX
} },
2373 { "(bad)", { XX
} },
2374 { "(bad)", { XX
} },
2378 static const struct dis386 prefix_table
[][4] = {
2381 { "xchgS", { { NOP_Fixup1
, eAX_reg
}, { NOP_Fixup2
, eAX_reg
} } },
2382 { "pause", { XX
} },
2383 { "xchgS", { { NOP_Fixup1
, eAX_reg
}, { NOP_Fixup2
, eAX_reg
} } },
2384 { "(bad)", { XX
} },
2389 { "movups", { XM
, EXx
} },
2390 { "movss", { XM
, EXd
} },
2391 { "movupd", { XM
, EXx
} },
2392 { "movsd", { XM
, EXq
} },
2397 { "movups", { EXx
, XM
} },
2398 { "movss", { EXd
, XM
} },
2399 { "movupd", { EXx
, XM
} },
2400 { "movsd", { EXq
, XM
} },
2405 { MOD_TABLE (MOD_0F12_PREFIX_0
) },
2406 { "movsldup", { XM
, EXx
} },
2407 { "movlpd", { XM
, EXq
} },
2408 { "movddup", { XM
, EXq
} },
2413 { MOD_TABLE (MOD_0F16_PREFIX_0
) },
2414 { "movshdup", { XM
, EXx
} },
2415 { "movhpd", { XM
, EXq
} },
2416 { "(bad)", { XX
} },
2421 { "cvtpi2ps", { XM
, EMCq
} },
2422 { "cvtsi2ss%LQ", { XM
, Ev
} },
2423 { "cvtpi2pd", { XM
, EMCq
} },
2424 { "cvtsi2sd%LQ", { XM
, Ev
} },
2429 { MOD_TABLE (MOD_0F2B_PREFIX_0
) },
2430 { MOD_TABLE (MOD_0F2B_PREFIX_1
) },
2431 { MOD_TABLE (MOD_0F2B_PREFIX_2
) },
2432 { MOD_TABLE (MOD_0F2B_PREFIX_3
) },
2437 { "cvttps2pi", { MXC
, EXq
} },
2438 { "cvttss2siY", { Gv
, EXd
} },
2439 { "cvttpd2pi", { MXC
, EXx
} },
2440 { "cvttsd2siY", { Gv
, EXq
} },
2445 { "cvtps2pi", { MXC
, EXq
} },
2446 { "cvtss2siY", { Gv
, EXd
} },
2447 { "cvtpd2pi", { MXC
, EXx
} },
2448 { "cvtsd2siY", { Gv
, EXq
} },
2453 { "ucomiss",{ XM
, EXd
} },
2454 { "(bad)", { XX
} },
2455 { "ucomisd",{ XM
, EXq
} },
2456 { "(bad)", { XX
} },
2461 { "comiss", { XM
, EXd
} },
2462 { "(bad)", { XX
} },
2463 { "comisd", { XM
, EXq
} },
2464 { "(bad)", { XX
} },
2469 { "sqrtps", { XM
, EXx
} },
2470 { "sqrtss", { XM
, EXd
} },
2471 { "sqrtpd", { XM
, EXx
} },
2472 { "sqrtsd", { XM
, EXq
} },
2477 { "rsqrtps",{ XM
, EXx
} },
2478 { "rsqrtss",{ XM
, EXd
} },
2479 { "(bad)", { XX
} },
2480 { "(bad)", { XX
} },
2485 { "rcpps", { XM
, EXx
} },
2486 { "rcpss", { XM
, EXd
} },
2487 { "(bad)", { XX
} },
2488 { "(bad)", { XX
} },
2493 { "addps", { XM
, EXx
} },
2494 { "addss", { XM
, EXd
} },
2495 { "addpd", { XM
, EXx
} },
2496 { "addsd", { XM
, EXq
} },
2501 { "mulps", { XM
, EXx
} },
2502 { "mulss", { XM
, EXd
} },
2503 { "mulpd", { XM
, EXx
} },
2504 { "mulsd", { XM
, EXq
} },
2509 { "cvtps2pd", { XM
, EXq
} },
2510 { "cvtss2sd", { XM
, EXd
} },
2511 { "cvtpd2ps", { XM
, EXx
} },
2512 { "cvtsd2ss", { XM
, EXq
} },
2517 { "cvtdq2ps", { XM
, EXx
} },
2518 { "cvttps2dq", { XM
, EXx
} },
2519 { "cvtps2dq", { XM
, EXx
} },
2520 { "(bad)", { XX
} },
2525 { "subps", { XM
, EXx
} },
2526 { "subss", { XM
, EXd
} },
2527 { "subpd", { XM
, EXx
} },
2528 { "subsd", { XM
, EXq
} },
2533 { "minps", { XM
, EXx
} },
2534 { "minss", { XM
, EXd
} },
2535 { "minpd", { XM
, EXx
} },
2536 { "minsd", { XM
, EXq
} },
2541 { "divps", { XM
, EXx
} },
2542 { "divss", { XM
, EXd
} },
2543 { "divpd", { XM
, EXx
} },
2544 { "divsd", { XM
, EXq
} },
2549 { "maxps", { XM
, EXx
} },
2550 { "maxss", { XM
, EXd
} },
2551 { "maxpd", { XM
, EXx
} },
2552 { "maxsd", { XM
, EXq
} },
2557 { "punpcklbw",{ MX
, EMd
} },
2558 { "(bad)", { XX
} },
2559 { "punpcklbw",{ MX
, EMx
} },
2560 { "(bad)", { XX
} },
2565 { "punpcklwd",{ MX
, EMd
} },
2566 { "(bad)", { XX
} },
2567 { "punpcklwd",{ MX
, EMx
} },
2568 { "(bad)", { XX
} },
2573 { "punpckldq",{ MX
, EMd
} },
2574 { "(bad)", { XX
} },
2575 { "punpckldq",{ MX
, EMx
} },
2576 { "(bad)", { XX
} },
2581 { "(bad)", { XX
} },
2582 { "(bad)", { XX
} },
2583 { "punpcklqdq", { XM
, EXx
} },
2584 { "(bad)", { XX
} },
2589 { "(bad)", { XX
} },
2590 { "(bad)", { XX
} },
2591 { "punpckhqdq", { XM
, EXx
} },
2592 { "(bad)", { XX
} },
2597 { "movq", { MX
, EM
} },
2598 { "movdqu", { XM
, EXx
} },
2599 { "movdqa", { XM
, EXx
} },
2600 { "(bad)", { XX
} },
2605 { "pshufw", { MX
, EM
, Ib
} },
2606 { "pshufhw",{ XM
, EXx
, Ib
} },
2607 { "pshufd", { XM
, EXx
, Ib
} },
2608 { "pshuflw",{ XM
, EXx
, Ib
} },
2611 /* PREFIX_0F73_REG_3 */
2613 { "(bad)", { XX
} },
2614 { "(bad)", { XX
} },
2615 { "psrldq", { XS
, Ib
} },
2616 { "(bad)", { XX
} },
2619 /* PREFIX_0F73_REG_7 */
2621 { "(bad)", { XX
} },
2622 { "(bad)", { XX
} },
2623 { "pslldq", { XS
, Ib
} },
2624 { "(bad)", { XX
} },
2629 {"vmread", { Em
, Gm
} },
2631 {"extrq", { XS
, Ib
, Ib
} },
2632 {"insertq", { XM
, XS
, Ib
, Ib
} },
2637 {"vmwrite", { Gm
, Em
} },
2639 {"extrq", { XM
, XS
} },
2640 {"insertq", { XM
, XS
} },
2645 { "(bad)", { XX
} },
2646 { "(bad)", { XX
} },
2647 { "haddpd", { XM
, EXx
} },
2648 { "haddps", { XM
, EXx
} },
2653 { "(bad)", { XX
} },
2654 { "(bad)", { XX
} },
2655 { "hsubpd", { XM
, EXx
} },
2656 { "hsubps", { XM
, EXx
} },
2661 { "movK", { Edq
, MX
} },
2662 { "movq", { XM
, EXq
} },
2663 { "movK", { Edq
, XM
} },
2664 { "(bad)", { XX
} },
2669 { "movq", { EM
, MX
} },
2670 { "movdqu", { EXx
, XM
} },
2671 { "movdqa", { EXx
, XM
} },
2672 { "(bad)", { XX
} },
2677 { "(bad)", { XX
} },
2678 { "popcntS", { Gv
, Ev
} },
2679 { "(bad)", { XX
} },
2680 { "(bad)", { XX
} },
2685 { "bsrS", { Gv
, Ev
} },
2686 { "lzcntS", { Gv
, Ev
} },
2687 { "bsrS", { Gv
, Ev
} },
2688 { "(bad)", { XX
} },
2693 { "cmpps", { XM
, EXx
, CMP
} },
2694 { "cmpss", { XM
, EXd
, CMP
} },
2695 { "cmppd", { XM
, EXx
, CMP
} },
2696 { "cmpsd", { XM
, EXq
, CMP
} },
2701 { "movntiS", { Ma
, Gv
} },
2702 { "(bad)", { XX
} },
2703 { "(bad)", { XX
} },
2704 { "(bad)", { XX
} },
2707 /* PREFIX_0FC7_REG_6 */
2709 { "vmptrld",{ Mq
} },
2710 { "vmxon", { Mq
} },
2711 { "vmclear",{ Mq
} },
2712 { "(bad)", { XX
} },
2717 { "(bad)", { XX
} },
2718 { "(bad)", { XX
} },
2719 { "addsubpd", { XM
, EXx
} },
2720 { "addsubps", { XM
, EXx
} },
2725 { "(bad)", { XX
} },
2726 { "movq2dq",{ XM
, MS
} },
2727 { "movq", { EXq
, XM
} },
2728 { "movdq2q",{ MX
, XS
} },
2733 { "(bad)", { XX
} },
2734 { "cvtdq2pd", { XM
, EXq
} },
2735 { "cvttpd2dq", { XM
, EXx
} },
2736 { "cvtpd2dq", { XM
, EXx
} },
2741 { "movntq", { Mq
, MX
} },
2742 { "(bad)", { XX
} },
2743 { MOD_TABLE (MOD_0FE7_PREFIX_2
) },
2744 { "(bad)", { XX
} },
2749 { "(bad)", { XX
} },
2750 { "(bad)", { XX
} },
2751 { "(bad)", { XX
} },
2752 { MOD_TABLE (MOD_0FF0_PREFIX_3
) },
2757 { "maskmovq", { MX
, MS
} },
2758 { "(bad)", { XX
} },
2759 { "maskmovdqu", { XM
, XS
} },
2760 { "(bad)", { XX
} },
2765 { "(bad)", { XX
} },
2766 { "(bad)", { XX
} },
2767 { "pblendvb", { XM
, EXx
, XMM0
} },
2768 { "(bad)", { XX
} },
2773 { "(bad)", { XX
} },
2774 { "(bad)", { XX
} },
2775 { "blendvps", { XM
, EXx
, XMM0
} },
2776 { "(bad)", { XX
} },
2781 { "(bad)", { XX
} },
2782 { "(bad)", { XX
} },
2783 { "blendvpd", { XM
, EXx
, XMM0
} },
2784 { "(bad)", { XX
} },
2789 { "(bad)", { XX
} },
2790 { "(bad)", { XX
} },
2791 { "ptest", { XM
, EXx
} },
2792 { "(bad)", { XX
} },
2797 { "(bad)", { XX
} },
2798 { "(bad)", { XX
} },
2799 { "pmovsxbw", { XM
, EXq
} },
2800 { "(bad)", { XX
} },
2805 { "(bad)", { XX
} },
2806 { "(bad)", { XX
} },
2807 { "pmovsxbd", { XM
, EXd
} },
2808 { "(bad)", { XX
} },
2813 { "(bad)", { XX
} },
2814 { "(bad)", { XX
} },
2815 { "pmovsxbq", { XM
, EXw
} },
2816 { "(bad)", { XX
} },
2821 { "(bad)", { XX
} },
2822 { "(bad)", { XX
} },
2823 { "pmovsxwd", { XM
, EXq
} },
2824 { "(bad)", { XX
} },
2829 { "(bad)", { XX
} },
2830 { "(bad)", { XX
} },
2831 { "pmovsxwq", { XM
, EXd
} },
2832 { "(bad)", { XX
} },
2837 { "(bad)", { XX
} },
2838 { "(bad)", { XX
} },
2839 { "pmovsxdq", { XM
, EXq
} },
2840 { "(bad)", { XX
} },
2845 { "(bad)", { XX
} },
2846 { "(bad)", { XX
} },
2847 { "pmuldq", { XM
, EXx
} },
2848 { "(bad)", { XX
} },
2853 { "(bad)", { XX
} },
2854 { "(bad)", { XX
} },
2855 { "pcmpeqq", { XM
, EXx
} },
2856 { "(bad)", { XX
} },
2861 { "(bad)", { XX
} },
2862 { "(bad)", { XX
} },
2863 { MOD_TABLE (MOD_0F382A_PREFIX_2
) },
2864 { "(bad)", { XX
} },
2869 { "(bad)", { XX
} },
2870 { "(bad)", { XX
} },
2871 { "packusdw", { XM
, EXx
} },
2872 { "(bad)", { XX
} },
2877 { "(bad)", { XX
} },
2878 { "(bad)", { XX
} },
2879 { "pmovzxbw", { XM
, EXq
} },
2880 { "(bad)", { XX
} },
2885 { "(bad)", { XX
} },
2886 { "(bad)", { XX
} },
2887 { "pmovzxbd", { XM
, EXd
} },
2888 { "(bad)", { XX
} },
2893 { "(bad)", { XX
} },
2894 { "(bad)", { XX
} },
2895 { "pmovzxbq", { XM
, EXw
} },
2896 { "(bad)", { XX
} },
2901 { "(bad)", { XX
} },
2902 { "(bad)", { XX
} },
2903 { "pmovzxwd", { XM
, EXq
} },
2904 { "(bad)", { XX
} },
2909 { "(bad)", { XX
} },
2910 { "(bad)", { XX
} },
2911 { "pmovzxwq", { XM
, EXd
} },
2912 { "(bad)", { XX
} },
2917 { "(bad)", { XX
} },
2918 { "(bad)", { XX
} },
2919 { "pmovzxdq", { XM
, EXq
} },
2920 { "(bad)", { XX
} },
2925 { "(bad)", { XX
} },
2926 { "(bad)", { XX
} },
2927 { "pcmpgtq", { XM
, EXx
} },
2928 { "(bad)", { XX
} },
2933 { "(bad)", { XX
} },
2934 { "(bad)", { XX
} },
2935 { "pminsb", { XM
, EXx
} },
2936 { "(bad)", { XX
} },
2941 { "(bad)", { XX
} },
2942 { "(bad)", { XX
} },
2943 { "pminsd", { XM
, EXx
} },
2944 { "(bad)", { XX
} },
2949 { "(bad)", { XX
} },
2950 { "(bad)", { XX
} },
2951 { "pminuw", { XM
, EXx
} },
2952 { "(bad)", { XX
} },
2957 { "(bad)", { XX
} },
2958 { "(bad)", { XX
} },
2959 { "pminud", { XM
, EXx
} },
2960 { "(bad)", { XX
} },
2965 { "(bad)", { XX
} },
2966 { "(bad)", { XX
} },
2967 { "pmaxsb", { XM
, EXx
} },
2968 { "(bad)", { XX
} },
2973 { "(bad)", { XX
} },
2974 { "(bad)", { XX
} },
2975 { "pmaxsd", { XM
, EXx
} },
2976 { "(bad)", { XX
} },
2981 { "(bad)", { XX
} },
2982 { "(bad)", { XX
} },
2983 { "pmaxuw", { XM
, EXx
} },
2984 { "(bad)", { XX
} },
2989 { "(bad)", { XX
} },
2990 { "(bad)", { XX
} },
2991 { "pmaxud", { XM
, EXx
} },
2992 { "(bad)", { XX
} },
2997 { "(bad)", { XX
} },
2998 { "(bad)", { XX
} },
2999 { "pmulld", { XM
, EXx
} },
3000 { "(bad)", { XX
} },
3005 { "(bad)", { XX
} },
3006 { "(bad)", { XX
} },
3007 { "phminposuw", { XM
, EXx
} },
3008 { "(bad)", { XX
} },
3013 { "(bad)", { XX
} },
3014 { "(bad)", { XX
} },
3015 { "invept", { Gm
, Mo
} },
3016 { "(bad)", { XX
} },
3021 { "(bad)", { XX
} },
3022 { "(bad)", { XX
} },
3023 { "invvpid", { Gm
, Mo
} },
3024 { "(bad)", { XX
} },
3029 { "(bad)", { XX
} },
3030 { "(bad)", { XX
} },
3031 { "aesimc", { XM
, EXx
} },
3032 { "(bad)", { XX
} },
3037 { "(bad)", { XX
} },
3038 { "(bad)", { XX
} },
3039 { "aesenc", { XM
, EXx
} },
3040 { "(bad)", { XX
} },
3045 { "(bad)", { XX
} },
3046 { "(bad)", { XX
} },
3047 { "aesenclast", { XM
, EXx
} },
3048 { "(bad)", { XX
} },
3053 { "(bad)", { XX
} },
3054 { "(bad)", { XX
} },
3055 { "aesdec", { XM
, EXx
} },
3056 { "(bad)", { XX
} },
3061 { "(bad)", { XX
} },
3062 { "(bad)", { XX
} },
3063 { "aesdeclast", { XM
, EXx
} },
3064 { "(bad)", { XX
} },
3069 { "movbeS", { Gv
, { MOVBE_Fixup
, v_mode
} } },
3070 { "(bad)", { XX
} },
3071 { "movbeS", { Gv
, { MOVBE_Fixup
, v_mode
} } },
3072 { "crc32", { Gdq
, { CRC32_Fixup
, b_mode
} } },
3077 { "movbeS", { { MOVBE_Fixup
, v_mode
}, Gv
} },
3078 { "(bad)", { XX
} },
3079 { "movbeS", { { MOVBE_Fixup
, v_mode
}, Gv
} },
3080 { "crc32", { Gdq
, { CRC32_Fixup
, v_mode
} } },
3085 { "(bad)", { XX
} },
3086 { "(bad)", { XX
} },
3087 { "roundps", { XM
, EXx
, Ib
} },
3088 { "(bad)", { XX
} },
3093 { "(bad)", { XX
} },
3094 { "(bad)", { XX
} },
3095 { "roundpd", { XM
, EXx
, Ib
} },
3096 { "(bad)", { XX
} },
3101 { "(bad)", { XX
} },
3102 { "(bad)", { XX
} },
3103 { "roundss", { XM
, EXd
, Ib
} },
3104 { "(bad)", { XX
} },
3109 { "(bad)", { XX
} },
3110 { "(bad)", { XX
} },
3111 { "roundsd", { XM
, EXq
, Ib
} },
3112 { "(bad)", { XX
} },
3117 { "(bad)", { XX
} },
3118 { "(bad)", { XX
} },
3119 { "blendps", { XM
, EXx
, Ib
} },
3120 { "(bad)", { XX
} },
3125 { "(bad)", { XX
} },
3126 { "(bad)", { XX
} },
3127 { "blendpd", { XM
, EXx
, Ib
} },
3128 { "(bad)", { XX
} },
3133 { "(bad)", { XX
} },
3134 { "(bad)", { XX
} },
3135 { "pblendw", { XM
, EXx
, Ib
} },
3136 { "(bad)", { XX
} },
3141 { "(bad)", { XX
} },
3142 { "(bad)", { XX
} },
3143 { "pextrb", { Edqb
, XM
, Ib
} },
3144 { "(bad)", { XX
} },
3149 { "(bad)", { XX
} },
3150 { "(bad)", { XX
} },
3151 { "pextrw", { Edqw
, XM
, Ib
} },
3152 { "(bad)", { XX
} },
3157 { "(bad)", { XX
} },
3158 { "(bad)", { XX
} },
3159 { "pextrK", { Edq
, XM
, Ib
} },
3160 { "(bad)", { XX
} },
3165 { "(bad)", { XX
} },
3166 { "(bad)", { XX
} },
3167 { "extractps", { Edqd
, XM
, Ib
} },
3168 { "(bad)", { XX
} },
3173 { "(bad)", { XX
} },
3174 { "(bad)", { XX
} },
3175 { "pinsrb", { XM
, Edqb
, Ib
} },
3176 { "(bad)", { XX
} },
3181 { "(bad)", { XX
} },
3182 { "(bad)", { XX
} },
3183 { "insertps", { XM
, EXd
, Ib
} },
3184 { "(bad)", { XX
} },
3189 { "(bad)", { XX
} },
3190 { "(bad)", { XX
} },
3191 { "pinsrK", { XM
, Edq
, Ib
} },
3192 { "(bad)", { XX
} },
3197 { "(bad)", { XX
} },
3198 { "(bad)", { XX
} },
3199 { "dpps", { XM
, EXx
, Ib
} },
3200 { "(bad)", { XX
} },
3205 { "(bad)", { XX
} },
3206 { "(bad)", { XX
} },
3207 { "dppd", { XM
, EXx
, Ib
} },
3208 { "(bad)", { XX
} },
3213 { "(bad)", { XX
} },
3214 { "(bad)", { XX
} },
3215 { "mpsadbw", { XM
, EXx
, Ib
} },
3216 { "(bad)", { XX
} },
3221 { "(bad)", { XX
} },
3222 { "(bad)", { XX
} },
3223 { "pclmulqdq", { XM
, EXx
, PCLMUL
} },
3224 { "(bad)", { XX
} },
3229 { "(bad)", { XX
} },
3230 { "(bad)", { XX
} },
3231 { "pcmpestrm", { XM
, EXx
, Ib
} },
3232 { "(bad)", { XX
} },
3237 { "(bad)", { XX
} },
3238 { "(bad)", { XX
} },
3239 { "pcmpestri", { XM
, EXx
, Ib
} },
3240 { "(bad)", { XX
} },
3245 { "(bad)", { XX
} },
3246 { "(bad)", { XX
} },
3247 { "pcmpistrm", { XM
, EXx
, Ib
} },
3248 { "(bad)", { XX
} },
3253 { "(bad)", { XX
} },
3254 { "(bad)", { XX
} },
3255 { "pcmpistri", { XM
, EXx
, Ib
} },
3256 { "(bad)", { XX
} },
3261 { "(bad)", { XX
} },
3262 { "(bad)", { XX
} },
3263 { "aeskeygenassist", { XM
, EXx
, Ib
} },
3264 { "(bad)", { XX
} },
3269 { "vmovups", { XM
, EXx
} },
3270 { VEX_LEN_TABLE (VEX_LEN_10_P_1
) },
3271 { "vmovupd", { XM
, EXx
} },
3272 { VEX_LEN_TABLE (VEX_LEN_10_P_3
) },
3277 { "vmovups", { EXx
, XM
} },
3278 { VEX_LEN_TABLE (VEX_LEN_11_P_1
) },
3279 { "vmovupd", { EXx
, XM
} },
3280 { VEX_LEN_TABLE (VEX_LEN_11_P_3
) },
3285 { MOD_TABLE (MOD_VEX_12_PREFIX_0
) },
3286 { "vmovsldup", { XM
, EXx
} },
3287 { VEX_LEN_TABLE (VEX_LEN_12_P_2
) },
3288 { "vmovddup", { XM
, EXymmq
} },
3293 { MOD_TABLE (MOD_VEX_16_PREFIX_0
) },
3294 { "vmovshdup", { XM
, EXx
} },
3295 { VEX_LEN_TABLE (VEX_LEN_16_P_2
) },
3296 { "(bad)", { XX
} },
3301 { "(bad)", { XX
} },
3302 { VEX_LEN_TABLE (VEX_LEN_2A_P_1
) },
3303 { "(bad)", { XX
} },
3304 { VEX_LEN_TABLE (VEX_LEN_2A_P_3
) },
3309 { "(bad)", { XX
} },
3310 { VEX_LEN_TABLE (VEX_LEN_2C_P_1
) },
3311 { "(bad)", { XX
} },
3312 { VEX_LEN_TABLE (VEX_LEN_2C_P_3
) },
3317 { "(bad)", { XX
} },
3318 { VEX_LEN_TABLE (VEX_LEN_2D_P_1
) },
3319 { "(bad)", { XX
} },
3320 { VEX_LEN_TABLE (VEX_LEN_2D_P_3
) },
3325 { VEX_LEN_TABLE (VEX_LEN_2E_P_0
) },
3326 { "(bad)", { XX
} },
3327 { VEX_LEN_TABLE (VEX_LEN_2E_P_2
) },
3328 { "(bad)", { XX
} },
3333 { VEX_LEN_TABLE (VEX_LEN_2F_P_0
) },
3334 { "(bad)", { XX
} },
3335 { VEX_LEN_TABLE (VEX_LEN_2F_P_2
) },
3336 { "(bad)", { XX
} },
3341 { "vsqrtps", { XM
, EXx
} },
3342 { VEX_LEN_TABLE (VEX_LEN_51_P_1
) },
3343 { "vsqrtpd", { XM
, EXx
} },
3344 { VEX_LEN_TABLE (VEX_LEN_51_P_3
) },
3349 { "vrsqrtps", { XM
, EXx
} },
3350 { VEX_LEN_TABLE (VEX_LEN_52_P_1
) },
3351 { "(bad)", { XX
} },
3352 { "(bad)", { XX
} },
3357 { "vrcpps", { XM
, EXx
} },
3358 { VEX_LEN_TABLE (VEX_LEN_53_P_1
) },
3359 { "(bad)", { XX
} },
3360 { "(bad)", { XX
} },
3365 { "vaddps", { XM
, Vex
, EXx
} },
3366 { VEX_LEN_TABLE (VEX_LEN_58_P_1
) },
3367 { "vaddpd", { XM
, Vex
, EXx
} },
3368 { VEX_LEN_TABLE (VEX_LEN_58_P_3
) },
3373 { "vmulps", { XM
, Vex
, EXx
} },
3374 { VEX_LEN_TABLE (VEX_LEN_59_P_1
) },
3375 { "vmulpd", { XM
, Vex
, EXx
} },
3376 { VEX_LEN_TABLE (VEX_LEN_59_P_3
) },
3381 { "vcvtps2pd", { XM
, EXxmmq
} },
3382 { VEX_LEN_TABLE (VEX_LEN_5A_P_1
) },
3383 { "vcvtpd2ps%XY", { XMM
, EXx
} },
3384 { VEX_LEN_TABLE (VEX_LEN_5A_P_3
) },
3389 { "vcvtdq2ps", { XM
, EXx
} },
3390 { "vcvttps2dq", { XM
, EXx
} },
3391 { "vcvtps2dq", { XM
, EXx
} },
3392 { "(bad)", { XX
} },
3397 { "vsubps", { XM
, Vex
, EXx
} },
3398 { VEX_LEN_TABLE (VEX_LEN_5C_P_1
) },
3399 { "vsubpd", { XM
, Vex
, EXx
} },
3400 { VEX_LEN_TABLE (VEX_LEN_5C_P_3
) },
3405 { "vminps", { XM
, Vex
, EXx
} },
3406 { VEX_LEN_TABLE (VEX_LEN_5D_P_1
) },
3407 { "vminpd", { XM
, Vex
, EXx
} },
3408 { VEX_LEN_TABLE (VEX_LEN_5D_P_3
) },
3413 { "vdivps", { XM
, Vex
, EXx
} },
3414 { VEX_LEN_TABLE (VEX_LEN_5E_P_1
) },
3415 { "vdivpd", { XM
, Vex
, EXx
} },
3416 { VEX_LEN_TABLE (VEX_LEN_5E_P_3
) },
3421 { "vmaxps", { XM
, Vex
, EXx
} },
3422 { VEX_LEN_TABLE (VEX_LEN_5F_P_1
) },
3423 { "vmaxpd", { XM
, Vex
, EXx
} },
3424 { VEX_LEN_TABLE (VEX_LEN_5F_P_3
) },
3429 { "(bad)", { XX
} },
3430 { "(bad)", { XX
} },
3431 { VEX_LEN_TABLE (VEX_LEN_60_P_2
) },
3432 { "(bad)", { XX
} },
3437 { "(bad)", { XX
} },
3438 { "(bad)", { XX
} },
3439 { VEX_LEN_TABLE (VEX_LEN_61_P_2
) },
3440 { "(bad)", { XX
} },
3445 { "(bad)", { XX
} },
3446 { "(bad)", { XX
} },
3447 { VEX_LEN_TABLE (VEX_LEN_62_P_2
) },
3448 { "(bad)", { XX
} },
3453 { "(bad)", { XX
} },
3454 { "(bad)", { XX
} },
3455 { VEX_LEN_TABLE (VEX_LEN_63_P_2
) },
3456 { "(bad)", { XX
} },
3461 { "(bad)", { XX
} },
3462 { "(bad)", { XX
} },
3463 { VEX_LEN_TABLE (VEX_LEN_64_P_2
) },
3464 { "(bad)", { XX
} },
3469 { "(bad)", { XX
} },
3470 { "(bad)", { XX
} },
3471 { VEX_LEN_TABLE (VEX_LEN_65_P_2
) },
3472 { "(bad)", { XX
} },
3477 { "(bad)", { XX
} },
3478 { "(bad)", { XX
} },
3479 { VEX_LEN_TABLE (VEX_LEN_66_P_2
) },
3480 { "(bad)", { XX
} },
3485 { "(bad)", { XX
} },
3486 { "(bad)", { XX
} },
3487 { VEX_LEN_TABLE (VEX_LEN_67_P_2
) },
3488 { "(bad)", { XX
} },
3493 { "(bad)", { XX
} },
3494 { "(bad)", { XX
} },
3495 { VEX_LEN_TABLE (VEX_LEN_68_P_2
) },
3496 { "(bad)", { XX
} },
3501 { "(bad)", { XX
} },
3502 { "(bad)", { XX
} },
3503 { VEX_LEN_TABLE (VEX_LEN_69_P_2
) },
3504 { "(bad)", { XX
} },
3509 { "(bad)", { XX
} },
3510 { "(bad)", { XX
} },
3511 { VEX_LEN_TABLE (VEX_LEN_6A_P_2
) },
3512 { "(bad)", { XX
} },
3517 { "(bad)", { XX
} },
3518 { "(bad)", { XX
} },
3519 { VEX_LEN_TABLE (VEX_LEN_6B_P_2
) },
3520 { "(bad)", { XX
} },
3525 { "(bad)", { XX
} },
3526 { "(bad)", { XX
} },
3527 { VEX_LEN_TABLE (VEX_LEN_6C_P_2
) },
3528 { "(bad)", { XX
} },
3533 { "(bad)", { XX
} },
3534 { "(bad)", { XX
} },
3535 { VEX_LEN_TABLE (VEX_LEN_6D_P_2
) },
3536 { "(bad)", { XX
} },
3541 { "(bad)", { XX
} },
3542 { "(bad)", { XX
} },
3543 { VEX_LEN_TABLE (VEX_LEN_6E_P_2
) },
3544 { "(bad)", { XX
} },
3549 { "(bad)", { XX
} },
3550 { "vmovdqu", { XM
, EXx
} },
3551 { "vmovdqa", { XM
, EXx
} },
3552 { "(bad)", { XX
} },
3557 { "(bad)", { XX
} },
3558 { VEX_LEN_TABLE (VEX_LEN_70_P_1
) },
3559 { VEX_LEN_TABLE (VEX_LEN_70_P_2
) },
3560 { VEX_LEN_TABLE (VEX_LEN_70_P_3
) },
3563 /* PREFIX_VEX_71_REG_2 */
3565 { "(bad)", { XX
} },
3566 { "(bad)", { XX
} },
3567 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2
) },
3568 { "(bad)", { XX
} },
3571 /* PREFIX_VEX_71_REG_4 */
3573 { "(bad)", { XX
} },
3574 { "(bad)", { XX
} },
3575 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2
) },
3576 { "(bad)", { XX
} },
3579 /* PREFIX_VEX_71_REG_6 */
3581 { "(bad)", { XX
} },
3582 { "(bad)", { XX
} },
3583 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2
) },
3584 { "(bad)", { XX
} },
3587 /* PREFIX_VEX_72_REG_2 */
3589 { "(bad)", { XX
} },
3590 { "(bad)", { XX
} },
3591 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2
) },
3592 { "(bad)", { XX
} },
3595 /* PREFIX_VEX_72_REG_4 */
3597 { "(bad)", { XX
} },
3598 { "(bad)", { XX
} },
3599 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2
) },
3600 { "(bad)", { XX
} },
3603 /* PREFIX_VEX_72_REG_6 */
3605 { "(bad)", { XX
} },
3606 { "(bad)", { XX
} },
3607 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2
) },
3608 { "(bad)", { XX
} },
3611 /* PREFIX_VEX_73_REG_2 */
3613 { "(bad)", { XX
} },
3614 { "(bad)", { XX
} },
3615 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2
) },
3616 { "(bad)", { XX
} },
3619 /* PREFIX_VEX_73_REG_3 */
3621 { "(bad)", { XX
} },
3622 { "(bad)", { XX
} },
3623 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2
) },
3624 { "(bad)", { XX
} },
3627 /* PREFIX_VEX_73_REG_6 */
3629 { "(bad)", { XX
} },
3630 { "(bad)", { XX
} },
3631 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2
) },
3632 { "(bad)", { XX
} },
3635 /* PREFIX_VEX_73_REG_7 */
3637 { "(bad)", { XX
} },
3638 { "(bad)", { XX
} },
3639 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2
) },
3640 { "(bad)", { XX
} },
3645 { "(bad)", { XX
} },
3646 { "(bad)", { XX
} },
3647 { VEX_LEN_TABLE (VEX_LEN_74_P_2
) },
3648 { "(bad)", { XX
} },
3653 { "(bad)", { XX
} },
3654 { "(bad)", { XX
} },
3655 { VEX_LEN_TABLE (VEX_LEN_75_P_2
) },
3656 { "(bad)", { XX
} },
3661 { "(bad)", { XX
} },
3662 { "(bad)", { XX
} },
3663 { VEX_LEN_TABLE (VEX_LEN_76_P_2
) },
3664 { "(bad)", { XX
} },
3670 { "(bad)", { XX
} },
3671 { "(bad)", { XX
} },
3672 { "(bad)", { XX
} },
3677 { "(bad)", { XX
} },
3678 { "(bad)", { XX
} },
3679 { "vhaddpd", { XM
, Vex
, EXx
} },
3680 { "vhaddps", { XM
, Vex
, EXx
} },
3685 { "(bad)", { XX
} },
3686 { "(bad)", { XX
} },
3687 { "vhsubpd", { XM
, Vex
, EXx
} },
3688 { "vhsubps", { XM
, Vex
, EXx
} },
3693 { "(bad)", { XX
} },
3694 { VEX_LEN_TABLE (VEX_LEN_7E_P_1
) },
3695 { VEX_LEN_TABLE (VEX_LEN_7E_P_2
) },
3696 { "(bad)", { XX
} },
3701 { "(bad)", { XX
} },
3702 { "vmovdqu", { EXx
, XM
} },
3703 { "vmovdqa", { EXx
, XM
} },
3704 { "(bad)", { XX
} },
3709 { "vcmpps", { XM
, Vex
, EXx
, VCMP
} },
3710 { VEX_LEN_TABLE (VEX_LEN_C2_P_1
) },
3711 { "vcmppd", { XM
, Vex
, EXx
, VCMP
} },
3712 { VEX_LEN_TABLE (VEX_LEN_C2_P_3
) },
3717 { "(bad)", { XX
} },
3718 { "(bad)", { XX
} },
3719 { VEX_LEN_TABLE (VEX_LEN_C4_P_2
) },
3720 { "(bad)", { XX
} },
3725 { "(bad)", { XX
} },
3726 { "(bad)", { XX
} },
3727 { VEX_LEN_TABLE (VEX_LEN_C5_P_2
) },
3728 { "(bad)", { XX
} },
3733 { "(bad)", { XX
} },
3734 { "(bad)", { XX
} },
3735 { "vaddsubpd", { XM
, Vex
, EXx
} },
3736 { "vaddsubps", { XM
, Vex
, EXx
} },
3741 { "(bad)", { XX
} },
3742 { "(bad)", { XX
} },
3743 { VEX_LEN_TABLE (VEX_LEN_D1_P_2
) },
3744 { "(bad)", { XX
} },
3749 { "(bad)", { XX
} },
3750 { "(bad)", { XX
} },
3751 { VEX_LEN_TABLE (VEX_LEN_D2_P_2
) },
3752 { "(bad)", { XX
} },
3757 { "(bad)", { XX
} },
3758 { "(bad)", { XX
} },
3759 { VEX_LEN_TABLE (VEX_LEN_D3_P_2
) },
3760 { "(bad)", { XX
} },
3765 { "(bad)", { XX
} },
3766 { "(bad)", { XX
} },
3767 { VEX_LEN_TABLE (VEX_LEN_D4_P_2
) },
3768 { "(bad)", { XX
} },
3773 { "(bad)", { XX
} },
3774 { "(bad)", { XX
} },
3775 { VEX_LEN_TABLE (VEX_LEN_D5_P_2
) },
3776 { "(bad)", { XX
} },
3781 { "(bad)", { XX
} },
3782 { "(bad)", { XX
} },
3783 { VEX_LEN_TABLE (VEX_LEN_D6_P_2
) },
3784 { "(bad)", { XX
} },
3789 { "(bad)", { XX
} },
3790 { "(bad)", { XX
} },
3791 { MOD_TABLE (MOD_VEX_D7_PREFIX_2
) },
3792 { "(bad)", { XX
} },
3797 { "(bad)", { XX
} },
3798 { "(bad)", { XX
} },
3799 { VEX_LEN_TABLE (VEX_LEN_D8_P_2
) },
3800 { "(bad)", { XX
} },
3805 { "(bad)", { XX
} },
3806 { "(bad)", { XX
} },
3807 { VEX_LEN_TABLE (VEX_LEN_D9_P_2
) },
3808 { "(bad)", { XX
} },
3813 { "(bad)", { XX
} },
3814 { "(bad)", { XX
} },
3815 { VEX_LEN_TABLE (VEX_LEN_DA_P_2
) },
3816 { "(bad)", { XX
} },
3821 { "(bad)", { XX
} },
3822 { "(bad)", { XX
} },
3823 { VEX_LEN_TABLE (VEX_LEN_DB_P_2
) },
3824 { "(bad)", { XX
} },
3829 { "(bad)", { XX
} },
3830 { "(bad)", { XX
} },
3831 { VEX_LEN_TABLE (VEX_LEN_DC_P_2
) },
3832 { "(bad)", { XX
} },
3837 { "(bad)", { XX
} },
3838 { "(bad)", { XX
} },
3839 { VEX_LEN_TABLE (VEX_LEN_DD_P_2
) },
3840 { "(bad)", { XX
} },
3845 { "(bad)", { XX
} },
3846 { "(bad)", { XX
} },
3847 { VEX_LEN_TABLE (VEX_LEN_DE_P_2
) },
3848 { "(bad)", { XX
} },
3853 { "(bad)", { XX
} },
3854 { "(bad)", { XX
} },
3855 { VEX_LEN_TABLE (VEX_LEN_DF_P_2
) },
3856 { "(bad)", { XX
} },
3861 { "(bad)", { XX
} },
3862 { "(bad)", { XX
} },
3863 { VEX_LEN_TABLE (VEX_LEN_E0_P_2
) },
3864 { "(bad)", { XX
} },
3869 { "(bad)", { XX
} },
3870 { "(bad)", { XX
} },
3871 { VEX_LEN_TABLE (VEX_LEN_E1_P_2
) },
3872 { "(bad)", { XX
} },
3877 { "(bad)", { XX
} },
3878 { "(bad)", { XX
} },
3879 { VEX_LEN_TABLE (VEX_LEN_E2_P_2
) },
3880 { "(bad)", { XX
} },
3885 { "(bad)", { XX
} },
3886 { "(bad)", { XX
} },
3887 { VEX_LEN_TABLE (VEX_LEN_E3_P_2
) },
3888 { "(bad)", { XX
} },
3893 { "(bad)", { XX
} },
3894 { "(bad)", { XX
} },
3895 { VEX_LEN_TABLE (VEX_LEN_E4_P_2
) },
3896 { "(bad)", { XX
} },
3901 { "(bad)", { XX
} },
3902 { "(bad)", { XX
} },
3903 { VEX_LEN_TABLE (VEX_LEN_E5_P_2
) },
3904 { "(bad)", { XX
} },
3909 { "(bad)", { XX
} },
3910 { "vcvtdq2pd", { XM
, EXxmmq
} },
3911 { "vcvttpd2dq%XY", { XMM
, EXx
} },
3912 { "vcvtpd2dq%XY", { XMM
, EXx
} },
3917 { "(bad)", { XX
} },
3918 { "(bad)", { XX
} },
3919 { MOD_TABLE (MOD_VEX_E7_PREFIX_2
) },
3920 { "(bad)", { XX
} },
3925 { "(bad)", { XX
} },
3926 { "(bad)", { XX
} },
3927 { VEX_LEN_TABLE (VEX_LEN_E8_P_2
) },
3928 { "(bad)", { XX
} },
3933 { "(bad)", { XX
} },
3934 { "(bad)", { XX
} },
3935 { VEX_LEN_TABLE (VEX_LEN_E9_P_2
) },
3936 { "(bad)", { XX
} },
3941 { "(bad)", { XX
} },
3942 { "(bad)", { XX
} },
3943 { VEX_LEN_TABLE (VEX_LEN_EA_P_2
) },
3944 { "(bad)", { XX
} },
3949 { "(bad)", { XX
} },
3950 { "(bad)", { XX
} },
3951 { VEX_LEN_TABLE (VEX_LEN_EB_P_2
) },
3952 { "(bad)", { XX
} },
3957 { "(bad)", { XX
} },
3958 { "(bad)", { XX
} },
3959 { VEX_LEN_TABLE (VEX_LEN_EC_P_2
) },
3960 { "(bad)", { XX
} },
3965 { "(bad)", { XX
} },
3966 { "(bad)", { XX
} },
3967 { VEX_LEN_TABLE (VEX_LEN_ED_P_2
) },
3968 { "(bad)", { XX
} },
3973 { "(bad)", { XX
} },
3974 { "(bad)", { XX
} },
3975 { VEX_LEN_TABLE (VEX_LEN_EE_P_2
) },
3976 { "(bad)", { XX
} },
3981 { "(bad)", { XX
} },
3982 { "(bad)", { XX
} },
3983 { VEX_LEN_TABLE (VEX_LEN_EF_P_2
) },
3984 { "(bad)", { XX
} },
3989 { "(bad)", { XX
} },
3990 { "(bad)", { XX
} },
3991 { "(bad)", { XX
} },
3992 { MOD_TABLE (MOD_VEX_F0_PREFIX_3
) },
3997 { "(bad)", { XX
} },
3998 { "(bad)", { XX
} },
3999 { VEX_LEN_TABLE (VEX_LEN_F1_P_2
) },
4000 { "(bad)", { XX
} },
4005 { "(bad)", { XX
} },
4006 { "(bad)", { XX
} },
4007 { VEX_LEN_TABLE (VEX_LEN_F2_P_2
) },
4008 { "(bad)", { XX
} },
4013 { "(bad)", { XX
} },
4014 { "(bad)", { XX
} },
4015 { VEX_LEN_TABLE (VEX_LEN_F3_P_2
) },
4016 { "(bad)", { XX
} },
4021 { "(bad)", { XX
} },
4022 { "(bad)", { XX
} },
4023 { VEX_LEN_TABLE (VEX_LEN_F4_P_2
) },
4024 { "(bad)", { XX
} },
4029 { "(bad)", { XX
} },
4030 { "(bad)", { XX
} },
4031 { VEX_LEN_TABLE (VEX_LEN_F5_P_2
) },
4032 { "(bad)", { XX
} },
4037 { "(bad)", { XX
} },
4038 { "(bad)", { XX
} },
4039 { VEX_LEN_TABLE (VEX_LEN_F6_P_2
) },
4040 { "(bad)", { XX
} },
4045 { "(bad)", { XX
} },
4046 { "(bad)", { XX
} },
4047 { VEX_LEN_TABLE (VEX_LEN_F7_P_2
) },
4048 { "(bad)", { XX
} },
4053 { "(bad)", { XX
} },
4054 { "(bad)", { XX
} },
4055 { VEX_LEN_TABLE (VEX_LEN_F8_P_2
) },
4056 { "(bad)", { XX
} },
4061 { "(bad)", { XX
} },
4062 { "(bad)", { XX
} },
4063 { VEX_LEN_TABLE (VEX_LEN_F9_P_2
) },
4064 { "(bad)", { XX
} },
4069 { "(bad)", { XX
} },
4070 { "(bad)", { XX
} },
4071 { VEX_LEN_TABLE (VEX_LEN_FA_P_2
) },
4072 { "(bad)", { XX
} },
4077 { "(bad)", { XX
} },
4078 { "(bad)", { XX
} },
4079 { VEX_LEN_TABLE (VEX_LEN_FB_P_2
) },
4080 { "(bad)", { XX
} },
4085 { "(bad)", { XX
} },
4086 { "(bad)", { XX
} },
4087 { VEX_LEN_TABLE (VEX_LEN_FC_P_2
) },
4088 { "(bad)", { XX
} },
4093 { "(bad)", { XX
} },
4094 { "(bad)", { XX
} },
4095 { VEX_LEN_TABLE (VEX_LEN_FD_P_2
) },
4096 { "(bad)", { XX
} },
4101 { "(bad)", { XX
} },
4102 { "(bad)", { XX
} },
4103 { VEX_LEN_TABLE (VEX_LEN_FE_P_2
) },
4104 { "(bad)", { XX
} },
4107 /* PREFIX_VEX_3800 */
4109 { "(bad)", { XX
} },
4110 { "(bad)", { XX
} },
4111 { VEX_LEN_TABLE (VEX_LEN_3800_P_2
) },
4112 { "(bad)", { XX
} },
4115 /* PREFIX_VEX_3801 */
4117 { "(bad)", { XX
} },
4118 { "(bad)", { XX
} },
4119 { VEX_LEN_TABLE (VEX_LEN_3801_P_2
) },
4120 { "(bad)", { XX
} },
4123 /* PREFIX_VEX_3802 */
4125 { "(bad)", { XX
} },
4126 { "(bad)", { XX
} },
4127 { VEX_LEN_TABLE (VEX_LEN_3802_P_2
) },
4128 { "(bad)", { XX
} },
4131 /* PREFIX_VEX_3803 */
4133 { "(bad)", { XX
} },
4134 { "(bad)", { XX
} },
4135 { VEX_LEN_TABLE (VEX_LEN_3803_P_2
) },
4136 { "(bad)", { XX
} },
4139 /* PREFIX_VEX_3804 */
4141 { "(bad)", { XX
} },
4142 { "(bad)", { XX
} },
4143 { VEX_LEN_TABLE (VEX_LEN_3804_P_2
) },
4144 { "(bad)", { XX
} },
4147 /* PREFIX_VEX_3805 */
4149 { "(bad)", { XX
} },
4150 { "(bad)", { XX
} },
4151 { VEX_LEN_TABLE (VEX_LEN_3805_P_2
) },
4152 { "(bad)", { XX
} },
4155 /* PREFIX_VEX_3806 */
4157 { "(bad)", { XX
} },
4158 { "(bad)", { XX
} },
4159 { VEX_LEN_TABLE (VEX_LEN_3806_P_2
) },
4160 { "(bad)", { XX
} },
4163 /* PREFIX_VEX_3807 */
4165 { "(bad)", { XX
} },
4166 { "(bad)", { XX
} },
4167 { VEX_LEN_TABLE (VEX_LEN_3807_P_2
) },
4168 { "(bad)", { XX
} },
4171 /* PREFIX_VEX_3808 */
4173 { "(bad)", { XX
} },
4174 { "(bad)", { XX
} },
4175 { VEX_LEN_TABLE (VEX_LEN_3808_P_2
) },
4176 { "(bad)", { XX
} },
4179 /* PREFIX_VEX_3809 */
4181 { "(bad)", { XX
} },
4182 { "(bad)", { XX
} },
4183 { VEX_LEN_TABLE (VEX_LEN_3809_P_2
) },
4184 { "(bad)", { XX
} },
4187 /* PREFIX_VEX_380A */
4189 { "(bad)", { XX
} },
4190 { "(bad)", { XX
} },
4191 { VEX_LEN_TABLE (VEX_LEN_380A_P_2
) },
4192 { "(bad)", { XX
} },
4195 /* PREFIX_VEX_380B */
4197 { "(bad)", { XX
} },
4198 { "(bad)", { XX
} },
4199 { VEX_LEN_TABLE (VEX_LEN_380B_P_2
) },
4200 { "(bad)", { XX
} },
4203 /* PREFIX_VEX_380C */
4205 { "(bad)", { XX
} },
4206 { "(bad)", { XX
} },
4207 { "vpermilps", { XM
, Vex
, EXx
} },
4208 { "(bad)", { XX
} },
4211 /* PREFIX_VEX_380D */
4213 { "(bad)", { XX
} },
4214 { "(bad)", { XX
} },
4215 { "vpermilpd", { XM
, Vex
, EXx
} },
4216 { "(bad)", { XX
} },
4219 /* PREFIX_VEX_380E */
4221 { "(bad)", { XX
} },
4222 { "(bad)", { XX
} },
4223 { "vtestps", { XM
, EXx
} },
4224 { "(bad)", { XX
} },
4227 /* PREFIX_VEX_380F */
4229 { "(bad)", { XX
} },
4230 { "(bad)", { XX
} },
4231 { "vtestpd", { XM
, EXx
} },
4232 { "(bad)", { XX
} },
4235 /* PREFIX_VEX_3817 */
4237 { "(bad)", { XX
} },
4238 { "(bad)", { XX
} },
4239 { "vptest", { XM
, EXx
} },
4240 { "(bad)", { XX
} },
4243 /* PREFIX_VEX_3818 */
4245 { "(bad)", { XX
} },
4246 { "(bad)", { XX
} },
4247 { MOD_TABLE (MOD_VEX_3818_PREFIX_2
) },
4248 { "(bad)", { XX
} },
4251 /* PREFIX_VEX_3819 */
4253 { "(bad)", { XX
} },
4254 { "(bad)", { XX
} },
4255 { MOD_TABLE (MOD_VEX_3819_PREFIX_2
) },
4256 { "(bad)", { XX
} },
4259 /* PREFIX_VEX_381A */
4261 { "(bad)", { XX
} },
4262 { "(bad)", { XX
} },
4263 { MOD_TABLE (MOD_VEX_381A_PREFIX_2
) },
4264 { "(bad)", { XX
} },
4267 /* PREFIX_VEX_381C */
4269 { "(bad)", { XX
} },
4270 { "(bad)", { XX
} },
4271 { VEX_LEN_TABLE (VEX_LEN_381C_P_2
) },
4272 { "(bad)", { XX
} },
4275 /* PREFIX_VEX_381D */
4277 { "(bad)", { XX
} },
4278 { "(bad)", { XX
} },
4279 { VEX_LEN_TABLE (VEX_LEN_381D_P_2
) },
4280 { "(bad)", { XX
} },
4283 /* PREFIX_VEX_381E */
4285 { "(bad)", { XX
} },
4286 { "(bad)", { XX
} },
4287 { VEX_LEN_TABLE (VEX_LEN_381E_P_2
) },
4288 { "(bad)", { XX
} },
4291 /* PREFIX_VEX_3820 */
4293 { "(bad)", { XX
} },
4294 { "(bad)", { XX
} },
4295 { VEX_LEN_TABLE (VEX_LEN_3820_P_2
) },
4296 { "(bad)", { XX
} },
4299 /* PREFIX_VEX_3821 */
4301 { "(bad)", { XX
} },
4302 { "(bad)", { XX
} },
4303 { VEX_LEN_TABLE (VEX_LEN_3821_P_2
) },
4304 { "(bad)", { XX
} },
4307 /* PREFIX_VEX_3822 */
4309 { "(bad)", { XX
} },
4310 { "(bad)", { XX
} },
4311 { VEX_LEN_TABLE (VEX_LEN_3822_P_2
) },
4312 { "(bad)", { XX
} },
4315 /* PREFIX_VEX_3823 */
4317 { "(bad)", { XX
} },
4318 { "(bad)", { XX
} },
4319 { VEX_LEN_TABLE (VEX_LEN_3823_P_2
) },
4320 { "(bad)", { XX
} },
4323 /* PREFIX_VEX_3824 */
4325 { "(bad)", { XX
} },
4326 { "(bad)", { XX
} },
4327 { VEX_LEN_TABLE (VEX_LEN_3824_P_2
) },
4328 { "(bad)", { XX
} },
4331 /* PREFIX_VEX_3825 */
4333 { "(bad)", { XX
} },
4334 { "(bad)", { XX
} },
4335 { VEX_LEN_TABLE (VEX_LEN_3825_P_2
) },
4336 { "(bad)", { XX
} },
4339 /* PREFIX_VEX_3828 */
4341 { "(bad)", { XX
} },
4342 { "(bad)", { XX
} },
4343 { VEX_LEN_TABLE (VEX_LEN_3828_P_2
) },
4344 { "(bad)", { XX
} },
4347 /* PREFIX_VEX_3829 */
4349 { "(bad)", { XX
} },
4350 { "(bad)", { XX
} },
4351 { VEX_LEN_TABLE (VEX_LEN_3829_P_2
) },
4352 { "(bad)", { XX
} },
4355 /* PREFIX_VEX_382A */
4357 { "(bad)", { XX
} },
4358 { "(bad)", { XX
} },
4359 { MOD_TABLE (MOD_VEX_382A_PREFIX_2
) },
4360 { "(bad)", { XX
} },
4363 /* PREFIX_VEX_382B */
4365 { "(bad)", { XX
} },
4366 { "(bad)", { XX
} },
4367 { VEX_LEN_TABLE (VEX_LEN_382B_P_2
) },
4368 { "(bad)", { XX
} },
4371 /* PREFIX_VEX_382C */
4373 { "(bad)", { XX
} },
4374 { "(bad)", { XX
} },
4375 { MOD_TABLE (MOD_VEX_382C_PREFIX_2
) },
4376 { "(bad)", { XX
} },
4379 /* PREFIX_VEX_382D */
4381 { "(bad)", { XX
} },
4382 { "(bad)", { XX
} },
4383 { MOD_TABLE (MOD_VEX_382D_PREFIX_2
) },
4384 { "(bad)", { XX
} },
4387 /* PREFIX_VEX_382E */
4389 { "(bad)", { XX
} },
4390 { "(bad)", { XX
} },
4391 { MOD_TABLE (MOD_VEX_382E_PREFIX_2
) },
4392 { "(bad)", { XX
} },
4395 /* PREFIX_VEX_382F */
4397 { "(bad)", { XX
} },
4398 { "(bad)", { XX
} },
4399 { MOD_TABLE (MOD_VEX_382F_PREFIX_2
) },
4400 { "(bad)", { XX
} },
4403 /* PREFIX_VEX_3830 */
4405 { "(bad)", { XX
} },
4406 { "(bad)", { XX
} },
4407 { VEX_LEN_TABLE (VEX_LEN_3830_P_2
) },
4408 { "(bad)", { XX
} },
4411 /* PREFIX_VEX_3831 */
4413 { "(bad)", { XX
} },
4414 { "(bad)", { XX
} },
4415 { VEX_LEN_TABLE (VEX_LEN_3831_P_2
) },
4416 { "(bad)", { XX
} },
4419 /* PREFIX_VEX_3832 */
4421 { "(bad)", { XX
} },
4422 { "(bad)", { XX
} },
4423 { VEX_LEN_TABLE (VEX_LEN_3832_P_2
) },
4424 { "(bad)", { XX
} },
4427 /* PREFIX_VEX_3833 */
4429 { "(bad)", { XX
} },
4430 { "(bad)", { XX
} },
4431 { VEX_LEN_TABLE (VEX_LEN_3833_P_2
) },
4432 { "(bad)", { XX
} },
4435 /* PREFIX_VEX_3834 */
4437 { "(bad)", { XX
} },
4438 { "(bad)", { XX
} },
4439 { VEX_LEN_TABLE (VEX_LEN_3834_P_2
) },
4440 { "(bad)", { XX
} },
4443 /* PREFIX_VEX_3835 */
4445 { "(bad)", { XX
} },
4446 { "(bad)", { XX
} },
4447 { VEX_LEN_TABLE (VEX_LEN_3835_P_2
) },
4448 { "(bad)", { XX
} },
4451 /* PREFIX_VEX_3837 */
4453 { "(bad)", { XX
} },
4454 { "(bad)", { XX
} },
4455 { VEX_LEN_TABLE (VEX_LEN_3837_P_2
) },
4456 { "(bad)", { XX
} },
4459 /* PREFIX_VEX_3838 */
4461 { "(bad)", { XX
} },
4462 { "(bad)", { XX
} },
4463 { VEX_LEN_TABLE (VEX_LEN_3838_P_2
) },
4464 { "(bad)", { XX
} },
4467 /* PREFIX_VEX_3839 */
4469 { "(bad)", { XX
} },
4470 { "(bad)", { XX
} },
4471 { VEX_LEN_TABLE (VEX_LEN_3839_P_2
) },
4472 { "(bad)", { XX
} },
4475 /* PREFIX_VEX_383A */
4477 { "(bad)", { XX
} },
4478 { "(bad)", { XX
} },
4479 { VEX_LEN_TABLE (VEX_LEN_383A_P_2
) },
4480 { "(bad)", { XX
} },
4483 /* PREFIX_VEX_383B */
4485 { "(bad)", { XX
} },
4486 { "(bad)", { XX
} },
4487 { VEX_LEN_TABLE (VEX_LEN_383B_P_2
) },
4488 { "(bad)", { XX
} },
4491 /* PREFIX_VEX_383C */
4493 { "(bad)", { XX
} },
4494 { "(bad)", { XX
} },
4495 { VEX_LEN_TABLE (VEX_LEN_383C_P_2
) },
4496 { "(bad)", { XX
} },
4499 /* PREFIX_VEX_383D */
4501 { "(bad)", { XX
} },
4502 { "(bad)", { XX
} },
4503 { VEX_LEN_TABLE (VEX_LEN_383D_P_2
) },
4504 { "(bad)", { XX
} },
4507 /* PREFIX_VEX_383E */
4509 { "(bad)", { XX
} },
4510 { "(bad)", { XX
} },
4511 { VEX_LEN_TABLE (VEX_LEN_383E_P_2
) },
4512 { "(bad)", { XX
} },
4515 /* PREFIX_VEX_383F */
4517 { "(bad)", { XX
} },
4518 { "(bad)", { XX
} },
4519 { VEX_LEN_TABLE (VEX_LEN_383F_P_2
) },
4520 { "(bad)", { XX
} },
4523 /* PREFIX_VEX_3840 */
4525 { "(bad)", { XX
} },
4526 { "(bad)", { XX
} },
4527 { VEX_LEN_TABLE (VEX_LEN_3840_P_2
) },
4528 { "(bad)", { XX
} },
4531 /* PREFIX_VEX_3841 */
4533 { "(bad)", { XX
} },
4534 { "(bad)", { XX
} },
4535 { VEX_LEN_TABLE (VEX_LEN_3841_P_2
) },
4536 { "(bad)", { XX
} },
4539 /* PREFIX_VEX_3A04 */
4541 { "(bad)", { XX
} },
4542 { "(bad)", { XX
} },
4543 { "vpermilps", { XM
, EXx
, Ib
} },
4544 { "(bad)", { XX
} },
4547 /* PREFIX_VEX_3A05 */
4549 { "(bad)", { XX
} },
4550 { "(bad)", { XX
} },
4551 { "vpermilpd", { XM
, EXx
, Ib
} },
4552 { "(bad)", { XX
} },
4555 /* PREFIX_VEX_3A06 */
4557 { "(bad)", { XX
} },
4558 { "(bad)", { XX
} },
4559 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2
) },
4560 { "(bad)", { XX
} },
4563 /* PREFIX_VEX_3A08 */
4565 { "(bad)", { XX
} },
4566 { "(bad)", { XX
} },
4567 { "vroundps", { XM
, EXx
, Ib
} },
4568 { "(bad)", { XX
} },
4571 /* PREFIX_VEX_3A09 */
4573 { "(bad)", { XX
} },
4574 { "(bad)", { XX
} },
4575 { "vroundpd", { XM
, EXx
, Ib
} },
4576 { "(bad)", { XX
} },
4579 /* PREFIX_VEX_3A0A */
4581 { "(bad)", { XX
} },
4582 { "(bad)", { XX
} },
4583 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2
) },
4584 { "(bad)", { XX
} },
4587 /* PREFIX_VEX_3A0B */
4589 { "(bad)", { XX
} },
4590 { "(bad)", { XX
} },
4591 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2
) },
4592 { "(bad)", { XX
} },
4595 /* PREFIX_VEX_3A0C */
4597 { "(bad)", { XX
} },
4598 { "(bad)", { XX
} },
4599 { "vblendps", { XM
, Vex
, EXx
, Ib
} },
4600 { "(bad)", { XX
} },
4603 /* PREFIX_VEX_3A0D */
4605 { "(bad)", { XX
} },
4606 { "(bad)", { XX
} },
4607 { "vblendpd", { XM
, Vex
, EXx
, Ib
} },
4608 { "(bad)", { XX
} },
4611 /* PREFIX_VEX_3A0E */
4613 { "(bad)", { XX
} },
4614 { "(bad)", { XX
} },
4615 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2
) },
4616 { "(bad)", { XX
} },
4619 /* PREFIX_VEX_3A0F */
4621 { "(bad)", { XX
} },
4622 { "(bad)", { XX
} },
4623 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2
) },
4624 { "(bad)", { XX
} },
4627 /* PREFIX_VEX_3A14 */
4629 { "(bad)", { XX
} },
4630 { "(bad)", { XX
} },
4631 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2
) },
4632 { "(bad)", { XX
} },
4635 /* PREFIX_VEX_3A15 */
4637 { "(bad)", { XX
} },
4638 { "(bad)", { XX
} },
4639 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2
) },
4640 { "(bad)", { XX
} },
4643 /* PREFIX_VEX_3A16 */
4645 { "(bad)", { XX
} },
4646 { "(bad)", { XX
} },
4647 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2
) },
4648 { "(bad)", { XX
} },
4651 /* PREFIX_VEX_3A17 */
4653 { "(bad)", { XX
} },
4654 { "(bad)", { XX
} },
4655 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2
) },
4656 { "(bad)", { XX
} },
4659 /* PREFIX_VEX_3A18 */
4661 { "(bad)", { XX
} },
4662 { "(bad)", { XX
} },
4663 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2
) },
4664 { "(bad)", { XX
} },
4667 /* PREFIX_VEX_3A19 */
4669 { "(bad)", { XX
} },
4670 { "(bad)", { XX
} },
4671 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2
) },
4672 { "(bad)", { XX
} },
4675 /* PREFIX_VEX_3A20 */
4677 { "(bad)", { XX
} },
4678 { "(bad)", { XX
} },
4679 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2
) },
4680 { "(bad)", { XX
} },
4683 /* PREFIX_VEX_3A21 */
4685 { "(bad)", { XX
} },
4686 { "(bad)", { XX
} },
4687 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2
) },
4688 { "(bad)", { XX
} },
4691 /* PREFIX_VEX_3A22 */
4693 { "(bad)", { XX
} },
4694 { "(bad)", { XX
} },
4695 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2
) },
4696 { "(bad)", { XX
} },
4699 /* PREFIX_VEX_3A40 */
4701 { "(bad)", { XX
} },
4702 { "(bad)", { XX
} },
4703 { "vdpps", { XM
, Vex
, EXx
, Ib
} },
4704 { "(bad)", { XX
} },
4707 /* PREFIX_VEX_3A41 */
4709 { "(bad)", { XX
} },
4710 { "(bad)", { XX
} },
4711 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2
) },
4712 { "(bad)", { XX
} },
4715 /* PREFIX_VEX_3A42 */
4717 { "(bad)", { XX
} },
4718 { "(bad)", { XX
} },
4719 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2
) },
4720 { "(bad)", { XX
} },
4723 /* PREFIX_VEX_3A48 */
4725 { "(bad)", { XX
} },
4726 { "(bad)", { XX
} },
4727 { "vpermil2ps", { XMVexW
, Vex
, EXVexImmW
, EXVexImmW
, VPERMIL2
} },
4728 { "(bad)", { XX
} },
4731 /* PREFIX_VEX_3A49 */
4733 { "(bad)", { XX
} },
4734 { "(bad)", { XX
} },
4735 { "vpermil2pd", { XMVexW
, Vex
, EXVexImmW
, EXVexImmW
, VPERMIL2
} },
4736 { "(bad)", { XX
} },
4739 /* PREFIX_VEX_3A4A */
4741 { "(bad)", { XX
} },
4742 { "(bad)", { XX
} },
4743 { "vblendvps", { XM
, Vex
, EXx
, XMVexI4
} },
4744 { "(bad)", { XX
} },
4747 /* PREFIX_VEX_3A4B */
4749 { "(bad)", { XX
} },
4750 { "(bad)", { XX
} },
4751 { "vblendvpd", { XM
, Vex
, EXx
, XMVexI4
} },
4752 { "(bad)", { XX
} },
4755 /* PREFIX_VEX_3A4C */
4757 { "(bad)", { XX
} },
4758 { "(bad)", { XX
} },
4759 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2
) },
4760 { "(bad)", { XX
} },
4763 /* PREFIX_VEX_3A5C */
4765 { "(bad)", { XX
} },
4766 { "(bad)", { XX
} },
4767 { "vfmaddsubps", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4768 { "(bad)", { XX
} },
4771 /* PREFIX_VEX_3A5D */
4773 { "(bad)", { XX
} },
4774 { "(bad)", { XX
} },
4775 { "vfmaddsubpd", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4776 { "(bad)", { XX
} },
4779 /* PREFIX_VEX_3A5E */
4781 { "(bad)", { XX
} },
4782 { "(bad)", { XX
} },
4783 { "vfmsubaddps", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4784 { "(bad)", { XX
} },
4787 /* PREFIX_VEX_3A5F */
4789 { "(bad)", { XX
} },
4790 { "(bad)", { XX
} },
4791 { "vfmsubaddpd", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4792 { "(bad)", { XX
} },
4795 /* PREFIX_VEX_3A60 */
4797 { "(bad)", { XX
} },
4798 { "(bad)", { XX
} },
4799 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2
) },
4800 { "(bad)", { XX
} },
4803 /* PREFIX_VEX_3A61 */
4805 { "(bad)", { XX
} },
4806 { "(bad)", { XX
} },
4807 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2
) },
4808 { "(bad)", { XX
} },
4811 /* PREFIX_VEX_3A62 */
4813 { "(bad)", { XX
} },
4814 { "(bad)", { XX
} },
4815 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2
) },
4816 { "(bad)", { XX
} },
4819 /* PREFIX_VEX_3A63 */
4821 { "(bad)", { XX
} },
4822 { "(bad)", { XX
} },
4823 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2
) },
4824 { "(bad)", { XX
} },
4827 /* PREFIX_VEX_3A68 */
4829 { "(bad)", { XX
} },
4830 { "(bad)", { XX
} },
4831 { "vfmaddps", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4832 { "(bad)", { XX
} },
4835 /* PREFIX_VEX_3A69 */
4837 { "(bad)", { XX
} },
4838 { "(bad)", { XX
} },
4839 { "vfmaddpd", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4840 { "(bad)", { XX
} },
4843 /* PREFIX_VEX_3A6A */
4845 { "(bad)", { XX
} },
4846 { "(bad)", { XX
} },
4847 { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2
) },
4848 { "(bad)", { XX
} },
4851 /* PREFIX_VEX_3A6B */
4853 { "(bad)", { XX
} },
4854 { "(bad)", { XX
} },
4855 { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2
) },
4856 { "(bad)", { XX
} },
4859 /* PREFIX_VEX_3A6C */
4861 { "(bad)", { XX
} },
4862 { "(bad)", { XX
} },
4863 { "vfmsubps", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4864 { "(bad)", { XX
} },
4867 /* PREFIX_VEX_3A6D */
4869 { "(bad)", { XX
} },
4870 { "(bad)", { XX
} },
4871 { "vfmsubpd", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4872 { "(bad)", { XX
} },
4875 /* PREFIX_VEX_3A6E */
4877 { "(bad)", { XX
} },
4878 { "(bad)", { XX
} },
4879 { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2
) },
4880 { "(bad)", { XX
} },
4883 /* PREFIX_VEX_3A6F */
4885 { "(bad)", { XX
} },
4886 { "(bad)", { XX
} },
4887 { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2
) },
4888 { "(bad)", { XX
} },
4891 /* PREFIX_VEX_3A78 */
4893 { "(bad)", { XX
} },
4894 { "(bad)", { XX
} },
4895 { "vfnmaddps", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4896 { "(bad)", { XX
} },
4899 /* PREFIX_VEX_3A79 */
4901 { "(bad)", { XX
} },
4902 { "(bad)", { XX
} },
4903 { "vfnmaddpd", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4904 { "(bad)", { XX
} },
4907 /* PREFIX_VEX_3A7A */
4909 { "(bad)", { XX
} },
4910 { "(bad)", { XX
} },
4911 { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2
) },
4912 { "(bad)", { XX
} },
4915 /* PREFIX_VEX_3A7B */
4917 { "(bad)", { XX
} },
4918 { "(bad)", { XX
} },
4919 { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2
) },
4920 { "(bad)", { XX
} },
4923 /* PREFIX_VEX_3A7C */
4925 { "(bad)", { XX
} },
4926 { "(bad)", { XX
} },
4927 { "vfnmsubps", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4928 { "(bad)", { XX
} },
4931 /* PREFIX_VEX_3A7D */
4933 { "(bad)", { XX
} },
4934 { "(bad)", { XX
} },
4935 { "vfnmsubpd", { XMVexW
, VexFMA
, EXVexW
, EXVexW
, VexI4
} },
4936 { "(bad)", { XX
} },
4939 /* PREFIX_VEX_3A7E */
4941 { "(bad)", { XX
} },
4942 { "(bad)", { XX
} },
4943 { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2
) },
4944 { "(bad)", { XX
} },
4947 /* PREFIX_VEX_3A7F */
4949 { "(bad)", { XX
} },
4950 { "(bad)", { XX
} },
4951 { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2
) },
4952 { "(bad)", { XX
} },
4956 static const struct dis386 x86_64_table
[][2] = {
4959 { "push{T|}", { es
} },
4960 { "(bad)", { XX
} },
4965 { "pop{T|}", { es
} },
4966 { "(bad)", { XX
} },
4971 { "push{T|}", { cs
} },
4972 { "(bad)", { XX
} },
4977 { "push{T|}", { ss
} },
4978 { "(bad)", { XX
} },
4983 { "pop{T|}", { ss
} },
4984 { "(bad)", { XX
} },
4989 { "push{T|}", { ds
} },
4990 { "(bad)", { XX
} },
4995 { "pop{T|}", { ds
} },
4996 { "(bad)", { XX
} },
5002 { "(bad)", { XX
} },
5008 { "(bad)", { XX
} },
5014 { "(bad)", { XX
} },
5020 { "(bad)", { XX
} },
5025 { "pusha{P|}", { XX
} },
5026 { "(bad)", { XX
} },
5031 { "popa{P|}", { XX
} },
5032 { "(bad)", { XX
} },
5037 { MOD_TABLE (MOD_62_32BIT
) },
5038 { "(bad)", { XX
} },
5043 { "arpl", { Ew
, Gw
} },
5044 { "movs{lq|xd}", { Gv
, Ed
} },
5049 { "ins{R|}", { Yzr
, indirDX
} },
5050 { "ins{G|}", { Yzr
, indirDX
} },
5055 { "outs{R|}", { indirDXr
, Xz
} },
5056 { "outs{G|}", { indirDXr
, Xz
} },
5061 { "Jcall{T|}", { Ap
} },
5062 { "(bad)", { XX
} },
5067 { MOD_TABLE (MOD_C4_32BIT
) },
5068 { VEX_C4_TABLE (VEX_0F
) },
5073 { MOD_TABLE (MOD_C5_32BIT
) },
5074 { VEX_C5_TABLE (VEX_0F
) },
5080 { "(bad)", { XX
} },
5086 { "(bad)", { XX
} },
5092 { "(bad)", { XX
} },
5097 { "Jjmp{T|}", { Ap
} },
5098 { "(bad)", { XX
} },
5101 /* X86_64_0F01_REG_0 */
5103 { "sgdt{Q|IQ}", { M
} },
5107 /* X86_64_0F01_REG_1 */
5109 { "sidt{Q|IQ}", { M
} },
5113 /* X86_64_0F01_REG_2 */
5115 { "lgdt{Q|Q}", { M
} },
5119 /* X86_64_0F01_REG_3 */
5121 { "lidt{Q|Q}", { M
} },
5126 static const struct dis386 three_byte_table
[][256] = {
5127 /* THREE_BYTE_0F24 */
5130 { "fmaddps", { { OP_DREX4
, q_mode
} } },
5131 { "fmaddpd", { { OP_DREX4
, q_mode
} } },
5132 { "fmaddss", { { OP_DREX4
, w_mode
} } },
5133 { "fmaddsd", { { OP_DREX4
, d_mode
} } },
5134 { "fmaddps", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5135 { "fmaddpd", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5136 { "fmaddss", { { OP_DREX4
, DREX_OC1
+ w_mode
} } },
5137 { "fmaddsd", { { OP_DREX4
, DREX_OC1
+ d_mode
} } },
5139 { "fmsubps", { { OP_DREX4
, q_mode
} } },
5140 { "fmsubpd", { { OP_DREX4
, q_mode
} } },
5141 { "fmsubss", { { OP_DREX4
, w_mode
} } },
5142 { "fmsubsd", { { OP_DREX4
, d_mode
} } },
5143 { "fmsubps", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5144 { "fmsubpd", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5145 { "fmsubss", { { OP_DREX4
, DREX_OC1
+ w_mode
} } },
5146 { "fmsubsd", { { OP_DREX4
, DREX_OC1
+ d_mode
} } },
5148 { "fnmaddps", { { OP_DREX4
, q_mode
} } },
5149 { "fnmaddpd", { { OP_DREX4
, q_mode
} } },
5150 { "fnmaddss", { { OP_DREX4
, w_mode
} } },
5151 { "fnmaddsd", { { OP_DREX4
, d_mode
} } },
5152 { "fnmaddps", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5153 { "fnmaddpd", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5154 { "fnmaddss", { { OP_DREX4
, DREX_OC1
+ w_mode
} } },
5155 { "fnmaddsd", { { OP_DREX4
, DREX_OC1
+ d_mode
} } },
5157 { "fnmsubps", { { OP_DREX4
, q_mode
} } },
5158 { "fnmsubpd", { { OP_DREX4
, q_mode
} } },
5159 { "fnmsubss", { { OP_DREX4
, w_mode
} } },
5160 { "fnmsubsd", { { OP_DREX4
, d_mode
} } },
5161 { "fnmsubps", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5162 { "fnmsubpd", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5163 { "fnmsubss", { { OP_DREX4
, DREX_OC1
+ w_mode
} } },
5164 { "fnmsubsd", { { OP_DREX4
, DREX_OC1
+ d_mode
} } },
5166 { "permps", { { OP_DREX4
, q_mode
} } },
5167 { "permpd", { { OP_DREX4
, q_mode
} } },
5168 { "pcmov", { { OP_DREX4
, q_mode
} } },
5169 { "pperm", { { OP_DREX4
, q_mode
} } },
5170 { "permps", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5171 { "permpd", { { OP_DREX4
, DREX_OC1
+ q_mode
} } },
5172 { "pcmov", { { OP_DREX4
, DREX_OC1
+ w_mode
} } },
5173 { "pperm", { { OP_DREX4
, DREX_OC1
+ d_mode
} } },
5175 { "(bad)", { XX
} },
5176 { "(bad)", { XX
} },
5177 { "(bad)", { XX
} },
5178 { "(bad)", { XX
} },
5179 { "(bad)", { XX
} },
5180 { "(bad)", { XX
} },
5181 { "(bad)", { XX
} },
5182 { "(bad)", { XX
} },
5184 { "(bad)", { XX
} },
5185 { "(bad)", { XX
} },
5186 { "(bad)", { XX
} },
5187 { "(bad)", { XX
} },
5188 { "(bad)", { XX
} },
5189 { "(bad)", { XX
} },
5190 { "(bad)", { XX
} },
5191 { "(bad)", { XX
} },
5193 { "(bad)", { XX
} },
5194 { "(bad)", { XX
} },
5195 { "(bad)", { XX
} },
5196 { "(bad)", { XX
} },
5197 { "(bad)", { XX
} },
5198 { "(bad)", { XX
} },
5199 { "(bad)", { XX
} },
5200 { "(bad)", { XX
} },
5202 { "protb", { { OP_DREX3
, q_mode
} } },
5203 { "protw", { { OP_DREX3
, q_mode
} } },
5204 { "protd", { { OP_DREX3
, q_mode
} } },
5205 { "protq", { { OP_DREX3
, q_mode
} } },
5206 { "pshlb", { { OP_DREX3
, q_mode
} } },
5207 { "pshlw", { { OP_DREX3
, q_mode
} } },
5208 { "pshld", { { OP_DREX3
, q_mode
} } },
5209 { "pshlq", { { OP_DREX3
, q_mode
} } },
5211 { "pshab", { { OP_DREX3
, q_mode
} } },
5212 { "pshaw", { { OP_DREX3
, q_mode
} } },
5213 { "pshad", { { OP_DREX3
, q_mode
} } },
5214 { "pshaq", { { OP_DREX3
, q_mode
} } },
5215 { "(bad)", { XX
} },
5216 { "(bad)", { XX
} },
5217 { "(bad)", { XX
} },
5218 { "(bad)", { XX
} },
5220 { "(bad)", { XX
} },
5221 { "(bad)", { XX
} },
5222 { "(bad)", { XX
} },
5223 { "(bad)", { XX
} },
5224 { "(bad)", { XX
} },
5225 { "(bad)", { XX
} },
5226 { "(bad)", { XX
} },
5227 { "(bad)", { XX
} },
5229 { "(bad)", { XX
} },
5230 { "(bad)", { XX
} },
5231 { "(bad)", { XX
} },
5232 { "(bad)", { XX
} },
5233 { "(bad)", { XX
} },
5234 { "(bad)", { XX
} },
5235 { "(bad)", { XX
} },
5236 { "(bad)", { XX
} },
5238 { "(bad)", { XX
} },
5239 { "(bad)", { XX
} },
5240 { "(bad)", { XX
} },
5241 { "(bad)", { XX
} },
5242 { "(bad)", { XX
} },
5243 { "(bad)", { XX
} },
5244 { "(bad)", { XX
} },
5245 { "(bad)", { XX
} },
5247 { "(bad)", { XX
} },
5248 { "(bad)", { XX
} },
5249 { "(bad)", { XX
} },
5250 { "(bad)", { XX
} },
5251 { "(bad)", { XX
} },
5252 { "(bad)", { XX
} },
5253 { "(bad)", { XX
} },
5254 { "(bad)", { XX
} },
5256 { "(bad)", { XX
} },
5257 { "(bad)", { XX
} },
5258 { "(bad)", { XX
} },
5259 { "(bad)", { XX
} },
5260 { "(bad)", { XX
} },
5261 { "(bad)", { XX
} },
5262 { "(bad)", { XX
} },
5263 { "(bad)", { XX
} },
5265 { "(bad)", { XX
} },
5266 { "(bad)", { XX
} },
5267 { "(bad)", { XX
} },
5268 { "(bad)", { XX
} },
5269 { "(bad)", { XX
} },
5270 { "(bad)", { XX
} },
5271 { "(bad)", { XX
} },
5272 { "(bad)", { XX
} },
5274 { "(bad)", { XX
} },
5275 { "(bad)", { XX
} },
5276 { "(bad)", { XX
} },
5277 { "(bad)", { XX
} },
5278 { "(bad)", { XX
} },
5279 { "pmacssww", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5280 { "pmacsswd", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5281 { "pmacssdql", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5283 { "(bad)", { XX
} },
5284 { "(bad)", { XX
} },
5285 { "(bad)", { XX
} },
5286 { "(bad)", { XX
} },
5287 { "(bad)", { XX
} },
5288 { "(bad)", { XX
} },
5289 { "pmacssdd", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5290 { "pmacssdqh", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5292 { "(bad)", { XX
} },
5293 { "(bad)", { XX
} },
5294 { "(bad)", { XX
} },
5295 { "(bad)", { XX
} },
5296 { "(bad)", { XX
} },
5297 { "pmacsww", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5298 { "pmacswd", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5299 { "pmacsdql", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5301 { "(bad)", { XX
} },
5302 { "(bad)", { XX
} },
5303 { "(bad)", { XX
} },
5304 { "(bad)", { XX
} },
5305 { "(bad)", { XX
} },
5306 { "(bad)", { XX
} },
5307 { "pmacsdd", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5308 { "pmacsdqh", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5310 { "(bad)", { XX
} },
5311 { "(bad)", { XX
} },
5312 { "(bad)", { XX
} },
5313 { "(bad)", { XX
} },
5314 { "(bad)", { XX
} },
5315 { "(bad)", { XX
} },
5316 { "pmadcsswd", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5317 { "(bad)", { XX
} },
5319 { "(bad)", { XX
} },
5320 { "(bad)", { XX
} },
5321 { "(bad)", { XX
} },
5322 { "(bad)", { XX
} },
5323 { "(bad)", { XX
} },
5324 { "(bad)", { XX
} },
5325 { "(bad)", { XX
} },
5326 { "(bad)", { XX
} },
5328 { "(bad)", { XX
} },
5329 { "(bad)", { XX
} },
5330 { "(bad)", { XX
} },
5331 { "(bad)", { XX
} },
5332 { "(bad)", { XX
} },
5333 { "(bad)", { XX
} },
5334 { "pmadcswd", { { OP_DREX4
, DREX_OC1
+ DREX_NO_OC0
+ q_mode
} } },
5335 { "(bad)", { XX
} },
5337 { "(bad)", { XX
} },
5338 { "(bad)", { XX
} },
5339 { "(bad)", { XX
} },
5340 { "(bad)", { XX
} },
5341 { "(bad)", { XX
} },
5342 { "(bad)", { XX
} },
5343 { "(bad)", { XX
} },
5344 { "(bad)", { XX
} },
5346 { "(bad)", { XX
} },
5347 { "(bad)", { XX
} },
5348 { "(bad)", { XX
} },
5349 { "(bad)", { XX
} },
5350 { "(bad)", { XX
} },
5351 { "(bad)", { XX
} },
5352 { "(bad)", { XX
} },
5353 { "(bad)", { XX
} },
5355 { "(bad)", { XX
} },
5356 { "(bad)", { XX
} },
5357 { "(bad)", { XX
} },
5358 { "(bad)", { XX
} },
5359 { "(bad)", { XX
} },
5360 { "(bad)", { XX
} },
5361 { "(bad)", { XX
} },
5362 { "(bad)", { XX
} },
5364 { "(bad)", { XX
} },
5365 { "(bad)", { XX
} },
5366 { "(bad)", { XX
} },
5367 { "(bad)", { XX
} },
5368 { "(bad)", { XX
} },
5369 { "(bad)", { XX
} },
5370 { "(bad)", { XX
} },
5371 { "(bad)", { XX
} },
5373 { "(bad)", { XX
} },
5374 { "(bad)", { XX
} },
5375 { "(bad)", { XX
} },
5376 { "(bad)", { XX
} },
5377 { "(bad)", { XX
} },
5378 { "(bad)", { XX
} },
5379 { "(bad)", { XX
} },
5380 { "(bad)", { XX
} },
5382 { "(bad)", { XX
} },
5383 { "(bad)", { XX
} },
5384 { "(bad)", { XX
} },
5385 { "(bad)", { XX
} },
5386 { "(bad)", { XX
} },
5387 { "(bad)", { XX
} },
5388 { "(bad)", { XX
} },
5389 { "(bad)", { XX
} },
5391 { "(bad)", { XX
} },
5392 { "(bad)", { XX
} },
5393 { "(bad)", { XX
} },
5394 { "(bad)", { XX
} },
5395 { "(bad)", { XX
} },
5396 { "(bad)", { XX
} },
5397 { "(bad)", { XX
} },
5398 { "(bad)", { XX
} },
5400 { "(bad)", { XX
} },
5401 { "(bad)", { XX
} },
5402 { "(bad)", { XX
} },
5403 { "(bad)", { XX
} },
5404 { "(bad)", { XX
} },
5405 { "(bad)", { XX
} },
5406 { "(bad)", { XX
} },
5407 { "(bad)", { XX
} },
5409 { "(bad)", { XX
} },
5410 { "(bad)", { XX
} },
5411 { "(bad)", { XX
} },
5412 { "(bad)", { XX
} },
5413 { "(bad)", { XX
} },
5414 { "(bad)", { XX
} },
5415 { "(bad)", { XX
} },
5416 { "(bad)", { XX
} },
5418 /* THREE_BYTE_0F25 */
5421 { "(bad)", { XX
} },
5422 { "(bad)", { XX
} },
5423 { "(bad)", { XX
} },
5424 { "(bad)", { XX
} },
5425 { "(bad)", { XX
} },
5426 { "(bad)", { XX
} },
5427 { "(bad)", { XX
} },
5428 { "(bad)", { XX
} },
5430 { "(bad)", { XX
} },
5431 { "(bad)", { XX
} },
5432 { "(bad)", { XX
} },
5433 { "(bad)", { XX
} },
5434 { "(bad)", { XX
} },
5435 { "(bad)", { XX
} },
5436 { "(bad)", { XX
} },
5437 { "(bad)", { XX
} },
5439 { "(bad)", { XX
} },
5440 { "(bad)", { XX
} },
5441 { "(bad)", { XX
} },
5442 { "(bad)", { XX
} },
5443 { "(bad)", { XX
} },
5444 { "(bad)", { XX
} },
5445 { "(bad)", { XX
} },
5446 { "(bad)", { XX
} },
5448 { "(bad)", { XX
} },
5449 { "(bad)", { XX
} },
5450 { "(bad)", { XX
} },
5451 { "(bad)", { XX
} },
5452 { "(bad)", { XX
} },
5453 { "(bad)", { XX
} },
5454 { "(bad)", { XX
} },
5455 { "(bad)", { XX
} },
5457 { "(bad)", { XX
} },
5458 { "(bad)", { XX
} },
5459 { "(bad)", { XX
} },
5460 { "(bad)", { XX
} },
5461 { "(bad)", { XX
} },
5462 { "(bad)", { XX
} },
5463 { "(bad)", { XX
} },
5464 { "(bad)", { XX
} },
5466 { "(bad)", { XX
} },
5467 { "(bad)", { XX
} },
5468 { "(bad)", { XX
} },
5469 { "(bad)", { XX
} },
5470 { "comps", { { OP_DREX3
, q_mode
}, { OP_DREX_FCMP
, b_mode
} } },
5471 { "compd", { { OP_DREX3
, q_mode
}, { OP_DREX_FCMP
, b_mode
} } },
5472 { "comss", { { OP_DREX3
, w_mode
}, { OP_DREX_FCMP
, b_mode
} } },
5473 { "comsd", { { OP_DREX3
, d_mode
}, { OP_DREX_FCMP
, b_mode
} } },
5475 { "(bad)", { XX
} },
5476 { "(bad)", { XX
} },
5477 { "(bad)", { XX
} },
5478 { "(bad)", { XX
} },
5479 { "(bad)", { XX
} },
5480 { "(bad)", { XX
} },
5481 { "(bad)", { XX
} },
5482 { "(bad)", { XX
} },
5484 { "(bad)", { XX
} },
5485 { "(bad)", { XX
} },
5486 { "(bad)", { XX
} },
5487 { "(bad)", { XX
} },
5488 { "(bad)", { XX
} },
5489 { "(bad)", { XX
} },
5490 { "(bad)", { XX
} },
5491 { "(bad)", { XX
} },
5493 { "(bad)", { XX
} },
5494 { "(bad)", { XX
} },
5495 { "(bad)", { XX
} },
5496 { "(bad)", { XX
} },
5497 { "(bad)", { XX
} },
5498 { "(bad)", { XX
} },
5499 { "(bad)", { XX
} },
5500 { "(bad)", { XX
} },
5502 { "(bad)", { XX
} },
5503 { "(bad)", { XX
} },
5504 { "(bad)", { XX
} },
5505 { "(bad)", { XX
} },
5506 { "pcomb", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5507 { "pcomw", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5508 { "pcomd", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5509 { "pcomq", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5511 { "(bad)", { XX
} },
5512 { "(bad)", { XX
} },
5513 { "(bad)", { XX
} },
5514 { "(bad)", { XX
} },
5515 { "(bad)", { XX
} },
5516 { "(bad)", { XX
} },
5517 { "(bad)", { XX
} },
5518 { "(bad)", { XX
} },
5520 { "(bad)", { XX
} },
5521 { "(bad)", { XX
} },
5522 { "(bad)", { XX
} },
5523 { "(bad)", { XX
} },
5524 { "(bad)", { XX
} },
5525 { "(bad)", { XX
} },
5526 { "(bad)", { XX
} },
5527 { "(bad)", { XX
} },
5529 { "(bad)", { XX
} },
5530 { "(bad)", { XX
} },
5531 { "(bad)", { XX
} },
5532 { "(bad)", { XX
} },
5533 { "(bad)", { XX
} },
5534 { "(bad)", { XX
} },
5535 { "(bad)", { XX
} },
5536 { "(bad)", { XX
} },
5538 { "(bad)", { XX
} },
5539 { "(bad)", { XX
} },
5540 { "(bad)", { XX
} },
5541 { "(bad)", { XX
} },
5542 { "pcomub", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5543 { "pcomuw", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5544 { "pcomud", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5545 { "pcomuq", { { OP_DREX3
, q_mode
}, { OP_DREX_ICMP
, b_mode
} } },
5547 { "(bad)", { XX
} },
5548 { "(bad)", { XX
} },
5549 { "(bad)", { XX
} },
5550 { "(bad)", { XX
} },
5551 { "(bad)", { XX
} },
5552 { "(bad)", { XX
} },
5553 { "(bad)", { XX
} },
5554 { "(bad)", { XX
} },
5556 { "(bad)", { XX
} },
5557 { "(bad)", { XX
} },
5558 { "(bad)", { XX
} },
5559 { "(bad)", { XX
} },
5560 { "(bad)", { XX
} },
5561 { "(bad)", { XX
} },
5562 { "(bad)", { XX
} },
5563 { "(bad)", { XX
} },
5565 { "(bad)", { XX
} },
5566 { "(bad)", { XX
} },
5567 { "(bad)", { XX
} },
5568 { "(bad)", { XX
} },
5569 { "(bad)", { XX
} },
5570 { "(bad)", { XX
} },
5571 { "(bad)", { XX
} },
5572 { "(bad)", { XX
} },
5574 { "(bad)", { XX
} },
5575 { "(bad)", { XX
} },
5576 { "(bad)", { XX
} },
5577 { "(bad)", { XX
} },
5578 { "(bad)", { XX
} },
5579 { "(bad)", { XX
} },
5580 { "(bad)", { XX
} },
5581 { "(bad)", { XX
} },
5583 { "(bad)", { XX
} },
5584 { "(bad)", { XX
} },
5585 { "(bad)", { XX
} },
5586 { "(bad)", { XX
} },
5587 { "(bad)", { XX
} },
5588 { "(bad)", { XX
} },
5589 { "(bad)", { XX
} },
5590 { "(bad)", { XX
} },
5592 { "(bad)", { XX
} },
5593 { "(bad)", { XX
} },
5594 { "(bad)", { XX
} },
5595 { "(bad)", { XX
} },
5596 { "(bad)", { XX
} },
5597 { "(bad)", { XX
} },
5598 { "(bad)", { XX
} },
5599 { "(bad)", { XX
} },
5601 { "(bad)", { XX
} },
5602 { "(bad)", { XX
} },
5603 { "(bad)", { XX
} },
5604 { "(bad)", { XX
} },
5605 { "(bad)", { XX
} },
5606 { "(bad)", { XX
} },
5607 { "(bad)", { XX
} },
5608 { "(bad)", { XX
} },
5610 { "(bad)", { XX
} },
5611 { "(bad)", { XX
} },
5612 { "(bad)", { XX
} },
5613 { "(bad)", { XX
} },
5614 { "(bad)", { XX
} },
5615 { "(bad)", { XX
} },
5616 { "(bad)", { XX
} },
5617 { "(bad)", { XX
} },
5619 { "(bad)", { XX
} },
5620 { "(bad)", { XX
} },
5621 { "(bad)", { XX
} },
5622 { "(bad)", { XX
} },
5623 { "(bad)", { XX
} },
5624 { "(bad)", { XX
} },
5625 { "(bad)", { XX
} },
5626 { "(bad)", { XX
} },
5628 { "(bad)", { XX
} },
5629 { "(bad)", { XX
} },
5630 { "(bad)", { XX
} },
5631 { "(bad)", { XX
} },
5632 { "(bad)", { XX
} },
5633 { "(bad)", { XX
} },
5634 { "(bad)", { XX
} },
5635 { "(bad)", { XX
} },
5637 { "(bad)", { XX
} },
5638 { "(bad)", { XX
} },
5639 { "(bad)", { XX
} },
5640 { "(bad)", { XX
} },
5641 { "(bad)", { XX
} },
5642 { "(bad)", { XX
} },
5643 { "(bad)", { XX
} },
5644 { "(bad)", { XX
} },
5646 { "(bad)", { XX
} },
5647 { "(bad)", { XX
} },
5648 { "(bad)", { XX
} },
5649 { "(bad)", { XX
} },
5650 { "(bad)", { XX
} },
5651 { "(bad)", { XX
} },
5652 { "(bad)", { XX
} },
5653 { "(bad)", { XX
} },
5655 { "(bad)", { XX
} },
5656 { "(bad)", { XX
} },
5657 { "(bad)", { XX
} },
5658 { "(bad)", { XX
} },
5659 { "(bad)", { XX
} },
5660 { "(bad)", { XX
} },
5661 { "(bad)", { XX
} },
5662 { "(bad)", { XX
} },
5664 { "(bad)", { XX
} },
5665 { "(bad)", { XX
} },
5666 { "(bad)", { XX
} },
5667 { "(bad)", { XX
} },
5668 { "(bad)", { XX
} },
5669 { "(bad)", { XX
} },
5670 { "(bad)", { XX
} },
5671 { "(bad)", { XX
} },
5673 { "(bad)", { XX
} },
5674 { "(bad)", { XX
} },
5675 { "(bad)", { XX
} },
5676 { "(bad)", { XX
} },
5677 { "(bad)", { XX
} },
5678 { "(bad)", { XX
} },
5679 { "(bad)", { XX
} },
5680 { "(bad)", { XX
} },
5682 { "(bad)", { XX
} },
5683 { "(bad)", { XX
} },
5684 { "(bad)", { XX
} },
5685 { "(bad)", { XX
} },
5686 { "(bad)", { XX
} },
5687 { "(bad)", { XX
} },
5688 { "(bad)", { XX
} },
5689 { "(bad)", { XX
} },
5691 { "(bad)", { XX
} },
5692 { "(bad)", { XX
} },
5693 { "(bad)", { XX
} },
5694 { "(bad)", { XX
} },
5695 { "(bad)", { XX
} },
5696 { "(bad)", { XX
} },
5697 { "(bad)", { XX
} },
5698 { "(bad)", { XX
} },
5700 { "(bad)", { XX
} },
5701 { "(bad)", { XX
} },
5702 { "(bad)", { XX
} },
5703 { "(bad)", { XX
} },
5704 { "(bad)", { XX
} },
5705 { "(bad)", { XX
} },
5706 { "(bad)", { XX
} },
5707 { "(bad)", { XX
} },
5709 /* THREE_BYTE_0F38 */
5712 { "pshufb", { MX
, EM
} },
5713 { "phaddw", { MX
, EM
} },
5714 { "phaddd", { MX
, EM
} },
5715 { "phaddsw", { MX
, EM
} },
5716 { "pmaddubsw", { MX
, EM
} },
5717 { "phsubw", { MX
, EM
} },
5718 { "phsubd", { MX
, EM
} },
5719 { "phsubsw", { MX
, EM
} },
5721 { "psignb", { MX
, EM
} },
5722 { "psignw", { MX
, EM
} },
5723 { "psignd", { MX
, EM
} },
5724 { "pmulhrsw", { MX
, EM
} },
5725 { "(bad)", { XX
} },
5726 { "(bad)", { XX
} },
5727 { "(bad)", { XX
} },
5728 { "(bad)", { XX
} },
5730 { PREFIX_TABLE (PREFIX_0F3810
) },
5731 { "(bad)", { XX
} },
5732 { "(bad)", { XX
} },
5733 { "(bad)", { XX
} },
5734 { PREFIX_TABLE (PREFIX_0F3814
) },
5735 { PREFIX_TABLE (PREFIX_0F3815
) },
5736 { "(bad)", { XX
} },
5737 { PREFIX_TABLE (PREFIX_0F3817
) },
5739 { "(bad)", { XX
} },
5740 { "(bad)", { XX
} },
5741 { "(bad)", { XX
} },
5742 { "(bad)", { XX
} },
5743 { "pabsb", { MX
, EM
} },
5744 { "pabsw", { MX
, EM
} },
5745 { "pabsd", { MX
, EM
} },
5746 { "(bad)", { XX
} },
5748 { PREFIX_TABLE (PREFIX_0F3820
) },
5749 { PREFIX_TABLE (PREFIX_0F3821
) },
5750 { PREFIX_TABLE (PREFIX_0F3822
) },
5751 { PREFIX_TABLE (PREFIX_0F3823
) },
5752 { PREFIX_TABLE (PREFIX_0F3824
) },
5753 { PREFIX_TABLE (PREFIX_0F3825
) },
5754 { "(bad)", { XX
} },
5755 { "(bad)", { XX
} },
5757 { PREFIX_TABLE (PREFIX_0F3828
) },
5758 { PREFIX_TABLE (PREFIX_0F3829
) },
5759 { PREFIX_TABLE (PREFIX_0F382A
) },
5760 { PREFIX_TABLE (PREFIX_0F382B
) },
5761 { "(bad)", { XX
} },
5762 { "(bad)", { XX
} },
5763 { "(bad)", { XX
} },
5764 { "(bad)", { XX
} },
5766 { PREFIX_TABLE (PREFIX_0F3830
) },
5767 { PREFIX_TABLE (PREFIX_0F3831
) },
5768 { PREFIX_TABLE (PREFIX_0F3832
) },
5769 { PREFIX_TABLE (PREFIX_0F3833
) },
5770 { PREFIX_TABLE (PREFIX_0F3834
) },
5771 { PREFIX_TABLE (PREFIX_0F3835
) },
5772 { "(bad)", { XX
} },
5773 { PREFIX_TABLE (PREFIX_0F3837
) },
5775 { PREFIX_TABLE (PREFIX_0F3838
) },
5776 { PREFIX_TABLE (PREFIX_0F3839
) },
5777 { PREFIX_TABLE (PREFIX_0F383A
) },
5778 { PREFIX_TABLE (PREFIX_0F383B
) },
5779 { PREFIX_TABLE (PREFIX_0F383C
) },
5780 { PREFIX_TABLE (PREFIX_0F383D
) },
5781 { PREFIX_TABLE (PREFIX_0F383E
) },
5782 { PREFIX_TABLE (PREFIX_0F383F
) },
5784 { PREFIX_TABLE (PREFIX_0F3840
) },
5785 { PREFIX_TABLE (PREFIX_0F3841
) },
5786 { "(bad)", { XX
} },
5787 { "(bad)", { XX
} },
5788 { "(bad)", { XX
} },
5789 { "(bad)", { XX
} },
5790 { "(bad)", { XX
} },
5791 { "(bad)", { XX
} },
5793 { "(bad)", { XX
} },
5794 { "(bad)", { XX
} },
5795 { "(bad)", { XX
} },
5796 { "(bad)", { XX
} },
5797 { "(bad)", { XX
} },
5798 { "(bad)", { XX
} },
5799 { "(bad)", { XX
} },
5800 { "(bad)", { XX
} },
5802 { "(bad)", { XX
} },
5803 { "(bad)", { XX
} },
5804 { "(bad)", { XX
} },
5805 { "(bad)", { XX
} },
5806 { "(bad)", { XX
} },
5807 { "(bad)", { XX
} },
5808 { "(bad)", { XX
} },
5809 { "(bad)", { XX
} },
5811 { "(bad)", { XX
} },
5812 { "(bad)", { XX
} },
5813 { "(bad)", { XX
} },
5814 { "(bad)", { XX
} },
5815 { "(bad)", { XX
} },
5816 { "(bad)", { XX
} },
5817 { "(bad)", { XX
} },
5818 { "(bad)", { XX
} },
5820 { "(bad)", { XX
} },
5821 { "(bad)", { XX
} },
5822 { "(bad)", { XX
} },
5823 { "(bad)", { XX
} },
5824 { "(bad)", { XX
} },
5825 { "(bad)", { XX
} },
5826 { "(bad)", { XX
} },
5827 { "(bad)", { XX
} },
5829 { "(bad)", { XX
} },
5830 { "(bad)", { XX
} },
5831 { "(bad)", { XX
} },
5832 { "(bad)", { XX
} },
5833 { "(bad)", { XX
} },
5834 { "(bad)", { XX
} },
5835 { "(bad)", { XX
} },
5836 { "(bad)", { XX
} },
5838 { "(bad)", { XX
} },
5839 { "(bad)", { XX
} },
5840 { "(bad)", { XX
} },
5841 { "(bad)", { XX
} },
5842 { "(bad)", { XX
} },
5843 { "(bad)", { XX
} },
5844 { "(bad)", { XX
} },
5845 { "(bad)", { XX
} },
5847 { "(bad)", { XX
} },
5848 { "(bad)", { XX
} },
5849 { "(bad)", { XX
} },
5850 { "(bad)", { XX
} },
5851 { "(bad)", { XX
} },
5852 { "(bad)", { XX
} },
5853 { "(bad)", { XX
} },
5854 { "(bad)", { XX
} },
5856 { PREFIX_TABLE (PREFIX_0F3880
) },
5857 { PREFIX_TABLE (PREFIX_0F3881
) },
5858 { "(bad)", { XX
} },
5859 { "(bad)", { XX
} },
5860 { "(bad)", { XX
} },
5861 { "(bad)", { XX
} },
5862 { "(bad)", { XX
} },
5863 { "(bad)", { XX
} },
5865 { "(bad)", { XX
} },
5866 { "(bad)", { XX
} },
5867 { "(bad)", { XX
} },
5868 { "(bad)", { XX
} },
5869 { "(bad)", { XX
} },
5870 { "(bad)", { XX
} },
5871 { "(bad)", { XX
} },
5872 { "(bad)", { XX
} },
5874 { "(bad)", { XX
} },
5875 { "(bad)", { XX
} },
5876 { "(bad)", { XX
} },
5877 { "(bad)", { XX
} },
5878 { "(bad)", { XX
} },
5879 { "(bad)", { XX
} },
5880 { "(bad)", { XX
} },
5881 { "(bad)", { XX
} },
5883 { "(bad)", { XX
} },
5884 { "(bad)", { XX
} },
5885 { "(bad)", { XX
} },
5886 { "(bad)", { XX
} },
5887 { "(bad)", { XX
} },
5888 { "(bad)", { XX
} },
5889 { "(bad)", { XX
} },
5890 { "(bad)", { XX
} },
5892 { "(bad)", { XX
} },
5893 { "(bad)", { XX
} },
5894 { "(bad)", { XX
} },
5895 { "(bad)", { XX
} },
5896 { "(bad)", { XX
} },
5897 { "(bad)", { XX
} },
5898 { "(bad)", { XX
} },
5899 { "(bad)", { XX
} },
5901 { "(bad)", { XX
} },
5902 { "(bad)", { XX
} },
5903 { "(bad)", { XX
} },
5904 { "(bad)", { XX
} },
5905 { "(bad)", { XX
} },
5906 { "(bad)", { XX
} },
5907 { "(bad)", { XX
} },
5908 { "(bad)", { XX
} },
5910 { "(bad)", { XX
} },
5911 { "(bad)", { XX
} },
5912 { "(bad)", { XX
} },
5913 { "(bad)", { XX
} },
5914 { "(bad)", { XX
} },
5915 { "(bad)", { XX
} },
5916 { "(bad)", { XX
} },
5917 { "(bad)", { XX
} },
5919 { "(bad)", { XX
} },
5920 { "(bad)", { XX
} },
5921 { "(bad)", { XX
} },
5922 { "(bad)", { XX
} },
5923 { "(bad)", { XX
} },
5924 { "(bad)", { XX
} },
5925 { "(bad)", { XX
} },
5926 { "(bad)", { XX
} },
5928 { "(bad)", { XX
} },
5929 { "(bad)", { XX
} },
5930 { "(bad)", { XX
} },
5931 { "(bad)", { XX
} },
5932 { "(bad)", { XX
} },
5933 { "(bad)", { XX
} },
5934 { "(bad)", { XX
} },
5935 { "(bad)", { XX
} },
5937 { "(bad)", { XX
} },
5938 { "(bad)", { XX
} },
5939 { "(bad)", { XX
} },
5940 { "(bad)", { XX
} },
5941 { "(bad)", { XX
} },
5942 { "(bad)", { XX
} },
5943 { "(bad)", { XX
} },
5944 { "(bad)", { XX
} },
5946 { "(bad)", { XX
} },
5947 { "(bad)", { XX
} },
5948 { "(bad)", { XX
} },
5949 { "(bad)", { XX
} },
5950 { "(bad)", { XX
} },
5951 { "(bad)", { XX
} },
5952 { "(bad)", { XX
} },
5953 { "(bad)", { XX
} },
5955 { "(bad)", { XX
} },
5956 { "(bad)", { XX
} },
5957 { "(bad)", { XX
} },
5958 { PREFIX_TABLE (PREFIX_0F38DB
) },
5959 { PREFIX_TABLE (PREFIX_0F38DC
) },
5960 { PREFIX_TABLE (PREFIX_0F38DD
) },
5961 { PREFIX_TABLE (PREFIX_0F38DE
) },
5962 { PREFIX_TABLE (PREFIX_0F38DF
) },
5964 { "(bad)", { XX
} },
5965 { "(bad)", { XX
} },
5966 { "(bad)", { XX
} },
5967 { "(bad)", { XX
} },
5968 { "(bad)", { XX
} },
5969 { "(bad)", { XX
} },
5970 { "(bad)", { XX
} },
5971 { "(bad)", { XX
} },
5973 { "(bad)", { XX
} },
5974 { "(bad)", { XX
} },
5975 { "(bad)", { XX
} },
5976 { "(bad)", { XX
} },
5977 { "(bad)", { XX
} },
5978 { "(bad)", { XX
} },
5979 { "(bad)", { XX
} },
5980 { "(bad)", { XX
} },
5982 { PREFIX_TABLE (PREFIX_0F38F0
) },
5983 { PREFIX_TABLE (PREFIX_0F38F1
) },
5984 { "(bad)", { XX
} },
5985 { "(bad)", { XX
} },
5986 { "(bad)", { XX
} },
5987 { "(bad)", { XX
} },
5988 { "(bad)", { XX
} },
5989 { "(bad)", { XX
} },
5991 { "(bad)", { XX
} },
5992 { "(bad)", { XX
} },
5993 { "(bad)", { XX
} },
5994 { "(bad)", { XX
} },
5995 { "(bad)", { XX
} },
5996 { "(bad)", { XX
} },
5997 { "(bad)", { XX
} },
5998 { "(bad)", { XX
} },
6000 /* THREE_BYTE_0F3A */
6003 { "(bad)", { XX
} },
6004 { "(bad)", { XX
} },
6005 { "(bad)", { XX
} },
6006 { "(bad)", { XX
} },
6007 { "(bad)", { XX
} },
6008 { "(bad)", { XX
} },
6009 { "(bad)", { XX
} },
6010 { "(bad)", { XX
} },
6012 { PREFIX_TABLE (PREFIX_0F3A08
) },
6013 { PREFIX_TABLE (PREFIX_0F3A09
) },
6014 { PREFIX_TABLE (PREFIX_0F3A0A
) },
6015 { PREFIX_TABLE (PREFIX_0F3A0B
) },
6016 { PREFIX_TABLE (PREFIX_0F3A0C
) },
6017 { PREFIX_TABLE (PREFIX_0F3A0D
) },
6018 { PREFIX_TABLE (PREFIX_0F3A0E
) },
6019 { "palignr", { MX
, EM
, Ib
} },
6021 { "(bad)", { XX
} },
6022 { "(bad)", { XX
} },
6023 { "(bad)", { XX
} },
6024 { "(bad)", { XX
} },
6025 { PREFIX_TABLE (PREFIX_0F3A14
) },
6026 { PREFIX_TABLE (PREFIX_0F3A15
) },
6027 { PREFIX_TABLE (PREFIX_0F3A16
) },
6028 { PREFIX_TABLE (PREFIX_0F3A17
) },
6030 { "(bad)", { XX
} },
6031 { "(bad)", { XX
} },
6032 { "(bad)", { XX
} },
6033 { "(bad)", { XX
} },
6034 { "(bad)", { XX
} },
6035 { "(bad)", { XX
} },
6036 { "(bad)", { XX
} },
6037 { "(bad)", { XX
} },
6039 { PREFIX_TABLE (PREFIX_0F3A20
) },
6040 { PREFIX_TABLE (PREFIX_0F3A21
) },
6041 { PREFIX_TABLE (PREFIX_0F3A22
) },
6042 { "(bad)", { XX
} },
6043 { "(bad)", { XX
} },
6044 { "(bad)", { XX
} },
6045 { "(bad)", { XX
} },
6046 { "(bad)", { XX
} },
6048 { "(bad)", { XX
} },
6049 { "(bad)", { XX
} },
6050 { "(bad)", { XX
} },
6051 { "(bad)", { XX
} },
6052 { "(bad)", { XX
} },
6053 { "(bad)", { XX
} },
6054 { "(bad)", { XX
} },
6055 { "(bad)", { XX
} },
6057 { "(bad)", { XX
} },
6058 { "(bad)", { XX
} },
6059 { "(bad)", { XX
} },
6060 { "(bad)", { XX
} },
6061 { "(bad)", { XX
} },
6062 { "(bad)", { XX
} },
6063 { "(bad)", { XX
} },
6064 { "(bad)", { XX
} },
6066 { "(bad)", { XX
} },
6067 { "(bad)", { XX
} },
6068 { "(bad)", { XX
} },
6069 { "(bad)", { XX
} },
6070 { "(bad)", { XX
} },
6071 { "(bad)", { XX
} },
6072 { "(bad)", { XX
} },
6073 { "(bad)", { XX
} },
6075 { PREFIX_TABLE (PREFIX_0F3A40
) },
6076 { PREFIX_TABLE (PREFIX_0F3A41
) },
6077 { PREFIX_TABLE (PREFIX_0F3A42
) },
6078 { "(bad)", { XX
} },
6079 { PREFIX_TABLE (PREFIX_0F3A44
) },
6080 { "(bad)", { XX
} },
6081 { "(bad)", { XX
} },
6082 { "(bad)", { XX
} },
6084 { "(bad)", { XX
} },
6085 { "(bad)", { XX
} },
6086 { "(bad)", { XX
} },
6087 { "(bad)", { XX
} },
6088 { "(bad)", { XX
} },
6089 { "(bad)", { XX
} },
6090 { "(bad)", { XX
} },
6091 { "(bad)", { XX
} },
6093 { "(bad)", { XX
} },
6094 { "(bad)", { XX
} },
6095 { "(bad)", { XX
} },
6096 { "(bad)", { XX
} },
6097 { "(bad)", { XX
} },
6098 { "(bad)", { XX
} },
6099 { "(bad)", { XX
} },
6100 { "(bad)", { XX
} },
6102 { "(bad)", { XX
} },
6103 { "(bad)", { XX
} },
6104 { "(bad)", { XX
} },
6105 { "(bad)", { XX
} },
6106 { "(bad)", { XX
} },
6107 { "(bad)", { XX
} },
6108 { "(bad)", { XX
} },
6109 { "(bad)", { XX
} },
6111 { PREFIX_TABLE (PREFIX_0F3A60
) },
6112 { PREFIX_TABLE (PREFIX_0F3A61
) },
6113 { PREFIX_TABLE (PREFIX_0F3A62
) },
6114 { PREFIX_TABLE (PREFIX_0F3A63
) },
6115 { "(bad)", { XX
} },
6116 { "(bad)", { XX
} },
6117 { "(bad)", { XX
} },
6118 { "(bad)", { XX
} },
6120 { "(bad)", { XX
} },
6121 { "(bad)", { XX
} },
6122 { "(bad)", { XX
} },
6123 { "(bad)", { XX
} },
6124 { "(bad)", { XX
} },
6125 { "(bad)", { XX
} },
6126 { "(bad)", { XX
} },
6127 { "(bad)", { XX
} },
6129 { "(bad)", { XX
} },
6130 { "(bad)", { XX
} },
6131 { "(bad)", { XX
} },
6132 { "(bad)", { XX
} },
6133 { "(bad)", { XX
} },
6134 { "(bad)", { XX
} },
6135 { "(bad)", { XX
} },
6136 { "(bad)", { XX
} },
6138 { "(bad)", { XX
} },
6139 { "(bad)", { XX
} },
6140 { "(bad)", { XX
} },
6141 { "(bad)", { XX
} },
6142 { "(bad)", { XX
} },
6143 { "(bad)", { XX
} },
6144 { "(bad)", { XX
} },
6145 { "(bad)", { XX
} },
6147 { "(bad)", { XX
} },
6148 { "(bad)", { XX
} },
6149 { "(bad)", { XX
} },
6150 { "(bad)", { XX
} },
6151 { "(bad)", { XX
} },
6152 { "(bad)", { XX
} },
6153 { "(bad)", { XX
} },
6154 { "(bad)", { XX
} },
6156 { "(bad)", { XX
} },
6157 { "(bad)", { XX
} },
6158 { "(bad)", { XX
} },
6159 { "(bad)", { XX
} },
6160 { "(bad)", { XX
} },
6161 { "(bad)", { XX
} },
6162 { "(bad)", { XX
} },
6163 { "(bad)", { XX
} },
6165 { "(bad)", { XX
} },
6166 { "(bad)", { XX
} },
6167 { "(bad)", { XX
} },
6168 { "(bad)", { XX
} },
6169 { "(bad)", { XX
} },
6170 { "(bad)", { XX
} },
6171 { "(bad)", { XX
} },
6172 { "(bad)", { XX
} },
6174 { "(bad)", { XX
} },
6175 { "(bad)", { XX
} },
6176 { "(bad)", { XX
} },
6177 { "(bad)", { XX
} },
6178 { "(bad)", { XX
} },
6179 { "(bad)", { XX
} },
6180 { "(bad)", { XX
} },
6181 { "(bad)", { XX
} },
6183 { "(bad)", { XX
} },
6184 { "(bad)", { XX
} },
6185 { "(bad)", { XX
} },
6186 { "(bad)", { XX
} },
6187 { "(bad)", { XX
} },
6188 { "(bad)", { XX
} },
6189 { "(bad)", { XX
} },
6190 { "(bad)", { XX
} },
6192 { "(bad)", { XX
} },
6193 { "(bad)", { XX
} },
6194 { "(bad)", { XX
} },
6195 { "(bad)", { XX
} },
6196 { "(bad)", { XX
} },
6197 { "(bad)", { XX
} },
6198 { "(bad)", { XX
} },
6199 { "(bad)", { XX
} },
6201 { "(bad)", { XX
} },
6202 { "(bad)", { XX
} },
6203 { "(bad)", { XX
} },
6204 { "(bad)", { XX
} },
6205 { "(bad)", { XX
} },
6206 { "(bad)", { XX
} },
6207 { "(bad)", { XX
} },
6208 { "(bad)", { XX
} },
6210 { "(bad)", { XX
} },
6211 { "(bad)", { XX
} },
6212 { "(bad)", { XX
} },
6213 { "(bad)", { XX
} },
6214 { "(bad)", { XX
} },
6215 { "(bad)", { XX
} },
6216 { "(bad)", { XX
} },
6217 { "(bad)", { XX
} },
6219 { "(bad)", { XX
} },
6220 { "(bad)", { XX
} },
6221 { "(bad)", { XX
} },
6222 { "(bad)", { XX
} },
6223 { "(bad)", { XX
} },
6224 { "(bad)", { XX
} },
6225 { "(bad)", { XX
} },
6226 { "(bad)", { XX
} },
6228 { "(bad)", { XX
} },
6229 { "(bad)", { XX
} },
6230 { "(bad)", { XX
} },
6231 { "(bad)", { XX
} },
6232 { "(bad)", { XX
} },
6233 { "(bad)", { XX
} },
6234 { "(bad)", { XX
} },
6235 { "(bad)", { XX
} },
6237 { "(bad)", { XX
} },
6238 { "(bad)", { XX
} },
6239 { "(bad)", { XX
} },
6240 { "(bad)", { XX
} },
6241 { "(bad)", { XX
} },
6242 { "(bad)", { XX
} },
6243 { "(bad)", { XX
} },
6244 { "(bad)", { XX
} },
6246 { "(bad)", { XX
} },
6247 { "(bad)", { XX
} },
6248 { "(bad)", { XX
} },
6249 { "(bad)", { XX
} },
6250 { "(bad)", { XX
} },
6251 { "(bad)", { XX
} },
6252 { "(bad)", { XX
} },
6253 { PREFIX_TABLE (PREFIX_0F3ADF
) },
6255 { "(bad)", { XX
} },
6256 { "(bad)", { XX
} },
6257 { "(bad)", { XX
} },
6258 { "(bad)", { XX
} },
6259 { "(bad)", { XX
} },
6260 { "(bad)", { XX
} },
6261 { "(bad)", { XX
} },
6262 { "(bad)", { XX
} },
6264 { "(bad)", { XX
} },
6265 { "(bad)", { XX
} },
6266 { "(bad)", { XX
} },
6267 { "(bad)", { XX
} },
6268 { "(bad)", { XX
} },
6269 { "(bad)", { XX
} },
6270 { "(bad)", { XX
} },
6271 { "(bad)", { XX
} },
6273 { "(bad)", { XX
} },
6274 { "(bad)", { XX
} },
6275 { "(bad)", { XX
} },
6276 { "(bad)", { XX
} },
6277 { "(bad)", { XX
} },
6278 { "(bad)", { XX
} },
6279 { "(bad)", { XX
} },
6280 { "(bad)", { XX
} },
6282 { "(bad)", { XX
} },
6283 { "(bad)", { XX
} },
6284 { "(bad)", { XX
} },
6285 { "(bad)", { XX
} },
6286 { "(bad)", { XX
} },
6287 { "(bad)", { XX
} },
6288 { "(bad)", { XX
} },
6289 { "(bad)", { XX
} },
6291 /* THREE_BYTE_0F7A */
6294 { "(bad)", { XX
} },
6295 { "(bad)", { XX
} },
6296 { "(bad)", { XX
} },
6297 { "(bad)", { XX
} },
6298 { "(bad)", { XX
} },
6299 { "(bad)", { XX
} },
6300 { "(bad)", { XX
} },
6301 { "(bad)", { XX
} },
6303 { "(bad)", { XX
} },
6304 { "(bad)", { XX
} },
6305 { "(bad)", { XX
} },
6306 { "(bad)", { XX
} },
6307 { "(bad)", { XX
} },
6308 { "(bad)", { XX
} },
6309 { "(bad)", { XX
} },
6310 { "(bad)", { XX
} },
6312 { "frczps", { XM
, EXq
} },
6313 { "frczpd", { XM
, EXq
} },
6314 { "frczss", { XM
, EXq
} },
6315 { "frczsd", { XM
, EXq
} },
6316 { "(bad)", { XX
} },
6317 { "(bad)", { XX
} },
6318 { "(bad)", { XX
} },
6319 { "(bad)", { XX
} },
6321 { "(bad)", { XX
} },
6322 { "(bad)", { XX
} },
6323 { "(bad)", { XX
} },
6324 { "(bad)", { XX
} },
6325 { "(bad)", { XX
} },
6326 { "(bad)", { XX
} },
6327 { "(bad)", { XX
} },
6328 { "(bad)", { XX
} },
6330 { "ptest", { XX
} },
6331 { "(bad)", { XX
} },
6332 { "(bad)", { XX
} },
6333 { "(bad)", { XX
} },
6334 { "(bad)", { XX
} },
6335 { "(bad)", { XX
} },
6336 { "(bad)", { XX
} },
6337 { "(bad)", { XX
} },
6339 { "(bad)", { XX
} },
6340 { "(bad)", { XX
} },
6341 { "(bad)", { XX
} },
6342 { "(bad)", { XX
} },
6343 { "(bad)", { XX
} },
6344 { "(bad)", { XX
} },
6345 { "(bad)", { XX
} },
6346 { "(bad)", { XX
} },
6348 { "cvtph2ps", { XM
, EXd
} },
6349 { "cvtps2ph", { EXd
, XM
} },
6350 { "(bad)", { XX
} },
6351 { "(bad)", { XX
} },
6352 { "(bad)", { XX
} },
6353 { "(bad)", { XX
} },
6354 { "(bad)", { XX
} },
6355 { "(bad)", { XX
} },
6357 { "(bad)", { XX
} },
6358 { "(bad)", { XX
} },
6359 { "(bad)", { XX
} },
6360 { "(bad)", { XX
} },
6361 { "(bad)", { XX
} },
6362 { "(bad)", { XX
} },
6363 { "(bad)", { XX
} },
6364 { "(bad)", { XX
} },
6366 { "(bad)", { XX
} },
6367 { "phaddbw", { XM
, EXq
} },
6368 { "phaddbd", { XM
, EXq
} },
6369 { "phaddbq", { XM
, EXq
} },
6370 { "(bad)", { XX
} },
6371 { "(bad)", { XX
} },
6372 { "phaddwd", { XM
, EXq
} },
6373 { "phaddwq", { XM
, EXq
} },
6375 { "(bad)", { XX
} },
6376 { "(bad)", { XX
} },
6377 { "(bad)", { XX
} },
6378 { "phadddq", { XM
, EXq
} },
6379 { "(bad)", { XX
} },
6380 { "(bad)", { XX
} },
6381 { "(bad)", { XX
} },
6382 { "(bad)", { XX
} },
6384 { "(bad)", { XX
} },
6385 { "phaddubw", { XM
, EXq
} },
6386 { "phaddubd", { XM
, EXq
} },
6387 { "phaddubq", { XM
, EXq
} },
6388 { "(bad)", { XX
} },
6389 { "(bad)", { XX
} },
6390 { "phadduwd", { XM
, EXq
} },
6391 { "phadduwq", { XM
, EXq
} },
6393 { "(bad)", { XX
} },
6394 { "(bad)", { XX
} },
6395 { "(bad)", { XX
} },
6396 { "phaddudq", { XM
, EXq
} },
6397 { "(bad)", { XX
} },
6398 { "(bad)", { XX
} },
6399 { "(bad)", { XX
} },
6400 { "(bad)", { XX
} },
6402 { "(bad)", { XX
} },
6403 { "phsubbw", { XM
, EXq
} },
6404 { "phsubbd", { XM
, EXq
} },
6405 { "phsubbq", { XM
, EXq
} },
6406 { "(bad)", { XX
} },
6407 { "(bad)", { XX
} },
6408 { "(bad)", { XX
} },
6409 { "(bad)", { XX
} },
6411 { "(bad)", { XX
} },
6412 { "(bad)", { XX
} },
6413 { "(bad)", { XX
} },
6414 { "(bad)", { XX
} },
6415 { "(bad)", { XX
} },
6416 { "(bad)", { XX
} },
6417 { "(bad)", { XX
} },
6418 { "(bad)", { XX
} },
6420 { "(bad)", { XX
} },
6421 { "(bad)", { XX
} },
6422 { "(bad)", { XX
} },
6423 { "(bad)", { XX
} },
6424 { "(bad)", { XX
} },
6425 { "(bad)", { XX
} },
6426 { "(bad)", { XX
} },
6427 { "(bad)", { XX
} },
6429 { "(bad)", { XX
} },
6430 { "(bad)", { XX
} },
6431 { "(bad)", { XX
} },
6432 { "(bad)", { XX
} },
6433 { "(bad)", { XX
} },
6434 { "(bad)", { XX
} },
6435 { "(bad)", { XX
} },
6436 { "(bad)", { XX
} },
6438 { "(bad)", { XX
} },
6439 { "(bad)", { XX
} },
6440 { "(bad)", { XX
} },
6441 { "(bad)", { XX
} },
6442 { "(bad)", { XX
} },
6443 { "(bad)", { XX
} },
6444 { "(bad)", { XX
} },
6445 { "(bad)", { XX
} },
6447 { "(bad)", { XX
} },
6448 { "(bad)", { XX
} },
6449 { "(bad)", { XX
} },
6450 { "(bad)", { XX
} },
6451 { "(bad)", { XX
} },
6452 { "(bad)", { XX
} },
6453 { "(bad)", { XX
} },
6454 { "(bad)", { XX
} },
6456 { "(bad)", { XX
} },
6457 { "(bad)", { XX
} },
6458 { "(bad)", { XX
} },
6459 { "(bad)", { XX
} },
6460 { "(bad)", { XX
} },
6461 { "(bad)", { XX
} },
6462 { "(bad)", { XX
} },
6463 { "(bad)", { XX
} },
6465 { "(bad)", { XX
} },
6466 { "(bad)", { XX
} },
6467 { "(bad)", { XX
} },
6468 { "(bad)", { XX
} },
6469 { "(bad)", { XX
} },
6470 { "(bad)", { XX
} },
6471 { "(bad)", { XX
} },
6472 { "(bad)", { XX
} },
6474 { "(bad)", { XX
} },
6475 { "(bad)", { XX
} },
6476 { "(bad)", { XX
} },
6477 { "(bad)", { XX
} },
6478 { "(bad)", { XX
} },
6479 { "(bad)", { XX
} },
6480 { "(bad)", { XX
} },
6481 { "(bad)", { XX
} },
6483 { "(bad)", { XX
} },
6484 { "(bad)", { XX
} },
6485 { "(bad)", { XX
} },
6486 { "(bad)", { XX
} },
6487 { "(bad)", { XX
} },
6488 { "(bad)", { XX
} },
6489 { "(bad)", { XX
} },
6490 { "(bad)", { XX
} },
6492 { "(bad)", { XX
} },
6493 { "(bad)", { XX
} },
6494 { "(bad)", { XX
} },
6495 { "(bad)", { XX
} },
6496 { "(bad)", { XX
} },
6497 { "(bad)", { XX
} },
6498 { "(bad)", { XX
} },
6499 { "(bad)", { XX
} },
6501 { "(bad)", { XX
} },
6502 { "(bad)", { XX
} },
6503 { "(bad)", { XX
} },
6504 { "(bad)", { XX
} },
6505 { "(bad)", { XX
} },
6506 { "(bad)", { XX
} },
6507 { "(bad)", { XX
} },
6508 { "(bad)", { XX
} },
6510 { "(bad)", { XX
} },
6511 { "(bad)", { XX
} },
6512 { "(bad)", { XX
} },
6513 { "(bad)", { XX
} },
6514 { "(bad)", { XX
} },
6515 { "(bad)", { XX
} },
6516 { "(bad)", { XX
} },
6517 { "(bad)", { XX
} },
6519 { "(bad)", { XX
} },
6520 { "(bad)", { XX
} },
6521 { "(bad)", { XX
} },
6522 { "(bad)", { XX
} },
6523 { "(bad)", { XX
} },
6524 { "(bad)", { XX
} },
6525 { "(bad)", { XX
} },
6526 { "(bad)", { XX
} },
6528 { "(bad)", { XX
} },
6529 { "(bad)", { XX
} },
6530 { "(bad)", { XX
} },
6531 { "(bad)", { XX
} },
6532 { "(bad)", { XX
} },
6533 { "(bad)", { XX
} },
6534 { "(bad)", { XX
} },
6535 { "(bad)", { XX
} },
6537 { "(bad)", { XX
} },
6538 { "(bad)", { XX
} },
6539 { "(bad)", { XX
} },
6540 { "(bad)", { XX
} },
6541 { "(bad)", { XX
} },
6542 { "(bad)", { XX
} },
6543 { "(bad)", { XX
} },
6544 { "(bad)", { XX
} },
6546 { "(bad)", { XX
} },
6547 { "(bad)", { XX
} },
6548 { "(bad)", { XX
} },
6549 { "(bad)", { XX
} },
6550 { "(bad)", { XX
} },
6551 { "(bad)", { XX
} },
6552 { "(bad)", { XX
} },
6553 { "(bad)", { XX
} },
6555 { "(bad)", { XX
} },
6556 { "(bad)", { XX
} },
6557 { "(bad)", { XX
} },
6558 { "(bad)", { XX
} },
6559 { "(bad)", { XX
} },
6560 { "(bad)", { XX
} },
6561 { "(bad)", { XX
} },
6562 { "(bad)", { XX
} },
6564 { "(bad)", { XX
} },
6565 { "(bad)", { XX
} },
6566 { "(bad)", { XX
} },
6567 { "(bad)", { XX
} },
6568 { "(bad)", { XX
} },
6569 { "(bad)", { XX
} },
6570 { "(bad)", { XX
} },
6571 { "(bad)", { XX
} },
6573 { "(bad)", { XX
} },
6574 { "(bad)", { XX
} },
6575 { "(bad)", { XX
} },
6576 { "(bad)", { XX
} },
6577 { "(bad)", { XX
} },
6578 { "(bad)", { XX
} },
6579 { "(bad)", { XX
} },
6580 { "(bad)", { XX
} },
6582 /* THREE_BYTE_0F7B */
6585 { "(bad)", { XX
} },
6586 { "(bad)", { XX
} },
6587 { "(bad)", { XX
} },
6588 { "(bad)", { XX
} },
6589 { "(bad)", { XX
} },
6590 { "(bad)", { XX
} },
6591 { "(bad)", { XX
} },
6592 { "(bad)", { XX
} },
6594 { "(bad)", { XX
} },
6595 { "(bad)", { XX
} },
6596 { "(bad)", { XX
} },
6597 { "(bad)", { XX
} },
6598 { "(bad)", { XX
} },
6599 { "(bad)", { XX
} },
6600 { "(bad)", { XX
} },
6601 { "(bad)", { XX
} },
6603 { "(bad)", { XX
} },
6604 { "(bad)", { XX
} },
6605 { "(bad)", { XX
} },
6606 { "(bad)", { XX
} },
6607 { "(bad)", { XX
} },
6608 { "(bad)", { XX
} },
6609 { "(bad)", { XX
} },
6610 { "(bad)", { XX
} },
6612 { "(bad)", { XX
} },
6613 { "(bad)", { XX
} },
6614 { "(bad)", { XX
} },
6615 { "(bad)", { XX
} },
6616 { "(bad)", { XX
} },
6617 { "(bad)", { XX
} },
6618 { "(bad)", { XX
} },
6619 { "(bad)", { XX
} },
6621 { "(bad)", { XX
} },
6622 { "(bad)", { XX
} },
6623 { "(bad)", { XX
} },
6624 { "(bad)", { XX
} },
6625 { "(bad)", { XX
} },
6626 { "(bad)", { XX
} },
6627 { "(bad)", { XX
} },
6628 { "(bad)", { XX
} },
6630 { "(bad)", { XX
} },
6631 { "(bad)", { XX
} },
6632 { "(bad)", { XX
} },
6633 { "(bad)", { XX
} },
6634 { "(bad)", { XX
} },
6635 { "(bad)", { XX
} },
6636 { "(bad)", { XX
} },
6637 { "(bad)", { XX
} },
6639 { "(bad)", { XX
} },
6640 { "(bad)", { XX
} },
6641 { "(bad)", { XX
} },
6642 { "(bad)", { XX
} },
6643 { "(bad)", { XX
} },
6644 { "(bad)", { XX
} },
6645 { "(bad)", { XX
} },
6646 { "(bad)", { XX
} },
6648 { "(bad)", { XX
} },
6649 { "(bad)", { XX
} },
6650 { "(bad)", { XX
} },
6651 { "(bad)", { XX
} },
6652 { "(bad)", { XX
} },
6653 { "(bad)", { XX
} },
6654 { "(bad)", { XX
} },
6655 { "(bad)", { XX
} },
6657 { "protb", { XM
, EXq
, Ib
} },
6658 { "protw", { XM
, EXq
, Ib
} },
6659 { "protd", { XM
, EXq
, Ib
} },
6660 { "protq", { XM
, EXq
, Ib
} },
6661 { "pshlb", { XM
, EXq
, Ib
} },
6662 { "pshlw", { XM
, EXq
, Ib
} },
6663 { "pshld", { XM
, EXq
, Ib
} },
6664 { "pshlq", { XM
, EXq
, Ib
} },
6666 { "pshab", { XM
, EXq
, Ib
} },
6667 { "pshaw", { XM
, EXq
, Ib
} },
6668 { "pshad", { XM
, EXq
, Ib
} },
6669 { "pshaq", { XM
, EXq
, Ib
} },
6670 { "(bad)", { XX
} },
6671 { "(bad)", { XX
} },
6672 { "(bad)", { XX
} },
6673 { "(bad)", { XX
} },
6675 { "(bad)", { XX
} },
6676 { "(bad)", { XX
} },
6677 { "(bad)", { XX
} },
6678 { "(bad)", { XX
} },
6679 { "(bad)", { XX
} },
6680 { "(bad)", { XX
} },
6681 { "(bad)", { XX
} },
6682 { "(bad)", { XX
} },
6684 { "(bad)", { XX
} },
6685 { "(bad)", { XX
} },
6686 { "(bad)", { XX
} },
6687 { "(bad)", { XX
} },
6688 { "(bad)", { XX
} },
6689 { "(bad)", { XX
} },
6690 { "(bad)", { XX
} },
6691 { "(bad)", { XX
} },
6693 { "(bad)", { XX
} },
6694 { "(bad)", { XX
} },
6695 { "(bad)", { XX
} },
6696 { "(bad)", { XX
} },
6697 { "(bad)", { XX
} },
6698 { "(bad)", { XX
} },
6699 { "(bad)", { XX
} },
6700 { "(bad)", { XX
} },
6702 { "(bad)", { XX
} },
6703 { "(bad)", { XX
} },
6704 { "(bad)", { XX
} },
6705 { "(bad)", { XX
} },
6706 { "(bad)", { XX
} },
6707 { "(bad)", { XX
} },
6708 { "(bad)", { XX
} },
6709 { "(bad)", { XX
} },
6711 { "(bad)", { XX
} },
6712 { "(bad)", { XX
} },
6713 { "(bad)", { XX
} },
6714 { "(bad)", { XX
} },
6715 { "(bad)", { XX
} },
6716 { "(bad)", { XX
} },
6717 { "(bad)", { XX
} },
6718 { "(bad)", { XX
} },
6720 { "(bad)", { XX
} },
6721 { "(bad)", { XX
} },
6722 { "(bad)", { XX
} },
6723 { "(bad)", { XX
} },
6724 { "(bad)", { XX
} },
6725 { "(bad)", { XX
} },
6726 { "(bad)", { XX
} },
6727 { "(bad)", { XX
} },
6729 { "(bad)", { XX
} },
6730 { "(bad)", { XX
} },
6731 { "(bad)", { XX
} },
6732 { "(bad)", { XX
} },
6733 { "(bad)", { XX
} },
6734 { "(bad)", { XX
} },
6735 { "(bad)", { XX
} },
6736 { "(bad)", { XX
} },
6738 { "(bad)", { XX
} },
6739 { "(bad)", { XX
} },
6740 { "(bad)", { XX
} },
6741 { "(bad)", { XX
} },
6742 { "(bad)", { XX
} },
6743 { "(bad)", { XX
} },
6744 { "(bad)", { XX
} },
6745 { "(bad)", { XX
} },
6747 { "(bad)", { XX
} },
6748 { "(bad)", { XX
} },
6749 { "(bad)", { XX
} },
6750 { "(bad)", { XX
} },
6751 { "(bad)", { XX
} },
6752 { "(bad)", { XX
} },
6753 { "(bad)", { XX
} },
6754 { "(bad)", { XX
} },
6756 { "(bad)", { XX
} },
6757 { "(bad)", { XX
} },
6758 { "(bad)", { XX
} },
6759 { "(bad)", { XX
} },
6760 { "(bad)", { XX
} },
6761 { "(bad)", { XX
} },
6762 { "(bad)", { XX
} },
6763 { "(bad)", { XX
} },
6765 { "(bad)", { XX
} },
6766 { "(bad)", { XX
} },
6767 { "(bad)", { XX
} },
6768 { "(bad)", { XX
} },
6769 { "(bad)", { XX
} },
6770 { "(bad)", { XX
} },
6771 { "(bad)", { XX
} },
6772 { "(bad)", { XX
} },
6774 { "(bad)", { XX
} },
6775 { "(bad)", { XX
} },
6776 { "(bad)", { XX
} },
6777 { "(bad)", { XX
} },
6778 { "(bad)", { XX
} },
6779 { "(bad)", { XX
} },
6780 { "(bad)", { XX
} },
6781 { "(bad)", { XX
} },
6783 { "(bad)", { XX
} },
6784 { "(bad)", { XX
} },
6785 { "(bad)", { XX
} },
6786 { "(bad)", { XX
} },
6787 { "(bad)", { XX
} },
6788 { "(bad)", { XX
} },
6789 { "(bad)", { XX
} },
6790 { "(bad)", { XX
} },
6792 { "(bad)", { XX
} },
6793 { "(bad)", { XX
} },
6794 { "(bad)", { XX
} },
6795 { "(bad)", { XX
} },
6796 { "(bad)", { XX
} },
6797 { "(bad)", { XX
} },
6798 { "(bad)", { XX
} },
6799 { "(bad)", { XX
} },
6801 { "(bad)", { XX
} },
6802 { "(bad)", { XX
} },
6803 { "(bad)", { XX
} },
6804 { "(bad)", { XX
} },
6805 { "(bad)", { XX
} },
6806 { "(bad)", { XX
} },
6807 { "(bad)", { XX
} },
6808 { "(bad)", { XX
} },
6810 { "(bad)", { XX
} },
6811 { "(bad)", { XX
} },
6812 { "(bad)", { XX
} },
6813 { "(bad)", { XX
} },
6814 { "(bad)", { XX
} },
6815 { "(bad)", { XX
} },
6816 { "(bad)", { XX
} },
6817 { "(bad)", { XX
} },
6819 { "(bad)", { XX
} },
6820 { "(bad)", { XX
} },
6821 { "(bad)", { XX
} },
6822 { "(bad)", { XX
} },
6823 { "(bad)", { XX
} },
6824 { "(bad)", { XX
} },
6825 { "(bad)", { XX
} },
6826 { "(bad)", { XX
} },
6828 { "(bad)", { XX
} },
6829 { "(bad)", { XX
} },
6830 { "(bad)", { XX
} },
6831 { "(bad)", { XX
} },
6832 { "(bad)", { XX
} },
6833 { "(bad)", { XX
} },
6834 { "(bad)", { XX
} },
6835 { "(bad)", { XX
} },
6837 { "(bad)", { XX
} },
6838 { "(bad)", { XX
} },
6839 { "(bad)", { XX
} },
6840 { "(bad)", { XX
} },
6841 { "(bad)", { XX
} },
6842 { "(bad)", { XX
} },
6843 { "(bad)", { XX
} },
6844 { "(bad)", { XX
} },
6846 { "(bad)", { XX
} },
6847 { "(bad)", { XX
} },
6848 { "(bad)", { XX
} },
6849 { "(bad)", { XX
} },
6850 { "(bad)", { XX
} },
6851 { "(bad)", { XX
} },
6852 { "(bad)", { XX
} },
6853 { "(bad)", { XX
} },
6855 { "(bad)", { XX
} },
6856 { "(bad)", { XX
} },
6857 { "(bad)", { XX
} },
6858 { "(bad)", { XX
} },
6859 { "(bad)", { XX
} },
6860 { "(bad)", { XX
} },
6861 { "(bad)", { XX
} },
6862 { "(bad)", { XX
} },
6864 { "(bad)", { XX
} },
6865 { "(bad)", { XX
} },
6866 { "(bad)", { XX
} },
6867 { "(bad)", { XX
} },
6868 { "(bad)", { XX
} },
6869 { "(bad)", { XX
} },
6870 { "(bad)", { XX
} },
6871 { "(bad)", { XX
} },
6875 static const struct dis386 vex_table
[][256] = {
6879 { "(bad)", { XX
} },
6880 { "(bad)", { XX
} },
6881 { "(bad)", { XX
} },
6882 { "(bad)", { XX
} },
6883 { "(bad)", { XX
} },
6884 { "(bad)", { XX
} },
6885 { "(bad)", { XX
} },
6886 { "(bad)", { XX
} },
6888 { "(bad)", { XX
} },
6889 { "(bad)", { XX
} },
6890 { "(bad)", { XX
} },
6891 { "(bad)", { XX
} },
6892 { "(bad)", { XX
} },
6893 { "(bad)", { XX
} },
6894 { "(bad)", { XX
} },
6895 { "(bad)", { XX
} },
6897 { PREFIX_TABLE (PREFIX_VEX_10
) },
6898 { PREFIX_TABLE (PREFIX_VEX_11
) },
6899 { PREFIX_TABLE (PREFIX_VEX_12
) },
6900 { MOD_TABLE (MOD_VEX_13
) },
6901 { "vunpcklpX", { XM
, Vex
, EXx
} },
6902 { "vunpckhpX", { XM
, Vex
, EXx
} },
6903 { PREFIX_TABLE (PREFIX_VEX_16
) },
6904 { MOD_TABLE (MOD_VEX_17
) },
6906 { "(bad)", { XX
} },
6907 { "(bad)", { XX
} },
6908 { "(bad)", { XX
} },
6909 { "(bad)", { XX
} },
6910 { "(bad)", { XX
} },
6911 { "(bad)", { XX
} },
6912 { "(bad)", { XX
} },
6913 { "(bad)", { XX
} },
6915 { "(bad)", { XX
} },
6916 { "(bad)", { XX
} },
6917 { "(bad)", { XX
} },
6918 { "(bad)", { XX
} },
6919 { "(bad)", { XX
} },
6920 { "(bad)", { XX
} },
6921 { "(bad)", { XX
} },
6922 { "(bad)", { XX
} },
6924 { "vmovapX", { XM
, EXx
} },
6925 { "vmovapX", { EXx
, XM
} },
6926 { PREFIX_TABLE (PREFIX_VEX_2A
) },
6927 { MOD_TABLE (MOD_VEX_2B
) },
6928 { PREFIX_TABLE (PREFIX_VEX_2C
) },
6929 { PREFIX_TABLE (PREFIX_VEX_2D
) },
6930 { PREFIX_TABLE (PREFIX_VEX_2E
) },
6931 { PREFIX_TABLE (PREFIX_VEX_2F
) },
6933 { "(bad)", { XX
} },
6934 { "(bad)", { XX
} },
6935 { "(bad)", { XX
} },
6936 { "(bad)", { XX
} },
6937 { "(bad)", { XX
} },
6938 { "(bad)", { XX
} },
6939 { "(bad)", { XX
} },
6940 { "(bad)", { XX
} },
6942 { "(bad)", { XX
} },
6943 { "(bad)", { XX
} },
6944 { "(bad)", { XX
} },
6945 { "(bad)", { XX
} },
6946 { "(bad)", { XX
} },
6947 { "(bad)", { XX
} },
6948 { "(bad)", { XX
} },
6949 { "(bad)", { XX
} },
6951 { "(bad)", { XX
} },
6952 { "(bad)", { XX
} },
6953 { "(bad)", { XX
} },
6954 { "(bad)", { XX
} },
6955 { "(bad)", { XX
} },
6956 { "(bad)", { XX
} },
6957 { "(bad)", { XX
} },
6958 { "(bad)", { XX
} },
6960 { "(bad)", { XX
} },
6961 { "(bad)", { XX
} },
6962 { "(bad)", { XX
} },
6963 { "(bad)", { XX
} },
6964 { "(bad)", { XX
} },
6965 { "(bad)", { XX
} },
6966 { "(bad)", { XX
} },
6967 { "(bad)", { XX
} },
6969 { MOD_TABLE (MOD_VEX_51
) },
6970 { PREFIX_TABLE (PREFIX_VEX_51
) },
6971 { PREFIX_TABLE (PREFIX_VEX_52
) },
6972 { PREFIX_TABLE (PREFIX_VEX_53
) },
6973 { "vandpX", { XM
, Vex
, EXx
} },
6974 { "vandnpX", { XM
, Vex
, EXx
} },
6975 { "vorpX", { XM
, Vex
, EXx
} },
6976 { "vxorpX", { XM
, Vex
, EXx
} },
6978 { PREFIX_TABLE (PREFIX_VEX_58
) },
6979 { PREFIX_TABLE (PREFIX_VEX_59
) },
6980 { PREFIX_TABLE (PREFIX_VEX_5A
) },
6981 { PREFIX_TABLE (PREFIX_VEX_5B
) },
6982 { PREFIX_TABLE (PREFIX_VEX_5C
) },
6983 { PREFIX_TABLE (PREFIX_VEX_5D
) },
6984 { PREFIX_TABLE (PREFIX_VEX_5E
) },
6985 { PREFIX_TABLE (PREFIX_VEX_5F
) },
6987 { PREFIX_TABLE (PREFIX_VEX_60
) },
6988 { PREFIX_TABLE (PREFIX_VEX_61
) },
6989 { PREFIX_TABLE (PREFIX_VEX_62
) },
6990 { PREFIX_TABLE (PREFIX_VEX_63
) },
6991 { PREFIX_TABLE (PREFIX_VEX_64
) },
6992 { PREFIX_TABLE (PREFIX_VEX_65
) },
6993 { PREFIX_TABLE (PREFIX_VEX_66
) },
6994 { PREFIX_TABLE (PREFIX_VEX_67
) },
6996 { PREFIX_TABLE (PREFIX_VEX_68
) },
6997 { PREFIX_TABLE (PREFIX_VEX_69
) },
6998 { PREFIX_TABLE (PREFIX_VEX_6A
) },
6999 { PREFIX_TABLE (PREFIX_VEX_6B
) },
7000 { PREFIX_TABLE (PREFIX_VEX_6C
) },
7001 { PREFIX_TABLE (PREFIX_VEX_6D
) },
7002 { PREFIX_TABLE (PREFIX_VEX_6E
) },
7003 { PREFIX_TABLE (PREFIX_VEX_6F
) },
7005 { PREFIX_TABLE (PREFIX_VEX_70
) },
7006 { REG_TABLE (REG_VEX_71
) },
7007 { REG_TABLE (REG_VEX_72
) },
7008 { REG_TABLE (REG_VEX_73
) },
7009 { PREFIX_TABLE (PREFIX_VEX_74
) },
7010 { PREFIX_TABLE (PREFIX_VEX_75
) },
7011 { PREFIX_TABLE (PREFIX_VEX_76
) },
7012 { PREFIX_TABLE (PREFIX_VEX_77
) },
7014 { "(bad)", { XX
} },
7015 { "(bad)", { XX
} },
7016 { "(bad)", { XX
} },
7017 { "(bad)", { XX
} },
7018 { PREFIX_TABLE (PREFIX_VEX_7C
) },
7019 { PREFIX_TABLE (PREFIX_VEX_7D
) },
7020 { PREFIX_TABLE (PREFIX_VEX_7E
) },
7021 { PREFIX_TABLE (PREFIX_VEX_7F
) },
7023 { "(bad)", { XX
} },
7024 { "(bad)", { XX
} },
7025 { "(bad)", { XX
} },
7026 { "(bad)", { XX
} },
7027 { "(bad)", { XX
} },
7028 { "(bad)", { XX
} },
7029 { "(bad)", { XX
} },
7030 { "(bad)", { XX
} },
7032 { "(bad)", { XX
} },
7033 { "(bad)", { XX
} },
7034 { "(bad)", { XX
} },
7035 { "(bad)", { XX
} },
7036 { "(bad)", { XX
} },
7037 { "(bad)", { XX
} },
7038 { "(bad)", { XX
} },
7039 { "(bad)", { XX
} },
7041 { "(bad)", { XX
} },
7042 { "(bad)", { XX
} },
7043 { "(bad)", { XX
} },
7044 { "(bad)", { XX
} },
7045 { "(bad)", { XX
} },
7046 { "(bad)", { XX
} },
7047 { "(bad)", { XX
} },
7048 { "(bad)", { XX
} },
7050 { "(bad)", { XX
} },
7051 { "(bad)", { XX
} },
7052 { "(bad)", { XX
} },
7053 { "(bad)", { XX
} },
7054 { "(bad)", { XX
} },
7055 { "(bad)", { XX
} },
7056 { "(bad)", { XX
} },
7057 { "(bad)", { XX
} },
7059 { "(bad)", { XX
} },
7060 { "(bad)", { XX
} },
7061 { "(bad)", { XX
} },
7062 { "(bad)", { XX
} },
7063 { "(bad)", { XX
} },
7064 { "(bad)", { XX
} },
7065 { "(bad)", { XX
} },
7066 { "(bad)", { XX
} },
7068 { "(bad)", { XX
} },
7069 { "(bad)", { XX
} },
7070 { "(bad)", { XX
} },
7071 { "(bad)", { XX
} },
7072 { "(bad)", { XX
} },
7073 { "(bad)", { XX
} },
7074 { REG_TABLE (REG_VEX_AE
) },
7075 { "(bad)", { XX
} },
7077 { "(bad)", { XX
} },
7078 { "(bad)", { XX
} },
7079 { "(bad)", { XX
} },
7080 { "(bad)", { XX
} },
7081 { "(bad)", { XX
} },
7082 { "(bad)", { XX
} },
7083 { "(bad)", { XX
} },
7084 { "(bad)", { XX
} },
7086 { "(bad)", { XX
} },
7087 { "(bad)", { XX
} },
7088 { "(bad)", { XX
} },
7089 { "(bad)", { XX
} },
7090 { "(bad)", { XX
} },
7091 { "(bad)", { XX
} },
7092 { "(bad)", { XX
} },
7093 { "(bad)", { XX
} },
7095 { "(bad)", { XX
} },
7096 { "(bad)", { XX
} },
7097 { PREFIX_TABLE (PREFIX_VEX_C2
) },
7098 { "(bad)", { XX
} },
7099 { PREFIX_TABLE (PREFIX_VEX_C4
) },
7100 { PREFIX_TABLE (PREFIX_VEX_C5
) },
7101 { "vshufpX", { XM
, Vex
, EXx
, Ib
} },
7102 { "(bad)", { XX
} },
7104 { "(bad)", { XX
} },
7105 { "(bad)", { XX
} },
7106 { "(bad)", { XX
} },
7107 { "(bad)", { XX
} },
7108 { "(bad)", { XX
} },
7109 { "(bad)", { XX
} },
7110 { "(bad)", { XX
} },
7111 { "(bad)", { XX
} },
7113 { PREFIX_TABLE (PREFIX_VEX_D0
) },
7114 { PREFIX_TABLE (PREFIX_VEX_D1
) },
7115 { PREFIX_TABLE (PREFIX_VEX_D2
) },
7116 { PREFIX_TABLE (PREFIX_VEX_D3
) },
7117 { PREFIX_TABLE (PREFIX_VEX_D4
) },
7118 { PREFIX_TABLE (PREFIX_VEX_D5
) },
7119 { PREFIX_TABLE (PREFIX_VEX_D6
) },
7120 { PREFIX_TABLE (PREFIX_VEX_D7
) },
7122 { PREFIX_TABLE (PREFIX_VEX_D8
) },
7123 { PREFIX_TABLE (PREFIX_VEX_D9
) },
7124 { PREFIX_TABLE (PREFIX_VEX_DA
) },
7125 { PREFIX_TABLE (PREFIX_VEX_DB
) },
7126 { PREFIX_TABLE (PREFIX_VEX_DC
) },
7127 { PREFIX_TABLE (PREFIX_VEX_DD
) },
7128 { PREFIX_TABLE (PREFIX_VEX_DE
) },
7129 { PREFIX_TABLE (PREFIX_VEX_DF
) },
7131 { PREFIX_TABLE (PREFIX_VEX_E0
) },
7132 { PREFIX_TABLE (PREFIX_VEX_E1
) },
7133 { PREFIX_TABLE (PREFIX_VEX_E2
) },
7134 { PREFIX_TABLE (PREFIX_VEX_E3
) },
7135 { PREFIX_TABLE (PREFIX_VEX_E4
) },
7136 { PREFIX_TABLE (PREFIX_VEX_E5
) },
7137 { PREFIX_TABLE (PREFIX_VEX_E6
) },
7138 { PREFIX_TABLE (PREFIX_VEX_E7
) },
7140 { PREFIX_TABLE (PREFIX_VEX_E8
) },
7141 { PREFIX_TABLE (PREFIX_VEX_E9
) },
7142 { PREFIX_TABLE (PREFIX_VEX_EA
) },
7143 { PREFIX_TABLE (PREFIX_VEX_EB
) },
7144 { PREFIX_TABLE (PREFIX_VEX_EC
) },
7145 { PREFIX_TABLE (PREFIX_VEX_ED
) },
7146 { PREFIX_TABLE (PREFIX_VEX_EE
) },
7147 { PREFIX_TABLE (PREFIX_VEX_EF
) },
7149 { PREFIX_TABLE (PREFIX_VEX_F0
) },
7150 { PREFIX_TABLE (PREFIX_VEX_F1
) },
7151 { PREFIX_TABLE (PREFIX_VEX_F2
) },
7152 { PREFIX_TABLE (PREFIX_VEX_F3
) },
7153 { PREFIX_TABLE (PREFIX_VEX_F4
) },
7154 { PREFIX_TABLE (PREFIX_VEX_F5
) },
7155 { PREFIX_TABLE (PREFIX_VEX_F6
) },
7156 { PREFIX_TABLE (PREFIX_VEX_F7
) },
7158 { PREFIX_TABLE (PREFIX_VEX_F8
) },
7159 { PREFIX_TABLE (PREFIX_VEX_F9
) },
7160 { PREFIX_TABLE (PREFIX_VEX_FA
) },
7161 { PREFIX_TABLE (PREFIX_VEX_FB
) },
7162 { PREFIX_TABLE (PREFIX_VEX_FC
) },
7163 { PREFIX_TABLE (PREFIX_VEX_FD
) },
7164 { PREFIX_TABLE (PREFIX_VEX_FE
) },
7165 { "(bad)", { XX
} },
7170 { PREFIX_TABLE (PREFIX_VEX_3800
) },
7171 { PREFIX_TABLE (PREFIX_VEX_3801
) },
7172 { PREFIX_TABLE (PREFIX_VEX_3802
) },
7173 { PREFIX_TABLE (PREFIX_VEX_3803
) },
7174 { PREFIX_TABLE (PREFIX_VEX_3804
) },
7175 { PREFIX_TABLE (PREFIX_VEX_3805
) },
7176 { PREFIX_TABLE (PREFIX_VEX_3806
) },
7177 { PREFIX_TABLE (PREFIX_VEX_3807
) },
7179 { PREFIX_TABLE (PREFIX_VEX_3808
) },
7180 { PREFIX_TABLE (PREFIX_VEX_3809
) },
7181 { PREFIX_TABLE (PREFIX_VEX_380A
) },
7182 { PREFIX_TABLE (PREFIX_VEX_380B
) },
7183 { PREFIX_TABLE (PREFIX_VEX_380C
) },
7184 { PREFIX_TABLE (PREFIX_VEX_380D
) },
7185 { PREFIX_TABLE (PREFIX_VEX_380E
) },
7186 { PREFIX_TABLE (PREFIX_VEX_380F
) },
7188 { "(bad)", { XX
} },
7189 { "(bad)", { XX
} },
7190 { "(bad)", { XX
} },
7191 { "(bad)", { XX
} },
7192 { "(bad)", { XX
} },
7193 { "(bad)", { XX
} },
7194 { "(bad)", { XX
} },
7195 { PREFIX_TABLE (PREFIX_VEX_3817
) },
7197 { PREFIX_TABLE (PREFIX_VEX_3818
) },
7198 { PREFIX_TABLE (PREFIX_VEX_3819
) },
7199 { PREFIX_TABLE (PREFIX_VEX_381A
) },
7200 { "(bad)", { XX
} },
7201 { PREFIX_TABLE (PREFIX_VEX_381C
) },
7202 { PREFIX_TABLE (PREFIX_VEX_381D
) },
7203 { PREFIX_TABLE (PREFIX_VEX_381E
) },
7204 { "(bad)", { XX
} },
7206 { PREFIX_TABLE (PREFIX_VEX_3820
) },
7207 { PREFIX_TABLE (PREFIX_VEX_3821
) },
7208 { PREFIX_TABLE (PREFIX_VEX_3822
) },
7209 { PREFIX_TABLE (PREFIX_VEX_3823
) },
7210 { PREFIX_TABLE (PREFIX_VEX_3824
) },
7211 { PREFIX_TABLE (PREFIX_VEX_3825
) },
7212 { "(bad)", { XX
} },
7213 { "(bad)", { XX
} },
7215 { PREFIX_TABLE (PREFIX_VEX_3828
) },
7216 { PREFIX_TABLE (PREFIX_VEX_3829
) },
7217 { PREFIX_TABLE (PREFIX_VEX_382A
) },
7218 { PREFIX_TABLE (PREFIX_VEX_382B
) },
7219 { PREFIX_TABLE (PREFIX_VEX_382C
) },
7220 { PREFIX_TABLE (PREFIX_VEX_382D
) },
7221 { PREFIX_TABLE (PREFIX_VEX_382E
) },
7222 { PREFIX_TABLE (PREFIX_VEX_382F
) },
7224 { PREFIX_TABLE (PREFIX_VEX_3830
) },
7225 { PREFIX_TABLE (PREFIX_VEX_3831
) },
7226 { PREFIX_TABLE (PREFIX_VEX_3832
) },
7227 { PREFIX_TABLE (PREFIX_VEX_3833
) },
7228 { PREFIX_TABLE (PREFIX_VEX_3834
) },
7229 { PREFIX_TABLE (PREFIX_VEX_3835
) },
7230 { "(bad)", { XX
} },
7231 { PREFIX_TABLE (PREFIX_VEX_3837
) },
7233 { PREFIX_TABLE (PREFIX_VEX_3838
) },
7234 { PREFIX_TABLE (PREFIX_VEX_3839
) },
7235 { PREFIX_TABLE (PREFIX_VEX_383A
) },
7236 { PREFIX_TABLE (PREFIX_VEX_383B
) },
7237 { PREFIX_TABLE (PREFIX_VEX_383C
) },
7238 { PREFIX_TABLE (PREFIX_VEX_383D
) },
7239 { PREFIX_TABLE (PREFIX_VEX_383E
) },
7240 { PREFIX_TABLE (PREFIX_VEX_383F
) },
7242 { PREFIX_TABLE (PREFIX_VEX_3840
) },
7243 { PREFIX_TABLE (PREFIX_VEX_3841
) },
7244 { "(bad)", { XX
} },
7245 { "(bad)", { XX
} },
7246 { "(bad)", { XX
} },
7247 { "(bad)", { XX
} },
7248 { "(bad)", { XX
} },
7249 { "(bad)", { XX
} },
7251 { "(bad)", { XX
} },
7252 { "(bad)", { XX
} },
7253 { "(bad)", { XX
} },
7254 { "(bad)", { XX
} },
7255 { "(bad)", { XX
} },
7256 { "(bad)", { XX
} },
7257 { "(bad)", { XX
} },
7258 { "(bad)", { XX
} },
7260 { "(bad)", { XX
} },
7261 { "(bad)", { XX
} },
7262 { "(bad)", { XX
} },
7263 { "(bad)", { XX
} },
7264 { "(bad)", { XX
} },
7265 { "(bad)", { XX
} },
7266 { "(bad)", { XX
} },
7267 { "(bad)", { XX
} },
7269 { "(bad)", { XX
} },
7270 { "(bad)", { XX
} },
7271 { "(bad)", { XX
} },
7272 { "(bad)", { XX
} },
7273 { "(bad)", { XX
} },
7274 { "(bad)", { XX
} },
7275 { "(bad)", { XX
} },
7276 { "(bad)", { XX
} },
7278 { "(bad)", { XX
} },
7279 { "(bad)", { XX
} },
7280 { "(bad)", { XX
} },
7281 { "(bad)", { XX
} },
7282 { "(bad)", { XX
} },
7283 { "(bad)", { XX
} },
7284 { "(bad)", { XX
} },
7285 { "(bad)", { XX
} },
7287 { "(bad)", { XX
} },
7288 { "(bad)", { XX
} },
7289 { "(bad)", { XX
} },
7290 { "(bad)", { XX
} },
7291 { "(bad)", { XX
} },
7292 { "(bad)", { XX
} },
7293 { "(bad)", { XX
} },
7294 { "(bad)", { XX
} },
7296 { "(bad)", { XX
} },
7297 { "(bad)", { XX
} },
7298 { "(bad)", { XX
} },
7299 { "(bad)", { XX
} },
7300 { "(bad)", { XX
} },
7301 { "(bad)", { XX
} },
7302 { "(bad)", { XX
} },
7303 { "(bad)", { XX
} },
7305 { "(bad)", { XX
} },
7306 { "(bad)", { XX
} },
7307 { "(bad)", { XX
} },
7308 { "(bad)", { XX
} },
7309 { "(bad)", { XX
} },
7310 { "(bad)", { XX
} },
7311 { "(bad)", { XX
} },
7312 { "(bad)", { XX
} },
7314 { "(bad)", { XX
} },
7315 { "(bad)", { XX
} },
7316 { "(bad)", { XX
} },
7317 { "(bad)", { XX
} },
7318 { "(bad)", { XX
} },
7319 { "(bad)", { XX
} },
7320 { "(bad)", { XX
} },
7321 { "(bad)", { XX
} },
7323 { "(bad)", { XX
} },
7324 { "(bad)", { XX
} },
7325 { "(bad)", { XX
} },
7326 { "(bad)", { XX
} },
7327 { "(bad)", { XX
} },
7328 { "(bad)", { XX
} },
7329 { "(bad)", { XX
} },
7330 { "(bad)", { XX
} },
7332 { "(bad)", { XX
} },
7333 { "(bad)", { XX
} },
7334 { "(bad)", { XX
} },
7335 { "(bad)", { XX
} },
7336 { "(bad)", { XX
} },
7337 { "(bad)", { XX
} },
7338 { "(bad)", { XX
} },
7339 { "(bad)", { XX
} },
7341 { "(bad)", { XX
} },
7342 { "(bad)", { XX
} },
7343 { "(bad)", { XX
} },
7344 { "(bad)", { XX
} },
7345 { "(bad)", { XX
} },
7346 { "(bad)", { XX
} },
7347 { "(bad)", { XX
} },
7348 { "(bad)", { XX
} },
7350 { "(bad)", { XX
} },
7351 { "(bad)", { XX
} },
7352 { "(bad)", { XX
} },
7353 { "(bad)", { XX
} },
7354 { "(bad)", { XX
} },
7355 { "(bad)", { XX
} },
7356 { "(bad)", { XX
} },
7357 { "(bad)", { XX
} },
7359 { "(bad)", { XX
} },
7360 { "(bad)", { XX
} },
7361 { "(bad)", { XX
} },
7362 { "(bad)", { XX
} },
7363 { "(bad)", { XX
} },
7364 { "(bad)", { XX
} },
7365 { "(bad)", { XX
} },
7366 { "(bad)", { XX
} },
7368 { "(bad)", { XX
} },
7369 { "(bad)", { XX
} },
7370 { "(bad)", { XX
} },
7371 { "(bad)", { XX
} },
7372 { "(bad)", { XX
} },
7373 { "(bad)", { XX
} },
7374 { "(bad)", { XX
} },
7375 { "(bad)", { XX
} },
7377 { "(bad)", { XX
} },
7378 { "(bad)", { XX
} },
7379 { "(bad)", { XX
} },
7380 { "(bad)", { XX
} },
7381 { "(bad)", { XX
} },
7382 { "(bad)", { XX
} },
7383 { "(bad)", { XX
} },
7384 { "(bad)", { XX
} },
7386 { "(bad)", { XX
} },
7387 { "(bad)", { XX
} },
7388 { "(bad)", { XX
} },
7389 { "(bad)", { XX
} },
7390 { "(bad)", { XX
} },
7391 { "(bad)", { XX
} },
7392 { "(bad)", { XX
} },
7393 { "(bad)", { XX
} },
7395 { "(bad)", { XX
} },
7396 { "(bad)", { XX
} },
7397 { "(bad)", { XX
} },
7398 { "(bad)", { XX
} },
7399 { "(bad)", { XX
} },
7400 { "(bad)", { XX
} },
7401 { "(bad)", { XX
} },
7402 { "(bad)", { XX
} },
7404 { "(bad)", { XX
} },
7405 { "(bad)", { XX
} },
7406 { "(bad)", { XX
} },
7407 { "(bad)", { XX
} },
7408 { "(bad)", { XX
} },
7409 { "(bad)", { XX
} },
7410 { "(bad)", { XX
} },
7411 { "(bad)", { XX
} },
7413 { "(bad)", { XX
} },
7414 { "(bad)", { XX
} },
7415 { "(bad)", { XX
} },
7416 { "(bad)", { XX
} },
7417 { "(bad)", { XX
} },
7418 { "(bad)", { XX
} },
7419 { "(bad)", { XX
} },
7420 { "(bad)", { XX
} },
7422 { "(bad)", { XX
} },
7423 { "(bad)", { XX
} },
7424 { "(bad)", { XX
} },
7425 { "(bad)", { XX
} },
7426 { "(bad)", { XX
} },
7427 { "(bad)", { XX
} },
7428 { "(bad)", { XX
} },
7429 { "(bad)", { XX
} },
7431 { "(bad)", { XX
} },
7432 { "(bad)", { XX
} },
7433 { "(bad)", { XX
} },
7434 { "(bad)", { XX
} },
7435 { "(bad)", { XX
} },
7436 { "(bad)", { XX
} },
7437 { "(bad)", { XX
} },
7438 { "(bad)", { XX
} },
7440 { "(bad)", { XX
} },
7441 { "(bad)", { XX
} },
7442 { "(bad)", { XX
} },
7443 { "(bad)", { XX
} },
7444 { "(bad)", { XX
} },
7445 { "(bad)", { XX
} },
7446 { "(bad)", { XX
} },
7447 { "(bad)", { XX
} },
7449 { "(bad)", { XX
} },
7450 { "(bad)", { XX
} },
7451 { "(bad)", { XX
} },
7452 { "(bad)", { XX
} },
7453 { "(bad)", { XX
} },
7454 { "(bad)", { XX
} },
7455 { "(bad)", { XX
} },
7456 { "(bad)", { XX
} },
7461 { "(bad)", { XX
} },
7462 { "(bad)", { XX
} },
7463 { "(bad)", { XX
} },
7464 { "(bad)", { XX
} },
7465 { PREFIX_TABLE (PREFIX_VEX_3A04
) },
7466 { PREFIX_TABLE (PREFIX_VEX_3A05
) },
7467 { PREFIX_TABLE (PREFIX_VEX_3A06
) },
7468 { "(bad)", { XX
} },
7470 { PREFIX_TABLE (PREFIX_VEX_3A08
) },
7471 { PREFIX_TABLE (PREFIX_VEX_3A09
) },
7472 { PREFIX_TABLE (PREFIX_VEX_3A0A
) },
7473 { PREFIX_TABLE (PREFIX_VEX_3A0B
) },
7474 { PREFIX_TABLE (PREFIX_VEX_3A0C
) },
7475 { PREFIX_TABLE (PREFIX_VEX_3A0D
) },
7476 { PREFIX_TABLE (PREFIX_VEX_3A0E
) },
7477 { PREFIX_TABLE (PREFIX_VEX_3A0F
) },
7479 { "(bad)", { XX
} },
7480 { "(bad)", { XX
} },
7481 { "(bad)", { XX
} },
7482 { "(bad)", { XX
} },
7483 { PREFIX_TABLE (PREFIX_VEX_3A14
) },
7484 { PREFIX_TABLE (PREFIX_VEX_3A15
) },
7485 { PREFIX_TABLE (PREFIX_VEX_3A16
) },
7486 { PREFIX_TABLE (PREFIX_VEX_3A17
) },
7488 { PREFIX_TABLE (PREFIX_VEX_3A18
) },
7489 { PREFIX_TABLE (PREFIX_VEX_3A19
) },
7490 { "(bad)", { XX
} },
7491 { "(bad)", { XX
} },
7492 { "(bad)", { XX
} },
7493 { "(bad)", { XX
} },
7494 { "(bad)", { XX
} },
7495 { "(bad)", { XX
} },
7497 { PREFIX_TABLE (PREFIX_VEX_3A20
) },
7498 { PREFIX_TABLE (PREFIX_VEX_3A21
) },
7499 { PREFIX_TABLE (PREFIX_VEX_3A22
) },
7500 { "(bad)", { XX
} },
7501 { "(bad)", { XX
} },
7502 { "(bad)", { XX
} },
7503 { "(bad)", { XX
} },
7504 { "(bad)", { XX
} },
7506 { "(bad)", { XX
} },
7507 { "(bad)", { XX
} },
7508 { "(bad)", { XX
} },
7509 { "(bad)", { XX
} },
7510 { "(bad)", { XX
} },
7511 { "(bad)", { XX
} },
7512 { "(bad)", { XX
} },
7513 { "(bad)", { XX
} },
7515 { "(bad)", { XX
} },
7516 { "(bad)", { XX
} },
7517 { "(bad)", { XX
} },
7518 { "(bad)", { XX
} },
7519 { "(bad)", { XX
} },
7520 { "(bad)", { XX
} },
7521 { "(bad)", { XX
} },
7522 { "(bad)", { XX
} },
7524 { "(bad)", { XX
} },
7525 { "(bad)", { XX
} },
7526 { "(bad)", { XX
} },
7527 { "(bad)", { XX
} },
7528 { "(bad)", { XX
} },
7529 { "(bad)", { XX
} },
7530 { "(bad)", { XX
} },
7531 { "(bad)", { XX
} },
7533 { PREFIX_TABLE (PREFIX_VEX_3A40
) },
7534 { PREFIX_TABLE (PREFIX_VEX_3A41
) },
7535 { PREFIX_TABLE (PREFIX_VEX_3A42
) },
7536 { "(bad)", { XX
} },
7537 { "(bad)", { XX
} },
7538 { "(bad)", { XX
} },
7539 { "(bad)", { XX
} },
7540 { "(bad)", { XX
} },
7542 { PREFIX_TABLE (PREFIX_VEX_3A48
) },
7543 { PREFIX_TABLE (PREFIX_VEX_3A49
) },
7544 { PREFIX_TABLE (PREFIX_VEX_3A4A
) },
7545 { PREFIX_TABLE (PREFIX_VEX_3A4B
) },
7546 { PREFIX_TABLE (PREFIX_VEX_3A4C
) },
7547 { "(bad)", { XX
} },
7548 { "(bad)", { XX
} },
7549 { "(bad)", { XX
} },
7551 { "(bad)", { XX
} },
7552 { "(bad)", { XX
} },
7553 { "(bad)", { XX
} },
7554 { "(bad)", { XX
} },
7555 { "(bad)", { XX
} },
7556 { "(bad)", { XX
} },
7557 { "(bad)", { XX
} },
7558 { "(bad)", { XX
} },
7560 { "(bad)", { XX
} },
7561 { "(bad)", { XX
} },
7562 { "(bad)", { XX
} },
7563 { "(bad)", { XX
} },
7564 { PREFIX_TABLE (PREFIX_VEX_3A5C
) },
7565 { PREFIX_TABLE (PREFIX_VEX_3A5D
) },
7566 { PREFIX_TABLE (PREFIX_VEX_3A5E
) },
7567 { PREFIX_TABLE (PREFIX_VEX_3A5F
) },
7569 { PREFIX_TABLE (PREFIX_VEX_3A60
) },
7570 { PREFIX_TABLE (PREFIX_VEX_3A61
) },
7571 { PREFIX_TABLE (PREFIX_VEX_3A62
) },
7572 { PREFIX_TABLE (PREFIX_VEX_3A63
) },
7573 { "(bad)", { XX
} },
7574 { "(bad)", { XX
} },
7575 { "(bad)", { XX
} },
7576 { "(bad)", { XX
} },
7578 { PREFIX_TABLE (PREFIX_VEX_3A68
) },
7579 { PREFIX_TABLE (PREFIX_VEX_3A69
) },
7580 { PREFIX_TABLE (PREFIX_VEX_3A6A
) },
7581 { PREFIX_TABLE (PREFIX_VEX_3A6B
) },
7582 { PREFIX_TABLE (PREFIX_VEX_3A6C
) },
7583 { PREFIX_TABLE (PREFIX_VEX_3A6D
) },
7584 { PREFIX_TABLE (PREFIX_VEX_3A6E
) },
7585 { PREFIX_TABLE (PREFIX_VEX_3A6F
) },
7587 { "(bad)", { XX
} },
7588 { "(bad)", { XX
} },
7589 { "(bad)", { XX
} },
7590 { "(bad)", { XX
} },
7591 { "(bad)", { XX
} },
7592 { "(bad)", { XX
} },
7593 { "(bad)", { XX
} },
7594 { "(bad)", { XX
} },
7596 { PREFIX_TABLE (PREFIX_VEX_3A78
) },
7597 { PREFIX_TABLE (PREFIX_VEX_3A79
) },
7598 { PREFIX_TABLE (PREFIX_VEX_3A7A
) },
7599 { PREFIX_TABLE (PREFIX_VEX_3A7B
) },
7600 { PREFIX_TABLE (PREFIX_VEX_3A7C
) },
7601 { PREFIX_TABLE (PREFIX_VEX_3A7D
) },
7602 { PREFIX_TABLE (PREFIX_VEX_3A7E
) },
7603 { PREFIX_TABLE (PREFIX_VEX_3A7F
) },
7605 { "(bad)", { XX
} },
7606 { "(bad)", { XX
} },
7607 { "(bad)", { XX
} },
7608 { "(bad)", { XX
} },
7609 { "(bad)", { XX
} },
7610 { "(bad)", { XX
} },
7611 { "(bad)", { XX
} },
7612 { "(bad)", { XX
} },
7614 { "(bad)", { XX
} },
7615 { "(bad)", { XX
} },
7616 { "(bad)", { XX
} },
7617 { "(bad)", { XX
} },
7618 { "(bad)", { XX
} },
7619 { "(bad)", { XX
} },
7620 { "(bad)", { XX
} },
7621 { "(bad)", { XX
} },
7623 { "(bad)", { XX
} },
7624 { "(bad)", { XX
} },
7625 { "(bad)", { XX
} },
7626 { "(bad)", { XX
} },
7627 { "(bad)", { XX
} },
7628 { "(bad)", { XX
} },
7629 { "(bad)", { XX
} },
7630 { "(bad)", { XX
} },
7632 { "(bad)", { XX
} },
7633 { "(bad)", { XX
} },
7634 { "(bad)", { XX
} },
7635 { "(bad)", { XX
} },
7636 { "(bad)", { XX
} },
7637 { "(bad)", { XX
} },
7638 { "(bad)", { XX
} },
7639 { "(bad)", { XX
} },
7641 { "(bad)", { XX
} },
7642 { "(bad)", { XX
} },
7643 { "(bad)", { XX
} },
7644 { "(bad)", { XX
} },
7645 { "(bad)", { XX
} },
7646 { "(bad)", { XX
} },
7647 { "(bad)", { XX
} },
7648 { "(bad)", { XX
} },
7650 { "(bad)", { XX
} },
7651 { "(bad)", { XX
} },
7652 { "(bad)", { XX
} },
7653 { "(bad)", { XX
} },
7654 { "(bad)", { XX
} },
7655 { "(bad)", { XX
} },
7656 { "(bad)", { XX
} },
7657 { "(bad)", { XX
} },
7659 { "(bad)", { XX
} },
7660 { "(bad)", { XX
} },
7661 { "(bad)", { XX
} },
7662 { "(bad)", { XX
} },
7663 { "(bad)", { XX
} },
7664 { "(bad)", { XX
} },
7665 { "(bad)", { XX
} },
7666 { "(bad)", { XX
} },
7668 { "(bad)", { XX
} },
7669 { "(bad)", { XX
} },
7670 { "(bad)", { XX
} },
7671 { "(bad)", { XX
} },
7672 { "(bad)", { XX
} },
7673 { "(bad)", { XX
} },
7674 { "(bad)", { XX
} },
7675 { "(bad)", { XX
} },
7677 { "(bad)", { XX
} },
7678 { "(bad)", { XX
} },
7679 { "(bad)", { XX
} },
7680 { "(bad)", { XX
} },
7681 { "(bad)", { XX
} },
7682 { "(bad)", { XX
} },
7683 { "(bad)", { XX
} },
7684 { "(bad)", { XX
} },
7686 { "(bad)", { XX
} },
7687 { "(bad)", { XX
} },
7688 { "(bad)", { XX
} },
7689 { "(bad)", { XX
} },
7690 { "(bad)", { XX
} },
7691 { "(bad)", { XX
} },
7692 { "(bad)", { XX
} },
7693 { "(bad)", { XX
} },
7695 { "(bad)", { XX
} },
7696 { "(bad)", { XX
} },
7697 { "(bad)", { XX
} },
7698 { "(bad)", { XX
} },
7699 { "(bad)", { XX
} },
7700 { "(bad)", { XX
} },
7701 { "(bad)", { XX
} },
7702 { "(bad)", { XX
} },
7704 { "(bad)", { XX
} },
7705 { "(bad)", { XX
} },
7706 { "(bad)", { XX
} },
7707 { "(bad)", { XX
} },
7708 { "(bad)", { XX
} },
7709 { "(bad)", { XX
} },
7710 { "(bad)", { XX
} },
7711 { "(bad)", { XX
} },
7713 { "(bad)", { XX
} },
7714 { "(bad)", { XX
} },
7715 { "(bad)", { XX
} },
7716 { "(bad)", { XX
} },
7717 { "(bad)", { XX
} },
7718 { "(bad)", { XX
} },
7719 { "(bad)", { XX
} },
7720 { "(bad)", { XX
} },
7722 { "(bad)", { XX
} },
7723 { "(bad)", { XX
} },
7724 { "(bad)", { XX
} },
7725 { "(bad)", { XX
} },
7726 { "(bad)", { XX
} },
7727 { "(bad)", { XX
} },
7728 { "(bad)", { XX
} },
7729 { "(bad)", { XX
} },
7731 { "(bad)", { XX
} },
7732 { "(bad)", { XX
} },
7733 { "(bad)", { XX
} },
7734 { "(bad)", { XX
} },
7735 { "(bad)", { XX
} },
7736 { "(bad)", { XX
} },
7737 { "(bad)", { XX
} },
7738 { "(bad)", { XX
} },
7740 { "(bad)", { XX
} },
7741 { "(bad)", { XX
} },
7742 { "(bad)", { XX
} },
7743 { "(bad)", { XX
} },
7744 { "(bad)", { XX
} },
7745 { "(bad)", { XX
} },
7746 { "(bad)", { XX
} },
7747 { "(bad)", { XX
} },
7751 static const struct dis386 vex_len_table
[][2] = {
7752 /* VEX_LEN_10_P_1 */
7754 { "vmovss", { XMVex
, Vex128
, EXd
} },
7755 { "(bad)", { XX
} },
7758 /* VEX_LEN_10_P_3 */
7760 { "vmovsd", { XMVex
, Vex128
, EXq
} },
7761 { "(bad)", { XX
} },
7764 /* VEX_LEN_11_P_1 */
7766 { "vmovss", { EXdVex
, Vex128
, XM
} },
7767 { "(bad)", { XX
} },
7770 /* VEX_LEN_11_P_3 */
7772 { "vmovsd", { EXqVex
, Vex128
, XM
} },
7773 { "(bad)", { XX
} },
7776 /* VEX_LEN_12_P_0_M_0 */
7778 { "vmovlps", { XM
, Vex128
, EXq
} },
7779 { "(bad)", { XX
} },
7782 /* VEX_LEN_12_P_0_M_1 */
7784 { "vmovhlps", { XM
, Vex128
, EXq
} },
7785 { "(bad)", { XX
} },
7788 /* VEX_LEN_12_P_2 */
7790 { "vmovlpd", { XM
, Vex128
, EXq
} },
7791 { "(bad)", { XX
} },
7794 /* VEX_LEN_13_M_0 */
7796 { "vmovlpX", { EXq
, XM
} },
7797 { "(bad)", { XX
} },
7800 /* VEX_LEN_16_P_0_M_0 */
7802 { "vmovhps", { XM
, Vex128
, EXq
} },
7803 { "(bad)", { XX
} },
7806 /* VEX_LEN_16_P_0_M_1 */
7808 { "vmovlhps", { XM
, Vex128
, EXq
} },
7809 { "(bad)", { XX
} },
7812 /* VEX_LEN_16_P_2 */
7814 { "vmovhpd", { XM
, Vex128
, EXq
} },
7815 { "(bad)", { XX
} },
7818 /* VEX_LEN_17_M_0 */
7820 { "vmovhpX", { EXq
, XM
} },
7821 { "(bad)", { XX
} },
7824 /* VEX_LEN_2A_P_1 */
7826 { "vcvtsi2ss%LQ", { XM
, Vex128
, Ev
} },
7827 { "(bad)", { XX
} },
7830 /* VEX_LEN_2A_P_3 */
7832 { "vcvtsi2sd%LQ", { XM
, Vex128
, Ev
} },
7833 { "(bad)", { XX
} },
7836 /* VEX_LEN_2B_M_0 */
7838 { "vmovntpX", { Mx
, XM
} },
7839 { "(bad)", { XX
} },
7842 /* VEX_LEN_2C_P_1 */
7844 { "vcvttss2siY", { Gv
, EXd
} },
7845 { "(bad)", { XX
} },
7848 /* VEX_LEN_2C_P_3 */
7850 { "vcvttsd2siY", { Gv
, EXq
} },
7851 { "(bad)", { XX
} },
7854 /* VEX_LEN_2D_P_1 */
7856 { "vcvtss2siY", { Gv
, EXd
} },
7857 { "(bad)", { XX
} },
7860 /* VEX_LEN_2D_P_3 */
7862 { "vcvtsd2siY", { Gv
, EXq
} },
7863 { "(bad)", { XX
} },
7866 /* VEX_LEN_2E_P_0 */
7868 { "vucomiss", { XM
, EXd
} },
7869 { "(bad)", { XX
} },
7872 /* VEX_LEN_2E_P_2 */
7874 { "vucomisd", { XM
, EXq
} },
7875 { "(bad)", { XX
} },
7878 /* VEX_LEN_2F_P_0 */
7880 { "vcomiss", { XM
, EXd
} },
7881 { "(bad)", { XX
} },
7884 /* VEX_LEN_2F_P_2 */
7886 { "vcomisd", { XM
, EXq
} },
7887 { "(bad)", { XX
} },
7890 /* VEX_LEN_51_P_1 */
7892 { "vsqrtss", { XM
, Vex128
, EXd
} },
7893 { "(bad)", { XX
} },
7896 /* VEX_LEN_51_P_3 */
7898 { "vsqrtsd", { XM
, Vex128
, EXq
} },
7899 { "(bad)", { XX
} },
7902 /* VEX_LEN_52_P_1 */
7904 { "vrsqrtss", { XM
, Vex128
, EXd
} },
7905 { "(bad)", { XX
} },
7908 /* VEX_LEN_53_P_1 */
7910 { "vrcpss", { XM
, Vex128
, EXd
} },
7911 { "(bad)", { XX
} },
7914 /* VEX_LEN_58_P_1 */
7916 { "vaddss", { XM
, Vex128
, EXd
} },
7917 { "(bad)", { XX
} },
7920 /* VEX_LEN_58_P_3 */
7922 { "vaddsd", { XM
, Vex128
, EXq
} },
7923 { "(bad)", { XX
} },
7926 /* VEX_LEN_59_P_1 */
7928 { "vmulss", { XM
, Vex128
, EXd
} },
7929 { "(bad)", { XX
} },
7932 /* VEX_LEN_59_P_3 */
7934 { "vmulsd", { XM
, Vex128
, EXq
} },
7935 { "(bad)", { XX
} },
7938 /* VEX_LEN_5A_P_1 */
7940 { "vcvtss2sd", { XM
, Vex128
, EXd
} },
7941 { "(bad)", { XX
} },
7944 /* VEX_LEN_5A_P_3 */
7946 { "vcvtsd2ss", { XM
, Vex128
, EXq
} },
7947 { "(bad)", { XX
} },
7950 /* VEX_LEN_5C_P_1 */
7952 { "vsubss", { XM
, Vex128
, EXd
} },
7953 { "(bad)", { XX
} },
7956 /* VEX_LEN_5C_P_3 */
7958 { "vsubsd", { XM
, Vex128
, EXq
} },
7959 { "(bad)", { XX
} },
7962 /* VEX_LEN_5D_P_1 */
7964 { "vminss", { XM
, Vex128
, EXd
} },
7965 { "(bad)", { XX
} },
7968 /* VEX_LEN_5D_P_3 */
7970 { "vminsd", { XM
, Vex128
, EXq
} },
7971 { "(bad)", { XX
} },
7974 /* VEX_LEN_5E_P_1 */
7976 { "vdivss", { XM
, Vex128
, EXd
} },
7977 { "(bad)", { XX
} },
7980 /* VEX_LEN_5E_P_3 */
7982 { "vdivsd", { XM
, Vex128
, EXq
} },
7983 { "(bad)", { XX
} },
7986 /* VEX_LEN_5F_P_1 */
7988 { "vmaxss", { XM
, Vex128
, EXd
} },
7989 { "(bad)", { XX
} },
7992 /* VEX_LEN_5F_P_3 */
7994 { "vmaxsd", { XM
, Vex128
, EXq
} },
7995 { "(bad)", { XX
} },
7998 /* VEX_LEN_60_P_2 */
8000 { "vpunpcklbw", { XM
, Vex128
, EXx
} },
8001 { "(bad)", { XX
} },
8004 /* VEX_LEN_61_P_2 */
8006 { "vpunpcklwd", { XM
, Vex128
, EXx
} },
8007 { "(bad)", { XX
} },
8010 /* VEX_LEN_62_P_2 */
8012 { "vpunpckldq", { XM
, Vex128
, EXx
} },
8013 { "(bad)", { XX
} },
8016 /* VEX_LEN_63_P_2 */
8018 { "vpacksswb", { XM
, Vex128
, EXx
} },
8019 { "(bad)", { XX
} },
8022 /* VEX_LEN_64_P_2 */
8024 { "vpcmpgtb", { XM
, Vex128
, EXx
} },
8025 { "(bad)", { XX
} },
8028 /* VEX_LEN_65_P_2 */
8030 { "vpcmpgtw", { XM
, Vex128
, EXx
} },
8031 { "(bad)", { XX
} },
8034 /* VEX_LEN_66_P_2 */
8036 { "vpcmpgtd", { XM
, Vex128
, EXx
} },
8037 { "(bad)", { XX
} },
8040 /* VEX_LEN_67_P_2 */
8042 { "vpackuswb", { XM
, Vex128
, EXx
} },
8043 { "(bad)", { XX
} },
8046 /* VEX_LEN_68_P_2 */
8048 { "vpunpckhbw", { XM
, Vex128
, EXx
} },
8049 { "(bad)", { XX
} },
8052 /* VEX_LEN_69_P_2 */
8054 { "vpunpckhwd", { XM
, Vex128
, EXx
} },
8055 { "(bad)", { XX
} },
8058 /* VEX_LEN_6A_P_2 */
8060 { "vpunpckhdq", { XM
, Vex128
, EXx
} },
8061 { "(bad)", { XX
} },
8064 /* VEX_LEN_6B_P_2 */
8066 { "vpackssdw", { XM
, Vex128
, EXx
} },
8067 { "(bad)", { XX
} },
8070 /* VEX_LEN_6C_P_2 */
8072 { "vpunpcklqdq", { XM
, Vex128
, EXx
} },
8073 { "(bad)", { XX
} },
8076 /* VEX_LEN_6D_P_2 */
8078 { "vpunpckhqdq", { XM
, Vex128
, EXx
} },
8079 { "(bad)", { XX
} },
8082 /* VEX_LEN_6E_P_2 */
8084 { "vmovK", { XM
, Edq
} },
8085 { "(bad)", { XX
} },
8088 /* VEX_LEN_70_P_1 */
8090 { "vpshufhw", { XM
, EXx
, Ib
} },
8091 { "(bad)", { XX
} },
8094 /* VEX_LEN_70_P_2 */
8096 { "vpshufd", { XM
, EXx
, Ib
} },
8097 { "(bad)", { XX
} },
8100 /* VEX_LEN_70_P_3 */
8102 { "vpshuflw", { XM
, EXx
, Ib
} },
8103 { "(bad)", { XX
} },
8106 /* VEX_LEN_71_R_2_P_2 */
8108 { "vpsrlw", { Vex128
, XS
, Ib
} },
8109 { "(bad)", { XX
} },
8112 /* VEX_LEN_71_R_4_P_2 */
8114 { "vpsraw", { Vex128
, XS
, Ib
} },
8115 { "(bad)", { XX
} },
8118 /* VEX_LEN_71_R_6_P_2 */
8120 { "vpsllw", { Vex128
, XS
, Ib
} },
8121 { "(bad)", { XX
} },
8124 /* VEX_LEN_72_R_2_P_2 */
8126 { "vpsrld", { Vex128
, XS
, Ib
} },
8127 { "(bad)", { XX
} },
8130 /* VEX_LEN_72_R_4_P_2 */
8132 { "vpsrad", { Vex128
, XS
, Ib
} },
8133 { "(bad)", { XX
} },
8136 /* VEX_LEN_72_R_6_P_2 */
8138 { "vpslld", { Vex128
, XS
, Ib
} },
8139 { "(bad)", { XX
} },
8142 /* VEX_LEN_73_R_2_P_2 */
8144 { "vpsrlq", { Vex128
, XS
, Ib
} },
8145 { "(bad)", { XX
} },
8148 /* VEX_LEN_73_R_3_P_2 */
8150 { "vpsrldq", { Vex128
, XS
, Ib
} },
8151 { "(bad)", { XX
} },
8154 /* VEX_LEN_73_R_6_P_2 */
8156 { "vpsllq", { Vex128
, XS
, Ib
} },
8157 { "(bad)", { XX
} },
8160 /* VEX_LEN_73_R_7_P_2 */
8162 { "vpslldq", { Vex128
, XS
, Ib
} },
8163 { "(bad)", { XX
} },
8166 /* VEX_LEN_74_P_2 */
8168 { "vpcmpeqb", { XM
, Vex128
, EXx
} },
8169 { "(bad)", { XX
} },
8172 /* VEX_LEN_75_P_2 */
8174 { "vpcmpeqw", { XM
, Vex128
, EXx
} },
8175 { "(bad)", { XX
} },
8178 /* VEX_LEN_76_P_2 */
8180 { "vpcmpeqd", { XM
, Vex128
, EXx
} },
8181 { "(bad)", { XX
} },
8184 /* VEX_LEN_7E_P_1 */
8186 { "vmovq", { XM
, EXq
} },
8187 { "(bad)", { XX
} },
8190 /* VEX_LEN_7E_P_2 */
8192 { "vmovK", { Edq
, XM
} },
8193 { "(bad)", { XX
} },
8196 /* VEX_LEN_AE_R_2_M0 */
8198 { "vldmxcsr", { Md
} },
8199 { "(bad)", { XX
} },
8202 /* VEX_LEN_AE_R_3_M0 */
8204 { "vstmxcsr", { Md
} },
8205 { "(bad)", { XX
} },
8208 /* VEX_LEN_C2_P_1 */
8210 { "vcmpss", { XM
, Vex128
, EXd
, VCMP
} },
8211 { "(bad)", { XX
} },
8214 /* VEX_LEN_C2_P_3 */
8216 { "vcmpsd", { XM
, Vex128
, EXq
, VCMP
} },
8217 { "(bad)", { XX
} },
8220 /* VEX_LEN_C4_P_2 */
8222 { "vpinsrw", { XM
, Vex128
, Edqw
, Ib
} },
8223 { "(bad)", { XX
} },
8226 /* VEX_LEN_C5_P_2 */
8228 { "vpextrw", { Gdq
, XS
, Ib
} },
8229 { "(bad)", { XX
} },
8232 /* VEX_LEN_D1_P_2 */
8234 { "vpsrlw", { XM
, Vex128
, EXx
} },
8235 { "(bad)", { XX
} },
8238 /* VEX_LEN_D2_P_2 */
8240 { "vpsrld", { XM
, Vex128
, EXx
} },
8241 { "(bad)", { XX
} },
8244 /* VEX_LEN_D3_P_2 */
8246 { "vpsrlq", { XM
, Vex128
, EXx
} },
8247 { "(bad)", { XX
} },
8250 /* VEX_LEN_D4_P_2 */
8252 { "vpaddq", { XM
, Vex128
, EXx
} },
8253 { "(bad)", { XX
} },
8256 /* VEX_LEN_D5_P_2 */
8258 { "vpmullw", { XM
, Vex128
, EXx
} },
8259 { "(bad)", { XX
} },
8262 /* VEX_LEN_D6_P_2 */
8264 { "vmovq", { EXq
, XM
} },
8265 { "(bad)", { XX
} },
8268 /* VEX_LEN_D7_P_2_M_1 */
8270 { "vpmovmskb", { Gdq
, XS
} },
8271 { "(bad)", { XX
} },
8274 /* VEX_LEN_D8_P_2 */
8276 { "vpsubusb", { XM
, Vex128
, EXx
} },
8277 { "(bad)", { XX
} },
8280 /* VEX_LEN_D9_P_2 */
8282 { "vpsubusw", { XM
, Vex128
, EXx
} },
8283 { "(bad)", { XX
} },
8286 /* VEX_LEN_DA_P_2 */
8288 { "vpminub", { XM
, Vex128
, EXx
} },
8289 { "(bad)", { XX
} },
8292 /* VEX_LEN_DB_P_2 */
8294 { "vpand", { XM
, Vex128
, EXx
} },
8295 { "(bad)", { XX
} },
8298 /* VEX_LEN_DC_P_2 */
8300 { "vpaddusb", { XM
, Vex128
, EXx
} },
8301 { "(bad)", { XX
} },
8304 /* VEX_LEN_DD_P_2 */
8306 { "vpaddusw", { XM
, Vex128
, EXx
} },
8307 { "(bad)", { XX
} },
8310 /* VEX_LEN_DE_P_2 */
8312 { "vpmaxub", { XM
, Vex128
, EXx
} },
8313 { "(bad)", { XX
} },
8316 /* VEX_LEN_DF_P_2 */
8318 { "vpandn", { XM
, Vex128
, EXx
} },
8319 { "(bad)", { XX
} },
8322 /* VEX_LEN_E0_P_2 */
8324 { "vpavgb", { XM
, Vex128
, EXx
} },
8325 { "(bad)", { XX
} },
8328 /* VEX_LEN_E1_P_2 */
8330 { "vpsraw", { XM
, Vex128
, EXx
} },
8331 { "(bad)", { XX
} },
8334 /* VEX_LEN_E2_P_2 */
8336 { "vpsrad", { XM
, Vex128
, EXx
} },
8337 { "(bad)", { XX
} },
8340 /* VEX_LEN_E3_P_2 */
8342 { "vpavgw", { XM
, Vex128
, EXx
} },
8343 { "(bad)", { XX
} },
8346 /* VEX_LEN_E4_P_2 */
8348 { "vpmulhuw", { XM
, Vex128
, EXx
} },
8349 { "(bad)", { XX
} },
8352 /* VEX_LEN_E5_P_2 */
8354 { "vpmulhw", { XM
, Vex128
, EXx
} },
8355 { "(bad)", { XX
} },
8358 /* VEX_LEN_E7_P_2_M_0 */
8360 { "vmovntdq", { Mx
, XM
} },
8361 { "(bad)", { XX
} },
8364 /* VEX_LEN_E8_P_2 */
8366 { "vpsubsb", { XM
, Vex128
, EXx
} },
8367 { "(bad)", { XX
} },
8370 /* VEX_LEN_E9_P_2 */
8372 { "vpsubsw", { XM
, Vex128
, EXx
} },
8373 { "(bad)", { XX
} },
8376 /* VEX_LEN_EA_P_2 */
8378 { "vpminsw", { XM
, Vex128
, EXx
} },
8379 { "(bad)", { XX
} },
8382 /* VEX_LEN_EB_P_2 */
8384 { "vpor", { XM
, Vex128
, EXx
} },
8385 { "(bad)", { XX
} },
8388 /* VEX_LEN_EC_P_2 */
8390 { "vpaddsb", { XM
, Vex128
, EXx
} },
8391 { "(bad)", { XX
} },
8394 /* VEX_LEN_ED_P_2 */
8396 { "vpaddsw", { XM
, Vex128
, EXx
} },
8397 { "(bad)", { XX
} },
8400 /* VEX_LEN_EE_P_2 */
8402 { "vpmaxsw", { XM
, Vex128
, EXx
} },
8403 { "(bad)", { XX
} },
8406 /* VEX_LEN_EF_P_2 */
8408 { "vpxor", { XM
, Vex128
, EXx
} },
8409 { "(bad)", { XX
} },
8412 /* VEX_LEN_F1_P_2 */
8414 { "vpsllw", { XM
, Vex128
, EXx
} },
8415 { "(bad)", { XX
} },
8418 /* VEX_LEN_F2_P_2 */
8420 { "vpslld", { XM
, Vex128
, EXx
} },
8421 { "(bad)", { XX
} },
8424 /* VEX_LEN_F3_P_2 */
8426 { "vpsllq", { XM
, Vex128
, EXx
} },
8427 { "(bad)", { XX
} },
8430 /* VEX_LEN_F4_P_2 */
8432 { "vpmuludq", { XM
, Vex128
, EXx
} },
8433 { "(bad)", { XX
} },
8436 /* VEX_LEN_F5_P_2 */
8438 { "vpmaddwd", { XM
, Vex128
, EXx
} },
8439 { "(bad)", { XX
} },
8442 /* VEX_LEN_F6_P_2 */
8444 { "vpsadbw", { XM
, Vex128
, EXx
} },
8445 { "(bad)", { XX
} },
8448 /* VEX_LEN_F7_P_2 */
8450 { "vmaskmovdqu", { XM
, XS
} },
8451 { "(bad)", { XX
} },
8454 /* VEX_LEN_F8_P_2 */
8456 { "vpsubb", { XM
, Vex128
, EXx
} },
8457 { "(bad)", { XX
} },
8460 /* VEX_LEN_F9_P_2 */
8462 { "vpsubw", { XM
, Vex128
, EXx
} },
8463 { "(bad)", { XX
} },
8466 /* VEX_LEN_FA_P_2 */
8468 { "vpsubd", { XM
, Vex128
, EXx
} },
8469 { "(bad)", { XX
} },
8472 /* VEX_LEN_FB_P_2 */
8474 { "vpsubq", { XM
, Vex128
, EXx
} },
8475 { "(bad)", { XX
} },
8478 /* VEX_LEN_FC_P_2 */
8480 { "vpaddb", { XM
, Vex128
, EXx
} },
8481 { "(bad)", { XX
} },
8484 /* VEX_LEN_FD_P_2 */
8486 { "vpaddw", { XM
, Vex128
, EXx
} },
8487 { "(bad)", { XX
} },
8490 /* VEX_LEN_FE_P_2 */
8492 { "vpaddd", { XM
, Vex128
, EXx
} },
8493 { "(bad)", { XX
} },
8496 /* VEX_LEN_3800_P_2 */
8498 { "vpshufb", { XM
, Vex128
, EXx
} },
8499 { "(bad)", { XX
} },
8502 /* VEX_LEN_3801_P_2 */
8504 { "vphaddw", { XM
, Vex128
, EXx
} },
8505 { "(bad)", { XX
} },
8508 /* VEX_LEN_3802_P_2 */
8510 { "vphaddd", { XM
, Vex128
, EXx
} },
8511 { "(bad)", { XX
} },
8514 /* VEX_LEN_3803_P_2 */
8516 { "vphaddsw", { XM
, Vex128
, EXx
} },
8517 { "(bad)", { XX
} },
8520 /* VEX_LEN_3804_P_2 */
8522 { "vpmaddubsw", { XM
, Vex128
, EXx
} },
8523 { "(bad)", { XX
} },
8526 /* VEX_LEN_3805_P_2 */
8528 { "vphsubw", { XM
, Vex128
, EXx
} },
8529 { "(bad)", { XX
} },
8532 /* VEX_LEN_3806_P_2 */
8534 { "vphsubd", { XM
, Vex128
, EXx
} },
8535 { "(bad)", { XX
} },
8538 /* VEX_LEN_3807_P_2 */
8540 { "vphsubsw", { XM
, Vex128
, EXx
} },
8541 { "(bad)", { XX
} },
8544 /* VEX_LEN_3808_P_2 */
8546 { "vpsignb", { XM
, Vex128
, EXx
} },
8547 { "(bad)", { XX
} },
8550 /* VEX_LEN_3809_P_2 */
8552 { "vpsignw", { XM
, Vex128
, EXx
} },
8553 { "(bad)", { XX
} },
8556 /* VEX_LEN_380A_P_2 */
8558 { "vpsignd", { XM
, Vex128
, EXx
} },
8559 { "(bad)", { XX
} },
8562 /* VEX_LEN_380B_P_2 */
8564 { "vpmulhrsw", { XM
, Vex128
, EXx
} },
8565 { "(bad)", { XX
} },
8568 /* VEX_LEN_3819_P_2_M_0 */
8570 { "(bad)", { XX
} },
8571 { "vbroadcastsd", { XM
, Mq
} },
8574 /* VEX_LEN_381A_P_2_M_0 */
8576 { "(bad)", { XX
} },
8577 { "vbroadcastf128", { XM
, Mxmm
} },
8580 /* VEX_LEN_381C_P_2 */
8582 { "vpabsb", { XM
, EXx
} },
8583 { "(bad)", { XX
} },
8586 /* VEX_LEN_381D_P_2 */
8588 { "vpabsw", { XM
, EXx
} },
8589 { "(bad)", { XX
} },
8592 /* VEX_LEN_381E_P_2 */
8594 { "vpabsd", { XM
, EXx
} },
8595 { "(bad)", { XX
} },
8598 /* VEX_LEN_3820_P_2 */
8600 { "vpmovsxbw", { XM
, EXq
} },
8601 { "(bad)", { XX
} },
8604 /* VEX_LEN_3821_P_2 */
8606 { "vpmovsxbd", { XM
, EXd
} },
8607 { "(bad)", { XX
} },
8610 /* VEX_LEN_3822_P_2 */
8612 { "vpmovsxbq", { XM
, EXw
} },
8613 { "(bad)", { XX
} },
8616 /* VEX_LEN_3823_P_2 */
8618 { "vpmovsxwd", { XM
, EXq
} },
8619 { "(bad)", { XX
} },
8622 /* VEX_LEN_3824_P_2 */
8624 { "vpmovsxwq", { XM
, EXd
} },
8625 { "(bad)", { XX
} },
8628 /* VEX_LEN_3825_P_2 */
8630 { "vpmovsxdq", { XM
, EXq
} },
8631 { "(bad)", { XX
} },
8634 /* VEX_LEN_3828_P_2 */
8636 { "vpmuldq", { XM
, Vex128
, EXx
} },
8637 { "(bad)", { XX
} },
8640 /* VEX_LEN_3829_P_2 */
8642 { "vpcmpeqq", { XM
, Vex128
, EXx
} },
8643 { "(bad)", { XX
} },
8646 /* VEX_LEN_382A_P_2_M_0 */
8648 { "vmovntdqa", { XM
, Mx
} },
8649 { "(bad)", { XX
} },
8652 /* VEX_LEN_382B_P_2 */
8654 { "vpackusdw", { XM
, Vex128
, EXx
} },
8655 { "(bad)", { XX
} },
8658 /* VEX_LEN_3830_P_2 */
8660 { "vpmovzxbw", { XM
, EXq
} },
8661 { "(bad)", { XX
} },
8664 /* VEX_LEN_3831_P_2 */
8666 { "vpmovzxbd", { XM
, EXd
} },
8667 { "(bad)", { XX
} },
8670 /* VEX_LEN_3832_P_2 */
8672 { "vpmovzxbq", { XM
, EXw
} },
8673 { "(bad)", { XX
} },
8676 /* VEX_LEN_3833_P_2 */
8678 { "vpmovzxwd", { XM
, EXq
} },
8679 { "(bad)", { XX
} },
8682 /* VEX_LEN_3834_P_2 */
8684 { "vpmovzxwq", { XM
, EXd
} },
8685 { "(bad)", { XX
} },
8688 /* VEX_LEN_3835_P_2 */
8690 { "vpmovzxdq", { XM
, EXq
} },
8691 { "(bad)", { XX
} },
8694 /* VEX_LEN_3837_P_2 */
8696 { "vpcmpgtq", { XM
, Vex128
, EXx
} },
8697 { "(bad)", { XX
} },
8700 /* VEX_LEN_3838_P_2 */
8702 { "vpminsb", { XM
, Vex128
, EXx
} },
8703 { "(bad)", { XX
} },
8706 /* VEX_LEN_3839_P_2 */
8708 { "vpminsd", { XM
, Vex128
, EXx
} },
8709 { "(bad)", { XX
} },
8712 /* VEX_LEN_383A_P_2 */
8714 { "vpminuw", { XM
, Vex128
, EXx
} },
8715 { "(bad)", { XX
} },
8718 /* VEX_LEN_383B_P_2 */
8720 { "vpminud", { XM
, Vex128
, EXx
} },
8721 { "(bad)", { XX
} },
8724 /* VEX_LEN_383C_P_2 */
8726 { "vpmaxsb", { XM
, Vex128
, EXx
} },
8727 { "(bad)", { XX
} },
8730 /* VEX_LEN_383D_P_2 */
8732 { "vpmaxsd", { XM
, Vex128
, EXx
} },
8733 { "(bad)", { XX
} },
8736 /* VEX_LEN_383E_P_2 */
8738 { "vpmaxuw", { XM
, Vex128
, EXx
} },
8739 { "(bad)", { XX
} },
8742 /* VEX_LEN_383F_P_2 */
8744 { "vpmaxud", { XM
, Vex128
, EXx
} },
8745 { "(bad)", { XX
} },
8748 /* VEX_LEN_3840_P_2 */
8750 { "vpmulld", { XM
, Vex128
, EXx
} },
8751 { "(bad)", { XX
} },
8754 /* VEX_LEN_3841_P_2 */
8756 { "vphminposuw", { XM
, EXx
} },
8757 { "(bad)", { XX
} },
8760 /* VEX_LEN_3A06_P_2 */
8762 { "(bad)", { XX
} },
8763 { "vperm2f128", { XM
, Vex256
, EXx
, Ib
} },
8766 /* VEX_LEN_3A0A_P_2 */
8768 { "vroundss", { XM
, Vex128
, EXd
, Ib
} },
8769 { "(bad)", { XX
} },
8772 /* VEX_LEN_3A0B_P_2 */
8774 { "vroundsd", { XM
, Vex128
, EXq
, Ib
} },
8775 { "(bad)", { XX
} },
8778 /* VEX_LEN_3A0E_P_2 */
8780 { "vpblendw", { XM
, Vex128
, EXx
, Ib
} },
8781 { "(bad)", { XX
} },
8784 /* VEX_LEN_3A0F_P_2 */
8786 { "vpalignr", { XM
, Vex128
, EXx
, Ib
} },
8787 { "(bad)", { XX
} },
8790 /* VEX_LEN_3A14_P_2 */
8792 { "vpextrb", { Edqb
, XM
, Ib
} },
8793 { "(bad)", { XX
} },
8796 /* VEX_LEN_3A15_P_2 */
8798 { "vpextrw", { Edqw
, XM
, Ib
} },
8799 { "(bad)", { XX
} },
8802 /* VEX_LEN_3A16_P_2 */
8804 { "vpextrK", { Edq
, XM
, Ib
} },
8805 { "(bad)", { XX
} },
8808 /* VEX_LEN_3A17_P_2 */
8810 { "vextractps", { Edqd
, XM
, Ib
} },
8811 { "(bad)", { XX
} },
8814 /* VEX_LEN_3A18_P_2 */
8816 { "(bad)", { XX
} },
8817 { "vinsertf128", { XM
, Vex256
, EXxmm
, Ib
} },
8820 /* VEX_LEN_3A19_P_2 */
8822 { "(bad)", { XX
} },
8823 { "vextractf128", { EXxmm
, XM
, Ib
} },
8826 /* VEX_LEN_3A20_P_2 */
8828 { "vpinsrb", { XM
, Vex128
, Edqb
, Ib
} },
8829 { "(bad)", { XX
} },
8832 /* VEX_LEN_3A21_P_2 */
8834 { "vinsertps", { XM
, Vex128
, EXd
, Ib
} },
8835 { "(bad)", { XX
} },
8838 /* VEX_LEN_3A22_P_2 */
8840 { "vpinsrK", { XM
, Vex128
, Edq
, Ib
} },
8841 { "(bad)", { XX
} },
8844 /* VEX_LEN_3A41_P_2 */
8846 { "vdppd", { XM
, Vex128
, EXx
, Ib
} },
8847 { "(bad)", { XX
} },
8850 /* VEX_LEN_3A42_P_2 */
8852 { "vmpsadbw", { XM
, Vex128
, EXx
, Ib
} },
8853 { "(bad)", { XX
} },
8856 /* VEX_LEN_3A4C_P_2 */
8858 { "vpblendvb", { XM
, Vex128
, EXx
, XMVexI4
} },
8859 { "(bad)", { XX
} },
8862 /* VEX_LEN_3A60_P_2 */
8864 { "vpcmpestrm", { XM
, EXx
, Ib
} },
8865 { "(bad)", { XX
} },
8868 /* VEX_LEN_3A61_P_2 */
8870 { "vpcmpestri", { XM
, EXx
, Ib
} },
8871 { "(bad)", { XX
} },
8874 /* VEX_LEN_3A62_P_2 */
8876 { "vpcmpistrm", { XM
, EXx
, Ib
} },
8877 { "(bad)", { XX
} },
8880 /* VEX_LEN_3A63_P_2 */
8882 { "vpcmpistri", { XM
, EXx
, Ib
} },
8883 { "(bad)", { XX
} },
8886 /* VEX_LEN_3A6A_P_2 */
8888 { "vfmaddss", { XMVexW
, Vex128FMA
, EXdVexW
, EXdVexW
, VexI4
} },
8889 { "(bad)", { XX
} },
8892 /* VEX_LEN_3A6B_P_2 */
8894 { "vfmaddsd", { XMVexW
, Vex128FMA
, EXqVexW
, EXqVexW
, VexI4
} },
8895 { "(bad)", { XX
} },
8898 /* VEX_LEN_3A6E_P_2 */
8900 { "vfmsubss", { XMVexW
, Vex128FMA
, EXdVexW
, EXdVexW
, VexI4
} },
8901 { "(bad)", { XX
} },
8904 /* VEX_LEN_3A6F_P_2 */
8906 { "vfmsubsd", { XMVexW
, Vex128FMA
, EXqVexW
, EXqVexW
, VexI4
} },
8907 { "(bad)", { XX
} },
8910 /* VEX_LEN_3A7A_P_2 */
8912 { "vfnmaddss", { XMVexW
, Vex128FMA
, EXdVexW
, EXdVexW
, VexI4
} },
8913 { "(bad)", { XX
} },
8916 /* VEX_LEN_3A7B_P_2 */
8918 { "vfnmaddsd", { XMVexW
, Vex128FMA
, EXqVexW
, EXqVexW
, VexI4
} },
8919 { "(bad)", { XX
} },
8922 /* VEX_LEN_3A7E_P_2 */
8924 { "vfnmsubss", { XMVexW
, Vex128FMA
, EXdVexW
, EXdVexW
, VexI4
} },
8925 { "(bad)", { XX
} },
8928 /* VEX_LEN_3A7F_P_2 */
8930 { "vfnmsubsd", { XMVexW
, Vex128FMA
, EXqVexW
, EXqVexW
, VexI4
} },
8931 { "(bad)", { XX
} },
8935 static const struct dis386 mod_table
[][2] = {
8938 { "leaS", { Gv
, M
} },
8939 { "(bad)", { XX
} },
8942 /* MOD_0F01_REG_0 */
8943 { X86_64_TABLE (X86_64_0F01_REG_0
) },
8944 { RM_TABLE (RM_0F01_REG_0
) },
8947 /* MOD_0F01_REG_1 */
8948 { X86_64_TABLE (X86_64_0F01_REG_1
) },
8949 { RM_TABLE (RM_0F01_REG_1
) },
8952 /* MOD_0F01_REG_2 */
8953 { X86_64_TABLE (X86_64_0F01_REG_2
) },
8954 { RM_TABLE (RM_0F01_REG_2
) },
8957 /* MOD_0F01_REG_3 */
8958 { X86_64_TABLE (X86_64_0F01_REG_3
) },
8959 { RM_TABLE (RM_0F01_REG_3
) },
8962 /* MOD_0F01_REG_7 */
8963 { "invlpg", { Mb
} },
8964 { RM_TABLE (RM_0F01_REG_7
) },
8967 /* MOD_0F12_PREFIX_0 */
8968 { "movlps", { XM
, EXq
} },
8969 { "movhlps", { XM
, EXq
} },
8973 { "movlpX", { EXq
, XM
} },
8974 { "(bad)", { XX
} },
8977 /* MOD_0F16_PREFIX_0 */
8978 { "movhps", { XM
, EXq
} },
8979 { "movlhps", { XM
, EXq
} },
8983 { "movhpX", { EXq
, XM
} },
8984 { "(bad)", { XX
} },
8987 /* MOD_0F18_REG_0 */
8988 { "prefetchnta", { Mb
} },
8989 { "(bad)", { XX
} },
8992 /* MOD_0F18_REG_1 */
8993 { "prefetcht0", { Mb
} },
8994 { "(bad)", { XX
} },
8997 /* MOD_0F18_REG_2 */
8998 { "prefetcht1", { Mb
} },
8999 { "(bad)", { XX
} },
9002 /* MOD_0F18_REG_3 */
9003 { "prefetcht2", { Mb
} },
9004 { "(bad)", { XX
} },
9008 { "(bad)", { XX
} },
9009 { "movZ", { Rm
, Cm
} },
9013 { "(bad)", { XX
} },
9014 { "movZ", { Rm
, Dm
} },
9018 { "(bad)", { XX
} },
9019 { "movZ", { Cm
, Rm
} },
9023 { "(bad)", { XX
} },
9024 { "movZ", { Dm
, Rm
} },
9028 { THREE_BYTE_TABLE (THREE_BYTE_0F24
) },
9029 { "movL", { Rd
, Td
} },
9033 { "(bad)", { XX
} },
9034 { "movL", { Td
, Rd
} },
9037 /* MOD_0F2B_PREFIX_0 */
9038 {"movntps", { Mx
, XM
} },
9039 { "(bad)", { XX
} },
9042 /* MOD_0F2B_PREFIX_1 */
9043 {"movntss", { Md
, XM
} },
9044 { "(bad)", { XX
} },
9047 /* MOD_0F2B_PREFIX_2 */
9048 {"movntpd", { Mx
, XM
} },
9049 { "(bad)", { XX
} },
9052 /* MOD_0F2B_PREFIX_3 */
9053 {"movntsd", { Mq
, XM
} },
9054 { "(bad)", { XX
} },
9058 { "(bad)", { XX
} },
9059 { "movmskpX", { Gdq
, XS
} },
9062 /* MOD_0F71_REG_2 */
9063 { "(bad)", { XX
} },
9064 { "psrlw", { MS
, Ib
} },
9067 /* MOD_0F71_REG_4 */
9068 { "(bad)", { XX
} },
9069 { "psraw", { MS
, Ib
} },
9072 /* MOD_0F71_REG_6 */
9073 { "(bad)", { XX
} },
9074 { "psllw", { MS
, Ib
} },
9077 /* MOD_0F72_REG_2 */
9078 { "(bad)", { XX
} },
9079 { "psrld", { MS
, Ib
} },
9082 /* MOD_0F72_REG_4 */
9083 { "(bad)", { XX
} },
9084 { "psrad", { MS
, Ib
} },
9087 /* MOD_0F72_REG_6 */
9088 { "(bad)", { XX
} },
9089 { "pslld", { MS
, Ib
} },
9092 /* MOD_0F73_REG_2 */
9093 { "(bad)", { XX
} },
9094 { "psrlq", { MS
, Ib
} },
9097 /* MOD_0F73_REG_3 */
9098 { "(bad)", { XX
} },
9099 { PREFIX_TABLE (PREFIX_0F73_REG_3
) },
9102 /* MOD_0F73_REG_6 */
9103 { "(bad)", { XX
} },
9104 { "psllq", { MS
, Ib
} },
9107 /* MOD_0F73_REG_7 */
9108 { "(bad)", { XX
} },
9109 { PREFIX_TABLE (PREFIX_0F73_REG_7
) },
9112 /* MOD_0FAE_REG_0 */
9113 { "fxsave", { M
} },
9114 { "(bad)", { XX
} },
9117 /* MOD_0FAE_REG_1 */
9118 { "fxrstor", { M
} },
9119 { "(bad)", { XX
} },
9122 /* MOD_0FAE_REG_2 */
9123 { "ldmxcsr", { Md
} },
9124 { "(bad)", { XX
} },
9127 /* MOD_0FAE_REG_3 */
9128 { "stmxcsr", { Md
} },
9129 { "(bad)", { XX
} },
9132 /* MOD_0FAE_REG_4 */
9134 { "(bad)", { XX
} },
9137 /* MOD_0FAE_REG_5 */
9138 { "xrstor", { M
} },
9139 { RM_TABLE (RM_0FAE_REG_5
) },
9142 /* MOD_0FAE_REG_6 */
9143 { "xsaveopt", { M
} },
9144 { RM_TABLE (RM_0FAE_REG_6
) },
9147 /* MOD_0FAE_REG_7 */
9148 { "clflush", { Mb
} },
9149 { RM_TABLE (RM_0FAE_REG_7
) },
9153 { "lssS", { Gv
, Mp
} },
9154 { "(bad)", { XX
} },
9158 { "lfsS", { Gv
, Mp
} },
9159 { "(bad)", { XX
} },
9163 { "lgsS", { Gv
, Mp
} },
9164 { "(bad)", { XX
} },
9167 /* MOD_0FC7_REG_6 */
9168 { PREFIX_TABLE (PREFIX_0FC7_REG_6
) },
9169 { "(bad)", { XX
} },
9172 /* MOD_0FC7_REG_7 */
9173 { "vmptrst", { Mq
} },
9174 { "(bad)", { XX
} },
9178 { "(bad)", { XX
} },
9179 { "pmovmskb", { Gdq
, MS
} },
9182 /* MOD_0FE7_PREFIX_2 */
9183 { "movntdq", { Mx
, XM
} },
9184 { "(bad)", { XX
} },
9187 /* MOD_0FF0_PREFIX_3 */
9188 { "lddqu", { XM
, M
} },
9189 { "(bad)", { XX
} },
9192 /* MOD_0F382A_PREFIX_2 */
9193 { "movntdqa", { XM
, Mx
} },
9194 { "(bad)", { XX
} },
9198 { "bound{S|}", { Gv
, Ma
} },
9199 { "(bad)", { XX
} },
9203 { "lesS", { Gv
, Mp
} },
9204 { VEX_C4_TABLE (VEX_0F
) },
9208 { "ldsS", { Gv
, Mp
} },
9209 { VEX_C5_TABLE (VEX_0F
) },
9212 /* MOD_VEX_12_PREFIX_0 */
9213 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0
) },
9214 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1
) },
9218 { VEX_LEN_TABLE (VEX_LEN_13_M_0
) },
9219 { "(bad)", { XX
} },
9222 /* MOD_VEX_16_PREFIX_0 */
9223 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0
) },
9224 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1
) },
9228 { VEX_LEN_TABLE (VEX_LEN_17_M_0
) },
9229 { "(bad)", { XX
} },
9233 { VEX_LEN_TABLE (VEX_LEN_2B_M_0
) },
9234 { "(bad)", { XX
} },
9238 { "(bad)", { XX
} },
9239 { "vmovmskpX", { Gdq
, XS
} },
9242 /* MOD_VEX_71_REG_2 */
9243 { "(bad)", { XX
} },
9244 { PREFIX_TABLE (PREFIX_VEX_71_REG_2
) },
9247 /* MOD_VEX_71_REG_4 */
9248 { "(bad)", { XX
} },
9249 { PREFIX_TABLE (PREFIX_VEX_71_REG_4
) },
9252 /* MOD_VEX_71_REG_6 */
9253 { "(bad)", { XX
} },
9254 { PREFIX_TABLE (PREFIX_VEX_71_REG_6
) },
9257 /* MOD_VEX_72_REG_2 */
9258 { "(bad)", { XX
} },
9259 { PREFIX_TABLE (PREFIX_VEX_72_REG_2
) },
9262 /* MOD_VEX_72_REG_4 */
9263 { "(bad)", { XX
} },
9264 { PREFIX_TABLE (PREFIX_VEX_72_REG_4
) },
9267 /* MOD_VEX_72_REG_6 */
9268 { "(bad)", { XX
} },
9269 { PREFIX_TABLE (PREFIX_VEX_72_REG_6
) },
9272 /* MOD_VEX_73_REG_2 */
9273 { "(bad)", { XX
} },
9274 { PREFIX_TABLE (PREFIX_VEX_73_REG_2
) },
9277 /* MOD_VEX_73_REG_3 */
9278 { "(bad)", { XX
} },
9279 { PREFIX_TABLE (PREFIX_VEX_73_REG_3
) },
9282 /* MOD_VEX_73_REG_6 */
9283 { "(bad)", { XX
} },
9284 { PREFIX_TABLE (PREFIX_VEX_73_REG_6
) },
9287 /* MOD_VEX_73_REG_7 */
9288 { "(bad)", { XX
} },
9289 { PREFIX_TABLE (PREFIX_VEX_73_REG_7
) },
9292 /* MOD_VEX_AE_REG_2 */
9293 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0
) },
9294 { "(bad)", { XX
} },
9297 /* MOD_VEX_AE_REG_3 */
9298 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0
) },
9299 { "(bad)", { XX
} },
9302 /* MOD_VEX_D7_PREFIX_2 */
9303 { "(bad)", { XX
} },
9304 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1
) },
9307 /* MOD_VEX_E7_PREFIX_2 */
9308 { VEX_LEN_TABLE (VEX_LEN_E7_P_2_M_0
) },
9309 { "(bad)", { XX
} },
9312 /* MOD_VEX_F0_PREFIX_3 */
9313 { "vlddqu", { XM
, M
} },
9314 { "(bad)", { XX
} },
9317 /* MOD_VEX_3818_PREFIX_2 */
9318 { "vbroadcastss", { XM
, Md
} },
9319 { "(bad)", { XX
} },
9322 /* MOD_VEX_3819_PREFIX_2 */
9323 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0
) },
9324 { "(bad)", { XX
} },
9327 /* MOD_VEX_381A_PREFIX_2 */
9328 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0
) },
9329 { "(bad)", { XX
} },
9332 /* MOD_VEX_382A_PREFIX_2 */
9333 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0
) },
9334 { "(bad)", { XX
} },
9337 /* MOD_VEX_382C_PREFIX_2 */
9338 { "vmaskmovps", { XM
, Vex
, Mx
} },
9339 { "(bad)", { XX
} },
9342 /* MOD_VEX_382D_PREFIX_2 */
9343 { "vmaskmovpd", { XM
, Vex
, Mx
} },
9344 { "(bad)", { XX
} },
9347 /* MOD_VEX_382E_PREFIX_2 */
9348 { "vmaskmovps", { Mx
, Vex
, XM
} },
9349 { "(bad)", { XX
} },
9352 /* MOD_VEX_382F_PREFIX_2 */
9353 { "vmaskmovpd", { Mx
, Vex
, XM
} },
9354 { "(bad)", { XX
} },
9358 static const struct dis386 rm_table
[][8] = {
9361 { "(bad)", { XX
} },
9362 { "vmcall", { Skip_MODRM
} },
9363 { "vmlaunch", { Skip_MODRM
} },
9364 { "vmresume", { Skip_MODRM
} },
9365 { "vmxoff", { Skip_MODRM
} },
9366 { "(bad)", { XX
} },
9367 { "(bad)", { XX
} },
9368 { "(bad)", { XX
} },
9372 { "monitor", { { OP_Monitor
, 0 } } },
9373 { "mwait", { { OP_Mwait
, 0 } } },
9374 { "(bad)", { XX
} },
9375 { "(bad)", { XX
} },
9376 { "(bad)", { XX
} },
9377 { "(bad)", { XX
} },
9378 { "(bad)", { XX
} },
9379 { "(bad)", { XX
} },
9383 { "xgetbv", { Skip_MODRM
} },
9384 { "xsetbv", { Skip_MODRM
} },
9385 { "(bad)", { XX
} },
9386 { "(bad)", { XX
} },
9387 { "(bad)", { XX
} },
9388 { "(bad)", { XX
} },
9389 { "(bad)", { XX
} },
9390 { "(bad)", { XX
} },
9394 { "vmrun", { Skip_MODRM
} },
9395 { "vmmcall", { Skip_MODRM
} },
9396 { "vmload", { Skip_MODRM
} },
9397 { "vmsave", { Skip_MODRM
} },
9398 { "stgi", { Skip_MODRM
} },
9399 { "clgi", { Skip_MODRM
} },
9400 { "skinit", { Skip_MODRM
} },
9401 { "invlpga", { Skip_MODRM
} },
9405 { "swapgs", { Skip_MODRM
} },
9406 { "rdtscp", { Skip_MODRM
} },
9407 { "(bad)", { XX
} },
9408 { "(bad)", { XX
} },
9409 { "(bad)", { XX
} },
9410 { "(bad)", { XX
} },
9411 { "(bad)", { XX
} },
9412 { "(bad)", { XX
} },
9416 { "lfence", { Skip_MODRM
} },
9417 { "(bad)", { XX
} },
9418 { "(bad)", { XX
} },
9419 { "(bad)", { XX
} },
9420 { "(bad)", { XX
} },
9421 { "(bad)", { XX
} },
9422 { "(bad)", { XX
} },
9423 { "(bad)", { XX
} },
9427 { "mfence", { Skip_MODRM
} },
9428 { "(bad)", { XX
} },
9429 { "(bad)", { XX
} },
9430 { "(bad)", { XX
} },
9431 { "(bad)", { XX
} },
9432 { "(bad)", { XX
} },
9433 { "(bad)", { XX
} },
9434 { "(bad)", { XX
} },
9438 { "sfence", { Skip_MODRM
} },
9439 { "(bad)", { XX
} },
9440 { "(bad)", { XX
} },
9441 { "(bad)", { XX
} },
9442 { "(bad)", { XX
} },
9443 { "(bad)", { XX
} },
9444 { "(bad)", { XX
} },
9445 { "(bad)", { XX
} },
9449 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
9463 FETCH_DATA (the_info
, codep
+ 1);
9467 /* REX prefixes family. */
9484 if (address_mode
== mode_64bit
)
9490 prefixes
|= PREFIX_REPZ
;
9493 prefixes
|= PREFIX_REPNZ
;
9496 prefixes
|= PREFIX_LOCK
;
9499 prefixes
|= PREFIX_CS
;
9502 prefixes
|= PREFIX_SS
;
9505 prefixes
|= PREFIX_DS
;
9508 prefixes
|= PREFIX_ES
;
9511 prefixes
|= PREFIX_FS
;
9514 prefixes
|= PREFIX_GS
;
9517 prefixes
|= PREFIX_DATA
;
9520 prefixes
|= PREFIX_ADDR
;
9523 /* fwait is really an instruction. If there are prefixes
9524 before the fwait, they belong to the fwait, *not* to the
9525 following instruction. */
9526 if (prefixes
|| rex
)
9528 prefixes
|= PREFIX_FWAIT
;
9532 prefixes
= PREFIX_FWAIT
;
9537 /* Rex is ignored when followed by another prefix. */
9549 /* Return the name of the prefix byte PREF, or NULL if PREF is not a
9553 prefix_name (int pref
, int sizeflag
)
9555 static const char *rexes
[16] =
9560 "rex.XB", /* 0x43 */
9562 "rex.RB", /* 0x45 */
9563 "rex.RX", /* 0x46 */
9564 "rex.RXB", /* 0x47 */
9566 "rex.WB", /* 0x49 */
9567 "rex.WX", /* 0x4a */
9568 "rex.WXB", /* 0x4b */
9569 "rex.WR", /* 0x4c */
9570 "rex.WRB", /* 0x4d */
9571 "rex.WRX", /* 0x4e */
9572 "rex.WRXB", /* 0x4f */
9577 /* REX prefixes family. */
9594 return rexes
[pref
- 0x40];
9614 return (sizeflag
& DFLAG
) ? "data16" : "data32";
9616 if (address_mode
== mode_64bit
)
9617 return (sizeflag
& AFLAG
) ? "addr32" : "addr64";
9619 return (sizeflag
& AFLAG
) ? "addr16" : "addr32";
9627 static char op_out
[MAX_OPERANDS
][100];
9628 static int op_ad
, op_index
[MAX_OPERANDS
];
9629 static int two_source_ops
;
9630 static bfd_vma op_address
[MAX_OPERANDS
];
9631 static bfd_vma op_riprel
[MAX_OPERANDS
];
9632 static bfd_vma start_pc
;
9635 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
9636 * (see topic "Redundant prefixes" in the "Differences from 8086"
9637 * section of the "Virtual 8086 Mode" chapter.)
9638 * 'pc' should be the address of this instruction, it will
9639 * be used to print the target address if this is a relative jump or call
9640 * The function returns the length of this instruction in bytes.
9643 static char intel_syntax
;
9644 static char intel_mnemonic
= !SYSV386_COMPAT
;
9645 static char open_char
;
9646 static char close_char
;
9647 static char separator_char
;
9648 static char scale_char
;
9650 /* Here for backwards compatibility. When gdb stops using
9651 print_insn_i386_att and print_insn_i386_intel these functions can
9652 disappear, and print_insn_i386 be merged into print_insn. */
9654 print_insn_i386_att (bfd_vma pc
, disassemble_info
*info
)
9658 return print_insn (pc
, info
);
9662 print_insn_i386_intel (bfd_vma pc
, disassemble_info
*info
)
9666 return print_insn (pc
, info
);
9670 print_insn_i386 (bfd_vma pc
, disassemble_info
*info
)
9674 return print_insn (pc
, info
);
9678 print_i386_disassembler_options (FILE *stream
)
9680 fprintf (stream
, _("\n\
9681 The following i386/x86-64 specific disassembler options are supported for use\n\
9682 with the -M switch (multiple options should be separated by commas):\n"));
9684 fprintf (stream
, _(" x86-64 Disassemble in 64bit mode\n"));
9685 fprintf (stream
, _(" i386 Disassemble in 32bit mode\n"));
9686 fprintf (stream
, _(" i8086 Disassemble in 16bit mode\n"));
9687 fprintf (stream
, _(" att Display instruction in AT&T syntax\n"));
9688 fprintf (stream
, _(" intel Display instruction in Intel syntax\n"));
9689 fprintf (stream
, _(" att-mnemonic\n"
9690 " Display instruction in AT&T mnemonic\n"));
9691 fprintf (stream
, _(" intel-mnemonic\n"
9692 " Display instruction in Intel mnemonic\n"));
9693 fprintf (stream
, _(" addr64 Assume 64bit address size\n"));
9694 fprintf (stream
, _(" addr32 Assume 32bit address size\n"));
9695 fprintf (stream
, _(" addr16 Assume 16bit address size\n"));
9696 fprintf (stream
, _(" data32 Assume 32bit data size\n"));
9697 fprintf (stream
, _(" data16 Assume 16bit data size\n"));
9698 fprintf (stream
, _(" suffix Always display instruction suffix in AT&T syntax\n"));
9701 /* Get a pointer to struct dis386 with a valid name. */
9703 static const struct dis386
*
9704 get_valid_dis386 (const struct dis386
*dp
, disassemble_info
*info
)
9706 int index
, vex_table_index
;
9708 if (dp
->name
!= NULL
)
9711 switch (dp
->op
[0].bytemode
)
9714 dp
= ®_table
[dp
->op
[1].bytemode
][modrm
.reg
];
9718 index
= modrm
.mod
== 0x3 ? 1 : 0;
9719 dp
= &mod_table
[dp
->op
[1].bytemode
][index
];
9723 dp
= &rm_table
[dp
->op
[1].bytemode
][modrm
.rm
];
9726 case USE_PREFIX_TABLE
:
9729 /* The prefix in VEX is implicit. */
9735 case REPE_PREFIX_OPCODE
:
9738 case DATA_PREFIX_OPCODE
:
9741 case REPNE_PREFIX_OPCODE
:
9752 used_prefixes
|= (prefixes
& PREFIX_REPZ
);
9753 if (prefixes
& PREFIX_REPZ
)
9760 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
9762 used_prefixes
|= (prefixes
& PREFIX_REPNZ
);
9763 if (prefixes
& PREFIX_REPNZ
)
9766 repnz_prefix
= NULL
;
9770 used_prefixes
|= (prefixes
& PREFIX_DATA
);
9771 if (prefixes
& PREFIX_DATA
)
9779 dp
= &prefix_table
[dp
->op
[1].bytemode
][index
];
9782 case USE_X86_64_TABLE
:
9783 index
= address_mode
== mode_64bit
? 1 : 0;
9784 dp
= &x86_64_table
[dp
->op
[1].bytemode
][index
];
9787 case USE_3BYTE_TABLE
:
9788 FETCH_DATA (info
, codep
+ 2);
9790 dp
= &three_byte_table
[dp
->op
[1].bytemode
][index
];
9791 modrm
.mod
= (*codep
>> 6) & 3;
9792 modrm
.reg
= (*codep
>> 3) & 7;
9793 modrm
.rm
= *codep
& 7;
9796 case USE_VEX_LEN_TABLE
:
9813 dp
= &vex_len_table
[dp
->op
[1].bytemode
][index
];
9816 case USE_VEX_C4_TABLE
:
9817 FETCH_DATA (info
, codep
+ 3);
9818 /* All bits in the REX prefix are ignored. */
9820 rex
= ~(*codep
>> 5) & 0x7;
9821 switch ((*codep
& 0x1f))
9826 vex_table_index
= 0;
9829 vex_table_index
= 1;
9832 vex_table_index
= 2;
9836 vex
.w
= *codep
& 0x80;
9837 if (vex
.w
&& address_mode
== mode_64bit
)
9840 vex
.register_specifier
= (~(*codep
>> 3)) & 0xf;
9841 if (address_mode
!= mode_64bit
9842 && vex
.register_specifier
> 0x7)
9845 vex
.length
= (*codep
& 0x4) ? 256 : 128;
9846 switch ((*codep
& 0x3))
9852 vex
.prefix
= DATA_PREFIX_OPCODE
;
9855 vex
.prefix
= REPE_PREFIX_OPCODE
;
9858 vex
.prefix
= REPNE_PREFIX_OPCODE
;
9865 dp
= &vex_table
[vex_table_index
][index
];
9866 /* There is no MODRM byte for VEX [82|77]. */
9867 if (index
!= 0x77 && index
!= 0x82)
9869 FETCH_DATA (info
, codep
+ 1);
9870 modrm
.mod
= (*codep
>> 6) & 3;
9871 modrm
.reg
= (*codep
>> 3) & 7;
9872 modrm
.rm
= *codep
& 7;
9876 case USE_VEX_C5_TABLE
:
9877 FETCH_DATA (info
, codep
+ 2);
9878 /* All bits in the REX prefix are ignored. */
9880 rex
= (*codep
& 0x80) ? 0 : REX_R
;
9882 vex
.register_specifier
= (~(*codep
>> 3)) & 0xf;
9883 if (address_mode
!= mode_64bit
9884 && vex
.register_specifier
> 0x7)
9887 vex
.length
= (*codep
& 0x4) ? 256 : 128;
9888 switch ((*codep
& 0x3))
9894 vex
.prefix
= DATA_PREFIX_OPCODE
;
9897 vex
.prefix
= REPE_PREFIX_OPCODE
;
9900 vex
.prefix
= REPNE_PREFIX_OPCODE
;
9907 dp
= &vex_table
[dp
->op
[1].bytemode
][index
];
9908 /* There is no MODRM byte for VEX [82|77]. */
9909 if (index
!= 0x77 && index
!= 0x82)
9911 FETCH_DATA (info
, codep
+ 1);
9912 modrm
.mod
= (*codep
>> 6) & 3;
9913 modrm
.reg
= (*codep
>> 3) & 7;
9914 modrm
.rm
= *codep
& 7;
9919 oappend (INTERNAL_DISASSEMBLER_ERROR
);
9923 if (dp
->name
!= NULL
)
9926 return get_valid_dis386 (dp
, info
);
9930 print_insn (bfd_vma pc
, disassemble_info
*info
)
9932 const struct dis386
*dp
;
9934 char *op_txt
[MAX_OPERANDS
];
9938 struct dis_private priv
;
9940 char prefix_obuf
[32];
9943 if (info
->mach
== bfd_mach_x86_64_intel_syntax
9944 || info
->mach
== bfd_mach_x86_64
)
9945 address_mode
= mode_64bit
;
9947 address_mode
= mode_32bit
;
9949 if (intel_syntax
== (char) -1)
9950 intel_syntax
= (info
->mach
== bfd_mach_i386_i386_intel_syntax
9951 || info
->mach
== bfd_mach_x86_64_intel_syntax
);
9953 if (info
->mach
== bfd_mach_i386_i386
9954 || info
->mach
== bfd_mach_x86_64
9955 || info
->mach
== bfd_mach_i386_i386_intel_syntax
9956 || info
->mach
== bfd_mach_x86_64_intel_syntax
)
9957 priv
.orig_sizeflag
= AFLAG
| DFLAG
;
9958 else if (info
->mach
== bfd_mach_i386_i8086
)
9959 priv
.orig_sizeflag
= 0;
9963 for (p
= info
->disassembler_options
; p
!= NULL
; )
9965 if (CONST_STRNEQ (p
, "x86-64"))
9967 address_mode
= mode_64bit
;
9968 priv
.orig_sizeflag
= AFLAG
| DFLAG
;
9970 else if (CONST_STRNEQ (p
, "i386"))
9972 address_mode
= mode_32bit
;
9973 priv
.orig_sizeflag
= AFLAG
| DFLAG
;
9975 else if (CONST_STRNEQ (p
, "i8086"))
9977 address_mode
= mode_16bit
;
9978 priv
.orig_sizeflag
= 0;
9980 else if (CONST_STRNEQ (p
, "intel"))
9983 if (CONST_STRNEQ (p
+ 5, "-mnemonic"))
9986 else if (CONST_STRNEQ (p
, "att"))
9989 if (CONST_STRNEQ (p
+ 3, "-mnemonic"))
9992 else if (CONST_STRNEQ (p
, "addr"))
9994 if (address_mode
== mode_64bit
)
9996 if (p
[4] == '3' && p
[5] == '2')
9997 priv
.orig_sizeflag
&= ~AFLAG
;
9998 else if (p
[4] == '6' && p
[5] == '4')
9999 priv
.orig_sizeflag
|= AFLAG
;
10003 if (p
[4] == '1' && p
[5] == '6')
10004 priv
.orig_sizeflag
&= ~AFLAG
;
10005 else if (p
[4] == '3' && p
[5] == '2')
10006 priv
.orig_sizeflag
|= AFLAG
;
10009 else if (CONST_STRNEQ (p
, "data"))
10011 if (p
[4] == '1' && p
[5] == '6')
10012 priv
.orig_sizeflag
&= ~DFLAG
;
10013 else if (p
[4] == '3' && p
[5] == '2')
10014 priv
.orig_sizeflag
|= DFLAG
;
10016 else if (CONST_STRNEQ (p
, "suffix"))
10017 priv
.orig_sizeflag
|= SUFFIX_ALWAYS
;
10019 p
= strchr (p
, ',');
10026 names64
= intel_names64
;
10027 names32
= intel_names32
;
10028 names16
= intel_names16
;
10029 names8
= intel_names8
;
10030 names8rex
= intel_names8rex
;
10031 names_seg
= intel_names_seg
;
10032 index64
= intel_index64
;
10033 index32
= intel_index32
;
10034 index16
= intel_index16
;
10037 separator_char
= '+';
10042 names64
= att_names64
;
10043 names32
= att_names32
;
10044 names16
= att_names16
;
10045 names8
= att_names8
;
10046 names8rex
= att_names8rex
;
10047 names_seg
= att_names_seg
;
10048 index64
= att_index64
;
10049 index32
= att_index32
;
10050 index16
= att_index16
;
10053 separator_char
= ',';
10057 /* The output looks better if we put 7 bytes on a line, since that
10058 puts most long word instructions on a single line. */
10059 info
->bytes_per_line
= 7;
10061 info
->private_data
= &priv
;
10062 priv
.max_fetched
= priv
.the_buffer
;
10063 priv
.insn_start
= pc
;
10066 for (i
= 0; i
< MAX_OPERANDS
; ++i
)
10074 start_codep
= priv
.the_buffer
;
10075 codep
= priv
.the_buffer
;
10077 if (setjmp (priv
.bailout
) != 0)
10081 /* Getting here means we tried for data but didn't get it. That
10082 means we have an incomplete instruction of some sort. Just
10083 print the first byte as a prefix or a .byte pseudo-op. */
10084 if (codep
> priv
.the_buffer
)
10086 name
= prefix_name (priv
.the_buffer
[0], priv
.orig_sizeflag
);
10088 (*info
->fprintf_func
) (info
->stream
, "%s", name
);
10091 /* Just print the first byte as a .byte instruction. */
10092 (*info
->fprintf_func
) (info
->stream
, ".byte 0x%x",
10093 (unsigned int) priv
.the_buffer
[0]);
10105 insn_codep
= codep
;
10106 sizeflag
= priv
.orig_sizeflag
;
10108 FETCH_DATA (info
, codep
+ 1);
10109 two_source_ops
= (*codep
== 0x62) || (*codep
== 0xc8);
10111 if (((prefixes
& PREFIX_FWAIT
)
10112 && ((*codep
< 0xd8) || (*codep
> 0xdf)))
10113 || (rex
&& rex_used
))
10117 /* fwait not followed by floating point instruction, or rex followed
10118 by other prefixes. Print the first prefix. */
10119 name
= prefix_name (priv
.the_buffer
[0], priv
.orig_sizeflag
);
10121 name
= INTERNAL_DISASSEMBLER_ERROR
;
10122 (*info
->fprintf_func
) (info
->stream
, "%s", name
);
10127 if (*codep
== 0x0f)
10129 unsigned char threebyte
;
10130 FETCH_DATA (info
, codep
+ 2);
10131 threebyte
= *++codep
;
10132 dp
= &dis386_twobyte
[threebyte
];
10133 need_modrm
= twobyte_has_modrm
[*codep
];
10138 dp
= &dis386
[*codep
];
10139 need_modrm
= onebyte_has_modrm
[*codep
];
10143 if ((prefixes
& PREFIX_REPZ
))
10145 repz_prefix
= "repz ";
10146 used_prefixes
|= PREFIX_REPZ
;
10149 repz_prefix
= NULL
;
10151 if ((prefixes
& PREFIX_REPNZ
))
10153 repnz_prefix
= "repnz ";
10154 used_prefixes
|= PREFIX_REPNZ
;
10157 repnz_prefix
= NULL
;
10159 if ((prefixes
& PREFIX_LOCK
))
10161 lock_prefix
= "lock ";
10162 used_prefixes
|= PREFIX_LOCK
;
10165 lock_prefix
= NULL
;
10167 addr_prefix
= NULL
;
10168 if (prefixes
& PREFIX_ADDR
)
10171 if (dp
->op
[2].bytemode
!= loop_jcxz_mode
|| intel_syntax
)
10173 if ((sizeflag
& AFLAG
) || address_mode
== mode_64bit
)
10174 addr_prefix
= "addr32 ";
10176 addr_prefix
= "addr16 ";
10177 used_prefixes
|= PREFIX_ADDR
;
10181 data_prefix
= NULL
;
10182 if ((prefixes
& PREFIX_DATA
))
10185 if (dp
->op
[2].bytemode
== cond_jump_mode
10186 && dp
->op
[0].bytemode
== v_mode
10189 if (sizeflag
& DFLAG
)
10190 data_prefix
= "data32 ";
10192 data_prefix
= "data16 ";
10193 used_prefixes
|= PREFIX_DATA
;
10199 FETCH_DATA (info
, codep
+ 1);
10200 modrm
.mod
= (*codep
>> 6) & 3;
10201 modrm
.reg
= (*codep
>> 3) & 7;
10202 modrm
.rm
= *codep
& 7;
10205 if (dp
->name
== NULL
&& dp
->op
[0].bytemode
== FLOATCODE
)
10207 dofloat (sizeflag
);
10214 dp
= get_valid_dis386 (dp
, info
);
10215 if (dp
!= NULL
&& putop (dp
->name
, sizeflag
) == 0)
10217 for (i
= 0; i
< MAX_OPERANDS
; ++i
)
10220 op_ad
= MAX_OPERANDS
- 1 - i
;
10222 (*dp
->op
[i
].rtn
) (dp
->op
[i
].bytemode
, sizeflag
);
10227 /* See if any prefixes were not used. If so, print the first one
10228 separately. If we don't do this, we'll wind up printing an
10229 instruction stream which does not precisely correspond to the
10230 bytes we are disassembling. */
10231 if ((prefixes
& ~used_prefixes
) != 0)
10235 name
= prefix_name (priv
.the_buffer
[0], priv
.orig_sizeflag
);
10237 name
= INTERNAL_DISASSEMBLER_ERROR
;
10238 (*info
->fprintf_func
) (info
->stream
, "%s", name
);
10241 if ((rex_original
& ~rex_used
) || rex_ignored
)
10244 name
= prefix_name (rex_original
, priv
.orig_sizeflag
);
10246 name
= INTERNAL_DISASSEMBLER_ERROR
;
10247 (*info
->fprintf_func
) (info
->stream
, "%s ", name
);
10250 prefix_obuf
[0] = 0;
10251 prefix_obufp
= prefix_obuf
;
10253 prefix_obufp
= stpcpy (prefix_obufp
, lock_prefix
);
10255 prefix_obufp
= stpcpy (prefix_obufp
, repz_prefix
);
10257 prefix_obufp
= stpcpy (prefix_obufp
, repnz_prefix
);
10259 prefix_obufp
= stpcpy (prefix_obufp
, addr_prefix
);
10261 prefix_obufp
= stpcpy (prefix_obufp
, data_prefix
);
10263 if (prefix_obuf
[0] != 0)
10264 (*info
->fprintf_func
) (info
->stream
, "%s", prefix_obuf
);
10266 obufp
= obuf
+ strlen (obuf
);
10267 for (i
= strlen (obuf
) + strlen (prefix_obuf
); i
< 6; i
++)
10270 (*info
->fprintf_func
) (info
->stream
, "%s", obuf
);
10272 /* The enter and bound instructions are printed with operands in the same
10273 order as the intel book; everything else is printed in reverse order. */
10274 if (intel_syntax
|| two_source_ops
)
10278 for (i
= 0; i
< MAX_OPERANDS
; ++i
)
10279 op_txt
[i
] = op_out
[i
];
10281 for (i
= 0; i
< (MAX_OPERANDS
>> 1); ++i
)
10283 op_ad
= op_index
[i
];
10284 op_index
[i
] = op_index
[MAX_OPERANDS
- 1 - i
];
10285 op_index
[MAX_OPERANDS
- 1 - i
] = op_ad
;
10286 riprel
= op_riprel
[i
];
10287 op_riprel
[i
] = op_riprel
[MAX_OPERANDS
- 1 - i
];
10288 op_riprel
[MAX_OPERANDS
- 1 - i
] = riprel
;
10293 for (i
= 0; i
< MAX_OPERANDS
; ++i
)
10294 op_txt
[MAX_OPERANDS
- 1 - i
] = op_out
[i
];
10298 for (i
= 0; i
< MAX_OPERANDS
; ++i
)
10302 (*info
->fprintf_func
) (info
->stream
, ",");
10303 if (op_index
[i
] != -1 && !op_riprel
[i
])
10304 (*info
->print_address_func
) ((bfd_vma
) op_address
[op_index
[i
]], info
);
10306 (*info
->fprintf_func
) (info
->stream
, "%s", op_txt
[i
]);
10310 for (i
= 0; i
< MAX_OPERANDS
; i
++)
10311 if (op_index
[i
] != -1 && op_riprel
[i
])
10313 (*info
->fprintf_func
) (info
->stream
, " # ");
10314 (*info
->print_address_func
) ((bfd_vma
) (start_pc
+ codep
- start_codep
10315 + op_address
[op_index
[i
]]), info
);
10318 return codep
- priv
.the_buffer
;
10321 static const char *float_mem
[] = {
10396 static const unsigned char float_mem_mode
[] = {
10471 #define ST { OP_ST, 0 }
10472 #define STi { OP_STi, 0 }
10474 #define FGRPd9_2 NULL, { { NULL, 0 } }
10475 #define FGRPd9_4 NULL, { { NULL, 1 } }
10476 #define FGRPd9_5 NULL, { { NULL, 2 } }
10477 #define FGRPd9_6 NULL, { { NULL, 3 } }
10478 #define FGRPd9_7 NULL, { { NULL, 4 } }
10479 #define FGRPda_5 NULL, { { NULL, 5 } }
10480 #define FGRPdb_4 NULL, { { NULL, 6 } }
10481 #define FGRPde_3 NULL, { { NULL, 7 } }
10482 #define FGRPdf_4 NULL, { { NULL, 8 } }
10484 static const struct dis386 float_reg
[][8] = {
10487 { "fadd", { ST
, STi
} },
10488 { "fmul", { ST
, STi
} },
10489 { "fcom", { STi
} },
10490 { "fcomp", { STi
} },
10491 { "fsub", { ST
, STi
} },
10492 { "fsubr", { ST
, STi
} },
10493 { "fdiv", { ST
, STi
} },
10494 { "fdivr", { ST
, STi
} },
10498 { "fld", { STi
} },
10499 { "fxch", { STi
} },
10501 { "(bad)", { XX
} },
10509 { "fcmovb", { ST
, STi
} },
10510 { "fcmove", { ST
, STi
} },
10511 { "fcmovbe",{ ST
, STi
} },
10512 { "fcmovu", { ST
, STi
} },
10513 { "(bad)", { XX
} },
10515 { "(bad)", { XX
} },
10516 { "(bad)", { XX
} },
10520 { "fcmovnb",{ ST
, STi
} },
10521 { "fcmovne",{ ST
, STi
} },
10522 { "fcmovnbe",{ ST
, STi
} },
10523 { "fcmovnu",{ ST
, STi
} },
10525 { "fucomi", { ST
, STi
} },
10526 { "fcomi", { ST
, STi
} },
10527 { "(bad)", { XX
} },
10531 { "fadd", { STi
, ST
} },
10532 { "fmul", { STi
, ST
} },
10533 { "(bad)", { XX
} },
10534 { "(bad)", { XX
} },
10535 { "fsub!M", { STi
, ST
} },
10536 { "fsubM", { STi
, ST
} },
10537 { "fdiv!M", { STi
, ST
} },
10538 { "fdivM", { STi
, ST
} },
10542 { "ffree", { STi
} },
10543 { "(bad)", { XX
} },
10544 { "fst", { STi
} },
10545 { "fstp", { STi
} },
10546 { "fucom", { STi
} },
10547 { "fucomp", { STi
} },
10548 { "(bad)", { XX
} },
10549 { "(bad)", { XX
} },
10553 { "faddp", { STi
, ST
} },
10554 { "fmulp", { STi
, ST
} },
10555 { "(bad)", { XX
} },
10557 { "fsub!Mp", { STi
, ST
} },
10558 { "fsubMp", { STi
, ST
} },
10559 { "fdiv!Mp", { STi
, ST
} },
10560 { "fdivMp", { STi
, ST
} },
10564 { "ffreep", { STi
} },
10565 { "(bad)", { XX
} },
10566 { "(bad)", { XX
} },
10567 { "(bad)", { XX
} },
10569 { "fucomip", { ST
, STi
} },
10570 { "fcomip", { ST
, STi
} },
10571 { "(bad)", { XX
} },
10575 static char *fgrps
[][8] = {
10578 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10583 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
10588 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
10593 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
10598 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
10603 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10608 "feni(287 only)","fdisi(287 only)","fNclex","fNinit",
10609 "fNsetpm(287 only)","(bad)","(bad)","(bad)",
10614 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10619 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10624 OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED
,
10625 int sizeflag ATTRIBUTE_UNUSED
)
10627 /* Skip mod/rm byte. */
10633 dofloat (int sizeflag
)
10635 const struct dis386
*dp
;
10636 unsigned char floatop
;
10638 floatop
= codep
[-1];
10640 if (modrm
.mod
!= 3)
10642 int fp_indx
= (floatop
- 0xd8) * 8 + modrm
.reg
;
10644 putop (float_mem
[fp_indx
], sizeflag
);
10647 OP_E (float_mem_mode
[fp_indx
], sizeflag
);
10650 /* Skip mod/rm byte. */
10654 dp
= &float_reg
[floatop
- 0xd8][modrm
.reg
];
10655 if (dp
->name
== NULL
)
10657 putop (fgrps
[dp
->op
[0].bytemode
][modrm
.rm
], sizeflag
);
10659 /* Instruction fnstsw is only one with strange arg. */
10660 if (floatop
== 0xdf && codep
[-1] == 0xe0)
10661 strcpy (op_out
[0], names16
[0]);
10665 putop (dp
->name
, sizeflag
);
10670 (*dp
->op
[0].rtn
) (dp
->op
[0].bytemode
, sizeflag
);
10675 (*dp
->op
[1].rtn
) (dp
->op
[1].bytemode
, sizeflag
);
10680 OP_ST (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
10682 oappend ("%st" + intel_syntax
);
10686 OP_STi (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
10688 sprintf (scratchbuf
, "%%st(%d)", modrm
.rm
);
10689 oappend (scratchbuf
+ intel_syntax
);
10692 /* Capital letters in template are macros. */
10694 putop (const char *template, int sizeflag
)
10699 unsigned int l
= 0, len
= 1;
10702 #define SAVE_LAST(c) \
10703 if (l < len && l < sizeof (last)) \
10708 for (p
= template; *p
; p
++)
10725 while (*++p
!= '|')
10726 if (*p
== '}' || *p
== '\0')
10729 /* Fall through. */
10734 while (*++p
!= '}')
10745 if (modrm
.mod
!= 3 || (sizeflag
& SUFFIX_ALWAYS
))
10751 if (sizeflag
& SUFFIX_ALWAYS
)
10755 if (intel_syntax
&& !alt
)
10757 if ((prefixes
& PREFIX_DATA
) || (sizeflag
& SUFFIX_ALWAYS
))
10759 if (sizeflag
& DFLAG
)
10760 *obufp
++ = intel_syntax
? 'd' : 'l';
10762 *obufp
++ = intel_syntax
? 'w' : 's';
10763 used_prefixes
|= (prefixes
& PREFIX_DATA
);
10767 if (intel_syntax
|| !(sizeflag
& SUFFIX_ALWAYS
))
10770 if (modrm
.mod
== 3)
10774 else if (sizeflag
& DFLAG
)
10775 *obufp
++ = intel_syntax
? 'd' : 'l';
10778 used_prefixes
|= (prefixes
& PREFIX_DATA
);
10783 case 'E': /* For jcxz/jecxz */
10784 if (address_mode
== mode_64bit
)
10786 if (sizeflag
& AFLAG
)
10792 if (sizeflag
& AFLAG
)
10794 used_prefixes
|= (prefixes
& PREFIX_ADDR
);
10799 if ((prefixes
& PREFIX_ADDR
) || (sizeflag
& SUFFIX_ALWAYS
))
10801 if (sizeflag
& AFLAG
)
10802 *obufp
++ = address_mode
== mode_64bit
? 'q' : 'l';
10804 *obufp
++ = address_mode
== mode_64bit
? 'l' : 'w';
10805 used_prefixes
|= (prefixes
& PREFIX_ADDR
);
10809 if (intel_syntax
|| (obufp
[-1] != 's' && !(sizeflag
& SUFFIX_ALWAYS
)))
10811 if ((rex
& REX_W
) || (sizeflag
& DFLAG
))
10815 if (!(rex
& REX_W
))
10816 used_prefixes
|= (prefixes
& PREFIX_DATA
);
10821 if ((prefixes
& (PREFIX_CS
| PREFIX_DS
)) == PREFIX_CS
10822 || (prefixes
& (PREFIX_CS
| PREFIX_DS
)) == PREFIX_DS
)
10824 used_prefixes
|= prefixes
& (PREFIX_CS
| PREFIX_DS
);
10827 if (prefixes
& PREFIX_DS
)
10848 if (address_mode
== mode_64bit
&& (sizeflag
& SUFFIX_ALWAYS
))
10853 /* Fall through. */
10856 if (l
!= 0 || len
!= 1)
10864 if (sizeflag
& SUFFIX_ALWAYS
)
10868 if (intel_mnemonic
!= cond
)
10872 if ((prefixes
& PREFIX_FWAIT
) == 0)
10875 used_prefixes
|= PREFIX_FWAIT
;
10881 else if (intel_syntax
&& (sizeflag
& DFLAG
))
10885 if (!(rex
& REX_W
))
10886 used_prefixes
|= (prefixes
& PREFIX_DATA
);
10891 if (address_mode
== mode_64bit
&& (sizeflag
& DFLAG
))
10896 /* Fall through. */
10900 if ((prefixes
& PREFIX_DATA
)
10902 || (sizeflag
& SUFFIX_ALWAYS
))
10909 if (sizeflag
& DFLAG
)
10914 used_prefixes
|= (prefixes
& PREFIX_DATA
);
10920 if (address_mode
== mode_64bit
&& (sizeflag
& DFLAG
))
10922 if (modrm
.mod
!= 3 || (sizeflag
& SUFFIX_ALWAYS
))
10926 /* Fall through. */
10929 if (l
== 0 && len
== 1)
10932 if (intel_syntax
&& !alt
)
10935 if (modrm
.mod
!= 3 || (sizeflag
& SUFFIX_ALWAYS
))
10941 if (sizeflag
& DFLAG
)
10942 *obufp
++ = intel_syntax
? 'd' : 'l';
10946 used_prefixes
|= (prefixes
& PREFIX_DATA
);
10951 if (l
!= 1 || len
!= 2 || last
[0] != 'L')
10957 || (modrm
.mod
== 3 && !(sizeflag
& SUFFIX_ALWAYS
)))
10972 else if (sizeflag
& DFLAG
)
10981 if (intel_syntax
&& !p
[1]
10982 && ((rex
& REX_W
) || (sizeflag
& DFLAG
)))
10984 if (!(rex
& REX_W
))
10985 used_prefixes
|= (prefixes
& PREFIX_DATA
);
10990 if (address_mode
== mode_64bit
&& (sizeflag
& DFLAG
))
10992 if (sizeflag
& SUFFIX_ALWAYS
)
10996 /* Fall through. */
11000 if (sizeflag
& SUFFIX_ALWAYS
)
11006 if (sizeflag
& DFLAG
)
11010 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11015 if (l
!= 0 || len
!= 1)
11020 if (need_vex
&& vex
.prefix
)
11022 if (vex
.prefix
== DATA_PREFIX_OPCODE
)
11027 else if (prefixes
& PREFIX_DATA
)
11031 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11034 if (l
== 0 && len
== 1)
11036 if (intel_syntax
|| !(sizeflag
& SUFFIX_ALWAYS
))
11047 if (l
!= 1 || len
!= 2 || last
[0] != 'X')
11055 || (modrm
.mod
== 3 && !(sizeflag
& SUFFIX_ALWAYS
)))
11057 switch (vex
.length
)
11070 /* implicit operand size 'l' for i386 or 'q' for x86-64 */
11072 /* operand size flag for cwtl, cbtw */
11081 else if (sizeflag
& DFLAG
)
11085 if (!(rex
& REX_W
))
11086 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11096 oappend (const char *s
)
11099 obufp
+= strlen (s
);
11105 if (prefixes
& PREFIX_CS
)
11107 used_prefixes
|= PREFIX_CS
;
11108 oappend ("%cs:" + intel_syntax
);
11110 if (prefixes
& PREFIX_DS
)
11112 used_prefixes
|= PREFIX_DS
;
11113 oappend ("%ds:" + intel_syntax
);
11115 if (prefixes
& PREFIX_SS
)
11117 used_prefixes
|= PREFIX_SS
;
11118 oappend ("%ss:" + intel_syntax
);
11120 if (prefixes
& PREFIX_ES
)
11122 used_prefixes
|= PREFIX_ES
;
11123 oappend ("%es:" + intel_syntax
);
11125 if (prefixes
& PREFIX_FS
)
11127 used_prefixes
|= PREFIX_FS
;
11128 oappend ("%fs:" + intel_syntax
);
11130 if (prefixes
& PREFIX_GS
)
11132 used_prefixes
|= PREFIX_GS
;
11133 oappend ("%gs:" + intel_syntax
);
11138 OP_indirE (int bytemode
, int sizeflag
)
11142 OP_E (bytemode
, sizeflag
);
11146 print_operand_value (char *buf
, int hex
, bfd_vma disp
)
11148 if (address_mode
== mode_64bit
)
11156 sprintf_vma (tmp
, disp
);
11157 for (i
= 0; tmp
[i
] == '0' && tmp
[i
+ 1]; i
++);
11158 strcpy (buf
+ 2, tmp
+ i
);
11162 bfd_signed_vma v
= disp
;
11169 /* Check for possible overflow on 0x8000000000000000. */
11172 strcpy (buf
, "9223372036854775808");
11186 tmp
[28 - i
] = (v
% 10) + '0';
11190 strcpy (buf
, tmp
+ 29 - i
);
11196 sprintf (buf
, "0x%x", (unsigned int) disp
);
11198 sprintf (buf
, "%d", (int) disp
);
11202 /* Put DISP in BUF as signed hex number. */
11205 print_displacement (char *buf
, bfd_vma disp
)
11207 bfd_signed_vma val
= disp
;
11216 /* Check for possible overflow. */
11219 switch (address_mode
)
11222 strcpy (buf
+ j
, "0x8000000000000000");
11225 strcpy (buf
+ j
, "0x80000000");
11228 strcpy (buf
+ j
, "0x8000");
11238 sprintf_vma (tmp
, (bfd_vma
) val
);
11239 for (i
= 0; tmp
[i
] == '0'; i
++)
11241 if (tmp
[i
] == '\0')
11243 strcpy (buf
+ j
, tmp
+ i
);
11247 intel_operand_size (int bytemode
, int sizeflag
)
11253 oappend ("BYTE PTR ");
11257 oappend ("WORD PTR ");
11260 if (address_mode
== mode_64bit
&& (sizeflag
& DFLAG
))
11262 oappend ("QWORD PTR ");
11263 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11271 oappend ("QWORD PTR ");
11272 else if ((sizeflag
& DFLAG
) || bytemode
== dq_mode
)
11273 oappend ("DWORD PTR ");
11275 oappend ("WORD PTR ");
11276 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11279 if ((rex
& REX_W
) || (sizeflag
& DFLAG
))
11281 oappend ("WORD PTR ");
11282 if (!(rex
& REX_W
))
11283 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11286 if (sizeflag
& DFLAG
)
11287 oappend ("QWORD PTR ");
11289 oappend ("DWORD PTR ");
11290 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11294 oappend ("DWORD PTR ");
11297 oappend ("QWORD PTR ");
11300 if (address_mode
== mode_64bit
)
11301 oappend ("QWORD PTR ");
11303 oappend ("DWORD PTR ");
11306 if (sizeflag
& DFLAG
)
11307 oappend ("FWORD PTR ");
11309 oappend ("DWORD PTR ");
11310 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11313 oappend ("TBYTE PTR ");
11318 switch (vex
.length
)
11321 oappend ("XMMWORD PTR ");
11324 oappend ("YMMWORD PTR ");
11331 oappend ("XMMWORD PTR ");
11334 oappend ("XMMWORD PTR ");
11340 switch (vex
.length
)
11343 oappend ("QWORD PTR ");
11346 oappend ("XMMWORD PTR ");
11356 switch (vex
.length
)
11359 oappend ("QWORD PTR ");
11362 oappend ("YMMWORD PTR ");
11369 oappend ("OWORD PTR ");
11377 OP_E_register (int bytemode
, int sizeflag
)
11379 int reg
= modrm
.rm
;
11380 const char **names
;
11405 names
= address_mode
== mode_64bit
? names64
: names32
;
11408 if (address_mode
== mode_64bit
&& (sizeflag
& DFLAG
))
11411 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11424 else if ((sizeflag
& DFLAG
) || bytemode
!= v_mode
)
11428 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11433 oappend (INTERNAL_DISASSEMBLER_ERROR
);
11436 oappend (names
[reg
]);
11440 OP_E_memory (int bytemode
, int sizeflag
, int has_drex
)
11443 int add
= (rex
& REX_B
) ? 8 : 0;
11448 intel_operand_size (bytemode
, sizeflag
);
11451 if ((sizeflag
& AFLAG
) || address_mode
== mode_64bit
)
11453 /* 32/64 bit address mode */
11471 FETCH_DATA (the_info
, codep
+ 1);
11472 index
= (*codep
>> 3) & 7;
11473 scale
= (*codep
>> 6) & 3;
11478 haveindex
= index
!= 4;
11481 rbase
= base
+ add
;
11483 /* If we have a DREX byte, skip it now
11484 (it has already been handled) */
11487 FETCH_DATA (the_info
, codep
+ 1);
11497 if (address_mode
== mode_64bit
&& !havesib
)
11503 FETCH_DATA (the_info
, codep
+ 1);
11505 if ((disp
& 0x80) != 0)
11513 /* In 32bit mode, we need index register to tell [offset] from
11514 [eiz*1 + offset]. */
11515 needindex
= (havesib
11518 && address_mode
== mode_32bit
);
11519 havedisp
= (havebase
11521 || (havesib
&& (haveindex
|| scale
!= 0)));
11524 if (modrm
.mod
!= 0 || base
== 5)
11526 if (havedisp
|| riprel
)
11527 print_displacement (scratchbuf
, disp
);
11529 print_operand_value (scratchbuf
, 1, disp
);
11530 oappend (scratchbuf
);
11534 oappend (sizeflag
& AFLAG
? "(%rip)" : "(%eip)");
11538 if (havebase
|| haveindex
|| riprel
)
11539 used_prefixes
|= PREFIX_ADDR
;
11541 if (havedisp
|| (intel_syntax
&& riprel
))
11543 *obufp
++ = open_char
;
11544 if (intel_syntax
&& riprel
)
11547 oappend (sizeflag
& AFLAG
? "rip" : "eip");
11551 oappend (address_mode
== mode_64bit
&& (sizeflag
& AFLAG
)
11552 ? names64
[rbase
] : names32
[rbase
]);
11555 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
11556 print index to tell base + index from base. */
11560 || (havebase
&& base
!= ESP_REG_NUM
))
11562 if (!intel_syntax
|| havebase
)
11564 *obufp
++ = separator_char
;
11568 oappend (address_mode
== mode_64bit
11569 && (sizeflag
& AFLAG
)
11570 ? names64
[index
] : names32
[index
]);
11572 oappend (address_mode
== mode_64bit
11573 && (sizeflag
& AFLAG
)
11574 ? index64
: index32
);
11576 *obufp
++ = scale_char
;
11578 sprintf (scratchbuf
, "%d", 1 << scale
);
11579 oappend (scratchbuf
);
11583 && (disp
|| modrm
.mod
!= 0 || base
== 5))
11585 if (!havedisp
|| (bfd_signed_vma
) disp
>= 0)
11590 else if (modrm
.mod
!= 1)
11594 disp
= - (bfd_signed_vma
) disp
;
11598 print_displacement (scratchbuf
, disp
);
11600 print_operand_value (scratchbuf
, 1, disp
);
11601 oappend (scratchbuf
);
11604 *obufp
++ = close_char
;
11607 else if (intel_syntax
)
11609 if (modrm
.mod
!= 0 || base
== 5)
11611 if (prefixes
& (PREFIX_CS
| PREFIX_SS
| PREFIX_DS
11612 | PREFIX_ES
| PREFIX_FS
| PREFIX_GS
))
11616 oappend (names_seg
[ds_reg
- es_reg
]);
11619 print_operand_value (scratchbuf
, 1, disp
);
11620 oappend (scratchbuf
);
11625 { /* 16 bit address mode */
11632 if ((disp
& 0x8000) != 0)
11637 FETCH_DATA (the_info
, codep
+ 1);
11639 if ((disp
& 0x80) != 0)
11644 if ((disp
& 0x8000) != 0)
11650 if (modrm
.mod
!= 0 || modrm
.rm
== 6)
11652 print_displacement (scratchbuf
, disp
);
11653 oappend (scratchbuf
);
11656 if (modrm
.mod
!= 0 || modrm
.rm
!= 6)
11658 *obufp
++ = open_char
;
11660 oappend (index16
[modrm
.rm
]);
11662 && (disp
|| modrm
.mod
!= 0 || modrm
.rm
== 6))
11664 if ((bfd_signed_vma
) disp
>= 0)
11669 else if (modrm
.mod
!= 1)
11673 disp
= - (bfd_signed_vma
) disp
;
11676 print_displacement (scratchbuf
, disp
);
11677 oappend (scratchbuf
);
11680 *obufp
++ = close_char
;
11683 else if (intel_syntax
)
11685 if (prefixes
& (PREFIX_CS
| PREFIX_SS
| PREFIX_DS
11686 | PREFIX_ES
| PREFIX_FS
| PREFIX_GS
))
11690 oappend (names_seg
[ds_reg
- es_reg
]);
11693 print_operand_value (scratchbuf
, 1, disp
& 0xffff);
11694 oappend (scratchbuf
);
11700 OP_E_extended (int bytemode
, int sizeflag
, int has_drex
)
11702 /* Skip mod/rm byte. */
11706 if (modrm
.mod
== 3)
11707 OP_E_register (bytemode
, sizeflag
);
11709 OP_E_memory (bytemode
, sizeflag
, has_drex
);
11713 OP_E (int bytemode
, int sizeflag
)
11715 OP_E_extended (bytemode
, sizeflag
, 0);
11720 OP_G (int bytemode
, int sizeflag
)
11731 oappend (names8rex
[modrm
.reg
+ add
]);
11733 oappend (names8
[modrm
.reg
+ add
]);
11736 oappend (names16
[modrm
.reg
+ add
]);
11739 oappend (names32
[modrm
.reg
+ add
]);
11742 oappend (names64
[modrm
.reg
+ add
]);
11751 oappend (names64
[modrm
.reg
+ add
]);
11752 else if ((sizeflag
& DFLAG
) || bytemode
!= v_mode
)
11753 oappend (names32
[modrm
.reg
+ add
]);
11755 oappend (names16
[modrm
.reg
+ add
]);
11756 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11759 if (address_mode
== mode_64bit
)
11760 oappend (names64
[modrm
.reg
+ add
]);
11762 oappend (names32
[modrm
.reg
+ add
]);
11765 oappend (INTERNAL_DISASSEMBLER_ERROR
);
11778 FETCH_DATA (the_info
, codep
+ 8);
11779 a
= *codep
++ & 0xff;
11780 a
|= (*codep
++ & 0xff) << 8;
11781 a
|= (*codep
++ & 0xff) << 16;
11782 a
|= (*codep
++ & 0xff) << 24;
11783 b
= *codep
++ & 0xff;
11784 b
|= (*codep
++ & 0xff) << 8;
11785 b
|= (*codep
++ & 0xff) << 16;
11786 b
|= (*codep
++ & 0xff) << 24;
11787 x
= a
+ ((bfd_vma
) b
<< 32);
11795 static bfd_signed_vma
11798 bfd_signed_vma x
= 0;
11800 FETCH_DATA (the_info
, codep
+ 4);
11801 x
= *codep
++ & (bfd_signed_vma
) 0xff;
11802 x
|= (*codep
++ & (bfd_signed_vma
) 0xff) << 8;
11803 x
|= (*codep
++ & (bfd_signed_vma
) 0xff) << 16;
11804 x
|= (*codep
++ & (bfd_signed_vma
) 0xff) << 24;
11808 static bfd_signed_vma
11811 bfd_signed_vma x
= 0;
11813 FETCH_DATA (the_info
, codep
+ 4);
11814 x
= *codep
++ & (bfd_signed_vma
) 0xff;
11815 x
|= (*codep
++ & (bfd_signed_vma
) 0xff) << 8;
11816 x
|= (*codep
++ & (bfd_signed_vma
) 0xff) << 16;
11817 x
|= (*codep
++ & (bfd_signed_vma
) 0xff) << 24;
11819 x
= (x
^ ((bfd_signed_vma
) 1 << 31)) - ((bfd_signed_vma
) 1 << 31);
11829 FETCH_DATA (the_info
, codep
+ 2);
11830 x
= *codep
++ & 0xff;
11831 x
|= (*codep
++ & 0xff) << 8;
11836 set_op (bfd_vma op
, int riprel
)
11838 op_index
[op_ad
] = op_ad
;
11839 if (address_mode
== mode_64bit
)
11841 op_address
[op_ad
] = op
;
11842 op_riprel
[op_ad
] = riprel
;
11846 /* Mask to get a 32-bit address. */
11847 op_address
[op_ad
] = op
& 0xffffffff;
11848 op_riprel
[op_ad
] = riprel
& 0xffffffff;
11853 OP_REG (int code
, int sizeflag
)
11865 case ax_reg
: case cx_reg
: case dx_reg
: case bx_reg
:
11866 case sp_reg
: case bp_reg
: case si_reg
: case di_reg
:
11867 s
= names16
[code
- ax_reg
+ add
];
11869 case es_reg
: case ss_reg
: case cs_reg
:
11870 case ds_reg
: case fs_reg
: case gs_reg
:
11871 s
= names_seg
[code
- es_reg
+ add
];
11873 case al_reg
: case ah_reg
: case cl_reg
: case ch_reg
:
11874 case dl_reg
: case dh_reg
: case bl_reg
: case bh_reg
:
11877 s
= names8rex
[code
- al_reg
+ add
];
11879 s
= names8
[code
- al_reg
];
11881 case rAX_reg
: case rCX_reg
: case rDX_reg
: case rBX_reg
:
11882 case rSP_reg
: case rBP_reg
: case rSI_reg
: case rDI_reg
:
11883 if (address_mode
== mode_64bit
&& (sizeflag
& DFLAG
))
11885 s
= names64
[code
- rAX_reg
+ add
];
11888 code
+= eAX_reg
- rAX_reg
;
11889 /* Fall through. */
11890 case eAX_reg
: case eCX_reg
: case eDX_reg
: case eBX_reg
:
11891 case eSP_reg
: case eBP_reg
: case eSI_reg
: case eDI_reg
:
11894 s
= names64
[code
- eAX_reg
+ add
];
11895 else if (sizeflag
& DFLAG
)
11896 s
= names32
[code
- eAX_reg
+ add
];
11898 s
= names16
[code
- eAX_reg
+ add
];
11899 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11902 s
= INTERNAL_DISASSEMBLER_ERROR
;
11909 OP_IMREG (int code
, int sizeflag
)
11921 case ax_reg
: case cx_reg
: case dx_reg
: case bx_reg
:
11922 case sp_reg
: case bp_reg
: case si_reg
: case di_reg
:
11923 s
= names16
[code
- ax_reg
];
11925 case es_reg
: case ss_reg
: case cs_reg
:
11926 case ds_reg
: case fs_reg
: case gs_reg
:
11927 s
= names_seg
[code
- es_reg
];
11929 case al_reg
: case ah_reg
: case cl_reg
: case ch_reg
:
11930 case dl_reg
: case dh_reg
: case bl_reg
: case bh_reg
:
11933 s
= names8rex
[code
- al_reg
];
11935 s
= names8
[code
- al_reg
];
11937 case eAX_reg
: case eCX_reg
: case eDX_reg
: case eBX_reg
:
11938 case eSP_reg
: case eBP_reg
: case eSI_reg
: case eDI_reg
:
11941 s
= names64
[code
- eAX_reg
];
11942 else if (sizeflag
& DFLAG
)
11943 s
= names32
[code
- eAX_reg
];
11945 s
= names16
[code
- eAX_reg
];
11946 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11948 case z_mode_ax_reg
:
11949 if ((rex
& REX_W
) || (sizeflag
& DFLAG
))
11953 if (!(rex
& REX_W
))
11954 used_prefixes
|= (prefixes
& PREFIX_DATA
);
11957 s
= INTERNAL_DISASSEMBLER_ERROR
;
11964 OP_I (int bytemode
, int sizeflag
)
11967 bfd_signed_vma mask
= -1;
11972 FETCH_DATA (the_info
, codep
+ 1);
11977 if (address_mode
== mode_64bit
)
11982 /* Fall through. */
11987 else if (sizeflag
& DFLAG
)
11997 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12008 oappend (INTERNAL_DISASSEMBLER_ERROR
);
12013 scratchbuf
[0] = '$';
12014 print_operand_value (scratchbuf
+ 1, 1, op
);
12015 oappend (scratchbuf
+ intel_syntax
);
12016 scratchbuf
[0] = '\0';
12020 OP_I64 (int bytemode
, int sizeflag
)
12023 bfd_signed_vma mask
= -1;
12025 if (address_mode
!= mode_64bit
)
12027 OP_I (bytemode
, sizeflag
);
12034 FETCH_DATA (the_info
, codep
+ 1);
12042 else if (sizeflag
& DFLAG
)
12052 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12059 oappend (INTERNAL_DISASSEMBLER_ERROR
);
12064 scratchbuf
[0] = '$';
12065 print_operand_value (scratchbuf
+ 1, 1, op
);
12066 oappend (scratchbuf
+ intel_syntax
);
12067 scratchbuf
[0] = '\0';
12071 OP_sI (int bytemode
, int sizeflag
)
12074 bfd_signed_vma mask
= -1;
12079 FETCH_DATA (the_info
, codep
+ 1);
12081 if ((op
& 0x80) != 0)
12089 else if (sizeflag
& DFLAG
)
12098 if ((op
& 0x8000) != 0)
12101 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12106 if ((op
& 0x8000) != 0)
12110 oappend (INTERNAL_DISASSEMBLER_ERROR
);
12114 scratchbuf
[0] = '$';
12115 print_operand_value (scratchbuf
+ 1, 1, op
);
12116 oappend (scratchbuf
+ intel_syntax
);
12120 OP_J (int bytemode
, int sizeflag
)
12124 bfd_vma segment
= 0;
12129 FETCH_DATA (the_info
, codep
+ 1);
12131 if ((disp
& 0x80) != 0)
12135 if ((sizeflag
& DFLAG
) || (rex
& REX_W
))
12140 if ((disp
& 0x8000) != 0)
12142 /* In 16bit mode, address is wrapped around at 64k within
12143 the same segment. Otherwise, a data16 prefix on a jump
12144 instruction means that the pc is masked to 16 bits after
12145 the displacement is added! */
12147 if ((prefixes
& PREFIX_DATA
) == 0)
12148 segment
= ((start_pc
+ codep
- start_codep
)
12149 & ~((bfd_vma
) 0xffff));
12151 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12154 oappend (INTERNAL_DISASSEMBLER_ERROR
);
12157 disp
= ((start_pc
+ codep
- start_codep
+ disp
) & mask
) | segment
;
12159 print_operand_value (scratchbuf
, 1, disp
);
12160 oappend (scratchbuf
);
12164 OP_SEG (int bytemode
, int sizeflag
)
12166 if (bytemode
== w_mode
)
12167 oappend (names_seg
[modrm
.reg
]);
12169 OP_E (modrm
.mod
== 3 ? bytemode
: w_mode
, sizeflag
);
12173 OP_DIR (int dummy ATTRIBUTE_UNUSED
, int sizeflag
)
12177 if (sizeflag
& DFLAG
)
12187 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12189 sprintf (scratchbuf
, "0x%x:0x%x", seg
, offset
);
12191 sprintf (scratchbuf
, "$0x%x,$0x%x", seg
, offset
);
12192 oappend (scratchbuf
);
12196 OP_OFF (int bytemode
, int sizeflag
)
12200 if (intel_syntax
&& (sizeflag
& SUFFIX_ALWAYS
))
12201 intel_operand_size (bytemode
, sizeflag
);
12204 if ((sizeflag
& AFLAG
) || address_mode
== mode_64bit
)
12211 if (!(prefixes
& (PREFIX_CS
| PREFIX_SS
| PREFIX_DS
12212 | PREFIX_ES
| PREFIX_FS
| PREFIX_GS
)))
12214 oappend (names_seg
[ds_reg
- es_reg
]);
12218 print_operand_value (scratchbuf
, 1, off
);
12219 oappend (scratchbuf
);
12223 OP_OFF64 (int bytemode
, int sizeflag
)
12227 if (address_mode
!= mode_64bit
12228 || (prefixes
& PREFIX_ADDR
))
12230 OP_OFF (bytemode
, sizeflag
);
12234 if (intel_syntax
&& (sizeflag
& SUFFIX_ALWAYS
))
12235 intel_operand_size (bytemode
, sizeflag
);
12242 if (!(prefixes
& (PREFIX_CS
| PREFIX_SS
| PREFIX_DS
12243 | PREFIX_ES
| PREFIX_FS
| PREFIX_GS
)))
12245 oappend (names_seg
[ds_reg
- es_reg
]);
12249 print_operand_value (scratchbuf
, 1, off
);
12250 oappend (scratchbuf
);
12254 ptr_reg (int code
, int sizeflag
)
12258 *obufp
++ = open_char
;
12259 used_prefixes
|= (prefixes
& PREFIX_ADDR
);
12260 if (address_mode
== mode_64bit
)
12262 if (!(sizeflag
& AFLAG
))
12263 s
= names32
[code
- eAX_reg
];
12265 s
= names64
[code
- eAX_reg
];
12267 else if (sizeflag
& AFLAG
)
12268 s
= names32
[code
- eAX_reg
];
12270 s
= names16
[code
- eAX_reg
];
12272 *obufp
++ = close_char
;
12277 OP_ESreg (int code
, int sizeflag
)
12283 case 0x6d: /* insw/insl */
12284 intel_operand_size (z_mode
, sizeflag
);
12286 case 0xa5: /* movsw/movsl/movsq */
12287 case 0xa7: /* cmpsw/cmpsl/cmpsq */
12288 case 0xab: /* stosw/stosl */
12289 case 0xaf: /* scasw/scasl */
12290 intel_operand_size (v_mode
, sizeflag
);
12293 intel_operand_size (b_mode
, sizeflag
);
12296 oappend ("%es:" + intel_syntax
);
12297 ptr_reg (code
, sizeflag
);
12301 OP_DSreg (int code
, int sizeflag
)
12307 case 0x6f: /* outsw/outsl */
12308 intel_operand_size (z_mode
, sizeflag
);
12310 case 0xa5: /* movsw/movsl/movsq */
12311 case 0xa7: /* cmpsw/cmpsl/cmpsq */
12312 case 0xad: /* lodsw/lodsl/lodsq */
12313 intel_operand_size (v_mode
, sizeflag
);
12316 intel_operand_size (b_mode
, sizeflag
);
12325 | PREFIX_GS
)) == 0)
12326 prefixes
|= PREFIX_DS
;
12328 ptr_reg (code
, sizeflag
);
12332 OP_C (int dummy ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
12340 else if (address_mode
!= mode_64bit
&& (prefixes
& PREFIX_LOCK
))
12342 lock_prefix
= NULL
;
12343 used_prefixes
|= PREFIX_LOCK
;
12348 sprintf (scratchbuf
, "%%cr%d", modrm
.reg
+ add
);
12349 oappend (scratchbuf
+ intel_syntax
);
12353 OP_D (int dummy ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
12362 sprintf (scratchbuf
, "db%d", modrm
.reg
+ add
);
12364 sprintf (scratchbuf
, "%%db%d", modrm
.reg
+ add
);
12365 oappend (scratchbuf
);
12369 OP_T (int dummy ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
12371 sprintf (scratchbuf
, "%%tr%d", modrm
.reg
);
12372 oappend (scratchbuf
+ intel_syntax
);
12376 OP_R (int bytemode
, int sizeflag
)
12378 if (modrm
.mod
== 3)
12379 OP_E (bytemode
, sizeflag
);
12385 OP_MMX (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
12387 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12388 if (prefixes
& PREFIX_DATA
)
12396 sprintf (scratchbuf
, "%%xmm%d", modrm
.reg
+ add
);
12399 sprintf (scratchbuf
, "%%mm%d", modrm
.reg
);
12400 oappend (scratchbuf
+ intel_syntax
);
12404 OP_XMM (int bytemode
, int sizeflag ATTRIBUTE_UNUSED
)
12412 if (need_vex
&& bytemode
!= xmm_mode
)
12414 switch (vex
.length
)
12417 sprintf (scratchbuf
, "%%xmm%d", modrm
.reg
+ add
);
12420 sprintf (scratchbuf
, "%%ymm%d", modrm
.reg
+ add
);
12427 sprintf (scratchbuf
, "%%xmm%d", modrm
.reg
+ add
);
12428 oappend (scratchbuf
+ intel_syntax
);
12432 OP_EM (int bytemode
, int sizeflag
)
12434 if (modrm
.mod
!= 3)
12436 if (intel_syntax
&& bytemode
== v_mode
)
12438 bytemode
= (prefixes
& PREFIX_DATA
) ? x_mode
: q_mode
;
12439 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12441 OP_E (bytemode
, sizeflag
);
12445 /* Skip mod/rm byte. */
12448 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12449 if (prefixes
& PREFIX_DATA
)
12458 sprintf (scratchbuf
, "%%xmm%d", modrm
.rm
+ add
);
12461 sprintf (scratchbuf
, "%%mm%d", modrm
.rm
);
12462 oappend (scratchbuf
+ intel_syntax
);
12465 /* cvt* are the only instructions in sse2 which have
12466 both SSE and MMX operands and also have 0x66 prefix
12467 in their opcode. 0x66 was originally used to differentiate
12468 between SSE and MMX instruction(operands). So we have to handle the
12469 cvt* separately using OP_EMC and OP_MXC */
12471 OP_EMC (int bytemode
, int sizeflag
)
12473 if (modrm
.mod
!= 3)
12475 if (intel_syntax
&& bytemode
== v_mode
)
12477 bytemode
= (prefixes
& PREFIX_DATA
) ? x_mode
: q_mode
;
12478 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12480 OP_E (bytemode
, sizeflag
);
12484 /* Skip mod/rm byte. */
12487 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12488 sprintf (scratchbuf
, "%%mm%d", modrm
.rm
);
12489 oappend (scratchbuf
+ intel_syntax
);
12493 OP_MXC (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
12495 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12496 sprintf (scratchbuf
, "%%mm%d", modrm
.reg
);
12497 oappend (scratchbuf
+ intel_syntax
);
12501 OP_EX (int bytemode
, int sizeflag
)
12504 if (modrm
.mod
!= 3)
12506 OP_E (bytemode
, sizeflag
);
12515 /* Skip mod/rm byte. */
12519 && bytemode
!= xmm_mode
12520 && bytemode
!= xmmq_mode
)
12522 switch (vex
.length
)
12525 sprintf (scratchbuf
, "%%xmm%d", modrm
.rm
+ add
);
12528 sprintf (scratchbuf
, "%%ymm%d", modrm
.rm
+ add
);
12535 sprintf (scratchbuf
, "%%xmm%d", modrm
.rm
+ add
);
12536 oappend (scratchbuf
+ intel_syntax
);
12540 OP_MS (int bytemode
, int sizeflag
)
12542 if (modrm
.mod
== 3)
12543 OP_EM (bytemode
, sizeflag
);
12549 OP_XS (int bytemode
, int sizeflag
)
12551 if (modrm
.mod
== 3)
12552 OP_EX (bytemode
, sizeflag
);
12558 OP_M (int bytemode
, int sizeflag
)
12560 if (modrm
.mod
== 3)
12561 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
12564 OP_E (bytemode
, sizeflag
);
12568 OP_0f07 (int bytemode
, int sizeflag
)
12570 if (modrm
.mod
!= 3 || modrm
.rm
!= 0)
12573 OP_E (bytemode
, sizeflag
);
12576 /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
12577 32bit mode and "xchg %rax,%rax" in 64bit mode. */
12580 NOP_Fixup1 (int bytemode
, int sizeflag
)
12582 if ((prefixes
& PREFIX_DATA
) != 0
12585 && address_mode
== mode_64bit
))
12586 OP_REG (bytemode
, sizeflag
);
12588 strcpy (obuf
, "nop");
12592 NOP_Fixup2 (int bytemode
, int sizeflag
)
12594 if ((prefixes
& PREFIX_DATA
) != 0
12597 && address_mode
== mode_64bit
))
12598 OP_IMREG (bytemode
, sizeflag
);
12601 static const char *const Suffix3DNow
[] = {
12602 /* 00 */ NULL
, NULL
, NULL
, NULL
,
12603 /* 04 */ NULL
, NULL
, NULL
, NULL
,
12604 /* 08 */ NULL
, NULL
, NULL
, NULL
,
12605 /* 0C */ "pi2fw", "pi2fd", NULL
, NULL
,
12606 /* 10 */ NULL
, NULL
, NULL
, NULL
,
12607 /* 14 */ NULL
, NULL
, NULL
, NULL
,
12608 /* 18 */ NULL
, NULL
, NULL
, NULL
,
12609 /* 1C */ "pf2iw", "pf2id", NULL
, NULL
,
12610 /* 20 */ NULL
, NULL
, NULL
, NULL
,
12611 /* 24 */ NULL
, NULL
, NULL
, NULL
,
12612 /* 28 */ NULL
, NULL
, NULL
, NULL
,
12613 /* 2C */ NULL
, NULL
, NULL
, NULL
,
12614 /* 30 */ NULL
, NULL
, NULL
, NULL
,
12615 /* 34 */ NULL
, NULL
, NULL
, NULL
,
12616 /* 38 */ NULL
, NULL
, NULL
, NULL
,
12617 /* 3C */ NULL
, NULL
, NULL
, NULL
,
12618 /* 40 */ NULL
, NULL
, NULL
, NULL
,
12619 /* 44 */ NULL
, NULL
, NULL
, NULL
,
12620 /* 48 */ NULL
, NULL
, NULL
, NULL
,
12621 /* 4C */ NULL
, NULL
, NULL
, NULL
,
12622 /* 50 */ NULL
, NULL
, NULL
, NULL
,
12623 /* 54 */ NULL
, NULL
, NULL
, NULL
,
12624 /* 58 */ NULL
, NULL
, NULL
, NULL
,
12625 /* 5C */ NULL
, NULL
, NULL
, NULL
,
12626 /* 60 */ NULL
, NULL
, NULL
, NULL
,
12627 /* 64 */ NULL
, NULL
, NULL
, NULL
,
12628 /* 68 */ NULL
, NULL
, NULL
, NULL
,
12629 /* 6C */ NULL
, NULL
, NULL
, NULL
,
12630 /* 70 */ NULL
, NULL
, NULL
, NULL
,
12631 /* 74 */ NULL
, NULL
, NULL
, NULL
,
12632 /* 78 */ NULL
, NULL
, NULL
, NULL
,
12633 /* 7C */ NULL
, NULL
, NULL
, NULL
,
12634 /* 80 */ NULL
, NULL
, NULL
, NULL
,
12635 /* 84 */ NULL
, NULL
, NULL
, NULL
,
12636 /* 88 */ NULL
, NULL
, "pfnacc", NULL
,
12637 /* 8C */ NULL
, NULL
, "pfpnacc", NULL
,
12638 /* 90 */ "pfcmpge", NULL
, NULL
, NULL
,
12639 /* 94 */ "pfmin", NULL
, "pfrcp", "pfrsqrt",
12640 /* 98 */ NULL
, NULL
, "pfsub", NULL
,
12641 /* 9C */ NULL
, NULL
, "pfadd", NULL
,
12642 /* A0 */ "pfcmpgt", NULL
, NULL
, NULL
,
12643 /* A4 */ "pfmax", NULL
, "pfrcpit1", "pfrsqit1",
12644 /* A8 */ NULL
, NULL
, "pfsubr", NULL
,
12645 /* AC */ NULL
, NULL
, "pfacc", NULL
,
12646 /* B0 */ "pfcmpeq", NULL
, NULL
, NULL
,
12647 /* B4 */ "pfmul", NULL
, "pfrcpit2", "pmulhrw",
12648 /* B8 */ NULL
, NULL
, NULL
, "pswapd",
12649 /* BC */ NULL
, NULL
, NULL
, "pavgusb",
12650 /* C0 */ NULL
, NULL
, NULL
, NULL
,
12651 /* C4 */ NULL
, NULL
, NULL
, NULL
,
12652 /* C8 */ NULL
, NULL
, NULL
, NULL
,
12653 /* CC */ NULL
, NULL
, NULL
, NULL
,
12654 /* D0 */ NULL
, NULL
, NULL
, NULL
,
12655 /* D4 */ NULL
, NULL
, NULL
, NULL
,
12656 /* D8 */ NULL
, NULL
, NULL
, NULL
,
12657 /* DC */ NULL
, NULL
, NULL
, NULL
,
12658 /* E0 */ NULL
, NULL
, NULL
, NULL
,
12659 /* E4 */ NULL
, NULL
, NULL
, NULL
,
12660 /* E8 */ NULL
, NULL
, NULL
, NULL
,
12661 /* EC */ NULL
, NULL
, NULL
, NULL
,
12662 /* F0 */ NULL
, NULL
, NULL
, NULL
,
12663 /* F4 */ NULL
, NULL
, NULL
, NULL
,
12664 /* F8 */ NULL
, NULL
, NULL
, NULL
,
12665 /* FC */ NULL
, NULL
, NULL
, NULL
,
12669 OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
12671 const char *mnemonic
;
12673 FETCH_DATA (the_info
, codep
+ 1);
12674 /* AMD 3DNow! instructions are specified by an opcode suffix in the
12675 place where an 8-bit immediate would normally go. ie. the last
12676 byte of the instruction. */
12677 obufp
= obuf
+ strlen (obuf
);
12678 mnemonic
= Suffix3DNow
[*codep
++ & 0xff];
12680 oappend (mnemonic
);
12683 /* Since a variable sized modrm/sib chunk is between the start
12684 of the opcode (0x0f0f) and the opcode suffix, we need to do
12685 all the modrm processing first, and don't know until now that
12686 we have a bad opcode. This necessitates some cleaning up. */
12687 op_out
[0][0] = '\0';
12688 op_out
[1][0] = '\0';
12693 static const char *simd_cmp_op
[] = {
12705 CMP_Fixup (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
12707 unsigned int cmp_type
;
12709 FETCH_DATA (the_info
, codep
+ 1);
12710 cmp_type
= *codep
++ & 0xff;
12711 if (cmp_type
< ARRAY_SIZE (simd_cmp_op
))
12714 char *p
= obuf
+ strlen (obuf
) - 2;
12718 sprintf (p
, "%s%s", simd_cmp_op
[cmp_type
], suffix
);
12722 /* We have a reserved extension byte. Output it directly. */
12723 scratchbuf
[0] = '$';
12724 print_operand_value (scratchbuf
+ 1, 1, cmp_type
);
12725 oappend (scratchbuf
+ intel_syntax
);
12726 scratchbuf
[0] = '\0';
12731 OP_Mwait (int bytemode ATTRIBUTE_UNUSED
,
12732 int sizeflag ATTRIBUTE_UNUSED
)
12734 /* mwait %eax,%ecx */
12737 const char **names
= (address_mode
== mode_64bit
12738 ? names64
: names32
);
12739 strcpy (op_out
[0], names
[0]);
12740 strcpy (op_out
[1], names
[1]);
12741 two_source_ops
= 1;
12743 /* Skip mod/rm byte. */
12749 OP_Monitor (int bytemode ATTRIBUTE_UNUSED
,
12750 int sizeflag ATTRIBUTE_UNUSED
)
12752 /* monitor %eax,%ecx,%edx" */
12755 const char **op1_names
;
12756 const char **names
= (address_mode
== mode_64bit
12757 ? names64
: names32
);
12759 if (!(prefixes
& PREFIX_ADDR
))
12760 op1_names
= (address_mode
== mode_16bit
12761 ? names16
: names
);
12764 /* Remove "addr16/addr32". */
12765 addr_prefix
= NULL
;
12766 op1_names
= (address_mode
!= mode_32bit
12767 ? names32
: names16
);
12768 used_prefixes
|= PREFIX_ADDR
;
12770 strcpy (op_out
[0], op1_names
[0]);
12771 strcpy (op_out
[1], names
[1]);
12772 strcpy (op_out
[2], names
[2]);
12773 two_source_ops
= 1;
12775 /* Skip mod/rm byte. */
12783 /* Throw away prefixes and 1st. opcode byte. */
12784 codep
= insn_codep
+ 1;
12789 REP_Fixup (int bytemode
, int sizeflag
)
12791 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
12793 if (prefixes
& PREFIX_REPZ
)
12794 repz_prefix
= "rep ";
12801 OP_IMREG (bytemode
, sizeflag
);
12804 OP_ESreg (bytemode
, sizeflag
);
12807 OP_DSreg (bytemode
, sizeflag
);
12816 CMPXCHG8B_Fixup (int bytemode
, int sizeflag
)
12821 /* Change cmpxchg8b to cmpxchg16b. */
12822 char *p
= obuf
+ strlen (obuf
) - 2;
12826 OP_M (bytemode
, sizeflag
);
12830 XMM_Fixup (int reg
, int sizeflag ATTRIBUTE_UNUSED
)
12834 switch (vex
.length
)
12837 sprintf (scratchbuf
, "%%xmm%d", reg
);
12840 sprintf (scratchbuf
, "%%ymm%d", reg
);
12847 sprintf (scratchbuf
, "%%xmm%d", reg
);
12848 oappend (scratchbuf
+ intel_syntax
);
12852 CRC32_Fixup (int bytemode
, int sizeflag
)
12854 /* Add proper suffix to "crc32". */
12855 char *p
= obuf
+ strlen (obuf
);
12872 else if (sizeflag
& DFLAG
)
12876 used_prefixes
|= (prefixes
& PREFIX_DATA
);
12879 oappend (INTERNAL_DISASSEMBLER_ERROR
);
12884 if (modrm
.mod
== 3)
12888 /* Skip mod/rm byte. */
12893 add
= (rex
& REX_B
) ? 8 : 0;
12894 if (bytemode
== b_mode
)
12898 oappend (names8rex
[modrm
.rm
+ add
]);
12900 oappend (names8
[modrm
.rm
+ add
]);
12906 oappend (names64
[modrm
.rm
+ add
]);
12907 else if ((prefixes
& PREFIX_DATA
))
12908 oappend (names16
[modrm
.rm
+ add
]);
12910 oappend (names32
[modrm
.rm
+ add
]);
12914 OP_E (bytemode
, sizeflag
);
12917 /* Print a DREX argument as either a register or memory operation. */
12919 print_drex_arg (unsigned int reg
, int bytemode
, int sizeflag
)
12921 if (reg
== DREX_REG_UNKNOWN
)
12924 else if (reg
!= DREX_REG_MEMORY
)
12926 sprintf (scratchbuf
, "%%xmm%d", reg
);
12927 oappend (scratchbuf
+ intel_syntax
);
12931 OP_E_extended (bytemode
, sizeflag
, 1);
12934 /* SSE5 instructions that have 4 arguments are encoded as:
12935 0f 24 <sub-opcode> <modrm> <optional-sib> <drex> <offset>.
12937 The <sub-opcode> byte has 1 bit (0x4) that is combined with 1 bit in
12938 the DREX field (0x8) to determine how the arguments are laid out.
12939 The destination register must be the same register as one of the
12940 inputs, and it is encoded in the DREX byte. No REX prefix is used
12941 for these instructions, since the DREX field contains the 3 extension
12942 bits provided by the REX prefix.
12944 The bytemode argument adds 2 extra bits for passing extra information:
12945 DREX_OC1 -- Set the OC1 bit to indicate dest == 1st arg
12946 DREX_NO_OC0 -- OC0 in DREX is invalid
12947 (but pretend it is set). */
12950 OP_DREX4 (int flag_bytemode
, int sizeflag
)
12952 unsigned int drex_byte
;
12953 unsigned int regs
[4];
12954 unsigned int modrm_regmem
;
12955 unsigned int modrm_reg
;
12956 unsigned int drex_reg
;
12958 int rex_save
= rex
;
12959 int rex_used_save
= rex_used
;
12961 int oc1
= (flag_bytemode
& DREX_OC1
) ? 2 : 0;
12965 bytemode
= flag_bytemode
& ~ DREX_MASK
;
12967 for (i
= 0; i
< 4; i
++)
12968 regs
[i
] = DREX_REG_UNKNOWN
;
12970 /* Determine if we have a SIB byte in addition to MODRM before the
12972 if (((sizeflag
& AFLAG
) || address_mode
== mode_64bit
)
12973 && (modrm
.mod
!= 3)
12974 && (modrm
.rm
== 4))
12977 /* Get the DREX byte. */
12978 FETCH_DATA (the_info
, codep
+ 2 + has_sib
);
12979 drex_byte
= codep
[has_sib
+1];
12980 drex_reg
= DREX_XMM (drex_byte
);
12981 modrm_reg
= modrm
.reg
+ ((drex_byte
& REX_R
) ? 8 : 0);
12983 /* Is OC0 legal? If not, hardwire oc0 == 1. */
12984 if (flag_bytemode
& DREX_NO_OC0
)
12987 if (DREX_OC0 (drex_byte
))
12991 oc0
= DREX_OC0 (drex_byte
);
12993 if (modrm
.mod
== 3)
12995 /* regmem == register */
12996 modrm_regmem
= modrm
.rm
+ ((drex_byte
& REX_B
) ? 8 : 0);
12997 rex
= rex_used
= 0;
12998 /* skip modrm/drex since we don't call OP_E_extended */
13003 /* regmem == memory, fill in appropriate REX bits */
13004 modrm_regmem
= DREX_REG_MEMORY
;
13005 rex
= drex_byte
& (REX_B
| REX_X
| REX_R
);
13011 /* Based on the OC1/OC0 bits, lay out the arguments in the correct
13020 regs
[0] = modrm_regmem
;
13021 regs
[1] = modrm_reg
;
13022 regs
[2] = drex_reg
;
13023 regs
[3] = drex_reg
;
13027 regs
[0] = modrm_reg
;
13028 regs
[1] = modrm_regmem
;
13029 regs
[2] = drex_reg
;
13030 regs
[3] = drex_reg
;
13034 regs
[0] = drex_reg
;
13035 regs
[1] = modrm_regmem
;
13036 regs
[2] = modrm_reg
;
13037 regs
[3] = drex_reg
;
13041 regs
[0] = drex_reg
;
13042 regs
[1] = modrm_reg
;
13043 regs
[2] = modrm_regmem
;
13044 regs
[3] = drex_reg
;
13048 /* Print out the arguments. */
13049 for (i
= 0; i
< 4; i
++)
13051 int j
= (intel_syntax
) ? 3 - i
: i
;
13058 print_drex_arg (regs
[j
], bytemode
, sizeflag
);
13062 rex_used
= rex_used_save
;
13065 /* SSE5 instructions that have 3 arguments, and are encoded as:
13066 0f 24 <sub-opcode> <modrm> <optional-sib> <drex> <offset> (or)
13067 0f 25 <sub-opcode> <modrm> <optional-sib> <drex> <offset> <cmp-byte>
13069 The DREX field has 1 bit (0x8) to determine how the arguments are
13070 laid out. The destination register is encoded in the DREX byte.
13071 No REX prefix is used for these instructions, since the DREX field
13072 contains the 3 extension bits provided by the REX prefix. */
13075 OP_DREX3 (int flag_bytemode
, int sizeflag
)
13077 unsigned int drex_byte
;
13078 unsigned int regs
[3];
13079 unsigned int modrm_regmem
;
13080 unsigned int modrm_reg
;
13081 unsigned int drex_reg
;
13083 int rex_save
= rex
;
13084 int rex_used_save
= rex_used
;
13089 bytemode
= flag_bytemode
& ~ DREX_MASK
;
13091 for (i
= 0; i
< 3; i
++)
13092 regs
[i
] = DREX_REG_UNKNOWN
;
13094 /* Determine if we have a SIB byte in addition to MODRM before the
13096 if (((sizeflag
& AFLAG
) || address_mode
== mode_64bit
)
13097 && (modrm
.mod
!= 3)
13098 && (modrm
.rm
== 4))
13101 /* Get the DREX byte. */
13102 FETCH_DATA (the_info
, codep
+ 2 + has_sib
);
13103 drex_byte
= codep
[has_sib
+1];
13104 drex_reg
= DREX_XMM (drex_byte
);
13105 modrm_reg
= modrm
.reg
+ ((drex_byte
& REX_R
) ? 8 : 0);
13107 /* Is OC0 legal? If not, hardwire oc0 == 0 */
13108 oc0
= DREX_OC0 (drex_byte
);
13109 if ((flag_bytemode
& DREX_NO_OC0
) && oc0
)
13112 if (modrm
.mod
== 3)
13114 /* regmem == register */
13115 modrm_regmem
= modrm
.rm
+ ((drex_byte
& REX_B
) ? 8 : 0);
13116 rex
= rex_used
= 0;
13117 /* skip modrm/drex since we don't call OP_E_extended. */
13122 /* regmem == memory, fill in appropriate REX bits. */
13123 modrm_regmem
= DREX_REG_MEMORY
;
13124 rex
= drex_byte
& (REX_B
| REX_X
| REX_R
);
13130 /* Based on the OC1/OC0 bits, lay out the arguments in the correct
13139 regs
[0] = modrm_regmem
;
13140 regs
[1] = modrm_reg
;
13141 regs
[2] = drex_reg
;
13145 regs
[0] = modrm_reg
;
13146 regs
[1] = modrm_regmem
;
13147 regs
[2] = drex_reg
;
13151 /* Print out the arguments. */
13152 for (i
= 0; i
< 3; i
++)
13154 int j
= (intel_syntax
) ? 2 - i
: i
;
13161 print_drex_arg (regs
[j
], bytemode
, sizeflag
);
13165 rex_used
= rex_used_save
;
13168 /* Emit a floating point comparison for comp<xx> instructions. */
13171 OP_DREX_FCMP (int bytemode ATTRIBUTE_UNUSED
,
13172 int sizeflag ATTRIBUTE_UNUSED
)
13174 unsigned char byte
;
13176 static const char *const cmp_test
[] = {
13195 FETCH_DATA (the_info
, codep
+ 1);
13196 byte
= *codep
& 0xff;
13198 if (byte
>= ARRAY_SIZE (cmp_test
)
13203 /* The instruction isn't one we know about, so just append the
13204 extension byte as a numeric value. */
13210 sprintf (scratchbuf
, "com%s%s", cmp_test
[byte
], obuf
+3);
13211 strcpy (obuf
, scratchbuf
);
13216 /* Emit an integer point comparison for pcom<xx> instructions,
13217 rewriting the instruction to have the test inside of it. */
13220 OP_DREX_ICMP (int bytemode ATTRIBUTE_UNUSED
,
13221 int sizeflag ATTRIBUTE_UNUSED
)
13223 unsigned char byte
;
13225 static const char *const cmp_test
[] = {
13236 FETCH_DATA (the_info
, codep
+ 1);
13237 byte
= *codep
& 0xff;
13239 if (byte
>= ARRAY_SIZE (cmp_test
)
13245 /* The instruction isn't one we know about, so just print the
13246 comparison test byte as a numeric value. */
13252 sprintf (scratchbuf
, "pcom%s%s", cmp_test
[byte
], obuf
+4);
13253 strcpy (obuf
, scratchbuf
);
13258 /* Display the destination register operand for instructions with
13262 OP_VEX (int bytemode
, int sizeflag ATTRIBUTE_UNUSED
)
13270 switch (vex
.length
)
13283 sprintf (scratchbuf
, "%%xmm%d", vex
.register_specifier
);
13296 sprintf (scratchbuf
, "%%ymm%d", vex
.register_specifier
);
13302 oappend (scratchbuf
+ intel_syntax
);
13305 /* Get the VEX immediate byte without moving codep. */
13307 static unsigned char
13308 get_vex_imm8 (int sizeflag
)
13310 int bytes_before_imm
= 0;
13312 /* Skip mod/rm byte. */
13316 if (modrm
.mod
!= 3)
13318 /* There are SIB/displacement bytes. */
13319 if ((sizeflag
& AFLAG
) || address_mode
== mode_64bit
)
13321 /* 32/64 bit address mode */
13322 int base
= modrm
.rm
;
13324 /* Check SIB byte. */
13327 FETCH_DATA (the_info
, codep
+ 1);
13329 bytes_before_imm
++;
13335 /* When modrm.rm == 5 or modrm.rm == 4 and base in
13336 SIB == 5, there is a 4 byte displacement. */
13338 /* No displacement. */
13341 /* 4 byte displacement. */
13342 bytes_before_imm
+= 4;
13345 /* 1 byte displacement. */
13346 bytes_before_imm
++;
13351 { /* 16 bit address mode */
13355 /* When modrm.rm == 6, there is a 2 byte displacement. */
13357 /* No displacement. */
13360 /* 2 byte displacement. */
13361 bytes_before_imm
+= 2;
13364 /* 1 byte displacement. */
13365 bytes_before_imm
++;
13371 FETCH_DATA (the_info
, codep
+ bytes_before_imm
+ 1);
13372 return codep
[bytes_before_imm
];
13376 OP_EX_VexReg (int bytemode
, int sizeflag
, int reg
)
13378 if (reg
== -1 && modrm
.mod
!= 3)
13380 OP_E_memory (bytemode
, sizeflag
, 0);
13392 else if (reg
> 7 && address_mode
!= mode_64bit
)
13396 switch (vex
.length
)
13399 sprintf (scratchbuf
, "%%xmm%d", reg
);
13402 sprintf (scratchbuf
, "%%ymm%d", reg
);
13407 oappend (scratchbuf
+ intel_syntax
);
13411 OP_EX_VexImmW (int bytemode
, int sizeflag
)
13414 static unsigned char vex_imm8
;
13418 vex_imm8
= get_vex_imm8 (sizeflag
);
13420 reg
= vex_imm8
>> 4;
13426 reg
= vex_imm8
>> 4;
13429 OP_EX_VexReg (bytemode
, sizeflag
, reg
);
13433 OP_EX_VexW (int bytemode
, int sizeflag
)
13441 reg
= vex
.register_specifier
;
13446 reg
= vex
.register_specifier
;
13449 OP_EX_VexReg (bytemode
, sizeflag
, reg
);
13453 OP_VEX_FMA (int bytemode
, int sizeflag
)
13455 int reg
= get_vex_imm8 (sizeflag
) >> 4;
13457 if (reg
> 7 && address_mode
!= mode_64bit
)
13460 switch (vex
.length
)
13473 sprintf (scratchbuf
, "%%xmm%d", reg
);
13485 sprintf (scratchbuf
, "%%ymm%d", reg
);
13490 oappend (scratchbuf
+ intel_syntax
);
13494 VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED
,
13495 int sizeflag ATTRIBUTE_UNUSED
)
13497 /* Skip the immediate byte and check for invalid bits. */
13498 FETCH_DATA (the_info
, codep
+ 1);
13499 if (*codep
++ & 0xf)
13504 OP_REG_VexI4 (int bytemode
, int sizeflag ATTRIBUTE_UNUSED
)
13507 FETCH_DATA (the_info
, codep
+ 1);
13510 if (bytemode
!= x_mode
)
13517 if (reg
> 7 && address_mode
!= mode_64bit
)
13520 switch (vex
.length
)
13523 sprintf (scratchbuf
, "%%xmm%d", reg
);
13526 sprintf (scratchbuf
, "%%ymm%d", reg
);
13531 oappend (scratchbuf
+ intel_syntax
);
13535 OP_XMM_VexW (int bytemode
, int sizeflag
)
13537 /* Turn off the REX.W bit since it is used for swapping operands
13540 OP_XMM (bytemode
, sizeflag
);
13544 OP_EX_Vex (int bytemode
, int sizeflag
)
13546 if (modrm
.mod
!= 3)
13548 if (vex
.register_specifier
!= 0)
13552 OP_EX (bytemode
, sizeflag
);
13556 OP_XMM_Vex (int bytemode
, int sizeflag
)
13558 if (modrm
.mod
!= 3)
13560 if (vex
.register_specifier
!= 0)
13564 OP_XMM (bytemode
, sizeflag
);
13568 VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
13570 switch (vex
.length
)
13573 strcpy (obuf
, "vzeroupper");
13576 strcpy (obuf
, "vzeroall");
13583 static const char *vex_cmp_op
[] = {
13619 VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED
, int sizeflag ATTRIBUTE_UNUSED
)
13621 unsigned int cmp_type
;
13623 FETCH_DATA (the_info
, codep
+ 1);
13624 cmp_type
= *codep
++ & 0xff;
13625 if (cmp_type
< ARRAY_SIZE (vex_cmp_op
))
13628 char *p
= obuf
+ strlen (obuf
) - 2;
13632 sprintf (p
, "%s%s", vex_cmp_op
[cmp_type
], suffix
);
13636 /* We have a reserved extension byte. Output it directly. */
13637 scratchbuf
[0] = '$';
13638 print_operand_value (scratchbuf
+ 1, 1, cmp_type
);
13639 oappend (scratchbuf
+ intel_syntax
);
13640 scratchbuf
[0] = '\0';
13644 static const char *pclmul_op
[] = {
13652 PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED
,
13653 int sizeflag ATTRIBUTE_UNUSED
)
13655 unsigned int pclmul_type
;
13657 FETCH_DATA (the_info
, codep
+ 1);
13658 pclmul_type
= *codep
++ & 0xff;
13659 switch (pclmul_type
)
13670 if (pclmul_type
< ARRAY_SIZE (pclmul_op
))
13673 char *p
= obuf
+ strlen (obuf
) - 3;
13678 sprintf (p
, "%s%s", pclmul_op
[pclmul_type
], suffix
);
13682 /* We have a reserved extension byte. Output it directly. */
13683 scratchbuf
[0] = '$';
13684 print_operand_value (scratchbuf
+ 1, 1, pclmul_type
);
13685 oappend (scratchbuf
+ intel_syntax
);
13686 scratchbuf
[0] = '\0';
13690 static const char *vpermil2_op
[] = {
13698 VPERMIL2_Fixup (int bytemode ATTRIBUTE_UNUSED
,
13699 int sizeflag ATTRIBUTE_UNUSED
)
13701 unsigned int vpermil2_type
;
13703 FETCH_DATA (the_info
, codep
+ 1);
13704 vpermil2_type
= *codep
++ & 0xf;
13705 if (vpermil2_type
< ARRAY_SIZE (vpermil2_op
))
13708 char *p
= obuf
+ strlen (obuf
) - 3;
13713 sprintf (p
, "%s%s", vpermil2_op
[vpermil2_type
], suffix
);
13717 /* We have a reserved extension byte. Output it directly. */
13718 scratchbuf
[0] = '$';
13719 print_operand_value (scratchbuf
+ 1, 1, vpermil2_type
);
13720 oappend (scratchbuf
+ intel_syntax
);
13721 scratchbuf
[0] = '\0';
13726 MOVBE_Fixup (int bytemode
, int sizeflag
)
13728 /* Add proper suffix to "movbe". */
13729 char *p
= obuf
+ strlen (obuf
);
13738 if (sizeflag
& SUFFIX_ALWAYS
)
13742 else if (sizeflag
& DFLAG
)
13747 used_prefixes
|= (prefixes
& PREFIX_DATA
);
13750 oappend (INTERNAL_DISASSEMBLER_ERROR
);
13755 OP_M (bytemode
, sizeflag
);