* value.c (value_from_contents_and_address): Always return
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
060d22b0 2 Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
0bfee649 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
0af1713e 4 Free Software Foundation, Inc.
252b5132 5
9b201bb5 6 This file is part of the GNU opcodes library.
20f0a1fc 7
9b201bb5 8 This library is free software; you can redistribute it and/or modify
20f0a1fc 9 it under the terms of the GNU General Public License as published by
9b201bb5
NC
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
20f0a1fc 12
9b201bb5
NC
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.
20f0a1fc
NC
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
9b201bb5
NC
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
20f0a1fc
NC
23
24/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
25 July 1988
26 modified by John Hassey (hassey@dg-rtp.dg.com)
27 x86-64 support added by Jan Hubicka (jh@suse.cz)
28 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
29
30/* The main tables describing the instructions is essentially a copy
31 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
32 Programmers Manual. Usually, there is a capital letter, followed
33 by a small letter. The capital letter tell the addressing mode,
34 and the small letter tells about the operand size. Refer to
35 the Intel manual for details. */
252b5132 36
252b5132 37#include "sysdep.h"
dabbade6 38#include "dis-asm.h"
252b5132 39#include "opintl.h"
0b1cf022 40#include "opcode/i386.h"
85f10a01 41#include "libiberty.h"
252b5132
RH
42
43#include <setjmp.h>
44
26ca5450
AJ
45static int fetch_data (struct disassemble_info *, bfd_byte *);
46static void ckprefix (void);
47static const char *prefix_name (int, int);
48static int print_insn (bfd_vma, disassemble_info *);
49static void dofloat (int);
50static void OP_ST (int, int);
51static void OP_STi (int, int);
52static int putop (const char *, int);
53static void oappend (const char *);
54static void append_seg (void);
55static void OP_indirE (int, int);
56static void print_operand_value (char *, int, bfd_vma);
c0f3af97
L
57static void OP_E_register (int, int);
58static void OP_E_memory (int, int, int);
85f10a01 59static void OP_E_extended (int, int, int);
5d669648 60static void print_displacement (char *, bfd_vma);
26ca5450
AJ
61static void OP_E (int, int);
62static void OP_G (int, int);
63static bfd_vma get64 (void);
64static bfd_signed_vma get32 (void);
65static bfd_signed_vma get32s (void);
66static int get16 (void);
67static void set_op (bfd_vma, int);
b844680a 68static void OP_Skip_MODRM (int, int);
26ca5450
AJ
69static void OP_REG (int, int);
70static void OP_IMREG (int, int);
71static void OP_I (int, int);
72static void OP_I64 (int, int);
73static void OP_sI (int, int);
74static void OP_J (int, int);
75static void OP_SEG (int, int);
76static void OP_DIR (int, int);
77static void OP_OFF (int, int);
78static void OP_OFF64 (int, int);
79static void ptr_reg (int, int);
80static void OP_ESreg (int, int);
81static void OP_DSreg (int, int);
82static void OP_C (int, int);
83static void OP_D (int, int);
84static void OP_T (int, int);
6f74c397 85static void OP_R (int, int);
26ca5450
AJ
86static void OP_MMX (int, int);
87static void OP_XMM (int, int);
88static void OP_EM (int, int);
89static void OP_EX (int, int);
4d9567e0
MM
90static void OP_EMC (int,int);
91static void OP_MXC (int,int);
26ca5450
AJ
92static void OP_MS (int, int);
93static void OP_XS (int, int);
cc0ec051 94static void OP_M (int, int);
c0f3af97
L
95static void OP_VEX (int, int);
96static void OP_EX_Vex (int, int);
c0f3af97 97static void OP_XMM_Vex (int, int);
c0f3af97
L
98static void OP_REG_VexI4 (int, int);
99static void PCLMUL_Fixup (int, int);
c0f3af97
L
100static void VZERO_Fixup (int, int);
101static void VCMP_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
f5804c90 111static void CMPXCHG8B_Fixup (int, int);
42903f7f 112static void XMM_Fixup (int, int);
381d071f 113static void CRC32_Fixup (int, int);
85f10a01
MM
114static void print_drex_arg (unsigned int, int, int);
115static void OP_DREX4 (int, int);
116static void OP_DREX3 (int, int);
117static void OP_DREX_ICMP (int, int);
118static void OP_DREX_FCMP (int, int);
f1f8f695 119static void MOVBE_Fixup (int, int);
252b5132 120
6608db57 121struct dis_private {
252b5132
RH
122 /* Points to first byte not fetched. */
123 bfd_byte *max_fetched;
0b1cf022 124 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 125 bfd_vma insn_start;
e396998b 126 int orig_sizeflag;
252b5132
RH
127 jmp_buf bailout;
128};
129
cb712a9e
L
130enum address_mode
131{
132 mode_16bit,
133 mode_32bit,
134 mode_64bit
135};
136
137enum address_mode address_mode;
52b15da3 138
5076851f
ILT
139/* Flags for the prefixes for the current instruction. See below. */
140static int prefixes;
141
52b15da3
JH
142/* REX prefix the current instruction. See below. */
143static int rex;
144/* Bits of REX we've already used. */
145static int rex_used;
c0f3af97
L
146/* Original REX prefix. */
147static int rex_original;
148/* REX bits in original REX prefix ignored. It may not be the same
149 as rex_original since some bits may not be ignored. */
150static int rex_ignored;
52b15da3
JH
151/* Mark parts used in the REX prefix. When we are testing for
152 empty prefix (for 8bit register REX extension), just mask it
153 out. Otherwise test for REX bit is excuse for existence of REX
154 only in case value is nonzero. */
155#define USED_REX(value) \
156 { \
157 if (value) \
161a04f6
L
158 { \
159 if ((rex & value)) \
160 rex_used |= (value) | REX_OPCODE; \
161 } \
52b15da3 162 else \
161a04f6 163 rex_used |= REX_OPCODE; \
52b15da3
JH
164 }
165
85f10a01
MM
166/* Special 'registers' for DREX handling */
167#define DREX_REG_UNKNOWN 1000 /* not initialized */
168#define DREX_REG_MEMORY 1001 /* use MODRM/SIB/OFFSET memory */
169
170/* The DREX byte has the following fields:
171 Bits 7-4 -- DREX.Dest, xmm destination register
172 Bit 3 -- DREX.OC0, operand config bit defines operand order
173 Bit 2 -- DREX.R, equivalent to REX_R bit, to extend ModRM register
174 Bit 1 -- DREX.X, equivalent to REX_X bit, to extend SIB index field
175 Bit 0 -- DREX.W, equivalent to REX_B bit, to extend ModRM r/m field,
176 SIB base field, or opcode reg field. */
177#define DREX_XMM(drex) ((drex >> 4) & 0xf)
178#define DREX_OC0(drex) ((drex >> 3) & 0x1)
179
7d421014
ILT
180/* Flags for prefixes which we somehow handled when printing the
181 current instruction. */
182static int used_prefixes;
183
5076851f
ILT
184/* Flags stored in PREFIXES. */
185#define PREFIX_REPZ 1
186#define PREFIX_REPNZ 2
187#define PREFIX_LOCK 4
188#define PREFIX_CS 8
189#define PREFIX_SS 0x10
190#define PREFIX_DS 0x20
191#define PREFIX_ES 0x40
192#define PREFIX_FS 0x80
193#define PREFIX_GS 0x100
194#define PREFIX_DATA 0x200
195#define PREFIX_ADDR 0x400
196#define PREFIX_FWAIT 0x800
197
252b5132
RH
198/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
199 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
200 on error. */
201#define FETCH_DATA(info, addr) \
6608db57 202 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
203 ? 1 : fetch_data ((info), (addr)))
204
205static int
26ca5450 206fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
207{
208 int status;
6608db57 209 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
210 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
211
0b1cf022 212 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
213 status = (*info->read_memory_func) (start,
214 priv->max_fetched,
215 addr - priv->max_fetched,
216 info);
217 else
218 status = -1;
252b5132
RH
219 if (status != 0)
220 {
7d421014 221 /* If we did manage to read at least one byte, then
db6eb5be
AM
222 print_insn_i386 will do something sensible. Otherwise, print
223 an error. We do that here because this is where we know
224 STATUS. */
7d421014 225 if (priv->max_fetched == priv->the_buffer)
5076851f 226 (*info->memory_error_func) (status, start, info);
252b5132
RH
227 longjmp (priv->bailout, 1);
228 }
229 else
230 priv->max_fetched = addr;
231 return 1;
232}
233
ce518a5f
L
234#define XX { NULL, 0 }
235
236#define Eb { OP_E, b_mode }
b6169b20 237#define EbS { OP_E, b_swap_mode }
ce518a5f 238#define Ev { OP_E, v_mode }
b6169b20 239#define EvS { OP_E, v_swap_mode }
ce518a5f
L
240#define Ed { OP_E, d_mode }
241#define Edq { OP_E, dq_mode }
242#define Edqw { OP_E, dqw_mode }
42903f7f
L
243#define Edqb { OP_E, dqb_mode }
244#define Edqd { OP_E, dqd_mode }
09335d05 245#define Eq { OP_E, q_mode }
ce518a5f
L
246#define indirEv { OP_indirE, stack_v_mode }
247#define indirEp { OP_indirE, f_mode }
248#define stackEv { OP_E, stack_v_mode }
249#define Em { OP_E, m_mode }
250#define Ew { OP_E, w_mode }
251#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 252#define Ma { OP_M, a_mode }
b844680a 253#define Mb { OP_M, b_mode }
d9a5e5e5 254#define Md { OP_M, d_mode }
f1f8f695 255#define Mo { OP_M, o_mode }
ce518a5f
L
256#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
257#define Mq { OP_M, q_mode }
4ee52178 258#define Mx { OP_M, x_mode }
c0f3af97 259#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
260#define Gb { OP_G, b_mode }
261#define Gv { OP_G, v_mode }
262#define Gd { OP_G, d_mode }
263#define Gdq { OP_G, dq_mode }
264#define Gm { OP_G, m_mode }
265#define Gw { OP_G, w_mode }
6f74c397
L
266#define Rd { OP_R, d_mode }
267#define Rm { OP_R, m_mode }
ce518a5f
L
268#define Ib { OP_I, b_mode }
269#define sIb { OP_sI, b_mode } /* sign extened byte */
270#define Iv { OP_I, v_mode }
271#define Iq { OP_I, q_mode }
272#define Iv64 { OP_I64, v_mode }
273#define Iw { OP_I, w_mode }
274#define I1 { OP_I, const_1_mode }
275#define Jb { OP_J, b_mode }
276#define Jv { OP_J, v_mode }
277#define Cm { OP_C, m_mode }
278#define Dm { OP_D, m_mode }
279#define Td { OP_T, d_mode }
b844680a 280#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
281
282#define RMeAX { OP_REG, eAX_reg }
283#define RMeBX { OP_REG, eBX_reg }
284#define RMeCX { OP_REG, eCX_reg }
285#define RMeDX { OP_REG, eDX_reg }
286#define RMeSP { OP_REG, eSP_reg }
287#define RMeBP { OP_REG, eBP_reg }
288#define RMeSI { OP_REG, eSI_reg }
289#define RMeDI { OP_REG, eDI_reg }
290#define RMrAX { OP_REG, rAX_reg }
291#define RMrBX { OP_REG, rBX_reg }
292#define RMrCX { OP_REG, rCX_reg }
293#define RMrDX { OP_REG, rDX_reg }
294#define RMrSP { OP_REG, rSP_reg }
295#define RMrBP { OP_REG, rBP_reg }
296#define RMrSI { OP_REG, rSI_reg }
297#define RMrDI { OP_REG, rDI_reg }
298#define RMAL { OP_REG, al_reg }
299#define RMAL { OP_REG, al_reg }
300#define RMCL { OP_REG, cl_reg }
301#define RMDL { OP_REG, dl_reg }
302#define RMBL { OP_REG, bl_reg }
303#define RMAH { OP_REG, ah_reg }
304#define RMCH { OP_REG, ch_reg }
305#define RMDH { OP_REG, dh_reg }
306#define RMBH { OP_REG, bh_reg }
307#define RMAX { OP_REG, ax_reg }
308#define RMDX { OP_REG, dx_reg }
309
310#define eAX { OP_IMREG, eAX_reg }
311#define eBX { OP_IMREG, eBX_reg }
312#define eCX { OP_IMREG, eCX_reg }
313#define eDX { OP_IMREG, eDX_reg }
314#define eSP { OP_IMREG, eSP_reg }
315#define eBP { OP_IMREG, eBP_reg }
316#define eSI { OP_IMREG, eSI_reg }
317#define eDI { OP_IMREG, eDI_reg }
318#define AL { OP_IMREG, al_reg }
319#define CL { OP_IMREG, cl_reg }
320#define DL { OP_IMREG, dl_reg }
321#define BL { OP_IMREG, bl_reg }
322#define AH { OP_IMREG, ah_reg }
323#define CH { OP_IMREG, ch_reg }
324#define DH { OP_IMREG, dh_reg }
325#define BH { OP_IMREG, bh_reg }
326#define AX { OP_IMREG, ax_reg }
327#define DX { OP_IMREG, dx_reg }
328#define zAX { OP_IMREG, z_mode_ax_reg }
329#define indirDX { OP_IMREG, indir_dx_reg }
330
331#define Sw { OP_SEG, w_mode }
332#define Sv { OP_SEG, v_mode }
333#define Ap { OP_DIR, 0 }
334#define Ob { OP_OFF64, b_mode }
335#define Ov { OP_OFF64, v_mode }
336#define Xb { OP_DSreg, eSI_reg }
337#define Xv { OP_DSreg, eSI_reg }
338#define Xz { OP_DSreg, eSI_reg }
339#define Yb { OP_ESreg, eDI_reg }
340#define Yv { OP_ESreg, eDI_reg }
341#define DSBX { OP_DSreg, eBX_reg }
342
343#define es { OP_REG, es_reg }
344#define ss { OP_REG, ss_reg }
345#define cs { OP_REG, cs_reg }
346#define ds { OP_REG, ds_reg }
347#define fs { OP_REG, fs_reg }
348#define gs { OP_REG, gs_reg }
349
350#define MX { OP_MMX, 0 }
351#define XM { OP_XMM, 0 }
c0f3af97 352#define XMM { OP_XMM, xmm_mode }
ce518a5f 353#define EM { OP_EM, v_mode }
b6169b20 354#define EMS { OP_EM, v_swap_mode }
09a2c6cf 355#define EMd { OP_EM, d_mode }
14051056 356#define EMx { OP_EM, x_mode }
8976381e 357#define EXw { OP_EX, w_mode }
09a2c6cf 358#define EXd { OP_EX, d_mode }
fa99fab2 359#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 360#define EXq { OP_EX, q_mode }
b6169b20 361#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 362#define EXx { OP_EX, x_mode }
b6169b20 363#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
364#define EXxmm { OP_EX, xmm_mode }
365#define EXxmmq { OP_EX, xmmq_mode }
366#define EXymmq { OP_EX, ymmq_mode }
0bfee649 367#define EXVexWdq { OP_EX, vex_w_dq_mode }
ce518a5f
L
368#define MS { OP_MS, v_mode }
369#define XS { OP_XS, v_mode }
09335d05 370#define EMCq { OP_EMC, q_mode }
ce518a5f 371#define MXC { OP_MXC, 0 }
ce518a5f 372#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 373#define CMP { CMP_Fixup, 0 }
42903f7f 374#define XMM0 { XMM_Fixup, 0 }
252b5132 375
c0f3af97
L
376#define Vex { OP_VEX, vex_mode }
377#define Vex128 { OP_VEX, vex128_mode }
378#define Vex256 { OP_VEX, vex256_mode }
c0f3af97 379#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 380#define EXdVexS { OP_EX_Vex, d_swap_mode }
c0f3af97 381#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 382#define EXqVexS { OP_EX_Vex, q_swap_mode }
c0f3af97 383#define XMVex { OP_XMM_Vex, 0 }
c0f3af97
L
384#define XMVexI4 { OP_REG_VexI4, x_mode }
385#define PCLMUL { PCLMUL_Fixup, 0 }
386#define VZERO { VZERO_Fixup, 0 }
387#define VCMP { VCMP_Fixup, 0 }
c0f3af97 388
35c52694 389/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
390#define Xbr { REP_Fixup, eSI_reg }
391#define Xvr { REP_Fixup, eSI_reg }
392#define Ybr { REP_Fixup, eDI_reg }
393#define Yvr { REP_Fixup, eDI_reg }
394#define Yzr { REP_Fixup, eDI_reg }
395#define indirDXr { REP_Fixup, indir_dx_reg }
396#define ALr { REP_Fixup, al_reg }
397#define eAXr { REP_Fixup, eAX_reg }
398
399#define cond_jump_flag { NULL, cond_jump_mode }
400#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 401
252b5132 402/* bits in sizeflag */
252b5132 403#define SUFFIX_ALWAYS 4
252b5132
RH
404#define AFLAG 2
405#define DFLAG 1
406
d55ee72f
L
407/* byte operand */
408#define b_mode 1
b6169b20
L
409/* byte operand with operand swapped */
410#define b_swap_mode (b_mode + 1)
d55ee72f 411/* operand size depends on prefixes */
b6169b20
L
412#define v_mode (b_swap_mode + 1)
413/* operand size depends on prefixes with operand swapped */
414#define v_swap_mode (v_mode + 1)
d55ee72f 415/* word operand */
b6169b20 416#define w_mode (v_swap_mode + 1)
d55ee72f
L
417/* double word operand */
418#define d_mode (w_mode + 1)
fa99fab2
L
419/* double word operand with operand swapped */
420#define d_swap_mode (d_mode + 1)
d55ee72f 421/* quad word operand */
fa99fab2 422#define q_mode (d_swap_mode + 1)
b6169b20
L
423/* quad word operand with operand swapped */
424#define q_swap_mode (q_mode + 1)
d55ee72f 425/* ten-byte operand */
b6169b20 426#define t_mode (q_swap_mode + 1)
c0f3af97 427/* 16-byte XMM or 32-byte YMM operand */
d55ee72f 428#define x_mode (t_mode + 1)
b6169b20
L
429/* 16-byte XMM or 32-byte YMM operand with operand swapped */
430#define x_swap_mode (x_mode + 1)
c0f3af97 431/* 16-byte XMM operand */
b6169b20 432#define xmm_mode (x_swap_mode + 1)
c0f3af97
L
433/* 16-byte XMM or quad word operand */
434#define xmmq_mode (xmm_mode + 1)
435/* 32-byte YMM or quad word operand */
436#define ymmq_mode (xmmq_mode + 1)
d55ee72f 437/* d_mode in 32bit, q_mode in 64bit mode. */
c0f3af97 438#define m_mode (ymmq_mode + 1)
34b772a6
JB
439/* pair of v_mode operands */
440#define a_mode (m_mode + 1)
441#define cond_jump_mode (a_mode + 1)
d55ee72f
L
442#define loop_jcxz_mode (cond_jump_mode + 1)
443/* operand size depends on REX prefixes. */
444#define dq_mode (loop_jcxz_mode + 1)
445/* registers like dq_mode, memory like w_mode. */
446#define dqw_mode (dq_mode + 1)
447/* 4- or 6-byte pointer operand */
448#define f_mode (dqw_mode + 1)
449#define const_1_mode (f_mode + 1)
450/* v_mode for stack-related opcodes. */
451#define stack_v_mode (const_1_mode + 1)
452/* non-quad operand size depends on prefixes */
453#define z_mode (stack_v_mode + 1)
454/* 16-byte operand */
455#define o_mode (z_mode + 1)
456/* registers like dq_mode, memory like b_mode. */
457#define dqb_mode (o_mode + 1)
458/* registers like dq_mode, memory like d_mode. */
459#define dqd_mode (dqb_mode + 1)
c0f3af97
L
460/* normal vex mode */
461#define vex_mode (dqd_mode + 1)
462/* 128bit vex mode */
463#define vex128_mode (vex_mode + 1)
464/* 256bit vex mode */
465#define vex256_mode (vex128_mode + 1)
0bfee649
L
466/* operand size depends on the VEX.W bit. */
467#define vex_w_dq_mode (vex256_mode + 1)
c0f3af97 468
0bfee649 469#define es_reg (vex_w_dq_mode + 1)
d55ee72f
L
470#define cs_reg (es_reg + 1)
471#define ss_reg (cs_reg + 1)
472#define ds_reg (ss_reg + 1)
473#define fs_reg (ds_reg + 1)
474#define gs_reg (fs_reg + 1)
475
476#define eAX_reg (gs_reg + 1)
477#define eCX_reg (eAX_reg + 1)
478#define eDX_reg (eCX_reg + 1)
479#define eBX_reg (eDX_reg + 1)
480#define eSP_reg (eBX_reg + 1)
481#define eBP_reg (eSP_reg + 1)
482#define eSI_reg (eBP_reg + 1)
483#define eDI_reg (eSI_reg + 1)
484
485#define al_reg (eDI_reg + 1)
486#define cl_reg (al_reg + 1)
487#define dl_reg (cl_reg + 1)
488#define bl_reg (dl_reg + 1)
489#define ah_reg (bl_reg + 1)
490#define ch_reg (ah_reg + 1)
491#define dh_reg (ch_reg + 1)
492#define bh_reg (dh_reg + 1)
493
494#define ax_reg (bh_reg + 1)
495#define cx_reg (ax_reg + 1)
496#define dx_reg (cx_reg + 1)
497#define bx_reg (dx_reg + 1)
498#define sp_reg (bx_reg + 1)
499#define bp_reg (sp_reg + 1)
500#define si_reg (bp_reg + 1)
501#define di_reg (si_reg + 1)
502
503#define rAX_reg (di_reg + 1)
504#define rCX_reg (rAX_reg + 1)
505#define rDX_reg (rCX_reg + 1)
506#define rBX_reg (rDX_reg + 1)
507#define rSP_reg (rBX_reg + 1)
508#define rBP_reg (rSP_reg + 1)
509#define rSI_reg (rBP_reg + 1)
510#define rDI_reg (rSI_reg + 1)
511
512#define z_mode_ax_reg (rDI_reg + 1)
513#define indir_dx_reg (z_mode_ax_reg + 1)
514
515#define MAX_BYTEMODE indir_dx_reg
516
517/* Flags that are OR'ed into the bytemode field to pass extra
518 information. */
519#define DREX_OC1 0x10000 /* OC1 bit set */
520#define DREX_NO_OC0 0x20000 /* OC0 bit not used */
521#define DREX_MASK 0x40000 /* mask to delete */
522
523#if MAX_BYTEMODE >= DREX_OC1
524#error MAX_BYTEMODE must be less than DREX_OC1
525#endif
252b5132 526
1b0d430b
L
527#define FLOATCODE 1
528#define USE_REG_TABLE (FLOATCODE + 1)
529#define USE_MOD_TABLE (USE_REG_TABLE + 1)
530#define USE_RM_TABLE (USE_MOD_TABLE + 1)
531#define USE_PREFIX_TABLE (USE_RM_TABLE + 1)
532#define USE_X86_64_TABLE (USE_PREFIX_TABLE + 1)
533#define USE_3BYTE_TABLE (USE_X86_64_TABLE + 1)
c0f3af97
L
534#define USE_VEX_C4_TABLE (USE_3BYTE_TABLE + 1)
535#define USE_VEX_C5_TABLE (USE_VEX_C4_TABLE + 1)
536#define USE_VEX_LEN_TABLE (USE_VEX_C5_TABLE + 1)
6439fc28 537
1ceb70f8 538#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 539
4e7d34a6 540#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
541#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
542#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
543#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
544#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
545#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
546#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
c0f3af97
L
547#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
548#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
549#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
1ceb70f8
L
550
551#define REG_80 0
552#define REG_81 (REG_80 + 1)
553#define REG_82 (REG_81 + 1)
554#define REG_8F (REG_82 + 1)
555#define REG_C0 (REG_8F + 1)
556#define REG_C1 (REG_C0 + 1)
557#define REG_C6 (REG_C1 + 1)
558#define REG_C7 (REG_C6 + 1)
559#define REG_D0 (REG_C7 + 1)
560#define REG_D1 (REG_D0 + 1)
561#define REG_D2 (REG_D1 + 1)
562#define REG_D3 (REG_D2 + 1)
563#define REG_F6 (REG_D3 + 1)
564#define REG_F7 (REG_F6 + 1)
565#define REG_FE (REG_F7 + 1)
566#define REG_FF (REG_FE + 1)
567#define REG_0F00 (REG_FF + 1)
568#define REG_0F01 (REG_0F00 + 1)
b5b1fc4f
L
569#define REG_0F0D (REG_0F01 + 1)
570#define REG_0F18 (REG_0F0D + 1)
1ceb70f8
L
571#define REG_0F71 (REG_0F18 + 1)
572#define REG_0F72 (REG_0F71 + 1)
573#define REG_0F73 (REG_0F72 + 1)
574#define REG_0FA6 (REG_0F73 + 1)
575#define REG_0FA7 (REG_0FA6 + 1)
576#define REG_0FAE (REG_0FA7 + 1)
577#define REG_0FBA (REG_0FAE + 1)
578#define REG_0FC7 (REG_0FBA + 1)
c0f3af97
L
579#define REG_VEX_71 (REG_0FC7 + 1)
580#define REG_VEX_72 (REG_VEX_71 + 1)
581#define REG_VEX_73 (REG_VEX_72 + 1)
582#define REG_VEX_AE (REG_VEX_73 + 1)
1ceb70f8
L
583
584#define MOD_8D 0
92fddf8e 585#define MOD_0F01_REG_0 (MOD_8D + 1)
1ceb70f8
L
586#define MOD_0F01_REG_1 (MOD_0F01_REG_0 + 1)
587#define MOD_0F01_REG_2 (MOD_0F01_REG_1 + 1)
588#define MOD_0F01_REG_3 (MOD_0F01_REG_2 + 1)
589#define MOD_0F01_REG_7 (MOD_0F01_REG_3 + 1)
92fddf8e
L
590#define MOD_0F12_PREFIX_0 (MOD_0F01_REG_7 + 1)
591#define MOD_0F13 (MOD_0F12_PREFIX_0 + 1)
592#define MOD_0F16_PREFIX_0 (MOD_0F13 + 1)
593#define MOD_0F17 (MOD_0F16_PREFIX_0 + 1)
594#define MOD_0F18_REG_0 (MOD_0F17 + 1)
1ceb70f8
L
595#define MOD_0F18_REG_1 (MOD_0F18_REG_0 + 1)
596#define MOD_0F18_REG_2 (MOD_0F18_REG_1 + 1)
597#define MOD_0F18_REG_3 (MOD_0F18_REG_2 + 1)
92fddf8e
L
598#define MOD_0F20 (MOD_0F18_REG_3 + 1)
599#define MOD_0F21 (MOD_0F20 + 1)
600#define MOD_0F22 (MOD_0F21 + 1)
601#define MOD_0F23 (MOD_0F22 + 1)
602#define MOD_0F24 (MOD_0F23 + 1)
603#define MOD_0F26 (MOD_0F24 + 1)
75c135a8
L
604#define MOD_0F2B_PREFIX_0 (MOD_0F26 + 1)
605#define MOD_0F2B_PREFIX_1 (MOD_0F2B_PREFIX_0 + 1)
606#define MOD_0F2B_PREFIX_2 (MOD_0F2B_PREFIX_1 + 1)
607#define MOD_0F2B_PREFIX_3 (MOD_0F2B_PREFIX_2 + 1)
608#define MOD_0F51 (MOD_0F2B_PREFIX_3 + 1)
609#define MOD_0F71_REG_2 (MOD_0F51 + 1)
1ceb70f8
L
610#define MOD_0F71_REG_4 (MOD_0F71_REG_2 + 1)
611#define MOD_0F71_REG_6 (MOD_0F71_REG_4 + 1)
612#define MOD_0F72_REG_2 (MOD_0F71_REG_6 + 1)
613#define MOD_0F72_REG_4 (MOD_0F72_REG_2 + 1)
614#define MOD_0F72_REG_6 (MOD_0F72_REG_4 + 1)
615#define MOD_0F73_REG_2 (MOD_0F72_REG_6 + 1)
616#define MOD_0F73_REG_3 (MOD_0F73_REG_2 + 1)
617#define MOD_0F73_REG_6 (MOD_0F73_REG_3 + 1)
618#define MOD_0F73_REG_7 (MOD_0F73_REG_6 + 1)
619#define MOD_0FAE_REG_0 (MOD_0F73_REG_7 + 1)
620#define MOD_0FAE_REG_1 (MOD_0FAE_REG_0 + 1)
621#define MOD_0FAE_REG_2 (MOD_0FAE_REG_1 + 1)
622#define MOD_0FAE_REG_3 (MOD_0FAE_REG_2 + 1)
475a2301
L
623#define MOD_0FAE_REG_4 (MOD_0FAE_REG_3 + 1)
624#define MOD_0FAE_REG_5 (MOD_0FAE_REG_4 + 1)
1ceb70f8
L
625#define MOD_0FAE_REG_6 (MOD_0FAE_REG_5 + 1)
626#define MOD_0FAE_REG_7 (MOD_0FAE_REG_6 + 1)
92fddf8e
L
627#define MOD_0FB2 (MOD_0FAE_REG_7 + 1)
628#define MOD_0FB4 (MOD_0FB2 + 1)
629#define MOD_0FB5 (MOD_0FB4 + 1)
630#define MOD_0FC7_REG_6 (MOD_0FB5 + 1)
1ceb70f8 631#define MOD_0FC7_REG_7 (MOD_0FC7_REG_6 + 1)
75c135a8
L
632#define MOD_0FD7 (MOD_0FC7_REG_7 + 1)
633#define MOD_0FE7_PREFIX_2 (MOD_0FD7 + 1)
634#define MOD_0FF0_PREFIX_3 (MOD_0FE7_PREFIX_2 + 1)
635#define MOD_0F382A_PREFIX_2 (MOD_0FF0_PREFIX_3 + 1)
636#define MOD_62_32BIT (MOD_0F382A_PREFIX_2 + 1)
1ceb70f8
L
637#define MOD_C4_32BIT (MOD_62_32BIT + 1)
638#define MOD_C5_32BIT (MOD_C4_32BIT + 1)
c0f3af97
L
639#define MOD_VEX_12_PREFIX_0 (MOD_C5_32BIT + 1)
640#define MOD_VEX_13 (MOD_VEX_12_PREFIX_0 + 1)
641#define MOD_VEX_16_PREFIX_0 (MOD_VEX_13 + 1)
642#define MOD_VEX_17 (MOD_VEX_16_PREFIX_0 + 1)
643#define MOD_VEX_2B (MOD_VEX_17 + 1)
644#define MOD_VEX_51 (MOD_VEX_2B + 1)
645#define MOD_VEX_71_REG_2 (MOD_VEX_51 + 1)
646#define MOD_VEX_71_REG_4 (MOD_VEX_71_REG_2 + 1)
647#define MOD_VEX_71_REG_6 (MOD_VEX_71_REG_4 + 1)
648#define MOD_VEX_72_REG_2 (MOD_VEX_71_REG_6 + 1)
649#define MOD_VEX_72_REG_4 (MOD_VEX_72_REG_2 + 1)
650#define MOD_VEX_72_REG_6 (MOD_VEX_72_REG_4 + 1)
651#define MOD_VEX_73_REG_2 (MOD_VEX_72_REG_6 + 1)
652#define MOD_VEX_73_REG_3 (MOD_VEX_73_REG_2 + 1)
653#define MOD_VEX_73_REG_6 (MOD_VEX_73_REG_3 + 1)
654#define MOD_VEX_73_REG_7 (MOD_VEX_73_REG_6 + 1)
655#define MOD_VEX_AE_REG_2 (MOD_VEX_73_REG_7 + 1)
656#define MOD_VEX_AE_REG_3 (MOD_VEX_AE_REG_2 + 1)
657#define MOD_VEX_D7_PREFIX_2 (MOD_VEX_AE_REG_3 + 1)
658#define MOD_VEX_E7_PREFIX_2 (MOD_VEX_D7_PREFIX_2 + 1)
659#define MOD_VEX_F0_PREFIX_3 (MOD_VEX_E7_PREFIX_2 + 1)
660#define MOD_VEX_3818_PREFIX_2 (MOD_VEX_F0_PREFIX_3 + 1)
661#define MOD_VEX_3819_PREFIX_2 (MOD_VEX_3818_PREFIX_2 + 1)
662#define MOD_VEX_381A_PREFIX_2 (MOD_VEX_3819_PREFIX_2 + 1)
663#define MOD_VEX_382A_PREFIX_2 (MOD_VEX_381A_PREFIX_2 + 1)
664#define MOD_VEX_382C_PREFIX_2 (MOD_VEX_382A_PREFIX_2 + 1)
665#define MOD_VEX_382D_PREFIX_2 (MOD_VEX_382C_PREFIX_2 + 1)
666#define MOD_VEX_382E_PREFIX_2 (MOD_VEX_382D_PREFIX_2 + 1)
667#define MOD_VEX_382F_PREFIX_2 (MOD_VEX_382E_PREFIX_2 + 1)
1ceb70f8
L
668
669#define RM_0F01_REG_0 0
670#define RM_0F01_REG_1 (RM_0F01_REG_0 + 1)
475a2301
L
671#define RM_0F01_REG_2 (RM_0F01_REG_1 + 1)
672#define RM_0F01_REG_3 (RM_0F01_REG_2 + 1)
1ceb70f8
L
673#define RM_0F01_REG_7 (RM_0F01_REG_3 + 1)
674#define RM_0FAE_REG_5 (RM_0F01_REG_7 + 1)
675#define RM_0FAE_REG_6 (RM_0FAE_REG_5 + 1)
676#define RM_0FAE_REG_7 (RM_0FAE_REG_6 + 1)
677
678#define PREFIX_90 0
679#define PREFIX_0F10 (PREFIX_90 + 1)
680#define PREFIX_0F11 (PREFIX_0F10 + 1)
681#define PREFIX_0F12 (PREFIX_0F11 + 1)
682#define PREFIX_0F16 (PREFIX_0F12 + 1)
683#define PREFIX_0F2A (PREFIX_0F16 + 1)
684#define PREFIX_0F2B (PREFIX_0F2A + 1)
685#define PREFIX_0F2C (PREFIX_0F2B + 1)
686#define PREFIX_0F2D (PREFIX_0F2C + 1)
687#define PREFIX_0F2E (PREFIX_0F2D + 1)
688#define PREFIX_0F2F (PREFIX_0F2E + 1)
689#define PREFIX_0F51 (PREFIX_0F2F + 1)
690#define PREFIX_0F52 (PREFIX_0F51 + 1)
691#define PREFIX_0F53 (PREFIX_0F52 + 1)
692#define PREFIX_0F58 (PREFIX_0F53 + 1)
693#define PREFIX_0F59 (PREFIX_0F58 + 1)
694#define PREFIX_0F5A (PREFIX_0F59 + 1)
695#define PREFIX_0F5B (PREFIX_0F5A + 1)
696#define PREFIX_0F5C (PREFIX_0F5B + 1)
697#define PREFIX_0F5D (PREFIX_0F5C + 1)
698#define PREFIX_0F5E (PREFIX_0F5D + 1)
699#define PREFIX_0F5F (PREFIX_0F5E + 1)
700#define PREFIX_0F60 (PREFIX_0F5F + 1)
701#define PREFIX_0F61 (PREFIX_0F60 + 1)
702#define PREFIX_0F62 (PREFIX_0F61 + 1)
703#define PREFIX_0F6C (PREFIX_0F62 + 1)
704#define PREFIX_0F6D (PREFIX_0F6C + 1)
705#define PREFIX_0F6F (PREFIX_0F6D + 1)
706#define PREFIX_0F70 (PREFIX_0F6F + 1)
92fddf8e
L
707#define PREFIX_0F73_REG_3 (PREFIX_0F70 + 1)
708#define PREFIX_0F73_REG_7 (PREFIX_0F73_REG_3 + 1)
709#define PREFIX_0F78 (PREFIX_0F73_REG_7 + 1)
1ceb70f8
L
710#define PREFIX_0F79 (PREFIX_0F78 + 1)
711#define PREFIX_0F7C (PREFIX_0F79 + 1)
712#define PREFIX_0F7D (PREFIX_0F7C + 1)
713#define PREFIX_0F7E (PREFIX_0F7D + 1)
714#define PREFIX_0F7F (PREFIX_0F7E + 1)
715#define PREFIX_0FB8 (PREFIX_0F7F + 1)
716#define PREFIX_0FBD (PREFIX_0FB8 + 1)
717#define PREFIX_0FC2 (PREFIX_0FBD + 1)
4ee52178
L
718#define PREFIX_0FC3 (PREFIX_0FC2 + 1)
719#define PREFIX_0FC7_REG_6 (PREFIX_0FC3 + 1)
92fddf8e 720#define PREFIX_0FD0 (PREFIX_0FC7_REG_6 + 1)
1ceb70f8
L
721#define PREFIX_0FD6 (PREFIX_0FD0 + 1)
722#define PREFIX_0FE6 (PREFIX_0FD6 + 1)
723#define PREFIX_0FE7 (PREFIX_0FE6 + 1)
724#define PREFIX_0FF0 (PREFIX_0FE7 + 1)
725#define PREFIX_0FF7 (PREFIX_0FF0 + 1)
726#define PREFIX_0F3810 (PREFIX_0FF7 + 1)
727#define PREFIX_0F3814 (PREFIX_0F3810 + 1)
728#define PREFIX_0F3815 (PREFIX_0F3814 + 1)
729#define PREFIX_0F3817 (PREFIX_0F3815 + 1)
730#define PREFIX_0F3820 (PREFIX_0F3817 + 1)
731#define PREFIX_0F3821 (PREFIX_0F3820 + 1)
732#define PREFIX_0F3822 (PREFIX_0F3821 + 1)
733#define PREFIX_0F3823 (PREFIX_0F3822 + 1)
734#define PREFIX_0F3824 (PREFIX_0F3823 + 1)
735#define PREFIX_0F3825 (PREFIX_0F3824 + 1)
736#define PREFIX_0F3828 (PREFIX_0F3825 + 1)
737#define PREFIX_0F3829 (PREFIX_0F3828 + 1)
738#define PREFIX_0F382A (PREFIX_0F3829 + 1)
739#define PREFIX_0F382B (PREFIX_0F382A + 1)
740#define PREFIX_0F3830 (PREFIX_0F382B + 1)
741#define PREFIX_0F3831 (PREFIX_0F3830 + 1)
742#define PREFIX_0F3832 (PREFIX_0F3831 + 1)
743#define PREFIX_0F3833 (PREFIX_0F3832 + 1)
744#define PREFIX_0F3834 (PREFIX_0F3833 + 1)
745#define PREFIX_0F3835 (PREFIX_0F3834 + 1)
746#define PREFIX_0F3837 (PREFIX_0F3835 + 1)
747#define PREFIX_0F3838 (PREFIX_0F3837 + 1)
748#define PREFIX_0F3839 (PREFIX_0F3838 + 1)
749#define PREFIX_0F383A (PREFIX_0F3839 + 1)
750#define PREFIX_0F383B (PREFIX_0F383A + 1)
751#define PREFIX_0F383C (PREFIX_0F383B + 1)
752#define PREFIX_0F383D (PREFIX_0F383C + 1)
753#define PREFIX_0F383E (PREFIX_0F383D + 1)
754#define PREFIX_0F383F (PREFIX_0F383E + 1)
755#define PREFIX_0F3840 (PREFIX_0F383F + 1)
756#define PREFIX_0F3841 (PREFIX_0F3840 + 1)
f1f8f695
L
757#define PREFIX_0F3880 (PREFIX_0F3841 + 1)
758#define PREFIX_0F3881 (PREFIX_0F3880 + 1)
759#define PREFIX_0F38DB (PREFIX_0F3881 + 1)
c0f3af97
L
760#define PREFIX_0F38DC (PREFIX_0F38DB + 1)
761#define PREFIX_0F38DD (PREFIX_0F38DC + 1)
762#define PREFIX_0F38DE (PREFIX_0F38DD + 1)
763#define PREFIX_0F38DF (PREFIX_0F38DE + 1)
764#define PREFIX_0F38F0 (PREFIX_0F38DF + 1)
1ceb70f8
L
765#define PREFIX_0F38F1 (PREFIX_0F38F0 + 1)
766#define PREFIX_0F3A08 (PREFIX_0F38F1 + 1)
767#define PREFIX_0F3A09 (PREFIX_0F3A08 + 1)
768#define PREFIX_0F3A0A (PREFIX_0F3A09 + 1)
769#define PREFIX_0F3A0B (PREFIX_0F3A0A + 1)
770#define PREFIX_0F3A0C (PREFIX_0F3A0B + 1)
771#define PREFIX_0F3A0D (PREFIX_0F3A0C + 1)
772#define PREFIX_0F3A0E (PREFIX_0F3A0D + 1)
773#define PREFIX_0F3A14 (PREFIX_0F3A0E + 1)
774#define PREFIX_0F3A15 (PREFIX_0F3A14 + 1)
775#define PREFIX_0F3A16 (PREFIX_0F3A15 + 1)
776#define PREFIX_0F3A17 (PREFIX_0F3A16 + 1)
777#define PREFIX_0F3A20 (PREFIX_0F3A17 + 1)
778#define PREFIX_0F3A21 (PREFIX_0F3A20 + 1)
779#define PREFIX_0F3A22 (PREFIX_0F3A21 + 1)
780#define PREFIX_0F3A40 (PREFIX_0F3A22 + 1)
781#define PREFIX_0F3A41 (PREFIX_0F3A40 + 1)
782#define PREFIX_0F3A42 (PREFIX_0F3A41 + 1)
c0f3af97
L
783#define PREFIX_0F3A44 (PREFIX_0F3A42 + 1)
784#define PREFIX_0F3A60 (PREFIX_0F3A44 + 1)
1ceb70f8
L
785#define PREFIX_0F3A61 (PREFIX_0F3A60 + 1)
786#define PREFIX_0F3A62 (PREFIX_0F3A61 + 1)
787#define PREFIX_0F3A63 (PREFIX_0F3A62 + 1)
c0f3af97
L
788#define PREFIX_0F3ADF (PREFIX_0F3A63 + 1)
789#define PREFIX_VEX_10 (PREFIX_0F3ADF + 1)
790#define PREFIX_VEX_11 (PREFIX_VEX_10 + 1)
791#define PREFIX_VEX_12 (PREFIX_VEX_11 + 1)
792#define PREFIX_VEX_16 (PREFIX_VEX_12 + 1)
793#define PREFIX_VEX_2A (PREFIX_VEX_16 + 1)
794#define PREFIX_VEX_2C (PREFIX_VEX_2A + 1)
795#define PREFIX_VEX_2D (PREFIX_VEX_2C + 1)
796#define PREFIX_VEX_2E (PREFIX_VEX_2D + 1)
797#define PREFIX_VEX_2F (PREFIX_VEX_2E + 1)
798#define PREFIX_VEX_51 (PREFIX_VEX_2F + 1)
799#define PREFIX_VEX_52 (PREFIX_VEX_51 + 1)
800#define PREFIX_VEX_53 (PREFIX_VEX_52 + 1)
801#define PREFIX_VEX_58 (PREFIX_VEX_53 + 1)
802#define PREFIX_VEX_59 (PREFIX_VEX_58 + 1)
803#define PREFIX_VEX_5A (PREFIX_VEX_59 + 1)
804#define PREFIX_VEX_5B (PREFIX_VEX_5A + 1)
805#define PREFIX_VEX_5C (PREFIX_VEX_5B + 1)
806#define PREFIX_VEX_5D (PREFIX_VEX_5C + 1)
807#define PREFIX_VEX_5E (PREFIX_VEX_5D + 1)
808#define PREFIX_VEX_5F (PREFIX_VEX_5E + 1)
809#define PREFIX_VEX_60 (PREFIX_VEX_5F + 1)
810#define PREFIX_VEX_61 (PREFIX_VEX_60 + 1)
811#define PREFIX_VEX_62 (PREFIX_VEX_61 + 1)
812#define PREFIX_VEX_63 (PREFIX_VEX_62 + 1)
813#define PREFIX_VEX_64 (PREFIX_VEX_63 + 1)
814#define PREFIX_VEX_65 (PREFIX_VEX_64 + 1)
815#define PREFIX_VEX_66 (PREFIX_VEX_65 + 1)
816#define PREFIX_VEX_67 (PREFIX_VEX_66 + 1)
817#define PREFIX_VEX_68 (PREFIX_VEX_67 + 1)
818#define PREFIX_VEX_69 (PREFIX_VEX_68 + 1)
819#define PREFIX_VEX_6A (PREFIX_VEX_69 + 1)
820#define PREFIX_VEX_6B (PREFIX_VEX_6A + 1)
821#define PREFIX_VEX_6C (PREFIX_VEX_6B + 1)
822#define PREFIX_VEX_6D (PREFIX_VEX_6C + 1)
823#define PREFIX_VEX_6E (PREFIX_VEX_6D + 1)
824#define PREFIX_VEX_6F (PREFIX_VEX_6E + 1)
825#define PREFIX_VEX_70 (PREFIX_VEX_6F + 1)
826#define PREFIX_VEX_71_REG_2 (PREFIX_VEX_70 + 1)
827#define PREFIX_VEX_71_REG_4 (PREFIX_VEX_71_REG_2 + 1)
828#define PREFIX_VEX_71_REG_6 (PREFIX_VEX_71_REG_4 + 1)
829#define PREFIX_VEX_72_REG_2 (PREFIX_VEX_71_REG_6 + 1)
830#define PREFIX_VEX_72_REG_4 (PREFIX_VEX_72_REG_2 + 1)
831#define PREFIX_VEX_72_REG_6 (PREFIX_VEX_72_REG_4 + 1)
832#define PREFIX_VEX_73_REG_2 (PREFIX_VEX_72_REG_6 + 1)
833#define PREFIX_VEX_73_REG_3 (PREFIX_VEX_73_REG_2 + 1)
834#define PREFIX_VEX_73_REG_6 (PREFIX_VEX_73_REG_3 + 1)
835#define PREFIX_VEX_73_REG_7 (PREFIX_VEX_73_REG_6 + 1)
836#define PREFIX_VEX_74 (PREFIX_VEX_73_REG_7 + 1)
837#define PREFIX_VEX_75 (PREFIX_VEX_74 + 1)
838#define PREFIX_VEX_76 (PREFIX_VEX_75 + 1)
839#define PREFIX_VEX_77 (PREFIX_VEX_76 + 1)
840#define PREFIX_VEX_7C (PREFIX_VEX_77 + 1)
841#define PREFIX_VEX_7D (PREFIX_VEX_7C + 1)
842#define PREFIX_VEX_7E (PREFIX_VEX_7D + 1)
843#define PREFIX_VEX_7F (PREFIX_VEX_7E + 1)
844#define PREFIX_VEX_C2 (PREFIX_VEX_7F + 1)
845#define PREFIX_VEX_C4 (PREFIX_VEX_C2 + 1)
846#define PREFIX_VEX_C5 (PREFIX_VEX_C4 + 1)
847#define PREFIX_VEX_D0 (PREFIX_VEX_C5 + 1)
848#define PREFIX_VEX_D1 (PREFIX_VEX_D0 + 1)
849#define PREFIX_VEX_D2 (PREFIX_VEX_D1 + 1)
850#define PREFIX_VEX_D3 (PREFIX_VEX_D2 + 1)
851#define PREFIX_VEX_D4 (PREFIX_VEX_D3 + 1)
852#define PREFIX_VEX_D5 (PREFIX_VEX_D4 + 1)
853#define PREFIX_VEX_D6 (PREFIX_VEX_D5 + 1)
854#define PREFIX_VEX_D7 (PREFIX_VEX_D6 + 1)
855#define PREFIX_VEX_D8 (PREFIX_VEX_D7 + 1)
856#define PREFIX_VEX_D9 (PREFIX_VEX_D8 + 1)
857#define PREFIX_VEX_DA (PREFIX_VEX_D9 + 1)
858#define PREFIX_VEX_DB (PREFIX_VEX_DA + 1)
859#define PREFIX_VEX_DC (PREFIX_VEX_DB + 1)
860#define PREFIX_VEX_DD (PREFIX_VEX_DC + 1)
861#define PREFIX_VEX_DE (PREFIX_VEX_DD + 1)
862#define PREFIX_VEX_DF (PREFIX_VEX_DE + 1)
863#define PREFIX_VEX_E0 (PREFIX_VEX_DF + 1)
864#define PREFIX_VEX_E1 (PREFIX_VEX_E0 + 1)
865#define PREFIX_VEX_E2 (PREFIX_VEX_E1 + 1)
866#define PREFIX_VEX_E3 (PREFIX_VEX_E2 + 1)
867#define PREFIX_VEX_E4 (PREFIX_VEX_E3 + 1)
868#define PREFIX_VEX_E5 (PREFIX_VEX_E4 + 1)
869#define PREFIX_VEX_E6 (PREFIX_VEX_E5 + 1)
870#define PREFIX_VEX_E7 (PREFIX_VEX_E6 + 1)
871#define PREFIX_VEX_E8 (PREFIX_VEX_E7 + 1)
872#define PREFIX_VEX_E9 (PREFIX_VEX_E8 + 1)
873#define PREFIX_VEX_EA (PREFIX_VEX_E9 + 1)
874#define PREFIX_VEX_EB (PREFIX_VEX_EA + 1)
875#define PREFIX_VEX_EC (PREFIX_VEX_EB + 1)
876#define PREFIX_VEX_ED (PREFIX_VEX_EC + 1)
877#define PREFIX_VEX_EE (PREFIX_VEX_ED + 1)
878#define PREFIX_VEX_EF (PREFIX_VEX_EE + 1)
879#define PREFIX_VEX_F0 (PREFIX_VEX_EF + 1)
880#define PREFIX_VEX_F1 (PREFIX_VEX_F0 + 1)
881#define PREFIX_VEX_F2 (PREFIX_VEX_F1 + 1)
882#define PREFIX_VEX_F3 (PREFIX_VEX_F2 + 1)
883#define PREFIX_VEX_F4 (PREFIX_VEX_F3 + 1)
884#define PREFIX_VEX_F5 (PREFIX_VEX_F4 + 1)
885#define PREFIX_VEX_F6 (PREFIX_VEX_F5 + 1)
886#define PREFIX_VEX_F7 (PREFIX_VEX_F6 + 1)
887#define PREFIX_VEX_F8 (PREFIX_VEX_F7 + 1)
888#define PREFIX_VEX_F9 (PREFIX_VEX_F8 + 1)
889#define PREFIX_VEX_FA (PREFIX_VEX_F9 + 1)
890#define PREFIX_VEX_FB (PREFIX_VEX_FA + 1)
891#define PREFIX_VEX_FC (PREFIX_VEX_FB + 1)
892#define PREFIX_VEX_FD (PREFIX_VEX_FC + 1)
893#define PREFIX_VEX_FE (PREFIX_VEX_FD + 1)
06c8514a
L
894#define PREFIX_VEX_3800 (PREFIX_VEX_FE + 1)
895#define PREFIX_VEX_3801 (PREFIX_VEX_3800 + 1)
896#define PREFIX_VEX_3802 (PREFIX_VEX_3801 + 1)
897#define PREFIX_VEX_3803 (PREFIX_VEX_3802 + 1)
898#define PREFIX_VEX_3804 (PREFIX_VEX_3803 + 1)
899#define PREFIX_VEX_3805 (PREFIX_VEX_3804 + 1)
900#define PREFIX_VEX_3806 (PREFIX_VEX_3805 + 1)
901#define PREFIX_VEX_3807 (PREFIX_VEX_3806 + 1)
902#define PREFIX_VEX_3808 (PREFIX_VEX_3807 + 1)
903#define PREFIX_VEX_3809 (PREFIX_VEX_3808 + 1)
904#define PREFIX_VEX_380A (PREFIX_VEX_3809 + 1)
905#define PREFIX_VEX_380B (PREFIX_VEX_380A + 1)
906#define PREFIX_VEX_380C (PREFIX_VEX_380B + 1)
907#define PREFIX_VEX_380D (PREFIX_VEX_380C + 1)
908#define PREFIX_VEX_380E (PREFIX_VEX_380D + 1)
909#define PREFIX_VEX_380F (PREFIX_VEX_380E + 1)
910#define PREFIX_VEX_3817 (PREFIX_VEX_380F + 1)
911#define PREFIX_VEX_3818 (PREFIX_VEX_3817 + 1)
912#define PREFIX_VEX_3819 (PREFIX_VEX_3818 + 1)
913#define PREFIX_VEX_381A (PREFIX_VEX_3819 + 1)
914#define PREFIX_VEX_381C (PREFIX_VEX_381A + 1)
915#define PREFIX_VEX_381D (PREFIX_VEX_381C + 1)
916#define PREFIX_VEX_381E (PREFIX_VEX_381D + 1)
917#define PREFIX_VEX_3820 (PREFIX_VEX_381E + 1)
918#define PREFIX_VEX_3821 (PREFIX_VEX_3820 + 1)
919#define PREFIX_VEX_3822 (PREFIX_VEX_3821 + 1)
920#define PREFIX_VEX_3823 (PREFIX_VEX_3822 + 1)
921#define PREFIX_VEX_3824 (PREFIX_VEX_3823 + 1)
922#define PREFIX_VEX_3825 (PREFIX_VEX_3824 + 1)
923#define PREFIX_VEX_3828 (PREFIX_VEX_3825 + 1)
924#define PREFIX_VEX_3829 (PREFIX_VEX_3828 + 1)
925#define PREFIX_VEX_382A (PREFIX_VEX_3829 + 1)
926#define PREFIX_VEX_382B (PREFIX_VEX_382A + 1)
927#define PREFIX_VEX_382C (PREFIX_VEX_382B + 1)
928#define PREFIX_VEX_382D (PREFIX_VEX_382C + 1)
929#define PREFIX_VEX_382E (PREFIX_VEX_382D + 1)
930#define PREFIX_VEX_382F (PREFIX_VEX_382E + 1)
931#define PREFIX_VEX_3830 (PREFIX_VEX_382F + 1)
932#define PREFIX_VEX_3831 (PREFIX_VEX_3830 + 1)
933#define PREFIX_VEX_3832 (PREFIX_VEX_3831 + 1)
934#define PREFIX_VEX_3833 (PREFIX_VEX_3832 + 1)
935#define PREFIX_VEX_3834 (PREFIX_VEX_3833 + 1)
936#define PREFIX_VEX_3835 (PREFIX_VEX_3834 + 1)
937#define PREFIX_VEX_3837 (PREFIX_VEX_3835 + 1)
938#define PREFIX_VEX_3838 (PREFIX_VEX_3837 + 1)
939#define PREFIX_VEX_3839 (PREFIX_VEX_3838 + 1)
940#define PREFIX_VEX_383A (PREFIX_VEX_3839 + 1)
941#define PREFIX_VEX_383B (PREFIX_VEX_383A + 1)
942#define PREFIX_VEX_383C (PREFIX_VEX_383B + 1)
943#define PREFIX_VEX_383D (PREFIX_VEX_383C + 1)
944#define PREFIX_VEX_383E (PREFIX_VEX_383D + 1)
945#define PREFIX_VEX_383F (PREFIX_VEX_383E + 1)
946#define PREFIX_VEX_3840 (PREFIX_VEX_383F + 1)
947#define PREFIX_VEX_3841 (PREFIX_VEX_3840 + 1)
0bfee649
L
948#define PREFIX_VEX_3896 (PREFIX_VEX_3841 + 1)
949#define PREFIX_VEX_3897 (PREFIX_VEX_3896 + 1)
950#define PREFIX_VEX_3898 (PREFIX_VEX_3897 + 1)
951#define PREFIX_VEX_3899 (PREFIX_VEX_3898 + 1)
952#define PREFIX_VEX_389A (PREFIX_VEX_3899 + 1)
953#define PREFIX_VEX_389B (PREFIX_VEX_389A + 1)
954#define PREFIX_VEX_389C (PREFIX_VEX_389B + 1)
955#define PREFIX_VEX_389D (PREFIX_VEX_389C + 1)
956#define PREFIX_VEX_389E (PREFIX_VEX_389D + 1)
957#define PREFIX_VEX_389F (PREFIX_VEX_389E + 1)
958#define PREFIX_VEX_38A6 (PREFIX_VEX_389F + 1)
959#define PREFIX_VEX_38A7 (PREFIX_VEX_38A6 + 1)
960#define PREFIX_VEX_38A8 (PREFIX_VEX_38A7 + 1)
961#define PREFIX_VEX_38A9 (PREFIX_VEX_38A8 + 1)
962#define PREFIX_VEX_38AA (PREFIX_VEX_38A9 + 1)
963#define PREFIX_VEX_38AB (PREFIX_VEX_38AA + 1)
964#define PREFIX_VEX_38AC (PREFIX_VEX_38AB + 1)
965#define PREFIX_VEX_38AD (PREFIX_VEX_38AC + 1)
966#define PREFIX_VEX_38AE (PREFIX_VEX_38AD + 1)
967#define PREFIX_VEX_38AF (PREFIX_VEX_38AE + 1)
968#define PREFIX_VEX_38B6 (PREFIX_VEX_38AF + 1)
969#define PREFIX_VEX_38B7 (PREFIX_VEX_38B6 + 1)
970#define PREFIX_VEX_38B8 (PREFIX_VEX_38B7 + 1)
971#define PREFIX_VEX_38B9 (PREFIX_VEX_38B8 + 1)
972#define PREFIX_VEX_38BA (PREFIX_VEX_38B9 + 1)
973#define PREFIX_VEX_38BB (PREFIX_VEX_38BA + 1)
974#define PREFIX_VEX_38BC (PREFIX_VEX_38BB + 1)
975#define PREFIX_VEX_38BD (PREFIX_VEX_38BC + 1)
976#define PREFIX_VEX_38BE (PREFIX_VEX_38BD + 1)
977#define PREFIX_VEX_38BF (PREFIX_VEX_38BE + 1)
978#define PREFIX_VEX_38DB (PREFIX_VEX_38BF + 1)
a5ff0eb2
L
979#define PREFIX_VEX_38DC (PREFIX_VEX_38DB + 1)
980#define PREFIX_VEX_38DD (PREFIX_VEX_38DC + 1)
981#define PREFIX_VEX_38DE (PREFIX_VEX_38DD + 1)
982#define PREFIX_VEX_38DF (PREFIX_VEX_38DE + 1)
983#define PREFIX_VEX_3A04 (PREFIX_VEX_38DF + 1)
06c8514a
L
984#define PREFIX_VEX_3A05 (PREFIX_VEX_3A04 + 1)
985#define PREFIX_VEX_3A06 (PREFIX_VEX_3A05 + 1)
986#define PREFIX_VEX_3A08 (PREFIX_VEX_3A06 + 1)
987#define PREFIX_VEX_3A09 (PREFIX_VEX_3A08 + 1)
988#define PREFIX_VEX_3A0A (PREFIX_VEX_3A09 + 1)
989#define PREFIX_VEX_3A0B (PREFIX_VEX_3A0A + 1)
990#define PREFIX_VEX_3A0C (PREFIX_VEX_3A0B + 1)
991#define PREFIX_VEX_3A0D (PREFIX_VEX_3A0C + 1)
992#define PREFIX_VEX_3A0E (PREFIX_VEX_3A0D + 1)
993#define PREFIX_VEX_3A0F (PREFIX_VEX_3A0E + 1)
994#define PREFIX_VEX_3A14 (PREFIX_VEX_3A0F + 1)
995#define PREFIX_VEX_3A15 (PREFIX_VEX_3A14 + 1)
996#define PREFIX_VEX_3A16 (PREFIX_VEX_3A15 + 1)
997#define PREFIX_VEX_3A17 (PREFIX_VEX_3A16 + 1)
998#define PREFIX_VEX_3A18 (PREFIX_VEX_3A17 + 1)
999#define PREFIX_VEX_3A19 (PREFIX_VEX_3A18 + 1)
1000#define PREFIX_VEX_3A20 (PREFIX_VEX_3A19 + 1)
1001#define PREFIX_VEX_3A21 (PREFIX_VEX_3A20 + 1)
1002#define PREFIX_VEX_3A22 (PREFIX_VEX_3A21 + 1)
1003#define PREFIX_VEX_3A40 (PREFIX_VEX_3A22 + 1)
1004#define PREFIX_VEX_3A41 (PREFIX_VEX_3A40 + 1)
1005#define PREFIX_VEX_3A42 (PREFIX_VEX_3A41 + 1)
0bfee649 1006#define PREFIX_VEX_3A4A (PREFIX_VEX_3A42 + 1)
06c8514a
L
1007#define PREFIX_VEX_3A4B (PREFIX_VEX_3A4A + 1)
1008#define PREFIX_VEX_3A4C (PREFIX_VEX_3A4B + 1)
0bfee649 1009#define PREFIX_VEX_3A60 (PREFIX_VEX_3A4C + 1)
06c8514a
L
1010#define PREFIX_VEX_3A61 (PREFIX_VEX_3A60 + 1)
1011#define PREFIX_VEX_3A62 (PREFIX_VEX_3A61 + 1)
1012#define PREFIX_VEX_3A63 (PREFIX_VEX_3A62 + 1)
0bfee649 1013#define PREFIX_VEX_3ADF (PREFIX_VEX_3A63 + 1)
4e7d34a6
L
1014
1015#define X86_64_06 0
1016#define X86_64_07 (X86_64_06 + 1)
1017#define X86_64_0D (X86_64_07 + 1)
1018#define X86_64_16 (X86_64_0D + 1)
1019#define X86_64_17 (X86_64_16 + 1)
1020#define X86_64_1E (X86_64_17 + 1)
1021#define X86_64_1F (X86_64_1E + 1)
1022#define X86_64_27 (X86_64_1F + 1)
1023#define X86_64_2F (X86_64_27 + 1)
1024#define X86_64_37 (X86_64_2F + 1)
1025#define X86_64_3F (X86_64_37 + 1)
1026#define X86_64_60 (X86_64_3F + 1)
1027#define X86_64_61 (X86_64_60 + 1)
1028#define X86_64_62 (X86_64_61 + 1)
1029#define X86_64_63 (X86_64_62 + 1)
1030#define X86_64_6D (X86_64_63 + 1)
1031#define X86_64_6F (X86_64_6D + 1)
1032#define X86_64_9A (X86_64_6F + 1)
1033#define X86_64_C4 (X86_64_9A + 1)
1034#define X86_64_C5 (X86_64_C4 + 1)
1035#define X86_64_CE (X86_64_C5 + 1)
1036#define X86_64_D4 (X86_64_CE + 1)
1037#define X86_64_D5 (X86_64_D4 + 1)
1038#define X86_64_EA (X86_64_D5 + 1)
1039#define X86_64_0F01_REG_0 (X86_64_EA + 1)
1040#define X86_64_0F01_REG_1 (X86_64_0F01_REG_0 + 1)
1041#define X86_64_0F01_REG_2 (X86_64_0F01_REG_1 + 1)
1042#define X86_64_0F01_REG_3 (X86_64_0F01_REG_2 + 1)
1043
1044#define THREE_BYTE_0F24 0
1045#define THREE_BYTE_0F25 (THREE_BYTE_0F24 + 1)
1046#define THREE_BYTE_0F38 (THREE_BYTE_0F25 + 1)
1047#define THREE_BYTE_0F3A (THREE_BYTE_0F38 + 1)
1048#define THREE_BYTE_0F7A (THREE_BYTE_0F3A + 1)
89b66d55 1049#define THREE_BYTE_0F7B (THREE_BYTE_0F7A + 1)
4e7d34a6 1050
c0f3af97
L
1051#define VEX_0F 0
1052#define VEX_0F38 (VEX_0F + 1)
1053#define VEX_0F3A (VEX_0F38 + 1)
1054
1055#define VEX_LEN_10_P_1 0
1056#define VEX_LEN_10_P_3 (VEX_LEN_10_P_1 + 1)
1057#define VEX_LEN_11_P_1 (VEX_LEN_10_P_3 + 1)
1058#define VEX_LEN_11_P_3 (VEX_LEN_11_P_1 + 1)
1059#define VEX_LEN_12_P_0_M_0 (VEX_LEN_11_P_3 + 1)
1060#define VEX_LEN_12_P_0_M_1 (VEX_LEN_12_P_0_M_0 + 1)
1061#define VEX_LEN_12_P_2 (VEX_LEN_12_P_0_M_1 + 1)
1062#define VEX_LEN_13_M_0 (VEX_LEN_12_P_2 + 1)
1063#define VEX_LEN_16_P_0_M_0 (VEX_LEN_13_M_0 + 1)
1064#define VEX_LEN_16_P_0_M_1 (VEX_LEN_16_P_0_M_0 + 1)
1065#define VEX_LEN_16_P_2 (VEX_LEN_16_P_0_M_1 + 1)
1066#define VEX_LEN_17_M_0 (VEX_LEN_16_P_2 + 1)
1067#define VEX_LEN_2A_P_1 (VEX_LEN_17_M_0 + 1)
1068#define VEX_LEN_2A_P_3 (VEX_LEN_2A_P_1 + 1)
168e3097 1069#define VEX_LEN_2C_P_1 (VEX_LEN_2A_P_3 + 1)
c0f3af97
L
1070#define VEX_LEN_2C_P_3 (VEX_LEN_2C_P_1 + 1)
1071#define VEX_LEN_2D_P_1 (VEX_LEN_2C_P_3 + 1)
1072#define VEX_LEN_2D_P_3 (VEX_LEN_2D_P_1 + 1)
1073#define VEX_LEN_2E_P_0 (VEX_LEN_2D_P_3 + 1)
1074#define VEX_LEN_2E_P_2 (VEX_LEN_2E_P_0 + 1)
1075#define VEX_LEN_2F_P_0 (VEX_LEN_2E_P_2 + 1)
1076#define VEX_LEN_2F_P_2 (VEX_LEN_2F_P_0 + 1)
1077#define VEX_LEN_51_P_1 (VEX_LEN_2F_P_2 + 1)
1078#define VEX_LEN_51_P_3 (VEX_LEN_51_P_1 + 1)
1079#define VEX_LEN_52_P_1 (VEX_LEN_51_P_3 + 1)
1080#define VEX_LEN_53_P_1 (VEX_LEN_52_P_1 + 1)
1081#define VEX_LEN_58_P_1 (VEX_LEN_53_P_1 + 1)
1082#define VEX_LEN_58_P_3 (VEX_LEN_58_P_1 + 1)
1083#define VEX_LEN_59_P_1 (VEX_LEN_58_P_3 + 1)
1084#define VEX_LEN_59_P_3 (VEX_LEN_59_P_1 + 1)
1085#define VEX_LEN_5A_P_1 (VEX_LEN_59_P_3 + 1)
1086#define VEX_LEN_5A_P_3 (VEX_LEN_5A_P_1 + 1)
1087#define VEX_LEN_5C_P_1 (VEX_LEN_5A_P_3 + 1)
1088#define VEX_LEN_5C_P_3 (VEX_LEN_5C_P_1 + 1)
1089#define VEX_LEN_5D_P_1 (VEX_LEN_5C_P_3 + 1)
1090#define VEX_LEN_5D_P_3 (VEX_LEN_5D_P_1 + 1)
1091#define VEX_LEN_5E_P_1 (VEX_LEN_5D_P_3 + 1)
1092#define VEX_LEN_5E_P_3 (VEX_LEN_5E_P_1 + 1)
1093#define VEX_LEN_5F_P_1 (VEX_LEN_5E_P_3 + 1)
1094#define VEX_LEN_5F_P_3 (VEX_LEN_5F_P_1 + 1)
1095#define VEX_LEN_60_P_2 (VEX_LEN_5F_P_3 + 1)
1096#define VEX_LEN_61_P_2 (VEX_LEN_60_P_2 + 1)
1097#define VEX_LEN_62_P_2 (VEX_LEN_61_P_2 + 1)
1098#define VEX_LEN_63_P_2 (VEX_LEN_62_P_2 + 1)
1099#define VEX_LEN_64_P_2 (VEX_LEN_63_P_2 + 1)
1100#define VEX_LEN_65_P_2 (VEX_LEN_64_P_2 + 1)
1101#define VEX_LEN_66_P_2 (VEX_LEN_65_P_2 + 1)
1102#define VEX_LEN_67_P_2 (VEX_LEN_66_P_2 + 1)
1103#define VEX_LEN_68_P_2 (VEX_LEN_67_P_2 + 1)
1104#define VEX_LEN_69_P_2 (VEX_LEN_68_P_2 + 1)
1105#define VEX_LEN_6A_P_2 (VEX_LEN_69_P_2 + 1)
1106#define VEX_LEN_6B_P_2 (VEX_LEN_6A_P_2 + 1)
1107#define VEX_LEN_6C_P_2 (VEX_LEN_6B_P_2 + 1)
1108#define VEX_LEN_6D_P_2 (VEX_LEN_6C_P_2 + 1)
1109#define VEX_LEN_6E_P_2 (VEX_LEN_6D_P_2 + 1)
1110#define VEX_LEN_70_P_1 (VEX_LEN_6E_P_2 + 1)
1111#define VEX_LEN_70_P_2 (VEX_LEN_70_P_1 + 1)
1112#define VEX_LEN_70_P_3 (VEX_LEN_70_P_2 + 1)
1113#define VEX_LEN_71_R_2_P_2 (VEX_LEN_70_P_3 + 1)
1114#define VEX_LEN_71_R_4_P_2 (VEX_LEN_71_R_2_P_2 + 1)
1115#define VEX_LEN_71_R_6_P_2 (VEX_LEN_71_R_4_P_2 + 1)
1116#define VEX_LEN_72_R_2_P_2 (VEX_LEN_71_R_6_P_2 + 1)
1117#define VEX_LEN_72_R_4_P_2 (VEX_LEN_72_R_2_P_2 + 1)
1118#define VEX_LEN_72_R_6_P_2 (VEX_LEN_72_R_4_P_2 + 1)
1119#define VEX_LEN_73_R_2_P_2 (VEX_LEN_72_R_6_P_2 + 1)
1120#define VEX_LEN_73_R_3_P_2 (VEX_LEN_73_R_2_P_2 + 1)
1121#define VEX_LEN_73_R_6_P_2 (VEX_LEN_73_R_3_P_2 + 1)
1122#define VEX_LEN_73_R_7_P_2 (VEX_LEN_73_R_6_P_2 + 1)
1123#define VEX_LEN_74_P_2 (VEX_LEN_73_R_7_P_2 + 1)
1124#define VEX_LEN_75_P_2 (VEX_LEN_74_P_2 + 1)
1125#define VEX_LEN_76_P_2 (VEX_LEN_75_P_2 + 1)
1126#define VEX_LEN_7E_P_1 (VEX_LEN_76_P_2 + 1)
1127#define VEX_LEN_7E_P_2 (VEX_LEN_7E_P_1 + 1)
1128#define VEX_LEN_AE_R_2_M_0 (VEX_LEN_7E_P_2 + 1)
1129#define VEX_LEN_AE_R_3_M_0 (VEX_LEN_AE_R_2_M_0 + 1)
1130#define VEX_LEN_C2_P_1 (VEX_LEN_AE_R_3_M_0 + 1)
1131#define VEX_LEN_C2_P_3 (VEX_LEN_C2_P_1 + 1)
1132#define VEX_LEN_C4_P_2 (VEX_LEN_C2_P_3 + 1)
1133#define VEX_LEN_C5_P_2 (VEX_LEN_C4_P_2 + 1)
1134#define VEX_LEN_D1_P_2 (VEX_LEN_C5_P_2 + 1)
1135#define VEX_LEN_D2_P_2 (VEX_LEN_D1_P_2 + 1)
1136#define VEX_LEN_D3_P_2 (VEX_LEN_D2_P_2 + 1)
1137#define VEX_LEN_D4_P_2 (VEX_LEN_D3_P_2 + 1)
1138#define VEX_LEN_D5_P_2 (VEX_LEN_D4_P_2 + 1)
1139#define VEX_LEN_D6_P_2 (VEX_LEN_D5_P_2 + 1)
1140#define VEX_LEN_D7_P_2_M_1 (VEX_LEN_D6_P_2 + 1)
1141#define VEX_LEN_D8_P_2 (VEX_LEN_D7_P_2_M_1 + 1)
1142#define VEX_LEN_D9_P_2 (VEX_LEN_D8_P_2 + 1)
1143#define VEX_LEN_DA_P_2 (VEX_LEN_D9_P_2 + 1)
1144#define VEX_LEN_DB_P_2 (VEX_LEN_DA_P_2 + 1)
1145#define VEX_LEN_DC_P_2 (VEX_LEN_DB_P_2 + 1)
1146#define VEX_LEN_DD_P_2 (VEX_LEN_DC_P_2 + 1)
1147#define VEX_LEN_DE_P_2 (VEX_LEN_DD_P_2 + 1)
1148#define VEX_LEN_DF_P_2 (VEX_LEN_DE_P_2 + 1)
1149#define VEX_LEN_E0_P_2 (VEX_LEN_DF_P_2 + 1)
1150#define VEX_LEN_E1_P_2 (VEX_LEN_E0_P_2 + 1)
1151#define VEX_LEN_E2_P_2 (VEX_LEN_E1_P_2 + 1)
1152#define VEX_LEN_E3_P_2 (VEX_LEN_E2_P_2 + 1)
1153#define VEX_LEN_E4_P_2 (VEX_LEN_E3_P_2 + 1)
1154#define VEX_LEN_E5_P_2 (VEX_LEN_E4_P_2 + 1)
168e3097 1155#define VEX_LEN_E8_P_2 (VEX_LEN_E5_P_2 + 1)
c0f3af97
L
1156#define VEX_LEN_E9_P_2 (VEX_LEN_E8_P_2 + 1)
1157#define VEX_LEN_EA_P_2 (VEX_LEN_E9_P_2 + 1)
1158#define VEX_LEN_EB_P_2 (VEX_LEN_EA_P_2 + 1)
1159#define VEX_LEN_EC_P_2 (VEX_LEN_EB_P_2 + 1)
1160#define VEX_LEN_ED_P_2 (VEX_LEN_EC_P_2 + 1)
1161#define VEX_LEN_EE_P_2 (VEX_LEN_ED_P_2 + 1)
1162#define VEX_LEN_EF_P_2 (VEX_LEN_EE_P_2 + 1)
1163#define VEX_LEN_F1_P_2 (VEX_LEN_EF_P_2 + 1)
1164#define VEX_LEN_F2_P_2 (VEX_LEN_F1_P_2 + 1)
1165#define VEX_LEN_F3_P_2 (VEX_LEN_F2_P_2 + 1)
1166#define VEX_LEN_F4_P_2 (VEX_LEN_F3_P_2 + 1)
1167#define VEX_LEN_F5_P_2 (VEX_LEN_F4_P_2 + 1)
1168#define VEX_LEN_F6_P_2 (VEX_LEN_F5_P_2 + 1)
1169#define VEX_LEN_F7_P_2 (VEX_LEN_F6_P_2 + 1)
1170#define VEX_LEN_F8_P_2 (VEX_LEN_F7_P_2 + 1)
1171#define VEX_LEN_F9_P_2 (VEX_LEN_F8_P_2 + 1)
1172#define VEX_LEN_FA_P_2 (VEX_LEN_F9_P_2 + 1)
1173#define VEX_LEN_FB_P_2 (VEX_LEN_FA_P_2 + 1)
1174#define VEX_LEN_FC_P_2 (VEX_LEN_FB_P_2 + 1)
1175#define VEX_LEN_FD_P_2 (VEX_LEN_FC_P_2 + 1)
1176#define VEX_LEN_FE_P_2 (VEX_LEN_FD_P_2 + 1)
1177#define VEX_LEN_3800_P_2 (VEX_LEN_FE_P_2 + 1)
1178#define VEX_LEN_3801_P_2 (VEX_LEN_3800_P_2 + 1)
1179#define VEX_LEN_3802_P_2 (VEX_LEN_3801_P_2 + 1)
1180#define VEX_LEN_3803_P_2 (VEX_LEN_3802_P_2 + 1)
1181#define VEX_LEN_3804_P_2 (VEX_LEN_3803_P_2 + 1)
1182#define VEX_LEN_3805_P_2 (VEX_LEN_3804_P_2 + 1)
1183#define VEX_LEN_3806_P_2 (VEX_LEN_3805_P_2 + 1)
1184#define VEX_LEN_3807_P_2 (VEX_LEN_3806_P_2 + 1)
1185#define VEX_LEN_3808_P_2 (VEX_LEN_3807_P_2 + 1)
1186#define VEX_LEN_3809_P_2 (VEX_LEN_3808_P_2 + 1)
1187#define VEX_LEN_380A_P_2 (VEX_LEN_3809_P_2 + 1)
1188#define VEX_LEN_380B_P_2 (VEX_LEN_380A_P_2 + 1)
1189#define VEX_LEN_3819_P_2_M_0 (VEX_LEN_380B_P_2 + 1)
1190#define VEX_LEN_381A_P_2_M_0 (VEX_LEN_3819_P_2_M_0 + 1)
1191#define VEX_LEN_381C_P_2 (VEX_LEN_381A_P_2_M_0 + 1)
1192#define VEX_LEN_381D_P_2 (VEX_LEN_381C_P_2 + 1)
1193#define VEX_LEN_381E_P_2 (VEX_LEN_381D_P_2 + 1)
1194#define VEX_LEN_3820_P_2 (VEX_LEN_381E_P_2 + 1)
1195#define VEX_LEN_3821_P_2 (VEX_LEN_3820_P_2 + 1)
1196#define VEX_LEN_3822_P_2 (VEX_LEN_3821_P_2 + 1)
1197#define VEX_LEN_3823_P_2 (VEX_LEN_3822_P_2 + 1)
1198#define VEX_LEN_3824_P_2 (VEX_LEN_3823_P_2 + 1)
1199#define VEX_LEN_3825_P_2 (VEX_LEN_3824_P_2 + 1)
1200#define VEX_LEN_3828_P_2 (VEX_LEN_3825_P_2 + 1)
1201#define VEX_LEN_3829_P_2 (VEX_LEN_3828_P_2 + 1)
1202#define VEX_LEN_382A_P_2_M_0 (VEX_LEN_3829_P_2 + 1)
1203#define VEX_LEN_382B_P_2 (VEX_LEN_382A_P_2_M_0 + 1)
1204#define VEX_LEN_3830_P_2 (VEX_LEN_382B_P_2 + 1)
1205#define VEX_LEN_3831_P_2 (VEX_LEN_3830_P_2 + 1)
1206#define VEX_LEN_3832_P_2 (VEX_LEN_3831_P_2 + 1)
1207#define VEX_LEN_3833_P_2 (VEX_LEN_3832_P_2 + 1)
1208#define VEX_LEN_3834_P_2 (VEX_LEN_3833_P_2 + 1)
1209#define VEX_LEN_3835_P_2 (VEX_LEN_3834_P_2 + 1)
1210#define VEX_LEN_3837_P_2 (VEX_LEN_3835_P_2 + 1)
1211#define VEX_LEN_3838_P_2 (VEX_LEN_3837_P_2 + 1)
1212#define VEX_LEN_3839_P_2 (VEX_LEN_3838_P_2 + 1)
1213#define VEX_LEN_383A_P_2 (VEX_LEN_3839_P_2 + 1)
1214#define VEX_LEN_383B_P_2 (VEX_LEN_383A_P_2 + 1)
1215#define VEX_LEN_383C_P_2 (VEX_LEN_383B_P_2 + 1)
1216#define VEX_LEN_383D_P_2 (VEX_LEN_383C_P_2 + 1)
1217#define VEX_LEN_383E_P_2 (VEX_LEN_383D_P_2 + 1)
1218#define VEX_LEN_383F_P_2 (VEX_LEN_383E_P_2 + 1)
1219#define VEX_LEN_3840_P_2 (VEX_LEN_383F_P_2 + 1)
1220#define VEX_LEN_3841_P_2 (VEX_LEN_3840_P_2 + 1)
a5ff0eb2
L
1221#define VEX_LEN_38DB_P_2 (VEX_LEN_3841_P_2 + 1)
1222#define VEX_LEN_38DC_P_2 (VEX_LEN_38DB_P_2 + 1)
1223#define VEX_LEN_38DD_P_2 (VEX_LEN_38DC_P_2 + 1)
1224#define VEX_LEN_38DE_P_2 (VEX_LEN_38DD_P_2 + 1)
1225#define VEX_LEN_38DF_P_2 (VEX_LEN_38DE_P_2 + 1)
1226#define VEX_LEN_3A06_P_2 (VEX_LEN_38DF_P_2 + 1)
c0f3af97
L
1227#define VEX_LEN_3A0A_P_2 (VEX_LEN_3A06_P_2 + 1)
1228#define VEX_LEN_3A0B_P_2 (VEX_LEN_3A0A_P_2 + 1)
1229#define VEX_LEN_3A0E_P_2 (VEX_LEN_3A0B_P_2 + 1)
1230#define VEX_LEN_3A0F_P_2 (VEX_LEN_3A0E_P_2 + 1)
1231#define VEX_LEN_3A14_P_2 (VEX_LEN_3A0F_P_2 + 1)
1232#define VEX_LEN_3A15_P_2 (VEX_LEN_3A14_P_2 + 1)
1233#define VEX_LEN_3A16_P_2 (VEX_LEN_3A15_P_2 + 1)
1234#define VEX_LEN_3A17_P_2 (VEX_LEN_3A16_P_2 + 1)
1235#define VEX_LEN_3A18_P_2 (VEX_LEN_3A17_P_2 + 1)
1236#define VEX_LEN_3A19_P_2 (VEX_LEN_3A18_P_2 + 1)
1237#define VEX_LEN_3A20_P_2 (VEX_LEN_3A19_P_2 + 1)
1238#define VEX_LEN_3A21_P_2 (VEX_LEN_3A20_P_2 + 1)
1239#define VEX_LEN_3A22_P_2 (VEX_LEN_3A21_P_2 + 1)
1240#define VEX_LEN_3A41_P_2 (VEX_LEN_3A22_P_2 + 1)
1241#define VEX_LEN_3A42_P_2 (VEX_LEN_3A41_P_2 + 1)
1242#define VEX_LEN_3A4C_P_2 (VEX_LEN_3A42_P_2 + 1)
1243#define VEX_LEN_3A60_P_2 (VEX_LEN_3A4C_P_2 + 1)
1244#define VEX_LEN_3A61_P_2 (VEX_LEN_3A60_P_2 + 1)
1245#define VEX_LEN_3A62_P_2 (VEX_LEN_3A61_P_2 + 1)
1246#define VEX_LEN_3A63_P_2 (VEX_LEN_3A62_P_2 + 1)
0bfee649 1247#define VEX_LEN_3ADF_P_2 (VEX_LEN_3A63_P_2 + 1)
c0f3af97 1248
26ca5450 1249typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1250
1251struct dis386 {
2da11e11 1252 const char *name;
ce518a5f
L
1253 struct
1254 {
1255 op_rtn rtn;
1256 int bytemode;
1257 } op[MAX_OPERANDS];
252b5132
RH
1258};
1259
1260/* Upper case letters in the instruction names here are macros.
1261 'A' => print 'b' if no register operands or suffix_always is true
1262 'B' => print 'b' if suffix_always is true
9306ca4a 1263 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1264 size prefix
ed7841b3 1265 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1266 suffix_always is true
252b5132 1267 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1268 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1269 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1270 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1271 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1272 for some of the macro letters)
9306ca4a 1273 'J' => print 'l'
42903f7f 1274 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1275 'L' => print 'l' if suffix_always is true
9d141669 1276 'M' => print 'r' if intel_mnemonic is false.
252b5132 1277 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1278 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1279 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1280 or suffix_always is true. print 'q' if rex prefix is present.
1281 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1282 is true
a35ca55a 1283 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1284 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1285 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1286 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1287 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1288 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1289 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1290 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1291 suffix_always is true.
6dd5059a 1292 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1293 '!' => change condition from true to false or from false to true.
98b528ac
L
1294 '%' => add 1 upper case letter to the macro.
1295
1296 2 upper case letter macros:
c0f3af97
L
1297 "XY" => print 'x' or 'y' if no register operands or suffix_always
1298 is true.
0bfee649 1299 'XW' => print 's', 'd' depending on the VEX.W bit (for FMA)
98b528ac
L
1300 'LQ' => print 'l' ('d' in Intel mode) or 'q' for memory operand
1301 or suffix_always is true
52b15da3 1302
6439fc28
AM
1303 Many of the above letters print nothing in Intel mode. See "putop"
1304 for the details.
52b15da3 1305
6439fc28 1306 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1307 mnemonic strings for AT&T and Intel. */
252b5132 1308
6439fc28 1309static const struct dis386 dis386[] = {
252b5132 1310 /* 00 */
ce518a5f
L
1311 { "addB", { Eb, Gb } },
1312 { "addS", { Ev, Gv } },
c7532693
L
1313 { "addB", { Gb, EbS } },
1314 { "addS", { Gv, EvS } },
ce518a5f
L
1315 { "addB", { AL, Ib } },
1316 { "addS", { eAX, Iv } },
4e7d34a6
L
1317 { X86_64_TABLE (X86_64_06) },
1318 { X86_64_TABLE (X86_64_07) },
252b5132 1319 /* 08 */
ce518a5f
L
1320 { "orB", { Eb, Gb } },
1321 { "orS", { Ev, Gv } },
c7532693
L
1322 { "orB", { Gb, EbS } },
1323 { "orS", { Gv, EvS } },
ce518a5f
L
1324 { "orB", { AL, Ib } },
1325 { "orS", { eAX, Iv } },
4e7d34a6 1326 { X86_64_TABLE (X86_64_0D) },
ce518a5f 1327 { "(bad)", { XX } }, /* 0x0f extended opcode escape */
252b5132 1328 /* 10 */
ce518a5f
L
1329 { "adcB", { Eb, Gb } },
1330 { "adcS", { Ev, Gv } },
c7532693
L
1331 { "adcB", { Gb, EbS } },
1332 { "adcS", { Gv, EvS } },
ce518a5f
L
1333 { "adcB", { AL, Ib } },
1334 { "adcS", { eAX, Iv } },
4e7d34a6
L
1335 { X86_64_TABLE (X86_64_16) },
1336 { X86_64_TABLE (X86_64_17) },
252b5132 1337 /* 18 */
ce518a5f
L
1338 { "sbbB", { Eb, Gb } },
1339 { "sbbS", { Ev, Gv } },
c7532693
L
1340 { "sbbB", { Gb, EbS } },
1341 { "sbbS", { Gv, EvS } },
ce518a5f
L
1342 { "sbbB", { AL, Ib } },
1343 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1344 { X86_64_TABLE (X86_64_1E) },
1345 { X86_64_TABLE (X86_64_1F) },
252b5132 1346 /* 20 */
ce518a5f
L
1347 { "andB", { Eb, Gb } },
1348 { "andS", { Ev, Gv } },
c7532693
L
1349 { "andB", { Gb, EbS } },
1350 { "andS", { Gv, EvS } },
ce518a5f
L
1351 { "andB", { AL, Ib } },
1352 { "andS", { eAX, Iv } },
1353 { "(bad)", { XX } }, /* SEG ES prefix */
4e7d34a6 1354 { X86_64_TABLE (X86_64_27) },
252b5132 1355 /* 28 */
ce518a5f
L
1356 { "subB", { Eb, Gb } },
1357 { "subS", { Ev, Gv } },
c7532693
L
1358 { "subB", { Gb, EbS } },
1359 { "subS", { Gv, EvS } },
ce518a5f
L
1360 { "subB", { AL, Ib } },
1361 { "subS", { eAX, Iv } },
1362 { "(bad)", { XX } }, /* SEG CS prefix */
4e7d34a6 1363 { X86_64_TABLE (X86_64_2F) },
252b5132 1364 /* 30 */
ce518a5f
L
1365 { "xorB", { Eb, Gb } },
1366 { "xorS", { Ev, Gv } },
c7532693
L
1367 { "xorB", { Gb, EbS } },
1368 { "xorS", { Gv, EvS } },
ce518a5f
L
1369 { "xorB", { AL, Ib } },
1370 { "xorS", { eAX, Iv } },
1371 { "(bad)", { XX } }, /* SEG SS prefix */
4e7d34a6 1372 { X86_64_TABLE (X86_64_37) },
252b5132 1373 /* 38 */
ce518a5f
L
1374 { "cmpB", { Eb, Gb } },
1375 { "cmpS", { Ev, Gv } },
c7532693
L
1376 { "cmpB", { Gb, EbS } },
1377 { "cmpS", { Gv, EvS } },
ce518a5f
L
1378 { "cmpB", { AL, Ib } },
1379 { "cmpS", { eAX, Iv } },
1380 { "(bad)", { XX } }, /* SEG DS prefix */
4e7d34a6 1381 { X86_64_TABLE (X86_64_3F) },
252b5132 1382 /* 40 */
ce518a5f
L
1383 { "inc{S|}", { RMeAX } },
1384 { "inc{S|}", { RMeCX } },
1385 { "inc{S|}", { RMeDX } },
1386 { "inc{S|}", { RMeBX } },
1387 { "inc{S|}", { RMeSP } },
1388 { "inc{S|}", { RMeBP } },
1389 { "inc{S|}", { RMeSI } },
1390 { "inc{S|}", { RMeDI } },
252b5132 1391 /* 48 */
ce518a5f
L
1392 { "dec{S|}", { RMeAX } },
1393 { "dec{S|}", { RMeCX } },
1394 { "dec{S|}", { RMeDX } },
1395 { "dec{S|}", { RMeBX } },
1396 { "dec{S|}", { RMeSP } },
1397 { "dec{S|}", { RMeBP } },
1398 { "dec{S|}", { RMeSI } },
1399 { "dec{S|}", { RMeDI } },
252b5132 1400 /* 50 */
ce518a5f
L
1401 { "pushV", { RMrAX } },
1402 { "pushV", { RMrCX } },
1403 { "pushV", { RMrDX } },
1404 { "pushV", { RMrBX } },
1405 { "pushV", { RMrSP } },
1406 { "pushV", { RMrBP } },
1407 { "pushV", { RMrSI } },
1408 { "pushV", { RMrDI } },
252b5132 1409 /* 58 */
ce518a5f
L
1410 { "popV", { RMrAX } },
1411 { "popV", { RMrCX } },
1412 { "popV", { RMrDX } },
1413 { "popV", { RMrBX } },
1414 { "popV", { RMrSP } },
1415 { "popV", { RMrBP } },
1416 { "popV", { RMrSI } },
1417 { "popV", { RMrDI } },
252b5132 1418 /* 60 */
4e7d34a6
L
1419 { X86_64_TABLE (X86_64_60) },
1420 { X86_64_TABLE (X86_64_61) },
1421 { X86_64_TABLE (X86_64_62) },
1422 { X86_64_TABLE (X86_64_63) },
ce518a5f
L
1423 { "(bad)", { XX } }, /* seg fs */
1424 { "(bad)", { XX } }, /* seg gs */
1425 { "(bad)", { XX } }, /* op size prefix */
1426 { "(bad)", { XX } }, /* adr size prefix */
252b5132 1427 /* 68 */
ce518a5f
L
1428 { "pushT", { Iq } },
1429 { "imulS", { Gv, Ev, Iv } },
1430 { "pushT", { sIb } },
1431 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1432 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1433 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1434 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1435 { X86_64_TABLE (X86_64_6F) },
252b5132 1436 /* 70 */
ce518a5f
L
1437 { "joH", { Jb, XX, cond_jump_flag } },
1438 { "jnoH", { Jb, XX, cond_jump_flag } },
1439 { "jbH", { Jb, XX, cond_jump_flag } },
1440 { "jaeH", { Jb, XX, cond_jump_flag } },
1441 { "jeH", { Jb, XX, cond_jump_flag } },
1442 { "jneH", { Jb, XX, cond_jump_flag } },
1443 { "jbeH", { Jb, XX, cond_jump_flag } },
1444 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1445 /* 78 */
ce518a5f
L
1446 { "jsH", { Jb, XX, cond_jump_flag } },
1447 { "jnsH", { Jb, XX, cond_jump_flag } },
1448 { "jpH", { Jb, XX, cond_jump_flag } },
1449 { "jnpH", { Jb, XX, cond_jump_flag } },
1450 { "jlH", { Jb, XX, cond_jump_flag } },
1451 { "jgeH", { Jb, XX, cond_jump_flag } },
1452 { "jleH", { Jb, XX, cond_jump_flag } },
1453 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1454 /* 80 */
1ceb70f8
L
1455 { REG_TABLE (REG_80) },
1456 { REG_TABLE (REG_81) },
ce518a5f 1457 { "(bad)", { XX } },
1ceb70f8 1458 { REG_TABLE (REG_82) },
ce518a5f
L
1459 { "testB", { Eb, Gb } },
1460 { "testS", { Ev, Gv } },
1461 { "xchgB", { Eb, Gb } },
1462 { "xchgS", { Ev, Gv } },
252b5132 1463 /* 88 */
ce518a5f
L
1464 { "movB", { Eb, Gb } },
1465 { "movS", { Ev, Gv } },
b6169b20
L
1466 { "movB", { Gb, EbS } },
1467 { "movS", { Gv, EvS } },
ce518a5f 1468 { "movD", { Sv, Sw } },
1ceb70f8 1469 { MOD_TABLE (MOD_8D) },
ce518a5f 1470 { "movD", { Sw, Sv } },
1ceb70f8 1471 { REG_TABLE (REG_8F) },
252b5132 1472 /* 90 */
1ceb70f8 1473 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1474 { "xchgS", { RMeCX, eAX } },
1475 { "xchgS", { RMeDX, eAX } },
1476 { "xchgS", { RMeBX, eAX } },
1477 { "xchgS", { RMeSP, eAX } },
1478 { "xchgS", { RMeBP, eAX } },
1479 { "xchgS", { RMeSI, eAX } },
1480 { "xchgS", { RMeDI, eAX } },
252b5132 1481 /* 98 */
7c52e0e8
L
1482 { "cW{t|}R", { XX } },
1483 { "cR{t|}O", { XX } },
4e7d34a6 1484 { X86_64_TABLE (X86_64_9A) },
ce518a5f
L
1485 { "(bad)", { XX } }, /* fwait */
1486 { "pushfT", { XX } },
1487 { "popfT", { XX } },
7c52e0e8
L
1488 { "sahf", { XX } },
1489 { "lahf", { XX } },
252b5132 1490 /* a0 */
ce518a5f
L
1491 { "movB", { AL, Ob } },
1492 { "movS", { eAX, Ov } },
1493 { "movB", { Ob, AL } },
1494 { "movS", { Ov, eAX } },
7c52e0e8
L
1495 { "movs{b|}", { Ybr, Xb } },
1496 { "movs{R|}", { Yvr, Xv } },
1497 { "cmps{b|}", { Xb, Yb } },
1498 { "cmps{R|}", { Xv, Yv } },
252b5132 1499 /* a8 */
ce518a5f
L
1500 { "testB", { AL, Ib } },
1501 { "testS", { eAX, Iv } },
1502 { "stosB", { Ybr, AL } },
1503 { "stosS", { Yvr, eAX } },
1504 { "lodsB", { ALr, Xb } },
1505 { "lodsS", { eAXr, Xv } },
1506 { "scasB", { AL, Yb } },
1507 { "scasS", { eAX, Yv } },
252b5132 1508 /* b0 */
ce518a5f
L
1509 { "movB", { RMAL, Ib } },
1510 { "movB", { RMCL, Ib } },
1511 { "movB", { RMDL, Ib } },
1512 { "movB", { RMBL, Ib } },
1513 { "movB", { RMAH, Ib } },
1514 { "movB", { RMCH, Ib } },
1515 { "movB", { RMDH, Ib } },
1516 { "movB", { RMBH, Ib } },
252b5132 1517 /* b8 */
ce518a5f
L
1518 { "movS", { RMeAX, Iv64 } },
1519 { "movS", { RMeCX, Iv64 } },
1520 { "movS", { RMeDX, Iv64 } },
1521 { "movS", { RMeBX, Iv64 } },
1522 { "movS", { RMeSP, Iv64 } },
1523 { "movS", { RMeBP, Iv64 } },
1524 { "movS", { RMeSI, Iv64 } },
1525 { "movS", { RMeDI, Iv64 } },
252b5132 1526 /* c0 */
1ceb70f8
L
1527 { REG_TABLE (REG_C0) },
1528 { REG_TABLE (REG_C1) },
ce518a5f
L
1529 { "retT", { Iw } },
1530 { "retT", { XX } },
4e7d34a6
L
1531 { X86_64_TABLE (X86_64_C4) },
1532 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1533 { REG_TABLE (REG_C6) },
1534 { REG_TABLE (REG_C7) },
252b5132 1535 /* c8 */
ce518a5f
L
1536 { "enterT", { Iw, Ib } },
1537 { "leaveT", { XX } },
ddab3d59
JB
1538 { "Jret{|f}P", { Iw } },
1539 { "Jret{|f}P", { XX } },
ce518a5f
L
1540 { "int3", { XX } },
1541 { "int", { Ib } },
4e7d34a6 1542 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1543 { "iretP", { XX } },
252b5132 1544 /* d0 */
1ceb70f8
L
1545 { REG_TABLE (REG_D0) },
1546 { REG_TABLE (REG_D1) },
1547 { REG_TABLE (REG_D2) },
1548 { REG_TABLE (REG_D3) },
4e7d34a6
L
1549 { X86_64_TABLE (X86_64_D4) },
1550 { X86_64_TABLE (X86_64_D5) },
ce518a5f
L
1551 { "(bad)", { XX } },
1552 { "xlat", { DSBX } },
252b5132
RH
1553 /* d8 */
1554 { FLOAT },
1555 { FLOAT },
1556 { FLOAT },
1557 { FLOAT },
1558 { FLOAT },
1559 { FLOAT },
1560 { FLOAT },
1561 { FLOAT },
1562 /* e0 */
ce518a5f
L
1563 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1564 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1565 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1566 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1567 { "inB", { AL, Ib } },
1568 { "inG", { zAX, Ib } },
1569 { "outB", { Ib, AL } },
1570 { "outG", { Ib, zAX } },
252b5132 1571 /* e8 */
ce518a5f
L
1572 { "callT", { Jv } },
1573 { "jmpT", { Jv } },
4e7d34a6 1574 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1575 { "jmp", { Jb } },
1576 { "inB", { AL, indirDX } },
1577 { "inG", { zAX, indirDX } },
1578 { "outB", { indirDX, AL } },
1579 { "outG", { indirDX, zAX } },
252b5132 1580 /* f0 */
ce518a5f
L
1581 { "(bad)", { XX } }, /* lock prefix */
1582 { "icebp", { XX } },
1583 { "(bad)", { XX } }, /* repne */
1584 { "(bad)", { XX } }, /* repz */
1585 { "hlt", { XX } },
1586 { "cmc", { XX } },
1ceb70f8
L
1587 { REG_TABLE (REG_F6) },
1588 { REG_TABLE (REG_F7) },
252b5132 1589 /* f8 */
ce518a5f
L
1590 { "clc", { XX } },
1591 { "stc", { XX } },
1592 { "cli", { XX } },
1593 { "sti", { XX } },
1594 { "cld", { XX } },
1595 { "std", { XX } },
1ceb70f8
L
1596 { REG_TABLE (REG_FE) },
1597 { REG_TABLE (REG_FF) },
252b5132
RH
1598};
1599
6439fc28 1600static const struct dis386 dis386_twobyte[] = {
252b5132 1601 /* 00 */
1ceb70f8
L
1602 { REG_TABLE (REG_0F00 ) },
1603 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1604 { "larS", { Gv, Ew } },
1605 { "lslS", { Gv, Ew } },
1606 { "(bad)", { XX } },
1607 { "syscall", { XX } },
1608 { "clts", { XX } },
1609 { "sysretP", { XX } },
252b5132 1610 /* 08 */
ce518a5f
L
1611 { "invd", { XX } },
1612 { "wbinvd", { XX } },
1613 { "(bad)", { XX } },
1614 { "ud2a", { XX } },
1615 { "(bad)", { XX } },
b5b1fc4f 1616 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1617 { "femms", { XX } },
1618 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1619 /* 10 */
1ceb70f8
L
1620 { PREFIX_TABLE (PREFIX_0F10) },
1621 { PREFIX_TABLE (PREFIX_0F11) },
1622 { PREFIX_TABLE (PREFIX_0F12) },
1623 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1624 { "unpcklpX", { XM, EXx } },
1625 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1626 { PREFIX_TABLE (PREFIX_0F16) },
1627 { MOD_TABLE (MOD_0F17) },
252b5132 1628 /* 18 */
1ceb70f8 1629 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1630 { "nopQ", { Ev } },
1631 { "nopQ", { Ev } },
1632 { "nopQ", { Ev } },
1633 { "nopQ", { Ev } },
1634 { "nopQ", { Ev } },
1635 { "nopQ", { Ev } },
ce518a5f 1636 { "nopQ", { Ev } },
252b5132 1637 /* 20 */
1ceb70f8
L
1638 { MOD_TABLE (MOD_0F20) },
1639 { MOD_TABLE (MOD_0F21) },
1640 { MOD_TABLE (MOD_0F22) },
1641 { MOD_TABLE (MOD_0F23) },
1642 { MOD_TABLE (MOD_0F24) },
4e7d34a6 1643 { THREE_BYTE_TABLE (THREE_BYTE_0F25) },
1ceb70f8 1644 { MOD_TABLE (MOD_0F26) },
ce518a5f 1645 { "(bad)", { XX } },
252b5132 1646 /* 28 */
09a2c6cf 1647 { "movapX", { XM, EXx } },
b6169b20 1648 { "movapX", { EXxS, XM } },
1ceb70f8
L
1649 { PREFIX_TABLE (PREFIX_0F2A) },
1650 { PREFIX_TABLE (PREFIX_0F2B) },
1651 { PREFIX_TABLE (PREFIX_0F2C) },
1652 { PREFIX_TABLE (PREFIX_0F2D) },
1653 { PREFIX_TABLE (PREFIX_0F2E) },
1654 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 1655 /* 30 */
ce518a5f
L
1656 { "wrmsr", { XX } },
1657 { "rdtsc", { XX } },
1658 { "rdmsr", { XX } },
1659 { "rdpmc", { XX } },
1660 { "sysenter", { XX } },
1661 { "sysexit", { XX } },
1662 { "(bad)", { XX } },
47dd174c 1663 { "getsec", { XX } },
252b5132 1664 /* 38 */
4e7d34a6 1665 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
ce518a5f 1666 { "(bad)", { XX } },
4e7d34a6 1667 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
ce518a5f
L
1668 { "(bad)", { XX } },
1669 { "(bad)", { XX } },
1670 { "(bad)", { XX } },
1671 { "(bad)", { XX } },
1672 { "(bad)", { XX } },
252b5132 1673 /* 40 */
b19d5385
JB
1674 { "cmovoS", { Gv, Ev } },
1675 { "cmovnoS", { Gv, Ev } },
1676 { "cmovbS", { Gv, Ev } },
1677 { "cmovaeS", { Gv, Ev } },
1678 { "cmoveS", { Gv, Ev } },
1679 { "cmovneS", { Gv, Ev } },
1680 { "cmovbeS", { Gv, Ev } },
1681 { "cmovaS", { Gv, Ev } },
252b5132 1682 /* 48 */
b19d5385
JB
1683 { "cmovsS", { Gv, Ev } },
1684 { "cmovnsS", { Gv, Ev } },
1685 { "cmovpS", { Gv, Ev } },
1686 { "cmovnpS", { Gv, Ev } },
1687 { "cmovlS", { Gv, Ev } },
1688 { "cmovgeS", { Gv, Ev } },
1689 { "cmovleS", { Gv, Ev } },
1690 { "cmovgS", { Gv, Ev } },
252b5132 1691 /* 50 */
75c135a8 1692 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
1693 { PREFIX_TABLE (PREFIX_0F51) },
1694 { PREFIX_TABLE (PREFIX_0F52) },
1695 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
1696 { "andpX", { XM, EXx } },
1697 { "andnpX", { XM, EXx } },
1698 { "orpX", { XM, EXx } },
1699 { "xorpX", { XM, EXx } },
252b5132 1700 /* 58 */
1ceb70f8
L
1701 { PREFIX_TABLE (PREFIX_0F58) },
1702 { PREFIX_TABLE (PREFIX_0F59) },
1703 { PREFIX_TABLE (PREFIX_0F5A) },
1704 { PREFIX_TABLE (PREFIX_0F5B) },
1705 { PREFIX_TABLE (PREFIX_0F5C) },
1706 { PREFIX_TABLE (PREFIX_0F5D) },
1707 { PREFIX_TABLE (PREFIX_0F5E) },
1708 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 1709 /* 60 */
1ceb70f8
L
1710 { PREFIX_TABLE (PREFIX_0F60) },
1711 { PREFIX_TABLE (PREFIX_0F61) },
1712 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
1713 { "packsswb", { MX, EM } },
1714 { "pcmpgtb", { MX, EM } },
1715 { "pcmpgtw", { MX, EM } },
1716 { "pcmpgtd", { MX, EM } },
1717 { "packuswb", { MX, EM } },
252b5132 1718 /* 68 */
ce518a5f
L
1719 { "punpckhbw", { MX, EM } },
1720 { "punpckhwd", { MX, EM } },
1721 { "punpckhdq", { MX, EM } },
1722 { "packssdw", { MX, EM } },
1ceb70f8
L
1723 { PREFIX_TABLE (PREFIX_0F6C) },
1724 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 1725 { "movK", { MX, Edq } },
1ceb70f8 1726 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 1727 /* 70 */
1ceb70f8
L
1728 { PREFIX_TABLE (PREFIX_0F70) },
1729 { REG_TABLE (REG_0F71) },
1730 { REG_TABLE (REG_0F72) },
1731 { REG_TABLE (REG_0F73) },
ce518a5f
L
1732 { "pcmpeqb", { MX, EM } },
1733 { "pcmpeqw", { MX, EM } },
1734 { "pcmpeqd", { MX, EM } },
1735 { "emms", { XX } },
252b5132 1736 /* 78 */
1ceb70f8
L
1737 { PREFIX_TABLE (PREFIX_0F78) },
1738 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 1739 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
89b66d55 1740 { THREE_BYTE_TABLE (THREE_BYTE_0F7B) },
1ceb70f8
L
1741 { PREFIX_TABLE (PREFIX_0F7C) },
1742 { PREFIX_TABLE (PREFIX_0F7D) },
1743 { PREFIX_TABLE (PREFIX_0F7E) },
1744 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 1745 /* 80 */
ce518a5f
L
1746 { "joH", { Jv, XX, cond_jump_flag } },
1747 { "jnoH", { Jv, XX, cond_jump_flag } },
1748 { "jbH", { Jv, XX, cond_jump_flag } },
1749 { "jaeH", { Jv, XX, cond_jump_flag } },
1750 { "jeH", { Jv, XX, cond_jump_flag } },
1751 { "jneH", { Jv, XX, cond_jump_flag } },
1752 { "jbeH", { Jv, XX, cond_jump_flag } },
1753 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 1754 /* 88 */
ce518a5f
L
1755 { "jsH", { Jv, XX, cond_jump_flag } },
1756 { "jnsH", { Jv, XX, cond_jump_flag } },
1757 { "jpH", { Jv, XX, cond_jump_flag } },
1758 { "jnpH", { Jv, XX, cond_jump_flag } },
1759 { "jlH", { Jv, XX, cond_jump_flag } },
1760 { "jgeH", { Jv, XX, cond_jump_flag } },
1761 { "jleH", { Jv, XX, cond_jump_flag } },
1762 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 1763 /* 90 */
ce518a5f
L
1764 { "seto", { Eb } },
1765 { "setno", { Eb } },
1766 { "setb", { Eb } },
1767 { "setae", { Eb } },
1768 { "sete", { Eb } },
1769 { "setne", { Eb } },
1770 { "setbe", { Eb } },
1771 { "seta", { Eb } },
252b5132 1772 /* 98 */
ce518a5f
L
1773 { "sets", { Eb } },
1774 { "setns", { Eb } },
1775 { "setp", { Eb } },
1776 { "setnp", { Eb } },
1777 { "setl", { Eb } },
1778 { "setge", { Eb } },
1779 { "setle", { Eb } },
1780 { "setg", { Eb } },
252b5132 1781 /* a0 */
ce518a5f
L
1782 { "pushT", { fs } },
1783 { "popT", { fs } },
1784 { "cpuid", { XX } },
1785 { "btS", { Ev, Gv } },
1786 { "shldS", { Ev, Gv, Ib } },
1787 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
1788 { REG_TABLE (REG_0FA6) },
1789 { REG_TABLE (REG_0FA7) },
252b5132 1790 /* a8 */
ce518a5f
L
1791 { "pushT", { gs } },
1792 { "popT", { gs } },
1793 { "rsm", { XX } },
1794 { "btsS", { Ev, Gv } },
1795 { "shrdS", { Ev, Gv, Ib } },
1796 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 1797 { REG_TABLE (REG_0FAE) },
ce518a5f 1798 { "imulS", { Gv, Ev } },
252b5132 1799 /* b0 */
ce518a5f
L
1800 { "cmpxchgB", { Eb, Gb } },
1801 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 1802 { MOD_TABLE (MOD_0FB2) },
ce518a5f 1803 { "btrS", { Ev, Gv } },
1ceb70f8
L
1804 { MOD_TABLE (MOD_0FB4) },
1805 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
1806 { "movz{bR|x}", { Gv, Eb } },
1807 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 1808 /* b8 */
1ceb70f8 1809 { PREFIX_TABLE (PREFIX_0FB8) },
ce518a5f 1810 { "ud2b", { XX } },
1ceb70f8 1811 { REG_TABLE (REG_0FBA) },
ce518a5f
L
1812 { "btcS", { Ev, Gv } },
1813 { "bsfS", { Gv, Ev } },
1ceb70f8 1814 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
1815 { "movs{bR|x}", { Gv, Eb } },
1816 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 1817 /* c0 */
ce518a5f
L
1818 { "xaddB", { Eb, Gb } },
1819 { "xaddS", { Ev, Gv } },
1ceb70f8 1820 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 1821 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
1822 { "pinsrw", { MX, Edqw, Ib } },
1823 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 1824 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 1825 { REG_TABLE (REG_0FC7) },
252b5132 1826 /* c8 */
ce518a5f
L
1827 { "bswap", { RMeAX } },
1828 { "bswap", { RMeCX } },
1829 { "bswap", { RMeDX } },
1830 { "bswap", { RMeBX } },
1831 { "bswap", { RMeSP } },
1832 { "bswap", { RMeBP } },
1833 { "bswap", { RMeSI } },
1834 { "bswap", { RMeDI } },
252b5132 1835 /* d0 */
1ceb70f8 1836 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
1837 { "psrlw", { MX, EM } },
1838 { "psrld", { MX, EM } },
1839 { "psrlq", { MX, EM } },
1840 { "paddq", { MX, EM } },
1841 { "pmullw", { MX, EM } },
1ceb70f8 1842 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 1843 { MOD_TABLE (MOD_0FD7) },
252b5132 1844 /* d8 */
ce518a5f
L
1845 { "psubusb", { MX, EM } },
1846 { "psubusw", { MX, EM } },
1847 { "pminub", { MX, EM } },
1848 { "pand", { MX, EM } },
1849 { "paddusb", { MX, EM } },
1850 { "paddusw", { MX, EM } },
1851 { "pmaxub", { MX, EM } },
1852 { "pandn", { MX, EM } },
252b5132 1853 /* e0 */
ce518a5f
L
1854 { "pavgb", { MX, EM } },
1855 { "psraw", { MX, EM } },
1856 { "psrad", { MX, EM } },
1857 { "pavgw", { MX, EM } },
1858 { "pmulhuw", { MX, EM } },
1859 { "pmulhw", { MX, EM } },
1ceb70f8
L
1860 { PREFIX_TABLE (PREFIX_0FE6) },
1861 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 1862 /* e8 */
ce518a5f
L
1863 { "psubsb", { MX, EM } },
1864 { "psubsw", { MX, EM } },
1865 { "pminsw", { MX, EM } },
1866 { "por", { MX, EM } },
1867 { "paddsb", { MX, EM } },
1868 { "paddsw", { MX, EM } },
1869 { "pmaxsw", { MX, EM } },
1870 { "pxor", { MX, EM } },
252b5132 1871 /* f0 */
1ceb70f8 1872 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
1873 { "psllw", { MX, EM } },
1874 { "pslld", { MX, EM } },
1875 { "psllq", { MX, EM } },
1876 { "pmuludq", { MX, EM } },
1877 { "pmaddwd", { MX, EM } },
1878 { "psadbw", { MX, EM } },
1ceb70f8 1879 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 1880 /* f8 */
ce518a5f
L
1881 { "psubb", { MX, EM } },
1882 { "psubw", { MX, EM } },
1883 { "psubd", { MX, EM } },
1884 { "psubq", { MX, EM } },
1885 { "paddb", { MX, EM } },
1886 { "paddw", { MX, EM } },
1887 { "paddd", { MX, EM } },
1888 { "(bad)", { XX } },
252b5132
RH
1889};
1890
1891static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
1892 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1893 /* ------------------------------- */
1894 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
1895 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
1896 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
1897 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
1898 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
1899 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
1900 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
1901 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
1902 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
1903 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
1904 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
1905 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
1906 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
1907 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
1908 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
1909 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
1910 /* ------------------------------- */
1911 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
1912};
1913
1914static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
1915 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1916 /* ------------------------------- */
252b5132 1917 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 1918 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 1919 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 1920 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 1921 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
1922 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
1923 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 1924 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
1925 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
1926 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 1927 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 1928 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 1929 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 1930 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 1931 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 1932 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
1933 /* ------------------------------- */
1934 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1935};
1936
252b5132
RH
1937static char obuf[100];
1938static char *obufp;
ea397f5b 1939static char *mnemonicendp;
252b5132
RH
1940static char scratchbuf[100];
1941static unsigned char *start_codep;
1942static unsigned char *insn_codep;
1943static unsigned char *codep;
b844680a
L
1944static const char *lock_prefix;
1945static const char *data_prefix;
1946static const char *addr_prefix;
1947static const char *repz_prefix;
1948static const char *repnz_prefix;
252b5132 1949static disassemble_info *the_info;
7967e09e
L
1950static struct
1951 {
1952 int mod;
7967e09e 1953 int reg;
484c222e 1954 int rm;
7967e09e
L
1955 }
1956modrm;
4bba6815 1957static unsigned char need_modrm;
c0f3af97
L
1958static struct
1959 {
1960 int register_specifier;
1961 int length;
1962 int prefix;
1963 int w;
1964 }
1965vex;
1966static unsigned char need_vex;
1967static unsigned char need_vex_reg;
dae39acc 1968static unsigned char vex_w_done;
252b5132 1969
ea397f5b
L
1970struct op
1971 {
1972 const char *name;
1973 unsigned int len;
1974 };
1975
4bba6815
AM
1976/* If we are accessing mod/rm/reg without need_modrm set, then the
1977 values are stale. Hitting this abort likely indicates that you
1978 need to update onebyte_has_modrm or twobyte_has_modrm. */
1979#define MODRM_CHECK if (!need_modrm) abort ()
1980
d708bcba
AM
1981static const char **names64;
1982static const char **names32;
1983static const char **names16;
1984static const char **names8;
1985static const char **names8rex;
1986static const char **names_seg;
db51cc60
L
1987static const char *index64;
1988static const char *index32;
d708bcba
AM
1989static const char **index16;
1990
1991static const char *intel_names64[] = {
1992 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
1993 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
1994};
1995static const char *intel_names32[] = {
1996 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
1997 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
1998};
1999static const char *intel_names16[] = {
2000 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2001 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2002};
2003static const char *intel_names8[] = {
2004 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2005};
2006static const char *intel_names8rex[] = {
2007 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2008 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2009};
2010static const char *intel_names_seg[] = {
2011 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2012};
db51cc60
L
2013static const char *intel_index64 = "riz";
2014static const char *intel_index32 = "eiz";
d708bcba
AM
2015static const char *intel_index16[] = {
2016 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2017};
2018
2019static const char *att_names64[] = {
2020 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2021 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2022};
d708bcba
AM
2023static const char *att_names32[] = {
2024 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2025 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2026};
d708bcba
AM
2027static const char *att_names16[] = {
2028 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2029 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2030};
d708bcba
AM
2031static const char *att_names8[] = {
2032 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2033};
d708bcba
AM
2034static const char *att_names8rex[] = {
2035 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2036 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2037};
d708bcba
AM
2038static const char *att_names_seg[] = {
2039 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2040};
db51cc60
L
2041static const char *att_index64 = "%riz";
2042static const char *att_index32 = "%eiz";
d708bcba
AM
2043static const char *att_index16[] = {
2044 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2045};
2046
1ceb70f8
L
2047static const struct dis386 reg_table[][8] = {
2048 /* REG_80 */
252b5132 2049 {
ce518a5f
L
2050 { "addA", { Eb, Ib } },
2051 { "orA", { Eb, Ib } },
2052 { "adcA", { Eb, Ib } },
2053 { "sbbA", { Eb, Ib } },
2054 { "andA", { Eb, Ib } },
2055 { "subA", { Eb, Ib } },
2056 { "xorA", { Eb, Ib } },
2057 { "cmpA", { Eb, Ib } },
252b5132 2058 },
1ceb70f8 2059 /* REG_81 */
252b5132 2060 {
ce518a5f
L
2061 { "addQ", { Ev, Iv } },
2062 { "orQ", { Ev, Iv } },
2063 { "adcQ", { Ev, Iv } },
2064 { "sbbQ", { Ev, Iv } },
2065 { "andQ", { Ev, Iv } },
2066 { "subQ", { Ev, Iv } },
2067 { "xorQ", { Ev, Iv } },
2068 { "cmpQ", { Ev, Iv } },
252b5132 2069 },
1ceb70f8 2070 /* REG_82 */
252b5132 2071 {
ce518a5f
L
2072 { "addQ", { Ev, sIb } },
2073 { "orQ", { Ev, sIb } },
2074 { "adcQ", { Ev, sIb } },
2075 { "sbbQ", { Ev, sIb } },
2076 { "andQ", { Ev, sIb } },
2077 { "subQ", { Ev, sIb } },
2078 { "xorQ", { Ev, sIb } },
2079 { "cmpQ", { Ev, sIb } },
252b5132 2080 },
1ceb70f8 2081 /* REG_8F */
4e7d34a6
L
2082 {
2083 { "popU", { stackEv } },
2084 { "(bad)", { XX } },
2085 { "(bad)", { XX } },
2086 { "(bad)", { XX } },
2087 { "(bad)", { XX } },
2088 { "(bad)", { XX } },
2089 { "(bad)", { XX } },
2090 { "(bad)", { XX } },
2091 },
1ceb70f8 2092 /* REG_C0 */
252b5132 2093 {
ce518a5f
L
2094 { "rolA", { Eb, Ib } },
2095 { "rorA", { Eb, Ib } },
2096 { "rclA", { Eb, Ib } },
2097 { "rcrA", { Eb, Ib } },
2098 { "shlA", { Eb, Ib } },
2099 { "shrA", { Eb, Ib } },
2100 { "(bad)", { XX } },
2101 { "sarA", { Eb, Ib } },
252b5132 2102 },
1ceb70f8 2103 /* REG_C1 */
252b5132 2104 {
ce518a5f
L
2105 { "rolQ", { Ev, Ib } },
2106 { "rorQ", { Ev, Ib } },
2107 { "rclQ", { Ev, Ib } },
2108 { "rcrQ", { Ev, Ib } },
2109 { "shlQ", { Ev, Ib } },
2110 { "shrQ", { Ev, Ib } },
2111 { "(bad)", { XX } },
2112 { "sarQ", { Ev, Ib } },
252b5132 2113 },
1ceb70f8 2114 /* REG_C6 */
4e7d34a6
L
2115 {
2116 { "movA", { Eb, Ib } },
2117 { "(bad)", { XX } },
2118 { "(bad)", { XX } },
2119 { "(bad)", { XX } },
2120 { "(bad)", { XX } },
2121 { "(bad)", { XX } },
2122 { "(bad)", { XX } },
2123 { "(bad)", { XX } },
2124 },
1ceb70f8 2125 /* REG_C7 */
4e7d34a6
L
2126 {
2127 { "movQ", { Ev, Iv } },
2128 { "(bad)", { XX } },
2129 { "(bad)", { XX } },
2130 { "(bad)", { XX } },
2131 { "(bad)", { XX } },
2132 { "(bad)", { XX } },
2133 { "(bad)", { XX } },
2134 { "(bad)", { XX } },
2135 },
1ceb70f8 2136 /* REG_D0 */
252b5132 2137 {
ce518a5f
L
2138 { "rolA", { Eb, I1 } },
2139 { "rorA", { Eb, I1 } },
2140 { "rclA", { Eb, I1 } },
2141 { "rcrA", { Eb, I1 } },
2142 { "shlA", { Eb, I1 } },
2143 { "shrA", { Eb, I1 } },
2144 { "(bad)", { XX } },
2145 { "sarA", { Eb, I1 } },
252b5132 2146 },
1ceb70f8 2147 /* REG_D1 */
252b5132 2148 {
ce518a5f
L
2149 { "rolQ", { Ev, I1 } },
2150 { "rorQ", { Ev, I1 } },
2151 { "rclQ", { Ev, I1 } },
2152 { "rcrQ", { Ev, I1 } },
2153 { "shlQ", { Ev, I1 } },
2154 { "shrQ", { Ev, I1 } },
2155 { "(bad)", { XX } },
2156 { "sarQ", { Ev, I1 } },
252b5132 2157 },
1ceb70f8 2158 /* REG_D2 */
252b5132 2159 {
ce518a5f
L
2160 { "rolA", { Eb, CL } },
2161 { "rorA", { Eb, CL } },
2162 { "rclA", { Eb, CL } },
2163 { "rcrA", { Eb, CL } },
2164 { "shlA", { Eb, CL } },
2165 { "shrA", { Eb, CL } },
2166 { "(bad)", { XX } },
2167 { "sarA", { Eb, CL } },
252b5132 2168 },
1ceb70f8 2169 /* REG_D3 */
252b5132 2170 {
ce518a5f
L
2171 { "rolQ", { Ev, CL } },
2172 { "rorQ", { Ev, CL } },
2173 { "rclQ", { Ev, CL } },
2174 { "rcrQ", { Ev, CL } },
2175 { "shlQ", { Ev, CL } },
2176 { "shrQ", { Ev, CL } },
2177 { "(bad)", { XX } },
2178 { "sarQ", { Ev, CL } },
252b5132 2179 },
1ceb70f8 2180 /* REG_F6 */
252b5132 2181 {
ce518a5f 2182 { "testA", { Eb, Ib } },
058f233b 2183 { "(bad)", { XX } },
ce518a5f
L
2184 { "notA", { Eb } },
2185 { "negA", { Eb } },
2186 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2187 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2188 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2189 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2190 },
1ceb70f8 2191 /* REG_F7 */
252b5132 2192 {
ce518a5f
L
2193 { "testQ", { Ev, Iv } },
2194 { "(bad)", { XX } },
2195 { "notQ", { Ev } },
2196 { "negQ", { Ev } },
2197 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2198 { "imulQ", { Ev } },
2199 { "divQ", { Ev } },
2200 { "idivQ", { Ev } },
252b5132 2201 },
1ceb70f8 2202 /* REG_FE */
252b5132 2203 {
ce518a5f
L
2204 { "incA", { Eb } },
2205 { "decA", { Eb } },
2206 { "(bad)", { XX } },
2207 { "(bad)", { XX } },
2208 { "(bad)", { XX } },
2209 { "(bad)", { XX } },
2210 { "(bad)", { XX } },
2211 { "(bad)", { XX } },
252b5132 2212 },
1ceb70f8 2213 /* REG_FF */
252b5132 2214 {
ce518a5f
L
2215 { "incQ", { Ev } },
2216 { "decQ", { Ev } },
2217 { "callT", { indirEv } },
2218 { "JcallT", { indirEp } },
2219 { "jmpT", { indirEv } },
2220 { "JjmpT", { indirEp } },
2221 { "pushU", { stackEv } },
2222 { "(bad)", { XX } },
252b5132 2223 },
1ceb70f8 2224 /* REG_0F00 */
252b5132 2225 {
ce518a5f
L
2226 { "sldtD", { Sv } },
2227 { "strD", { Sv } },
2228 { "lldt", { Ew } },
2229 { "ltr", { Ew } },
2230 { "verr", { Ew } },
2231 { "verw", { Ew } },
2232 { "(bad)", { XX } },
2233 { "(bad)", { XX } },
252b5132 2234 },
1ceb70f8 2235 /* REG_0F01 */
252b5132 2236 {
1ceb70f8
L
2237 { MOD_TABLE (MOD_0F01_REG_0) },
2238 { MOD_TABLE (MOD_0F01_REG_1) },
2239 { MOD_TABLE (MOD_0F01_REG_2) },
2240 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f
L
2241 { "smswD", { Sv } },
2242 { "(bad)", { XX } },
2243 { "lmsw", { Ew } },
1ceb70f8 2244 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2245 },
b5b1fc4f 2246 /* REG_0F0D */
252b5132 2247 {
4e7d34a6
L
2248 { "prefetch", { Eb } },
2249 { "prefetchw", { Eb } },
2250 { "(bad)", { XX } },
2251 { "(bad)", { XX } },
2252 { "(bad)", { XX } },
2253 { "(bad)", { XX } },
2254 { "(bad)", { XX } },
2255 { "(bad)", { XX } },
252b5132 2256 },
1ceb70f8 2257 /* REG_0F18 */
252b5132 2258 {
1ceb70f8
L
2259 { MOD_TABLE (MOD_0F18_REG_0) },
2260 { MOD_TABLE (MOD_0F18_REG_1) },
2261 { MOD_TABLE (MOD_0F18_REG_2) },
2262 { MOD_TABLE (MOD_0F18_REG_3) },
ce518a5f
L
2263 { "(bad)", { XX } },
2264 { "(bad)", { XX } },
2265 { "(bad)", { XX } },
2266 { "(bad)", { XX } },
252b5132 2267 },
1ceb70f8 2268 /* REG_0F71 */
a6bd098c 2269 {
ce518a5f
L
2270 { "(bad)", { XX } },
2271 { "(bad)", { XX } },
1ceb70f8 2272 { MOD_TABLE (MOD_0F71_REG_2) },
ce518a5f 2273 { "(bad)", { XX } },
1ceb70f8 2274 { MOD_TABLE (MOD_0F71_REG_4) },
ce518a5f 2275 { "(bad)", { XX } },
1ceb70f8 2276 { MOD_TABLE (MOD_0F71_REG_6) },
ce518a5f 2277 { "(bad)", { XX } },
a6bd098c 2278 },
1ceb70f8 2279 /* REG_0F72 */
a6bd098c 2280 {
ce518a5f
L
2281 { "(bad)", { XX } },
2282 { "(bad)", { XX } },
1ceb70f8 2283 { MOD_TABLE (MOD_0F72_REG_2) },
ce518a5f 2284 { "(bad)", { XX } },
1ceb70f8 2285 { MOD_TABLE (MOD_0F72_REG_4) },
ce518a5f 2286 { "(bad)", { XX } },
1ceb70f8 2287 { MOD_TABLE (MOD_0F72_REG_6) },
ce518a5f 2288 { "(bad)", { XX } },
a6bd098c 2289 },
1ceb70f8 2290 /* REG_0F73 */
252b5132 2291 {
ce518a5f
L
2292 { "(bad)", { XX } },
2293 { "(bad)", { XX } },
1ceb70f8
L
2294 { MOD_TABLE (MOD_0F73_REG_2) },
2295 { MOD_TABLE (MOD_0F73_REG_3) },
ce518a5f 2296 { "(bad)", { XX } },
ce518a5f 2297 { "(bad)", { XX } },
1ceb70f8
L
2298 { MOD_TABLE (MOD_0F73_REG_6) },
2299 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2300 },
1ceb70f8 2301 /* REG_0FA6 */
252b5132 2302 {
4e7d34a6
L
2303 { "montmul", { { OP_0f07, 0 } } },
2304 { "xsha1", { { OP_0f07, 0 } } },
2305 { "xsha256", { { OP_0f07, 0 } } },
2306 { "(bad)", { { OP_0f07, 0 } } },
2307 { "(bad)", { { OP_0f07, 0 } } },
2308 { "(bad)", { { OP_0f07, 0 } } },
2309 { "(bad)", { { OP_0f07, 0 } } },
2310 { "(bad)", { { OP_0f07, 0 } } },
2311 },
1ceb70f8 2312 /* REG_0FA7 */
4e7d34a6
L
2313 {
2314 { "xstore-rng", { { OP_0f07, 0 } } },
2315 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2316 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2317 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2318 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2319 { "xcrypt-ofb", { { OP_0f07, 0 } } },
2320 { "(bad)", { { OP_0f07, 0 } } },
2321 { "(bad)", { { OP_0f07, 0 } } },
2322 },
1ceb70f8 2323 /* REG_0FAE */
4e7d34a6 2324 {
1ceb70f8
L
2325 { MOD_TABLE (MOD_0FAE_REG_0) },
2326 { MOD_TABLE (MOD_0FAE_REG_1) },
2327 { MOD_TABLE (MOD_0FAE_REG_2) },
2328 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2329 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2330 { MOD_TABLE (MOD_0FAE_REG_5) },
2331 { MOD_TABLE (MOD_0FAE_REG_6) },
2332 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2333 },
1ceb70f8 2334 /* REG_0FBA */
252b5132 2335 {
ce518a5f
L
2336 { "(bad)", { XX } },
2337 { "(bad)", { XX } },
d8faab4e
L
2338 { "(bad)", { XX } },
2339 { "(bad)", { XX } },
4e7d34a6
L
2340 { "btQ", { Ev, Ib } },
2341 { "btsQ", { Ev, Ib } },
2342 { "btrQ", { Ev, Ib } },
2343 { "btcQ", { Ev, Ib } },
c608c12e 2344 },
1ceb70f8 2345 /* REG_0FC7 */
c608c12e 2346 {
b844680a 2347 { "(bad)", { XX } },
4e7d34a6 2348 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
d8faab4e 2349 { "(bad)", { XX } },
b844680a
L
2350 { "(bad)", { XX } },
2351 { "(bad)", { XX } },
2352 { "(bad)", { XX } },
1ceb70f8
L
2353 { MOD_TABLE (MOD_0FC7_REG_6) },
2354 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2355 },
c0f3af97
L
2356 /* REG_VEX_71 */
2357 {
2358 { "(bad)", { XX } },
2359 { "(bad)", { XX } },
2360 { MOD_TABLE (MOD_VEX_71_REG_2) },
2361 { "(bad)", { XX } },
2362 { MOD_TABLE (MOD_VEX_71_REG_4) },
2363 { "(bad)", { XX } },
2364 { MOD_TABLE (MOD_VEX_71_REG_6) },
2365 { "(bad)", { XX } },
2366 },
2367 /* REG_VEX_72 */
2368 {
2369 { "(bad)", { XX } },
2370 { "(bad)", { XX } },
2371 { MOD_TABLE (MOD_VEX_72_REG_2) },
2372 { "(bad)", { XX } },
2373 { MOD_TABLE (MOD_VEX_72_REG_4) },
2374 { "(bad)", { XX } },
2375 { MOD_TABLE (MOD_VEX_72_REG_6) },
2376 { "(bad)", { XX } },
2377 },
2378 /* REG_VEX_73 */
2379 {
2380 { "(bad)", { XX } },
2381 { "(bad)", { XX } },
2382 { MOD_TABLE (MOD_VEX_73_REG_2) },
2383 { MOD_TABLE (MOD_VEX_73_REG_3) },
2384 { "(bad)", { XX } },
2385 { "(bad)", { XX } },
2386 { MOD_TABLE (MOD_VEX_73_REG_6) },
2387 { MOD_TABLE (MOD_VEX_73_REG_7) },
2388 },
2389 /* REG_VEX_AE */
2390 {
2391 { "(bad)", { XX } },
2392 { "(bad)", { XX } },
2393 { MOD_TABLE (MOD_VEX_AE_REG_2) },
2394 { MOD_TABLE (MOD_VEX_AE_REG_3) },
2395 { "(bad)", { XX } },
2396 { "(bad)", { XX } },
2397 { "(bad)", { XX } },
2398 { "(bad)", { XX } },
2399 },
4e7d34a6
L
2400};
2401
1ceb70f8
L
2402static const struct dis386 prefix_table[][4] = {
2403 /* PREFIX_90 */
252b5132 2404 {
4e7d34a6
L
2405 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2406 { "pause", { XX } },
2407 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2408 { "(bad)", { XX } },
0f10071e 2409 },
4e7d34a6 2410
1ceb70f8 2411 /* PREFIX_0F10 */
cc0ec051 2412 {
4e7d34a6
L
2413 { "movups", { XM, EXx } },
2414 { "movss", { XM, EXd } },
2415 { "movupd", { XM, EXx } },
2416 { "movsd", { XM, EXq } },
30d1c836 2417 },
4e7d34a6 2418
1ceb70f8 2419 /* PREFIX_0F11 */
30d1c836 2420 {
b6169b20 2421 { "movups", { EXxS, XM } },
fa99fab2 2422 { "movss", { EXdS, XM } },
b6169b20 2423 { "movupd", { EXxS, XM } },
fa99fab2 2424 { "movsd", { EXqS, XM } },
4e7d34a6 2425 },
252b5132 2426
1ceb70f8 2427 /* PREFIX_0F12 */
c608c12e 2428 {
1ceb70f8 2429 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2430 { "movsldup", { XM, EXx } },
2431 { "movlpd", { XM, EXq } },
2432 { "movddup", { XM, EXq } },
c608c12e 2433 },
4e7d34a6 2434
1ceb70f8 2435 /* PREFIX_0F16 */
c608c12e 2436 {
1ceb70f8 2437 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2438 { "movshdup", { XM, EXx } },
2439 { "movhpd", { XM, EXq } },
058f233b 2440 { "(bad)", { XX } },
c608c12e 2441 },
4e7d34a6 2442
1ceb70f8 2443 /* PREFIX_0F2A */
c608c12e 2444 {
09335d05 2445 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2446 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2447 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2448 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2449 },
4e7d34a6 2450
1ceb70f8 2451 /* PREFIX_0F2B */
c608c12e 2452 {
75c135a8
L
2453 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2454 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2455 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2456 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2457 },
4e7d34a6 2458
1ceb70f8 2459 /* PREFIX_0F2C */
c608c12e 2460 {
09335d05
L
2461 { "cvttps2pi", { MXC, EXq } },
2462 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2463 { "cvttpd2pi", { MXC, EXx } },
09335d05 2464 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2465 },
4e7d34a6 2466
1ceb70f8 2467 /* PREFIX_0F2D */
c608c12e 2468 {
4e7d34a6
L
2469 { "cvtps2pi", { MXC, EXq } },
2470 { "cvtss2siY", { Gv, EXd } },
2471 { "cvtpd2pi", { MXC, EXx } },
2472 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2473 },
4e7d34a6 2474
1ceb70f8 2475 /* PREFIX_0F2E */
c608c12e 2476 {
4e7d34a6
L
2477 { "ucomiss",{ XM, EXd } },
2478 { "(bad)", { XX } },
2479 { "ucomisd",{ XM, EXq } },
2480 { "(bad)", { XX } },
c608c12e 2481 },
4e7d34a6 2482
1ceb70f8 2483 /* PREFIX_0F2F */
c608c12e 2484 {
4e7d34a6
L
2485 { "comiss", { XM, EXd } },
2486 { "(bad)", { XX } },
2487 { "comisd", { XM, EXq } },
2488 { "(bad)", { XX } },
c608c12e 2489 },
4e7d34a6 2490
1ceb70f8 2491 /* PREFIX_0F51 */
c608c12e 2492 {
4e7d34a6
L
2493 { "sqrtps", { XM, EXx } },
2494 { "sqrtss", { XM, EXd } },
2495 { "sqrtpd", { XM, EXx } },
2496 { "sqrtsd", { XM, EXq } },
c608c12e 2497 },
4e7d34a6 2498
1ceb70f8 2499 /* PREFIX_0F52 */
c608c12e 2500 {
4e7d34a6
L
2501 { "rsqrtps",{ XM, EXx } },
2502 { "rsqrtss",{ XM, EXd } },
058f233b
L
2503 { "(bad)", { XX } },
2504 { "(bad)", { XX } },
c608c12e 2505 },
4e7d34a6 2506
1ceb70f8 2507 /* PREFIX_0F53 */
c608c12e 2508 {
4e7d34a6
L
2509 { "rcpps", { XM, EXx } },
2510 { "rcpss", { XM, EXd } },
058f233b
L
2511 { "(bad)", { XX } },
2512 { "(bad)", { XX } },
c608c12e 2513 },
4e7d34a6 2514
1ceb70f8 2515 /* PREFIX_0F58 */
c608c12e 2516 {
4e7d34a6
L
2517 { "addps", { XM, EXx } },
2518 { "addss", { XM, EXd } },
2519 { "addpd", { XM, EXx } },
2520 { "addsd", { XM, EXq } },
c608c12e 2521 },
4e7d34a6 2522
1ceb70f8 2523 /* PREFIX_0F59 */
c608c12e 2524 {
4e7d34a6
L
2525 { "mulps", { XM, EXx } },
2526 { "mulss", { XM, EXd } },
2527 { "mulpd", { XM, EXx } },
2528 { "mulsd", { XM, EXq } },
041bd2e0 2529 },
4e7d34a6 2530
1ceb70f8 2531 /* PREFIX_0F5A */
041bd2e0 2532 {
4e7d34a6
L
2533 { "cvtps2pd", { XM, EXq } },
2534 { "cvtss2sd", { XM, EXd } },
2535 { "cvtpd2ps", { XM, EXx } },
2536 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2537 },
4e7d34a6 2538
1ceb70f8 2539 /* PREFIX_0F5B */
041bd2e0 2540 {
09a2c6cf
L
2541 { "cvtdq2ps", { XM, EXx } },
2542 { "cvttps2dq", { XM, EXx } },
2543 { "cvtps2dq", { XM, EXx } },
058f233b 2544 { "(bad)", { XX } },
041bd2e0 2545 },
4e7d34a6 2546
1ceb70f8 2547 /* PREFIX_0F5C */
041bd2e0 2548 {
4e7d34a6
L
2549 { "subps", { XM, EXx } },
2550 { "subss", { XM, EXd } },
2551 { "subpd", { XM, EXx } },
2552 { "subsd", { XM, EXq } },
041bd2e0 2553 },
4e7d34a6 2554
1ceb70f8 2555 /* PREFIX_0F5D */
041bd2e0 2556 {
4e7d34a6
L
2557 { "minps", { XM, EXx } },
2558 { "minss", { XM, EXd } },
2559 { "minpd", { XM, EXx } },
2560 { "minsd", { XM, EXq } },
041bd2e0 2561 },
4e7d34a6 2562
1ceb70f8 2563 /* PREFIX_0F5E */
041bd2e0 2564 {
4e7d34a6
L
2565 { "divps", { XM, EXx } },
2566 { "divss", { XM, EXd } },
2567 { "divpd", { XM, EXx } },
2568 { "divsd", { XM, EXq } },
041bd2e0 2569 },
4e7d34a6 2570
1ceb70f8 2571 /* PREFIX_0F5F */
041bd2e0 2572 {
4e7d34a6
L
2573 { "maxps", { XM, EXx } },
2574 { "maxss", { XM, EXd } },
2575 { "maxpd", { XM, EXx } },
2576 { "maxsd", { XM, EXq } },
041bd2e0 2577 },
4e7d34a6 2578
1ceb70f8 2579 /* PREFIX_0F60 */
041bd2e0 2580 {
4e7d34a6
L
2581 { "punpcklbw",{ MX, EMd } },
2582 { "(bad)", { XX } },
2583 { "punpcklbw",{ MX, EMx } },
2584 { "(bad)", { XX } },
041bd2e0 2585 },
4e7d34a6 2586
1ceb70f8 2587 /* PREFIX_0F61 */
041bd2e0 2588 {
4e7d34a6
L
2589 { "punpcklwd",{ MX, EMd } },
2590 { "(bad)", { XX } },
2591 { "punpcklwd",{ MX, EMx } },
2592 { "(bad)", { XX } },
041bd2e0 2593 },
4e7d34a6 2594
1ceb70f8 2595 /* PREFIX_0F62 */
041bd2e0 2596 {
4e7d34a6
L
2597 { "punpckldq",{ MX, EMd } },
2598 { "(bad)", { XX } },
2599 { "punpckldq",{ MX, EMx } },
2600 { "(bad)", { XX } },
041bd2e0 2601 },
4e7d34a6 2602
1ceb70f8 2603 /* PREFIX_0F6C */
041bd2e0 2604 {
058f233b
L
2605 { "(bad)", { XX } },
2606 { "(bad)", { XX } },
4e7d34a6 2607 { "punpcklqdq", { XM, EXx } },
058f233b 2608 { "(bad)", { XX } },
0f17484f 2609 },
4e7d34a6 2610
1ceb70f8 2611 /* PREFIX_0F6D */
0f17484f 2612 {
058f233b
L
2613 { "(bad)", { XX } },
2614 { "(bad)", { XX } },
4e7d34a6 2615 { "punpckhqdq", { XM, EXx } },
058f233b 2616 { "(bad)", { XX } },
041bd2e0 2617 },
4e7d34a6 2618
1ceb70f8 2619 /* PREFIX_0F6F */
ca164297 2620 {
4e7d34a6
L
2621 { "movq", { MX, EM } },
2622 { "movdqu", { XM, EXx } },
2623 { "movdqa", { XM, EXx } },
058f233b 2624 { "(bad)", { XX } },
ca164297 2625 },
4e7d34a6 2626
1ceb70f8 2627 /* PREFIX_0F70 */
4e7d34a6
L
2628 {
2629 { "pshufw", { MX, EM, Ib } },
2630 { "pshufhw",{ XM, EXx, Ib } },
2631 { "pshufd", { XM, EXx, Ib } },
2632 { "pshuflw",{ XM, EXx, Ib } },
2633 },
2634
92fddf8e
L
2635 /* PREFIX_0F73_REG_3 */
2636 {
2637 { "(bad)", { XX } },
2638 { "(bad)", { XX } },
2639 { "psrldq", { XS, Ib } },
2640 { "(bad)", { XX } },
2641 },
2642
2643 /* PREFIX_0F73_REG_7 */
2644 {
2645 { "(bad)", { XX } },
2646 { "(bad)", { XX } },
2647 { "pslldq", { XS, Ib } },
2648 { "(bad)", { XX } },
2649 },
2650
1ceb70f8 2651 /* PREFIX_0F78 */
4e7d34a6
L
2652 {
2653 {"vmread", { Em, Gm } },
2654 {"(bad)", { XX } },
2655 {"extrq", { XS, Ib, Ib } },
2656 {"insertq", { XM, XS, Ib, Ib } },
2657 },
2658
1ceb70f8 2659 /* PREFIX_0F79 */
4e7d34a6
L
2660 {
2661 {"vmwrite", { Gm, Em } },
2662 {"(bad)", { XX } },
2663 {"extrq", { XM, XS } },
2664 {"insertq", { XM, XS } },
2665 },
2666
1ceb70f8 2667 /* PREFIX_0F7C */
ca164297 2668 {
058f233b
L
2669 { "(bad)", { XX } },
2670 { "(bad)", { XX } },
09a2c6cf
L
2671 { "haddpd", { XM, EXx } },
2672 { "haddps", { XM, EXx } },
ca164297 2673 },
4e7d34a6 2674
1ceb70f8 2675 /* PREFIX_0F7D */
ca164297 2676 {
058f233b
L
2677 { "(bad)", { XX } },
2678 { "(bad)", { XX } },
09a2c6cf
L
2679 { "hsubpd", { XM, EXx } },
2680 { "hsubps", { XM, EXx } },
ca164297 2681 },
4e7d34a6 2682
1ceb70f8 2683 /* PREFIX_0F7E */
ca164297 2684 {
4e7d34a6
L
2685 { "movK", { Edq, MX } },
2686 { "movq", { XM, EXq } },
2687 { "movK", { Edq, XM } },
058f233b 2688 { "(bad)", { XX } },
ca164297 2689 },
4e7d34a6 2690
1ceb70f8 2691 /* PREFIX_0F7F */
ca164297 2692 {
b6169b20
L
2693 { "movq", { EMS, MX } },
2694 { "movdqu", { EXxS, XM } },
2695 { "movdqa", { EXxS, XM } },
058f233b 2696 { "(bad)", { XX } },
ca164297 2697 },
4e7d34a6 2698
1ceb70f8 2699 /* PREFIX_0FB8 */
ca164297 2700 {
4e7d34a6
L
2701 { "(bad)", { XX } },
2702 { "popcntS", { Gv, Ev } },
2703 { "(bad)", { XX } },
2704 { "(bad)", { XX } },
ca164297 2705 },
4e7d34a6 2706
1ceb70f8 2707 /* PREFIX_0FBD */
050dfa73 2708 {
4e7d34a6
L
2709 { "bsrS", { Gv, Ev } },
2710 { "lzcntS", { Gv, Ev } },
2711 { "bsrS", { Gv, Ev } },
2712 { "(bad)", { XX } },
050dfa73
MM
2713 },
2714
1ceb70f8 2715 /* PREFIX_0FC2 */
050dfa73 2716 {
ad19981d
L
2717 { "cmpps", { XM, EXx, CMP } },
2718 { "cmpss", { XM, EXd, CMP } },
2719 { "cmppd", { XM, EXx, CMP } },
2720 { "cmpsd", { XM, EXq, CMP } },
050dfa73 2721 },
246c51aa 2722
4ee52178
L
2723 /* PREFIX_0FC3 */
2724 {
2725 { "movntiS", { Ma, Gv } },
2726 { "(bad)", { XX } },
2727 { "(bad)", { XX } },
2728 { "(bad)", { XX } },
2729 },
2730
92fddf8e
L
2731 /* PREFIX_0FC7_REG_6 */
2732 {
2733 { "vmptrld",{ Mq } },
2734 { "vmxon", { Mq } },
2735 { "vmclear",{ Mq } },
2736 { "(bad)", { XX } },
2737 },
2738
1ceb70f8 2739 /* PREFIX_0FD0 */
050dfa73 2740 {
058f233b
L
2741 { "(bad)", { XX } },
2742 { "(bad)", { XX } },
4e7d34a6
L
2743 { "addsubpd", { XM, EXx } },
2744 { "addsubps", { XM, EXx } },
246c51aa 2745 },
050dfa73 2746
1ceb70f8 2747 /* PREFIX_0FD6 */
050dfa73 2748 {
058f233b 2749 { "(bad)", { XX } },
4e7d34a6 2750 { "movq2dq",{ XM, MS } },
b6169b20 2751 { "movq", { EXqS, XM } },
4e7d34a6 2752 { "movdq2q",{ MX, XS } },
050dfa73
MM
2753 },
2754
1ceb70f8 2755 /* PREFIX_0FE6 */
7918206c 2756 {
058f233b 2757 { "(bad)", { XX } },
4e7d34a6
L
2758 { "cvtdq2pd", { XM, EXq } },
2759 { "cvttpd2dq", { XM, EXx } },
2760 { "cvtpd2dq", { XM, EXx } },
7918206c 2761 },
8b38ad71 2762
1ceb70f8 2763 /* PREFIX_0FE7 */
8b38ad71 2764 {
4ee52178 2765 { "movntq", { Mq, MX } },
058f233b 2766 { "(bad)", { XX } },
75c135a8 2767 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
058f233b 2768 { "(bad)", { XX } },
4e7d34a6
L
2769 },
2770
1ceb70f8 2771 /* PREFIX_0FF0 */
4e7d34a6 2772 {
058f233b
L
2773 { "(bad)", { XX } },
2774 { "(bad)", { XX } },
2775 { "(bad)", { XX } },
1ceb70f8 2776 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
2777 },
2778
1ceb70f8 2779 /* PREFIX_0FF7 */
4e7d34a6
L
2780 {
2781 { "maskmovq", { MX, MS } },
058f233b 2782 { "(bad)", { XX } },
4e7d34a6 2783 { "maskmovdqu", { XM, XS } },
058f233b 2784 { "(bad)", { XX } },
8b38ad71 2785 },
42903f7f 2786
1ceb70f8 2787 /* PREFIX_0F3810 */
42903f7f
L
2788 {
2789 { "(bad)", { XX } },
2790 { "(bad)", { XX } },
88a94849 2791 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
2792 { "(bad)", { XX } },
2793 },
2794
1ceb70f8 2795 /* PREFIX_0F3814 */
42903f7f
L
2796 {
2797 { "(bad)", { XX } },
2798 { "(bad)", { XX } },
88a94849 2799 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
2800 { "(bad)", { XX } },
2801 },
2802
1ceb70f8 2803 /* PREFIX_0F3815 */
42903f7f
L
2804 {
2805 { "(bad)", { XX } },
2806 { "(bad)", { XX } },
09a2c6cf 2807 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
2808 { "(bad)", { XX } },
2809 },
2810
1ceb70f8 2811 /* PREFIX_0F3817 */
42903f7f
L
2812 {
2813 { "(bad)", { XX } },
2814 { "(bad)", { XX } },
09a2c6cf 2815 { "ptest", { XM, EXx } },
42903f7f
L
2816 { "(bad)", { XX } },
2817 },
2818
1ceb70f8 2819 /* PREFIX_0F3820 */
42903f7f
L
2820 {
2821 { "(bad)", { XX } },
2822 { "(bad)", { XX } },
8976381e 2823 { "pmovsxbw", { XM, EXq } },
42903f7f
L
2824 { "(bad)", { XX } },
2825 },
2826
1ceb70f8 2827 /* PREFIX_0F3821 */
42903f7f
L
2828 {
2829 { "(bad)", { XX } },
2830 { "(bad)", { XX } },
8976381e 2831 { "pmovsxbd", { XM, EXd } },
42903f7f
L
2832 { "(bad)", { XX } },
2833 },
2834
1ceb70f8 2835 /* PREFIX_0F3822 */
42903f7f
L
2836 {
2837 { "(bad)", { XX } },
2838 { "(bad)", { XX } },
8976381e 2839 { "pmovsxbq", { XM, EXw } },
42903f7f
L
2840 { "(bad)", { XX } },
2841 },
2842
1ceb70f8 2843 /* PREFIX_0F3823 */
42903f7f
L
2844 {
2845 { "(bad)", { XX } },
2846 { "(bad)", { XX } },
8976381e 2847 { "pmovsxwd", { XM, EXq } },
42903f7f
L
2848 { "(bad)", { XX } },
2849 },
2850
1ceb70f8 2851 /* PREFIX_0F3824 */
42903f7f
L
2852 {
2853 { "(bad)", { XX } },
2854 { "(bad)", { XX } },
8976381e 2855 { "pmovsxwq", { XM, EXd } },
42903f7f
L
2856 { "(bad)", { XX } },
2857 },
2858
1ceb70f8 2859 /* PREFIX_0F3825 */
42903f7f
L
2860 {
2861 { "(bad)", { XX } },
2862 { "(bad)", { XX } },
8976381e 2863 { "pmovsxdq", { XM, EXq } },
42903f7f
L
2864 { "(bad)", { XX } },
2865 },
2866
1ceb70f8 2867 /* PREFIX_0F3828 */
42903f7f
L
2868 {
2869 { "(bad)", { XX } },
2870 { "(bad)", { XX } },
09a2c6cf 2871 { "pmuldq", { XM, EXx } },
42903f7f
L
2872 { "(bad)", { XX } },
2873 },
2874
1ceb70f8 2875 /* PREFIX_0F3829 */
42903f7f
L
2876 {
2877 { "(bad)", { XX } },
2878 { "(bad)", { XX } },
09a2c6cf 2879 { "pcmpeqq", { XM, EXx } },
42903f7f
L
2880 { "(bad)", { XX } },
2881 },
2882
1ceb70f8 2883 /* PREFIX_0F382A */
42903f7f
L
2884 {
2885 { "(bad)", { XX } },
2886 { "(bad)", { XX } },
75c135a8 2887 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
2888 { "(bad)", { XX } },
2889 },
2890
1ceb70f8 2891 /* PREFIX_0F382B */
42903f7f
L
2892 {
2893 { "(bad)", { XX } },
2894 { "(bad)", { XX } },
09a2c6cf 2895 { "packusdw", { XM, EXx } },
42903f7f
L
2896 { "(bad)", { XX } },
2897 },
2898
1ceb70f8 2899 /* PREFIX_0F3830 */
42903f7f
L
2900 {
2901 { "(bad)", { XX } },
2902 { "(bad)", { XX } },
8976381e 2903 { "pmovzxbw", { XM, EXq } },
42903f7f
L
2904 { "(bad)", { XX } },
2905 },
2906
1ceb70f8 2907 /* PREFIX_0F3831 */
42903f7f
L
2908 {
2909 { "(bad)", { XX } },
2910 { "(bad)", { XX } },
8976381e 2911 { "pmovzxbd", { XM, EXd } },
42903f7f
L
2912 { "(bad)", { XX } },
2913 },
2914
1ceb70f8 2915 /* PREFIX_0F3832 */
42903f7f
L
2916 {
2917 { "(bad)", { XX } },
2918 { "(bad)", { XX } },
8976381e 2919 { "pmovzxbq", { XM, EXw } },
42903f7f
L
2920 { "(bad)", { XX } },
2921 },
2922
1ceb70f8 2923 /* PREFIX_0F3833 */
42903f7f
L
2924 {
2925 { "(bad)", { XX } },
2926 { "(bad)", { XX } },
8976381e 2927 { "pmovzxwd", { XM, EXq } },
42903f7f
L
2928 { "(bad)", { XX } },
2929 },
2930
1ceb70f8 2931 /* PREFIX_0F3834 */
42903f7f
L
2932 {
2933 { "(bad)", { XX } },
2934 { "(bad)", { XX } },
8976381e 2935 { "pmovzxwq", { XM, EXd } },
42903f7f
L
2936 { "(bad)", { XX } },
2937 },
2938
1ceb70f8 2939 /* PREFIX_0F3835 */
42903f7f
L
2940 {
2941 { "(bad)", { XX } },
2942 { "(bad)", { XX } },
8976381e 2943 { "pmovzxdq", { XM, EXq } },
42903f7f
L
2944 { "(bad)", { XX } },
2945 },
2946
1ceb70f8 2947 /* PREFIX_0F3837 */
4e7d34a6
L
2948 {
2949 { "(bad)", { XX } },
2950 { "(bad)", { XX } },
2951 { "pcmpgtq", { XM, EXx } },
2952 { "(bad)", { XX } },
2953 },
2954
1ceb70f8 2955 /* PREFIX_0F3838 */
42903f7f
L
2956 {
2957 { "(bad)", { XX } },
2958 { "(bad)", { XX } },
09a2c6cf 2959 { "pminsb", { XM, EXx } },
42903f7f
L
2960 { "(bad)", { XX } },
2961 },
2962
1ceb70f8 2963 /* PREFIX_0F3839 */
42903f7f
L
2964 {
2965 { "(bad)", { XX } },
2966 { "(bad)", { XX } },
09a2c6cf 2967 { "pminsd", { XM, EXx } },
42903f7f
L
2968 { "(bad)", { XX } },
2969 },
2970
1ceb70f8 2971 /* PREFIX_0F383A */
42903f7f
L
2972 {
2973 { "(bad)", { XX } },
2974 { "(bad)", { XX } },
09a2c6cf 2975 { "pminuw", { XM, EXx } },
42903f7f
L
2976 { "(bad)", { XX } },
2977 },
2978
1ceb70f8 2979 /* PREFIX_0F383B */
42903f7f
L
2980 {
2981 { "(bad)", { XX } },
2982 { "(bad)", { XX } },
09a2c6cf 2983 { "pminud", { XM, EXx } },
42903f7f
L
2984 { "(bad)", { XX } },
2985 },
2986
1ceb70f8 2987 /* PREFIX_0F383C */
42903f7f
L
2988 {
2989 { "(bad)", { XX } },
2990 { "(bad)", { XX } },
09a2c6cf 2991 { "pmaxsb", { XM, EXx } },
42903f7f
L
2992 { "(bad)", { XX } },
2993 },
2994
1ceb70f8 2995 /* PREFIX_0F383D */
42903f7f
L
2996 {
2997 { "(bad)", { XX } },
2998 { "(bad)", { XX } },
09a2c6cf 2999 { "pmaxsd", { XM, EXx } },
42903f7f
L
3000 { "(bad)", { XX } },
3001 },
3002
1ceb70f8 3003 /* PREFIX_0F383E */
42903f7f
L
3004 {
3005 { "(bad)", { XX } },
3006 { "(bad)", { XX } },
09a2c6cf 3007 { "pmaxuw", { XM, EXx } },
42903f7f
L
3008 { "(bad)", { XX } },
3009 },
3010
1ceb70f8 3011 /* PREFIX_0F383F */
42903f7f
L
3012 {
3013 { "(bad)", { XX } },
3014 { "(bad)", { XX } },
09a2c6cf 3015 { "pmaxud", { XM, EXx } },
42903f7f
L
3016 { "(bad)", { XX } },
3017 },
3018
1ceb70f8 3019 /* PREFIX_0F3840 */
42903f7f
L
3020 {
3021 { "(bad)", { XX } },
3022 { "(bad)", { XX } },
09a2c6cf 3023 { "pmulld", { XM, EXx } },
42903f7f
L
3024 { "(bad)", { XX } },
3025 },
3026
1ceb70f8 3027 /* PREFIX_0F3841 */
42903f7f
L
3028 {
3029 { "(bad)", { XX } },
3030 { "(bad)", { XX } },
09a2c6cf 3031 { "phminposuw", { XM, EXx } },
42903f7f
L
3032 { "(bad)", { XX } },
3033 },
3034
f1f8f695
L
3035 /* PREFIX_0F3880 */
3036 {
3037 { "(bad)", { XX } },
3038 { "(bad)", { XX } },
3039 { "invept", { Gm, Mo } },
3040 { "(bad)", { XX } },
3041 },
3042
3043 /* PREFIX_0F3881 */
3044 {
3045 { "(bad)", { XX } },
3046 { "(bad)", { XX } },
3047 { "invvpid", { Gm, Mo } },
3048 { "(bad)", { XX } },
3049 },
3050
c0f3af97
L
3051 /* PREFIX_0F38DB */
3052 {
3053 { "(bad)", { XX } },
3054 { "(bad)", { XX } },
3055 { "aesimc", { XM, EXx } },
3056 { "(bad)", { XX } },
3057 },
3058
3059 /* PREFIX_0F38DC */
3060 {
3061 { "(bad)", { XX } },
3062 { "(bad)", { XX } },
3063 { "aesenc", { XM, EXx } },
3064 { "(bad)", { XX } },
3065 },
3066
3067 /* PREFIX_0F38DD */
3068 {
3069 { "(bad)", { XX } },
3070 { "(bad)", { XX } },
3071 { "aesenclast", { XM, EXx } },
3072 { "(bad)", { XX } },
3073 },
3074
3075 /* PREFIX_0F38DE */
3076 {
3077 { "(bad)", { XX } },
3078 { "(bad)", { XX } },
3079 { "aesdec", { XM, EXx } },
3080 { "(bad)", { XX } },
3081 },
3082
3083 /* PREFIX_0F38DF */
3084 {
3085 { "(bad)", { XX } },
3086 { "(bad)", { XX } },
3087 { "aesdeclast", { XM, EXx } },
3088 { "(bad)", { XX } },
3089 },
3090
1ceb70f8 3091 /* PREFIX_0F38F0 */
4e7d34a6 3092 {
f1f8f695 3093 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6 3094 { "(bad)", { XX } },
f1f8f695 3095 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3096 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3097 },
3098
1ceb70f8 3099 /* PREFIX_0F38F1 */
4e7d34a6 3100 {
f1f8f695 3101 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6 3102 { "(bad)", { XX } },
f1f8f695 3103 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3104 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3105 },
3106
1ceb70f8 3107 /* PREFIX_0F3A08 */
42903f7f
L
3108 {
3109 { "(bad)", { XX } },
3110 { "(bad)", { XX } },
09a2c6cf 3111 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3112 { "(bad)", { XX } },
3113 },
3114
1ceb70f8 3115 /* PREFIX_0F3A09 */
42903f7f
L
3116 {
3117 { "(bad)", { XX } },
3118 { "(bad)", { XX } },
09a2c6cf 3119 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3120 { "(bad)", { XX } },
3121 },
3122
1ceb70f8 3123 /* PREFIX_0F3A0A */
42903f7f
L
3124 {
3125 { "(bad)", { XX } },
3126 { "(bad)", { XX } },
09335d05 3127 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3128 { "(bad)", { XX } },
3129 },
3130
1ceb70f8 3131 /* PREFIX_0F3A0B */
42903f7f
L
3132 {
3133 { "(bad)", { XX } },
3134 { "(bad)", { XX } },
09335d05 3135 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3136 { "(bad)", { XX } },
3137 },
3138
1ceb70f8 3139 /* PREFIX_0F3A0C */
42903f7f
L
3140 {
3141 { "(bad)", { XX } },
3142 { "(bad)", { XX } },
09a2c6cf 3143 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3144 { "(bad)", { XX } },
3145 },
3146
1ceb70f8 3147 /* PREFIX_0F3A0D */
42903f7f
L
3148 {
3149 { "(bad)", { XX } },
3150 { "(bad)", { XX } },
09a2c6cf 3151 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3152 { "(bad)", { XX } },
3153 },
3154
1ceb70f8 3155 /* PREFIX_0F3A0E */
42903f7f
L
3156 {
3157 { "(bad)", { XX } },
3158 { "(bad)", { XX } },
09a2c6cf 3159 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3160 { "(bad)", { XX } },
3161 },
3162
1ceb70f8 3163 /* PREFIX_0F3A14 */
42903f7f
L
3164 {
3165 { "(bad)", { XX } },
3166 { "(bad)", { XX } },
3167 { "pextrb", { Edqb, XM, Ib } },
3168 { "(bad)", { XX } },
3169 },
3170
1ceb70f8 3171 /* PREFIX_0F3A15 */
42903f7f
L
3172 {
3173 { "(bad)", { XX } },
3174 { "(bad)", { XX } },
3175 { "pextrw", { Edqw, XM, Ib } },
3176 { "(bad)", { XX } },
3177 },
3178
1ceb70f8 3179 /* PREFIX_0F3A16 */
42903f7f
L
3180 {
3181 { "(bad)", { XX } },
3182 { "(bad)", { XX } },
3183 { "pextrK", { Edq, XM, Ib } },
3184 { "(bad)", { XX } },
3185 },
3186
1ceb70f8 3187 /* PREFIX_0F3A17 */
42903f7f
L
3188 {
3189 { "(bad)", { XX } },
3190 { "(bad)", { XX } },
3191 { "extractps", { Edqd, XM, Ib } },
3192 { "(bad)", { XX } },
3193 },
3194
1ceb70f8 3195 /* PREFIX_0F3A20 */
42903f7f
L
3196 {
3197 { "(bad)", { XX } },
3198 { "(bad)", { XX } },
3199 { "pinsrb", { XM, Edqb, Ib } },
3200 { "(bad)", { XX } },
3201 },
3202
1ceb70f8 3203 /* PREFIX_0F3A21 */
42903f7f
L
3204 {
3205 { "(bad)", { XX } },
3206 { "(bad)", { XX } },
8976381e 3207 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3208 { "(bad)", { XX } },
3209 },
3210
1ceb70f8 3211 /* PREFIX_0F3A22 */
42903f7f
L
3212 {
3213 { "(bad)", { XX } },
3214 { "(bad)", { XX } },
3215 { "pinsrK", { XM, Edq, Ib } },
3216 { "(bad)", { XX } },
3217 },
3218
1ceb70f8 3219 /* PREFIX_0F3A40 */
42903f7f
L
3220 {
3221 { "(bad)", { XX } },
3222 { "(bad)", { XX } },
09a2c6cf 3223 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3224 { "(bad)", { XX } },
3225 },
3226
1ceb70f8 3227 /* PREFIX_0F3A41 */
42903f7f
L
3228 {
3229 { "(bad)", { XX } },
3230 { "(bad)", { XX } },
09a2c6cf 3231 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3232 { "(bad)", { XX } },
3233 },
3234
1ceb70f8 3235 /* PREFIX_0F3A42 */
42903f7f
L
3236 {
3237 { "(bad)", { XX } },
3238 { "(bad)", { XX } },
09a2c6cf 3239 { "mpsadbw", { XM, EXx, Ib } },
42903f7f
L
3240 { "(bad)", { XX } },
3241 },
381d071f 3242
c0f3af97
L
3243 /* PREFIX_0F3A44 */
3244 {
3245 { "(bad)", { XX } },
3246 { "(bad)", { XX } },
3247 { "pclmulqdq", { XM, EXx, PCLMUL } },
3248 { "(bad)", { XX } },
3249 },
3250
1ceb70f8 3251 /* PREFIX_0F3A60 */
381d071f
L
3252 {
3253 { "(bad)", { XX } },
3254 { "(bad)", { XX } },
4e7d34a6 3255 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3256 { "(bad)", { XX } },
3257 },
3258
1ceb70f8 3259 /* PREFIX_0F3A61 */
381d071f
L
3260 {
3261 { "(bad)", { XX } },
3262 { "(bad)", { XX } },
4e7d34a6 3263 { "pcmpestri", { XM, EXx, Ib } },
381d071f 3264 { "(bad)", { XX } },
381d071f
L
3265 },
3266
1ceb70f8 3267 /* PREFIX_0F3A62 */
381d071f
L
3268 {
3269 { "(bad)", { XX } },
3270 { "(bad)", { XX } },
4e7d34a6 3271 { "pcmpistrm", { XM, EXx, Ib } },
381d071f 3272 { "(bad)", { XX } },
381d071f
L
3273 },
3274
1ceb70f8 3275 /* PREFIX_0F3A63 */
381d071f
L
3276 {
3277 { "(bad)", { XX } },
3278 { "(bad)", { XX } },
4e7d34a6 3279 { "pcmpistri", { XM, EXx, Ib } },
381d071f
L
3280 { "(bad)", { XX } },
3281 },
09a2c6cf 3282
c0f3af97 3283 /* PREFIX_0F3ADF */
09a2c6cf 3284 {
c0f3af97
L
3285 { "(bad)", { XX } },
3286 { "(bad)", { XX } },
3287 { "aeskeygenassist", { XM, EXx, Ib } },
3288 { "(bad)", { XX } },
09a2c6cf
L
3289 },
3290
c0f3af97 3291 /* PREFIX_VEX_10 */
09a2c6cf 3292 {
c0f3af97
L
3293 { "vmovups", { XM, EXx } },
3294 { VEX_LEN_TABLE (VEX_LEN_10_P_1) },
3295 { "vmovupd", { XM, EXx } },
3296 { VEX_LEN_TABLE (VEX_LEN_10_P_3) },
09a2c6cf
L
3297 },
3298
c0f3af97 3299 /* PREFIX_VEX_11 */
09a2c6cf 3300 {
b6169b20 3301 { "vmovups", { EXxS, XM } },
c0f3af97 3302 { VEX_LEN_TABLE (VEX_LEN_11_P_1) },
b6169b20 3303 { "vmovupd", { EXxS, XM } },
c0f3af97 3304 { VEX_LEN_TABLE (VEX_LEN_11_P_3) },
09a2c6cf
L
3305 },
3306
c0f3af97 3307 /* PREFIX_VEX_12 */
09a2c6cf 3308 {
c0f3af97
L
3309 { MOD_TABLE (MOD_VEX_12_PREFIX_0) },
3310 { "vmovsldup", { XM, EXx } },
3311 { VEX_LEN_TABLE (VEX_LEN_12_P_2) },
3312 { "vmovddup", { XM, EXymmq } },
09a2c6cf
L
3313 },
3314
c0f3af97 3315 /* PREFIX_VEX_16 */
09a2c6cf 3316 {
c0f3af97
L
3317 { MOD_TABLE (MOD_VEX_16_PREFIX_0) },
3318 { "vmovshdup", { XM, EXx } },
3319 { VEX_LEN_TABLE (VEX_LEN_16_P_2) },
3320 { "(bad)", { XX } },
5f754f58 3321 },
7c52e0e8 3322
c0f3af97 3323 /* PREFIX_VEX_2A */
5f754f58 3324 {
c0f3af97
L
3325 { "(bad)", { XX } },
3326 { VEX_LEN_TABLE (VEX_LEN_2A_P_1) },
3327 { "(bad)", { XX } },
3328 { VEX_LEN_TABLE (VEX_LEN_2A_P_3) },
5f754f58 3329 },
7c52e0e8 3330
c0f3af97 3331 /* PREFIX_VEX_2C */
5f754f58 3332 {
c0f3af97
L
3333 { "(bad)", { XX } },
3334 { VEX_LEN_TABLE (VEX_LEN_2C_P_1) },
3335 { "(bad)", { XX } },
3336 { VEX_LEN_TABLE (VEX_LEN_2C_P_3) },
5f754f58 3337 },
7c52e0e8 3338
c0f3af97 3339 /* PREFIX_VEX_2D */
7c52e0e8 3340 {
c0f3af97
L
3341 { "(bad)", { XX } },
3342 { VEX_LEN_TABLE (VEX_LEN_2D_P_1) },
3343 { "(bad)", { XX } },
3344 { VEX_LEN_TABLE (VEX_LEN_2D_P_3) },
7c52e0e8
L
3345 },
3346
c0f3af97 3347 /* PREFIX_VEX_2E */
7c52e0e8 3348 {
c0f3af97
L
3349 { VEX_LEN_TABLE (VEX_LEN_2E_P_0) },
3350 { "(bad)", { XX } },
3351 { VEX_LEN_TABLE (VEX_LEN_2E_P_2) },
3352 { "(bad)", { XX } },
7c52e0e8
L
3353 },
3354
c0f3af97 3355 /* PREFIX_VEX_2F */
7c52e0e8 3356 {
c0f3af97
L
3357 { VEX_LEN_TABLE (VEX_LEN_2F_P_0) },
3358 { "(bad)", { XX } },
3359 { VEX_LEN_TABLE (VEX_LEN_2F_P_2) },
3360 { "(bad)", { XX } },
7c52e0e8
L
3361 },
3362
c0f3af97 3363 /* PREFIX_VEX_51 */
7c52e0e8 3364 {
c0f3af97
L
3365 { "vsqrtps", { XM, EXx } },
3366 { VEX_LEN_TABLE (VEX_LEN_51_P_1) },
3367 { "vsqrtpd", { XM, EXx } },
3368 { VEX_LEN_TABLE (VEX_LEN_51_P_3) },
7c52e0e8
L
3369 },
3370
c0f3af97 3371 /* PREFIX_VEX_52 */
7c52e0e8 3372 {
c0f3af97
L
3373 { "vrsqrtps", { XM, EXx } },
3374 { VEX_LEN_TABLE (VEX_LEN_52_P_1) },
3375 { "(bad)", { XX } },
3376 { "(bad)", { XX } },
7c52e0e8
L
3377 },
3378
c0f3af97 3379 /* PREFIX_VEX_53 */
7c52e0e8 3380 {
c0f3af97
L
3381 { "vrcpps", { XM, EXx } },
3382 { VEX_LEN_TABLE (VEX_LEN_53_P_1) },
3383 { "(bad)", { XX } },
3384 { "(bad)", { XX } },
7c52e0e8
L
3385 },
3386
c0f3af97 3387 /* PREFIX_VEX_58 */
7c52e0e8 3388 {
c0f3af97
L
3389 { "vaddps", { XM, Vex, EXx } },
3390 { VEX_LEN_TABLE (VEX_LEN_58_P_1) },
3391 { "vaddpd", { XM, Vex, EXx } },
3392 { VEX_LEN_TABLE (VEX_LEN_58_P_3) },
7c52e0e8
L
3393 },
3394
c0f3af97 3395 /* PREFIX_VEX_59 */
7c52e0e8 3396 {
c0f3af97
L
3397 { "vmulps", { XM, Vex, EXx } },
3398 { VEX_LEN_TABLE (VEX_LEN_59_P_1) },
3399 { "vmulpd", { XM, Vex, EXx } },
3400 { VEX_LEN_TABLE (VEX_LEN_59_P_3) },
7c52e0e8
L
3401 },
3402
c0f3af97 3403 /* PREFIX_VEX_5A */
7c52e0e8 3404 {
c0f3af97
L
3405 { "vcvtps2pd", { XM, EXxmmq } },
3406 { VEX_LEN_TABLE (VEX_LEN_5A_P_1) },
3407 { "vcvtpd2ps%XY", { XMM, EXx } },
3408 { VEX_LEN_TABLE (VEX_LEN_5A_P_3) },
7c52e0e8
L
3409 },
3410
c0f3af97 3411 /* PREFIX_VEX_5B */
7c52e0e8 3412 {
c0f3af97
L
3413 { "vcvtdq2ps", { XM, EXx } },
3414 { "vcvttps2dq", { XM, EXx } },
3415 { "vcvtps2dq", { XM, EXx } },
3416 { "(bad)", { XX } },
7c52e0e8
L
3417 },
3418
c0f3af97 3419 /* PREFIX_VEX_5C */
7c52e0e8 3420 {
c0f3af97
L
3421 { "vsubps", { XM, Vex, EXx } },
3422 { VEX_LEN_TABLE (VEX_LEN_5C_P_1) },
3423 { "vsubpd", { XM, Vex, EXx } },
3424 { VEX_LEN_TABLE (VEX_LEN_5C_P_3) },
7c52e0e8
L
3425 },
3426
c0f3af97 3427 /* PREFIX_VEX_5D */
7c52e0e8 3428 {
c0f3af97
L
3429 { "vminps", { XM, Vex, EXx } },
3430 { VEX_LEN_TABLE (VEX_LEN_5D_P_1) },
3431 { "vminpd", { XM, Vex, EXx } },
3432 { VEX_LEN_TABLE (VEX_LEN_5D_P_3) },
7c52e0e8
L
3433 },
3434
c0f3af97 3435 /* PREFIX_VEX_5E */
7c52e0e8 3436 {
c0f3af97
L
3437 { "vdivps", { XM, Vex, EXx } },
3438 { VEX_LEN_TABLE (VEX_LEN_5E_P_1) },
3439 { "vdivpd", { XM, Vex, EXx } },
3440 { VEX_LEN_TABLE (VEX_LEN_5E_P_3) },
7c52e0e8
L
3441 },
3442
c0f3af97 3443 /* PREFIX_VEX_5F */
7c52e0e8 3444 {
c0f3af97
L
3445 { "vmaxps", { XM, Vex, EXx } },
3446 { VEX_LEN_TABLE (VEX_LEN_5F_P_1) },
3447 { "vmaxpd", { XM, Vex, EXx } },
3448 { VEX_LEN_TABLE (VEX_LEN_5F_P_3) },
7c52e0e8
L
3449 },
3450
c0f3af97 3451 /* PREFIX_VEX_60 */
7c52e0e8 3452 {
c0f3af97
L
3453 { "(bad)", { XX } },
3454 { "(bad)", { XX } },
3455 { VEX_LEN_TABLE (VEX_LEN_60_P_2) },
3456 { "(bad)", { XX } },
7c52e0e8
L
3457 },
3458
c0f3af97 3459 /* PREFIX_VEX_61 */
7c52e0e8 3460 {
c0f3af97
L
3461 { "(bad)", { XX } },
3462 { "(bad)", { XX } },
3463 { VEX_LEN_TABLE (VEX_LEN_61_P_2) },
3464 { "(bad)", { XX } },
7c52e0e8
L
3465 },
3466
c0f3af97 3467 /* PREFIX_VEX_62 */
7c52e0e8 3468 {
c0f3af97
L
3469 { "(bad)", { XX } },
3470 { "(bad)", { XX } },
3471 { VEX_LEN_TABLE (VEX_LEN_62_P_2) },
3472 { "(bad)", { XX } },
7c52e0e8
L
3473 },
3474
c0f3af97 3475 /* PREFIX_VEX_63 */
7c52e0e8 3476 {
c0f3af97
L
3477 { "(bad)", { XX } },
3478 { "(bad)", { XX } },
3479 { VEX_LEN_TABLE (VEX_LEN_63_P_2) },
3480 { "(bad)", { XX } },
7c52e0e8
L
3481 },
3482
c0f3af97 3483 /* PREFIX_VEX_64 */
7c52e0e8 3484 {
c0f3af97
L
3485 { "(bad)", { XX } },
3486 { "(bad)", { XX } },
3487 { VEX_LEN_TABLE (VEX_LEN_64_P_2) },
3488 { "(bad)", { XX } },
7c52e0e8
L
3489 },
3490
c0f3af97 3491 /* PREFIX_VEX_65 */
7c52e0e8 3492 {
c0f3af97
L
3493 { "(bad)", { XX } },
3494 { "(bad)", { XX } },
3495 { VEX_LEN_TABLE (VEX_LEN_65_P_2) },
3496 { "(bad)", { XX } },
7c52e0e8
L
3497 },
3498
c0f3af97 3499 /* PREFIX_VEX_66 */
7c52e0e8 3500 {
c0f3af97
L
3501 { "(bad)", { XX } },
3502 { "(bad)", { XX } },
3503 { VEX_LEN_TABLE (VEX_LEN_66_P_2) },
3504 { "(bad)", { XX } },
7c52e0e8 3505 },
6439fc28 3506
c0f3af97 3507 /* PREFIX_VEX_67 */
331d2d0d 3508 {
c0f3af97
L
3509 { "(bad)", { XX } },
3510 { "(bad)", { XX } },
3511 { VEX_LEN_TABLE (VEX_LEN_67_P_2) },
3512 { "(bad)", { XX } },
3513 },
3514
3515 /* PREFIX_VEX_68 */
3516 {
3517 { "(bad)", { XX } },
3518 { "(bad)", { XX } },
3519 { VEX_LEN_TABLE (VEX_LEN_68_P_2) },
3520 { "(bad)", { XX } },
3521 },
3522
3523 /* PREFIX_VEX_69 */
3524 {
3525 { "(bad)", { XX } },
3526 { "(bad)", { XX } },
3527 { VEX_LEN_TABLE (VEX_LEN_69_P_2) },
3528 { "(bad)", { XX } },
3529 },
3530
3531 /* PREFIX_VEX_6A */
3532 {
3533 { "(bad)", { XX } },
3534 { "(bad)", { XX } },
3535 { VEX_LEN_TABLE (VEX_LEN_6A_P_2) },
3536 { "(bad)", { XX } },
3537 },
3538
3539 /* PREFIX_VEX_6B */
3540 {
3541 { "(bad)", { XX } },
3542 { "(bad)", { XX } },
3543 { VEX_LEN_TABLE (VEX_LEN_6B_P_2) },
3544 { "(bad)", { XX } },
3545 },
3546
3547 /* PREFIX_VEX_6C */
3548 {
3549 { "(bad)", { XX } },
3550 { "(bad)", { XX } },
3551 { VEX_LEN_TABLE (VEX_LEN_6C_P_2) },
3552 { "(bad)", { XX } },
3553 },
3554
3555 /* PREFIX_VEX_6D */
3556 {
3557 { "(bad)", { XX } },
3558 { "(bad)", { XX } },
3559 { VEX_LEN_TABLE (VEX_LEN_6D_P_2) },
3560 { "(bad)", { XX } },
3561 },
3562
3563 /* PREFIX_VEX_6E */
3564 {
3565 { "(bad)", { XX } },
3566 { "(bad)", { XX } },
3567 { VEX_LEN_TABLE (VEX_LEN_6E_P_2) },
3568 { "(bad)", { XX } },
3569 },
3570
3571 /* PREFIX_VEX_6F */
3572 {
3573 { "(bad)", { XX } },
3574 { "vmovdqu", { XM, EXx } },
3575 { "vmovdqa", { XM, EXx } },
3576 { "(bad)", { XX } },
3577 },
3578
3579 /* PREFIX_VEX_70 */
3580 {
3581 { "(bad)", { XX } },
3582 { VEX_LEN_TABLE (VEX_LEN_70_P_1) },
3583 { VEX_LEN_TABLE (VEX_LEN_70_P_2) },
3584 { VEX_LEN_TABLE (VEX_LEN_70_P_3) },
3585 },
3586
3587 /* PREFIX_VEX_71_REG_2 */
3588 {
3589 { "(bad)", { XX } },
3590 { "(bad)", { XX } },
3591 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) },
3592 { "(bad)", { XX } },
3593 },
3594
3595 /* PREFIX_VEX_71_REG_4 */
3596 {
3597 { "(bad)", { XX } },
3598 { "(bad)", { XX } },
3599 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) },
3600 { "(bad)", { XX } },
3601 },
3602
3603 /* PREFIX_VEX_71_REG_6 */
3604 {
3605 { "(bad)", { XX } },
3606 { "(bad)", { XX } },
3607 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) },
3608 { "(bad)", { XX } },
3609 },
3610
3611 /* PREFIX_VEX_72_REG_2 */
3612 {
3613 { "(bad)", { XX } },
3614 { "(bad)", { XX } },
3615 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) },
3616 { "(bad)", { XX } },
3617 },
3618
3619 /* PREFIX_VEX_72_REG_4 */
3620 {
3621 { "(bad)", { XX } },
3622 { "(bad)", { XX } },
3623 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) },
3624 { "(bad)", { XX } },
3625 },
3626
3627 /* PREFIX_VEX_72_REG_6 */
3628 {
3629 { "(bad)", { XX } },
3630 { "(bad)", { XX } },
3631 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) },
3632 { "(bad)", { XX } },
3633 },
3634
3635 /* PREFIX_VEX_73_REG_2 */
3636 {
3637 { "(bad)", { XX } },
3638 { "(bad)", { XX } },
3639 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) },
3640 { "(bad)", { XX } },
3641 },
3642
3643 /* PREFIX_VEX_73_REG_3 */
3644 {
3645 { "(bad)", { XX } },
3646 { "(bad)", { XX } },
3647 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) },
3648 { "(bad)", { XX } },
3649 },
3650
3651 /* PREFIX_VEX_73_REG_6 */
3652 {
3653 { "(bad)", { XX } },
3654 { "(bad)", { XX } },
3655 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) },
3656 { "(bad)", { XX } },
3657 },
3658
3659 /* PREFIX_VEX_73_REG_7 */
3660 {
3661 { "(bad)", { XX } },
3662 { "(bad)", { XX } },
3663 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) },
3664 { "(bad)", { XX } },
3665 },
3666
3667 /* PREFIX_VEX_74 */
3668 {
3669 { "(bad)", { XX } },
3670 { "(bad)", { XX } },
3671 { VEX_LEN_TABLE (VEX_LEN_74_P_2) },
3672 { "(bad)", { XX } },
3673 },
3674
3675 /* PREFIX_VEX_75 */
3676 {
3677 { "(bad)", { XX } },
3678 { "(bad)", { XX } },
3679 { VEX_LEN_TABLE (VEX_LEN_75_P_2) },
3680 { "(bad)", { XX } },
3681 },
3682
3683 /* PREFIX_VEX_76 */
3684 {
3685 { "(bad)", { XX } },
3686 { "(bad)", { XX } },
3687 { VEX_LEN_TABLE (VEX_LEN_76_P_2) },
3688 { "(bad)", { XX } },
3689 },
3690
3691 /* PREFIX_VEX_77 */
3692 {
3693 { "", { VZERO } },
3694 { "(bad)", { XX } },
3695 { "(bad)", { XX } },
3696 { "(bad)", { XX } },
3697 },
3698
3699 /* PREFIX_VEX_7C */
3700 {
3701 { "(bad)", { XX } },
3702 { "(bad)", { XX } },
3703 { "vhaddpd", { XM, Vex, EXx } },
3704 { "vhaddps", { XM, Vex, EXx } },
3705 },
3706
3707 /* PREFIX_VEX_7D */
3708 {
3709 { "(bad)", { XX } },
3710 { "(bad)", { XX } },
3711 { "vhsubpd", { XM, Vex, EXx } },
3712 { "vhsubps", { XM, Vex, EXx } },
3713 },
3714
3715 /* PREFIX_VEX_7E */
3716 {
3717 { "(bad)", { XX } },
3718 { VEX_LEN_TABLE (VEX_LEN_7E_P_1) },
3719 { VEX_LEN_TABLE (VEX_LEN_7E_P_2) },
3720 { "(bad)", { XX } },
3721 },
3722
3723 /* PREFIX_VEX_7F */
3724 {
3725 { "(bad)", { XX } },
b6169b20
L
3726 { "vmovdqu", { EXxS, XM } },
3727 { "vmovdqa", { EXxS, XM } },
c0f3af97
L
3728 { "(bad)", { XX } },
3729 },
3730
3731 /* PREFIX_VEX_C2 */
3732 {
3733 { "vcmpps", { XM, Vex, EXx, VCMP } },
3734 { VEX_LEN_TABLE (VEX_LEN_C2_P_1) },
3735 { "vcmppd", { XM, Vex, EXx, VCMP } },
3736 { VEX_LEN_TABLE (VEX_LEN_C2_P_3) },
3737 },
3738
3739 /* PREFIX_VEX_C4 */
3740 {
3741 { "(bad)", { XX } },
3742 { "(bad)", { XX } },
3743 { VEX_LEN_TABLE (VEX_LEN_C4_P_2) },
3744 { "(bad)", { XX } },
3745 },
3746
3747 /* PREFIX_VEX_C5 */
3748 {
3749 { "(bad)", { XX } },
3750 { "(bad)", { XX } },
3751 { VEX_LEN_TABLE (VEX_LEN_C5_P_2) },
3752 { "(bad)", { XX } },
3753 },
3754
3755 /* PREFIX_VEX_D0 */
3756 {
3757 { "(bad)", { XX } },
3758 { "(bad)", { XX } },
3759 { "vaddsubpd", { XM, Vex, EXx } },
3760 { "vaddsubps", { XM, Vex, EXx } },
3761 },
3762
3763 /* PREFIX_VEX_D1 */
3764 {
3765 { "(bad)", { XX } },
3766 { "(bad)", { XX } },
3767 { VEX_LEN_TABLE (VEX_LEN_D1_P_2) },
3768 { "(bad)", { XX } },
3769 },
3770
3771 /* PREFIX_VEX_D2 */
3772 {
3773 { "(bad)", { XX } },
3774 { "(bad)", { XX } },
3775 { VEX_LEN_TABLE (VEX_LEN_D2_P_2) },
3776 { "(bad)", { XX } },
3777 },
3778
3779 /* PREFIX_VEX_D3 */
3780 {
3781 { "(bad)", { XX } },
3782 { "(bad)", { XX } },
3783 { VEX_LEN_TABLE (VEX_LEN_D3_P_2) },
3784 { "(bad)", { XX } },
3785 },
3786
3787 /* PREFIX_VEX_D4 */
3788 {
3789 { "(bad)", { XX } },
3790 { "(bad)", { XX } },
3791 { VEX_LEN_TABLE (VEX_LEN_D4_P_2) },
3792 { "(bad)", { XX } },
3793 },
3794
3795 /* PREFIX_VEX_D5 */
3796 {
3797 { "(bad)", { XX } },
3798 { "(bad)", { XX } },
3799 { VEX_LEN_TABLE (VEX_LEN_D5_P_2) },
3800 { "(bad)", { XX } },
3801 },
3802
3803 /* PREFIX_VEX_D6 */
3804 {
3805 { "(bad)", { XX } },
3806 { "(bad)", { XX } },
3807 { VEX_LEN_TABLE (VEX_LEN_D6_P_2) },
3808 { "(bad)", { XX } },
3809 },
3810
3811 /* PREFIX_VEX_D7 */
3812 {
3813 { "(bad)", { XX } },
3814 { "(bad)", { XX } },
3815 { MOD_TABLE (MOD_VEX_D7_PREFIX_2) },
3816 { "(bad)", { XX } },
3817 },
3818
3819 /* PREFIX_VEX_D8 */
3820 {
3821 { "(bad)", { XX } },
3822 { "(bad)", { XX } },
3823 { VEX_LEN_TABLE (VEX_LEN_D8_P_2) },
3824 { "(bad)", { XX } },
3825 },
3826
3827 /* PREFIX_VEX_D9 */
3828 {
3829 { "(bad)", { XX } },
3830 { "(bad)", { XX } },
3831 { VEX_LEN_TABLE (VEX_LEN_D9_P_2) },
3832 { "(bad)", { XX } },
3833 },
3834
3835 /* PREFIX_VEX_DA */
3836 {
3837 { "(bad)", { XX } },
3838 { "(bad)", { XX } },
3839 { VEX_LEN_TABLE (VEX_LEN_DA_P_2) },
3840 { "(bad)", { XX } },
3841 },
3842
3843 /* PREFIX_VEX_DB */
3844 {
3845 { "(bad)", { XX } },
3846 { "(bad)", { XX } },
3847 { VEX_LEN_TABLE (VEX_LEN_DB_P_2) },
3848 { "(bad)", { XX } },
3849 },
3850
3851 /* PREFIX_VEX_DC */
3852 {
3853 { "(bad)", { XX } },
3854 { "(bad)", { XX } },
3855 { VEX_LEN_TABLE (VEX_LEN_DC_P_2) },
3856 { "(bad)", { XX } },
3857 },
3858
3859 /* PREFIX_VEX_DD */
3860 {
3861 { "(bad)", { XX } },
3862 { "(bad)", { XX } },
3863 { VEX_LEN_TABLE (VEX_LEN_DD_P_2) },
3864 { "(bad)", { XX } },
3865 },
3866
3867 /* PREFIX_VEX_DE */
3868 {
3869 { "(bad)", { XX } },
3870 { "(bad)", { XX } },
3871 { VEX_LEN_TABLE (VEX_LEN_DE_P_2) },
3872 { "(bad)", { XX } },
3873 },
3874
3875 /* PREFIX_VEX_DF */
3876 {
3877 { "(bad)", { XX } },
3878 { "(bad)", { XX } },
3879 { VEX_LEN_TABLE (VEX_LEN_DF_P_2) },
3880 { "(bad)", { XX } },
3881 },
3882
3883 /* PREFIX_VEX_E0 */
3884 {
3885 { "(bad)", { XX } },
3886 { "(bad)", { XX } },
3887 { VEX_LEN_TABLE (VEX_LEN_E0_P_2) },
3888 { "(bad)", { XX } },
3889 },
3890
3891 /* PREFIX_VEX_E1 */
3892 {
3893 { "(bad)", { XX } },
3894 { "(bad)", { XX } },
3895 { VEX_LEN_TABLE (VEX_LEN_E1_P_2) },
3896 { "(bad)", { XX } },
3897 },
3898
3899 /* PREFIX_VEX_E2 */
3900 {
3901 { "(bad)", { XX } },
3902 { "(bad)", { XX } },
3903 { VEX_LEN_TABLE (VEX_LEN_E2_P_2) },
3904 { "(bad)", { XX } },
3905 },
3906
3907 /* PREFIX_VEX_E3 */
3908 {
3909 { "(bad)", { XX } },
3910 { "(bad)", { XX } },
3911 { VEX_LEN_TABLE (VEX_LEN_E3_P_2) },
3912 { "(bad)", { XX } },
3913 },
3914
3915 /* PREFIX_VEX_E4 */
3916 {
3917 { "(bad)", { XX } },
3918 { "(bad)", { XX } },
3919 { VEX_LEN_TABLE (VEX_LEN_E4_P_2) },
3920 { "(bad)", { XX } },
3921 },
3922
3923 /* PREFIX_VEX_E5 */
3924 {
3925 { "(bad)", { XX } },
3926 { "(bad)", { XX } },
3927 { VEX_LEN_TABLE (VEX_LEN_E5_P_2) },
3928 { "(bad)", { XX } },
3929 },
3930
3931 /* PREFIX_VEX_E6 */
3932 {
3933 { "(bad)", { XX } },
3934 { "vcvtdq2pd", { XM, EXxmmq } },
3935 { "vcvttpd2dq%XY", { XMM, EXx } },
3936 { "vcvtpd2dq%XY", { XMM, EXx } },
3937 },
3938
3939 /* PREFIX_VEX_E7 */
3940 {
3941 { "(bad)", { XX } },
3942 { "(bad)", { XX } },
3943 { MOD_TABLE (MOD_VEX_E7_PREFIX_2) },
3944 { "(bad)", { XX } },
3945 },
3946
3947 /* PREFIX_VEX_E8 */
3948 {
3949 { "(bad)", { XX } },
3950 { "(bad)", { XX } },
3951 { VEX_LEN_TABLE (VEX_LEN_E8_P_2) },
3952 { "(bad)", { XX } },
3953 },
3954
3955 /* PREFIX_VEX_E9 */
3956 {
3957 { "(bad)", { XX } },
3958 { "(bad)", { XX } },
3959 { VEX_LEN_TABLE (VEX_LEN_E9_P_2) },
3960 { "(bad)", { XX } },
3961 },
3962
3963 /* PREFIX_VEX_EA */
3964 {
3965 { "(bad)", { XX } },
3966 { "(bad)", { XX } },
3967 { VEX_LEN_TABLE (VEX_LEN_EA_P_2) },
3968 { "(bad)", { XX } },
3969 },
3970
3971 /* PREFIX_VEX_EB */
3972 {
3973 { "(bad)", { XX } },
3974 { "(bad)", { XX } },
3975 { VEX_LEN_TABLE (VEX_LEN_EB_P_2) },
3976 { "(bad)", { XX } },
3977 },
3978
3979 /* PREFIX_VEX_EC */
3980 {
3981 { "(bad)", { XX } },
3982 { "(bad)", { XX } },
3983 { VEX_LEN_TABLE (VEX_LEN_EC_P_2) },
3984 { "(bad)", { XX } },
3985 },
3986
3987 /* PREFIX_VEX_ED */
3988 {
3989 { "(bad)", { XX } },
3990 { "(bad)", { XX } },
3991 { VEX_LEN_TABLE (VEX_LEN_ED_P_2) },
3992 { "(bad)", { XX } },
3993 },
3994
3995 /* PREFIX_VEX_EE */
3996 {
3997 { "(bad)", { XX } },
3998 { "(bad)", { XX } },
3999 { VEX_LEN_TABLE (VEX_LEN_EE_P_2) },
4000 { "(bad)", { XX } },
4001 },
4002
4003 /* PREFIX_VEX_EF */
4004 {
4005 { "(bad)", { XX } },
4006 { "(bad)", { XX } },
4007 { VEX_LEN_TABLE (VEX_LEN_EF_P_2) },
4008 { "(bad)", { XX } },
4009 },
4010
4011 /* PREFIX_VEX_F0 */
4012 {
4013 { "(bad)", { XX } },
4014 { "(bad)", { XX } },
4015 { "(bad)", { XX } },
4016 { MOD_TABLE (MOD_VEX_F0_PREFIX_3) },
4017 },
4018
4019 /* PREFIX_VEX_F1 */
4020 {
4021 { "(bad)", { XX } },
4022 { "(bad)", { XX } },
4023 { VEX_LEN_TABLE (VEX_LEN_F1_P_2) },
4024 { "(bad)", { XX } },
4025 },
4026
4027 /* PREFIX_VEX_F2 */
4028 {
4029 { "(bad)", { XX } },
4030 { "(bad)", { XX } },
4031 { VEX_LEN_TABLE (VEX_LEN_F2_P_2) },
4032 { "(bad)", { XX } },
4033 },
4034
4035 /* PREFIX_VEX_F3 */
4036 {
4037 { "(bad)", { XX } },
4038 { "(bad)", { XX } },
4039 { VEX_LEN_TABLE (VEX_LEN_F3_P_2) },
4040 { "(bad)", { XX } },
4041 },
4042
4043 /* PREFIX_VEX_F4 */
4044 {
4045 { "(bad)", { XX } },
4046 { "(bad)", { XX } },
4047 { VEX_LEN_TABLE (VEX_LEN_F4_P_2) },
4048 { "(bad)", { XX } },
4049 },
4050
4051 /* PREFIX_VEX_F5 */
4052 {
4053 { "(bad)", { XX } },
4054 { "(bad)", { XX } },
4055 { VEX_LEN_TABLE (VEX_LEN_F5_P_2) },
4056 { "(bad)", { XX } },
4057 },
4058
4059 /* PREFIX_VEX_F6 */
4060 {
4061 { "(bad)", { XX } },
4062 { "(bad)", { XX } },
4063 { VEX_LEN_TABLE (VEX_LEN_F6_P_2) },
4064 { "(bad)", { XX } },
4065 },
4066
4067 /* PREFIX_VEX_F7 */
4068 {
4069 { "(bad)", { XX } },
4070 { "(bad)", { XX } },
4071 { VEX_LEN_TABLE (VEX_LEN_F7_P_2) },
4072 { "(bad)", { XX } },
4073 },
4074
4075 /* PREFIX_VEX_F8 */
4076 {
4077 { "(bad)", { XX } },
4078 { "(bad)", { XX } },
4079 { VEX_LEN_TABLE (VEX_LEN_F8_P_2) },
4080 { "(bad)", { XX } },
4081 },
4082
4083 /* PREFIX_VEX_F9 */
4084 {
4085 { "(bad)", { XX } },
4086 { "(bad)", { XX } },
4087 { VEX_LEN_TABLE (VEX_LEN_F9_P_2) },
4088 { "(bad)", { XX } },
4089 },
4090
4091 /* PREFIX_VEX_FA */
4092 {
4093 { "(bad)", { XX } },
4094 { "(bad)", { XX } },
4095 { VEX_LEN_TABLE (VEX_LEN_FA_P_2) },
4096 { "(bad)", { XX } },
4097 },
4098
4099 /* PREFIX_VEX_FB */
4100 {
4101 { "(bad)", { XX } },
4102 { "(bad)", { XX } },
4103 { VEX_LEN_TABLE (VEX_LEN_FB_P_2) },
4104 { "(bad)", { XX } },
4105 },
4106
4107 /* PREFIX_VEX_FC */
4108 {
4109 { "(bad)", { XX } },
4110 { "(bad)", { XX } },
4111 { VEX_LEN_TABLE (VEX_LEN_FC_P_2) },
4112 { "(bad)", { XX } },
4113 },
4114
4115 /* PREFIX_VEX_FD */
4116 {
4117 { "(bad)", { XX } },
4118 { "(bad)", { XX } },
4119 { VEX_LEN_TABLE (VEX_LEN_FD_P_2) },
4120 { "(bad)", { XX } },
4121 },
4122
4123 /* PREFIX_VEX_FE */
4124 {
4125 { "(bad)", { XX } },
4126 { "(bad)", { XX } },
4127 { VEX_LEN_TABLE (VEX_LEN_FE_P_2) },
4128 { "(bad)", { XX } },
4129 },
4130
4131 /* PREFIX_VEX_3800 */
4132 {
4133 { "(bad)", { XX } },
4134 { "(bad)", { XX } },
4135 { VEX_LEN_TABLE (VEX_LEN_3800_P_2) },
4136 { "(bad)", { XX } },
4137 },
4138
4139 /* PREFIX_VEX_3801 */
4140 {
4141 { "(bad)", { XX } },
4142 { "(bad)", { XX } },
4143 { VEX_LEN_TABLE (VEX_LEN_3801_P_2) },
4144 { "(bad)", { XX } },
4145 },
4146
4147 /* PREFIX_VEX_3802 */
4148 {
4149 { "(bad)", { XX } },
4150 { "(bad)", { XX } },
4151 { VEX_LEN_TABLE (VEX_LEN_3802_P_2) },
4152 { "(bad)", { XX } },
4153 },
4154
4155 /* PREFIX_VEX_3803 */
4156 {
4157 { "(bad)", { XX } },
4158 { "(bad)", { XX } },
4159 { VEX_LEN_TABLE (VEX_LEN_3803_P_2) },
4160 { "(bad)", { XX } },
4161 },
4162
4163 /* PREFIX_VEX_3804 */
4164 {
4165 { "(bad)", { XX } },
4166 { "(bad)", { XX } },
4167 { VEX_LEN_TABLE (VEX_LEN_3804_P_2) },
4168 { "(bad)", { XX } },
4169 },
4170
4171 /* PREFIX_VEX_3805 */
4172 {
4173 { "(bad)", { XX } },
4174 { "(bad)", { XX } },
4175 { VEX_LEN_TABLE (VEX_LEN_3805_P_2) },
4176 { "(bad)", { XX } },
4177 },
4178
4179 /* PREFIX_VEX_3806 */
4180 {
4181 { "(bad)", { XX } },
4182 { "(bad)", { XX } },
4183 { VEX_LEN_TABLE (VEX_LEN_3806_P_2) },
4184 { "(bad)", { XX } },
4185 },
4186
4187 /* PREFIX_VEX_3807 */
4188 {
4189 { "(bad)", { XX } },
4190 { "(bad)", { XX } },
4191 { VEX_LEN_TABLE (VEX_LEN_3807_P_2) },
4192 { "(bad)", { XX } },
4193 },
4194
4195 /* PREFIX_VEX_3808 */
4196 {
4197 { "(bad)", { XX } },
4198 { "(bad)", { XX } },
4199 { VEX_LEN_TABLE (VEX_LEN_3808_P_2) },
4200 { "(bad)", { XX } },
4201 },
4202
4203 /* PREFIX_VEX_3809 */
4204 {
4205 { "(bad)", { XX } },
4206 { "(bad)", { XX } },
4207 { VEX_LEN_TABLE (VEX_LEN_3809_P_2) },
4208 { "(bad)", { XX } },
4209 },
4210
4211 /* PREFIX_VEX_380A */
4212 {
4213 { "(bad)", { XX } },
4214 { "(bad)", { XX } },
4215 { VEX_LEN_TABLE (VEX_LEN_380A_P_2) },
4216 { "(bad)", { XX } },
4217 },
4218
4219 /* PREFIX_VEX_380B */
4220 {
4221 { "(bad)", { XX } },
4222 { "(bad)", { XX } },
4223 { VEX_LEN_TABLE (VEX_LEN_380B_P_2) },
4224 { "(bad)", { XX } },
4225 },
4226
4227 /* PREFIX_VEX_380C */
4228 {
4229 { "(bad)", { XX } },
4230 { "(bad)", { XX } },
4231 { "vpermilps", { XM, Vex, EXx } },
4232 { "(bad)", { XX } },
4233 },
4234
4235 /* PREFIX_VEX_380D */
4236 {
4237 { "(bad)", { XX } },
4238 { "(bad)", { XX } },
4239 { "vpermilpd", { XM, Vex, EXx } },
4240 { "(bad)", { XX } },
4241 },
4242
4243 /* PREFIX_VEX_380E */
4244 {
4245 { "(bad)", { XX } },
4246 { "(bad)", { XX } },
4247 { "vtestps", { XM, EXx } },
4248 { "(bad)", { XX } },
4249 },
4250
4251 /* PREFIX_VEX_380F */
4252 {
4253 { "(bad)", { XX } },
4254 { "(bad)", { XX } },
4255 { "vtestpd", { XM, EXx } },
4256 { "(bad)", { XX } },
4257 },
4258
4259 /* PREFIX_VEX_3817 */
4260 {
4261 { "(bad)", { XX } },
4262 { "(bad)", { XX } },
4263 { "vptest", { XM, EXx } },
4264 { "(bad)", { XX } },
4265 },
4266
4267 /* PREFIX_VEX_3818 */
4268 {
4269 { "(bad)", { XX } },
4270 { "(bad)", { XX } },
4271 { MOD_TABLE (MOD_VEX_3818_PREFIX_2) },
4272 { "(bad)", { XX } },
4273 },
4274
4275 /* PREFIX_VEX_3819 */
4276 {
4277 { "(bad)", { XX } },
4278 { "(bad)", { XX } },
4279 { MOD_TABLE (MOD_VEX_3819_PREFIX_2) },
4280 { "(bad)", { XX } },
4281 },
4282
4283 /* PREFIX_VEX_381A */
4284 {
4285 { "(bad)", { XX } },
4286 { "(bad)", { XX } },
4287 { MOD_TABLE (MOD_VEX_381A_PREFIX_2) },
4288 { "(bad)", { XX } },
4289 },
4290
4291 /* PREFIX_VEX_381C */
4292 {
4293 { "(bad)", { XX } },
4294 { "(bad)", { XX } },
4295 { VEX_LEN_TABLE (VEX_LEN_381C_P_2) },
4296 { "(bad)", { XX } },
4297 },
4298
4299 /* PREFIX_VEX_381D */
4300 {
4301 { "(bad)", { XX } },
4302 { "(bad)", { XX } },
4303 { VEX_LEN_TABLE (VEX_LEN_381D_P_2) },
4304 { "(bad)", { XX } },
4305 },
4306
4307 /* PREFIX_VEX_381E */
4308 {
4309 { "(bad)", { XX } },
4310 { "(bad)", { XX } },
4311 { VEX_LEN_TABLE (VEX_LEN_381E_P_2) },
4312 { "(bad)", { XX } },
4313 },
4314
4315 /* PREFIX_VEX_3820 */
4316 {
4317 { "(bad)", { XX } },
4318 { "(bad)", { XX } },
4319 { VEX_LEN_TABLE (VEX_LEN_3820_P_2) },
4320 { "(bad)", { XX } },
4321 },
4322
4323 /* PREFIX_VEX_3821 */
4324 {
4325 { "(bad)", { XX } },
4326 { "(bad)", { XX } },
4327 { VEX_LEN_TABLE (VEX_LEN_3821_P_2) },
4328 { "(bad)", { XX } },
4329 },
4330
4331 /* PREFIX_VEX_3822 */
4332 {
4333 { "(bad)", { XX } },
4334 { "(bad)", { XX } },
4335 { VEX_LEN_TABLE (VEX_LEN_3822_P_2) },
4336 { "(bad)", { XX } },
4337 },
4338
4339 /* PREFIX_VEX_3823 */
4340 {
4341 { "(bad)", { XX } },
4342 { "(bad)", { XX } },
4343 { VEX_LEN_TABLE (VEX_LEN_3823_P_2) },
4344 { "(bad)", { XX } },
4345 },
4346
4347 /* PREFIX_VEX_3824 */
4348 {
4349 { "(bad)", { XX } },
4350 { "(bad)", { XX } },
4351 { VEX_LEN_TABLE (VEX_LEN_3824_P_2) },
4352 { "(bad)", { XX } },
4353 },
4354
4355 /* PREFIX_VEX_3825 */
4356 {
4357 { "(bad)", { XX } },
4358 { "(bad)", { XX } },
4359 { VEX_LEN_TABLE (VEX_LEN_3825_P_2) },
4360 { "(bad)", { XX } },
4361 },
4362
4363 /* PREFIX_VEX_3828 */
4364 {
4365 { "(bad)", { XX } },
4366 { "(bad)", { XX } },
4367 { VEX_LEN_TABLE (VEX_LEN_3828_P_2) },
4368 { "(bad)", { XX } },
4369 },
4370
4371 /* PREFIX_VEX_3829 */
4372 {
4373 { "(bad)", { XX } },
4374 { "(bad)", { XX } },
4375 { VEX_LEN_TABLE (VEX_LEN_3829_P_2) },
4376 { "(bad)", { XX } },
4377 },
4378
4379 /* PREFIX_VEX_382A */
4380 {
4381 { "(bad)", { XX } },
4382 { "(bad)", { XX } },
4383 { MOD_TABLE (MOD_VEX_382A_PREFIX_2) },
4384 { "(bad)", { XX } },
4385 },
4386
4387 /* PREFIX_VEX_382B */
4388 {
4389 { "(bad)", { XX } },
4390 { "(bad)", { XX } },
4391 { VEX_LEN_TABLE (VEX_LEN_382B_P_2) },
4392 { "(bad)", { XX } },
4393 },
4394
4395 /* PREFIX_VEX_382C */
4396 {
4397 { "(bad)", { XX } },
4398 { "(bad)", { XX } },
4399 { MOD_TABLE (MOD_VEX_382C_PREFIX_2) },
4400 { "(bad)", { XX } },
4401 },
4402
4403 /* PREFIX_VEX_382D */
4404 {
4405 { "(bad)", { XX } },
4406 { "(bad)", { XX } },
4407 { MOD_TABLE (MOD_VEX_382D_PREFIX_2) },
4408 { "(bad)", { XX } },
4409 },
4410
4411 /* PREFIX_VEX_382E */
4412 {
4413 { "(bad)", { XX } },
4414 { "(bad)", { XX } },
4415 { MOD_TABLE (MOD_VEX_382E_PREFIX_2) },
4416 { "(bad)", { XX } },
4417 },
4418
4419 /* PREFIX_VEX_382F */
4420 {
4421 { "(bad)", { XX } },
4422 { "(bad)", { XX } },
4423 { MOD_TABLE (MOD_VEX_382F_PREFIX_2) },
4424 { "(bad)", { XX } },
4425 },
4426
4427 /* PREFIX_VEX_3830 */
4428 {
4429 { "(bad)", { XX } },
4430 { "(bad)", { XX } },
4431 { VEX_LEN_TABLE (VEX_LEN_3830_P_2) },
4432 { "(bad)", { XX } },
4433 },
4434
4435 /* PREFIX_VEX_3831 */
4436 {
4437 { "(bad)", { XX } },
4438 { "(bad)", { XX } },
4439 { VEX_LEN_TABLE (VEX_LEN_3831_P_2) },
4440 { "(bad)", { XX } },
4441 },
4442
4443 /* PREFIX_VEX_3832 */
4444 {
4445 { "(bad)", { XX } },
4446 { "(bad)", { XX } },
4447 { VEX_LEN_TABLE (VEX_LEN_3832_P_2) },
4448 { "(bad)", { XX } },
4449 },
4450
4451 /* PREFIX_VEX_3833 */
4452 {
4453 { "(bad)", { XX } },
4454 { "(bad)", { XX } },
4455 { VEX_LEN_TABLE (VEX_LEN_3833_P_2) },
4456 { "(bad)", { XX } },
4457 },
4458
4459 /* PREFIX_VEX_3834 */
4460 {
4461 { "(bad)", { XX } },
4462 { "(bad)", { XX } },
4463 { VEX_LEN_TABLE (VEX_LEN_3834_P_2) },
4464 { "(bad)", { XX } },
4465 },
4466
4467 /* PREFIX_VEX_3835 */
4468 {
4469 { "(bad)", { XX } },
4470 { "(bad)", { XX } },
4471 { VEX_LEN_TABLE (VEX_LEN_3835_P_2) },
4472 { "(bad)", { XX } },
4473 },
4474
4475 /* PREFIX_VEX_3837 */
4476 {
4477 { "(bad)", { XX } },
4478 { "(bad)", { XX } },
4479 { VEX_LEN_TABLE (VEX_LEN_3837_P_2) },
4480 { "(bad)", { XX } },
4481 },
4482
4483 /* PREFIX_VEX_3838 */
4484 {
4485 { "(bad)", { XX } },
4486 { "(bad)", { XX } },
4487 { VEX_LEN_TABLE (VEX_LEN_3838_P_2) },
4488 { "(bad)", { XX } },
4489 },
4490
4491 /* PREFIX_VEX_3839 */
4492 {
4493 { "(bad)", { XX } },
4494 { "(bad)", { XX } },
4495 { VEX_LEN_TABLE (VEX_LEN_3839_P_2) },
4496 { "(bad)", { XX } },
4497 },
4498
4499 /* PREFIX_VEX_383A */
4500 {
4501 { "(bad)", { XX } },
4502 { "(bad)", { XX } },
4503 { VEX_LEN_TABLE (VEX_LEN_383A_P_2) },
4504 { "(bad)", { XX } },
4505 },
4506
4507 /* PREFIX_VEX_383B */
4508 {
4509 { "(bad)", { XX } },
4510 { "(bad)", { XX } },
4511 { VEX_LEN_TABLE (VEX_LEN_383B_P_2) },
4512 { "(bad)", { XX } },
4513 },
4514
4515 /* PREFIX_VEX_383C */
4516 {
4517 { "(bad)", { XX } },
4518 { "(bad)", { XX } },
4519 { VEX_LEN_TABLE (VEX_LEN_383C_P_2) },
4520 { "(bad)", { XX } },
4521 },
4522
4523 /* PREFIX_VEX_383D */
4524 {
4525 { "(bad)", { XX } },
4526 { "(bad)", { XX } },
4527 { VEX_LEN_TABLE (VEX_LEN_383D_P_2) },
4528 { "(bad)", { XX } },
4529 },
4530
4531 /* PREFIX_VEX_383E */
4532 {
4533 { "(bad)", { XX } },
4534 { "(bad)", { XX } },
4535 { VEX_LEN_TABLE (VEX_LEN_383E_P_2) },
4536 { "(bad)", { XX } },
4537 },
4538
4539 /* PREFIX_VEX_383F */
4540 {
4541 { "(bad)", { XX } },
4542 { "(bad)", { XX } },
4543 { VEX_LEN_TABLE (VEX_LEN_383F_P_2) },
4544 { "(bad)", { XX } },
4545 },
4546
4547 /* PREFIX_VEX_3840 */
4548 {
4549 { "(bad)", { XX } },
4550 { "(bad)", { XX } },
4551 { VEX_LEN_TABLE (VEX_LEN_3840_P_2) },
4552 { "(bad)", { XX } },
4553 },
4554
4555 /* PREFIX_VEX_3841 */
4556 {
4557 { "(bad)", { XX } },
4558 { "(bad)", { XX } },
4559 { VEX_LEN_TABLE (VEX_LEN_3841_P_2) },
4560 { "(bad)", { XX } },
4561 },
4562
0bfee649 4563 /* PREFIX_VEX_3896 */
a5ff0eb2
L
4564 {
4565 { "(bad)", { XX } },
4566 { "(bad)", { XX } },
0bfee649 4567 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4568 { "(bad)", { XX } },
4569 },
4570
0bfee649 4571 /* PREFIX_VEX_3897 */
a5ff0eb2
L
4572 {
4573 { "(bad)", { XX } },
4574 { "(bad)", { XX } },
0bfee649 4575 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4576 { "(bad)", { XX } },
4577 },
4578
0bfee649 4579 /* PREFIX_VEX_3898 */
a5ff0eb2
L
4580 {
4581 { "(bad)", { XX } },
4582 { "(bad)", { XX } },
0bfee649 4583 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4584 { "(bad)", { XX } },
4585 },
4586
0bfee649 4587 /* PREFIX_VEX_3899 */
a5ff0eb2
L
4588 {
4589 { "(bad)", { XX } },
4590 { "(bad)", { XX } },
0bfee649 4591 { "vfmadd132s%XW", { XM, Vex, EXVexWdq } },
a5ff0eb2
L
4592 { "(bad)", { XX } },
4593 },
4594
0bfee649 4595 /* PREFIX_VEX_389A */
a5ff0eb2
L
4596 {
4597 { "(bad)", { XX } },
4598 { "(bad)", { XX } },
0bfee649 4599 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4600 { "(bad)", { XX } },
4601 },
4602
0bfee649 4603 /* PREFIX_VEX_389B */
c0f3af97
L
4604 {
4605 { "(bad)", { XX } },
4606 { "(bad)", { XX } },
0bfee649 4607 { "vfmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4608 { "(bad)", { XX } },
4609 },
4610
0bfee649 4611 /* PREFIX_VEX_389C */
c0f3af97
L
4612 {
4613 { "(bad)", { XX } },
4614 { "(bad)", { XX } },
0bfee649 4615 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4616 { "(bad)", { XX } },
4617 },
4618
0bfee649 4619 /* PREFIX_VEX_389D */
c0f3af97
L
4620 {
4621 { "(bad)", { XX } },
4622 { "(bad)", { XX } },
0bfee649 4623 { "vfnmadd132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4624 { "(bad)", { XX } },
4625 },
4626
0bfee649 4627 /* PREFIX_VEX_389E */
c0f3af97
L
4628 {
4629 { "(bad)", { XX } },
4630 { "(bad)", { XX } },
0bfee649 4631 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4632 { "(bad)", { XX } },
4633 },
4634
0bfee649 4635 /* PREFIX_VEX_389F */
c0f3af97
L
4636 {
4637 { "(bad)", { XX } },
4638 { "(bad)", { XX } },
0bfee649 4639 { "vfnmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4640 { "(bad)", { XX } },
4641 },
4642
0bfee649 4643 /* PREFIX_VEX_38A6 */
c0f3af97
L
4644 {
4645 { "(bad)", { XX } },
4646 { "(bad)", { XX } },
0bfee649 4647 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4648 { "(bad)", { XX } },
4649 },
4650
0bfee649 4651 /* PREFIX_VEX_38A7 */
c0f3af97
L
4652 {
4653 { "(bad)", { XX } },
4654 { "(bad)", { XX } },
0bfee649 4655 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4656 { "(bad)", { XX } },
4657 },
4658
0bfee649 4659 /* PREFIX_VEX_38A8 */
c0f3af97
L
4660 {
4661 { "(bad)", { XX } },
4662 { "(bad)", { XX } },
0bfee649 4663 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4664 { "(bad)", { XX } },
4665 },
4666
0bfee649 4667 /* PREFIX_VEX_38A9 */
c0f3af97
L
4668 {
4669 { "(bad)", { XX } },
4670 { "(bad)", { XX } },
0bfee649 4671 { "vfmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4672 { "(bad)", { XX } },
4673 },
4674
0bfee649 4675 /* PREFIX_VEX_38AA */
c0f3af97
L
4676 {
4677 { "(bad)", { XX } },
4678 { "(bad)", { XX } },
0bfee649 4679 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4680 { "(bad)", { XX } },
4681 },
4682
0bfee649 4683 /* PREFIX_VEX_38AB */
c0f3af97
L
4684 {
4685 { "(bad)", { XX } },
4686 { "(bad)", { XX } },
0bfee649 4687 { "vfmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4688 { "(bad)", { XX } },
4689 },
4690
0bfee649 4691 /* PREFIX_VEX_38AC */
c0f3af97
L
4692 {
4693 { "(bad)", { XX } },
4694 { "(bad)", { XX } },
0bfee649 4695 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4696 { "(bad)", { XX } },
4697 },
4698
0bfee649 4699 /* PREFIX_VEX_38AD */
c0f3af97
L
4700 {
4701 { "(bad)", { XX } },
4702 { "(bad)", { XX } },
0bfee649 4703 { "vfnmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4704 { "(bad)", { XX } },
4705 },
4706
0bfee649 4707 /* PREFIX_VEX_38AE */
c0f3af97
L
4708 {
4709 { "(bad)", { XX } },
4710 { "(bad)", { XX } },
0bfee649 4711 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4712 { "(bad)", { XX } },
4713 },
4714
0bfee649 4715 /* PREFIX_VEX_38AF */
c0f3af97
L
4716 {
4717 { "(bad)", { XX } },
4718 { "(bad)", { XX } },
0bfee649 4719 { "vfnmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4720 { "(bad)", { XX } },
4721 },
4722
0bfee649 4723 /* PREFIX_VEX_38B6 */
c0f3af97
L
4724 {
4725 { "(bad)", { XX } },
4726 { "(bad)", { XX } },
0bfee649 4727 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4728 { "(bad)", { XX } },
4729 },
4730
0bfee649 4731 /* PREFIX_VEX_38B7 */
c0f3af97
L
4732 {
4733 { "(bad)", { XX } },
4734 { "(bad)", { XX } },
0bfee649 4735 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4736 { "(bad)", { XX } },
4737 },
4738
0bfee649 4739 /* PREFIX_VEX_38B8 */
c0f3af97
L
4740 {
4741 { "(bad)", { XX } },
4742 { "(bad)", { XX } },
0bfee649 4743 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4744 { "(bad)", { XX } },
4745 },
4746
0bfee649 4747 /* PREFIX_VEX_38B9 */
c0f3af97
L
4748 {
4749 { "(bad)", { XX } },
4750 { "(bad)", { XX } },
0bfee649 4751 { "vfmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4752 { "(bad)", { XX } },
4753 },
4754
0bfee649 4755 /* PREFIX_VEX_38BA */
c0f3af97
L
4756 {
4757 { "(bad)", { XX } },
4758 { "(bad)", { XX } },
0bfee649 4759 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4760 { "(bad)", { XX } },
4761 },
4762
0bfee649 4763 /* PREFIX_VEX_38BB */
c0f3af97
L
4764 {
4765 { "(bad)", { XX } },
4766 { "(bad)", { XX } },
0bfee649 4767 { "vfmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4768 { "(bad)", { XX } },
4769 },
4770
0bfee649 4771 /* PREFIX_VEX_38BC */
c0f3af97
L
4772 {
4773 { "(bad)", { XX } },
4774 { "(bad)", { XX } },
0bfee649 4775 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4776 { "(bad)", { XX } },
4777 },
4778
0bfee649 4779 /* PREFIX_VEX_38BD */
c0f3af97
L
4780 {
4781 { "(bad)", { XX } },
4782 { "(bad)", { XX } },
0bfee649 4783 { "vfnmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4784 { "(bad)", { XX } },
4785 },
4786
0bfee649 4787 /* PREFIX_VEX_38BE */
c0f3af97
L
4788 {
4789 { "(bad)", { XX } },
4790 { "(bad)", { XX } },
0bfee649 4791 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4792 { "(bad)", { XX } },
4793 },
4794
0bfee649 4795 /* PREFIX_VEX_38BF */
c0f3af97
L
4796 {
4797 { "(bad)", { XX } },
4798 { "(bad)", { XX } },
0bfee649 4799 { "vfnmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4800 { "(bad)", { XX } },
4801 },
4802
0bfee649 4803 /* PREFIX_VEX_38DB */
c0f3af97
L
4804 {
4805 { "(bad)", { XX } },
4806 { "(bad)", { XX } },
0bfee649 4807 { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
c0f3af97
L
4808 { "(bad)", { XX } },
4809 },
4810
0bfee649 4811 /* PREFIX_VEX_38DC */
c0f3af97
L
4812 {
4813 { "(bad)", { XX } },
4814 { "(bad)", { XX } },
0bfee649 4815 { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
c0f3af97
L
4816 { "(bad)", { XX } },
4817 },
4818
0bfee649 4819 /* PREFIX_VEX_38DD */
c0f3af97
L
4820 {
4821 { "(bad)", { XX } },
4822 { "(bad)", { XX } },
0bfee649 4823 { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
c0f3af97
L
4824 { "(bad)", { XX } },
4825 },
4826
0bfee649 4827 /* PREFIX_VEX_38DE */
c0f3af97
L
4828 {
4829 { "(bad)", { XX } },
4830 { "(bad)", { XX } },
0bfee649 4831 { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
c0f3af97
L
4832 { "(bad)", { XX } },
4833 },
4834
0bfee649 4835 /* PREFIX_VEX_38DF */
c0f3af97
L
4836 {
4837 { "(bad)", { XX } },
4838 { "(bad)", { XX } },
0bfee649 4839 { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
c0f3af97
L
4840 { "(bad)", { XX } },
4841 },
4842
0bfee649 4843 /* PREFIX_VEX_3A04 */
c0f3af97
L
4844 {
4845 { "(bad)", { XX } },
4846 { "(bad)", { XX } },
0bfee649 4847 { "vpermilps", { XM, EXx, Ib } },
c0f3af97
L
4848 { "(bad)", { XX } },
4849 },
4850
0bfee649 4851 /* PREFIX_VEX_3A05 */
c0f3af97
L
4852 {
4853 { "(bad)", { XX } },
4854 { "(bad)", { XX } },
0bfee649 4855 { "vpermilpd", { XM, EXx, Ib } },
c0f3af97
L
4856 { "(bad)", { XX } },
4857 },
4858
0bfee649 4859 /* PREFIX_VEX_3A06 */
c0f3af97
L
4860 {
4861 { "(bad)", { XX } },
4862 { "(bad)", { XX } },
0bfee649 4863 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) },
c0f3af97
L
4864 { "(bad)", { XX } },
4865 },
4866
0bfee649 4867 /* PREFIX_VEX_3A08 */
c0f3af97
L
4868 {
4869 { "(bad)", { XX } },
4870 { "(bad)", { XX } },
0bfee649 4871 { "vroundps", { XM, EXx, Ib } },
c0f3af97
L
4872 { "(bad)", { XX } },
4873 },
4874
0bfee649 4875 /* PREFIX_VEX_3A09 */
c0f3af97
L
4876 {
4877 { "(bad)", { XX } },
4878 { "(bad)", { XX } },
0bfee649 4879 { "vroundpd", { XM, EXx, Ib } },
c0f3af97
L
4880 { "(bad)", { XX } },
4881 },
4882
0bfee649 4883 /* PREFIX_VEX_3A0A */
c0f3af97
L
4884 {
4885 { "(bad)", { XX } },
4886 { "(bad)", { XX } },
0bfee649
L
4887 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) },
4888 { "(bad)", { XX } },
4889 },
4890
4891 /* PREFIX_VEX_3A0B */
4892 {
4893 { "(bad)", { XX } },
4894 { "(bad)", { XX } },
4895 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) },
4896 { "(bad)", { XX } },
4897 },
4898
4899 /* PREFIX_VEX_3A0C */
4900 {
4901 { "(bad)", { XX } },
4902 { "(bad)", { XX } },
4903 { "vblendps", { XM, Vex, EXx, Ib } },
4904 { "(bad)", { XX } },
4905 },
4906
4907 /* PREFIX_VEX_3A0D */
4908 {
4909 { "(bad)", { XX } },
4910 { "(bad)", { XX } },
4911 { "vblendpd", { XM, Vex, EXx, Ib } },
c0f3af97
L
4912 { "(bad)", { XX } },
4913 },
4914
0bfee649
L
4915 /* PREFIX_VEX_3A0E */
4916 {
4917 { "(bad)", { XX } },
4918 { "(bad)", { XX } },
4919 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) },
4920 { "(bad)", { XX } },
4921 },
4922
4923 /* PREFIX_VEX_3A0F */
4924 {
4925 { "(bad)", { XX } },
4926 { "(bad)", { XX } },
4927 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) },
4928 { "(bad)", { XX } },
4929 },
4930
4931 /* PREFIX_VEX_3A14 */
4932 {
4933 { "(bad)", { XX } },
4934 { "(bad)", { XX } },
4935 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) },
4936 { "(bad)", { XX } },
4937 },
4938
4939 /* PREFIX_VEX_3A15 */
4940 {
4941 { "(bad)", { XX } },
4942 { "(bad)", { XX } },
4943 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) },
4944 { "(bad)", { XX } },
4945 },
4946
4947 /* PREFIX_VEX_3A16 */
c0f3af97
L
4948 {
4949 { "(bad)", { XX } },
4950 { "(bad)", { XX } },
0bfee649 4951 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) },
c0f3af97
L
4952 { "(bad)", { XX } },
4953 },
4954
0bfee649 4955 /* PREFIX_VEX_3A17 */
c0f3af97
L
4956 {
4957 { "(bad)", { XX } },
4958 { "(bad)", { XX } },
0bfee649 4959 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) },
c0f3af97
L
4960 { "(bad)", { XX } },
4961 },
4962
0bfee649 4963 /* PREFIX_VEX_3A18 */
c0f3af97
L
4964 {
4965 { "(bad)", { XX } },
4966 { "(bad)", { XX } },
0bfee649 4967 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) },
c0f3af97
L
4968 { "(bad)", { XX } },
4969 },
4970
0bfee649 4971 /* PREFIX_VEX_3A19 */
c0f3af97
L
4972 {
4973 { "(bad)", { XX } },
4974 { "(bad)", { XX } },
0bfee649 4975 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) },
c0f3af97
L
4976 { "(bad)", { XX } },
4977 },
4978
0bfee649 4979 /* PREFIX_VEX_3A20 */
c0f3af97
L
4980 {
4981 { "(bad)", { XX } },
4982 { "(bad)", { XX } },
0bfee649 4983 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) },
c0f3af97
L
4984 { "(bad)", { XX } },
4985 },
4986
0bfee649 4987 /* PREFIX_VEX_3A21 */
c0f3af97
L
4988 {
4989 { "(bad)", { XX } },
4990 { "(bad)", { XX } },
0bfee649 4991 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) },
c0f3af97
L
4992 { "(bad)", { XX } },
4993 },
4994
0bfee649
L
4995 /* PREFIX_VEX_3A22 */
4996 {
4997 { "(bad)", { XX } },
4998 { "(bad)", { XX } },
4999 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) },
5000 { "(bad)", { XX } },
5001 },
5002
5003 /* PREFIX_VEX_3A40 */
c0f3af97
L
5004 {
5005 { "(bad)", { XX } },
5006 { "(bad)", { XX } },
0bfee649 5007 { "vdpps", { XM, Vex, EXx, Ib } },
c0f3af97
L
5008 { "(bad)", { XX } },
5009 },
5010
0bfee649 5011 /* PREFIX_VEX_3A41 */
c0f3af97
L
5012 {
5013 { "(bad)", { XX } },
5014 { "(bad)", { XX } },
0bfee649 5015 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) },
c0f3af97
L
5016 { "(bad)", { XX } },
5017 },
5018
0bfee649 5019 /* PREFIX_VEX_3A42 */
c0f3af97
L
5020 {
5021 { "(bad)", { XX } },
5022 { "(bad)", { XX } },
0bfee649 5023 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) },
c0f3af97
L
5024 { "(bad)", { XX } },
5025 },
5026
0bfee649 5027 /* PREFIX_VEX_3A4A */
c0f3af97
L
5028 {
5029 { "(bad)", { XX } },
5030 { "(bad)", { XX } },
0bfee649 5031 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5032 { "(bad)", { XX } },
5033 },
5034
0bfee649 5035 /* PREFIX_VEX_3A4B */
c0f3af97
L
5036 {
5037 { "(bad)", { XX } },
5038 { "(bad)", { XX } },
0bfee649 5039 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5040 { "(bad)", { XX } },
5041 },
5042
0bfee649 5043 /* PREFIX_VEX_3A4C */
c0f3af97
L
5044 {
5045 { "(bad)", { XX } },
5046 { "(bad)", { XX } },
0bfee649 5047 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) },
c0f3af97
L
5048 { "(bad)", { XX } },
5049 },
5050
0bfee649 5051 /* PREFIX_VEX_3A60 */
c0f3af97
L
5052 {
5053 { "(bad)", { XX } },
5054 { "(bad)", { XX } },
0bfee649 5055 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) },
c0f3af97
L
5056 { "(bad)", { XX } },
5057 },
5058
0bfee649 5059 /* PREFIX_VEX_3A61 */
c0f3af97
L
5060 {
5061 { "(bad)", { XX } },
5062 { "(bad)", { XX } },
0bfee649 5063 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) },
c0f3af97
L
5064 { "(bad)", { XX } },
5065 },
5066
0bfee649 5067 /* PREFIX_VEX_3A62 */
c0f3af97
L
5068 {
5069 { "(bad)", { XX } },
5070 { "(bad)", { XX } },
0bfee649 5071 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) },
c0f3af97
L
5072 { "(bad)", { XX } },
5073 },
5074
0bfee649 5075 /* PREFIX_VEX_3A63 */
c0f3af97
L
5076 {
5077 { "(bad)", { XX } },
5078 { "(bad)", { XX } },
0bfee649 5079 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) },
c0f3af97
L
5080 { "(bad)", { XX } },
5081 },
a5ff0eb2
L
5082
5083 /* PREFIX_VEX_3ADF */
5084 {
5085 { "(bad)", { XX } },
5086 { "(bad)", { XX } },
5087 { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
5088 { "(bad)", { XX } },
5089 },
c0f3af97
L
5090};
5091
5092static const struct dis386 x86_64_table[][2] = {
5093 /* X86_64_06 */
5094 {
5095 { "push{T|}", { es } },
5096 { "(bad)", { XX } },
5097 },
5098
5099 /* X86_64_07 */
5100 {
5101 { "pop{T|}", { es } },
5102 { "(bad)", { XX } },
5103 },
5104
5105 /* X86_64_0D */
5106 {
5107 { "push{T|}", { cs } },
5108 { "(bad)", { XX } },
5109 },
5110
5111 /* X86_64_16 */
5112 {
5113 { "push{T|}", { ss } },
5114 { "(bad)", { XX } },
5115 },
5116
5117 /* X86_64_17 */
5118 {
5119 { "pop{T|}", { ss } },
5120 { "(bad)", { XX } },
5121 },
5122
5123 /* X86_64_1E */
5124 {
5125 { "push{T|}", { ds } },
5126 { "(bad)", { XX } },
5127 },
5128
5129 /* X86_64_1F */
5130 {
5131 { "pop{T|}", { ds } },
5132 { "(bad)", { XX } },
5133 },
5134
5135 /* X86_64_27 */
5136 {
5137 { "daa", { XX } },
5138 { "(bad)", { XX } },
5139 },
5140
5141 /* X86_64_2F */
5142 {
5143 { "das", { XX } },
5144 { "(bad)", { XX } },
5145 },
5146
5147 /* X86_64_37 */
5148 {
5149 { "aaa", { XX } },
5150 { "(bad)", { XX } },
5151 },
5152
5153 /* X86_64_3F */
5154 {
5155 { "aas", { XX } },
5156 { "(bad)", { XX } },
5157 },
5158
5159 /* X86_64_60 */
5160 {
5161 { "pusha{P|}", { XX } },
5162 { "(bad)", { XX } },
5163 },
5164
5165 /* X86_64_61 */
5166 {
5167 { "popa{P|}", { XX } },
5168 { "(bad)", { XX } },
5169 },
5170
5171 /* X86_64_62 */
5172 {
5173 { MOD_TABLE (MOD_62_32BIT) },
5174 { "(bad)", { XX } },
5175 },
5176
5177 /* X86_64_63 */
5178 {
5179 { "arpl", { Ew, Gw } },
5180 { "movs{lq|xd}", { Gv, Ed } },
5181 },
5182
5183 /* X86_64_6D */
5184 {
5185 { "ins{R|}", { Yzr, indirDX } },
5186 { "ins{G|}", { Yzr, indirDX } },
5187 },
5188
5189 /* X86_64_6F */
5190 {
5191 { "outs{R|}", { indirDXr, Xz } },
5192 { "outs{G|}", { indirDXr, Xz } },
5193 },
5194
5195 /* X86_64_9A */
5196 {
5197 { "Jcall{T|}", { Ap } },
5198 { "(bad)", { XX } },
5199 },
5200
5201 /* X86_64_C4 */
5202 {
5203 { MOD_TABLE (MOD_C4_32BIT) },
5204 { VEX_C4_TABLE (VEX_0F) },
5205 },
5206
5207 /* X86_64_C5 */
5208 {
5209 { MOD_TABLE (MOD_C5_32BIT) },
5210 { VEX_C5_TABLE (VEX_0F) },
5211 },
5212
5213 /* X86_64_CE */
5214 {
5215 { "into", { XX } },
5216 { "(bad)", { XX } },
5217 },
5218
5219 /* X86_64_D4 */
5220 {
5221 { "aam", { sIb } },
5222 { "(bad)", { XX } },
5223 },
5224
5225 /* X86_64_D5 */
5226 {
5227 { "aad", { sIb } },
5228 { "(bad)", { XX } },
5229 },
5230
5231 /* X86_64_EA */
5232 {
5233 { "Jjmp{T|}", { Ap } },
5234 { "(bad)", { XX } },
5235 },
5236
5237 /* X86_64_0F01_REG_0 */
5238 {
5239 { "sgdt{Q|IQ}", { M } },
5240 { "sgdt", { M } },
5241 },
5242
5243 /* X86_64_0F01_REG_1 */
5244 {
5245 { "sidt{Q|IQ}", { M } },
5246 { "sidt", { M } },
5247 },
5248
5249 /* X86_64_0F01_REG_2 */
5250 {
5251 { "lgdt{Q|Q}", { M } },
5252 { "lgdt", { M } },
5253 },
5254
5255 /* X86_64_0F01_REG_3 */
5256 {
5257 { "lidt{Q|Q}", { M } },
5258 { "lidt", { M } },
5259 },
5260};
5261
5262static const struct dis386 three_byte_table[][256] = {
5263 /* THREE_BYTE_0F24 */
5264 {
5265 /* 00 */
5266 { "fmaddps", { { OP_DREX4, q_mode } } },
5267 { "fmaddpd", { { OP_DREX4, q_mode } } },
5268 { "fmaddss", { { OP_DREX4, w_mode } } },
5269 { "fmaddsd", { { OP_DREX4, d_mode } } },
5270 { "fmaddps", { { OP_DREX4, DREX_OC1 + q_mode } } },
5271 { "fmaddpd", { { OP_DREX4, DREX_OC1 + q_mode } } },
5272 { "fmaddss", { { OP_DREX4, DREX_OC1 + w_mode } } },
5273 { "fmaddsd", { { OP_DREX4, DREX_OC1 + d_mode } } },
5274 /* 08 */
5275 { "fmsubps", { { OP_DREX4, q_mode } } },
5276 { "fmsubpd", { { OP_DREX4, q_mode } } },
5277 { "fmsubss", { { OP_DREX4, w_mode } } },
5278 { "fmsubsd", { { OP_DREX4, d_mode } } },
5279 { "fmsubps", { { OP_DREX4, DREX_OC1 + q_mode } } },
5280 { "fmsubpd", { { OP_DREX4, DREX_OC1 + q_mode } } },
5281 { "fmsubss", { { OP_DREX4, DREX_OC1 + w_mode } } },
5282 { "fmsubsd", { { OP_DREX4, DREX_OC1 + d_mode } } },
5283 /* 10 */
5284 { "fnmaddps", { { OP_DREX4, q_mode } } },
5285 { "fnmaddpd", { { OP_DREX4, q_mode } } },
5286 { "fnmaddss", { { OP_DREX4, w_mode } } },
5287 { "fnmaddsd", { { OP_DREX4, d_mode } } },
5288 { "fnmaddps", { { OP_DREX4, DREX_OC1 + q_mode } } },
5289 { "fnmaddpd", { { OP_DREX4, DREX_OC1 + q_mode } } },
5290 { "fnmaddss", { { OP_DREX4, DREX_OC1 + w_mode } } },
5291 { "fnmaddsd", { { OP_DREX4, DREX_OC1 + d_mode } } },
5292 /* 18 */
5293 { "fnmsubps", { { OP_DREX4, q_mode } } },
5294 { "fnmsubpd", { { OP_DREX4, q_mode } } },
5295 { "fnmsubss", { { OP_DREX4, w_mode } } },
5296 { "fnmsubsd", { { OP_DREX4, d_mode } } },
5297 { "fnmsubps", { { OP_DREX4, DREX_OC1 + q_mode } } },
5298 { "fnmsubpd", { { OP_DREX4, DREX_OC1 + q_mode } } },
5299 { "fnmsubss", { { OP_DREX4, DREX_OC1 + w_mode } } },
5300 { "fnmsubsd", { { OP_DREX4, DREX_OC1 + d_mode } } },
5301 /* 20 */
5302 { "permps", { { OP_DREX4, q_mode } } },
5303 { "permpd", { { OP_DREX4, q_mode } } },
5304 { "pcmov", { { OP_DREX4, q_mode } } },
5305 { "pperm", { { OP_DREX4, q_mode } } },
5306 { "permps", { { OP_DREX4, DREX_OC1 + q_mode } } },
5307 { "permpd", { { OP_DREX4, DREX_OC1 + q_mode } } },
5308 { "pcmov", { { OP_DREX4, DREX_OC1 + w_mode } } },
5309 { "pperm", { { OP_DREX4, DREX_OC1 + d_mode } } },
5310 /* 28 */
5311 { "(bad)", { XX } },
5312 { "(bad)", { XX } },
5313 { "(bad)", { XX } },
5314 { "(bad)", { XX } },
5315 { "(bad)", { XX } },
5316 { "(bad)", { XX } },
5317 { "(bad)", { XX } },
5318 { "(bad)", { XX } },
5319 /* 30 */
5320 { "(bad)", { XX } },
5321 { "(bad)", { XX } },
5322 { "(bad)", { XX } },
5323 { "(bad)", { XX } },
5324 { "(bad)", { XX } },
5325 { "(bad)", { XX } },
5326 { "(bad)", { XX } },
5327 { "(bad)", { XX } },
5328 /* 38 */
5329 { "(bad)", { XX } },
5330 { "(bad)", { XX } },
5331 { "(bad)", { XX } },
5332 { "(bad)", { XX } },
5333 { "(bad)", { XX } },
5334 { "(bad)", { XX } },
5335 { "(bad)", { XX } },
5336 { "(bad)", { XX } },
5337 /* 40 */
5338 { "protb", { { OP_DREX3, q_mode } } },
5339 { "protw", { { OP_DREX3, q_mode } } },
5340 { "protd", { { OP_DREX3, q_mode } } },
5341 { "protq", { { OP_DREX3, q_mode } } },
5342 { "pshlb", { { OP_DREX3, q_mode } } },
5343 { "pshlw", { { OP_DREX3, q_mode } } },
5344 { "pshld", { { OP_DREX3, q_mode } } },
5345 { "pshlq", { { OP_DREX3, q_mode } } },
5346 /* 48 */
5347 { "pshab", { { OP_DREX3, q_mode } } },
5348 { "pshaw", { { OP_DREX3, q_mode } } },
5349 { "pshad", { { OP_DREX3, q_mode } } },
5350 { "pshaq", { { OP_DREX3, q_mode } } },
5351 { "(bad)", { XX } },
5352 { "(bad)", { XX } },
5353 { "(bad)", { XX } },
5354 { "(bad)", { XX } },
5355 /* 50 */
5356 { "(bad)", { XX } },
5357 { "(bad)", { XX } },
5358 { "(bad)", { XX } },
5359 { "(bad)", { XX } },
5360 { "(bad)", { XX } },
5361 { "(bad)", { XX } },
5362 { "(bad)", { XX } },
5363 { "(bad)", { XX } },
5364 /* 58 */
5365 { "(bad)", { XX } },
5366 { "(bad)", { XX } },
5367 { "(bad)", { XX } },
5368 { "(bad)", { XX } },
5369 { "(bad)", { XX } },
5370 { "(bad)", { XX } },
5371 { "(bad)", { XX } },
5372 { "(bad)", { XX } },
5373 /* 60 */
5374 { "(bad)", { XX } },
5375 { "(bad)", { XX } },
5376 { "(bad)", { XX } },
5377 { "(bad)", { XX } },
5378 { "(bad)", { XX } },
5379 { "(bad)", { XX } },
5380 { "(bad)", { XX } },
5381 { "(bad)", { XX } },
5382 /* 68 */
5383 { "(bad)", { XX } },
5384 { "(bad)", { XX } },
5385 { "(bad)", { XX } },
5386 { "(bad)", { XX } },
5387 { "(bad)", { XX } },
5388 { "(bad)", { XX } },
5389 { "(bad)", { XX } },
5390 { "(bad)", { XX } },
5391 /* 70 */
5392 { "(bad)", { XX } },
5393 { "(bad)", { XX } },
5394 { "(bad)", { XX } },
5395 { "(bad)", { XX } },
5396 { "(bad)", { XX } },
5397 { "(bad)", { XX } },
5398 { "(bad)", { XX } },
5399 { "(bad)", { XX } },
5400 /* 78 */
5401 { "(bad)", { XX } },
5402 { "(bad)", { XX } },
5403 { "(bad)", { XX } },
5404 { "(bad)", { XX } },
5405 { "(bad)", { XX } },
5406 { "(bad)", { XX } },
5407 { "(bad)", { XX } },
5408 { "(bad)", { XX } },
5409 /* 80 */
5410 { "(bad)", { XX } },
5411 { "(bad)", { XX } },
5412 { "(bad)", { XX } },
5413 { "(bad)", { XX } },
5414 { "(bad)", { XX } },
5415 { "pmacssww", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5416 { "pmacsswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5417 { "pmacssdql", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5418 /* 88 */
5419 { "(bad)", { XX } },
5420 { "(bad)", { XX } },
5421 { "(bad)", { XX } },
5422 { "(bad)", { XX } },
5423 { "(bad)", { XX } },
5424 { "(bad)", { XX } },
5425 { "pmacssdd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5426 { "pmacssdqh", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5427 /* 90 */
5428 { "(bad)", { XX } },
5429 { "(bad)", { XX } },
5430 { "(bad)", { XX } },
5431 { "(bad)", { XX } },
5432 { "(bad)", { XX } },
5433 { "pmacsww", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5434 { "pmacswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5435 { "pmacsdql", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5436 /* 98 */
5437 { "(bad)", { XX } },
5438 { "(bad)", { XX } },
5439 { "(bad)", { XX } },
5440 { "(bad)", { XX } },
5441 { "(bad)", { XX } },
5442 { "(bad)", { XX } },
5443 { "pmacsdd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5444 { "pmacsdqh", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5445 /* a0 */
5446 { "(bad)", { XX } },
5447 { "(bad)", { XX } },
5448 { "(bad)", { XX } },
5449 { "(bad)", { XX } },
5450 { "(bad)", { XX } },
5451 { "(bad)", { XX } },
5452 { "pmadcsswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5453 { "(bad)", { XX } },
5454 /* a8 */
5455 { "(bad)", { XX } },
5456 { "(bad)", { XX } },
5457 { "(bad)", { XX } },
5458 { "(bad)", { XX } },
5459 { "(bad)", { XX } },
5460 { "(bad)", { XX } },
5461 { "(bad)", { XX } },
5462 { "(bad)", { XX } },
5463 /* b0 */
5464 { "(bad)", { XX } },
5465 { "(bad)", { XX } },
5466 { "(bad)", { XX } },
5467 { "(bad)", { XX } },
5468 { "(bad)", { XX } },
5469 { "(bad)", { XX } },
5470 { "pmadcswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } },
5471 { "(bad)", { XX } },
5472 /* b8 */
5473 { "(bad)", { XX } },
5474 { "(bad)", { XX } },
5475 { "(bad)", { XX } },
5476 { "(bad)", { XX } },
5477 { "(bad)", { XX } },
5478 { "(bad)", { XX } },
5479 { "(bad)", { XX } },
5480 { "(bad)", { XX } },
5481 /* c0 */
5482 { "(bad)", { XX } },
5483 { "(bad)", { XX } },
5484 { "(bad)", { XX } },
5485 { "(bad)", { XX } },
5486 { "(bad)", { XX } },
5487 { "(bad)", { XX } },
5488 { "(bad)", { XX } },
5489 { "(bad)", { XX } },
5490 /* c8 */
5491 { "(bad)", { XX } },
5492 { "(bad)", { XX } },
5493 { "(bad)", { XX } },
5494 { "(bad)", { XX } },
5495 { "(bad)", { XX } },
5496 { "(bad)", { XX } },
5497 { "(bad)", { XX } },
5498 { "(bad)", { XX } },
5499 /* d0 */
5500 { "(bad)", { XX } },
5501 { "(bad)", { XX } },
5502 { "(bad)", { XX } },
5503 { "(bad)", { XX } },
5504 { "(bad)", { XX } },
5505 { "(bad)", { XX } },
5506 { "(bad)", { XX } },
5507 { "(bad)", { XX } },
5508 /* d8 */
5509 { "(bad)", { XX } },
5510 { "(bad)", { XX } },
5511 { "(bad)", { XX } },
5512 { "(bad)", { XX } },
5513 { "(bad)", { XX } },
5514 { "(bad)", { XX } },
5515 { "(bad)", { XX } },
5516 { "(bad)", { XX } },
5517 /* e0 */
5518 { "(bad)", { XX } },
5519 { "(bad)", { XX } },
5520 { "(bad)", { XX } },
5521 { "(bad)", { XX } },
5522 { "(bad)", { XX } },
5523 { "(bad)", { XX } },
5524 { "(bad)", { XX } },
5525 { "(bad)", { XX } },
5526 /* e8 */
5527 { "(bad)", { XX } },
5528 { "(bad)", { XX } },
5529 { "(bad)", { XX } },
5530 { "(bad)", { XX } },
5531 { "(bad)", { XX } },
5532 { "(bad)", { XX } },
5533 { "(bad)", { XX } },
5534 { "(bad)", { XX } },
5535 /* f0 */
5536 { "(bad)", { XX } },
5537 { "(bad)", { XX } },
5538 { "(bad)", { XX } },
5539 { "(bad)", { XX } },
5540 { "(bad)", { XX } },
5541 { "(bad)", { XX } },
5542 { "(bad)", { XX } },
5543 { "(bad)", { XX } },
5544 /* f8 */
5545 { "(bad)", { XX } },
5546 { "(bad)", { XX } },
5547 { "(bad)", { XX } },
5548 { "(bad)", { XX } },
5549 { "(bad)", { XX } },
5550 { "(bad)", { XX } },
5551 { "(bad)", { XX } },
5552 { "(bad)", { XX } },
5553 },
5554 /* THREE_BYTE_0F25 */
5555 {
5556 /* 00 */
5557 { "(bad)", { XX } },
5558 { "(bad)", { XX } },
5559 { "(bad)", { XX } },
5560 { "(bad)", { XX } },
5561 { "(bad)", { XX } },
5562 { "(bad)", { XX } },
5563 { "(bad)", { XX } },
5564 { "(bad)", { XX } },
5565 /* 08 */
5566 { "(bad)", { XX } },
5567 { "(bad)", { XX } },
5568 { "(bad)", { XX } },
5569 { "(bad)", { XX } },
5570 { "(bad)", { XX } },
5571 { "(bad)", { XX } },
5572 { "(bad)", { XX } },
5573 { "(bad)", { XX } },
5574 /* 10 */
5575 { "(bad)", { XX } },
5576 { "(bad)", { XX } },
5577 { "(bad)", { XX } },
5578 { "(bad)", { XX } },
5579 { "(bad)", { XX } },
5580 { "(bad)", { XX } },
5581 { "(bad)", { XX } },
5582 { "(bad)", { XX } },
5583 /* 18 */
5584 { "(bad)", { XX } },
5585 { "(bad)", { XX } },
5586 { "(bad)", { XX } },
5587 { "(bad)", { XX } },
5588 { "(bad)", { XX } },
5589 { "(bad)", { XX } },
5590 { "(bad)", { XX } },
5591 { "(bad)", { XX } },
5592 /* 20 */
5593 { "(bad)", { XX } },
5594 { "(bad)", { XX } },
5595 { "(bad)", { XX } },
5596 { "(bad)", { XX } },
5597 { "(bad)", { XX } },
5598 { "(bad)", { XX } },
5599 { "(bad)", { XX } },
5600 { "(bad)", { XX } },
5601 /* 28 */
5602 { "(bad)", { XX } },
5603 { "(bad)", { XX } },
5604 { "(bad)", { XX } },
5605 { "(bad)", { XX } },
5606 { "comps", { { OP_DREX3, q_mode }, { OP_DREX_FCMP, b_mode } } },
5607 { "compd", { { OP_DREX3, q_mode }, { OP_DREX_FCMP, b_mode } } },
5608 { "comss", { { OP_DREX3, w_mode }, { OP_DREX_FCMP, b_mode } } },
5609 { "comsd", { { OP_DREX3, d_mode }, { OP_DREX_FCMP, b_mode } } },
5610 /* 30 */
5611 { "(bad)", { XX } },
5612 { "(bad)", { XX } },
5613 { "(bad)", { XX } },
5614 { "(bad)", { XX } },
5615 { "(bad)", { XX } },
5616 { "(bad)", { XX } },
5617 { "(bad)", { XX } },
5618 { "(bad)", { XX } },
5619 /* 38 */
5620 { "(bad)", { XX } },
5621 { "(bad)", { XX } },
5622 { "(bad)", { XX } },
5623 { "(bad)", { XX } },
5624 { "(bad)", { XX } },
5625 { "(bad)", { XX } },
5626 { "(bad)", { XX } },
5627 { "(bad)", { XX } },
5628 /* 40 */
5629 { "(bad)", { XX } },
5630 { "(bad)", { XX } },
5631 { "(bad)", { XX } },
5632 { "(bad)", { XX } },
5633 { "(bad)", { XX } },
5634 { "(bad)", { XX } },
5635 { "(bad)", { XX } },
5636 { "(bad)", { XX } },
5637 /* 48 */
5638 { "(bad)", { XX } },
5639 { "(bad)", { XX } },
5640 { "(bad)", { XX } },
5641 { "(bad)", { XX } },
5642 { "pcomb", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5643 { "pcomw", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5644 { "pcomd", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5645 { "pcomq", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5646 /* 50 */
5647 { "(bad)", { XX } },
5648 { "(bad)", { XX } },
5649 { "(bad)", { XX } },
5650 { "(bad)", { XX } },
5651 { "(bad)", { XX } },
5652 { "(bad)", { XX } },
5653 { "(bad)", { XX } },
5654 { "(bad)", { XX } },
5655 /* 58 */
5656 { "(bad)", { XX } },
5657 { "(bad)", { XX } },
5658 { "(bad)", { XX } },
5659 { "(bad)", { XX } },
5660 { "(bad)", { XX } },
5661 { "(bad)", { XX } },
5662 { "(bad)", { XX } },
5663 { "(bad)", { XX } },
5664 /* 60 */
5665 { "(bad)", { XX } },
5666 { "(bad)", { XX } },
5667 { "(bad)", { XX } },
5668 { "(bad)", { XX } },
5669 { "(bad)", { XX } },
5670 { "(bad)", { XX } },
5671 { "(bad)", { XX } },
5672 { "(bad)", { XX } },
5673 /* 68 */
5674 { "(bad)", { XX } },
5675 { "(bad)", { XX } },
5676 { "(bad)", { XX } },
5677 { "(bad)", { XX } },
5678 { "pcomub", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5679 { "pcomuw", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5680 { "pcomud", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5681 { "pcomuq", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } },
5682 /* 70 */
5683 { "(bad)", { XX } },
5684 { "(bad)", { XX } },
5685 { "(bad)", { XX } },
5686 { "(bad)", { XX } },
5687 { "(bad)", { XX } },
5688 { "(bad)", { XX } },
5689 { "(bad)", { XX } },
5690 { "(bad)", { XX } },
5691 /* 78 */
5692 { "(bad)", { XX } },
5693 { "(bad)", { XX } },
5694 { "(bad)", { XX } },
5695 { "(bad)", { XX } },
5696 { "(bad)", { XX } },
5697 { "(bad)", { XX } },
5698 { "(bad)", { XX } },
5699 { "(bad)", { XX } },
5700 /* 80 */
5701 { "(bad)", { XX } },
5702 { "(bad)", { XX } },
5703 { "(bad)", { XX } },
5704 { "(bad)", { XX } },
5705 { "(bad)", { XX } },
5706 { "(bad)", { XX } },
5707 { "(bad)", { XX } },
5708 { "(bad)", { XX } },
5709 /* 88 */
5710 { "(bad)", { XX } },
5711 { "(bad)", { XX } },
5712 { "(bad)", { XX } },
5713 { "(bad)", { XX } },
5714 { "(bad)", { XX } },
5715 { "(bad)", { XX } },
5716 { "(bad)", { XX } },
5717 { "(bad)", { XX } },
5718 /* 90 */
5719 { "(bad)", { XX } },
5720 { "(bad)", { XX } },
5721 { "(bad)", { XX } },
5722 { "(bad)", { XX } },
5723 { "(bad)", { XX } },
5724 { "(bad)", { XX } },
5725 { "(bad)", { XX } },
5726 { "(bad)", { XX } },
5727 /* 98 */
5728 { "(bad)", { XX } },
5729 { "(bad)", { XX } },
5730 { "(bad)", { XX } },
5731 { "(bad)", { XX } },
5732 { "(bad)", { XX } },
5733 { "(bad)", { XX } },
5734 { "(bad)", { XX } },
5735 { "(bad)", { XX } },
5736 /* a0 */
5737 { "(bad)", { XX } },
5738 { "(bad)", { XX } },
5739 { "(bad)", { XX } },
5740 { "(bad)", { XX } },
5741 { "(bad)", { XX } },
5742 { "(bad)", { XX } },
5743 { "(bad)", { XX } },
5744 { "(bad)", { XX } },
5745 /* a8 */
5746 { "(bad)", { XX } },
5747 { "(bad)", { XX } },
5748 { "(bad)", { XX } },
5749 { "(bad)", { XX } },
5750 { "(bad)", { XX } },
5751 { "(bad)", { XX } },
5752 { "(bad)", { XX } },
5753 { "(bad)", { XX } },
5754 /* b0 */
5755 { "(bad)", { XX } },
5756 { "(bad)", { XX } },
5757 { "(bad)", { XX } },
5758 { "(bad)", { XX } },
5759 { "(bad)", { XX } },
5760 { "(bad)", { XX } },
5761 { "(bad)", { XX } },
5762 { "(bad)", { XX } },
5763 /* b8 */
5764 { "(bad)", { XX } },
5765 { "(bad)", { XX } },
5766 { "(bad)", { XX } },
5767 { "(bad)", { XX } },
5768 { "(bad)", { XX } },
5769 { "(bad)", { XX } },
5770 { "(bad)", { XX } },
5771 { "(bad)", { XX } },
5772 /* c0 */
5773 { "(bad)", { XX } },
5774 { "(bad)", { XX } },
5775 { "(bad)", { XX } },
5776 { "(bad)", { XX } },
5777 { "(bad)", { XX } },
5778 { "(bad)", { XX } },
5779 { "(bad)", { XX } },
5780 { "(bad)", { XX } },
5781 /* c8 */
5782 { "(bad)", { XX } },
5783 { "(bad)", { XX } },
5784 { "(bad)", { XX } },
5785 { "(bad)", { XX } },
5786 { "(bad)", { XX } },
5787 { "(bad)", { XX } },
5788 { "(bad)", { XX } },
5789 { "(bad)", { XX } },
5790 /* d0 */
5791 { "(bad)", { XX } },
5792 { "(bad)", { XX } },
5793 { "(bad)", { XX } },
5794 { "(bad)", { XX } },
5795 { "(bad)", { XX } },
5796 { "(bad)", { XX } },
5797 { "(bad)", { XX } },
5798 { "(bad)", { XX } },
5799 /* d8 */
5800 { "(bad)", { XX } },
5801 { "(bad)", { XX } },
5802 { "(bad)", { XX } },
5803 { "(bad)", { XX } },
5804 { "(bad)", { XX } },
5805 { "(bad)", { XX } },
5806 { "(bad)", { XX } },
5807 { "(bad)", { XX } },
5808 /* e0 */
5809 { "(bad)", { XX } },
5810 { "(bad)", { XX } },
5811 { "(bad)", { XX } },
5812 { "(bad)", { XX } },
5813 { "(bad)", { XX } },
5814 { "(bad)", { XX } },
5815 { "(bad)", { XX } },
5816 { "(bad)", { XX } },
5817 /* e8 */
5818 { "(bad)", { XX } },
5819 { "(bad)", { XX } },
5820 { "(bad)", { XX } },
5821 { "(bad)", { XX } },
5822 { "(bad)", { XX } },
5823 { "(bad)", { XX } },
5824 { "(bad)", { XX } },
5825 { "(bad)", { XX } },
5826 /* f0 */
5827 { "(bad)", { XX } },
5828 { "(bad)", { XX } },
5829 { "(bad)", { XX } },
5830 { "(bad)", { XX } },
5831 { "(bad)", { XX } },
5832 { "(bad)", { XX } },
5833 { "(bad)", { XX } },
5834 { "(bad)", { XX } },
5835 /* f8 */
5836 { "(bad)", { XX } },
5837 { "(bad)", { XX } },
5838 { "(bad)", { XX } },
5839 { "(bad)", { XX } },
5840 { "(bad)", { XX } },
5841 { "(bad)", { XX } },
5842 { "(bad)", { XX } },
5843 { "(bad)", { XX } },
5844 },
5845 /* THREE_BYTE_0F38 */
5846 {
5847 /* 00 */
5848 { "pshufb", { MX, EM } },
5849 { "phaddw", { MX, EM } },
5850 { "phaddd", { MX, EM } },
5851 { "phaddsw", { MX, EM } },
5852 { "pmaddubsw", { MX, EM } },
5853 { "phsubw", { MX, EM } },
5854 { "phsubd", { MX, EM } },
5855 { "phsubsw", { MX, EM } },
5856 /* 08 */
5857 { "psignb", { MX, EM } },
5858 { "psignw", { MX, EM } },
5859 { "psignd", { MX, EM } },
5860 { "pmulhrsw", { MX, EM } },
5861 { "(bad)", { XX } },
5862 { "(bad)", { XX } },
5863 { "(bad)", { XX } },
5864 { "(bad)", { XX } },
5865 /* 10 */
5866 { PREFIX_TABLE (PREFIX_0F3810) },
5867 { "(bad)", { XX } },
5868 { "(bad)", { XX } },
5869 { "(bad)", { XX } },
5870 { PREFIX_TABLE (PREFIX_0F3814) },
5871 { PREFIX_TABLE (PREFIX_0F3815) },
5872 { "(bad)", { XX } },
5873 { PREFIX_TABLE (PREFIX_0F3817) },
5874 /* 18 */
5875 { "(bad)", { XX } },
5876 { "(bad)", { XX } },
5877 { "(bad)", { XX } },
5878 { "(bad)", { XX } },
5879 { "pabsb", { MX, EM } },
5880 { "pabsw", { MX, EM } },
5881 { "pabsd", { MX, EM } },
5882 { "(bad)", { XX } },
5883 /* 20 */
5884 { PREFIX_TABLE (PREFIX_0F3820) },
5885 { PREFIX_TABLE (PREFIX_0F3821) },
5886 { PREFIX_TABLE (PREFIX_0F3822) },
5887 { PREFIX_TABLE (PREFIX_0F3823) },
5888 { PREFIX_TABLE (PREFIX_0F3824) },
5889 { PREFIX_TABLE (PREFIX_0F3825) },
5890 { "(bad)", { XX } },
5891 { "(bad)", { XX } },
5892 /* 28 */
5893 { PREFIX_TABLE (PREFIX_0F3828) },
5894 { PREFIX_TABLE (PREFIX_0F3829) },
5895 { PREFIX_TABLE (PREFIX_0F382A) },
5896 { PREFIX_TABLE (PREFIX_0F382B) },
5897 { "(bad)", { XX } },
5898 { "(bad)", { XX } },
5899 { "(bad)", { XX } },
5900 { "(bad)", { XX } },
5901 /* 30 */
5902 { PREFIX_TABLE (PREFIX_0F3830) },
5903 { PREFIX_TABLE (PREFIX_0F3831) },
5904 { PREFIX_TABLE (PREFIX_0F3832) },
5905 { PREFIX_TABLE (PREFIX_0F3833) },
5906 { PREFIX_TABLE (PREFIX_0F3834) },
5907 { PREFIX_TABLE (PREFIX_0F3835) },
5908 { "(bad)", { XX } },
5909 { PREFIX_TABLE (PREFIX_0F3837) },
5910 /* 38 */
5911 { PREFIX_TABLE (PREFIX_0F3838) },
5912 { PREFIX_TABLE (PREFIX_0F3839) },
5913 { PREFIX_TABLE (PREFIX_0F383A) },
5914 { PREFIX_TABLE (PREFIX_0F383B) },
5915 { PREFIX_TABLE (PREFIX_0F383C) },
5916 { PREFIX_TABLE (PREFIX_0F383D) },
5917 { PREFIX_TABLE (PREFIX_0F383E) },
5918 { PREFIX_TABLE (PREFIX_0F383F) },
5919 /* 40 */
5920 { PREFIX_TABLE (PREFIX_0F3840) },
5921 { PREFIX_TABLE (PREFIX_0F3841) },
5922 { "(bad)", { XX } },
5923 { "(bad)", { XX } },
5924 { "(bad)", { XX } },
5925 { "(bad)", { XX } },
5926 { "(bad)", { XX } },
5927 { "(bad)", { XX } },
5928 /* 48 */
5929 { "(bad)", { XX } },
5930 { "(bad)", { XX } },
5931 { "(bad)", { XX } },
5932 { "(bad)", { XX } },
5933 { "(bad)", { XX } },
5934 { "(bad)", { XX } },
5935 { "(bad)", { XX } },
5936 { "(bad)", { XX } },
5937 /* 50 */
5938 { "(bad)", { XX } },
5939 { "(bad)", { XX } },
5940 { "(bad)", { XX } },
5941 { "(bad)", { XX } },
5942 { "(bad)", { XX } },
5943 { "(bad)", { XX } },
5944 { "(bad)", { XX } },
5945 { "(bad)", { XX } },
5946 /* 58 */
5947 { "(bad)", { XX } },
5948 { "(bad)", { XX } },
5949 { "(bad)", { XX } },
5950 { "(bad)", { XX } },
5951 { "(bad)", { XX } },
5952 { "(bad)", { XX } },
5953 { "(bad)", { XX } },
5954 { "(bad)", { XX } },
5955 /* 60 */
5956 { "(bad)", { XX } },
5957 { "(bad)", { XX } },
5958 { "(bad)", { XX } },
5959 { "(bad)", { XX } },
5960 { "(bad)", { XX } },
5961 { "(bad)", { XX } },
5962 { "(bad)", { XX } },
5963 { "(bad)", { XX } },
5964 /* 68 */
5965 { "(bad)", { XX } },
5966 { "(bad)", { XX } },
5967 { "(bad)", { XX } },
5968 { "(bad)", { XX } },
5969 { "(bad)", { XX } },
5970 { "(bad)", { XX } },
5971 { "(bad)", { XX } },
5972 { "(bad)", { XX } },
5973 /* 70 */
5974 { "(bad)", { XX } },
5975 { "(bad)", { XX } },
5976 { "(bad)", { XX } },
5977 { "(bad)", { XX } },
5978 { "(bad)", { XX } },
5979 { "(bad)", { XX } },
5980 { "(bad)", { XX } },
5981 { "(bad)", { XX } },
5982 /* 78 */
5983 { "(bad)", { XX } },
5984 { "(bad)", { XX } },
5985 { "(bad)", { XX } },
5986 { "(bad)", { XX } },
5987 { "(bad)", { XX } },
5988 { "(bad)", { XX } },
5989 { "(bad)", { XX } },
5990 { "(bad)", { XX } },
5991 /* 80 */
f1f8f695
L
5992 { PREFIX_TABLE (PREFIX_0F3880) },
5993 { PREFIX_TABLE (PREFIX_0F3881) },
c0f3af97
L
5994 { "(bad)", { XX } },
5995 { "(bad)", { XX } },
5996 { "(bad)", { XX } },
5997 { "(bad)", { XX } },
5998 { "(bad)", { XX } },
5999 { "(bad)", { XX } },
6000 /* 88 */
6001 { "(bad)", { XX } },
6002 { "(bad)", { XX } },
6003 { "(bad)", { XX } },
6004 { "(bad)", { XX } },
6005 { "(bad)", { XX } },
6006 { "(bad)", { XX } },
6007 { "(bad)", { XX } },
6008 { "(bad)", { XX } },
6009 /* 90 */
6010 { "(bad)", { XX } },
6011 { "(bad)", { XX } },
6012 { "(bad)", { XX } },
6013 { "(bad)", { XX } },
6014 { "(bad)", { XX } },
6015 { "(bad)", { XX } },
6016 { "(bad)", { XX } },
6017 { "(bad)", { XX } },
6018 /* 98 */
6019 { "(bad)", { XX } },
6020 { "(bad)", { XX } },
6021 { "(bad)", { XX } },
6022 { "(bad)", { XX } },
6023 { "(bad)", { XX } },
6024 { "(bad)", { XX } },
6025 { "(bad)", { XX } },
6026 { "(bad)", { XX } },
6027 /* a0 */
6028 { "(bad)", { XX } },
6029 { "(bad)", { XX } },
6030 { "(bad)", { XX } },
6031 { "(bad)", { XX } },
6032 { "(bad)", { XX } },
6033 { "(bad)", { XX } },
6034 { "(bad)", { XX } },
6035 { "(bad)", { XX } },
6036 /* a8 */
6037 { "(bad)", { XX } },
6038 { "(bad)", { XX } },
6039 { "(bad)", { XX } },
6040 { "(bad)", { XX } },
6041 { "(bad)", { XX } },
6042 { "(bad)", { XX } },
6043 { "(bad)", { XX } },
6044 { "(bad)", { XX } },
6045 /* b0 */
6046 { "(bad)", { XX } },
6047 { "(bad)", { XX } },
6048 { "(bad)", { XX } },
6049 { "(bad)", { XX } },
6050 { "(bad)", { XX } },
6051 { "(bad)", { XX } },
6052 { "(bad)", { XX } },
6053 { "(bad)", { XX } },
6054 /* b8 */
6055 { "(bad)", { XX } },
6056 { "(bad)", { XX } },
6057 { "(bad)", { XX } },
6058 { "(bad)", { XX } },
6059 { "(bad)", { XX } },
6060 { "(bad)", { XX } },
6061 { "(bad)", { XX } },
6062 { "(bad)", { XX } },
6063 /* c0 */
6064 { "(bad)", { XX } },
6065 { "(bad)", { XX } },
6066 { "(bad)", { XX } },
6067 { "(bad)", { XX } },
6068 { "(bad)", { XX } },
6069 { "(bad)", { XX } },
6070 { "(bad)", { XX } },
6071 { "(bad)", { XX } },
6072 /* c8 */
6073 { "(bad)", { XX } },
6074 { "(bad)", { XX } },
6075 { "(bad)", { XX } },
6076 { "(bad)", { XX } },
6077 { "(bad)", { XX } },
6078 { "(bad)", { XX } },
6079 { "(bad)", { XX } },
6080 { "(bad)", { XX } },
6081 /* d0 */
6082 { "(bad)", { XX } },
6083 { "(bad)", { XX } },
6084 { "(bad)", { XX } },
6085 { "(bad)", { XX } },
6086 { "(bad)", { XX } },
6087 { "(bad)", { XX } },
6088 { "(bad)", { XX } },
6089 { "(bad)", { XX } },
6090 /* d8 */
6091 { "(bad)", { XX } },
6092 { "(bad)", { XX } },
6093 { "(bad)", { XX } },
6094 { PREFIX_TABLE (PREFIX_0F38DB) },
6095 { PREFIX_TABLE (PREFIX_0F38DC) },
6096 { PREFIX_TABLE (PREFIX_0F38DD) },
6097 { PREFIX_TABLE (PREFIX_0F38DE) },
6098 { PREFIX_TABLE (PREFIX_0F38DF) },
6099 /* e0 */
6100 { "(bad)", { XX } },
6101 { "(bad)", { XX } },
6102 { "(bad)", { XX } },
6103 { "(bad)", { XX } },
6104 { "(bad)", { XX } },
6105 { "(bad)", { XX } },
6106 { "(bad)", { XX } },
6107 { "(bad)", { XX } },
6108 /* e8 */
6109 { "(bad)", { XX } },
6110 { "(bad)", { XX } },
6111 { "(bad)", { XX } },
6112 { "(bad)", { XX } },
6113 { "(bad)", { XX } },
6114 { "(bad)", { XX } },
6115 { "(bad)", { XX } },
6116 { "(bad)", { XX } },
6117 /* f0 */
6118 { PREFIX_TABLE (PREFIX_0F38F0) },
6119 { PREFIX_TABLE (PREFIX_0F38F1) },
6120 { "(bad)", { XX } },
6121 { "(bad)", { XX } },
6122 { "(bad)", { XX } },
6123 { "(bad)", { XX } },
6124 { "(bad)", { XX } },
6125 { "(bad)", { XX } },
6126 /* f8 */
6127 { "(bad)", { XX } },
6128 { "(bad)", { XX } },
6129 { "(bad)", { XX } },
6130 { "(bad)", { XX } },
6131 { "(bad)", { XX } },
6132 { "(bad)", { XX } },
6133 { "(bad)", { XX } },
6134 { "(bad)", { XX } },
6135 },
6136 /* THREE_BYTE_0F3A */
6137 {
6138 /* 00 */
6139 { "(bad)", { XX } },
6140 { "(bad)", { XX } },
6141 { "(bad)", { XX } },
6142 { "(bad)", { XX } },
6143 { "(bad)", { XX } },
6144 { "(bad)", { XX } },
6145 { "(bad)", { XX } },
6146 { "(bad)", { XX } },
6147 /* 08 */
6148 { PREFIX_TABLE (PREFIX_0F3A08) },
6149 { PREFIX_TABLE (PREFIX_0F3A09) },
6150 { PREFIX_TABLE (PREFIX_0F3A0A) },
6151 { PREFIX_TABLE (PREFIX_0F3A0B) },
6152 { PREFIX_TABLE (PREFIX_0F3A0C) },
6153 { PREFIX_TABLE (PREFIX_0F3A0D) },
6154 { PREFIX_TABLE (PREFIX_0F3A0E) },
6155 { "palignr", { MX, EM, Ib } },
6156 /* 10 */
6157 { "(bad)", { XX } },
6158 { "(bad)", { XX } },
6159 { "(bad)", { XX } },
6160 { "(bad)", { XX } },
6161 { PREFIX_TABLE (PREFIX_0F3A14) },
6162 { PREFIX_TABLE (PREFIX_0F3A15) },
6163 { PREFIX_TABLE (PREFIX_0F3A16) },
6164 { PREFIX_TABLE (PREFIX_0F3A17) },
6165 /* 18 */
6166 { "(bad)", { XX } },
6167 { "(bad)", { XX } },
6168 { "(bad)", { XX } },
6169 { "(bad)", { XX } },
6170 { "(bad)", { XX } },
6171 { "(bad)", { XX } },
6172 { "(bad)", { XX } },
6173 { "(bad)", { XX } },
6174 /* 20 */
6175 { PREFIX_TABLE (PREFIX_0F3A20) },
6176 { PREFIX_TABLE (PREFIX_0F3A21) },
6177 { PREFIX_TABLE (PREFIX_0F3A22) },
6178 { "(bad)", { XX } },
6179 { "(bad)", { XX } },
6180 { "(bad)", { XX } },
6181 { "(bad)", { XX } },
6182 { "(bad)", { XX } },
6183 /* 28 */
6184 { "(bad)", { XX } },
6185 { "(bad)", { XX } },
6186 { "(bad)", { XX } },
6187 { "(bad)", { XX } },
6188 { "(bad)", { XX } },
6189 { "(bad)", { XX } },
6190 { "(bad)", { XX } },
6191 { "(bad)", { XX } },
6192 /* 30 */
4e7d34a6
L
6193 { "(bad)", { XX } },
6194 { "(bad)", { XX } },
6195 { "(bad)", { XX } },
6196 { "(bad)", { XX } },
6197 { "(bad)", { XX } },
6198 { "(bad)", { XX } },
6199 { "(bad)", { XX } },
6200 { "(bad)", { XX } },
85f10a01 6201 /* 38 */
4e7d34a6
L
6202 { "(bad)", { XX } },
6203 { "(bad)", { XX } },
6204 { "(bad)", { XX } },
6205 { "(bad)", { XX } },
6206 { "(bad)", { XX } },
6207 { "(bad)", { XX } },
6208 { "(bad)", { XX } },
6209 { "(bad)", { XX } },
85f10a01 6210 /* 40 */
c0f3af97
L
6211 { PREFIX_TABLE (PREFIX_0F3A40) },
6212 { PREFIX_TABLE (PREFIX_0F3A41) },
6213 { PREFIX_TABLE (PREFIX_0F3A42) },
6214 { "(bad)", { XX } },
6215 { PREFIX_TABLE (PREFIX_0F3A44) },
6216 { "(bad)", { XX } },
6217 { "(bad)", { XX } },
6218 { "(bad)", { XX } },
85f10a01 6219 /* 48 */
4e7d34a6
L
6220 { "(bad)", { XX } },
6221 { "(bad)", { XX } },
6222 { "(bad)", { XX } },
6223 { "(bad)", { XX } },
4e7d34a6
L
6224 { "(bad)", { XX } },
6225 { "(bad)", { XX } },
6226 { "(bad)", { XX } },
6227 { "(bad)", { XX } },
c0f3af97 6228 /* 50 */
4e7d34a6
L
6229 { "(bad)", { XX } },
6230 { "(bad)", { XX } },
6231 { "(bad)", { XX } },
6232 { "(bad)", { XX } },
4e7d34a6
L
6233 { "(bad)", { XX } },
6234 { "(bad)", { XX } },
6235 { "(bad)", { XX } },
6236 { "(bad)", { XX } },
c0f3af97 6237 /* 58 */
4e7d34a6
L
6238 { "(bad)", { XX } },
6239 { "(bad)", { XX } },
6240 { "(bad)", { XX } },
6241 { "(bad)", { XX } },
4e7d34a6
L
6242 { "(bad)", { XX } },
6243 { "(bad)", { XX } },
6244 { "(bad)", { XX } },
6245 { "(bad)", { XX } },
c0f3af97
L
6246 /* 60 */
6247 { PREFIX_TABLE (PREFIX_0F3A60) },
6248 { PREFIX_TABLE (PREFIX_0F3A61) },
6249 { PREFIX_TABLE (PREFIX_0F3A62) },
6250 { PREFIX_TABLE (PREFIX_0F3A63) },
4e7d34a6
L
6251 { "(bad)", { XX } },
6252 { "(bad)", { XX } },
6253 { "(bad)", { XX } },
6254 { "(bad)", { XX } },
6255 /* 68 */
6256 { "(bad)", { XX } },
6257 { "(bad)", { XX } },
6258 { "(bad)", { XX } },
6259 { "(bad)", { XX } },
6260 { "(bad)", { XX } },
6261 { "(bad)", { XX } },
6262 { "(bad)", { XX } },
6263 { "(bad)", { XX } },
85f10a01 6264 /* 70 */
4e7d34a6
L
6265 { "(bad)", { XX } },
6266 { "(bad)", { XX } },
6267 { "(bad)", { XX } },
6268 { "(bad)", { XX } },
6269 { "(bad)", { XX } },
6270 { "(bad)", { XX } },
6271 { "(bad)", { XX } },
6272 { "(bad)", { XX } },
85f10a01 6273 /* 78 */
4e7d34a6
L
6274 { "(bad)", { XX } },
6275 { "(bad)", { XX } },
6276 { "(bad)", { XX } },
6277 { "(bad)", { XX } },
6278 { "(bad)", { XX } },
6279 { "(bad)", { XX } },
6280 { "(bad)", { XX } },
6281 { "(bad)", { XX } },
85f10a01 6282 /* 80 */
4e7d34a6
L
6283 { "(bad)", { XX } },
6284 { "(bad)", { XX } },
6285 { "(bad)", { XX } },
6286 { "(bad)", { XX } },
6287 { "(bad)", { XX } },
c0f3af97
L
6288 { "(bad)", { XX } },
6289 { "(bad)", { XX } },
6290 { "(bad)", { XX } },
85f10a01 6291 /* 88 */
4e7d34a6
L
6292 { "(bad)", { XX } },
6293 { "(bad)", { XX } },
6294 { "(bad)", { XX } },
6295 { "(bad)", { XX } },
6296 { "(bad)", { XX } },
6297 { "(bad)", { XX } },
c0f3af97
L
6298 { "(bad)", { XX } },
6299 { "(bad)", { XX } },
85f10a01 6300 /* 90 */
4e7d34a6
L
6301 { "(bad)", { XX } },
6302 { "(bad)", { XX } },
6303 { "(bad)", { XX } },
6304 { "(bad)", { XX } },
6305 { "(bad)", { XX } },
c0f3af97
L
6306 { "(bad)", { XX } },
6307 { "(bad)", { XX } },
6308 { "(bad)", { XX } },
85f10a01 6309 /* 98 */
4e7d34a6
L
6310 { "(bad)", { XX } },
6311 { "(bad)", { XX } },
6312 { "(bad)", { XX } },
6313 { "(bad)", { XX } },
6314 { "(bad)", { XX } },
6315 { "(bad)", { XX } },
c0f3af97
L
6316 { "(bad)", { XX } },
6317 { "(bad)", { XX } },
85f10a01 6318 /* a0 */
4e7d34a6
L
6319 { "(bad)", { XX } },
6320 { "(bad)", { XX } },
6321 { "(bad)", { XX } },
6322 { "(bad)", { XX } },
6323 { "(bad)", { XX } },
6324 { "(bad)", { XX } },
c0f3af97 6325 { "(bad)", { XX } },
4e7d34a6 6326 { "(bad)", { XX } },
85f10a01 6327 /* a8 */
4e7d34a6
L
6328 { "(bad)", { XX } },
6329 { "(bad)", { XX } },
6330 { "(bad)", { XX } },
6331 { "(bad)", { XX } },
6332 { "(bad)", { XX } },
6333 { "(bad)", { XX } },
6334 { "(bad)", { XX } },
6335 { "(bad)", { XX } },
85f10a01 6336 /* b0 */
4e7d34a6
L
6337 { "(bad)", { XX } },
6338 { "(bad)", { XX } },
6339 { "(bad)", { XX } },
6340 { "(bad)", { XX } },
6341 { "(bad)", { XX } },
6342 { "(bad)", { XX } },
c0f3af97 6343 { "(bad)", { XX } },
4e7d34a6 6344 { "(bad)", { XX } },
85f10a01 6345 /* b8 */
4e7d34a6
L
6346 { "(bad)", { XX } },
6347 { "(bad)", { XX } },
6348 { "(bad)", { XX } },
6349 { "(bad)", { XX } },
6350 { "(bad)", { XX } },
6351 { "(bad)", { XX } },
6352 { "(bad)", { XX } },
6353 { "(bad)", { XX } },
85f10a01 6354 /* c0 */
4e7d34a6
L
6355 { "(bad)", { XX } },
6356 { "(bad)", { XX } },
6357 { "(bad)", { XX } },
6358 { "(bad)", { XX } },
6359 { "(bad)", { XX } },
6360 { "(bad)", { XX } },
6361 { "(bad)", { XX } },
6362 { "(bad)", { XX } },
85f10a01 6363 /* c8 */
4e7d34a6
L
6364 { "(bad)", { XX } },
6365 { "(bad)", { XX } },
6366 { "(bad)", { XX } },
6367 { "(bad)", { XX } },
6368 { "(bad)", { XX } },
6369 { "(bad)", { XX } },
6370 { "(bad)", { XX } },
6371 { "(bad)", { XX } },
85f10a01 6372 /* d0 */
4e7d34a6
L
6373 { "(bad)", { XX } },
6374 { "(bad)", { XX } },
6375 { "(bad)", { XX } },
6376 { "(bad)", { XX } },
6377 { "(bad)", { XX } },
6378 { "(bad)", { XX } },
6379 { "(bad)", { XX } },
6380 { "(bad)", { XX } },
85f10a01 6381 /* d8 */
4e7d34a6
L
6382 { "(bad)", { XX } },
6383 { "(bad)", { XX } },
6384 { "(bad)", { XX } },
6385 { "(bad)", { XX } },
6386 { "(bad)", { XX } },
6387 { "(bad)", { XX } },
6388 { "(bad)", { XX } },
c0f3af97 6389 { PREFIX_TABLE (PREFIX_0F3ADF) },
85f10a01 6390 /* e0 */
4e7d34a6
L
6391 { "(bad)", { XX } },
6392 { "(bad)", { XX } },
6393 { "(bad)", { XX } },
6394 { "(bad)", { XX } },
6395 { "(bad)", { XX } },
6396 { "(bad)", { XX } },
6397 { "(bad)", { XX } },
6398 { "(bad)", { XX } },
85f10a01 6399 /* e8 */
4e7d34a6
L
6400 { "(bad)", { XX } },
6401 { "(bad)", { XX } },
6402 { "(bad)", { XX } },
6403 { "(bad)", { XX } },
6404 { "(bad)", { XX } },
6405 { "(bad)", { XX } },
6406 { "(bad)", { XX } },
6407 { "(bad)", { XX } },
85f10a01 6408 /* f0 */
4e7d34a6
L
6409 { "(bad)", { XX } },
6410 { "(bad)", { XX } },
6411 { "(bad)", { XX } },
6412 { "(bad)", { XX } },
6413 { "(bad)", { XX } },
6414 { "(bad)", { XX } },
6415 { "(bad)", { XX } },
6416 { "(bad)", { XX } },
85f10a01 6417 /* f8 */
4e7d34a6
L
6418 { "(bad)", { XX } },
6419 { "(bad)", { XX } },
6420 { "(bad)", { XX } },
6421 { "(bad)", { XX } },
6422 { "(bad)", { XX } },
6423 { "(bad)", { XX } },
6424 { "(bad)", { XX } },
6425 { "(bad)", { XX } },
85f10a01 6426 },
c0f3af97 6427 /* THREE_BYTE_0F7A */
85f10a01
MM
6428 {
6429 /* 00 */
4e7d34a6
L
6430 { "(bad)", { XX } },
6431 { "(bad)", { XX } },
6432 { "(bad)", { XX } },
6433 { "(bad)", { XX } },
6434 { "(bad)", { XX } },
6435 { "(bad)", { XX } },
6436 { "(bad)", { XX } },
6437 { "(bad)", { XX } },
85f10a01 6438 /* 08 */
4e7d34a6
L
6439 { "(bad)", { XX } },
6440 { "(bad)", { XX } },
6441 { "(bad)", { XX } },
6442 { "(bad)", { XX } },
6443 { "(bad)", { XX } },
6444 { "(bad)", { XX } },
6445 { "(bad)", { XX } },
6446 { "(bad)", { XX } },
85f10a01 6447 /* 10 */
c0f3af97
L
6448 { "frczps", { XM, EXq } },
6449 { "frczpd", { XM, EXq } },
6450 { "frczss", { XM, EXq } },
6451 { "frczsd", { XM, EXq } },
4e7d34a6
L
6452 { "(bad)", { XX } },
6453 { "(bad)", { XX } },
6454 { "(bad)", { XX } },
6455 { "(bad)", { XX } },
85f10a01 6456 /* 18 */
4e7d34a6
L
6457 { "(bad)", { XX } },
6458 { "(bad)", { XX } },
6459 { "(bad)", { XX } },
6460 { "(bad)", { XX } },
6461 { "(bad)", { XX } },
6462 { "(bad)", { XX } },
6463 { "(bad)", { XX } },
6464 { "(bad)", { XX } },
85f10a01 6465 /* 20 */
c0f3af97 6466 { "ptest", { XX } },
4e7d34a6
L
6467 { "(bad)", { XX } },
6468 { "(bad)", { XX } },
6469 { "(bad)", { XX } },
6470 { "(bad)", { XX } },
6471 { "(bad)", { XX } },
6472 { "(bad)", { XX } },
6473 { "(bad)", { XX } },
85f10a01 6474 /* 28 */
4e7d34a6
L
6475 { "(bad)", { XX } },
6476 { "(bad)", { XX } },
6477 { "(bad)", { XX } },
6478 { "(bad)", { XX } },
4e7d34a6
L
6479 { "(bad)", { XX } },
6480 { "(bad)", { XX } },
6481 { "(bad)", { XX } },
6482 { "(bad)", { XX } },
c0f3af97
L
6483 /* 30 */
6484 { "cvtph2ps", { XM, EXd } },
6485 { "cvtps2ph", { EXd, XM } },
4e7d34a6 6486 { "(bad)", { XX } },
4e7d34a6
L
6487 { "(bad)", { XX } },
6488 { "(bad)", { XX } },
6489 { "(bad)", { XX } },
6490 { "(bad)", { XX } },
6491 { "(bad)", { XX } },
c0f3af97 6492 /* 38 */
4e7d34a6
L
6493 { "(bad)", { XX } },
6494 { "(bad)", { XX } },
6495 { "(bad)", { XX } },
4e7d34a6
L
6496 { "(bad)", { XX } },
6497 { "(bad)", { XX } },
6498 { "(bad)", { XX } },
6499 { "(bad)", { XX } },
6500 { "(bad)", { XX } },
c0f3af97 6501 /* 40 */
4e7d34a6 6502 { "(bad)", { XX } },
c0f3af97
L
6503 { "phaddbw", { XM, EXq } },
6504 { "phaddbd", { XM, EXq } },
6505 { "phaddbq", { XM, EXq } },
4e7d34a6
L
6506 { "(bad)", { XX } },
6507 { "(bad)", { XX } },
c0f3af97
L
6508 { "phaddwd", { XM, EXq } },
6509 { "phaddwq", { XM, EXq } },
85f10a01 6510 /* 48 */
4e7d34a6
L
6511 { "(bad)", { XX } },
6512 { "(bad)", { XX } },
6513 { "(bad)", { XX } },
c0f3af97 6514 { "phadddq", { XM, EXq } },
4e7d34a6
L
6515 { "(bad)", { XX } },
6516 { "(bad)", { XX } },
6517 { "(bad)", { XX } },
6518 { "(bad)", { XX } },
c0f3af97 6519 /* 50 */
4e7d34a6 6520 { "(bad)", { XX } },
c0f3af97
L
6521 { "phaddubw", { XM, EXq } },
6522 { "phaddubd", { XM, EXq } },
6523 { "phaddubq", { XM, EXq } },
4e7d34a6
L
6524 { "(bad)", { XX } },
6525 { "(bad)", { XX } },
c0f3af97
L
6526 { "phadduwd", { XM, EXq } },
6527 { "phadduwq", { XM, EXq } },
85f10a01 6528 /* 58 */
4e7d34a6
L
6529 { "(bad)", { XX } },
6530 { "(bad)", { XX } },
6531 { "(bad)", { XX } },
c0f3af97 6532 { "phaddudq", { XM, EXq } },
4e7d34a6
L
6533 { "(bad)", { XX } },
6534 { "(bad)", { XX } },
6535 { "(bad)", { XX } },
6536 { "(bad)", { XX } },
85f10a01 6537 /* 60 */
4e7d34a6 6538 { "(bad)", { XX } },
c0f3af97
L
6539 { "phsubbw", { XM, EXq } },
6540 { "phsubbd", { XM, EXq } },
6541 { "phsubbq", { XM, EXq } },
4e7d34a6
L
6542 { "(bad)", { XX } },
6543 { "(bad)", { XX } },
6544 { "(bad)", { XX } },
6545 { "(bad)", { XX } },
c0f3af97
L
6546 /* 68 */
6547 { "(bad)", { XX } },
4e7d34a6
L
6548 { "(bad)", { XX } },
6549 { "(bad)", { XX } },
6550 { "(bad)", { XX } },
4e7d34a6
L
6551 { "(bad)", { XX } },
6552 { "(bad)", { XX } },
6553 { "(bad)", { XX } },
6554 { "(bad)", { XX } },
85f10a01 6555 /* 70 */
4e7d34a6
L
6556 { "(bad)", { XX } },
6557 { "(bad)", { XX } },
6558 { "(bad)", { XX } },
6559 { "(bad)", { XX } },
6560 { "(bad)", { XX } },
6561 { "(bad)", { XX } },
6562 { "(bad)", { XX } },
6563 { "(bad)", { XX } },
85f10a01 6564 /* 78 */
4e7d34a6
L
6565 { "(bad)", { XX } },
6566 { "(bad)", { XX } },
6567 { "(bad)", { XX } },
6568 { "(bad)", { XX } },
6569 { "(bad)", { XX } },
6570 { "(bad)", { XX } },
6571 { "(bad)", { XX } },
6572 { "(bad)", { XX } },
85f10a01 6573 /* 80 */
4e7d34a6
L
6574 { "(bad)", { XX } },
6575 { "(bad)", { XX } },
6576 { "(bad)", { XX } },
6577 { "(bad)", { XX } },
6578 { "(bad)", { XX } },
6579 { "(bad)", { XX } },
6580 { "(bad)", { XX } },
6581 { "(bad)", { XX } },
6582 /* 88 */
6583 { "(bad)", { XX } },
6584 { "(bad)", { XX } },
6585 { "(bad)", { XX } },
6586 { "(bad)", { XX } },
6587 { "(bad)", { XX } },
6588 { "(bad)", { XX } },
6589 { "(bad)", { XX } },
6590 { "(bad)", { XX } },
6591 /* 90 */
6592 { "(bad)", { XX } },
6593 { "(bad)", { XX } },
6594 { "(bad)", { XX } },
6595 { "(bad)", { XX } },
6596 { "(bad)", { XX } },
6597 { "(bad)", { XX } },
6598 { "(bad)", { XX } },
6599 { "(bad)", { XX } },
6600 /* 98 */
6601 { "(bad)", { XX } },
6602 { "(bad)", { XX } },
6603 { "(bad)", { XX } },
6604 { "(bad)", { XX } },
6605 { "(bad)", { XX } },
6606 { "(bad)", { XX } },
6607 { "(bad)", { XX } },
6608 { "(bad)", { XX } },
6609 /* a0 */
6610 { "(bad)", { XX } },
6611 { "(bad)", { XX } },
6612 { "(bad)", { XX } },
6613 { "(bad)", { XX } },
6614 { "(bad)", { XX } },
6615 { "(bad)", { XX } },
6616 { "(bad)", { XX } },
6617 { "(bad)", { XX } },
6618 /* a8 */
6619 { "(bad)", { XX } },
6620 { "(bad)", { XX } },
6621 { "(bad)", { XX } },
6622 { "(bad)", { XX } },
6623 { "(bad)", { XX } },
6624 { "(bad)", { XX } },
6625 { "(bad)", { XX } },
6626 { "(bad)", { XX } },
6627 /* b0 */
6628 { "(bad)", { XX } },
6629 { "(bad)", { XX } },
6630 { "(bad)", { XX } },
6631 { "(bad)", { XX } },
6632 { "(bad)", { XX } },
6633 { "(bad)", { XX } },
6634 { "(bad)", { XX } },
6635 { "(bad)", { XX } },
6636 /* b8 */
6637 { "(bad)", { XX } },
6638 { "(bad)", { XX } },
6639 { "(bad)", { XX } },
6640 { "(bad)", { XX } },
6641 { "(bad)", { XX } },
6642 { "(bad)", { XX } },
6643 { "(bad)", { XX } },
6644 { "(bad)", { XX } },
6645 /* c0 */
6646 { "(bad)", { XX } },
6647 { "(bad)", { XX } },
6648 { "(bad)", { XX } },
6649 { "(bad)", { XX } },
6650 { "(bad)", { XX } },
6651 { "(bad)", { XX } },
6652 { "(bad)", { XX } },
6653 { "(bad)", { XX } },
6654 /* c8 */
6655 { "(bad)", { XX } },
6656 { "(bad)", { XX } },
6657 { "(bad)", { XX } },
6658 { "(bad)", { XX } },
6659 { "(bad)", { XX } },
6660 { "(bad)", { XX } },
6661 { "(bad)", { XX } },
6662 { "(bad)", { XX } },
6663 /* d0 */
6664 { "(bad)", { XX } },
6665 { "(bad)", { XX } },
6666 { "(bad)", { XX } },
6667 { "(bad)", { XX } },
6668 { "(bad)", { XX } },
6669 { "(bad)", { XX } },
6670 { "(bad)", { XX } },
6671 { "(bad)", { XX } },
6672 /* d8 */
6673 { "(bad)", { XX } },
6674 { "(bad)", { XX } },
6675 { "(bad)", { XX } },
6676 { "(bad)", { XX } },
6677 { "(bad)", { XX } },
6678 { "(bad)", { XX } },
6679 { "(bad)", { XX } },
6680 { "(bad)", { XX } },
6681 /* e0 */
6682 { "(bad)", { XX } },
6683 { "(bad)", { XX } },
6684 { "(bad)", { XX } },
6685 { "(bad)", { XX } },
6686 { "(bad)", { XX } },
6687 { "(bad)", { XX } },
6688 { "(bad)", { XX } },
6689 { "(bad)", { XX } },
6690 /* e8 */
6691 { "(bad)", { XX } },
6692 { "(bad)", { XX } },
6693 { "(bad)", { XX } },
6694 { "(bad)", { XX } },
6695 { "(bad)", { XX } },
6696 { "(bad)", { XX } },
6697 { "(bad)", { XX } },
6698 { "(bad)", { XX } },
6699 /* f0 */
6700 { "(bad)", { XX } },
6701 { "(bad)", { XX } },
6702 { "(bad)", { XX } },
6703 { "(bad)", { XX } },
6704 { "(bad)", { XX } },
6705 { "(bad)", { XX } },
6706 { "(bad)", { XX } },
6707 { "(bad)", { XX } },
6708 /* f8 */
6709 { "(bad)", { XX } },
6710 { "(bad)", { XX } },
6711 { "(bad)", { XX } },
6712 { "(bad)", { XX } },
6713 { "(bad)", { XX } },
6714 { "(bad)", { XX } },
6715 { "(bad)", { XX } },
6716 { "(bad)", { XX } },
6717 },
c0f3af97 6718 /* THREE_BYTE_0F7B */
4e7d34a6
L
6719 {
6720 /* 00 */
c0f3af97
L
6721 { "(bad)", { XX } },
6722 { "(bad)", { XX } },
6723 { "(bad)", { XX } },
6724 { "(bad)", { XX } },
6725 { "(bad)", { XX } },
6726 { "(bad)", { XX } },
6727 { "(bad)", { XX } },
6728 { "(bad)", { XX } },
4e7d34a6 6729 /* 08 */
c0f3af97
L
6730 { "(bad)", { XX } },
6731 { "(bad)", { XX } },
6732 { "(bad)", { XX } },
6733 { "(bad)", { XX } },
d5d7db8e
L
6734 { "(bad)", { XX } },
6735 { "(bad)", { XX } },
6736 { "(bad)", { XX } },
6737 { "(bad)", { XX } },
4e7d34a6 6738 /* 10 */
d5d7db8e
L
6739 { "(bad)", { XX } },
6740 { "(bad)", { XX } },
6741 { "(bad)", { XX } },
d5d7db8e 6742 { "(bad)", { XX } },
c0f3af97
L
6743 { "(bad)", { XX } },
6744 { "(bad)", { XX } },
6745 { "(bad)", { XX } },
6746 { "(bad)", { XX } },
4e7d34a6 6747 /* 18 */
d5d7db8e
L
6748 { "(bad)", { XX } },
6749 { "(bad)", { XX } },
6750 { "(bad)", { XX } },
6751 { "(bad)", { XX } },
c0f3af97
L
6752 { "(bad)", { XX } },
6753 { "(bad)", { XX } },
6754 { "(bad)", { XX } },
d5d7db8e 6755 { "(bad)", { XX } },
4e7d34a6 6756 /* 20 */
c0f3af97
L
6757 { "(bad)", { XX } },
6758 { "(bad)", { XX } },
6759 { "(bad)", { XX } },
6760 { "(bad)", { XX } },
6761 { "(bad)", { XX } },
6762 { "(bad)", { XX } },
d5d7db8e
L
6763 { "(bad)", { XX } },
6764 { "(bad)", { XX } },
4e7d34a6 6765 /* 28 */
c0f3af97
L
6766 { "(bad)", { XX } },
6767 { "(bad)", { XX } },
6768 { "(bad)", { XX } },
6769 { "(bad)", { XX } },
d5d7db8e
L
6770 { "(bad)", { XX } },
6771 { "(bad)", { XX } },
6772 { "(bad)", { XX } },
6773 { "(bad)", { XX } },
4e7d34a6 6774 /* 30 */
d5d7db8e 6775 { "(bad)", { XX } },
d5d7db8e
L
6776 { "(bad)", { XX } },
6777 { "(bad)", { XX } },
6778 { "(bad)", { XX } },
6779 { "(bad)", { XX } },
6780 { "(bad)", { XX } },
6781 { "(bad)", { XX } },
c0f3af97
L
6782 { "(bad)", { XX } },
6783 /* 38 */
6784 { "(bad)", { XX } },
6785 { "(bad)", { XX } },
6786 { "(bad)", { XX } },
6787 { "(bad)", { XX } },
d5d7db8e
L
6788 { "(bad)", { XX } },
6789 { "(bad)", { XX } },
6790 { "(bad)", { XX } },
6791 { "(bad)", { XX } },
c0f3af97
L
6792 /* 40 */
6793 { "protb", { XM, EXq, Ib } },
6794 { "protw", { XM, EXq, Ib } },
6795 { "protd", { XM, EXq, Ib } },
6796 { "protq", { XM, EXq, Ib } },
6797 { "pshlb", { XM, EXq, Ib } },
6798 { "pshlw", { XM, EXq, Ib } },
6799 { "pshld", { XM, EXq, Ib } },
6800 { "pshlq", { XM, EXq, Ib } },
6801 /* 48 */
6802 { "pshab", { XM, EXq, Ib } },
6803 { "pshaw", { XM, EXq, Ib } },
6804 { "pshad", { XM, EXq, Ib } },
6805 { "pshaq", { XM, EXq, Ib } },
d5d7db8e
L
6806 { "(bad)", { XX } },
6807 { "(bad)", { XX } },
6808 { "(bad)", { XX } },
6809 { "(bad)", { XX } },
4e7d34a6 6810 /* 50 */
d5d7db8e
L
6811 { "(bad)", { XX } },
6812 { "(bad)", { XX } },
6813 { "(bad)", { XX } },
6814 { "(bad)", { XX } },
6815 { "(bad)", { XX } },
6816 { "(bad)", { XX } },
6817 { "(bad)", { XX } },
6818 { "(bad)", { XX } },
4e7d34a6 6819 /* 58 */
d5d7db8e
L
6820 { "(bad)", { XX } },
6821 { "(bad)", { XX } },
6822 { "(bad)", { XX } },
6823 { "(bad)", { XX } },
6824 { "(bad)", { XX } },
6825 { "(bad)", { XX } },
6826 { "(bad)", { XX } },
6827 { "(bad)", { XX } },
4e7d34a6 6828 /* 60 */
d5d7db8e
L
6829 { "(bad)", { XX } },
6830 { "(bad)", { XX } },
6831 { "(bad)", { XX } },
6832 { "(bad)", { XX } },
6833 { "(bad)", { XX } },
6834 { "(bad)", { XX } },
6835 { "(bad)", { XX } },
6836 { "(bad)", { XX } },
4e7d34a6 6837 /* 68 */
d5d7db8e
L
6838 { "(bad)", { XX } },
6839 { "(bad)", { XX } },
6840 { "(bad)", { XX } },
6841 { "(bad)", { XX } },
6842 { "(bad)", { XX } },
6843 { "(bad)", { XX } },
6844 { "(bad)", { XX } },
6845 { "(bad)", { XX } },
4e7d34a6 6846 /* 70 */
d5d7db8e
L
6847 { "(bad)", { XX } },
6848 { "(bad)", { XX } },
6849 { "(bad)", { XX } },
6850 { "(bad)", { XX } },
6851 { "(bad)", { XX } },
6852 { "(bad)", { XX } },
6853 { "(bad)", { XX } },
6854 { "(bad)", { XX } },
4e7d34a6 6855 /* 78 */
d5d7db8e
L
6856 { "(bad)", { XX } },
6857 { "(bad)", { XX } },
6858 { "(bad)", { XX } },
6859 { "(bad)", { XX } },
6860 { "(bad)", { XX } },
6861 { "(bad)", { XX } },
6862 { "(bad)", { XX } },
6863 { "(bad)", { XX } },
4e7d34a6 6864 /* 80 */
d5d7db8e
L
6865 { "(bad)", { XX } },
6866 { "(bad)", { XX } },
6867 { "(bad)", { XX } },
6868 { "(bad)", { XX } },
6869 { "(bad)", { XX } },
6870 { "(bad)", { XX } },
6871 { "(bad)", { XX } },
6872 { "(bad)", { XX } },
4e7d34a6 6873 /* 88 */
d5d7db8e
L
6874 { "(bad)", { XX } },
6875 { "(bad)", { XX } },
6876 { "(bad)", { XX } },
6877 { "(bad)", { XX } },
6878 { "(bad)", { XX } },
6879 { "(bad)", { XX } },
6880 { "(bad)", { XX } },
6881 { "(bad)", { XX } },
4e7d34a6 6882 /* 90 */
d5d7db8e
L
6883 { "(bad)", { XX } },
6884 { "(bad)", { XX } },
6885 { "(bad)", { XX } },
6886 { "(bad)", { XX } },
6887 { "(bad)", { XX } },
6888 { "(bad)", { XX } },
6889 { "(bad)", { XX } },
6890 { "(bad)", { XX } },
4e7d34a6 6891 /* 98 */
d5d7db8e
L
6892 { "(bad)", { XX } },
6893 { "(bad)", { XX } },
6894 { "(bad)", { XX } },
6895 { "(bad)", { XX } },
6896 { "(bad)", { XX } },
6897 { "(bad)", { XX } },
6898 { "(bad)", { XX } },
6899 { "(bad)", { XX } },
4e7d34a6 6900 /* a0 */
d5d7db8e
L
6901 { "(bad)", { XX } },
6902 { "(bad)", { XX } },
6903 { "(bad)", { XX } },
6904 { "(bad)", { XX } },
6905 { "(bad)", { XX } },
6906 { "(bad)", { XX } },
6907 { "(bad)", { XX } },
6908 { "(bad)", { XX } },
4e7d34a6 6909 /* a8 */
d5d7db8e
L
6910 { "(bad)", { XX } },
6911 { "(bad)", { XX } },
6912 { "(bad)", { XX } },
6913 { "(bad)", { XX } },
6914 { "(bad)", { XX } },
6915 { "(bad)", { XX } },
6916 { "(bad)", { XX } },
6917 { "(bad)", { XX } },
6918 /* b0 */
6919 { "(bad)", { XX } },
6920 { "(bad)", { XX } },
6921 { "(bad)", { XX } },
6922 { "(bad)", { XX } },
6923 { "(bad)", { XX } },
6924 { "(bad)", { XX } },
6925 { "(bad)", { XX } },
6926 { "(bad)", { XX } },
85f10a01 6927 /* b8 */
d5d7db8e
L
6928 { "(bad)", { XX } },
6929 { "(bad)", { XX } },
6930 { "(bad)", { XX } },
6931 { "(bad)", { XX } },
6932 { "(bad)", { XX } },
6933 { "(bad)", { XX } },
6934 { "(bad)", { XX } },
6935 { "(bad)", { XX } },
85f10a01 6936 /* c0 */
d5d7db8e
L
6937 { "(bad)", { XX } },
6938 { "(bad)", { XX } },
6939 { "(bad)", { XX } },
6940 { "(bad)", { XX } },
6941 { "(bad)", { XX } },
6942 { "(bad)", { XX } },
6943 { "(bad)", { XX } },
6944 { "(bad)", { XX } },
85f10a01 6945 /* c8 */
d5d7db8e
L
6946 { "(bad)", { XX } },
6947 { "(bad)", { XX } },
6948 { "(bad)", { XX } },
6949 { "(bad)", { XX } },
6950 { "(bad)", { XX } },
6951 { "(bad)", { XX } },
6952 { "(bad)", { XX } },
6953 { "(bad)", { XX } },
85f10a01 6954 /* d0 */
d5d7db8e
L
6955 { "(bad)", { XX } },
6956 { "(bad)", { XX } },
6957 { "(bad)", { XX } },
6958 { "(bad)", { XX } },
6959 { "(bad)", { XX } },
6960 { "(bad)", { XX } },
6961 { "(bad)", { XX } },
6962 { "(bad)", { XX } },
85f10a01 6963 /* d8 */
d5d7db8e
L
6964 { "(bad)", { XX } },
6965 { "(bad)", { XX } },
6966 { "(bad)", { XX } },
6967 { "(bad)", { XX } },
6968 { "(bad)", { XX } },
6969 { "(bad)", { XX } },
6970 { "(bad)", { XX } },
6971 { "(bad)", { XX } },
85f10a01 6972 /* e0 */
d5d7db8e
L
6973 { "(bad)", { XX } },
6974 { "(bad)", { XX } },
6975 { "(bad)", { XX } },
6976 { "(bad)", { XX } },
6977 { "(bad)", { XX } },
6978 { "(bad)", { XX } },
6979 { "(bad)", { XX } },
6980 { "(bad)", { XX } },
85f10a01 6981 /* e8 */
d5d7db8e
L
6982 { "(bad)", { XX } },
6983 { "(bad)", { XX } },
6984 { "(bad)", { XX } },
6985 { "(bad)", { XX } },
6986 { "(bad)", { XX } },
6987 { "(bad)", { XX } },
6988 { "(bad)", { XX } },
6989 { "(bad)", { XX } },
85f10a01 6990 /* f0 */
c0f3af97
L
6991 { "(bad)", { XX } },
6992 { "(bad)", { XX } },
d5d7db8e
L
6993 { "(bad)", { XX } },
6994 { "(bad)", { XX } },
6995 { "(bad)", { XX } },
6996 { "(bad)", { XX } },
6997 { "(bad)", { XX } },
6998 { "(bad)", { XX } },
85f10a01 6999 /* f8 */
d5d7db8e
L
7000 { "(bad)", { XX } },
7001 { "(bad)", { XX } },
7002 { "(bad)", { XX } },
7003 { "(bad)", { XX } },
7004 { "(bad)", { XX } },
7005 { "(bad)", { XX } },
7006 { "(bad)", { XX } },
7007 { "(bad)", { XX } },
85f10a01 7008 },
c0f3af97
L
7009};
7010
7011static const struct dis386 vex_table[][256] = {
7012 /* VEX_0F */
85f10a01
MM
7013 {
7014 /* 00 */
d5d7db8e
L
7015 { "(bad)", { XX } },
7016 { "(bad)", { XX } },
7017 { "(bad)", { XX } },
7018 { "(bad)", { XX } },
7019 { "(bad)", { XX } },
7020 { "(bad)", { XX } },
7021 { "(bad)", { XX } },
7022 { "(bad)", { XX } },
85f10a01 7023 /* 08 */
d5d7db8e
L
7024 { "(bad)", { XX } },
7025 { "(bad)", { XX } },
7026 { "(bad)", { XX } },
7027 { "(bad)", { XX } },
d5d7db8e
L
7028 { "(bad)", { XX } },
7029 { "(bad)", { XX } },
7030 { "(bad)", { XX } },
7031 { "(bad)", { XX } },
c0f3af97
L
7032 /* 10 */
7033 { PREFIX_TABLE (PREFIX_VEX_10) },
7034 { PREFIX_TABLE (PREFIX_VEX_11) },
7035 { PREFIX_TABLE (PREFIX_VEX_12) },
7036 { MOD_TABLE (MOD_VEX_13) },
7037 { "vunpcklpX", { XM, Vex, EXx } },
7038 { "vunpckhpX", { XM, Vex, EXx } },
7039 { PREFIX_TABLE (PREFIX_VEX_16) },
7040 { MOD_TABLE (MOD_VEX_17) },
7041 /* 18 */
d5d7db8e
L
7042 { "(bad)", { XX } },
7043 { "(bad)", { XX } },
7044 { "(bad)", { XX } },
d5d7db8e
L
7045 { "(bad)", { XX } },
7046 { "(bad)", { XX } },
7047 { "(bad)", { XX } },
7048 { "(bad)", { XX } },
7049 { "(bad)", { XX } },
c0f3af97 7050 /* 20 */
d5d7db8e
L
7051 { "(bad)", { XX } },
7052 { "(bad)", { XX } },
7053 { "(bad)", { XX } },
7054 { "(bad)", { XX } },
7055 { "(bad)", { XX } },
7056 { "(bad)", { XX } },
7057 { "(bad)", { XX } },
7058 { "(bad)", { XX } },
c0f3af97
L
7059 /* 28 */
7060 { "vmovapX", { XM, EXx } },
b6169b20 7061 { "vmovapX", { EXxS, XM } },
c0f3af97
L
7062 { PREFIX_TABLE (PREFIX_VEX_2A) },
7063 { MOD_TABLE (MOD_VEX_2B) },
7064 { PREFIX_TABLE (PREFIX_VEX_2C) },
7065 { PREFIX_TABLE (PREFIX_VEX_2D) },
7066 { PREFIX_TABLE (PREFIX_VEX_2E) },
7067 { PREFIX_TABLE (PREFIX_VEX_2F) },
85f10a01 7068 /* 30 */
d5d7db8e
L
7069 { "(bad)", { XX } },
7070 { "(bad)", { XX } },
7071 { "(bad)", { XX } },
7072 { "(bad)", { XX } },
7073 { "(bad)", { XX } },
7074 { "(bad)", { XX } },
7075 { "(bad)", { XX } },
7076 { "(bad)", { XX } },
4e7d34a6 7077 /* 38 */
d5d7db8e
L
7078 { "(bad)", { XX } },
7079 { "(bad)", { XX } },
7080 { "(bad)", { XX } },
7081 { "(bad)", { XX } },
7082 { "(bad)", { XX } },
7083 { "(bad)", { XX } },
7084 { "(bad)", { XX } },
7085 { "(bad)", { XX } },
7086 /* 40 */
c0f3af97
L
7087 { "(bad)", { XX } },
7088 { "(bad)", { XX } },
7089 { "(bad)", { XX } },
d5d7db8e
L
7090 { "(bad)", { XX } },
7091 { "(bad)", { XX } },
7092 { "(bad)", { XX } },
7093 { "(bad)", { XX } },
7094 { "(bad)", { XX } },
85f10a01 7095 /* 48 */
85f10a01
MM
7096 { "(bad)", { XX } },
7097 { "(bad)", { XX } },
7098 { "(bad)", { XX } },
7099 { "(bad)", { XX } },
7100 { "(bad)", { XX } },
7101 { "(bad)", { XX } },
7102 { "(bad)", { XX } },
7103 { "(bad)", { XX } },
d5d7db8e 7104 /* 50 */
c0f3af97
L
7105 { MOD_TABLE (MOD_VEX_51) },
7106 { PREFIX_TABLE (PREFIX_VEX_51) },
7107 { PREFIX_TABLE (PREFIX_VEX_52) },
7108 { PREFIX_TABLE (PREFIX_VEX_53) },
7109 { "vandpX", { XM, Vex, EXx } },
7110 { "vandnpX", { XM, Vex, EXx } },
7111 { "vorpX", { XM, Vex, EXx } },
7112 { "vxorpX", { XM, Vex, EXx } },
7113 /* 58 */
7114 { PREFIX_TABLE (PREFIX_VEX_58) },
7115 { PREFIX_TABLE (PREFIX_VEX_59) },
7116 { PREFIX_TABLE (PREFIX_VEX_5A) },
7117 { PREFIX_TABLE (PREFIX_VEX_5B) },
7118 { PREFIX_TABLE (PREFIX_VEX_5C) },
7119 { PREFIX_TABLE (PREFIX_VEX_5D) },
7120 { PREFIX_TABLE (PREFIX_VEX_5E) },
7121 { PREFIX_TABLE (PREFIX_VEX_5F) },
7122 /* 60 */
7123 { PREFIX_TABLE (PREFIX_VEX_60) },
7124 { PREFIX_TABLE (PREFIX_VEX_61) },
7125 { PREFIX_TABLE (PREFIX_VEX_62) },
7126 { PREFIX_TABLE (PREFIX_VEX_63) },
7127 { PREFIX_TABLE (PREFIX_VEX_64) },
7128 { PREFIX_TABLE (PREFIX_VEX_65) },
7129 { PREFIX_TABLE (PREFIX_VEX_66) },
7130 { PREFIX_TABLE (PREFIX_VEX_67) },
7131 /* 68 */
7132 { PREFIX_TABLE (PREFIX_VEX_68) },
7133 { PREFIX_TABLE (PREFIX_VEX_69) },
7134 { PREFIX_TABLE (PREFIX_VEX_6A) },
7135 { PREFIX_TABLE (PREFIX_VEX_6B) },
7136 { PREFIX_TABLE (PREFIX_VEX_6C) },
7137 { PREFIX_TABLE (PREFIX_VEX_6D) },
7138 { PREFIX_TABLE (PREFIX_VEX_6E) },
7139 { PREFIX_TABLE (PREFIX_VEX_6F) },
7140 /* 70 */
7141 { PREFIX_TABLE (PREFIX_VEX_70) },
7142 { REG_TABLE (REG_VEX_71) },
7143 { REG_TABLE (REG_VEX_72) },
7144 { REG_TABLE (REG_VEX_73) },
7145 { PREFIX_TABLE (PREFIX_VEX_74) },
7146 { PREFIX_TABLE (PREFIX_VEX_75) },
7147 { PREFIX_TABLE (PREFIX_VEX_76) },
7148 { PREFIX_TABLE (PREFIX_VEX_77) },
7149 /* 78 */
85f10a01
MM
7150 { "(bad)", { XX } },
7151 { "(bad)", { XX } },
7152 { "(bad)", { XX } },
7153 { "(bad)", { XX } },
c0f3af97
L
7154 { PREFIX_TABLE (PREFIX_VEX_7C) },
7155 { PREFIX_TABLE (PREFIX_VEX_7D) },
7156 { PREFIX_TABLE (PREFIX_VEX_7E) },
7157 { PREFIX_TABLE (PREFIX_VEX_7F) },
7158 /* 80 */
85f10a01
MM
7159 { "(bad)", { XX } },
7160 { "(bad)", { XX } },
7161 { "(bad)", { XX } },
7162 { "(bad)", { XX } },
85f10a01
MM
7163 { "(bad)", { XX } },
7164 { "(bad)", { XX } },
7165 { "(bad)", { XX } },
7166 { "(bad)", { XX } },
c0f3af97 7167 /* 88 */
85f10a01
MM
7168 { "(bad)", { XX } },
7169 { "(bad)", { XX } },
7170 { "(bad)", { XX } },
7171 { "(bad)", { XX } },
7172 { "(bad)", { XX } },
7173 { "(bad)", { XX } },
7174 { "(bad)", { XX } },
7175 { "(bad)", { XX } },
c0f3af97 7176 /* 90 */
85f10a01
MM
7177 { "(bad)", { XX } },
7178 { "(bad)", { XX } },
7179 { "(bad)", { XX } },
7180 { "(bad)", { XX } },
7181 { "(bad)", { XX } },
7182 { "(bad)", { XX } },
7183 { "(bad)", { XX } },
85f10a01 7184 { "(bad)", { XX } },
c0f3af97 7185 /* 98 */
85f10a01
MM
7186 { "(bad)", { XX } },
7187 { "(bad)", { XX } },
7188 { "(bad)", { XX } },
d5d7db8e
L
7189 { "(bad)", { XX } },
7190 { "(bad)", { XX } },
7191 { "(bad)", { XX } },
7192 { "(bad)", { XX } },
7193 { "(bad)", { XX } },
c0f3af97 7194 /* a0 */
d5d7db8e
L
7195 { "(bad)", { XX } },
7196 { "(bad)", { XX } },
7197 { "(bad)", { XX } },
7198 { "(bad)", { XX } },
7199 { "(bad)", { XX } },
7200 { "(bad)", { XX } },
7201 { "(bad)", { XX } },
7202 { "(bad)", { XX } },
c0f3af97 7203 /* a8 */
d5d7db8e
L
7204 { "(bad)", { XX } },
7205 { "(bad)", { XX } },
7206 { "(bad)", { XX } },
7207 { "(bad)", { XX } },
7208 { "(bad)", { XX } },
7209 { "(bad)", { XX } },
c0f3af97 7210 { REG_TABLE (REG_VEX_AE) },
d5d7db8e 7211 { "(bad)", { XX } },
c0f3af97 7212 /* b0 */
d5d7db8e 7213 { "(bad)", { XX } },
d5d7db8e
L
7214 { "(bad)", { XX } },
7215 { "(bad)", { XX } },
7216 { "(bad)", { XX } },
7217 { "(bad)", { XX } },
7218 { "(bad)", { XX } },
7219 { "(bad)", { XX } },
7220 { "(bad)", { XX } },
c0f3af97 7221 /* b8 */
d5d7db8e 7222 { "(bad)", { XX } },
d5d7db8e
L
7223 { "(bad)", { XX } },
7224 { "(bad)", { XX } },
7225 { "(bad)", { XX } },
7226 { "(bad)", { XX } },
7227 { "(bad)", { XX } },
7228 { "(bad)", { XX } },
7229 { "(bad)", { XX } },
c0f3af97 7230 /* c0 */
d5d7db8e 7231 { "(bad)", { XX } },
d5d7db8e 7232 { "(bad)", { XX } },
c0f3af97 7233 { PREFIX_TABLE (PREFIX_VEX_C2) },
d5d7db8e 7234 { "(bad)", { XX } },
c0f3af97
L
7235 { PREFIX_TABLE (PREFIX_VEX_C4) },
7236 { PREFIX_TABLE (PREFIX_VEX_C5) },
7237 { "vshufpX", { XM, Vex, EXx, Ib } },
d5d7db8e 7238 { "(bad)", { XX } },
c0f3af97 7239 /* c8 */
d5d7db8e
L
7240 { "(bad)", { XX } },
7241 { "(bad)", { XX } },
7242 { "(bad)", { XX } },
7243 { "(bad)", { XX } },
7244 { "(bad)", { XX } },
d5d7db8e
L
7245 { "(bad)", { XX } },
7246 { "(bad)", { XX } },
7247 { "(bad)", { XX } },
c0f3af97
L
7248 /* d0 */
7249 { PREFIX_TABLE (PREFIX_VEX_D0) },
7250 { PREFIX_TABLE (PREFIX_VEX_D1) },
7251 { PREFIX_TABLE (PREFIX_VEX_D2) },
7252 { PREFIX_TABLE (PREFIX_VEX_D3) },
7253 { PREFIX_TABLE (PREFIX_VEX_D4) },
7254 { PREFIX_TABLE (PREFIX_VEX_D5) },
7255 { PREFIX_TABLE (PREFIX_VEX_D6) },
7256 { PREFIX_TABLE (PREFIX_VEX_D7) },
7257 /* d8 */
7258 { PREFIX_TABLE (PREFIX_VEX_D8) },
7259 { PREFIX_TABLE (PREFIX_VEX_D9) },
7260 { PREFIX_TABLE (PREFIX_VEX_DA) },
7261 { PREFIX_TABLE (PREFIX_VEX_DB) },
7262 { PREFIX_TABLE (PREFIX_VEX_DC) },
7263 { PREFIX_TABLE (PREFIX_VEX_DD) },
7264 { PREFIX_TABLE (PREFIX_VEX_DE) },
7265 { PREFIX_TABLE (PREFIX_VEX_DF) },
7266 /* e0 */
7267 { PREFIX_TABLE (PREFIX_VEX_E0) },
7268 { PREFIX_TABLE (PREFIX_VEX_E1) },
7269 { PREFIX_TABLE (PREFIX_VEX_E2) },
7270 { PREFIX_TABLE (PREFIX_VEX_E3) },
7271 { PREFIX_TABLE (PREFIX_VEX_E4) },
7272 { PREFIX_TABLE (PREFIX_VEX_E5) },
7273 { PREFIX_TABLE (PREFIX_VEX_E6) },
7274 { PREFIX_TABLE (PREFIX_VEX_E7) },
7275 /* e8 */
7276 { PREFIX_TABLE (PREFIX_VEX_E8) },
7277 { PREFIX_TABLE (PREFIX_VEX_E9) },
7278 { PREFIX_TABLE (PREFIX_VEX_EA) },
7279 { PREFIX_TABLE (PREFIX_VEX_EB) },
7280 { PREFIX_TABLE (PREFIX_VEX_EC) },
7281 { PREFIX_TABLE (PREFIX_VEX_ED) },
7282 { PREFIX_TABLE (PREFIX_VEX_EE) },
7283 { PREFIX_TABLE (PREFIX_VEX_EF) },
7284 /* f0 */
7285 { PREFIX_TABLE (PREFIX_VEX_F0) },
7286 { PREFIX_TABLE (PREFIX_VEX_F1) },
7287 { PREFIX_TABLE (PREFIX_VEX_F2) },
7288 { PREFIX_TABLE (PREFIX_VEX_F3) },
7289 { PREFIX_TABLE (PREFIX_VEX_F4) },
7290 { PREFIX_TABLE (PREFIX_VEX_F5) },
7291 { PREFIX_TABLE (PREFIX_VEX_F6) },
7292 { PREFIX_TABLE (PREFIX_VEX_F7) },
7293 /* f8 */
7294 { PREFIX_TABLE (PREFIX_VEX_F8) },
7295 { PREFIX_TABLE (PREFIX_VEX_F9) },
7296 { PREFIX_TABLE (PREFIX_VEX_FA) },
7297 { PREFIX_TABLE (PREFIX_VEX_FB) },
7298 { PREFIX_TABLE (PREFIX_VEX_FC) },
7299 { PREFIX_TABLE (PREFIX_VEX_FD) },
7300 { PREFIX_TABLE (PREFIX_VEX_FE) },
d5d7db8e 7301 { "(bad)", { XX } },
c0f3af97
L
7302 },
7303 /* VEX_0F38 */
7304 {
7305 /* 00 */
7306 { PREFIX_TABLE (PREFIX_VEX_3800) },
7307 { PREFIX_TABLE (PREFIX_VEX_3801) },
7308 { PREFIX_TABLE (PREFIX_VEX_3802) },
7309 { PREFIX_TABLE (PREFIX_VEX_3803) },
7310 { PREFIX_TABLE (PREFIX_VEX_3804) },
7311 { PREFIX_TABLE (PREFIX_VEX_3805) },
7312 { PREFIX_TABLE (PREFIX_VEX_3806) },
7313 { PREFIX_TABLE (PREFIX_VEX_3807) },
7314 /* 08 */
7315 { PREFIX_TABLE (PREFIX_VEX_3808) },
7316 { PREFIX_TABLE (PREFIX_VEX_3809) },
7317 { PREFIX_TABLE (PREFIX_VEX_380A) },
7318 { PREFIX_TABLE (PREFIX_VEX_380B) },
7319 { PREFIX_TABLE (PREFIX_VEX_380C) },
7320 { PREFIX_TABLE (PREFIX_VEX_380D) },
7321 { PREFIX_TABLE (PREFIX_VEX_380E) },
7322 { PREFIX_TABLE (PREFIX_VEX_380F) },
7323 /* 10 */
d5d7db8e
L
7324 { "(bad)", { XX } },
7325 { "(bad)", { XX } },
7326 { "(bad)", { XX } },
7327 { "(bad)", { XX } },
d5d7db8e
L
7328 { "(bad)", { XX } },
7329 { "(bad)", { XX } },
7330 { "(bad)", { XX } },
c0f3af97
L
7331 { PREFIX_TABLE (PREFIX_VEX_3817) },
7332 /* 18 */
7333 { PREFIX_TABLE (PREFIX_VEX_3818) },
7334 { PREFIX_TABLE (PREFIX_VEX_3819) },
7335 { PREFIX_TABLE (PREFIX_VEX_381A) },
d5d7db8e 7336 { "(bad)", { XX } },
c0f3af97
L
7337 { PREFIX_TABLE (PREFIX_VEX_381C) },
7338 { PREFIX_TABLE (PREFIX_VEX_381D) },
7339 { PREFIX_TABLE (PREFIX_VEX_381E) },
d5d7db8e 7340 { "(bad)", { XX } },
c0f3af97
L
7341 /* 20 */
7342 { PREFIX_TABLE (PREFIX_VEX_3820) },
7343 { PREFIX_TABLE (PREFIX_VEX_3821) },
7344 { PREFIX_TABLE (PREFIX_VEX_3822) },
7345 { PREFIX_TABLE (PREFIX_VEX_3823) },
7346 { PREFIX_TABLE (PREFIX_VEX_3824) },
7347 { PREFIX_TABLE (PREFIX_VEX_3825) },
d5d7db8e
L
7348 { "(bad)", { XX } },
7349 { "(bad)", { XX } },
c0f3af97
L
7350 /* 28 */
7351 { PREFIX_TABLE (PREFIX_VEX_3828) },
7352 { PREFIX_TABLE (PREFIX_VEX_3829) },
7353 { PREFIX_TABLE (PREFIX_VEX_382A) },
7354 { PREFIX_TABLE (PREFIX_VEX_382B) },
7355 { PREFIX_TABLE (PREFIX_VEX_382C) },
7356 { PREFIX_TABLE (PREFIX_VEX_382D) },
7357 { PREFIX_TABLE (PREFIX_VEX_382E) },
7358 { PREFIX_TABLE (PREFIX_VEX_382F) },
7359 /* 30 */
7360 { PREFIX_TABLE (PREFIX_VEX_3830) },
7361 { PREFIX_TABLE (PREFIX_VEX_3831) },
7362 { PREFIX_TABLE (PREFIX_VEX_3832) },
7363 { PREFIX_TABLE (PREFIX_VEX_3833) },
7364 { PREFIX_TABLE (PREFIX_VEX_3834) },
7365 { PREFIX_TABLE (PREFIX_VEX_3835) },
7366 { "(bad)", { XX } },
7367 { PREFIX_TABLE (PREFIX_VEX_3837) },
7368 /* 38 */
7369 { PREFIX_TABLE (PREFIX_VEX_3838) },
7370 { PREFIX_TABLE (PREFIX_VEX_3839) },
7371 { PREFIX_TABLE (PREFIX_VEX_383A) },
7372 { PREFIX_TABLE (PREFIX_VEX_383B) },
7373 { PREFIX_TABLE (PREFIX_VEX_383C) },
7374 { PREFIX_TABLE (PREFIX_VEX_383D) },
7375 { PREFIX_TABLE (PREFIX_VEX_383E) },
7376 { PREFIX_TABLE (PREFIX_VEX_383F) },
7377 /* 40 */
7378 { PREFIX_TABLE (PREFIX_VEX_3840) },
7379 { PREFIX_TABLE (PREFIX_VEX_3841) },
d5d7db8e 7380 { "(bad)", { XX } },
d5d7db8e
L
7381 { "(bad)", { XX } },
7382 { "(bad)", { XX } },
7383 { "(bad)", { XX } },
7384 { "(bad)", { XX } },
7385 { "(bad)", { XX } },
c0f3af97 7386 /* 48 */
d5d7db8e
L
7387 { "(bad)", { XX } },
7388 { "(bad)", { XX } },
7389 { "(bad)", { XX } },
d5d7db8e
L
7390 { "(bad)", { XX } },
7391 { "(bad)", { XX } },
7392 { "(bad)", { XX } },
7393 { "(bad)", { XX } },
7394 { "(bad)", { XX } },
c0f3af97 7395 /* 50 */
d5d7db8e
L
7396 { "(bad)", { XX } },
7397 { "(bad)", { XX } },
7398 { "(bad)", { XX } },
d5d7db8e
L
7399 { "(bad)", { XX } },
7400 { "(bad)", { XX } },
7401 { "(bad)", { XX } },
7402 { "(bad)", { XX } },
7403 { "(bad)", { XX } },
c0f3af97 7404 /* 58 */
d5d7db8e
L
7405 { "(bad)", { XX } },
7406 { "(bad)", { XX } },
7407 { "(bad)", { XX } },
d5d7db8e
L
7408 { "(bad)", { XX } },
7409 { "(bad)", { XX } },
7410 { "(bad)", { XX } },
7411 { "(bad)", { XX } },
7412 { "(bad)", { XX } },
c0f3af97 7413 /* 60 */
d5d7db8e
L
7414 { "(bad)", { XX } },
7415 { "(bad)", { XX } },
7416 { "(bad)", { XX } },
d5d7db8e
L
7417 { "(bad)", { XX } },
7418 { "(bad)", { XX } },
7419 { "(bad)", { XX } },
7420 { "(bad)", { XX } },
7421 { "(bad)", { XX } },
c0f3af97 7422 /* 68 */
d5d7db8e
L
7423 { "(bad)", { XX } },
7424 { "(bad)", { XX } },
7425 { "(bad)", { XX } },
d5d7db8e
L
7426 { "(bad)", { XX } },
7427 { "(bad)", { XX } },
7428 { "(bad)", { XX } },
7429 { "(bad)", { XX } },
7430 { "(bad)", { XX } },
c0f3af97 7431 /* 70 */
d5d7db8e
L
7432 { "(bad)", { XX } },
7433 { "(bad)", { XX } },
7434 { "(bad)", { XX } },
d5d7db8e
L
7435 { "(bad)", { XX } },
7436 { "(bad)", { XX } },
7437 { "(bad)", { XX } },
7438 { "(bad)", { XX } },
7439 { "(bad)", { XX } },
c0f3af97 7440 /* 78 */
d5d7db8e
L
7441 { "(bad)", { XX } },
7442 { "(bad)", { XX } },
7443 { "(bad)", { XX } },
d5d7db8e
L
7444 { "(bad)", { XX } },
7445 { "(bad)", { XX } },
7446 { "(bad)", { XX } },
7447 { "(bad)", { XX } },
7448 { "(bad)", { XX } },
c0f3af97 7449 /* 80 */
d5d7db8e
L
7450 { "(bad)", { XX } },
7451 { "(bad)", { XX } },
7452 { "(bad)", { XX } },
d5d7db8e
L
7453 { "(bad)", { XX } },
7454 { "(bad)", { XX } },
7455 { "(bad)", { XX } },
7456 { "(bad)", { XX } },
7457 { "(bad)", { XX } },
c0f3af97 7458 /* 88 */
d5d7db8e
L
7459 { "(bad)", { XX } },
7460 { "(bad)", { XX } },
7461 { "(bad)", { XX } },
d5d7db8e
L
7462 { "(bad)", { XX } },
7463 { "(bad)", { XX } },
7464 { "(bad)", { XX } },
7465 { "(bad)", { XX } },
7466 { "(bad)", { XX } },
c0f3af97 7467 /* 90 */
d5d7db8e
L
7468 { "(bad)", { XX } },
7469 { "(bad)", { XX } },
7470 { "(bad)", { XX } },
d5d7db8e
L
7471 { "(bad)", { XX } },
7472 { "(bad)", { XX } },
7473 { "(bad)", { XX } },
0bfee649
L
7474 { PREFIX_TABLE (PREFIX_VEX_3896) },
7475 { PREFIX_TABLE (PREFIX_VEX_3897) },
c0f3af97 7476 /* 98 */
0bfee649
L
7477 { PREFIX_TABLE (PREFIX_VEX_3898) },
7478 { PREFIX_TABLE (PREFIX_VEX_3899) },
7479 { PREFIX_TABLE (PREFIX_VEX_389A) },
7480 { PREFIX_TABLE (PREFIX_VEX_389B) },
7481 { PREFIX_TABLE (PREFIX_VEX_389C) },
7482 { PREFIX_TABLE (PREFIX_VEX_389D) },
7483 { PREFIX_TABLE (PREFIX_VEX_389E) },
7484 { PREFIX_TABLE (PREFIX_VEX_389F) },
c0f3af97 7485 /* a0 */
d5d7db8e
L
7486 { "(bad)", { XX } },
7487 { "(bad)", { XX } },
7488 { "(bad)", { XX } },
d5d7db8e
L
7489 { "(bad)", { XX } },
7490 { "(bad)", { XX } },
7491 { "(bad)", { XX } },
0bfee649
L
7492 { PREFIX_TABLE (PREFIX_VEX_38A6) },
7493 { PREFIX_TABLE (PREFIX_VEX_38A7) },
c0f3af97 7494 /* a8 */
0bfee649
L
7495 { PREFIX_TABLE (PREFIX_VEX_38A8) },
7496 { PREFIX_TABLE (PREFIX_VEX_38A9) },
7497 { PREFIX_TABLE (PREFIX_VEX_38AA) },
7498 { PREFIX_TABLE (PREFIX_VEX_38AB) },
7499 { PREFIX_TABLE (PREFIX_VEX_38AC) },
7500 { PREFIX_TABLE (PREFIX_VEX_38AD) },
7501 { PREFIX_TABLE (PREFIX_VEX_38AE) },
7502 { PREFIX_TABLE (PREFIX_VEX_38AF) },
c0f3af97 7503 /* b0 */
d5d7db8e
L
7504 { "(bad)", { XX } },
7505 { "(bad)", { XX } },
7506 { "(bad)", { XX } },
7507 { "(bad)", { XX } },
7508 { "(bad)", { XX } },
7509 { "(bad)", { XX } },
0bfee649
L
7510 { PREFIX_TABLE (PREFIX_VEX_38B6) },
7511 { PREFIX_TABLE (PREFIX_VEX_38B7) },
c0f3af97 7512 /* b8 */
0bfee649
L
7513 { PREFIX_TABLE (PREFIX_VEX_38B8) },
7514 { PREFIX_TABLE (PREFIX_VEX_38B9) },
7515 { PREFIX_TABLE (PREFIX_VEX_38BA) },
7516 { PREFIX_TABLE (PREFIX_VEX_38BB) },
7517 { PREFIX_TABLE (PREFIX_VEX_38BC) },
7518 { PREFIX_TABLE (PREFIX_VEX_38BD) },
7519 { PREFIX_TABLE (PREFIX_VEX_38BE) },
7520 { PREFIX_TABLE (PREFIX_VEX_38BF) },
c0f3af97 7521 /* c0 */
d5d7db8e
L
7522 { "(bad)", { XX } },
7523 { "(bad)", { XX } },
7524 { "(bad)", { XX } },
7525 { "(bad)", { XX } },
d5d7db8e
L
7526 { "(bad)", { XX } },
7527 { "(bad)", { XX } },
7528 { "(bad)", { XX } },
7529 { "(bad)", { XX } },
c0f3af97 7530 /* c8 */
d5d7db8e
L
7531 { "(bad)", { XX } },
7532 { "(bad)", { XX } },
7533 { "(bad)", { XX } },
7534 { "(bad)", { XX } },
d5d7db8e 7535 { "(bad)", { XX } },
d5d7db8e
L
7536 { "(bad)", { XX } },
7537 { "(bad)", { XX } },
d5d7db8e 7538 { "(bad)", { XX } },
c0f3af97 7539 /* d0 */
d5d7db8e
L
7540 { "(bad)", { XX } },
7541 { "(bad)", { XX } },
d5d7db8e
L
7542 { "(bad)", { XX } },
7543 { "(bad)", { XX } },
7544 { "(bad)", { XX } },
7545 { "(bad)", { XX } },
d5d7db8e 7546 { "(bad)", { XX } },
d5d7db8e 7547 { "(bad)", { XX } },
c0f3af97 7548 /* d8 */
d5d7db8e 7549 { "(bad)", { XX } },
d5d7db8e
L
7550 { "(bad)", { XX } },
7551 { "(bad)", { XX } },
a5ff0eb2
L
7552 { PREFIX_TABLE (PREFIX_VEX_38DB) },
7553 { PREFIX_TABLE (PREFIX_VEX_38DC) },
7554 { PREFIX_TABLE (PREFIX_VEX_38DD) },
7555 { PREFIX_TABLE (PREFIX_VEX_38DE) },
7556 { PREFIX_TABLE (PREFIX_VEX_38DF) },
c0f3af97 7557 /* e0 */
d5d7db8e 7558 { "(bad)", { XX } },
d5d7db8e
L
7559 { "(bad)", { XX } },
7560 { "(bad)", { XX } },
7561 { "(bad)", { XX } },
7562 { "(bad)", { XX } },
d5d7db8e
L
7563 { "(bad)", { XX } },
7564 { "(bad)", { XX } },
7565 { "(bad)", { XX } },
c0f3af97 7566 /* e8 */
d5d7db8e
L
7567 { "(bad)", { XX } },
7568 { "(bad)", { XX } },
7569 { "(bad)", { XX } },
7570 { "(bad)", { XX } },
7571 { "(bad)", { XX } },
d5d7db8e
L
7572 { "(bad)", { XX } },
7573 { "(bad)", { XX } },
7574 { "(bad)", { XX } },
c0f3af97 7575 /* f0 */
d5d7db8e
L
7576 { "(bad)", { XX } },
7577 { "(bad)", { XX } },
7578 { "(bad)", { XX } },
7579 { "(bad)", { XX } },
7580 { "(bad)", { XX } },
d5d7db8e
L
7581 { "(bad)", { XX } },
7582 { "(bad)", { XX } },
7583 { "(bad)", { XX } },
c0f3af97 7584 /* f8 */
d5d7db8e
L
7585 { "(bad)", { XX } },
7586 { "(bad)", { XX } },
7587 { "(bad)", { XX } },
7588 { "(bad)", { XX } },
7589 { "(bad)", { XX } },
d5d7db8e
L
7590 { "(bad)", { XX } },
7591 { "(bad)", { XX } },
7592 { "(bad)", { XX } },
c0f3af97
L
7593 },
7594 /* VEX_0F3A */
7595 {
7596 /* 00 */
d5d7db8e
L
7597 { "(bad)", { XX } },
7598 { "(bad)", { XX } },
7599 { "(bad)", { XX } },
7600 { "(bad)", { XX } },
c0f3af97
L
7601 { PREFIX_TABLE (PREFIX_VEX_3A04) },
7602 { PREFIX_TABLE (PREFIX_VEX_3A05) },
7603 { PREFIX_TABLE (PREFIX_VEX_3A06) },
d5d7db8e 7604 { "(bad)", { XX } },
c0f3af97
L
7605 /* 08 */
7606 { PREFIX_TABLE (PREFIX_VEX_3A08) },
7607 { PREFIX_TABLE (PREFIX_VEX_3A09) },
7608 { PREFIX_TABLE (PREFIX_VEX_3A0A) },
7609 { PREFIX_TABLE (PREFIX_VEX_3A0B) },
7610 { PREFIX_TABLE (PREFIX_VEX_3A0C) },
7611 { PREFIX_TABLE (PREFIX_VEX_3A0D) },
7612 { PREFIX_TABLE (PREFIX_VEX_3A0E) },
7613 { PREFIX_TABLE (PREFIX_VEX_3A0F) },
7614 /* 10 */
d5d7db8e
L
7615 { "(bad)", { XX } },
7616 { "(bad)", { XX } },
7617 { "(bad)", { XX } },
7618 { "(bad)", { XX } },
c0f3af97
L
7619 { PREFIX_TABLE (PREFIX_VEX_3A14) },
7620 { PREFIX_TABLE (PREFIX_VEX_3A15) },
7621 { PREFIX_TABLE (PREFIX_VEX_3A16) },
7622 { PREFIX_TABLE (PREFIX_VEX_3A17) },
7623 /* 18 */
7624 { PREFIX_TABLE (PREFIX_VEX_3A18) },
7625 { PREFIX_TABLE (PREFIX_VEX_3A19) },
d5d7db8e
L
7626 { "(bad)", { XX } },
7627 { "(bad)", { XX } },
7628 { "(bad)", { XX } },
7629 { "(bad)", { XX } },
d5d7db8e
L
7630 { "(bad)", { XX } },
7631 { "(bad)", { XX } },
c0f3af97
L
7632 /* 20 */
7633 { PREFIX_TABLE (PREFIX_VEX_3A20) },
7634 { PREFIX_TABLE (PREFIX_VEX_3A21) },
7635 { PREFIX_TABLE (PREFIX_VEX_3A22) },
d5d7db8e
L
7636 { "(bad)", { XX } },
7637 { "(bad)", { XX } },
7638 { "(bad)", { XX } },
7639 { "(bad)", { XX } },
7640 { "(bad)", { XX } },
c0f3af97 7641 /* 28 */
d5d7db8e 7642 { "(bad)", { XX } },
d5d7db8e
L
7643 { "(bad)", { XX } },
7644 { "(bad)", { XX } },
7645 { "(bad)", { XX } },
7646 { "(bad)", { XX } },
7647 { "(bad)", { XX } },
7648 { "(bad)", { XX } },
7649 { "(bad)", { XX } },
c0f3af97 7650 /* 30 */
d5d7db8e 7651 { "(bad)", { XX } },
d5d7db8e
L
7652 { "(bad)", { XX } },
7653 { "(bad)", { XX } },
7654 { "(bad)", { XX } },
7655 { "(bad)", { XX } },
7656 { "(bad)", { XX } },
7657 { "(bad)", { XX } },
7658 { "(bad)", { XX } },
c0f3af97 7659 /* 38 */
d5d7db8e 7660 { "(bad)", { XX } },
d5d7db8e
L
7661 { "(bad)", { XX } },
7662 { "(bad)", { XX } },
7663 { "(bad)", { XX } },
7664 { "(bad)", { XX } },
7665 { "(bad)", { XX } },
7666 { "(bad)", { XX } },
7667 { "(bad)", { XX } },
c0f3af97
L
7668 /* 40 */
7669 { PREFIX_TABLE (PREFIX_VEX_3A40) },
7670 { PREFIX_TABLE (PREFIX_VEX_3A41) },
7671 { PREFIX_TABLE (PREFIX_VEX_3A42) },
d5d7db8e 7672 { "(bad)", { XX } },
d5d7db8e
L
7673 { "(bad)", { XX } },
7674 { "(bad)", { XX } },
7675 { "(bad)", { XX } },
7676 { "(bad)", { XX } },
c0f3af97 7677 /* 48 */
0bfee649
L
7678 { "(bad)", { XX } },
7679 { "(bad)", { XX } },
c0f3af97
L
7680 { PREFIX_TABLE (PREFIX_VEX_3A4A) },
7681 { PREFIX_TABLE (PREFIX_VEX_3A4B) },
7682 { PREFIX_TABLE (PREFIX_VEX_3A4C) },
d5d7db8e
L
7683 { "(bad)", { XX } },
7684 { "(bad)", { XX } },
7685 { "(bad)", { XX } },
c0f3af97 7686 /* 50 */
d5d7db8e 7687 { "(bad)", { XX } },
d5d7db8e
L
7688 { "(bad)", { XX } },
7689 { "(bad)", { XX } },
7690 { "(bad)", { XX } },
7691 { "(bad)", { XX } },
7692 { "(bad)", { XX } },
7693 { "(bad)", { XX } },
7694 { "(bad)", { XX } },
c0f3af97 7695 /* 58 */
d5d7db8e 7696 { "(bad)", { XX } },
d5d7db8e
L
7697 { "(bad)", { XX } },
7698 { "(bad)", { XX } },
7699 { "(bad)", { XX } },
0bfee649
L
7700 { "(bad)", { XX } },
7701 { "(bad)", { XX } },
7702 { "(bad)", { XX } },
7703 { "(bad)", { XX } },
c0f3af97
L
7704 /* 60 */
7705 { PREFIX_TABLE (PREFIX_VEX_3A60) },
7706 { PREFIX_TABLE (PREFIX_VEX_3A61) },
7707 { PREFIX_TABLE (PREFIX_VEX_3A62) },
7708 { PREFIX_TABLE (PREFIX_VEX_3A63) },
d5d7db8e
L
7709 { "(bad)", { XX } },
7710 { "(bad)", { XX } },
7711 { "(bad)", { XX } },
7712 { "(bad)", { XX } },
c0f3af97 7713 /* 68 */
0bfee649
L
7714 { "(bad)", { XX } },
7715 { "(bad)", { XX } },
7716 { "(bad)", { XX } },
7717 { "(bad)", { XX } },
7718 { "(bad)", { XX } },
7719 { "(bad)", { XX } },
7720 { "(bad)", { XX } },
7721 { "(bad)", { XX } },
c0f3af97 7722 /* 70 */
d5d7db8e 7723 { "(bad)", { XX } },
d5d7db8e
L
7724 { "(bad)", { XX } },
7725 { "(bad)", { XX } },
7726 { "(bad)", { XX } },
7727 { "(bad)", { XX } },
7728 { "(bad)", { XX } },
7729 { "(bad)", { XX } },
7730 { "(bad)", { XX } },
c0f3af97 7731 /* 78 */
0bfee649
L
7732 { "(bad)", { XX } },
7733 { "(bad)", { XX } },
7734 { "(bad)", { XX } },
7735 { "(bad)", { XX } },
7736 { "(bad)", { XX } },
7737 { "(bad)", { XX } },
7738 { "(bad)", { XX } },
7739 { "(bad)", { XX } },
c0f3af97 7740 /* 80 */
d5d7db8e 7741 { "(bad)", { XX } },
d5d7db8e
L
7742 { "(bad)", { XX } },
7743 { "(bad)", { XX } },
7744 { "(bad)", { XX } },
7745 { "(bad)", { XX } },
7746 { "(bad)", { XX } },
7747 { "(bad)", { XX } },
7748 { "(bad)", { XX } },
c0f3af97 7749 /* 88 */
d5d7db8e 7750 { "(bad)", { XX } },
d5d7db8e
L
7751 { "(bad)", { XX } },
7752 { "(bad)", { XX } },
7753 { "(bad)", { XX } },
7754 { "(bad)", { XX } },
7755 { "(bad)", { XX } },
7756 { "(bad)", { XX } },
7757 { "(bad)", { XX } },
c0f3af97 7758 /* 90 */
d5d7db8e 7759 { "(bad)", { XX } },
d5d7db8e
L
7760 { "(bad)", { XX } },
7761 { "(bad)", { XX } },
7762 { "(bad)", { XX } },
7763 { "(bad)", { XX } },
7764 { "(bad)", { XX } },
7765 { "(bad)", { XX } },
7766 { "(bad)", { XX } },
c0f3af97 7767 /* 98 */
d5d7db8e 7768 { "(bad)", { XX } },
d5d7db8e
L
7769 { "(bad)", { XX } },
7770 { "(bad)", { XX } },
7771 { "(bad)", { XX } },
7772 { "(bad)", { XX } },
7773 { "(bad)", { XX } },
7774 { "(bad)", { XX } },
7775 { "(bad)", { XX } },
c0f3af97 7776 /* a0 */
d5d7db8e 7777 { "(bad)", { XX } },
85f10a01
MM
7778 { "(bad)", { XX } },
7779 { "(bad)", { XX } },
d5d7db8e
L
7780 { "(bad)", { XX } },
7781 { "(bad)", { XX } },
7782 { "(bad)", { XX } },
7783 { "(bad)", { XX } },
7784 { "(bad)", { XX } },
c0f3af97 7785 /* a8 */
d5d7db8e 7786 { "(bad)", { XX } },
d5d7db8e
L
7787 { "(bad)", { XX } },
7788 { "(bad)", { XX } },
7789 { "(bad)", { XX } },
7790 { "(bad)", { XX } },
7791 { "(bad)", { XX } },
7792 { "(bad)", { XX } },
7793 { "(bad)", { XX } },
c0f3af97
L
7794 /* b0 */
7795 { "(bad)", { XX } },
7796 { "(bad)", { XX } },
7797 { "(bad)", { XX } },
7798 { "(bad)", { XX } },
7799 { "(bad)", { XX } },
7800 { "(bad)", { XX } },
7801 { "(bad)", { XX } },
7802 { "(bad)", { XX } },
7803 /* b8 */
7804 { "(bad)", { XX } },
7805 { "(bad)", { XX } },
7806 { "(bad)", { XX } },
7807 { "(bad)", { XX } },
7808 { "(bad)", { XX } },
7809 { "(bad)", { XX } },
7810 { "(bad)", { XX } },
7811 { "(bad)", { XX } },
7812 /* c0 */
7813 { "(bad)", { XX } },
7814 { "(bad)", { XX } },
7815 { "(bad)", { XX } },
7816 { "(bad)", { XX } },
7817 { "(bad)", { XX } },
7818 { "(bad)", { XX } },
7819 { "(bad)", { XX } },
7820 { "(bad)", { XX } },
7821 /* c8 */
7822 { "(bad)", { XX } },
7823 { "(bad)", { XX } },
d5d7db8e 7824 { "(bad)", { XX } },
d5d7db8e
L
7825 { "(bad)", { XX } },
7826 { "(bad)", { XX } },
7827 { "(bad)", { XX } },
7828 { "(bad)", { XX } },
7829 { "(bad)", { XX } },
c0f3af97
L
7830 /* d0 */
7831 { "(bad)", { XX } },
7832 { "(bad)", { XX } },
7833 { "(bad)", { XX } },
d5d7db8e
L
7834 { "(bad)", { XX } },
7835 { "(bad)", { XX } },
7836 { "(bad)", { XX } },
c0f3af97
L
7837 { "(bad)", { XX } },
7838 { "(bad)", { XX } },
7839 /* d8 */
7840 { "(bad)", { XX } },
d5d7db8e
L
7841 { "(bad)", { XX } },
7842 { "(bad)", { XX } },
7843 { "(bad)", { XX } },
7844 { "(bad)", { XX } },
7845 { "(bad)", { XX } },
7846 { "(bad)", { XX } },
a5ff0eb2 7847 { PREFIX_TABLE (PREFIX_VEX_3ADF) },
c0f3af97 7848 /* e0 */
d5d7db8e 7849 { "(bad)", { XX } },
d5d7db8e
L
7850 { "(bad)", { XX } },
7851 { "(bad)", { XX } },
7852 { "(bad)", { XX } },
7853 { "(bad)", { XX } },
7854 { "(bad)", { XX } },
7855 { "(bad)", { XX } },
7856 { "(bad)", { XX } },
c0f3af97 7857 /* e8 */
d5d7db8e 7858 { "(bad)", { XX } },
d5d7db8e
L
7859 { "(bad)", { XX } },
7860 { "(bad)", { XX } },
7861 { "(bad)", { XX } },
7862 { "(bad)", { XX } },
7863 { "(bad)", { XX } },
7864 { "(bad)", { XX } },
7865 { "(bad)", { XX } },
c0f3af97 7866 /* f0 */
d5d7db8e 7867 { "(bad)", { XX } },
d5d7db8e
L
7868 { "(bad)", { XX } },
7869 { "(bad)", { XX } },
7870 { "(bad)", { XX } },
7871 { "(bad)", { XX } },
7872 { "(bad)", { XX } },
7873 { "(bad)", { XX } },
7874 { "(bad)", { XX } },
c0f3af97 7875 /* f8 */
d5d7db8e 7876 { "(bad)", { XX } },
d5d7db8e
L
7877 { "(bad)", { XX } },
7878 { "(bad)", { XX } },
7879 { "(bad)", { XX } },
7880 { "(bad)", { XX } },
7881 { "(bad)", { XX } },
7882 { "(bad)", { XX } },
7883 { "(bad)", { XX } },
c0f3af97
L
7884 },
7885};
7886
7887static const struct dis386 vex_len_table[][2] = {
7888 /* VEX_LEN_10_P_1 */
7889 {
7890 { "vmovss", { XMVex, Vex128, EXd } },
d5d7db8e 7891 { "(bad)", { XX } },
c0f3af97
L
7892 },
7893
7894 /* VEX_LEN_10_P_3 */
7895 {
7896 { "vmovsd", { XMVex, Vex128, EXq } },
d5d7db8e 7897 { "(bad)", { XX } },
c0f3af97
L
7898 },
7899
7900 /* VEX_LEN_11_P_1 */
7901 {
fa99fab2 7902 { "vmovss", { EXdVexS, Vex128, XM } },
d5d7db8e 7903 { "(bad)", { XX } },
c0f3af97
L
7904 },
7905
7906 /* VEX_LEN_11_P_3 */
7907 {
fa99fab2 7908 { "vmovsd", { EXqVexS, Vex128, XM } },
d5d7db8e 7909 { "(bad)", { XX } },
c0f3af97
L
7910 },
7911
7912 /* VEX_LEN_12_P_0_M_0 */
7913 {
7914 { "vmovlps", { XM, Vex128, EXq } },
d5d7db8e 7915 { "(bad)", { XX } },
c0f3af97
L
7916 },
7917
7918 /* VEX_LEN_12_P_0_M_1 */
7919 {
7920 { "vmovhlps", { XM, Vex128, EXq } },
d5d7db8e 7921 { "(bad)", { XX } },
c0f3af97
L
7922 },
7923
7924 /* VEX_LEN_12_P_2 */
7925 {
7926 { "vmovlpd", { XM, Vex128, EXq } },
d5d7db8e 7927 { "(bad)", { XX } },
c0f3af97
L
7928 },
7929
7930 /* VEX_LEN_13_M_0 */
7931 {
7932 { "vmovlpX", { EXq, XM } },
85f10a01 7933 { "(bad)", { XX } },
c0f3af97
L
7934 },
7935
7936 /* VEX_LEN_16_P_0_M_0 */
7937 {
7938 { "vmovhps", { XM, Vex128, EXq } },
85f10a01 7939 { "(bad)", { XX } },
c0f3af97
L
7940 },
7941
7942 /* VEX_LEN_16_P_0_M_1 */
7943 {
7944 { "vmovlhps", { XM, Vex128, EXq } },
85f10a01 7945 { "(bad)", { XX } },
c0f3af97
L
7946 },
7947
7948 /* VEX_LEN_16_P_2 */
7949 {
7950 { "vmovhpd", { XM, Vex128, EXq } },
85f10a01 7951 { "(bad)", { XX } },
c0f3af97
L
7952 },
7953
7954 /* VEX_LEN_17_M_0 */
7955 {
7956 { "vmovhpX", { EXq, XM } },
85f10a01 7957 { "(bad)", { XX } },
c0f3af97
L
7958 },
7959
7960 /* VEX_LEN_2A_P_1 */
7961 {
7962 { "vcvtsi2ss%LQ", { XM, Vex128, Ev } },
d5d7db8e 7963 { "(bad)", { XX } },
c0f3af97
L
7964 },
7965
7966 /* VEX_LEN_2A_P_3 */
7967 {
7968 { "vcvtsi2sd%LQ", { XM, Vex128, Ev } },
d5d7db8e 7969 { "(bad)", { XX } },
c0f3af97
L
7970 },
7971
c0f3af97
L
7972 /* VEX_LEN_2C_P_1 */
7973 {
7974 { "vcvttss2siY", { Gv, EXd } },
d5d7db8e 7975 { "(bad)", { XX } },
c0f3af97
L
7976 },
7977
7978 /* VEX_LEN_2C_P_3 */
7979 {
7980 { "vcvttsd2siY", { Gv, EXq } },
d5d7db8e 7981 { "(bad)", { XX } },
c0f3af97
L
7982 },
7983
7984 /* VEX_LEN_2D_P_1 */
7985 {
7986 { "vcvtss2siY", { Gv, EXd } },
85f10a01 7987 { "(bad)", { XX } },
c0f3af97
L
7988 },
7989
7990 /* VEX_LEN_2D_P_3 */
7991 {
7992 { "vcvtsd2siY", { Gv, EXq } },
d5d7db8e 7993 { "(bad)", { XX } },
c0f3af97
L
7994 },
7995
7996 /* VEX_LEN_2E_P_0 */
7997 {
7998 { "vucomiss", { XM, EXd } },
d5d7db8e 7999 { "(bad)", { XX } },
c0f3af97
L
8000 },
8001
8002 /* VEX_LEN_2E_P_2 */
8003 {
8004 { "vucomisd", { XM, EXq } },
d5d7db8e 8005 { "(bad)", { XX } },
c0f3af97
L
8006 },
8007
8008 /* VEX_LEN_2F_P_0 */
8009 {
8010 { "vcomiss", { XM, EXd } },
d5d7db8e 8011 { "(bad)", { XX } },
c0f3af97
L
8012 },
8013
8014 /* VEX_LEN_2F_P_2 */
8015 {
8016 { "vcomisd", { XM, EXq } },
d5d7db8e 8017 { "(bad)", { XX } },
c0f3af97
L
8018 },
8019
8020 /* VEX_LEN_51_P_1 */
8021 {
8022 { "vsqrtss", { XM, Vex128, EXd } },
d5d7db8e 8023 { "(bad)", { XX } },
c0f3af97
L
8024 },
8025
8026 /* VEX_LEN_51_P_3 */
8027 {
8028 { "vsqrtsd", { XM, Vex128, EXq } },
d5d7db8e 8029 { "(bad)", { XX } },
c0f3af97
L
8030 },
8031
8032 /* VEX_LEN_52_P_1 */
8033 {
8034 { "vrsqrtss", { XM, Vex128, EXd } },
d5d7db8e 8035 { "(bad)", { XX } },
c0f3af97
L
8036 },
8037
8038 /* VEX_LEN_53_P_1 */
8039 {
8040 { "vrcpss", { XM, Vex128, EXd } },
d5d7db8e 8041 { "(bad)", { XX } },
c0f3af97
L
8042 },
8043
8044 /* VEX_LEN_58_P_1 */
8045 {
8046 { "vaddss", { XM, Vex128, EXd } },
d5d7db8e 8047 { "(bad)", { XX } },
c0f3af97
L
8048 },
8049
8050 /* VEX_LEN_58_P_3 */
8051 {
8052 { "vaddsd", { XM, Vex128, EXq } },
d5d7db8e 8053 { "(bad)", { XX } },
c0f3af97
L
8054 },
8055
8056 /* VEX_LEN_59_P_1 */
8057 {
8058 { "vmulss", { XM, Vex128, EXd } },
d5d7db8e 8059 { "(bad)", { XX } },
c0f3af97
L
8060 },
8061
8062 /* VEX_LEN_59_P_3 */
8063 {
8064 { "vmulsd", { XM, Vex128, EXq } },
d5d7db8e 8065 { "(bad)", { XX } },
c0f3af97
L
8066 },
8067
8068 /* VEX_LEN_5A_P_1 */
8069 {
8070 { "vcvtss2sd", { XM, Vex128, EXd } },
d5d7db8e 8071 { "(bad)", { XX } },
c0f3af97
L
8072 },
8073
8074 /* VEX_LEN_5A_P_3 */
8075 {
8076 { "vcvtsd2ss", { XM, Vex128, EXq } },
d5d7db8e 8077 { "(bad)", { XX } },
c0f3af97
L
8078 },
8079
8080 /* VEX_LEN_5C_P_1 */
8081 {
8082 { "vsubss", { XM, Vex128, EXd } },
d5d7db8e 8083 { "(bad)", { XX } },
c0f3af97
L
8084 },
8085
8086 /* VEX_LEN_5C_P_3 */
8087 {
8088 { "vsubsd", { XM, Vex128, EXq } },
d5d7db8e 8089 { "(bad)", { XX } },
c0f3af97
L
8090 },
8091
8092 /* VEX_LEN_5D_P_1 */
8093 {
8094 { "vminss", { XM, Vex128, EXd } },
d5d7db8e 8095 { "(bad)", { XX } },
c0f3af97
L
8096 },
8097
8098 /* VEX_LEN_5D_P_3 */
8099 {
8100 { "vminsd", { XM, Vex128, EXq } },
d5d7db8e 8101 { "(bad)", { XX } },
c0f3af97
L
8102 },
8103
8104 /* VEX_LEN_5E_P_1 */
8105 {
8106 { "vdivss", { XM, Vex128, EXd } },
85f10a01 8107 { "(bad)", { XX } },
c0f3af97
L
8108 },
8109
8110 /* VEX_LEN_5E_P_3 */
8111 {
8112 { "vdivsd", { XM, Vex128, EXq } },
85f10a01 8113 { "(bad)", { XX } },
c0f3af97
L
8114 },
8115
8116 /* VEX_LEN_5F_P_1 */
8117 {
8118 { "vmaxss", { XM, Vex128, EXd } },
85f10a01 8119 { "(bad)", { XX } },
c0f3af97
L
8120 },
8121
8122 /* VEX_LEN_5F_P_3 */
8123 {
8124 { "vmaxsd", { XM, Vex128, EXq } },
85f10a01 8125 { "(bad)", { XX } },
c0f3af97
L
8126 },
8127
8128 /* VEX_LEN_60_P_2 */
8129 {
8130 { "vpunpcklbw", { XM, Vex128, EXx } },
d5d7db8e 8131 { "(bad)", { XX } },
c0f3af97
L
8132 },
8133
8134 /* VEX_LEN_61_P_2 */
8135 {
8136 { "vpunpcklwd", { XM, Vex128, EXx } },
d5d7db8e 8137 { "(bad)", { XX } },
c0f3af97
L
8138 },
8139
8140 /* VEX_LEN_62_P_2 */
8141 {
8142 { "vpunpckldq", { XM, Vex128, EXx } },
d5d7db8e 8143 { "(bad)", { XX } },
c0f3af97
L
8144 },
8145
8146 /* VEX_LEN_63_P_2 */
8147 {
8148 { "vpacksswb", { XM, Vex128, EXx } },
d5d7db8e 8149 { "(bad)", { XX } },
c0f3af97
L
8150 },
8151
8152 /* VEX_LEN_64_P_2 */
8153 {
8154 { "vpcmpgtb", { XM, Vex128, EXx } },
d5d7db8e 8155 { "(bad)", { XX } },
c0f3af97
L
8156 },
8157
8158 /* VEX_LEN_65_P_2 */
8159 {
8160 { "vpcmpgtw", { XM, Vex128, EXx } },
d5d7db8e 8161 { "(bad)", { XX } },
c0f3af97
L
8162 },
8163
8164 /* VEX_LEN_66_P_2 */
8165 {
8166 { "vpcmpgtd", { XM, Vex128, EXx } },
d5d7db8e 8167 { "(bad)", { XX } },
c0f3af97
L
8168 },
8169
8170 /* VEX_LEN_67_P_2 */
8171 {
8172 { "vpackuswb", { XM, Vex128, EXx } },
d5d7db8e 8173 { "(bad)", { XX } },
c0f3af97
L
8174 },
8175
8176 /* VEX_LEN_68_P_2 */
8177 {
8178 { "vpunpckhbw", { XM, Vex128, EXx } },
d5d7db8e 8179 { "(bad)", { XX } },
c0f3af97
L
8180 },
8181
8182 /* VEX_LEN_69_P_2 */
8183 {
8184 { "vpunpckhwd", { XM, Vex128, EXx } },
d5d7db8e 8185 { "(bad)", { XX } },
c0f3af97
L
8186 },
8187
8188 /* VEX_LEN_6A_P_2 */
8189 {
8190 { "vpunpckhdq", { XM, Vex128, EXx } },
d5d7db8e 8191 { "(bad)", { XX } },
c0f3af97
L
8192 },
8193
8194 /* VEX_LEN_6B_P_2 */
8195 {
8196 { "vpackssdw", { XM, Vex128, EXx } },
d5d7db8e 8197 { "(bad)", { XX } },
c0f3af97
L
8198 },
8199
8200 /* VEX_LEN_6C_P_2 */
8201 {
8202 { "vpunpcklqdq", { XM, Vex128, EXx } },
d5d7db8e 8203 { "(bad)", { XX } },
c0f3af97
L
8204 },
8205
8206 /* VEX_LEN_6D_P_2 */
8207 {
8208 { "vpunpckhqdq", { XM, Vex128, EXx } },
d5d7db8e 8209 { "(bad)", { XX } },
c0f3af97
L
8210 },
8211
8212 /* VEX_LEN_6E_P_2 */
8213 {
8214 { "vmovK", { XM, Edq } },
d5d7db8e 8215 { "(bad)", { XX } },
c0f3af97
L
8216 },
8217
8218 /* VEX_LEN_70_P_1 */
8219 {
8220 { "vpshufhw", { XM, EXx, Ib } },
d5d7db8e 8221 { "(bad)", { XX } },
c0f3af97
L
8222 },
8223
8224 /* VEX_LEN_70_P_2 */
8225 {
8226 { "vpshufd", { XM, EXx, Ib } },
d5d7db8e 8227 { "(bad)", { XX } },
c0f3af97
L
8228 },
8229
8230 /* VEX_LEN_70_P_3 */
8231 {
8232 { "vpshuflw", { XM, EXx, Ib } },
d5d7db8e 8233 { "(bad)", { XX } },
c0f3af97
L
8234 },
8235
8236 /* VEX_LEN_71_R_2_P_2 */
8237 {
8238 { "vpsrlw", { Vex128, XS, Ib } },
d5d7db8e 8239 { "(bad)", { XX } },
c0f3af97
L
8240 },
8241
8242 /* VEX_LEN_71_R_4_P_2 */
8243 {
8244 { "vpsraw", { Vex128, XS, Ib } },
d5d7db8e 8245 { "(bad)", { XX } },
c0f3af97
L
8246 },
8247
8248 /* VEX_LEN_71_R_6_P_2 */
8249 {
8250 { "vpsllw", { Vex128, XS, Ib } },
d5d7db8e 8251 { "(bad)", { XX } },
c0f3af97
L
8252 },
8253
8254 /* VEX_LEN_72_R_2_P_2 */
8255 {
8256 { "vpsrld", { Vex128, XS, Ib } },
d5d7db8e 8257 { "(bad)", { XX } },
c0f3af97
L
8258 },
8259
8260 /* VEX_LEN_72_R_4_P_2 */
8261 {
8262 { "vpsrad", { Vex128, XS, Ib } },
d5d7db8e 8263 { "(bad)", { XX } },
c0f3af97
L
8264 },
8265
8266 /* VEX_LEN_72_R_6_P_2 */
8267 {
8268 { "vpslld", { Vex128, XS, Ib } },
d5d7db8e 8269 { "(bad)", { XX } },
c0f3af97
L
8270 },
8271
8272 /* VEX_LEN_73_R_2_P_2 */
8273 {
8274 { "vpsrlq", { Vex128, XS, Ib } },
d5d7db8e 8275 { "(bad)", { XX } },
c0f3af97
L
8276 },
8277
8278 /* VEX_LEN_73_R_3_P_2 */
8279 {
8280 { "vpsrldq", { Vex128, XS, Ib } },
d5d7db8e 8281 { "(bad)", { XX } },
c0f3af97
L
8282 },
8283
8284 /* VEX_LEN_73_R_6_P_2 */
8285 {
8286 { "vpsllq", { Vex128, XS, Ib } },
d5d7db8e 8287 { "(bad)", { XX } },
c0f3af97
L
8288 },
8289
8290 /* VEX_LEN_73_R_7_P_2 */
8291 {
8292 { "vpslldq", { Vex128, XS, Ib } },
d5d7db8e 8293 { "(bad)", { XX } },
c0f3af97
L
8294 },
8295
8296 /* VEX_LEN_74_P_2 */
8297 {
8298 { "vpcmpeqb", { XM, Vex128, EXx } },
d5d7db8e 8299 { "(bad)", { XX } },
c0f3af97
L
8300 },
8301
8302 /* VEX_LEN_75_P_2 */
8303 {
8304 { "vpcmpeqw", { XM, Vex128, EXx } },
d5d7db8e 8305 { "(bad)", { XX } },
c0f3af97
L
8306 },
8307
8308 /* VEX_LEN_76_P_2 */
8309 {
8310 { "vpcmpeqd", { XM, Vex128, EXx } },
d5d7db8e 8311 { "(bad)", { XX } },
c0f3af97
L
8312 },
8313
8314 /* VEX_LEN_7E_P_1 */
8315 {
8316 { "vmovq", { XM, EXq } },
d5d7db8e 8317 { "(bad)", { XX } },
c0f3af97
L
8318 },
8319
8320 /* VEX_LEN_7E_P_2 */
8321 {
8322 { "vmovK", { Edq, XM } },
d5d7db8e 8323 { "(bad)", { XX } },
c0f3af97
L
8324 },
8325
8326 /* VEX_LEN_AE_R_2_M0 */
8327 {
8328 { "vldmxcsr", { Md } },
d5d7db8e 8329 { "(bad)", { XX } },
c0f3af97
L
8330 },
8331
8332 /* VEX_LEN_AE_R_3_M0 */
8333 {
8334 { "vstmxcsr", { Md } },
d5d7db8e 8335 { "(bad)", { XX } },
c0f3af97
L
8336 },
8337
8338 /* VEX_LEN_C2_P_1 */
8339 {
8340 { "vcmpss", { XM, Vex128, EXd, VCMP } },
d5d7db8e 8341 { "(bad)", { XX } },
c0f3af97
L
8342 },
8343
8344 /* VEX_LEN_C2_P_3 */
8345 {
8346 { "vcmpsd", { XM, Vex128, EXq, VCMP } },
d5d7db8e 8347 { "(bad)", { XX } },
c0f3af97
L
8348 },
8349
8350 /* VEX_LEN_C4_P_2 */
8351 {
8352 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
d5d7db8e 8353 { "(bad)", { XX } },
c0f3af97
L
8354 },
8355
8356 /* VEX_LEN_C5_P_2 */
8357 {
8358 { "vpextrw", { Gdq, XS, Ib } },
d5d7db8e 8359 { "(bad)", { XX } },
c0f3af97
L
8360 },
8361
8362 /* VEX_LEN_D1_P_2 */
8363 {
8364 { "vpsrlw", { XM, Vex128, EXx } },
d5d7db8e 8365 { "(bad)", { XX } },
c0f3af97
L
8366 },
8367
8368 /* VEX_LEN_D2_P_2 */
8369 {
8370 { "vpsrld", { XM, Vex128, EXx } },
d5d7db8e 8371 { "(bad)", { XX } },
c0f3af97
L
8372 },
8373
8374 /* VEX_LEN_D3_P_2 */
8375 {
8376 { "vpsrlq", { XM, Vex128, EXx } },
d5d7db8e 8377 { "(bad)", { XX } },
c0f3af97
L
8378 },
8379
8380 /* VEX_LEN_D4_P_2 */
8381 {
8382 { "vpaddq", { XM, Vex128, EXx } },
d5d7db8e 8383 { "(bad)", { XX } },
c0f3af97
L
8384 },
8385
8386 /* VEX_LEN_D5_P_2 */
8387 {
8388 { "vpmullw", { XM, Vex128, EXx } },
d5d7db8e 8389 { "(bad)", { XX } },
c0f3af97
L
8390 },
8391
8392 /* VEX_LEN_D6_P_2 */
8393 {
b6169b20 8394 { "vmovq", { EXqS, XM } },
d5d7db8e 8395 { "(bad)", { XX } },
c0f3af97
L
8396 },
8397
8398 /* VEX_LEN_D7_P_2_M_1 */
8399 {
8400 { "vpmovmskb", { Gdq, XS } },
d5d7db8e 8401 { "(bad)", { XX } },
c0f3af97
L
8402 },
8403
8404 /* VEX_LEN_D8_P_2 */
8405 {
8406 { "vpsubusb", { XM, Vex128, EXx } },
d5d7db8e 8407 { "(bad)", { XX } },
c0f3af97
L
8408 },
8409
8410 /* VEX_LEN_D9_P_2 */
8411 {
8412 { "vpsubusw", { XM, Vex128, EXx } },
d5d7db8e 8413 { "(bad)", { XX } },
c0f3af97
L
8414 },
8415
8416 /* VEX_LEN_DA_P_2 */
8417 {
8418 { "vpminub", { XM, Vex128, EXx } },
d5d7db8e 8419 { "(bad)", { XX } },
c0f3af97
L
8420 },
8421
8422 /* VEX_LEN_DB_P_2 */
8423 {
8424 { "vpand", { XM, Vex128, EXx } },
d5d7db8e 8425 { "(bad)", { XX } },
c0f3af97
L
8426 },
8427
8428 /* VEX_LEN_DC_P_2 */
8429 {
8430 { "vpaddusb", { XM, Vex128, EXx } },
d5d7db8e 8431 { "(bad)", { XX } },
c0f3af97
L
8432 },
8433
8434 /* VEX_LEN_DD_P_2 */
8435 {
8436 { "vpaddusw", { XM, Vex128, EXx } },
d5d7db8e 8437 { "(bad)", { XX } },
c0f3af97
L
8438 },
8439
8440 /* VEX_LEN_DE_P_2 */
8441 {
8442 { "vpmaxub", { XM, Vex128, EXx } },
d5d7db8e 8443 { "(bad)", { XX } },
c0f3af97
L
8444 },
8445
8446 /* VEX_LEN_DF_P_2 */
8447 {
8448 { "vpandn", { XM, Vex128, EXx } },
d5d7db8e 8449 { "(bad)", { XX } },
c0f3af97
L
8450 },
8451
8452 /* VEX_LEN_E0_P_2 */
8453 {
8454 { "vpavgb", { XM, Vex128, EXx } },
d5d7db8e 8455 { "(bad)", { XX } },
c0f3af97
L
8456 },
8457
8458 /* VEX_LEN_E1_P_2 */
8459 {
8460 { "vpsraw", { XM, Vex128, EXx } },
d5d7db8e 8461 { "(bad)", { XX } },
c0f3af97
L
8462 },
8463
8464 /* VEX_LEN_E2_P_2 */
8465 {
8466 { "vpsrad", { XM, Vex128, EXx } },
d5d7db8e 8467 { "(bad)", { XX } },
c0f3af97
L
8468 },
8469
8470 /* VEX_LEN_E3_P_2 */
8471 {
8472 { "vpavgw", { XM, Vex128, EXx } },
d5d7db8e 8473 { "(bad)", { XX } },
c0f3af97
L
8474 },
8475
8476 /* VEX_LEN_E4_P_2 */
8477 {
8478 { "vpmulhuw", { XM, Vex128, EXx } },
d5d7db8e 8479 { "(bad)", { XX } },
c0f3af97
L
8480 },
8481
8482 /* VEX_LEN_E5_P_2 */
8483 {
8484 { "vpmulhw", { XM, Vex128, EXx } },
d5d7db8e 8485 { "(bad)", { XX } },
c0f3af97
L
8486 },
8487
c0f3af97
L
8488 /* VEX_LEN_E8_P_2 */
8489 {
8490 { "vpsubsb", { XM, Vex128, EXx } },
d5d7db8e 8491 { "(bad)", { XX } },
c0f3af97
L
8492 },
8493
8494 /* VEX_LEN_E9_P_2 */
8495 {
8496 { "vpsubsw", { XM, Vex128, EXx } },
d5d7db8e 8497 { "(bad)", { XX } },
c0f3af97
L
8498 },
8499
8500 /* VEX_LEN_EA_P_2 */
8501 {
8502 { "vpminsw", { XM, Vex128, EXx } },
d5d7db8e 8503 { "(bad)", { XX } },
c0f3af97
L
8504 },
8505
8506 /* VEX_LEN_EB_P_2 */
8507 {
8508 { "vpor", { XM, Vex128, EXx } },
d5d7db8e 8509 { "(bad)", { XX } },
c0f3af97
L
8510 },
8511
8512 /* VEX_LEN_EC_P_2 */
8513 {
8514 { "vpaddsb", { XM, Vex128, EXx } },
d5d7db8e 8515 { "(bad)", { XX } },
c0f3af97
L
8516 },
8517
8518 /* VEX_LEN_ED_P_2 */
8519 {
8520 { "vpaddsw", { XM, Vex128, EXx } },
d5d7db8e 8521 { "(bad)", { XX } },
c0f3af97
L
8522 },
8523
8524 /* VEX_LEN_EE_P_2 */
8525 {
8526 { "vpmaxsw", { XM, Vex128, EXx } },
d5d7db8e 8527 { "(bad)", { XX } },
c0f3af97
L
8528 },
8529
8530 /* VEX_LEN_EF_P_2 */
8531 {
8532 { "vpxor", { XM, Vex128, EXx } },
d5d7db8e 8533 { "(bad)", { XX } },
c0f3af97
L
8534 },
8535
8536 /* VEX_LEN_F1_P_2 */
8537 {
8538 { "vpsllw", { XM, Vex128, EXx } },
d5d7db8e 8539 { "(bad)", { XX } },
c0f3af97
L
8540 },
8541
8542 /* VEX_LEN_F2_P_2 */
8543 {
8544 { "vpslld", { XM, Vex128, EXx } },
d5d7db8e 8545 { "(bad)", { XX } },
c0f3af97
L
8546 },
8547
8548 /* VEX_LEN_F3_P_2 */
8549 {
8550 { "vpsllq", { XM, Vex128, EXx } },
d5d7db8e 8551 { "(bad)", { XX } },
c0f3af97
L
8552 },
8553
8554 /* VEX_LEN_F4_P_2 */
8555 {
8556 { "vpmuludq", { XM, Vex128, EXx } },
d5d7db8e 8557 { "(bad)", { XX } },
c0f3af97
L
8558 },
8559
8560 /* VEX_LEN_F5_P_2 */
8561 {
8562 { "vpmaddwd", { XM, Vex128, EXx } },
d5d7db8e 8563 { "(bad)", { XX } },
c0f3af97
L
8564 },
8565
8566 /* VEX_LEN_F6_P_2 */
8567 {
8568 { "vpsadbw", { XM, Vex128, EXx } },
d5d7db8e 8569 { "(bad)", { XX } },
c0f3af97
L
8570 },
8571
8572 /* VEX_LEN_F7_P_2 */
8573 {
8574 { "vmaskmovdqu", { XM, XS } },
d5d7db8e 8575 { "(bad)", { XX } },
c0f3af97
L
8576 },
8577
8578 /* VEX_LEN_F8_P_2 */
8579 {
8580 { "vpsubb", { XM, Vex128, EXx } },
d5d7db8e 8581 { "(bad)", { XX } },
c0f3af97
L
8582 },
8583
8584 /* VEX_LEN_F9_P_2 */
8585 {
8586 { "vpsubw", { XM, Vex128, EXx } },
d5d7db8e 8587 { "(bad)", { XX } },
c0f3af97
L
8588 },
8589
8590 /* VEX_LEN_FA_P_2 */
8591 {
8592 { "vpsubd", { XM, Vex128, EXx } },
d5d7db8e 8593 { "(bad)", { XX } },
c0f3af97
L
8594 },
8595
8596 /* VEX_LEN_FB_P_2 */
8597 {
8598 { "vpsubq", { XM, Vex128, EXx } },
d5d7db8e 8599 { "(bad)", { XX } },
c0f3af97
L
8600 },
8601
8602 /* VEX_LEN_FC_P_2 */
8603 {
8604 { "vpaddb", { XM, Vex128, EXx } },
d5d7db8e 8605 { "(bad)", { XX } },
c0f3af97
L
8606 },
8607
8608 /* VEX_LEN_FD_P_2 */
8609 {
8610 { "vpaddw", { XM, Vex128, EXx } },
d5d7db8e 8611 { "(bad)", { XX } },
c0f3af97
L
8612 },
8613
8614 /* VEX_LEN_FE_P_2 */
8615 {
8616 { "vpaddd", { XM, Vex128, EXx } },
d5d7db8e 8617 { "(bad)", { XX } },
c0f3af97
L
8618 },
8619
8620 /* VEX_LEN_3800_P_2 */
8621 {
8622 { "vpshufb", { XM, Vex128, EXx } },
d5d7db8e 8623 { "(bad)", { XX } },
c0f3af97
L
8624 },
8625
8626 /* VEX_LEN_3801_P_2 */
8627 {
8628 { "vphaddw", { XM, Vex128, EXx } },
d5d7db8e 8629 { "(bad)", { XX } },
c0f3af97
L
8630 },
8631
8632 /* VEX_LEN_3802_P_2 */
8633 {
8634 { "vphaddd", { XM, Vex128, EXx } },
d5d7db8e 8635 { "(bad)", { XX } },
c0f3af97
L
8636 },
8637
8638 /* VEX_LEN_3803_P_2 */
8639 {
8640 { "vphaddsw", { XM, Vex128, EXx } },
d5d7db8e 8641 { "(bad)", { XX } },
c0f3af97
L
8642 },
8643
8644 /* VEX_LEN_3804_P_2 */
8645 {
8646 { "vpmaddubsw", { XM, Vex128, EXx } },
d5d7db8e 8647 { "(bad)", { XX } },
c0f3af97
L
8648 },
8649
8650 /* VEX_LEN_3805_P_2 */
8651 {
8652 { "vphsubw", { XM, Vex128, EXx } },
d5d7db8e 8653 { "(bad)", { XX } },
c0f3af97
L
8654 },
8655
8656 /* VEX_LEN_3806_P_2 */
8657 {
8658 { "vphsubd", { XM, Vex128, EXx } },
d5d7db8e 8659 { "(bad)", { XX } },
c0f3af97
L
8660 },
8661
8662 /* VEX_LEN_3807_P_2 */
8663 {
8664 { "vphsubsw", { XM, Vex128, EXx } },
d5d7db8e 8665 { "(bad)", { XX } },
c0f3af97
L
8666 },
8667
8668 /* VEX_LEN_3808_P_2 */
8669 {
8670 { "vpsignb", { XM, Vex128, EXx } },
d5d7db8e 8671 { "(bad)", { XX } },
c0f3af97
L
8672 },
8673
8674 /* VEX_LEN_3809_P_2 */
8675 {
8676 { "vpsignw", { XM, Vex128, EXx } },
d5d7db8e 8677 { "(bad)", { XX } },
c0f3af97
L
8678 },
8679
8680 /* VEX_LEN_380A_P_2 */
8681 {
8682 { "vpsignd", { XM, Vex128, EXx } },
d5d7db8e 8683 { "(bad)", { XX } },
c0f3af97
L
8684 },
8685
8686 /* VEX_LEN_380B_P_2 */
8687 {
8688 { "vpmulhrsw", { XM, Vex128, EXx } },
d5d7db8e 8689 { "(bad)", { XX } },
c0f3af97
L
8690 },
8691
8692 /* VEX_LEN_3819_P_2_M_0 */
8693 {
d5d7db8e 8694 { "(bad)", { XX } },
c0f3af97
L
8695 { "vbroadcastsd", { XM, Mq } },
8696 },
8697
8698 /* VEX_LEN_381A_P_2_M_0 */
8699 {
d5d7db8e 8700 { "(bad)", { XX } },
c0f3af97
L
8701 { "vbroadcastf128", { XM, Mxmm } },
8702 },
8703
8704 /* VEX_LEN_381C_P_2 */
8705 {
8706 { "vpabsb", { XM, EXx } },
d5d7db8e 8707 { "(bad)", { XX } },
c0f3af97
L
8708 },
8709
8710 /* VEX_LEN_381D_P_2 */
8711 {
8712 { "vpabsw", { XM, EXx } },
d5d7db8e 8713 { "(bad)", { XX } },
c0f3af97
L
8714 },
8715
8716 /* VEX_LEN_381E_P_2 */
8717 {
8718 { "vpabsd", { XM, EXx } },
d5d7db8e 8719 { "(bad)", { XX } },
c0f3af97
L
8720 },
8721
8722 /* VEX_LEN_3820_P_2 */
8723 {
8724 { "vpmovsxbw", { XM, EXq } },
d5d7db8e 8725 { "(bad)", { XX } },
c0f3af97
L
8726 },
8727
8728 /* VEX_LEN_3821_P_2 */
8729 {
8730 { "vpmovsxbd", { XM, EXd } },
d5d7db8e 8731 { "(bad)", { XX } },
c0f3af97
L
8732 },
8733
8734 /* VEX_LEN_3822_P_2 */
8735 {
8736 { "vpmovsxbq", { XM, EXw } },
d5d7db8e 8737 { "(bad)", { XX } },
c0f3af97
L
8738 },
8739
8740 /* VEX_LEN_3823_P_2 */
8741 {
8742 { "vpmovsxwd", { XM, EXq } },
d5d7db8e 8743 { "(bad)", { XX } },
c0f3af97
L
8744 },
8745
8746 /* VEX_LEN_3824_P_2 */
8747 {
8748 { "vpmovsxwq", { XM, EXd } },
d5d7db8e 8749 { "(bad)", { XX } },
c0f3af97
L
8750 },
8751
8752 /* VEX_LEN_3825_P_2 */
8753 {
8754 { "vpmovsxdq", { XM, EXq } },
d5d7db8e 8755 { "(bad)", { XX } },
c0f3af97
L
8756 },
8757
8758 /* VEX_LEN_3828_P_2 */
8759 {
8760 { "vpmuldq", { XM, Vex128, EXx } },
d5d7db8e 8761 { "(bad)", { XX } },
c0f3af97
L
8762 },
8763
8764 /* VEX_LEN_3829_P_2 */
8765 {
8766 { "vpcmpeqq", { XM, Vex128, EXx } },
d5d7db8e 8767 { "(bad)", { XX } },
c0f3af97
L
8768 },
8769
8770 /* VEX_LEN_382A_P_2_M_0 */
8771 {
8772 { "vmovntdqa", { XM, Mx } },
d5d7db8e 8773 { "(bad)", { XX } },
c0f3af97
L
8774 },
8775
8776 /* VEX_LEN_382B_P_2 */
8777 {
8778 { "vpackusdw", { XM, Vex128, EXx } },
d5d7db8e 8779 { "(bad)", { XX } },
c0f3af97
L
8780 },
8781
8782 /* VEX_LEN_3830_P_2 */
8783 {
8784 { "vpmovzxbw", { XM, EXq } },
d5d7db8e 8785 { "(bad)", { XX } },
c0f3af97
L
8786 },
8787
8788 /* VEX_LEN_3831_P_2 */
8789 {
8790 { "vpmovzxbd", { XM, EXd } },
d5d7db8e 8791 { "(bad)", { XX } },
c0f3af97
L
8792 },
8793
8794 /* VEX_LEN_3832_P_2 */
8795 {
8796 { "vpmovzxbq", { XM, EXw } },
d5d7db8e 8797 { "(bad)", { XX } },
c0f3af97
L
8798 },
8799
8800 /* VEX_LEN_3833_P_2 */
8801 {
8802 { "vpmovzxwd", { XM, EXq } },
d5d7db8e 8803 { "(bad)", { XX } },
c0f3af97
L
8804 },
8805
8806 /* VEX_LEN_3834_P_2 */
8807 {
8808 { "vpmovzxwq", { XM, EXd } },
d5d7db8e 8809 { "(bad)", { XX } },
c0f3af97
L
8810 },
8811
8812 /* VEX_LEN_3835_P_2 */
8813 {
8814 { "vpmovzxdq", { XM, EXq } },
d5d7db8e 8815 { "(bad)", { XX } },
c0f3af97
L
8816 },
8817
8818 /* VEX_LEN_3837_P_2 */
8819 {
8820 { "vpcmpgtq", { XM, Vex128, EXx } },
d5d7db8e 8821 { "(bad)", { XX } },
c0f3af97
L
8822 },
8823
8824 /* VEX_LEN_3838_P_2 */
8825 {
8826 { "vpminsb", { XM, Vex128, EXx } },
d5d7db8e 8827 { "(bad)", { XX } },
c0f3af97
L
8828 },
8829
8830 /* VEX_LEN_3839_P_2 */
8831 {
8832 { "vpminsd", { XM, Vex128, EXx } },
d5d7db8e 8833 { "(bad)", { XX } },
c0f3af97
L
8834 },
8835
8836 /* VEX_LEN_383A_P_2 */
8837 {
8838 { "vpminuw", { XM, Vex128, EXx } },
d5d7db8e 8839 { "(bad)", { XX } },
c0f3af97
L
8840 },
8841
8842 /* VEX_LEN_383B_P_2 */
8843 {
8844 { "vpminud", { XM, Vex128, EXx } },
d5d7db8e 8845 { "(bad)", { XX } },
c0f3af97
L
8846 },
8847
8848 /* VEX_LEN_383C_P_2 */
8849 {
8850 { "vpmaxsb", { XM, Vex128, EXx } },
d5d7db8e 8851 { "(bad)", { XX } },
c0f3af97
L
8852 },
8853
8854 /* VEX_LEN_383D_P_2 */
8855 {
8856 { "vpmaxsd", { XM, Vex128, EXx } },
d5d7db8e 8857 { "(bad)", { XX } },
c0f3af97
L
8858 },
8859
8860 /* VEX_LEN_383E_P_2 */
8861 {
8862 { "vpmaxuw", { XM, Vex128, EXx } },
d5d7db8e 8863 { "(bad)", { XX } },
c0f3af97
L
8864 },
8865
8866 /* VEX_LEN_383F_P_2 */
8867 {
8868 { "vpmaxud", { XM, Vex128, EXx } },
d5d7db8e 8869 { "(bad)", { XX } },
c0f3af97
L
8870 },
8871
8872 /* VEX_LEN_3840_P_2 */
8873 {
8874 { "vpmulld", { XM, Vex128, EXx } },
d5d7db8e 8875 { "(bad)", { XX } },
c0f3af97
L
8876 },
8877
8878 /* VEX_LEN_3841_P_2 */
8879 {
8880 { "vphminposuw", { XM, EXx } },
d5d7db8e 8881 { "(bad)", { XX } },
c0f3af97
L
8882 },
8883
a5ff0eb2
L
8884 /* VEX_LEN_38DB_P_2 */
8885 {
8886 { "vaesimc", { XM, EXx } },
8887 { "(bad)", { XX } },
8888 },
8889
8890 /* VEX_LEN_38DC_P_2 */
8891 {
8892 { "vaesenc", { XM, Vex128, EXx } },
8893 { "(bad)", { XX } },
8894 },
8895
8896 /* VEX_LEN_38DD_P_2 */
8897 {
8898 { "vaesenclast", { XM, Vex128, EXx } },
8899 { "(bad)", { XX } },
8900 },
8901
8902 /* VEX_LEN_38DE_P_2 */
8903 {
8904 { "vaesdec", { XM, Vex128, EXx } },
8905 { "(bad)", { XX } },
8906 },
8907
8908 /* VEX_LEN_38DF_P_2 */
8909 {
8910 { "vaesdeclast", { XM, Vex128, EXx } },
8911 { "(bad)", { XX } },
8912 },
8913
c0f3af97
L
8914 /* VEX_LEN_3A06_P_2 */
8915 {
d5d7db8e 8916 { "(bad)", { XX } },
c0f3af97
L
8917 { "vperm2f128", { XM, Vex256, EXx, Ib } },
8918 },
8919
8920 /* VEX_LEN_3A0A_P_2 */
8921 {
8922 { "vroundss", { XM, Vex128, EXd, Ib } },
d5d7db8e 8923 { "(bad)", { XX } },
c0f3af97
L
8924 },
8925
8926 /* VEX_LEN_3A0B_P_2 */
8927 {
8928 { "vroundsd", { XM, Vex128, EXq, Ib } },
d5d7db8e 8929 { "(bad)", { XX } },
c0f3af97
L
8930 },
8931
8932 /* VEX_LEN_3A0E_P_2 */
8933 {
8934 { "vpblendw", { XM, Vex128, EXx, Ib } },
d5d7db8e 8935 { "(bad)", { XX } },
c0f3af97
L
8936 },
8937
8938 /* VEX_LEN_3A0F_P_2 */
8939 {
8940 { "vpalignr", { XM, Vex128, EXx, Ib } },
d5d7db8e 8941 { "(bad)", { XX } },
c0f3af97
L
8942 },
8943
8944 /* VEX_LEN_3A14_P_2 */
8945 {
8946 { "vpextrb", { Edqb, XM, Ib } },
d5d7db8e 8947 { "(bad)", { XX } },
c0f3af97
L
8948 },
8949
8950 /* VEX_LEN_3A15_P_2 */
8951 {
8952 { "vpextrw", { Edqw, XM, Ib } },
d5d7db8e 8953 { "(bad)", { XX } },
c0f3af97
L
8954 },
8955
8956 /* VEX_LEN_3A16_P_2 */
8957 {
8958 { "vpextrK", { Edq, XM, Ib } },
d5d7db8e 8959 { "(bad)", { XX } },
c0f3af97
L
8960 },
8961
8962 /* VEX_LEN_3A17_P_2 */
8963 {
8964 { "vextractps", { Edqd, XM, Ib } },
d5d7db8e 8965 { "(bad)", { XX } },
c0f3af97
L
8966 },
8967
8968 /* VEX_LEN_3A18_P_2 */
8969 {
d5d7db8e 8970 { "(bad)", { XX } },
c0f3af97
L
8971 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
8972 },
8973
8974 /* VEX_LEN_3A19_P_2 */
8975 {
d5d7db8e 8976 { "(bad)", { XX } },
c0f3af97
L
8977 { "vextractf128", { EXxmm, XM, Ib } },
8978 },
8979
8980 /* VEX_LEN_3A20_P_2 */
8981 {
8982 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
d5d7db8e 8983 { "(bad)", { XX } },
c0f3af97
L
8984 },
8985
8986 /* VEX_LEN_3A21_P_2 */
8987 {
8988 { "vinsertps", { XM, Vex128, EXd, Ib } },
d5d7db8e 8989 { "(bad)", { XX } },
c0f3af97
L
8990 },
8991
8992 /* VEX_LEN_3A22_P_2 */
8993 {
8994 { "vpinsrK", { XM, Vex128, Edq, Ib } },
d5d7db8e 8995 { "(bad)", { XX } },
c0f3af97
L
8996 },
8997
8998 /* VEX_LEN_3A41_P_2 */
8999 {
9000 { "vdppd", { XM, Vex128, EXx, Ib } },
d5d7db8e 9001 { "(bad)", { XX } },
c0f3af97
L
9002 },
9003
9004 /* VEX_LEN_3A42_P_2 */
9005 {
9006 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
d5d7db8e 9007 { "(bad)", { XX } },
c0f3af97
L
9008 },
9009
9010 /* VEX_LEN_3A4C_P_2 */
9011 {
9012 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
d5d7db8e 9013 { "(bad)", { XX } },
c0f3af97
L
9014 },
9015
9016 /* VEX_LEN_3A60_P_2 */
9017 {
9018 { "vpcmpestrm", { XM, EXx, Ib } },
d5d7db8e 9019 { "(bad)", { XX } },
c0f3af97
L
9020 },
9021
9022 /* VEX_LEN_3A61_P_2 */
9023 {
9024 { "vpcmpestri", { XM, EXx, Ib } },
d5d7db8e 9025 { "(bad)", { XX } },
c0f3af97
L
9026 },
9027
9028 /* VEX_LEN_3A62_P_2 */
9029 {
9030 { "vpcmpistrm", { XM, EXx, Ib } },
d5d7db8e 9031 { "(bad)", { XX } },
c0f3af97
L
9032 },
9033
9034 /* VEX_LEN_3A63_P_2 */
9035 {
9036 { "vpcmpistri", { XM, EXx, Ib } },
d5d7db8e 9037 { "(bad)", { XX } },
c0f3af97
L
9038 },
9039
a5ff0eb2
L
9040 /* VEX_LEN_3ADF_P_2 */
9041 {
9042 { "vaeskeygenassist", { XM, EXx, Ib } },
9043 { "(bad)", { XX } },
9044 },
331d2d0d
L
9045};
9046
1ceb70f8 9047static const struct dis386 mod_table[][2] = {
b844680a 9048 {
1ceb70f8 9049 /* MOD_8D */
d8faab4e
L
9050 { "leaS", { Gv, M } },
9051 { "(bad)", { XX } },
9052 },
9053 {
92fddf8e
L
9054 /* MOD_0F01_REG_0 */
9055 { X86_64_TABLE (X86_64_0F01_REG_0) },
9056 { RM_TABLE (RM_0F01_REG_0) },
d8faab4e
L
9057 },
9058 {
92fddf8e
L
9059 /* MOD_0F01_REG_1 */
9060 { X86_64_TABLE (X86_64_0F01_REG_1) },
9061 { RM_TABLE (RM_0F01_REG_1) },
d8faab4e
L
9062 },
9063 {
92fddf8e
L
9064 /* MOD_0F01_REG_2 */
9065 { X86_64_TABLE (X86_64_0F01_REG_2) },
475a2301 9066 { RM_TABLE (RM_0F01_REG_2) },
d8faab4e
L
9067 },
9068 {
92fddf8e
L
9069 /* MOD_0F01_REG_3 */
9070 { X86_64_TABLE (X86_64_0F01_REG_3) },
9071 { RM_TABLE (RM_0F01_REG_3) },
d8faab4e
L
9072 },
9073 {
92fddf8e
L
9074 /* MOD_0F01_REG_7 */
9075 { "invlpg", { Mb } },
9076 { RM_TABLE (RM_0F01_REG_7) },
b844680a
L
9077 },
9078 {
92fddf8e
L
9079 /* MOD_0F12_PREFIX_0 */
9080 { "movlps", { XM, EXq } },
9081 { "movhlps", { XM, EXq } },
b844680a
L
9082 },
9083 {
92fddf8e
L
9084 /* MOD_0F13 */
9085 { "movlpX", { EXq, XM } },
d8faab4e
L
9086 { "(bad)", { XX } },
9087 },
9088 {
92fddf8e
L
9089 /* MOD_0F16_PREFIX_0 */
9090 { "movhps", { XM, EXq } },
9091 { "movlhps", { XM, EXq } },
b844680a
L
9092 },
9093 {
92fddf8e
L
9094 /* MOD_0F17 */
9095 { "movhpX", { EXq, XM } },
b844680a
L
9096 { "(bad)", { XX } },
9097 },
9098 {
92fddf8e
L
9099 /* MOD_0F18_REG_0 */
9100 { "prefetchnta", { Mb } },
b844680a 9101 { "(bad)", { XX } },
b844680a
L
9102 },
9103 {
92fddf8e
L
9104 /* MOD_0F18_REG_1 */
9105 { "prefetcht0", { Mb } },
9106 { "(bad)", { XX } },
b844680a
L
9107 },
9108 {
92fddf8e
L
9109 /* MOD_0F18_REG_2 */
9110 { "prefetcht1", { Mb } },
9111 { "(bad)", { XX } },
b844680a
L
9112 },
9113 {
92fddf8e
L
9114 /* MOD_0F18_REG_3 */
9115 { "prefetcht2", { Mb } },
b844680a 9116 { "(bad)", { XX } },
b844680a
L
9117 },
9118 {
92fddf8e
L
9119 /* MOD_0F20 */
9120 { "(bad)", { XX } },
9121 { "movZ", { Rm, Cm } },
b844680a
L
9122 },
9123 {
92fddf8e
L
9124 /* MOD_0F21 */
9125 { "(bad)", { XX } },
9126 { "movZ", { Rm, Dm } },
b844680a
L
9127 },
9128 {
92fddf8e 9129 /* MOD_0F22 */
b844680a 9130 { "(bad)", { XX } },
92fddf8e 9131 { "movZ", { Cm, Rm } },
b844680a
L
9132 },
9133 {
92fddf8e 9134 /* MOD_0F23 */
b844680a 9135 { "(bad)", { XX } },
92fddf8e 9136 { "movZ", { Dm, Rm } },
b844680a
L
9137 },
9138 {
92fddf8e
L
9139 /* MOD_0F24 */
9140 { THREE_BYTE_TABLE (THREE_BYTE_0F24) },
9141 { "movL", { Rd, Td } },
b844680a
L
9142 },
9143 {
92fddf8e 9144 /* MOD_0F26 */
b844680a 9145 { "(bad)", { XX } },
92fddf8e 9146 { "movL", { Td, Rd } },
b844680a 9147 },
75c135a8
L
9148 {
9149 /* MOD_0F2B_PREFIX_0 */
4ee52178 9150 {"movntps", { Mx, XM } },
75c135a8
L
9151 { "(bad)", { XX } },
9152 },
9153 {
9154 /* MOD_0F2B_PREFIX_1 */
4ee52178 9155 {"movntss", { Md, XM } },
75c135a8
L
9156 { "(bad)", { XX } },
9157 },
9158 {
9159 /* MOD_0F2B_PREFIX_2 */
4ee52178 9160 {"movntpd", { Mx, XM } },
75c135a8
L
9161 { "(bad)", { XX } },
9162 },
9163 {
9164 /* MOD_0F2B_PREFIX_3 */
4ee52178 9165 {"movntsd", { Mq, XM } },
75c135a8
L
9166 { "(bad)", { XX } },
9167 },
9168 {
9169 /* MOD_0F51 */
9170 { "(bad)", { XX } },
9171 { "movmskpX", { Gdq, XS } },
9172 },
b844680a 9173 {
1ceb70f8 9174 /* MOD_0F71_REG_2 */
b844680a 9175 { "(bad)", { XX } },
4e7d34a6 9176 { "psrlw", { MS, Ib } },
b844680a
L
9177 },
9178 {
1ceb70f8 9179 /* MOD_0F71_REG_4 */
b844680a 9180 { "(bad)", { XX } },
4e7d34a6 9181 { "psraw", { MS, Ib } },
b844680a
L
9182 },
9183 {
1ceb70f8 9184 /* MOD_0F71_REG_6 */
b844680a 9185 { "(bad)", { XX } },
4e7d34a6 9186 { "psllw", { MS, Ib } },
b844680a
L
9187 },
9188 {
1ceb70f8 9189 /* MOD_0F72_REG_2 */
b844680a 9190 { "(bad)", { XX } },
4e7d34a6 9191 { "psrld", { MS, Ib } },
b844680a
L
9192 },
9193 {
1ceb70f8 9194 /* MOD_0F72_REG_4 */
b844680a 9195 { "(bad)", { XX } },
4e7d34a6 9196 { "psrad", { MS, Ib } },
b844680a
L
9197 },
9198 {
1ceb70f8 9199 /* MOD_0F72_REG_6 */
b844680a 9200 { "(bad)", { XX } },
4e7d34a6 9201 { "pslld", { MS, Ib } },
b844680a
L
9202 },
9203 {
1ceb70f8 9204 /* MOD_0F73_REG_2 */
4e7d34a6
L
9205 { "(bad)", { XX } },
9206 { "psrlq", { MS, Ib } },
b844680a
L
9207 },
9208 {
1ceb70f8 9209 /* MOD_0F73_REG_3 */
b844680a 9210 { "(bad)", { XX } },
c0f3af97
L
9211 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
9212 },
9213 {
9214 /* MOD_0F73_REG_6 */
9215 { "(bad)", { XX } },
9216 { "psllq", { MS, Ib } },
9217 },
9218 {
9219 /* MOD_0F73_REG_7 */
9220 { "(bad)", { XX } },
9221 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
9222 },
9223 {
9224 /* MOD_0FAE_REG_0 */
9225 { "fxsave", { M } },
9226 { "(bad)", { XX } },
9227 },
9228 {
9229 /* MOD_0FAE_REG_1 */
9230 { "fxrstor", { M } },
9231 { "(bad)", { XX } },
9232 },
9233 {
9234 /* MOD_0FAE_REG_2 */
9235 { "ldmxcsr", { Md } },
9236 { "(bad)", { XX } },
9237 },
9238 {
9239 /* MOD_0FAE_REG_3 */
9240 { "stmxcsr", { Md } },
9241 { "(bad)", { XX } },
9242 },
9243 {
9244 /* MOD_0FAE_REG_4 */
9245 { "xsave", { M } },
9246 { "(bad)", { XX } },
9247 },
9248 {
9249 /* MOD_0FAE_REG_5 */
9250 { "xrstor", { M } },
9251 { RM_TABLE (RM_0FAE_REG_5) },
9252 },
9253 {
9254 /* MOD_0FAE_REG_6 */
9255 { "xsaveopt", { M } },
9256 { RM_TABLE (RM_0FAE_REG_6) },
9257 },
9258 {
9259 /* MOD_0FAE_REG_7 */
9260 { "clflush", { Mb } },
9261 { RM_TABLE (RM_0FAE_REG_7) },
9262 },
9263 {
9264 /* MOD_0FB2 */
9265 { "lssS", { Gv, Mp } },
9266 { "(bad)", { XX } },
9267 },
9268 {
9269 /* MOD_0FB4 */
9270 { "lfsS", { Gv, Mp } },
9271 { "(bad)", { XX } },
9272 },
9273 {
9274 /* MOD_0FB5 */
9275 { "lgsS", { Gv, Mp } },
9276 { "(bad)", { XX } },
9277 },
9278 {
9279 /* MOD_0FC7_REG_6 */
9280 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
9281 { "(bad)", { XX } },
9282 },
9283 {
9284 /* MOD_0FC7_REG_7 */
9285 { "vmptrst", { Mq } },
9286 { "(bad)", { XX } },
9287 },
9288 {
9289 /* MOD_0FD7 */
9290 { "(bad)", { XX } },
9291 { "pmovmskb", { Gdq, MS } },
9292 },
9293 {
9294 /* MOD_0FE7_PREFIX_2 */
9295 { "movntdq", { Mx, XM } },
9296 { "(bad)", { XX } },
9297 },
9298 {
9299 /* MOD_0FF0_PREFIX_3 */
9300 { "lddqu", { XM, M } },
9301 { "(bad)", { XX } },
9302 },
9303 {
9304 /* MOD_0F382A_PREFIX_2 */
9305 { "movntdqa", { XM, Mx } },
9306 { "(bad)", { XX } },
9307 },
9308 {
9309 /* MOD_62_32BIT */
9310 { "bound{S|}", { Gv, Ma } },
9311 { "(bad)", { XX } },
9312 },
9313 {
9314 /* MOD_C4_32BIT */
9315 { "lesS", { Gv, Mp } },
9316 { VEX_C4_TABLE (VEX_0F) },
9317 },
9318 {
9319 /* MOD_C5_32BIT */
9320 { "ldsS", { Gv, Mp } },
9321 { VEX_C5_TABLE (VEX_0F) },
9322 },
9323 {
9324 /* MOD_VEX_12_PREFIX_0 */
9325 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) },
9326 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) },
9327 },
9328 {
9329 /* MOD_VEX_13 */
9330 { VEX_LEN_TABLE (VEX_LEN_13_M_0) },
9331 { "(bad)", { XX } },
9332 },
9333 {
9334 /* MOD_VEX_16_PREFIX_0 */
9335 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) },
9336 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) },
9337 },
9338 {
9339 /* MOD_VEX_17 */
9340 { VEX_LEN_TABLE (VEX_LEN_17_M_0) },
9341 { "(bad)", { XX } },
9342 },
9343 {
9344 /* MOD_VEX_2B */
168e3097 9345 { "vmovntpX", { Mx, XM } },
c0f3af97
L
9346 { "(bad)", { XX } },
9347 },
9348 {
9349 /* MOD_VEX_51 */
9350 { "(bad)", { XX } },
9351 { "vmovmskpX", { Gdq, XS } },
9352 },
9353 {
9354 /* MOD_VEX_71_REG_2 */
9355 { "(bad)", { XX } },
9356 { PREFIX_TABLE (PREFIX_VEX_71_REG_2) },
b844680a
L
9357 },
9358 {
c0f3af97 9359 /* MOD_VEX_71_REG_4 */
b844680a 9360 { "(bad)", { XX } },
c0f3af97 9361 { PREFIX_TABLE (PREFIX_VEX_71_REG_4) },
b844680a
L
9362 },
9363 {
c0f3af97 9364 /* MOD_VEX_71_REG_6 */
b844680a 9365 { "(bad)", { XX } },
c0f3af97 9366 { PREFIX_TABLE (PREFIX_VEX_71_REG_6) },
b844680a
L
9367 },
9368 {
c0f3af97 9369 /* MOD_VEX_72_REG_2 */
b844680a 9370 { "(bad)", { XX } },
c0f3af97 9371 { PREFIX_TABLE (PREFIX_VEX_72_REG_2) },
b844680a 9372 },
d8faab4e 9373 {
c0f3af97 9374 /* MOD_VEX_72_REG_4 */
d8faab4e 9375 { "(bad)", { XX } },
c0f3af97 9376 { PREFIX_TABLE (PREFIX_VEX_72_REG_4) },
d8faab4e
L
9377 },
9378 {
c0f3af97 9379 /* MOD_VEX_72_REG_6 */
d8faab4e 9380 { "(bad)", { XX } },
c0f3af97 9381 { PREFIX_TABLE (PREFIX_VEX_72_REG_6) },
d8faab4e 9382 },
876d4bfa 9383 {
c0f3af97 9384 /* MOD_VEX_73_REG_2 */
876d4bfa 9385 { "(bad)", { XX } },
c0f3af97 9386 { PREFIX_TABLE (PREFIX_VEX_73_REG_2) },
876d4bfa
L
9387 },
9388 {
c0f3af97 9389 /* MOD_VEX_73_REG_3 */
876d4bfa 9390 { "(bad)", { XX } },
c0f3af97 9391 { PREFIX_TABLE (PREFIX_VEX_73_REG_3) },
475a2301
L
9392 },
9393 {
c0f3af97
L
9394 /* MOD_VEX_73_REG_6 */
9395 { "(bad)", { XX } },
9396 { PREFIX_TABLE (PREFIX_VEX_73_REG_6) },
876d4bfa
L
9397 },
9398 {
c0f3af97 9399 /* MOD_VEX_73_REG_7 */
4e7d34a6 9400 { "(bad)", { XX } },
c0f3af97 9401 { PREFIX_TABLE (PREFIX_VEX_73_REG_7) },
876d4bfa
L
9402 },
9403 {
c0f3af97
L
9404 /* MOD_VEX_AE_REG_2 */
9405 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) },
9406 { "(bad)", { XX } },
876d4bfa 9407 },
bbedc832 9408 {
c0f3af97
L
9409 /* MOD_VEX_AE_REG_3 */
9410 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) },
4e7d34a6 9411 { "(bad)", { XX } },
bbedc832 9412 },
144c41d9 9413 {
c0f3af97 9414 /* MOD_VEX_D7_PREFIX_2 */
4e7d34a6 9415 { "(bad)", { XX } },
c0f3af97 9416 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) },
144c41d9 9417 },
1afd85e3 9418 {
c0f3af97 9419 /* MOD_VEX_E7_PREFIX_2 */
168e3097 9420 { "vmovntdq", { Mx, XM } },
92fddf8e 9421 { "(bad)", { XX } },
1afd85e3
L
9422 },
9423 {
c0f3af97
L
9424 /* MOD_VEX_F0_PREFIX_3 */
9425 { "vlddqu", { XM, M } },
92fddf8e
L
9426 { "(bad)", { XX } },
9427 },
9428 {
c0f3af97
L
9429 /* MOD_VEX_3818_PREFIX_2 */
9430 { "vbroadcastss", { XM, Md } },
92fddf8e 9431 { "(bad)", { XX } },
1afd85e3 9432 },
75c135a8 9433 {
c0f3af97
L
9434 /* MOD_VEX_3819_PREFIX_2 */
9435 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) },
75c135a8 9436 { "(bad)", { XX } },
75c135a8
L
9437 },
9438 {
c0f3af97
L
9439 /* MOD_VEX_381A_PREFIX_2 */
9440 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) },
75c135a8
L
9441 { "(bad)", { XX } },
9442 },
1afd85e3 9443 {
c0f3af97
L
9444 /* MOD_VEX_382A_PREFIX_2 */
9445 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) },
1afd85e3 9446 { "(bad)", { XX } },
1afd85e3 9447 },
75c135a8 9448 {
c0f3af97
L
9449 /* MOD_VEX_382C_PREFIX_2 */
9450 { "vmaskmovps", { XM, Vex, Mx } },
75c135a8
L
9451 { "(bad)", { XX } },
9452 },
1afd85e3 9453 {
c0f3af97
L
9454 /* MOD_VEX_382D_PREFIX_2 */
9455 { "vmaskmovpd", { XM, Vex, Mx } },
1afd85e3 9456 { "(bad)", { XX } },
1afd85e3
L
9457 },
9458 {
c0f3af97
L
9459 /* MOD_VEX_382E_PREFIX_2 */
9460 { "vmaskmovps", { Mx, Vex, XM } },
4e7d34a6 9461 { "(bad)", { XX } },
1afd85e3
L
9462 },
9463 {
c0f3af97
L
9464 /* MOD_VEX_382F_PREFIX_2 */
9465 { "vmaskmovpd", { Mx, Vex, XM } },
1afd85e3 9466 { "(bad)", { XX } },
1afd85e3 9467 },
b844680a
L
9468};
9469
1ceb70f8 9470static const struct dis386 rm_table[][8] = {
b844680a 9471 {
1ceb70f8 9472 /* RM_0F01_REG_0 */
b844680a
L
9473 { "(bad)", { XX } },
9474 { "vmcall", { Skip_MODRM } },
9475 { "vmlaunch", { Skip_MODRM } },
9476 { "vmresume", { Skip_MODRM } },
9477 { "vmxoff", { Skip_MODRM } },
9478 { "(bad)", { XX } },
9479 { "(bad)", { XX } },
9480 { "(bad)", { XX } },
9481 },
9482 {
1ceb70f8 9483 /* RM_0F01_REG_1 */
b844680a
L
9484 { "monitor", { { OP_Monitor, 0 } } },
9485 { "mwait", { { OP_Mwait, 0 } } },
9486 { "(bad)", { XX } },
9487 { "(bad)", { XX } },
9488 { "(bad)", { XX } },
9489 { "(bad)", { XX } },
9490 { "(bad)", { XX } },
9491 { "(bad)", { XX } },
9492 },
475a2301
L
9493 {
9494 /* RM_0F01_REG_2 */
9495 { "xgetbv", { Skip_MODRM } },
9496 { "xsetbv", { Skip_MODRM } },
9497 { "(bad)", { XX } },
9498 { "(bad)", { XX } },
9499 { "(bad)", { XX } },
9500 { "(bad)", { XX } },
9501 { "(bad)", { XX } },
9502 { "(bad)", { XX } },
9503 },
b844680a 9504 {
1ceb70f8 9505 /* RM_0F01_REG_3 */
4e7d34a6
L
9506 { "vmrun", { Skip_MODRM } },
9507 { "vmmcall", { Skip_MODRM } },
9508 { "vmload", { Skip_MODRM } },
9509 { "vmsave", { Skip_MODRM } },
9510 { "stgi", { Skip_MODRM } },
9511 { "clgi", { Skip_MODRM } },
9512 { "skinit", { Skip_MODRM } },
9513 { "invlpga", { Skip_MODRM } },
9514 },
9515 {
1ceb70f8 9516 /* RM_0F01_REG_7 */
4e7d34a6
L
9517 { "swapgs", { Skip_MODRM } },
9518 { "rdtscp", { Skip_MODRM } },
b844680a
L
9519 { "(bad)", { XX } },
9520 { "(bad)", { XX } },
9521 { "(bad)", { XX } },
9522 { "(bad)", { XX } },
9523 { "(bad)", { XX } },
9524 { "(bad)", { XX } },
9525 },
9526 {
1ceb70f8 9527 /* RM_0FAE_REG_5 */
4e7d34a6 9528 { "lfence", { Skip_MODRM } },
b844680a
L
9529 { "(bad)", { XX } },
9530 { "(bad)", { XX } },
9531 { "(bad)", { XX } },
9532 { "(bad)", { XX } },
9533 { "(bad)", { XX } },
9534 { "(bad)", { XX } },
9535 { "(bad)", { XX } },
9536 },
9537 {
1ceb70f8 9538 /* RM_0FAE_REG_6 */
4e7d34a6 9539 { "mfence", { Skip_MODRM } },
b844680a
L
9540 { "(bad)", { XX } },
9541 { "(bad)", { XX } },
9542 { "(bad)", { XX } },
9543 { "(bad)", { XX } },
9544 { "(bad)", { XX } },
9545 { "(bad)", { XX } },
9546 { "(bad)", { XX } },
9547 },
bbedc832 9548 {
1ceb70f8 9549 /* RM_0FAE_REG_7 */
4e7d34a6
L
9550 { "sfence", { Skip_MODRM } },
9551 { "(bad)", { XX } },
bbedc832
L
9552 { "(bad)", { XX } },
9553 { "(bad)", { XX } },
9554 { "(bad)", { XX } },
9555 { "(bad)", { XX } },
9556 { "(bad)", { XX } },
9557 { "(bad)", { XX } },
144c41d9 9558 },
b844680a
L
9559};
9560
c608c12e
AM
9561#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
9562
252b5132 9563static void
26ca5450 9564ckprefix (void)
252b5132 9565{
52b15da3
JH
9566 int newrex;
9567 rex = 0;
c0f3af97
L
9568 rex_original = 0;
9569 rex_ignored = 0;
252b5132 9570 prefixes = 0;
7d421014 9571 used_prefixes = 0;
52b15da3 9572 rex_used = 0;
252b5132
RH
9573 while (1)
9574 {
9575 FETCH_DATA (the_info, codep + 1);
52b15da3 9576 newrex = 0;
252b5132
RH
9577 switch (*codep)
9578 {
52b15da3
JH
9579 /* REX prefixes family. */
9580 case 0x40:
9581 case 0x41:
9582 case 0x42:
9583 case 0x43:
9584 case 0x44:
9585 case 0x45:
9586 case 0x46:
9587 case 0x47:
9588 case 0x48:
9589 case 0x49:
9590 case 0x4a:
9591 case 0x4b:
9592 case 0x4c:
9593 case 0x4d:
9594 case 0x4e:
9595 case 0x4f:
cb712a9e 9596 if (address_mode == mode_64bit)
52b15da3
JH
9597 newrex = *codep;
9598 else
9599 return;
9600 break;
252b5132
RH
9601 case 0xf3:
9602 prefixes |= PREFIX_REPZ;
9603 break;
9604 case 0xf2:
9605 prefixes |= PREFIX_REPNZ;
9606 break;
9607 case 0xf0:
9608 prefixes |= PREFIX_LOCK;
9609 break;
9610 case 0x2e:
9611 prefixes |= PREFIX_CS;
9612 break;
9613 case 0x36:
9614 prefixes |= PREFIX_SS;
9615 break;
9616 case 0x3e:
9617 prefixes |= PREFIX_DS;
9618 break;
9619 case 0x26:
9620 prefixes |= PREFIX_ES;
9621 break;
9622 case 0x64:
9623 prefixes |= PREFIX_FS;
9624 break;
9625 case 0x65:
9626 prefixes |= PREFIX_GS;
9627 break;
9628 case 0x66:
9629 prefixes |= PREFIX_DATA;
9630 break;
9631 case 0x67:
9632 prefixes |= PREFIX_ADDR;
9633 break;
5076851f 9634 case FWAIT_OPCODE:
252b5132
RH
9635 /* fwait is really an instruction. If there are prefixes
9636 before the fwait, they belong to the fwait, *not* to the
9637 following instruction. */
3e7d61b2 9638 if (prefixes || rex)
252b5132
RH
9639 {
9640 prefixes |= PREFIX_FWAIT;
9641 codep++;
9642 return;
9643 }
9644 prefixes = PREFIX_FWAIT;
9645 break;
9646 default:
9647 return;
9648 }
52b15da3
JH
9649 /* Rex is ignored when followed by another prefix. */
9650 if (rex)
9651 {
3e7d61b2
AM
9652 rex_used = rex;
9653 return;
52b15da3
JH
9654 }
9655 rex = newrex;
c0f3af97 9656 rex_original = rex;
252b5132
RH
9657 codep++;
9658 }
9659}
9660
7d421014
ILT
9661/* Return the name of the prefix byte PREF, or NULL if PREF is not a
9662 prefix byte. */
9663
9664static const char *
26ca5450 9665prefix_name (int pref, int sizeflag)
7d421014 9666{
0003779b
L
9667 static const char *rexes [16] =
9668 {
9669 "rex", /* 0x40 */
9670 "rex.B", /* 0x41 */
9671 "rex.X", /* 0x42 */
9672 "rex.XB", /* 0x43 */
9673 "rex.R", /* 0x44 */
9674 "rex.RB", /* 0x45 */
9675 "rex.RX", /* 0x46 */
9676 "rex.RXB", /* 0x47 */
9677 "rex.W", /* 0x48 */
9678 "rex.WB", /* 0x49 */
9679 "rex.WX", /* 0x4a */
9680 "rex.WXB", /* 0x4b */
9681 "rex.WR", /* 0x4c */
9682 "rex.WRB", /* 0x4d */
9683 "rex.WRX", /* 0x4e */
9684 "rex.WRXB", /* 0x4f */
9685 };
9686
7d421014
ILT
9687 switch (pref)
9688 {
52b15da3
JH
9689 /* REX prefixes family. */
9690 case 0x40:
52b15da3 9691 case 0x41:
52b15da3 9692 case 0x42:
52b15da3 9693 case 0x43:
52b15da3 9694 case 0x44:
52b15da3 9695 case 0x45:
52b15da3 9696 case 0x46:
52b15da3 9697 case 0x47:
52b15da3 9698 case 0x48:
52b15da3 9699 case 0x49:
52b15da3 9700 case 0x4a:
52b15da3 9701 case 0x4b:
52b15da3 9702 case 0x4c:
52b15da3 9703 case 0x4d:
52b15da3 9704 case 0x4e:
52b15da3 9705 case 0x4f:
0003779b 9706 return rexes [pref - 0x40];
7d421014
ILT
9707 case 0xf3:
9708 return "repz";
9709 case 0xf2:
9710 return "repnz";
9711 case 0xf0:
9712 return "lock";
9713 case 0x2e:
9714 return "cs";
9715 case 0x36:
9716 return "ss";
9717 case 0x3e:
9718 return "ds";
9719 case 0x26:
9720 return "es";
9721 case 0x64:
9722 return "fs";
9723 case 0x65:
9724 return "gs";
9725 case 0x66:
9726 return (sizeflag & DFLAG) ? "data16" : "data32";
9727 case 0x67:
cb712a9e 9728 if (address_mode == mode_64bit)
db6eb5be 9729 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 9730 else
2888cb7a 9731 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
9732 case FWAIT_OPCODE:
9733 return "fwait";
9734 default:
9735 return NULL;
9736 }
9737}
9738
ce518a5f
L
9739static char op_out[MAX_OPERANDS][100];
9740static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 9741static int two_source_ops;
ce518a5f
L
9742static bfd_vma op_address[MAX_OPERANDS];
9743static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 9744static bfd_vma start_pc;
ce518a5f 9745
252b5132
RH
9746/*
9747 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
9748 * (see topic "Redundant prefixes" in the "Differences from 8086"
9749 * section of the "Virtual 8086 Mode" chapter.)
9750 * 'pc' should be the address of this instruction, it will
9751 * be used to print the target address if this is a relative jump or call
9752 * The function returns the length of this instruction in bytes.
9753 */
9754
252b5132 9755static char intel_syntax;
9d141669 9756static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
9757static char open_char;
9758static char close_char;
9759static char separator_char;
9760static char scale_char;
9761
e396998b
AM
9762/* Here for backwards compatibility. When gdb stops using
9763 print_insn_i386_att and print_insn_i386_intel these functions can
9764 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 9765int
26ca5450 9766print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
9767{
9768 intel_syntax = 0;
e396998b
AM
9769
9770 return print_insn (pc, info);
252b5132
RH
9771}
9772
9773int
26ca5450 9774print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
9775{
9776 intel_syntax = 1;
e396998b
AM
9777
9778 return print_insn (pc, info);
252b5132
RH
9779}
9780
e396998b 9781int
26ca5450 9782print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
9783{
9784 intel_syntax = -1;
9785
9786 return print_insn (pc, info);
9787}
9788
f59a29b9
L
9789void
9790print_i386_disassembler_options (FILE *stream)
9791{
9792 fprintf (stream, _("\n\
9793The following i386/x86-64 specific disassembler options are supported for use\n\
9794with the -M switch (multiple options should be separated by commas):\n"));
9795
9796 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
9797 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
9798 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
9799 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
9800 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
9801 fprintf (stream, _(" att-mnemonic\n"
9802 " Display instruction in AT&T mnemonic\n"));
9803 fprintf (stream, _(" intel-mnemonic\n"
9804 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
9805 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
9806 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
9807 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
9808 fprintf (stream, _(" data32 Assume 32bit data size\n"));
9809 fprintf (stream, _(" data16 Assume 16bit data size\n"));
9810 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
9811}
9812
b844680a
L
9813/* Get a pointer to struct dis386 with a valid name. */
9814
9815static const struct dis386 *
8bb15339 9816get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 9817{
c0f3af97 9818 int index, vex_table_index;
b844680a
L
9819
9820 if (dp->name != NULL)
9821 return dp;
9822
9823 switch (dp->op[0].bytemode)
9824 {
1ceb70f8
L
9825 case USE_REG_TABLE:
9826 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
9827 break;
9828
9829 case USE_MOD_TABLE:
9830 index = modrm.mod == 0x3 ? 1 : 0;
9831 dp = &mod_table[dp->op[1].bytemode][index];
9832 break;
9833
9834 case USE_RM_TABLE:
9835 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
9836 break;
9837
4e7d34a6 9838 case USE_PREFIX_TABLE:
c0f3af97 9839 if (need_vex)
b844680a 9840 {
c0f3af97
L
9841 /* The prefix in VEX is implicit. */
9842 switch (vex.prefix)
9843 {
9844 case 0:
9845 index = 0;
9846 break;
9847 case REPE_PREFIX_OPCODE:
9848 index = 1;
9849 break;
9850 case DATA_PREFIX_OPCODE:
9851 index = 2;
9852 break;
9853 case REPNE_PREFIX_OPCODE:
9854 index = 3;
9855 break;
9856 default:
9857 abort ();
9858 break;
9859 }
b844680a 9860 }
c0f3af97 9861 else
b844680a 9862 {
c0f3af97
L
9863 index = 0;
9864 used_prefixes |= (prefixes & PREFIX_REPZ);
9865 if (prefixes & PREFIX_REPZ)
b844680a 9866 {
c0f3af97
L
9867 index = 1;
9868 repz_prefix = NULL;
b844680a
L
9869 }
9870 else
9871 {
c0f3af97
L
9872 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
9873 PREFIX_DATA. */
9874 used_prefixes |= (prefixes & PREFIX_REPNZ);
9875 if (prefixes & PREFIX_REPNZ)
9876 {
9877 index = 3;
9878 repnz_prefix = NULL;
9879 }
9880 else
b844680a 9881 {
c0f3af97
L
9882 used_prefixes |= (prefixes & PREFIX_DATA);
9883 if (prefixes & PREFIX_DATA)
9884 {
9885 index = 2;
9886 data_prefix = NULL;
9887 }
b844680a
L
9888 }
9889 }
9890 }
1ceb70f8 9891 dp = &prefix_table[dp->op[1].bytemode][index];
b844680a
L
9892 break;
9893
4e7d34a6 9894 case USE_X86_64_TABLE:
b844680a
L
9895 index = address_mode == mode_64bit ? 1 : 0;
9896 dp = &x86_64_table[dp->op[1].bytemode][index];
9897 break;
9898
4e7d34a6 9899 case USE_3BYTE_TABLE:
8bb15339
L
9900 FETCH_DATA (info, codep + 2);
9901 index = *codep++;
9902 dp = &three_byte_table[dp->op[1].bytemode][index];
9903 modrm.mod = (*codep >> 6) & 3;
9904 modrm.reg = (*codep >> 3) & 7;
9905 modrm.rm = *codep & 7;
9906 break;
9907
c0f3af97
L
9908 case USE_VEX_LEN_TABLE:
9909 if (!need_vex)
9910 abort ();
9911
9912 switch (vex.length)
9913 {
9914 case 128:
9915 index = 0;
9916 break;
9917 case 256:
9918 index = 1;
9919 break;
9920 default:
9921 abort ();
9922 break;
9923 }
9924
9925 dp = &vex_len_table[dp->op[1].bytemode][index];
9926 break;
9927
9928 case USE_VEX_C4_TABLE:
9929 FETCH_DATA (info, codep + 3);
9930 /* All bits in the REX prefix are ignored. */
9931 rex_ignored = rex;
9932 rex = ~(*codep >> 5) & 0x7;
9933 switch ((*codep & 0x1f))
9934 {
9935 default:
9936 BadOp ();
9937 case 0x1:
9938 vex_table_index = 0;
9939 break;
9940 case 0x2:
9941 vex_table_index = 1;
9942 break;
9943 case 0x3:
9944 vex_table_index = 2;
9945 break;
9946 }
9947 codep++;
9948 vex.w = *codep & 0x80;
9949 if (vex.w && address_mode == mode_64bit)
9950 rex |= REX_W;
9951
9952 vex.register_specifier = (~(*codep >> 3)) & 0xf;
9953 if (address_mode != mode_64bit
9954 && vex.register_specifier > 0x7)
9955 BadOp ();
9956
9957 vex.length = (*codep & 0x4) ? 256 : 128;
9958 switch ((*codep & 0x3))
9959 {
9960 case 0:
9961 vex.prefix = 0;
9962 break;
9963 case 1:
9964 vex.prefix = DATA_PREFIX_OPCODE;
9965 break;
9966 case 2:
9967 vex.prefix = REPE_PREFIX_OPCODE;
9968 break;
9969 case 3:
9970 vex.prefix = REPNE_PREFIX_OPCODE;
9971 break;
9972 }
9973 need_vex = 1;
9974 need_vex_reg = 1;
9975 codep++;
9976 index = *codep++;
9977 dp = &vex_table[vex_table_index][index];
9978 /* There is no MODRM byte for VEX [82|77]. */
9979 if (index != 0x77 && index != 0x82)
9980 {
9981 FETCH_DATA (info, codep + 1);
9982 modrm.mod = (*codep >> 6) & 3;
9983 modrm.reg = (*codep >> 3) & 7;
9984 modrm.rm = *codep & 7;
9985 }
9986 break;
9987
9988 case USE_VEX_C5_TABLE:
9989 FETCH_DATA (info, codep + 2);
9990 /* All bits in the REX prefix are ignored. */
9991 rex_ignored = rex;
9992 rex = (*codep & 0x80) ? 0 : REX_R;
9993
9994 vex.register_specifier = (~(*codep >> 3)) & 0xf;
9995 if (address_mode != mode_64bit
9996 && vex.register_specifier > 0x7)
9997 BadOp ();
9998
9999 vex.length = (*codep & 0x4) ? 256 : 128;
10000 switch ((*codep & 0x3))
10001 {
10002 case 0:
10003 vex.prefix = 0;
10004 break;
10005 case 1:
10006 vex.prefix = DATA_PREFIX_OPCODE;
10007 break;
10008 case 2:
10009 vex.prefix = REPE_PREFIX_OPCODE;
10010 break;
10011 case 3:
10012 vex.prefix = REPNE_PREFIX_OPCODE;
10013 break;
10014 }
10015 need_vex = 1;
10016 need_vex_reg = 1;
10017 codep++;
10018 index = *codep++;
10019 dp = &vex_table[dp->op[1].bytemode][index];
10020 /* There is no MODRM byte for VEX [82|77]. */
10021 if (index != 0x77 && index != 0x82)
10022 {
10023 FETCH_DATA (info, codep + 1);
10024 modrm.mod = (*codep >> 6) & 3;
10025 modrm.reg = (*codep >> 3) & 7;
10026 modrm.rm = *codep & 7;
10027 }
10028 break;
10029
b844680a
L
10030 default:
10031 oappend (INTERNAL_DISASSEMBLER_ERROR);
10032 return NULL;
10033 }
10034
10035 if (dp->name != NULL)
10036 return dp;
10037 else
8bb15339 10038 return get_valid_dis386 (dp, info);
b844680a
L
10039}
10040
e396998b 10041static int
26ca5450 10042print_insn (bfd_vma pc, disassemble_info *info)
252b5132 10043{
2da11e11 10044 const struct dis386 *dp;
252b5132 10045 int i;
ce518a5f 10046 char *op_txt[MAX_OPERANDS];
252b5132 10047 int needcomma;
e396998b
AM
10048 int sizeflag;
10049 const char *p;
252b5132 10050 struct dis_private priv;
eec0f4ca 10051 unsigned char op;
b844680a
L
10052 char prefix_obuf[32];
10053 char *prefix_obufp;
252b5132 10054
cb712a9e
L
10055 if (info->mach == bfd_mach_x86_64_intel_syntax
10056 || info->mach == bfd_mach_x86_64)
10057 address_mode = mode_64bit;
10058 else
10059 address_mode = mode_32bit;
52b15da3 10060
8373f971 10061 if (intel_syntax == (char) -1)
e396998b
AM
10062 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
10063 || info->mach == bfd_mach_x86_64_intel_syntax);
10064
2da11e11 10065 if (info->mach == bfd_mach_i386_i386
52b15da3
JH
10066 || info->mach == bfd_mach_x86_64
10067 || info->mach == bfd_mach_i386_i386_intel_syntax
10068 || info->mach == bfd_mach_x86_64_intel_syntax)
e396998b 10069 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 10070 else if (info->mach == bfd_mach_i386_i8086)
e396998b 10071 priv.orig_sizeflag = 0;
2da11e11
AM
10072 else
10073 abort ();
e396998b
AM
10074
10075 for (p = info->disassembler_options; p != NULL; )
10076 {
0112cd26 10077 if (CONST_STRNEQ (p, "x86-64"))
e396998b 10078 {
cb712a9e 10079 address_mode = mode_64bit;
e396998b
AM
10080 priv.orig_sizeflag = AFLAG | DFLAG;
10081 }
0112cd26 10082 else if (CONST_STRNEQ (p, "i386"))
e396998b 10083 {
cb712a9e 10084 address_mode = mode_32bit;
e396998b
AM
10085 priv.orig_sizeflag = AFLAG | DFLAG;
10086 }
0112cd26 10087 else if (CONST_STRNEQ (p, "i8086"))
e396998b 10088 {
cb712a9e 10089 address_mode = mode_16bit;
e396998b
AM
10090 priv.orig_sizeflag = 0;
10091 }
0112cd26 10092 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
10093 {
10094 intel_syntax = 1;
9d141669
L
10095 if (CONST_STRNEQ (p + 5, "-mnemonic"))
10096 intel_mnemonic = 1;
e396998b 10097 }
0112cd26 10098 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
10099 {
10100 intel_syntax = 0;
9d141669
L
10101 if (CONST_STRNEQ (p + 3, "-mnemonic"))
10102 intel_mnemonic = 0;
e396998b 10103 }
0112cd26 10104 else if (CONST_STRNEQ (p, "addr"))
e396998b 10105 {
f59a29b9
L
10106 if (address_mode == mode_64bit)
10107 {
10108 if (p[4] == '3' && p[5] == '2')
10109 priv.orig_sizeflag &= ~AFLAG;
10110 else if (p[4] == '6' && p[5] == '4')
10111 priv.orig_sizeflag |= AFLAG;
10112 }
10113 else
10114 {
10115 if (p[4] == '1' && p[5] == '6')
10116 priv.orig_sizeflag &= ~AFLAG;
10117 else if (p[4] == '3' && p[5] == '2')
10118 priv.orig_sizeflag |= AFLAG;
10119 }
e396998b 10120 }
0112cd26 10121 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
10122 {
10123 if (p[4] == '1' && p[5] == '6')
10124 priv.orig_sizeflag &= ~DFLAG;
10125 else if (p[4] == '3' && p[5] == '2')
10126 priv.orig_sizeflag |= DFLAG;
10127 }
0112cd26 10128 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
10129 priv.orig_sizeflag |= SUFFIX_ALWAYS;
10130
10131 p = strchr (p, ',');
10132 if (p != NULL)
10133 p++;
10134 }
10135
10136 if (intel_syntax)
10137 {
10138 names64 = intel_names64;
10139 names32 = intel_names32;
10140 names16 = intel_names16;
10141 names8 = intel_names8;
10142 names8rex = intel_names8rex;
10143 names_seg = intel_names_seg;
db51cc60
L
10144 index64 = intel_index64;
10145 index32 = intel_index32;
e396998b
AM
10146 index16 = intel_index16;
10147 open_char = '[';
10148 close_char = ']';
10149 separator_char = '+';
10150 scale_char = '*';
10151 }
10152 else
10153 {
10154 names64 = att_names64;
10155 names32 = att_names32;
10156 names16 = att_names16;
10157 names8 = att_names8;
10158 names8rex = att_names8rex;
10159 names_seg = att_names_seg;
db51cc60
L
10160 index64 = att_index64;
10161 index32 = att_index32;
e396998b
AM
10162 index16 = att_index16;
10163 open_char = '(';
10164 close_char = ')';
10165 separator_char = ',';
10166 scale_char = ',';
10167 }
2da11e11 10168
4fe53c98 10169 /* The output looks better if we put 7 bytes on a line, since that
c608c12e 10170 puts most long word instructions on a single line. */
4fe53c98 10171 info->bytes_per_line = 7;
252b5132 10172
26ca5450 10173 info->private_data = &priv;
252b5132
RH
10174 priv.max_fetched = priv.the_buffer;
10175 priv.insn_start = pc;
252b5132
RH
10176
10177 obuf[0] = 0;
ce518a5f
L
10178 for (i = 0; i < MAX_OPERANDS; ++i)
10179 {
10180 op_out[i][0] = 0;
10181 op_index[i] = -1;
10182 }
252b5132
RH
10183
10184 the_info = info;
10185 start_pc = pc;
e396998b
AM
10186 start_codep = priv.the_buffer;
10187 codep = priv.the_buffer;
252b5132 10188
5076851f
ILT
10189 if (setjmp (priv.bailout) != 0)
10190 {
7d421014
ILT
10191 const char *name;
10192
5076851f 10193 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
10194 means we have an incomplete instruction of some sort. Just
10195 print the first byte as a prefix or a .byte pseudo-op. */
10196 if (codep > priv.the_buffer)
5076851f 10197 {
e396998b 10198 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
10199 if (name != NULL)
10200 (*info->fprintf_func) (info->stream, "%s", name);
10201 else
5076851f 10202 {
7d421014
ILT
10203 /* Just print the first byte as a .byte instruction. */
10204 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 10205 (unsigned int) priv.the_buffer[0]);
5076851f 10206 }
5076851f 10207
7d421014 10208 return 1;
5076851f
ILT
10209 }
10210
10211 return -1;
10212 }
10213
52b15da3 10214 obufp = obuf;
252b5132
RH
10215 ckprefix ();
10216
10217 insn_codep = codep;
e396998b 10218 sizeflag = priv.orig_sizeflag;
252b5132
RH
10219
10220 FETCH_DATA (info, codep + 1);
10221 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
10222
3e7d61b2
AM
10223 if (((prefixes & PREFIX_FWAIT)
10224 && ((*codep < 0xd8) || (*codep > 0xdf)))
10225 || (rex && rex_used))
252b5132 10226 {
7d421014
ILT
10227 const char *name;
10228
3e7d61b2
AM
10229 /* fwait not followed by floating point instruction, or rex followed
10230 by other prefixes. Print the first prefix. */
e396998b 10231 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
10232 if (name == NULL)
10233 name = INTERNAL_DISASSEMBLER_ERROR;
10234 (*info->fprintf_func) (info->stream, "%s", name);
10235 return 1;
252b5132
RH
10236 }
10237
eec0f4ca 10238 op = 0;
252b5132
RH
10239 if (*codep == 0x0f)
10240 {
eec0f4ca 10241 unsigned char threebyte;
252b5132 10242 FETCH_DATA (info, codep + 2);
eec0f4ca
L
10243 threebyte = *++codep;
10244 dp = &dis386_twobyte[threebyte];
252b5132 10245 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 10246 codep++;
252b5132
RH
10247 }
10248 else
10249 {
6439fc28 10250 dp = &dis386[*codep];
252b5132 10251 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 10252 codep++;
252b5132 10253 }
246c51aa 10254
b844680a 10255 if ((prefixes & PREFIX_REPZ))
7d421014 10256 {
b844680a 10257 repz_prefix = "repz ";
7d421014
ILT
10258 used_prefixes |= PREFIX_REPZ;
10259 }
b844680a
L
10260 else
10261 repz_prefix = NULL;
10262
10263 if ((prefixes & PREFIX_REPNZ))
7d421014 10264 {
b844680a 10265 repnz_prefix = "repnz ";
7d421014
ILT
10266 used_prefixes |= PREFIX_REPNZ;
10267 }
b844680a
L
10268 else
10269 repnz_prefix = NULL;
050dfa73 10270
b844680a 10271 if ((prefixes & PREFIX_LOCK))
7d421014 10272 {
b844680a 10273 lock_prefix = "lock ";
7d421014
ILT
10274 used_prefixes |= PREFIX_LOCK;
10275 }
b844680a
L
10276 else
10277 lock_prefix = NULL;
c608c12e 10278
b844680a 10279 addr_prefix = NULL;
c608c12e
AM
10280 if (prefixes & PREFIX_ADDR)
10281 {
10282 sizeflag ^= AFLAG;
ce518a5f 10283 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 10284 {
cb712a9e 10285 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
b844680a 10286 addr_prefix = "addr32 ";
3ffd33cf 10287 else
b844680a 10288 addr_prefix = "addr16 ";
3ffd33cf
AM
10289 used_prefixes |= PREFIX_ADDR;
10290 }
10291 }
10292
b844680a
L
10293 data_prefix = NULL;
10294 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
10295 {
10296 sizeflag ^= DFLAG;
ce518a5f
L
10297 if (dp->op[2].bytemode == cond_jump_mode
10298 && dp->op[0].bytemode == v_mode
6439fc28 10299 && !intel_syntax)
3ffd33cf
AM
10300 {
10301 if (sizeflag & DFLAG)
b844680a 10302 data_prefix = "data32 ";
3ffd33cf 10303 else
b844680a 10304 data_prefix = "data16 ";
3ffd33cf
AM
10305 used_prefixes |= PREFIX_DATA;
10306 }
10307 }
10308
8bb15339 10309 if (need_modrm)
252b5132
RH
10310 {
10311 FETCH_DATA (info, codep + 1);
7967e09e
L
10312 modrm.mod = (*codep >> 6) & 3;
10313 modrm.reg = (*codep >> 3) & 7;
10314 modrm.rm = *codep & 7;
252b5132
RH
10315 }
10316
ce518a5f 10317 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132
RH
10318 {
10319 dofloat (sizeflag);
10320 }
10321 else
10322 {
c0f3af97
L
10323 need_vex = 0;
10324 need_vex_reg = 0;
dae39acc 10325 vex_w_done = 0;
8bb15339 10326 dp = get_valid_dis386 (dp, info);
b844680a 10327 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f
L
10328 {
10329 for (i = 0; i < MAX_OPERANDS; ++i)
10330 {
246c51aa 10331 obufp = op_out[i];
ce518a5f
L
10332 op_ad = MAX_OPERANDS - 1 - i;
10333 if (dp->op[i].rtn)
10334 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
10335 }
6439fc28 10336 }
252b5132
RH
10337 }
10338
7d421014
ILT
10339 /* See if any prefixes were not used. If so, print the first one
10340 separately. If we don't do this, we'll wind up printing an
10341 instruction stream which does not precisely correspond to the
10342 bytes we are disassembling. */
10343 if ((prefixes & ~used_prefixes) != 0)
10344 {
10345 const char *name;
10346
e396998b 10347 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
10348 if (name == NULL)
10349 name = INTERNAL_DISASSEMBLER_ERROR;
10350 (*info->fprintf_func) (info->stream, "%s", name);
10351 return 1;
10352 }
c0f3af97 10353 if ((rex_original & ~rex_used) || rex_ignored)
52b15da3
JH
10354 {
10355 const char *name;
c0f3af97 10356 name = prefix_name (rex_original, priv.orig_sizeflag);
52b15da3
JH
10357 if (name == NULL)
10358 name = INTERNAL_DISASSEMBLER_ERROR;
10359 (*info->fprintf_func) (info->stream, "%s ", name);
10360 }
7d421014 10361
b844680a
L
10362 prefix_obuf[0] = 0;
10363 prefix_obufp = prefix_obuf;
10364 if (lock_prefix)
10365 prefix_obufp = stpcpy (prefix_obufp, lock_prefix);
10366 if (repz_prefix)
10367 prefix_obufp = stpcpy (prefix_obufp, repz_prefix);
10368 if (repnz_prefix)
10369 prefix_obufp = stpcpy (prefix_obufp, repnz_prefix);
10370 if (addr_prefix)
10371 prefix_obufp = stpcpy (prefix_obufp, addr_prefix);
10372 if (data_prefix)
10373 prefix_obufp = stpcpy (prefix_obufp, data_prefix);
10374
10375 if (prefix_obuf[0] != 0)
10376 (*info->fprintf_func) (info->stream, "%s", prefix_obuf);
10377
ea397f5b 10378 obufp = mnemonicendp;
b844680a 10379 for (i = strlen (obuf) + strlen (prefix_obuf); i < 6; i++)
252b5132
RH
10380 oappend (" ");
10381 oappend (" ");
10382 (*info->fprintf_func) (info->stream, "%s", obuf);
10383
10384 /* The enter and bound instructions are printed with operands in the same
10385 order as the intel book; everything else is printed in reverse order. */
2da11e11 10386 if (intel_syntax || two_source_ops)
252b5132 10387 {
185b1163
L
10388 bfd_vma riprel;
10389
ce518a5f
L
10390 for (i = 0; i < MAX_OPERANDS; ++i)
10391 op_txt[i] = op_out[i];
246c51aa 10392
ce518a5f
L
10393 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
10394 {
10395 op_ad = op_index[i];
10396 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
10397 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
10398 riprel = op_riprel[i];
10399 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
10400 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 10401 }
252b5132
RH
10402 }
10403 else
10404 {
ce518a5f
L
10405 for (i = 0; i < MAX_OPERANDS; ++i)
10406 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
10407 }
10408
ce518a5f
L
10409 needcomma = 0;
10410 for (i = 0; i < MAX_OPERANDS; ++i)
10411 if (*op_txt[i])
10412 {
10413 if (needcomma)
10414 (*info->fprintf_func) (info->stream, ",");
10415 if (op_index[i] != -1 && !op_riprel[i])
10416 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
10417 else
10418 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
10419 needcomma = 1;
10420 }
050dfa73 10421
ce518a5f 10422 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
10423 if (op_index[i] != -1 && op_riprel[i])
10424 {
10425 (*info->fprintf_func) (info->stream, " # ");
10426 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
10427 + op_address[op_index[i]]), info);
185b1163 10428 break;
52b15da3 10429 }
e396998b 10430 return codep - priv.the_buffer;
252b5132
RH
10431}
10432
6439fc28 10433static const char *float_mem[] = {
252b5132 10434 /* d8 */
7c52e0e8
L
10435 "fadd{s|}",
10436 "fmul{s|}",
10437 "fcom{s|}",
10438 "fcomp{s|}",
10439 "fsub{s|}",
10440 "fsubr{s|}",
10441 "fdiv{s|}",
10442 "fdivr{s|}",
db6eb5be 10443 /* d9 */
7c52e0e8 10444 "fld{s|}",
252b5132 10445 "(bad)",
7c52e0e8
L
10446 "fst{s|}",
10447 "fstp{s|}",
9306ca4a 10448 "fldenvIC",
252b5132 10449 "fldcw",
9306ca4a 10450 "fNstenvIC",
252b5132
RH
10451 "fNstcw",
10452 /* da */
7c52e0e8
L
10453 "fiadd{l|}",
10454 "fimul{l|}",
10455 "ficom{l|}",
10456 "ficomp{l|}",
10457 "fisub{l|}",
10458 "fisubr{l|}",
10459 "fidiv{l|}",
10460 "fidivr{l|}",
252b5132 10461 /* db */
7c52e0e8
L
10462 "fild{l|}",
10463 "fisttp{l|}",
10464 "fist{l|}",
10465 "fistp{l|}",
252b5132 10466 "(bad)",
6439fc28 10467 "fld{t||t|}",
252b5132 10468 "(bad)",
6439fc28 10469 "fstp{t||t|}",
252b5132 10470 /* dc */
7c52e0e8
L
10471 "fadd{l|}",
10472 "fmul{l|}",
10473 "fcom{l|}",
10474 "fcomp{l|}",
10475 "fsub{l|}",
10476 "fsubr{l|}",
10477 "fdiv{l|}",
10478 "fdivr{l|}",
252b5132 10479 /* dd */
7c52e0e8
L
10480 "fld{l|}",
10481 "fisttp{ll|}",
10482 "fst{l||}",
10483 "fstp{l|}",
9306ca4a 10484 "frstorIC",
252b5132 10485 "(bad)",
9306ca4a 10486 "fNsaveIC",
252b5132
RH
10487 "fNstsw",
10488 /* de */
10489 "fiadd",
10490 "fimul",
10491 "ficom",
10492 "ficomp",
10493 "fisub",
10494 "fisubr",
10495 "fidiv",
10496 "fidivr",
10497 /* df */
10498 "fild",
ca164297 10499 "fisttp",
252b5132
RH
10500 "fist",
10501 "fistp",
10502 "fbld",
7c52e0e8 10503 "fild{ll|}",
252b5132 10504 "fbstp",
7c52e0e8 10505 "fistp{ll|}",
1d9f512f
AM
10506};
10507
10508static const unsigned char float_mem_mode[] = {
10509 /* d8 */
10510 d_mode,
10511 d_mode,
10512 d_mode,
10513 d_mode,
10514 d_mode,
10515 d_mode,
10516 d_mode,
10517 d_mode,
10518 /* d9 */
10519 d_mode,
10520 0,
10521 d_mode,
10522 d_mode,
10523 0,
10524 w_mode,
10525 0,
10526 w_mode,
10527 /* da */
10528 d_mode,
10529 d_mode,
10530 d_mode,
10531 d_mode,
10532 d_mode,
10533 d_mode,
10534 d_mode,
10535 d_mode,
10536 /* db */
10537 d_mode,
10538 d_mode,
10539 d_mode,
10540 d_mode,
10541 0,
9306ca4a 10542 t_mode,
1d9f512f 10543 0,
9306ca4a 10544 t_mode,
1d9f512f
AM
10545 /* dc */
10546 q_mode,
10547 q_mode,
10548 q_mode,
10549 q_mode,
10550 q_mode,
10551 q_mode,
10552 q_mode,
10553 q_mode,
10554 /* dd */
10555 q_mode,
10556 q_mode,
10557 q_mode,
10558 q_mode,
10559 0,
10560 0,
10561 0,
10562 w_mode,
10563 /* de */
10564 w_mode,
10565 w_mode,
10566 w_mode,
10567 w_mode,
10568 w_mode,
10569 w_mode,
10570 w_mode,
10571 w_mode,
10572 /* df */
10573 w_mode,
10574 w_mode,
10575 w_mode,
10576 w_mode,
9306ca4a 10577 t_mode,
1d9f512f 10578 q_mode,
9306ca4a 10579 t_mode,
1d9f512f 10580 q_mode
252b5132
RH
10581};
10582
ce518a5f
L
10583#define ST { OP_ST, 0 }
10584#define STi { OP_STi, 0 }
252b5132 10585
4efba78c
L
10586#define FGRPd9_2 NULL, { { NULL, 0 } }
10587#define FGRPd9_4 NULL, { { NULL, 1 } }
10588#define FGRPd9_5 NULL, { { NULL, 2 } }
10589#define FGRPd9_6 NULL, { { NULL, 3 } }
10590#define FGRPd9_7 NULL, { { NULL, 4 } }
10591#define FGRPda_5 NULL, { { NULL, 5 } }
10592#define FGRPdb_4 NULL, { { NULL, 6 } }
10593#define FGRPde_3 NULL, { { NULL, 7 } }
10594#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 10595
2da11e11 10596static const struct dis386 float_reg[][8] = {
252b5132
RH
10597 /* d8 */
10598 {
ce518a5f
L
10599 { "fadd", { ST, STi } },
10600 { "fmul", { ST, STi } },
10601 { "fcom", { STi } },
10602 { "fcomp", { STi } },
10603 { "fsub", { ST, STi } },
10604 { "fsubr", { ST, STi } },
10605 { "fdiv", { ST, STi } },
10606 { "fdivr", { ST, STi } },
252b5132
RH
10607 },
10608 /* d9 */
10609 {
ce518a5f
L
10610 { "fld", { STi } },
10611 { "fxch", { STi } },
252b5132 10612 { FGRPd9_2 },
ce518a5f 10613 { "(bad)", { XX } },
252b5132
RH
10614 { FGRPd9_4 },
10615 { FGRPd9_5 },
10616 { FGRPd9_6 },
10617 { FGRPd9_7 },
10618 },
10619 /* da */
10620 {
ce518a5f
L
10621 { "fcmovb", { ST, STi } },
10622 { "fcmove", { ST, STi } },
10623 { "fcmovbe",{ ST, STi } },
10624 { "fcmovu", { ST, STi } },
10625 { "(bad)", { XX } },
252b5132 10626 { FGRPda_5 },
ce518a5f
L
10627 { "(bad)", { XX } },
10628 { "(bad)", { XX } },
252b5132
RH
10629 },
10630 /* db */
10631 {
ce518a5f
L
10632 { "fcmovnb",{ ST, STi } },
10633 { "fcmovne",{ ST, STi } },
10634 { "fcmovnbe",{ ST, STi } },
10635 { "fcmovnu",{ ST, STi } },
252b5132 10636 { FGRPdb_4 },
ce518a5f
L
10637 { "fucomi", { ST, STi } },
10638 { "fcomi", { ST, STi } },
10639 { "(bad)", { XX } },
252b5132
RH
10640 },
10641 /* dc */
10642 {
ce518a5f
L
10643 { "fadd", { STi, ST } },
10644 { "fmul", { STi, ST } },
10645 { "(bad)", { XX } },
10646 { "(bad)", { XX } },
9d141669
L
10647 { "fsub!M", { STi, ST } },
10648 { "fsubM", { STi, ST } },
10649 { "fdiv!M", { STi, ST } },
10650 { "fdivM", { STi, ST } },
252b5132
RH
10651 },
10652 /* dd */
10653 {
ce518a5f
L
10654 { "ffree", { STi } },
10655 { "(bad)", { XX } },
10656 { "fst", { STi } },
10657 { "fstp", { STi } },
10658 { "fucom", { STi } },
10659 { "fucomp", { STi } },
10660 { "(bad)", { XX } },
10661 { "(bad)", { XX } },
252b5132
RH
10662 },
10663 /* de */
10664 {
ce518a5f
L
10665 { "faddp", { STi, ST } },
10666 { "fmulp", { STi, ST } },
10667 { "(bad)", { XX } },
252b5132 10668 { FGRPde_3 },
9d141669
L
10669 { "fsub!Mp", { STi, ST } },
10670 { "fsubMp", { STi, ST } },
10671 { "fdiv!Mp", { STi, ST } },
10672 { "fdivMp", { STi, ST } },
252b5132
RH
10673 },
10674 /* df */
10675 {
ce518a5f
L
10676 { "ffreep", { STi } },
10677 { "(bad)", { XX } },
10678 { "(bad)", { XX } },
10679 { "(bad)", { XX } },
252b5132 10680 { FGRPdf_4 },
ce518a5f
L
10681 { "fucomip", { ST, STi } },
10682 { "fcomip", { ST, STi } },
10683 { "(bad)", { XX } },
252b5132
RH
10684 },
10685};
10686
252b5132
RH
10687static char *fgrps[][8] = {
10688 /* d9_2 0 */
10689 {
10690 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10691 },
10692
10693 /* d9_4 1 */
10694 {
10695 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
10696 },
10697
10698 /* d9_5 2 */
10699 {
10700 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
10701 },
10702
10703 /* d9_6 3 */
10704 {
10705 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
10706 },
10707
10708 /* d9_7 4 */
10709 {
10710 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
10711 },
10712
10713 /* da_5 5 */
10714 {
10715 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10716 },
10717
10718 /* db_4 6 */
10719 {
10720 "feni(287 only)","fdisi(287 only)","fNclex","fNinit",
10721 "fNsetpm(287 only)","(bad)","(bad)","(bad)",
10722 },
10723
10724 /* de_3 7 */
10725 {
10726 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10727 },
10728
10729 /* df_4 8 */
10730 {
10731 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
10732 },
10733};
10734
b6169b20
L
10735static void
10736swap_operand (void)
10737{
10738 mnemonicendp[0] = '.';
10739 mnemonicendp[1] = 's';
10740 mnemonicendp += 2;
10741}
10742
b844680a
L
10743static void
10744OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
10745 int sizeflag ATTRIBUTE_UNUSED)
10746{
10747 /* Skip mod/rm byte. */
10748 MODRM_CHECK;
10749 codep++;
10750}
10751
252b5132 10752static void
26ca5450 10753dofloat (int sizeflag)
252b5132 10754{
2da11e11 10755 const struct dis386 *dp;
252b5132
RH
10756 unsigned char floatop;
10757
10758 floatop = codep[-1];
10759
7967e09e 10760 if (modrm.mod != 3)
252b5132 10761 {
7967e09e 10762 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
10763
10764 putop (float_mem[fp_indx], sizeflag);
ce518a5f 10765 obufp = op_out[0];
6e50d963 10766 op_ad = 2;
1d9f512f 10767 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
10768 return;
10769 }
6608db57 10770 /* Skip mod/rm byte. */
4bba6815 10771 MODRM_CHECK;
252b5132
RH
10772 codep++;
10773
7967e09e 10774 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
10775 if (dp->name == NULL)
10776 {
7967e09e 10777 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 10778
6608db57 10779 /* Instruction fnstsw is only one with strange arg. */
252b5132 10780 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 10781 strcpy (op_out[0], names16[0]);
252b5132
RH
10782 }
10783 else
10784 {
10785 putop (dp->name, sizeflag);
10786
ce518a5f 10787 obufp = op_out[0];
6e50d963 10788 op_ad = 2;
ce518a5f
L
10789 if (dp->op[0].rtn)
10790 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 10791
ce518a5f 10792 obufp = op_out[1];
6e50d963 10793 op_ad = 1;
ce518a5f
L
10794 if (dp->op[1].rtn)
10795 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
10796 }
10797}
10798
252b5132 10799static void
26ca5450 10800OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 10801{
422673a9 10802 oappend ("%st" + intel_syntax);
252b5132
RH
10803}
10804
252b5132 10805static void
26ca5450 10806OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 10807{
7967e09e 10808 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 10809 oappend (scratchbuf + intel_syntax);
252b5132
RH
10810}
10811
6608db57 10812/* Capital letters in template are macros. */
6439fc28 10813static int
26ca5450 10814putop (const char *template, int sizeflag)
252b5132 10815{
2da11e11 10816 const char *p;
9306ca4a 10817 int alt = 0;
9d141669 10818 int cond = 1;
98b528ac
L
10819 unsigned int l = 0, len = 1;
10820 char last[4];
10821
10822#define SAVE_LAST(c) \
10823 if (l < len && l < sizeof (last)) \
10824 last[l++] = c; \
10825 else \
10826 abort ();
252b5132
RH
10827
10828 for (p = template; *p; p++)
10829 {
10830 switch (*p)
10831 {
10832 default:
10833 *obufp++ = *p;
10834 break;
98b528ac
L
10835 case '%':
10836 len++;
10837 break;
9d141669
L
10838 case '!':
10839 cond = 0;
10840 break;
6439fc28
AM
10841 case '{':
10842 alt = 0;
10843 if (intel_syntax)
6439fc28
AM
10844 {
10845 while (*++p != '|')
7c52e0e8
L
10846 if (*p == '}' || *p == '\0')
10847 abort ();
6439fc28 10848 }
9306ca4a
JB
10849 /* Fall through. */
10850 case 'I':
10851 alt = 1;
10852 continue;
6439fc28
AM
10853 case '|':
10854 while (*++p != '}')
10855 {
10856 if (*p == '\0')
10857 abort ();
10858 }
10859 break;
10860 case '}':
10861 break;
252b5132 10862 case 'A':
db6eb5be
AM
10863 if (intel_syntax)
10864 break;
7967e09e 10865 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
10866 *obufp++ = 'b';
10867 break;
10868 case 'B':
db6eb5be
AM
10869 if (intel_syntax)
10870 break;
252b5132
RH
10871 if (sizeflag & SUFFIX_ALWAYS)
10872 *obufp++ = 'b';
252b5132 10873 break;
9306ca4a
JB
10874 case 'C':
10875 if (intel_syntax && !alt)
10876 break;
10877 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
10878 {
10879 if (sizeflag & DFLAG)
10880 *obufp++ = intel_syntax ? 'd' : 'l';
10881 else
10882 *obufp++ = intel_syntax ? 'w' : 's';
10883 used_prefixes |= (prefixes & PREFIX_DATA);
10884 }
10885 break;
ed7841b3
JB
10886 case 'D':
10887 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
10888 break;
161a04f6 10889 USED_REX (REX_W);
7967e09e 10890 if (modrm.mod == 3)
ed7841b3 10891 {
161a04f6 10892 if (rex & REX_W)
ed7841b3
JB
10893 *obufp++ = 'q';
10894 else if (sizeflag & DFLAG)
10895 *obufp++ = intel_syntax ? 'd' : 'l';
10896 else
10897 *obufp++ = 'w';
10898 used_prefixes |= (prefixes & PREFIX_DATA);
10899 }
10900 else
10901 *obufp++ = 'w';
10902 break;
252b5132 10903 case 'E': /* For jcxz/jecxz */
cb712a9e 10904 if (address_mode == mode_64bit)
c1a64871
JH
10905 {
10906 if (sizeflag & AFLAG)
10907 *obufp++ = 'r';
10908 else
10909 *obufp++ = 'e';
10910 }
10911 else
10912 if (sizeflag & AFLAG)
10913 *obufp++ = 'e';
3ffd33cf
AM
10914 used_prefixes |= (prefixes & PREFIX_ADDR);
10915 break;
10916 case 'F':
db6eb5be
AM
10917 if (intel_syntax)
10918 break;
e396998b 10919 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
10920 {
10921 if (sizeflag & AFLAG)
cb712a9e 10922 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 10923 else
cb712a9e 10924 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
10925 used_prefixes |= (prefixes & PREFIX_ADDR);
10926 }
252b5132 10927 break;
52fd6d94
JB
10928 case 'G':
10929 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
10930 break;
161a04f6 10931 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
10932 *obufp++ = 'l';
10933 else
10934 *obufp++ = 'w';
161a04f6 10935 if (!(rex & REX_W))
52fd6d94
JB
10936 used_prefixes |= (prefixes & PREFIX_DATA);
10937 break;
5dd0794d 10938 case 'H':
db6eb5be
AM
10939 if (intel_syntax)
10940 break;
5dd0794d
AM
10941 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
10942 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
10943 {
10944 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
10945 *obufp++ = ',';
10946 *obufp++ = 'p';
10947 if (prefixes & PREFIX_DS)
10948 *obufp++ = 't';
10949 else
10950 *obufp++ = 'n';
10951 }
10952 break;
9306ca4a
JB
10953 case 'J':
10954 if (intel_syntax)
10955 break;
10956 *obufp++ = 'l';
10957 break;
42903f7f
L
10958 case 'K':
10959 USED_REX (REX_W);
10960 if (rex & REX_W)
10961 *obufp++ = 'q';
10962 else
10963 *obufp++ = 'd';
10964 break;
6dd5059a
L
10965 case 'Z':
10966 if (intel_syntax)
10967 break;
10968 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
10969 {
10970 *obufp++ = 'q';
10971 break;
10972 }
10973 /* Fall through. */
98b528ac 10974 goto case_L;
252b5132 10975 case 'L':
98b528ac
L
10976 if (l != 0 || len != 1)
10977 {
10978 SAVE_LAST (*p);
10979 break;
10980 }
10981case_L:
db6eb5be
AM
10982 if (intel_syntax)
10983 break;
252b5132
RH
10984 if (sizeflag & SUFFIX_ALWAYS)
10985 *obufp++ = 'l';
252b5132 10986 break;
9d141669
L
10987 case 'M':
10988 if (intel_mnemonic != cond)
10989 *obufp++ = 'r';
10990 break;
252b5132
RH
10991 case 'N':
10992 if ((prefixes & PREFIX_FWAIT) == 0)
10993 *obufp++ = 'n';
7d421014
ILT
10994 else
10995 used_prefixes |= PREFIX_FWAIT;
252b5132 10996 break;
52b15da3 10997 case 'O':
161a04f6
L
10998 USED_REX (REX_W);
10999 if (rex & REX_W)
6439fc28 11000 *obufp++ = 'o';
a35ca55a
JB
11001 else if (intel_syntax && (sizeflag & DFLAG))
11002 *obufp++ = 'q';
52b15da3
JH
11003 else
11004 *obufp++ = 'd';
161a04f6 11005 if (!(rex & REX_W))
a35ca55a 11006 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 11007 break;
6439fc28 11008 case 'T':
db6eb5be
AM
11009 if (intel_syntax)
11010 break;
cb712a9e 11011 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
11012 {
11013 *obufp++ = 'q';
11014 break;
11015 }
6608db57 11016 /* Fall through. */
252b5132 11017 case 'P':
db6eb5be
AM
11018 if (intel_syntax)
11019 break;
252b5132 11020 if ((prefixes & PREFIX_DATA)
161a04f6 11021 || (rex & REX_W)
e396998b 11022 || (sizeflag & SUFFIX_ALWAYS))
252b5132 11023 {
161a04f6
L
11024 USED_REX (REX_W);
11025 if (rex & REX_W)
52b15da3 11026 *obufp++ = 'q';
c2419411 11027 else
52b15da3
JH
11028 {
11029 if (sizeflag & DFLAG)
11030 *obufp++ = 'l';
11031 else
11032 *obufp++ = 'w';
52b15da3 11033 }
1a114b12 11034 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
11035 }
11036 break;
6439fc28 11037 case 'U':
db6eb5be
AM
11038 if (intel_syntax)
11039 break;
cb712a9e 11040 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 11041 {
7967e09e 11042 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 11043 *obufp++ = 'q';
6439fc28
AM
11044 break;
11045 }
6608db57 11046 /* Fall through. */
98b528ac 11047 goto case_Q;
252b5132 11048 case 'Q':
98b528ac 11049 if (l == 0 && len == 1)
252b5132 11050 {
98b528ac
L
11051case_Q:
11052 if (intel_syntax && !alt)
11053 break;
11054 USED_REX (REX_W);
11055 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 11056 {
98b528ac
L
11057 if (rex & REX_W)
11058 *obufp++ = 'q';
52b15da3 11059 else
98b528ac
L
11060 {
11061 if (sizeflag & DFLAG)
11062 *obufp++ = intel_syntax ? 'd' : 'l';
11063 else
11064 *obufp++ = 'w';
11065 }
11066 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 11067 }
98b528ac
L
11068 }
11069 else
11070 {
11071 if (l != 1 || len != 2 || last[0] != 'L')
11072 {
11073 SAVE_LAST (*p);
11074 break;
11075 }
11076 if (intel_syntax
11077 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
11078 break;
11079 if ((rex & REX_W))
11080 {
11081 USED_REX (REX_W);
11082 *obufp++ = 'q';
11083 }
11084 else
11085 *obufp++ = 'l';
252b5132
RH
11086 }
11087 break;
11088 case 'R':
161a04f6
L
11089 USED_REX (REX_W);
11090 if (rex & REX_W)
a35ca55a
JB
11091 *obufp++ = 'q';
11092 else if (sizeflag & DFLAG)
c608c12e 11093 {
a35ca55a 11094 if (intel_syntax)
c608c12e 11095 *obufp++ = 'd';
c608c12e 11096 else
a35ca55a 11097 *obufp++ = 'l';
c608c12e 11098 }
252b5132 11099 else
a35ca55a
JB
11100 *obufp++ = 'w';
11101 if (intel_syntax && !p[1]
161a04f6 11102 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 11103 *obufp++ = 'e';
161a04f6 11104 if (!(rex & REX_W))
52b15da3 11105 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 11106 break;
1a114b12
JB
11107 case 'V':
11108 if (intel_syntax)
11109 break;
cb712a9e 11110 if (address_mode == mode_64bit && (sizeflag & DFLAG))
1a114b12
JB
11111 {
11112 if (sizeflag & SUFFIX_ALWAYS)
11113 *obufp++ = 'q';
11114 break;
11115 }
11116 /* Fall through. */
252b5132 11117 case 'S':
db6eb5be
AM
11118 if (intel_syntax)
11119 break;
252b5132
RH
11120 if (sizeflag & SUFFIX_ALWAYS)
11121 {
161a04f6 11122 if (rex & REX_W)
52b15da3 11123 *obufp++ = 'q';
252b5132 11124 else
52b15da3
JH
11125 {
11126 if (sizeflag & DFLAG)
11127 *obufp++ = 'l';
11128 else
11129 *obufp++ = 'w';
11130 used_prefixes |= (prefixes & PREFIX_DATA);
11131 }
252b5132 11132 }
252b5132 11133 break;
041bd2e0 11134 case 'X':
c0f3af97
L
11135 if (l != 0 || len != 1)
11136 {
11137 SAVE_LAST (*p);
11138 break;
11139 }
11140 if (need_vex && vex.prefix)
11141 {
11142 if (vex.prefix == DATA_PREFIX_OPCODE)
11143 *obufp++ = 'd';
11144 else
11145 *obufp++ = 's';
11146 }
11147 else if (prefixes & PREFIX_DATA)
041bd2e0
JH
11148 *obufp++ = 'd';
11149 else
11150 *obufp++ = 's';
db6eb5be 11151 used_prefixes |= (prefixes & PREFIX_DATA);
041bd2e0 11152 break;
76f227a5 11153 case 'Y':
c0f3af97 11154 if (l == 0 && len == 1)
76f227a5 11155 {
c0f3af97
L
11156 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
11157 break;
11158 if (rex & REX_W)
11159 {
11160 USED_REX (REX_W);
11161 *obufp++ = 'q';
11162 }
11163 break;
11164 }
11165 else
11166 {
11167 if (l != 1 || len != 2 || last[0] != 'X')
11168 {
11169 SAVE_LAST (*p);
11170 break;
11171 }
11172 if (!need_vex)
11173 abort ();
11174 if (intel_syntax
11175 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
11176 break;
11177 switch (vex.length)
11178 {
11179 case 128:
11180 *obufp++ = 'x';
11181 break;
11182 case 256:
11183 *obufp++ = 'y';
11184 break;
11185 default:
11186 abort ();
11187 }
76f227a5
JH
11188 }
11189 break;
252b5132 11190 case 'W':
0bfee649 11191 if (l == 0 && len == 1)
a35ca55a 11192 {
0bfee649
L
11193 /* operand size flag for cwtl, cbtw */
11194 USED_REX (REX_W);
11195 if (rex & REX_W)
11196 {
11197 if (intel_syntax)
11198 *obufp++ = 'd';
11199 else
11200 *obufp++ = 'l';
11201 }
11202 else if (sizeflag & DFLAG)
11203 *obufp++ = 'w';
a35ca55a 11204 else
0bfee649
L
11205 *obufp++ = 'b';
11206 if (!(rex & REX_W))
11207 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 11208 }
252b5132 11209 else
0bfee649
L
11210 {
11211 if (l != 1 || len != 2 || last[0] != 'X')
11212 {
11213 SAVE_LAST (*p);
11214 break;
11215 }
11216 if (!need_vex)
11217 abort ();
11218 *obufp++ = vex.w ? 'd': 's';
11219 }
252b5132
RH
11220 break;
11221 }
9306ca4a 11222 alt = 0;
252b5132
RH
11223 }
11224 *obufp = 0;
ea397f5b 11225 mnemonicendp = obufp;
6439fc28 11226 return 0;
252b5132
RH
11227}
11228
11229static void
26ca5450 11230oappend (const char *s)
252b5132 11231{
ea397f5b 11232 obufp = stpcpy (obufp, s);
252b5132
RH
11233}
11234
11235static void
26ca5450 11236append_seg (void)
252b5132
RH
11237{
11238 if (prefixes & PREFIX_CS)
7d421014 11239 {
7d421014 11240 used_prefixes |= PREFIX_CS;
d708bcba 11241 oappend ("%cs:" + intel_syntax);
7d421014 11242 }
252b5132 11243 if (prefixes & PREFIX_DS)
7d421014 11244 {
7d421014 11245 used_prefixes |= PREFIX_DS;
d708bcba 11246 oappend ("%ds:" + intel_syntax);
7d421014 11247 }
252b5132 11248 if (prefixes & PREFIX_SS)
7d421014 11249 {
7d421014 11250 used_prefixes |= PREFIX_SS;
d708bcba 11251 oappend ("%ss:" + intel_syntax);
7d421014 11252 }
252b5132 11253 if (prefixes & PREFIX_ES)
7d421014 11254 {
7d421014 11255 used_prefixes |= PREFIX_ES;
d708bcba 11256 oappend ("%es:" + intel_syntax);
7d421014 11257 }
252b5132 11258 if (prefixes & PREFIX_FS)
7d421014 11259 {
7d421014 11260 used_prefixes |= PREFIX_FS;
d708bcba 11261 oappend ("%fs:" + intel_syntax);
7d421014 11262 }
252b5132 11263 if (prefixes & PREFIX_GS)
7d421014 11264 {
7d421014 11265 used_prefixes |= PREFIX_GS;
d708bcba 11266 oappend ("%gs:" + intel_syntax);
7d421014 11267 }
252b5132
RH
11268}
11269
11270static void
26ca5450 11271OP_indirE (int bytemode, int sizeflag)
252b5132
RH
11272{
11273 if (!intel_syntax)
11274 oappend ("*");
11275 OP_E (bytemode, sizeflag);
11276}
11277
52b15da3 11278static void
26ca5450 11279print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 11280{
cb712a9e 11281 if (address_mode == mode_64bit)
52b15da3
JH
11282 {
11283 if (hex)
11284 {
11285 char tmp[30];
11286 int i;
11287 buf[0] = '0';
11288 buf[1] = 'x';
11289 sprintf_vma (tmp, disp);
6608db57 11290 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
11291 strcpy (buf + 2, tmp + i);
11292 }
11293 else
11294 {
11295 bfd_signed_vma v = disp;
11296 char tmp[30];
11297 int i;
11298 if (v < 0)
11299 {
11300 *(buf++) = '-';
11301 v = -disp;
6608db57 11302 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
11303 if (v < 0)
11304 {
11305 strcpy (buf, "9223372036854775808");
11306 return;
11307 }
11308 }
11309 if (!v)
11310 {
11311 strcpy (buf, "0");
11312 return;
11313 }
11314
11315 i = 0;
11316 tmp[29] = 0;
11317 while (v)
11318 {
6608db57 11319 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
11320 v /= 10;
11321 i++;
11322 }
11323 strcpy (buf, tmp + 29 - i);
11324 }
11325 }
11326 else
11327 {
11328 if (hex)
11329 sprintf (buf, "0x%x", (unsigned int) disp);
11330 else
11331 sprintf (buf, "%d", (int) disp);
11332 }
11333}
11334
5d669648
L
11335/* Put DISP in BUF as signed hex number. */
11336
11337static void
11338print_displacement (char *buf, bfd_vma disp)
11339{
11340 bfd_signed_vma val = disp;
11341 char tmp[30];
11342 int i, j = 0;
11343
11344 if (val < 0)
11345 {
11346 buf[j++] = '-';
11347 val = -disp;
11348
11349 /* Check for possible overflow. */
11350 if (val < 0)
11351 {
11352 switch (address_mode)
11353 {
11354 case mode_64bit:
11355 strcpy (buf + j, "0x8000000000000000");
11356 break;
11357 case mode_32bit:
11358 strcpy (buf + j, "0x80000000");
11359 break;
11360 case mode_16bit:
11361 strcpy (buf + j, "0x8000");
11362 break;
11363 }
11364 return;
11365 }
11366 }
11367
11368 buf[j++] = '0';
11369 buf[j++] = 'x';
11370
0af1713e 11371 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
11372 for (i = 0; tmp[i] == '0'; i++)
11373 continue;
11374 if (tmp[i] == '\0')
11375 i--;
11376 strcpy (buf + j, tmp + i);
11377}
11378
3f31e633
JB
11379static void
11380intel_operand_size (int bytemode, int sizeflag)
11381{
11382 switch (bytemode)
11383 {
11384 case b_mode:
b6169b20 11385 case b_swap_mode:
42903f7f 11386 case dqb_mode:
3f31e633
JB
11387 oappend ("BYTE PTR ");
11388 break;
11389 case w_mode:
11390 case dqw_mode:
11391 oappend ("WORD PTR ");
11392 break;
1a114b12 11393 case stack_v_mode:
cb712a9e 11394 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
11395 {
11396 oappend ("QWORD PTR ");
11397 used_prefixes |= (prefixes & PREFIX_DATA);
11398 break;
11399 }
11400 /* FALLTHRU */
11401 case v_mode:
b6169b20 11402 case v_swap_mode:
3f31e633 11403 case dq_mode:
161a04f6
L
11404 USED_REX (REX_W);
11405 if (rex & REX_W)
3f31e633
JB
11406 oappend ("QWORD PTR ");
11407 else if ((sizeflag & DFLAG) || bytemode == dq_mode)
11408 oappend ("DWORD PTR ");
11409 else
11410 oappend ("WORD PTR ");
11411 used_prefixes |= (prefixes & PREFIX_DATA);
11412 break;
52fd6d94 11413 case z_mode:
161a04f6 11414 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
11415 *obufp++ = 'D';
11416 oappend ("WORD PTR ");
161a04f6 11417 if (!(rex & REX_W))
52fd6d94
JB
11418 used_prefixes |= (prefixes & PREFIX_DATA);
11419 break;
34b772a6
JB
11420 case a_mode:
11421 if (sizeflag & DFLAG)
11422 oappend ("QWORD PTR ");
11423 else
11424 oappend ("DWORD PTR ");
11425 used_prefixes |= (prefixes & PREFIX_DATA);
11426 break;
3f31e633 11427 case d_mode:
fa99fab2 11428 case d_swap_mode:
42903f7f 11429 case dqd_mode:
3f31e633
JB
11430 oappend ("DWORD PTR ");
11431 break;
11432 case q_mode:
b6169b20 11433 case q_swap_mode:
3f31e633
JB
11434 oappend ("QWORD PTR ");
11435 break;
11436 case m_mode:
cb712a9e 11437 if (address_mode == mode_64bit)
3f31e633
JB
11438 oappend ("QWORD PTR ");
11439 else
11440 oappend ("DWORD PTR ");
11441 break;
11442 case f_mode:
11443 if (sizeflag & DFLAG)
11444 oappend ("FWORD PTR ");
11445 else
11446 oappend ("DWORD PTR ");
11447 used_prefixes |= (prefixes & PREFIX_DATA);
11448 break;
11449 case t_mode:
11450 oappend ("TBYTE PTR ");
11451 break;
11452 case x_mode:
b6169b20 11453 case x_swap_mode:
c0f3af97
L
11454 if (need_vex)
11455 {
11456 switch (vex.length)
11457 {
11458 case 128:
11459 oappend ("XMMWORD PTR ");
11460 break;
11461 case 256:
11462 oappend ("YMMWORD PTR ");
11463 break;
11464 default:
11465 abort ();
11466 }
11467 }
11468 else
11469 oappend ("XMMWORD PTR ");
11470 break;
11471 case xmm_mode:
3f31e633
JB
11472 oappend ("XMMWORD PTR ");
11473 break;
c0f3af97
L
11474 case xmmq_mode:
11475 if (!need_vex)
11476 abort ();
11477
11478 switch (vex.length)
11479 {
11480 case 128:
11481 oappend ("QWORD PTR ");
11482 break;
11483 case 256:
11484 oappend ("XMMWORD PTR ");
11485 break;
11486 default:
11487 abort ();
11488 }
11489 break;
11490 case ymmq_mode:
11491 if (!need_vex)
11492 abort ();
11493
11494 switch (vex.length)
11495 {
11496 case 128:
11497 oappend ("QWORD PTR ");
11498 break;
11499 case 256:
11500 oappend ("YMMWORD PTR ");
11501 break;
11502 default:
11503 abort ();
11504 }
11505 break;
fb9c77c7
L
11506 case o_mode:
11507 oappend ("OWORD PTR ");
11508 break;
0bfee649
L
11509 case vex_w_dq_mode:
11510 if (!need_vex)
11511 abort ();
11512
11513 if (vex.w)
11514 oappend ("QWORD PTR ");
11515 else
11516 oappend ("DWORD PTR ");
11517 break;
3f31e633
JB
11518 default:
11519 break;
11520 }
11521}
11522
252b5132 11523static void
c0f3af97 11524OP_E_register (int bytemode, int sizeflag)
252b5132 11525{
c0f3af97
L
11526 int reg = modrm.rm;
11527 const char **names;
252b5132 11528
c0f3af97
L
11529 USED_REX (REX_B);
11530 if ((rex & REX_B))
11531 reg += 8;
252b5132 11532
b6169b20
L
11533 if ((sizeflag & SUFFIX_ALWAYS)
11534 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
11535 swap_operand ();
11536
c0f3af97 11537 switch (bytemode)
252b5132 11538 {
c0f3af97 11539 case b_mode:
b6169b20 11540 case b_swap_mode:
c0f3af97
L
11541 USED_REX (0);
11542 if (rex)
11543 names = names8rex;
11544 else
11545 names = names8;
11546 break;
11547 case w_mode:
11548 names = names16;
11549 break;
11550 case d_mode:
11551 names = names32;
11552 break;
11553 case q_mode:
11554 names = names64;
11555 break;
11556 case m_mode:
11557 names = address_mode == mode_64bit ? names64 : names32;
11558 break;
11559 case stack_v_mode:
11560 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 11561 {
c0f3af97 11562 names = names64;
7d421014 11563 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 11564 break;
252b5132 11565 }
c0f3af97
L
11566 bytemode = v_mode;
11567 /* FALLTHRU */
11568 case v_mode:
b6169b20 11569 case v_swap_mode:
c0f3af97
L
11570 case dq_mode:
11571 case dqb_mode:
11572 case dqd_mode:
11573 case dqw_mode:
11574 USED_REX (REX_W);
11575 if (rex & REX_W)
11576 names = names64;
b6169b20
L
11577 else if ((sizeflag & DFLAG)
11578 || (bytemode != v_mode
11579 && bytemode != v_swap_mode))
c0f3af97
L
11580 names = names32;
11581 else
11582 names = names16;
11583 used_prefixes |= (prefixes & PREFIX_DATA);
11584 break;
11585 case 0:
11586 return;
11587 default:
11588 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
11589 return;
11590 }
c0f3af97
L
11591 oappend (names[reg]);
11592}
11593
11594static void
11595OP_E_memory (int bytemode, int sizeflag, int has_drex)
11596{
11597 bfd_vma disp = 0;
11598 int add = (rex & REX_B) ? 8 : 0;
11599 int riprel = 0;
252b5132 11600
c0f3af97 11601 USED_REX (REX_B);
3f31e633
JB
11602 if (intel_syntax)
11603 intel_operand_size (bytemode, sizeflag);
252b5132
RH
11604 append_seg ();
11605
5d669648 11606 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 11607 {
5d669648
L
11608 /* 32/64 bit address mode */
11609 int havedisp;
252b5132
RH
11610 int havesib;
11611 int havebase;
0f7da397 11612 int haveindex;
20afcfb7 11613 int needindex;
82c18208 11614 int base, rbase;
252b5132
RH
11615 int index = 0;
11616 int scale = 0;
11617
11618 havesib = 0;
11619 havebase = 1;
0f7da397 11620 haveindex = 0;
7967e09e 11621 base = modrm.rm;
252b5132
RH
11622
11623 if (base == 4)
11624 {
11625 havesib = 1;
11626 FETCH_DATA (the_info, codep + 1);
252b5132 11627 index = (*codep >> 3) & 7;
db51cc60 11628 scale = (*codep >> 6) & 3;
252b5132 11629 base = *codep & 7;
161a04f6
L
11630 USED_REX (REX_X);
11631 if (rex & REX_X)
52b15da3 11632 index += 8;
0f7da397 11633 haveindex = index != 4;
252b5132
RH
11634 codep++;
11635 }
82c18208 11636 rbase = base + add;
252b5132 11637
85f10a01
MM
11638 /* If we have a DREX byte, skip it now
11639 (it has already been handled) */
11640 if (has_drex)
11641 {
11642 FETCH_DATA (the_info, codep + 1);
11643 codep++;
11644 }
11645
7967e09e 11646 switch (modrm.mod)
252b5132
RH
11647 {
11648 case 0:
82c18208 11649 if (base == 5)
252b5132
RH
11650 {
11651 havebase = 0;
cb712a9e 11652 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
11653 riprel = 1;
11654 disp = get32s ();
252b5132
RH
11655 }
11656 break;
11657 case 1:
11658 FETCH_DATA (the_info, codep + 1);
11659 disp = *codep++;
11660 if ((disp & 0x80) != 0)
11661 disp -= 0x100;
11662 break;
11663 case 2:
52b15da3 11664 disp = get32s ();
252b5132
RH
11665 break;
11666 }
11667
20afcfb7
L
11668 /* In 32bit mode, we need index register to tell [offset] from
11669 [eiz*1 + offset]. */
11670 needindex = (havesib
11671 && !havebase
11672 && !haveindex
11673 && address_mode == mode_32bit);
11674 havedisp = (havebase
11675 || needindex
11676 || (havesib && (haveindex || scale != 0)));
5d669648 11677
252b5132 11678 if (!intel_syntax)
82c18208 11679 if (modrm.mod != 0 || base == 5)
db6eb5be 11680 {
5d669648
L
11681 if (havedisp || riprel)
11682 print_displacement (scratchbuf, disp);
11683 else
11684 print_operand_value (scratchbuf, 1, disp);
db6eb5be 11685 oappend (scratchbuf);
52b15da3
JH
11686 if (riprel)
11687 {
11688 set_op (disp, 1);
87767711 11689 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 11690 }
db6eb5be 11691 }
2da11e11 11692
87767711
JB
11693 if (havebase || haveindex || riprel)
11694 used_prefixes |= PREFIX_ADDR;
11695
5d669648 11696 if (havedisp || (intel_syntax && riprel))
252b5132 11697 {
252b5132 11698 *obufp++ = open_char;
52b15da3 11699 if (intel_syntax && riprel)
185b1163
L
11700 {
11701 set_op (disp, 1);
87767711 11702 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 11703 }
db6eb5be 11704 *obufp = '\0';
252b5132 11705 if (havebase)
cb712a9e 11706 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 11707 ? names64[rbase] : names32[rbase]);
252b5132
RH
11708 if (havesib)
11709 {
db51cc60
L
11710 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
11711 print index to tell base + index from base. */
11712 if (scale != 0
20afcfb7 11713 || needindex
db51cc60
L
11714 || haveindex
11715 || (havebase && base != ESP_REG_NUM))
252b5132 11716 {
9306ca4a 11717 if (!intel_syntax || havebase)
db6eb5be 11718 {
9306ca4a
JB
11719 *obufp++ = separator_char;
11720 *obufp = '\0';
db6eb5be 11721 }
db51cc60
L
11722 if (haveindex)
11723 oappend (address_mode == mode_64bit
11724 && (sizeflag & AFLAG)
11725 ? names64[index] : names32[index]);
11726 else
11727 oappend (address_mode == mode_64bit
11728 && (sizeflag & AFLAG)
11729 ? index64 : index32);
11730
db6eb5be
AM
11731 *obufp++ = scale_char;
11732 *obufp = '\0';
11733 sprintf (scratchbuf, "%d", 1 << scale);
11734 oappend (scratchbuf);
11735 }
252b5132 11736 }
185b1163 11737 if (intel_syntax
82c18208 11738 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 11739 {
db51cc60 11740 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
11741 {
11742 *obufp++ = '+';
11743 *obufp = '\0';
11744 }
7967e09e 11745 else if (modrm.mod != 1)
3d456fa1
JB
11746 {
11747 *obufp++ = '-';
11748 *obufp = '\0';
11749 disp = - (bfd_signed_vma) disp;
11750 }
11751
db51cc60
L
11752 if (havedisp)
11753 print_displacement (scratchbuf, disp);
11754 else
11755 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
11756 oappend (scratchbuf);
11757 }
252b5132
RH
11758
11759 *obufp++ = close_char;
db6eb5be 11760 *obufp = '\0';
252b5132
RH
11761 }
11762 else if (intel_syntax)
db6eb5be 11763 {
82c18208 11764 if (modrm.mod != 0 || base == 5)
db6eb5be 11765 {
252b5132
RH
11766 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
11767 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
11768 ;
11769 else
11770 {
d708bcba 11771 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
11772 oappend (":");
11773 }
52b15da3 11774 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
11775 oappend (scratchbuf);
11776 }
11777 }
252b5132
RH
11778 }
11779 else
11780 { /* 16 bit address mode */
7967e09e 11781 switch (modrm.mod)
252b5132
RH
11782 {
11783 case 0:
7967e09e 11784 if (modrm.rm == 6)
252b5132
RH
11785 {
11786 disp = get16 ();
11787 if ((disp & 0x8000) != 0)
11788 disp -= 0x10000;
11789 }
11790 break;
11791 case 1:
11792 FETCH_DATA (the_info, codep + 1);
11793 disp = *codep++;
11794 if ((disp & 0x80) != 0)
11795 disp -= 0x100;
11796 break;
11797 case 2:
11798 disp = get16 ();
11799 if ((disp & 0x8000) != 0)
11800 disp -= 0x10000;
11801 break;
11802 }
11803
11804 if (!intel_syntax)
7967e09e 11805 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 11806 {
5d669648 11807 print_displacement (scratchbuf, disp);
db6eb5be
AM
11808 oappend (scratchbuf);
11809 }
252b5132 11810
7967e09e 11811 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
11812 {
11813 *obufp++ = open_char;
db6eb5be 11814 *obufp = '\0';
7967e09e 11815 oappend (index16[modrm.rm]);
5d669648
L
11816 if (intel_syntax
11817 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 11818 {
5d669648 11819 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
11820 {
11821 *obufp++ = '+';
11822 *obufp = '\0';
11823 }
7967e09e 11824 else if (modrm.mod != 1)
3d456fa1
JB
11825 {
11826 *obufp++ = '-';
11827 *obufp = '\0';
11828 disp = - (bfd_signed_vma) disp;
11829 }
11830
5d669648 11831 print_displacement (scratchbuf, disp);
3d456fa1
JB
11832 oappend (scratchbuf);
11833 }
11834
db6eb5be
AM
11835 *obufp++ = close_char;
11836 *obufp = '\0';
252b5132 11837 }
3d456fa1
JB
11838 else if (intel_syntax)
11839 {
11840 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
11841 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
11842 ;
11843 else
11844 {
11845 oappend (names_seg[ds_reg - es_reg]);
11846 oappend (":");
11847 }
11848 print_operand_value (scratchbuf, 1, disp & 0xffff);
11849 oappend (scratchbuf);
11850 }
252b5132
RH
11851 }
11852}
11853
c0f3af97
L
11854static void
11855OP_E_extended (int bytemode, int sizeflag, int has_drex)
11856{
11857 /* Skip mod/rm byte. */
11858 MODRM_CHECK;
11859 codep++;
11860
11861 if (modrm.mod == 3)
11862 OP_E_register (bytemode, sizeflag);
11863 else
11864 OP_E_memory (bytemode, sizeflag, has_drex);
11865}
11866
85f10a01
MM
11867static void
11868OP_E (int bytemode, int sizeflag)
11869{
11870 OP_E_extended (bytemode, sizeflag, 0);
11871}
11872
11873
252b5132 11874static void
26ca5450 11875OP_G (int bytemode, int sizeflag)
252b5132 11876{
52b15da3 11877 int add = 0;
161a04f6
L
11878 USED_REX (REX_R);
11879 if (rex & REX_R)
52b15da3 11880 add += 8;
252b5132
RH
11881 switch (bytemode)
11882 {
11883 case b_mode:
52b15da3
JH
11884 USED_REX (0);
11885 if (rex)
7967e09e 11886 oappend (names8rex[modrm.reg + add]);
52b15da3 11887 else
7967e09e 11888 oappend (names8[modrm.reg + add]);
252b5132
RH
11889 break;
11890 case w_mode:
7967e09e 11891 oappend (names16[modrm.reg + add]);
252b5132
RH
11892 break;
11893 case d_mode:
7967e09e 11894 oappend (names32[modrm.reg + add]);
52b15da3
JH
11895 break;
11896 case q_mode:
7967e09e 11897 oappend (names64[modrm.reg + add]);
252b5132
RH
11898 break;
11899 case v_mode:
9306ca4a 11900 case dq_mode:
42903f7f
L
11901 case dqb_mode:
11902 case dqd_mode:
9306ca4a 11903 case dqw_mode:
161a04f6
L
11904 USED_REX (REX_W);
11905 if (rex & REX_W)
7967e09e 11906 oappend (names64[modrm.reg + add]);
9306ca4a 11907 else if ((sizeflag & DFLAG) || bytemode != v_mode)
7967e09e 11908 oappend (names32[modrm.reg + add]);
252b5132 11909 else
7967e09e 11910 oappend (names16[modrm.reg + add]);
7d421014 11911 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 11912 break;
90700ea2 11913 case m_mode:
cb712a9e 11914 if (address_mode == mode_64bit)
7967e09e 11915 oappend (names64[modrm.reg + add]);
90700ea2 11916 else
7967e09e 11917 oappend (names32[modrm.reg + add]);
90700ea2 11918 break;
252b5132
RH
11919 default:
11920 oappend (INTERNAL_DISASSEMBLER_ERROR);
11921 break;
11922 }
11923}
11924
52b15da3 11925static bfd_vma
26ca5450 11926get64 (void)
52b15da3 11927{
5dd0794d 11928 bfd_vma x;
52b15da3 11929#ifdef BFD64
5dd0794d
AM
11930 unsigned int a;
11931 unsigned int b;
11932
52b15da3
JH
11933 FETCH_DATA (the_info, codep + 8);
11934 a = *codep++ & 0xff;
11935 a |= (*codep++ & 0xff) << 8;
11936 a |= (*codep++ & 0xff) << 16;
11937 a |= (*codep++ & 0xff) << 24;
5dd0794d 11938 b = *codep++ & 0xff;
52b15da3
JH
11939 b |= (*codep++ & 0xff) << 8;
11940 b |= (*codep++ & 0xff) << 16;
11941 b |= (*codep++ & 0xff) << 24;
11942 x = a + ((bfd_vma) b << 32);
11943#else
6608db57 11944 abort ();
5dd0794d 11945 x = 0;
52b15da3
JH
11946#endif
11947 return x;
11948}
11949
11950static bfd_signed_vma
26ca5450 11951get32 (void)
252b5132 11952{
52b15da3 11953 bfd_signed_vma x = 0;
252b5132
RH
11954
11955 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
11956 x = *codep++ & (bfd_signed_vma) 0xff;
11957 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
11958 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
11959 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
11960 return x;
11961}
11962
11963static bfd_signed_vma
26ca5450 11964get32s (void)
52b15da3
JH
11965{
11966 bfd_signed_vma x = 0;
11967
11968 FETCH_DATA (the_info, codep + 4);
11969 x = *codep++ & (bfd_signed_vma) 0xff;
11970 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
11971 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
11972 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
11973
11974 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
11975
252b5132
RH
11976 return x;
11977}
11978
11979static int
26ca5450 11980get16 (void)
252b5132
RH
11981{
11982 int x = 0;
11983
11984 FETCH_DATA (the_info, codep + 2);
11985 x = *codep++ & 0xff;
11986 x |= (*codep++ & 0xff) << 8;
11987 return x;
11988}
11989
11990static void
26ca5450 11991set_op (bfd_vma op, int riprel)
252b5132
RH
11992{
11993 op_index[op_ad] = op_ad;
cb712a9e 11994 if (address_mode == mode_64bit)
7081ff04
AJ
11995 {
11996 op_address[op_ad] = op;
11997 op_riprel[op_ad] = riprel;
11998 }
11999 else
12000 {
12001 /* Mask to get a 32-bit address. */
12002 op_address[op_ad] = op & 0xffffffff;
12003 op_riprel[op_ad] = riprel & 0xffffffff;
12004 }
252b5132
RH
12005}
12006
12007static void
26ca5450 12008OP_REG (int code, int sizeflag)
252b5132 12009{
2da11e11 12010 const char *s;
9b60702d 12011 int add;
161a04f6
L
12012 USED_REX (REX_B);
12013 if (rex & REX_B)
52b15da3 12014 add = 8;
9b60702d
L
12015 else
12016 add = 0;
52b15da3
JH
12017
12018 switch (code)
12019 {
52b15da3
JH
12020 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
12021 case sp_reg: case bp_reg: case si_reg: case di_reg:
12022 s = names16[code - ax_reg + add];
12023 break;
12024 case es_reg: case ss_reg: case cs_reg:
12025 case ds_reg: case fs_reg: case gs_reg:
12026 s = names_seg[code - es_reg + add];
12027 break;
12028 case al_reg: case ah_reg: case cl_reg: case ch_reg:
12029 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
12030 USED_REX (0);
12031 if (rex)
12032 s = names8rex[code - al_reg + add];
12033 else
12034 s = names8[code - al_reg];
12035 break;
6439fc28
AM
12036 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
12037 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 12038 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
12039 {
12040 s = names64[code - rAX_reg + add];
12041 break;
12042 }
12043 code += eAX_reg - rAX_reg;
6608db57 12044 /* Fall through. */
52b15da3
JH
12045 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
12046 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
12047 USED_REX (REX_W);
12048 if (rex & REX_W)
52b15da3
JH
12049 s = names64[code - eAX_reg + add];
12050 else if (sizeflag & DFLAG)
12051 s = names32[code - eAX_reg + add];
12052 else
12053 s = names16[code - eAX_reg + add];
12054 used_prefixes |= (prefixes & PREFIX_DATA);
12055 break;
52b15da3
JH
12056 default:
12057 s = INTERNAL_DISASSEMBLER_ERROR;
12058 break;
12059 }
12060 oappend (s);
12061}
12062
12063static void
26ca5450 12064OP_IMREG (int code, int sizeflag)
52b15da3
JH
12065{
12066 const char *s;
252b5132
RH
12067
12068 switch (code)
12069 {
12070 case indir_dx_reg:
d708bcba 12071 if (intel_syntax)
52fd6d94 12072 s = "dx";
d708bcba 12073 else
db6eb5be 12074 s = "(%dx)";
252b5132
RH
12075 break;
12076 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
12077 case sp_reg: case bp_reg: case si_reg: case di_reg:
12078 s = names16[code - ax_reg];
12079 break;
12080 case es_reg: case ss_reg: case cs_reg:
12081 case ds_reg: case fs_reg: case gs_reg:
12082 s = names_seg[code - es_reg];
12083 break;
12084 case al_reg: case ah_reg: case cl_reg: case ch_reg:
12085 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
12086 USED_REX (0);
12087 if (rex)
12088 s = names8rex[code - al_reg];
12089 else
12090 s = names8[code - al_reg];
252b5132
RH
12091 break;
12092 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
12093 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
12094 USED_REX (REX_W);
12095 if (rex & REX_W)
52b15da3
JH
12096 s = names64[code - eAX_reg];
12097 else if (sizeflag & DFLAG)
252b5132
RH
12098 s = names32[code - eAX_reg];
12099 else
12100 s = names16[code - eAX_reg];
7d421014 12101 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12102 break;
52fd6d94 12103 case z_mode_ax_reg:
161a04f6 12104 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12105 s = *names32;
12106 else
12107 s = *names16;
161a04f6 12108 if (!(rex & REX_W))
52fd6d94
JB
12109 used_prefixes |= (prefixes & PREFIX_DATA);
12110 break;
252b5132
RH
12111 default:
12112 s = INTERNAL_DISASSEMBLER_ERROR;
12113 break;
12114 }
12115 oappend (s);
12116}
12117
12118static void
26ca5450 12119OP_I (int bytemode, int sizeflag)
252b5132 12120{
52b15da3
JH
12121 bfd_signed_vma op;
12122 bfd_signed_vma mask = -1;
252b5132
RH
12123
12124 switch (bytemode)
12125 {
12126 case b_mode:
12127 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
12128 op = *codep++;
12129 mask = 0xff;
12130 break;
12131 case q_mode:
cb712a9e 12132 if (address_mode == mode_64bit)
6439fc28
AM
12133 {
12134 op = get32s ();
12135 break;
12136 }
6608db57 12137 /* Fall through. */
252b5132 12138 case v_mode:
161a04f6
L
12139 USED_REX (REX_W);
12140 if (rex & REX_W)
52b15da3
JH
12141 op = get32s ();
12142 else if (sizeflag & DFLAG)
12143 {
12144 op = get32 ();
12145 mask = 0xffffffff;
12146 }
252b5132 12147 else
52b15da3
JH
12148 {
12149 op = get16 ();
12150 mask = 0xfffff;
12151 }
7d421014 12152 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
12153 break;
12154 case w_mode:
52b15da3 12155 mask = 0xfffff;
252b5132
RH
12156 op = get16 ();
12157 break;
9306ca4a
JB
12158 case const_1_mode:
12159 if (intel_syntax)
12160 oappend ("1");
12161 return;
252b5132
RH
12162 default:
12163 oappend (INTERNAL_DISASSEMBLER_ERROR);
12164 return;
12165 }
12166
52b15da3
JH
12167 op &= mask;
12168 scratchbuf[0] = '$';
d708bcba
AM
12169 print_operand_value (scratchbuf + 1, 1, op);
12170 oappend (scratchbuf + intel_syntax);
52b15da3
JH
12171 scratchbuf[0] = '\0';
12172}
12173
12174static void
26ca5450 12175OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
12176{
12177 bfd_signed_vma op;
12178 bfd_signed_vma mask = -1;
12179
cb712a9e 12180 if (address_mode != mode_64bit)
6439fc28
AM
12181 {
12182 OP_I (bytemode, sizeflag);
12183 return;
12184 }
12185
52b15da3
JH
12186 switch (bytemode)
12187 {
12188 case b_mode:
12189 FETCH_DATA (the_info, codep + 1);
12190 op = *codep++;
12191 mask = 0xff;
12192 break;
12193 case v_mode:
161a04f6
L
12194 USED_REX (REX_W);
12195 if (rex & REX_W)
52b15da3
JH
12196 op = get64 ();
12197 else if (sizeflag & DFLAG)
12198 {
12199 op = get32 ();
12200 mask = 0xffffffff;
12201 }
12202 else
12203 {
12204 op = get16 ();
12205 mask = 0xfffff;
12206 }
12207 used_prefixes |= (prefixes & PREFIX_DATA);
12208 break;
12209 case w_mode:
12210 mask = 0xfffff;
12211 op = get16 ();
12212 break;
12213 default:
12214 oappend (INTERNAL_DISASSEMBLER_ERROR);
12215 return;
12216 }
12217
12218 op &= mask;
12219 scratchbuf[0] = '$';
d708bcba
AM
12220 print_operand_value (scratchbuf + 1, 1, op);
12221 oappend (scratchbuf + intel_syntax);
252b5132
RH
12222 scratchbuf[0] = '\0';
12223}
12224
12225static void
26ca5450 12226OP_sI (int bytemode, int sizeflag)
252b5132 12227{
52b15da3
JH
12228 bfd_signed_vma op;
12229 bfd_signed_vma mask = -1;
252b5132
RH
12230
12231 switch (bytemode)
12232 {
12233 case b_mode:
12234 FETCH_DATA (the_info, codep + 1);
12235 op = *codep++;
12236 if ((op & 0x80) != 0)
12237 op -= 0x100;
52b15da3 12238 mask = 0xffffffff;
252b5132
RH
12239 break;
12240 case v_mode:
161a04f6
L
12241 USED_REX (REX_W);
12242 if (rex & REX_W)
52b15da3
JH
12243 op = get32s ();
12244 else if (sizeflag & DFLAG)
12245 {
12246 op = get32s ();
12247 mask = 0xffffffff;
12248 }
252b5132
RH
12249 else
12250 {
52b15da3 12251 mask = 0xffffffff;
6608db57 12252 op = get16 ();
252b5132
RH
12253 if ((op & 0x8000) != 0)
12254 op -= 0x10000;
12255 }
7d421014 12256 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
12257 break;
12258 case w_mode:
12259 op = get16 ();
52b15da3 12260 mask = 0xffffffff;
252b5132
RH
12261 if ((op & 0x8000) != 0)
12262 op -= 0x10000;
12263 break;
12264 default:
12265 oappend (INTERNAL_DISASSEMBLER_ERROR);
12266 return;
12267 }
52b15da3
JH
12268
12269 scratchbuf[0] = '$';
12270 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 12271 oappend (scratchbuf + intel_syntax);
252b5132
RH
12272}
12273
12274static void
26ca5450 12275OP_J (int bytemode, int sizeflag)
252b5132 12276{
52b15da3 12277 bfd_vma disp;
7081ff04 12278 bfd_vma mask = -1;
65ca155d 12279 bfd_vma segment = 0;
252b5132
RH
12280
12281 switch (bytemode)
12282 {
12283 case b_mode:
12284 FETCH_DATA (the_info, codep + 1);
12285 disp = *codep++;
12286 if ((disp & 0x80) != 0)
12287 disp -= 0x100;
12288 break;
12289 case v_mode:
161a04f6 12290 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 12291 disp = get32s ();
252b5132
RH
12292 else
12293 {
12294 disp = get16 ();
206717e8
L
12295 if ((disp & 0x8000) != 0)
12296 disp -= 0x10000;
65ca155d
L
12297 /* In 16bit mode, address is wrapped around at 64k within
12298 the same segment. Otherwise, a data16 prefix on a jump
12299 instruction means that the pc is masked to 16 bits after
12300 the displacement is added! */
12301 mask = 0xffff;
12302 if ((prefixes & PREFIX_DATA) == 0)
12303 segment = ((start_pc + codep - start_codep)
12304 & ~((bfd_vma) 0xffff));
252b5132 12305 }
d807a492 12306 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
12307 break;
12308 default:
12309 oappend (INTERNAL_DISASSEMBLER_ERROR);
12310 return;
12311 }
65ca155d 12312 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
12313 set_op (disp, 0);
12314 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
12315 oappend (scratchbuf);
12316}
12317
252b5132 12318static void
ed7841b3 12319OP_SEG (int bytemode, int sizeflag)
252b5132 12320{
ed7841b3 12321 if (bytemode == w_mode)
7967e09e 12322 oappend (names_seg[modrm.reg]);
ed7841b3 12323 else
7967e09e 12324 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
12325}
12326
12327static void
26ca5450 12328OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
12329{
12330 int seg, offset;
12331
c608c12e 12332 if (sizeflag & DFLAG)
252b5132 12333 {
c608c12e
AM
12334 offset = get32 ();
12335 seg = get16 ();
252b5132 12336 }
c608c12e
AM
12337 else
12338 {
12339 offset = get16 ();
12340 seg = get16 ();
12341 }
7d421014 12342 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 12343 if (intel_syntax)
3f31e633 12344 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
12345 else
12346 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 12347 oappend (scratchbuf);
252b5132
RH
12348}
12349
252b5132 12350static void
3f31e633 12351OP_OFF (int bytemode, int sizeflag)
252b5132 12352{
52b15da3 12353 bfd_vma off;
252b5132 12354
3f31e633
JB
12355 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
12356 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12357 append_seg ();
12358
cb712a9e 12359 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
12360 off = get32 ();
12361 else
12362 off = get16 ();
12363
12364 if (intel_syntax)
12365 {
12366 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 12367 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 12368 {
d708bcba 12369 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
12370 oappend (":");
12371 }
12372 }
52b15da3
JH
12373 print_operand_value (scratchbuf, 1, off);
12374 oappend (scratchbuf);
12375}
6439fc28 12376
52b15da3 12377static void
3f31e633 12378OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
12379{
12380 bfd_vma off;
12381
539e75ad
L
12382 if (address_mode != mode_64bit
12383 || (prefixes & PREFIX_ADDR))
6439fc28
AM
12384 {
12385 OP_OFF (bytemode, sizeflag);
12386 return;
12387 }
12388
3f31e633
JB
12389 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
12390 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
12391 append_seg ();
12392
6608db57 12393 off = get64 ();
52b15da3
JH
12394
12395 if (intel_syntax)
12396 {
12397 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 12398 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 12399 {
d708bcba 12400 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
12401 oappend (":");
12402 }
12403 }
12404 print_operand_value (scratchbuf, 1, off);
252b5132
RH
12405 oappend (scratchbuf);
12406}
12407
12408static void
26ca5450 12409ptr_reg (int code, int sizeflag)
252b5132 12410{
2da11e11 12411 const char *s;
d708bcba 12412
1d9f512f 12413 *obufp++ = open_char;
20f0a1fc 12414 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 12415 if (address_mode == mode_64bit)
c1a64871
JH
12416 {
12417 if (!(sizeflag & AFLAG))
db6eb5be 12418 s = names32[code - eAX_reg];
c1a64871 12419 else
db6eb5be 12420 s = names64[code - eAX_reg];
c1a64871 12421 }
52b15da3 12422 else if (sizeflag & AFLAG)
252b5132
RH
12423 s = names32[code - eAX_reg];
12424 else
12425 s = names16[code - eAX_reg];
12426 oappend (s);
1d9f512f
AM
12427 *obufp++ = close_char;
12428 *obufp = 0;
252b5132
RH
12429}
12430
12431static void
26ca5450 12432OP_ESreg (int code, int sizeflag)
252b5132 12433{
9306ca4a 12434 if (intel_syntax)
52fd6d94
JB
12435 {
12436 switch (codep[-1])
12437 {
12438 case 0x6d: /* insw/insl */
12439 intel_operand_size (z_mode, sizeflag);
12440 break;
12441 case 0xa5: /* movsw/movsl/movsq */
12442 case 0xa7: /* cmpsw/cmpsl/cmpsq */
12443 case 0xab: /* stosw/stosl */
12444 case 0xaf: /* scasw/scasl */
12445 intel_operand_size (v_mode, sizeflag);
12446 break;
12447 default:
12448 intel_operand_size (b_mode, sizeflag);
12449 }
12450 }
d708bcba 12451 oappend ("%es:" + intel_syntax);
252b5132
RH
12452 ptr_reg (code, sizeflag);
12453}
12454
12455static void
26ca5450 12456OP_DSreg (int code, int sizeflag)
252b5132 12457{
9306ca4a 12458 if (intel_syntax)
52fd6d94
JB
12459 {
12460 switch (codep[-1])
12461 {
12462 case 0x6f: /* outsw/outsl */
12463 intel_operand_size (z_mode, sizeflag);
12464 break;
12465 case 0xa5: /* movsw/movsl/movsq */
12466 case 0xa7: /* cmpsw/cmpsl/cmpsq */
12467 case 0xad: /* lodsw/lodsl/lodsq */
12468 intel_operand_size (v_mode, sizeflag);
12469 break;
12470 default:
12471 intel_operand_size (b_mode, sizeflag);
12472 }
12473 }
252b5132
RH
12474 if ((prefixes
12475 & (PREFIX_CS
12476 | PREFIX_DS
12477 | PREFIX_SS
12478 | PREFIX_ES
12479 | PREFIX_FS
12480 | PREFIX_GS)) == 0)
12481 prefixes |= PREFIX_DS;
6608db57 12482 append_seg ();
252b5132
RH
12483 ptr_reg (code, sizeflag);
12484}
12485
252b5132 12486static void
26ca5450 12487OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12488{
9b60702d 12489 int add;
161a04f6 12490 if (rex & REX_R)
c4a530c5 12491 {
161a04f6 12492 USED_REX (REX_R);
c4a530c5
JB
12493 add = 8;
12494 }
cb712a9e 12495 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 12496 {
b844680a 12497 lock_prefix = NULL;
c4a530c5
JB
12498 used_prefixes |= PREFIX_LOCK;
12499 add = 8;
12500 }
9b60702d
L
12501 else
12502 add = 0;
7967e09e 12503 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 12504 oappend (scratchbuf + intel_syntax);
252b5132
RH
12505}
12506
252b5132 12507static void
26ca5450 12508OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12509{
9b60702d 12510 int add;
161a04f6
L
12511 USED_REX (REX_R);
12512 if (rex & REX_R)
52b15da3 12513 add = 8;
9b60702d
L
12514 else
12515 add = 0;
d708bcba 12516 if (intel_syntax)
7967e09e 12517 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 12518 else
7967e09e 12519 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
12520 oappend (scratchbuf);
12521}
12522
252b5132 12523static void
26ca5450 12524OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12525{
7967e09e 12526 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 12527 oappend (scratchbuf + intel_syntax);
252b5132
RH
12528}
12529
12530static void
6f74c397 12531OP_R (int bytemode, int sizeflag)
252b5132 12532{
7967e09e 12533 if (modrm.mod == 3)
2da11e11
AM
12534 OP_E (bytemode, sizeflag);
12535 else
6608db57 12536 BadOp ();
252b5132
RH
12537}
12538
12539static void
26ca5450 12540OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12541{
041bd2e0
JH
12542 used_prefixes |= (prefixes & PREFIX_DATA);
12543 if (prefixes & PREFIX_DATA)
20f0a1fc 12544 {
9b60702d 12545 int add;
161a04f6
L
12546 USED_REX (REX_R);
12547 if (rex & REX_R)
20f0a1fc 12548 add = 8;
9b60702d
L
12549 else
12550 add = 0;
7967e09e 12551 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
20f0a1fc 12552 }
041bd2e0 12553 else
7967e09e 12554 sprintf (scratchbuf, "%%mm%d", modrm.reg);
d708bcba 12555 oappend (scratchbuf + intel_syntax);
252b5132
RH
12556}
12557
c608c12e 12558static void
c0f3af97 12559OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 12560{
9b60702d 12561 int add;
161a04f6
L
12562 USED_REX (REX_R);
12563 if (rex & REX_R)
041bd2e0 12564 add = 8;
9b60702d
L
12565 else
12566 add = 0;
c0f3af97
L
12567 if (need_vex && bytemode != xmm_mode)
12568 {
12569 switch (vex.length)
12570 {
12571 case 128:
12572 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
12573 break;
12574 case 256:
12575 sprintf (scratchbuf, "%%ymm%d", modrm.reg + add);
12576 break;
12577 default:
12578 abort ();
12579 }
12580 }
12581 else
12582 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
d708bcba 12583 oappend (scratchbuf + intel_syntax);
c608c12e
AM
12584}
12585
252b5132 12586static void
26ca5450 12587OP_EM (int bytemode, int sizeflag)
252b5132 12588{
7967e09e 12589 if (modrm.mod != 3)
252b5132 12590 {
b6169b20
L
12591 if (intel_syntax
12592 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
12593 {
12594 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
12595 used_prefixes |= (prefixes & PREFIX_DATA);
12596 }
252b5132
RH
12597 OP_E (bytemode, sizeflag);
12598 return;
12599 }
12600
b6169b20
L
12601 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
12602 swap_operand ();
12603
6608db57 12604 /* Skip mod/rm byte. */
4bba6815 12605 MODRM_CHECK;
252b5132 12606 codep++;
041bd2e0
JH
12607 used_prefixes |= (prefixes & PREFIX_DATA);
12608 if (prefixes & PREFIX_DATA)
20f0a1fc 12609 {
9b60702d 12610 int add;
20f0a1fc 12611
161a04f6
L
12612 USED_REX (REX_B);
12613 if (rex & REX_B)
20f0a1fc 12614 add = 8;
9b60702d
L
12615 else
12616 add = 0;
7967e09e 12617 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
20f0a1fc 12618 }
041bd2e0 12619 else
7967e09e 12620 sprintf (scratchbuf, "%%mm%d", modrm.rm);
d708bcba 12621 oappend (scratchbuf + intel_syntax);
252b5132
RH
12622}
12623
246c51aa
L
12624/* cvt* are the only instructions in sse2 which have
12625 both SSE and MMX operands and also have 0x66 prefix
12626 in their opcode. 0x66 was originally used to differentiate
12627 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
12628 cvt* separately using OP_EMC and OP_MXC */
12629static void
12630OP_EMC (int bytemode, int sizeflag)
12631{
7967e09e 12632 if (modrm.mod != 3)
4d9567e0
MM
12633 {
12634 if (intel_syntax && bytemode == v_mode)
12635 {
12636 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
12637 used_prefixes |= (prefixes & PREFIX_DATA);
12638 }
12639 OP_E (bytemode, sizeflag);
12640 return;
12641 }
246c51aa 12642
4d9567e0
MM
12643 /* Skip mod/rm byte. */
12644 MODRM_CHECK;
12645 codep++;
12646 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 12647 sprintf (scratchbuf, "%%mm%d", modrm.rm);
4d9567e0
MM
12648 oappend (scratchbuf + intel_syntax);
12649}
12650
12651static void
12652OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12653{
12654 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 12655 sprintf (scratchbuf, "%%mm%d", modrm.reg);
4d9567e0
MM
12656 oappend (scratchbuf + intel_syntax);
12657}
12658
c608c12e 12659static void
26ca5450 12660OP_EX (int bytemode, int sizeflag)
c608c12e 12661{
9b60702d 12662 int add;
7967e09e 12663 if (modrm.mod != 3)
c608c12e
AM
12664 {
12665 OP_E (bytemode, sizeflag);
12666 return;
12667 }
161a04f6
L
12668 USED_REX (REX_B);
12669 if (rex & REX_B)
041bd2e0 12670 add = 8;
9b60702d
L
12671 else
12672 add = 0;
c608c12e 12673
b6169b20 12674 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
12675 && (bytemode == x_swap_mode
12676 || bytemode == d_swap_mode
12677 || bytemode == q_swap_mode))
b6169b20
L
12678 swap_operand ();
12679
6608db57 12680 /* Skip mod/rm byte. */
4bba6815 12681 MODRM_CHECK;
c608c12e 12682 codep++;
c0f3af97
L
12683 if (need_vex
12684 && bytemode != xmm_mode
12685 && bytemode != xmmq_mode)
12686 {
12687 switch (vex.length)
12688 {
12689 case 128:
12690 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
12691 break;
12692 case 256:
12693 sprintf (scratchbuf, "%%ymm%d", modrm.rm + add);
12694 break;
12695 default:
12696 abort ();
12697 }
12698 }
12699 else
12700 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
d708bcba 12701 oappend (scratchbuf + intel_syntax);
c608c12e
AM
12702}
12703
252b5132 12704static void
26ca5450 12705OP_MS (int bytemode, int sizeflag)
252b5132 12706{
7967e09e 12707 if (modrm.mod == 3)
2da11e11
AM
12708 OP_EM (bytemode, sizeflag);
12709 else
6608db57 12710 BadOp ();
252b5132
RH
12711}
12712
992aaec9 12713static void
26ca5450 12714OP_XS (int bytemode, int sizeflag)
992aaec9 12715{
7967e09e 12716 if (modrm.mod == 3)
992aaec9
AM
12717 OP_EX (bytemode, sizeflag);
12718 else
6608db57 12719 BadOp ();
992aaec9
AM
12720}
12721
cc0ec051
AM
12722static void
12723OP_M (int bytemode, int sizeflag)
12724{
7967e09e 12725 if (modrm.mod == 3)
75413a22
L
12726 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
12727 BadOp ();
cc0ec051
AM
12728 else
12729 OP_E (bytemode, sizeflag);
12730}
12731
12732static void
12733OP_0f07 (int bytemode, int sizeflag)
12734{
7967e09e 12735 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
12736 BadOp ();
12737 else
12738 OP_E (bytemode, sizeflag);
12739}
12740
46e883c5 12741/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 12742 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 12743
cc0ec051 12744static void
46e883c5 12745NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 12746{
8b38ad71
L
12747 if ((prefixes & PREFIX_DATA) != 0
12748 || (rex != 0
12749 && rex != 0x48
12750 && address_mode == mode_64bit))
46e883c5
L
12751 OP_REG (bytemode, sizeflag);
12752 else
12753 strcpy (obuf, "nop");
12754}
12755
12756static void
12757NOP_Fixup2 (int bytemode, int sizeflag)
12758{
8b38ad71
L
12759 if ((prefixes & PREFIX_DATA) != 0
12760 || (rex != 0
12761 && rex != 0x48
12762 && address_mode == mode_64bit))
46e883c5 12763 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
12764}
12765
84037f8c 12766static const char *const Suffix3DNow[] = {
252b5132
RH
12767/* 00 */ NULL, NULL, NULL, NULL,
12768/* 04 */ NULL, NULL, NULL, NULL,
12769/* 08 */ NULL, NULL, NULL, NULL,
9e525108 12770/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
12771/* 10 */ NULL, NULL, NULL, NULL,
12772/* 14 */ NULL, NULL, NULL, NULL,
12773/* 18 */ NULL, NULL, NULL, NULL,
9e525108 12774/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
12775/* 20 */ NULL, NULL, NULL, NULL,
12776/* 24 */ NULL, NULL, NULL, NULL,
12777/* 28 */ NULL, NULL, NULL, NULL,
12778/* 2C */ NULL, NULL, NULL, NULL,
12779/* 30 */ NULL, NULL, NULL, NULL,
12780/* 34 */ NULL, NULL, NULL, NULL,
12781/* 38 */ NULL, NULL, NULL, NULL,
12782/* 3C */ NULL, NULL, NULL, NULL,
12783/* 40 */ NULL, NULL, NULL, NULL,
12784/* 44 */ NULL, NULL, NULL, NULL,
12785/* 48 */ NULL, NULL, NULL, NULL,
12786/* 4C */ NULL, NULL, NULL, NULL,
12787/* 50 */ NULL, NULL, NULL, NULL,
12788/* 54 */ NULL, NULL, NULL, NULL,
12789/* 58 */ NULL, NULL, NULL, NULL,
12790/* 5C */ NULL, NULL, NULL, NULL,
12791/* 60 */ NULL, NULL, NULL, NULL,
12792/* 64 */ NULL, NULL, NULL, NULL,
12793/* 68 */ NULL, NULL, NULL, NULL,
12794/* 6C */ NULL, NULL, NULL, NULL,
12795/* 70 */ NULL, NULL, NULL, NULL,
12796/* 74 */ NULL, NULL, NULL, NULL,
12797/* 78 */ NULL, NULL, NULL, NULL,
12798/* 7C */ NULL, NULL, NULL, NULL,
12799/* 80 */ NULL, NULL, NULL, NULL,
12800/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
12801/* 88 */ NULL, NULL, "pfnacc", NULL,
12802/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
12803/* 90 */ "pfcmpge", NULL, NULL, NULL,
12804/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
12805/* 98 */ NULL, NULL, "pfsub", NULL,
12806/* 9C */ NULL, NULL, "pfadd", NULL,
12807/* A0 */ "pfcmpgt", NULL, NULL, NULL,
12808/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
12809/* A8 */ NULL, NULL, "pfsubr", NULL,
12810/* AC */ NULL, NULL, "pfacc", NULL,
12811/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 12812/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 12813/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
12814/* BC */ NULL, NULL, NULL, "pavgusb",
12815/* C0 */ NULL, NULL, NULL, NULL,
12816/* C4 */ NULL, NULL, NULL, NULL,
12817/* C8 */ NULL, NULL, NULL, NULL,
12818/* CC */ NULL, NULL, NULL, NULL,
12819/* D0 */ NULL, NULL, NULL, NULL,
12820/* D4 */ NULL, NULL, NULL, NULL,
12821/* D8 */ NULL, NULL, NULL, NULL,
12822/* DC */ NULL, NULL, NULL, NULL,
12823/* E0 */ NULL, NULL, NULL, NULL,
12824/* E4 */ NULL, NULL, NULL, NULL,
12825/* E8 */ NULL, NULL, NULL, NULL,
12826/* EC */ NULL, NULL, NULL, NULL,
12827/* F0 */ NULL, NULL, NULL, NULL,
12828/* F4 */ NULL, NULL, NULL, NULL,
12829/* F8 */ NULL, NULL, NULL, NULL,
12830/* FC */ NULL, NULL, NULL, NULL,
12831};
12832
12833static void
26ca5450 12834OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
12835{
12836 const char *mnemonic;
12837
12838 FETCH_DATA (the_info, codep + 1);
12839 /* AMD 3DNow! instructions are specified by an opcode suffix in the
12840 place where an 8-bit immediate would normally go. ie. the last
12841 byte of the instruction. */
ea397f5b 12842 obufp = mnemonicendp;
c608c12e 12843 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 12844 if (mnemonic)
2da11e11 12845 oappend (mnemonic);
252b5132
RH
12846 else
12847 {
12848 /* Since a variable sized modrm/sib chunk is between the start
12849 of the opcode (0x0f0f) and the opcode suffix, we need to do
12850 all the modrm processing first, and don't know until now that
12851 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
12852 op_out[0][0] = '\0';
12853 op_out[1][0] = '\0';
6608db57 12854 BadOp ();
252b5132 12855 }
ea397f5b 12856 mnemonicendp = obufp;
252b5132 12857}
c608c12e 12858
ea397f5b
L
12859static struct op simd_cmp_op[] =
12860{
12861 { STRING_COMMA_LEN ("eq") },
12862 { STRING_COMMA_LEN ("lt") },
12863 { STRING_COMMA_LEN ("le") },
12864 { STRING_COMMA_LEN ("unord") },
12865 { STRING_COMMA_LEN ("neq") },
12866 { STRING_COMMA_LEN ("nlt") },
12867 { STRING_COMMA_LEN ("nle") },
12868 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
12869};
12870
12871static void
ad19981d 12872CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
12873{
12874 unsigned int cmp_type;
12875
12876 FETCH_DATA (the_info, codep + 1);
12877 cmp_type = *codep++ & 0xff;
c0f3af97 12878 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 12879 {
ad19981d 12880 char suffix [3];
ea397f5b 12881 char *p = mnemonicendp - 2;
ad19981d
L
12882 suffix[0] = p[0];
12883 suffix[1] = p[1];
12884 suffix[2] = '\0';
ea397f5b
L
12885 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
12886 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
12887 }
12888 else
12889 {
ad19981d
L
12890 /* We have a reserved extension byte. Output it directly. */
12891 scratchbuf[0] = '$';
12892 print_operand_value (scratchbuf + 1, 1, cmp_type);
12893 oappend (scratchbuf + intel_syntax);
12894 scratchbuf[0] = '\0';
c608c12e
AM
12895 }
12896}
12897
ca164297 12898static void
b844680a
L
12899OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
12900 int sizeflag ATTRIBUTE_UNUSED)
12901{
12902 /* mwait %eax,%ecx */
12903 if (!intel_syntax)
12904 {
12905 const char **names = (address_mode == mode_64bit
12906 ? names64 : names32);
12907 strcpy (op_out[0], names[0]);
12908 strcpy (op_out[1], names[1]);
12909 two_source_ops = 1;
12910 }
12911 /* Skip mod/rm byte. */
12912 MODRM_CHECK;
12913 codep++;
12914}
12915
12916static void
12917OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
12918 int sizeflag ATTRIBUTE_UNUSED)
ca164297 12919{
b844680a
L
12920 /* monitor %eax,%ecx,%edx" */
12921 if (!intel_syntax)
ca164297 12922 {
b844680a 12923 const char **op1_names;
cb712a9e
L
12924 const char **names = (address_mode == mode_64bit
12925 ? names64 : names32);
1d9f512f 12926
b844680a
L
12927 if (!(prefixes & PREFIX_ADDR))
12928 op1_names = (address_mode == mode_16bit
12929 ? names16 : names);
ca164297
L
12930 else
12931 {
b844680a
L
12932 /* Remove "addr16/addr32". */
12933 addr_prefix = NULL;
12934 op1_names = (address_mode != mode_32bit
12935 ? names32 : names16);
12936 used_prefixes |= PREFIX_ADDR;
ca164297 12937 }
b844680a
L
12938 strcpy (op_out[0], op1_names[0]);
12939 strcpy (op_out[1], names[1]);
12940 strcpy (op_out[2], names[2]);
12941 two_source_ops = 1;
ca164297 12942 }
b844680a
L
12943 /* Skip mod/rm byte. */
12944 MODRM_CHECK;
12945 codep++;
30123838
JB
12946}
12947
6608db57
KH
12948static void
12949BadOp (void)
2da11e11 12950{
6608db57
KH
12951 /* Throw away prefixes and 1st. opcode byte. */
12952 codep = insn_codep + 1;
2da11e11
AM
12953 oappend ("(bad)");
12954}
4cc91dba 12955
35c52694
L
12956static void
12957REP_Fixup (int bytemode, int sizeflag)
12958{
12959 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
12960 lods and stos. */
35c52694 12961 if (prefixes & PREFIX_REPZ)
b844680a 12962 repz_prefix = "rep ";
35c52694
L
12963
12964 switch (bytemode)
12965 {
12966 case al_reg:
12967 case eAX_reg:
12968 case indir_dx_reg:
12969 OP_IMREG (bytemode, sizeflag);
12970 break;
12971 case eDI_reg:
12972 OP_ESreg (bytemode, sizeflag);
12973 break;
12974 case eSI_reg:
12975 OP_DSreg (bytemode, sizeflag);
12976 break;
12977 default:
12978 abort ();
12979 break;
12980 }
12981}
f5804c90
L
12982
12983static void
12984CMPXCHG8B_Fixup (int bytemode, int sizeflag)
12985{
161a04f6
L
12986 USED_REX (REX_W);
12987 if (rex & REX_W)
f5804c90
L
12988 {
12989 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
12990 char *p = mnemonicendp - 2;
12991 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 12992 bytemode = o_mode;
f5804c90
L
12993 }
12994 OP_M (bytemode, sizeflag);
12995}
42903f7f
L
12996
12997static void
12998XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
12999{
c0f3af97
L
13000 if (need_vex)
13001 {
13002 switch (vex.length)
13003 {
13004 case 128:
13005 sprintf (scratchbuf, "%%xmm%d", reg);
13006 break;
13007 case 256:
13008 sprintf (scratchbuf, "%%ymm%d", reg);
13009 break;
13010 default:
13011 abort ();
13012 }
13013 }
13014 else
13015 sprintf (scratchbuf, "%%xmm%d", reg);
42903f7f
L
13016 oappend (scratchbuf + intel_syntax);
13017}
381d071f
L
13018
13019static void
13020CRC32_Fixup (int bytemode, int sizeflag)
13021{
13022 /* Add proper suffix to "crc32". */
ea397f5b 13023 char *p = mnemonicendp;
381d071f
L
13024
13025 switch (bytemode)
13026 {
13027 case b_mode:
20592a94 13028 if (intel_syntax)
ea397f5b 13029 goto skip;
20592a94 13030
381d071f
L
13031 *p++ = 'b';
13032 break;
13033 case v_mode:
20592a94 13034 if (intel_syntax)
ea397f5b 13035 goto skip;
20592a94 13036
381d071f
L
13037 USED_REX (REX_W);
13038 if (rex & REX_W)
13039 *p++ = 'q';
9344ff29 13040 else if (sizeflag & DFLAG)
20592a94 13041 *p++ = 'l';
381d071f 13042 else
9344ff29
L
13043 *p++ = 'w';
13044 used_prefixes |= (prefixes & PREFIX_DATA);
381d071f
L
13045 break;
13046 default:
13047 oappend (INTERNAL_DISASSEMBLER_ERROR);
13048 break;
13049 }
ea397f5b 13050 mnemonicendp = p;
381d071f
L
13051 *p = '\0';
13052
ea397f5b 13053skip:
381d071f
L
13054 if (modrm.mod == 3)
13055 {
13056 int add;
13057
13058 /* Skip mod/rm byte. */
13059 MODRM_CHECK;
13060 codep++;
13061
13062 USED_REX (REX_B);
13063 add = (rex & REX_B) ? 8 : 0;
13064 if (bytemode == b_mode)
13065 {
13066 USED_REX (0);
13067 if (rex)
13068 oappend (names8rex[modrm.rm + add]);
13069 else
13070 oappend (names8[modrm.rm + add]);
13071 }
13072 else
13073 {
13074 USED_REX (REX_W);
13075 if (rex & REX_W)
13076 oappend (names64[modrm.rm + add]);
13077 else if ((prefixes & PREFIX_DATA))
13078 oappend (names16[modrm.rm + add]);
13079 else
13080 oappend (names32[modrm.rm + add]);
13081 }
13082 }
13083 else
9344ff29 13084 OP_E (bytemode, sizeflag);
381d071f 13085}
85f10a01
MM
13086
13087/* Print a DREX argument as either a register or memory operation. */
13088static void
13089print_drex_arg (unsigned int reg, int bytemode, int sizeflag)
13090{
13091 if (reg == DREX_REG_UNKNOWN)
13092 BadOp ();
13093
13094 else if (reg != DREX_REG_MEMORY)
13095 {
13096 sprintf (scratchbuf, "%%xmm%d", reg);
13097 oappend (scratchbuf + intel_syntax);
13098 }
13099
13100 else
13101 OP_E_extended (bytemode, sizeflag, 1);
13102}
13103
13104/* SSE5 instructions that have 4 arguments are encoded as:
13105 0f 24 <sub-opcode> <modrm> <optional-sib> <drex> <offset>.
13106
13107 The <sub-opcode> byte has 1 bit (0x4) that is combined with 1 bit in
13108 the DREX field (0x8) to determine how the arguments are laid out.
13109 The destination register must be the same register as one of the
13110 inputs, and it is encoded in the DREX byte. No REX prefix is used
13111 for these instructions, since the DREX field contains the 3 extension
13112 bits provided by the REX prefix.
13113
13114 The bytemode argument adds 2 extra bits for passing extra information:
13115 DREX_OC1 -- Set the OC1 bit to indicate dest == 1st arg
13116 DREX_NO_OC0 -- OC0 in DREX is invalid
13117 (but pretend it is set). */
13118
13119static void
13120OP_DREX4 (int flag_bytemode, int sizeflag)
13121{
13122 unsigned int drex_byte;
13123 unsigned int regs[4];
13124 unsigned int modrm_regmem;
13125 unsigned int modrm_reg;
13126 unsigned int drex_reg;
13127 int bytemode;
13128 int rex_save = rex;
13129 int rex_used_save = rex_used;
13130 int has_sib = 0;
13131 int oc1 = (flag_bytemode & DREX_OC1) ? 2 : 0;
13132 int oc0;
13133 int i;
13134
13135 bytemode = flag_bytemode & ~ DREX_MASK;
13136
13137 for (i = 0; i < 4; i++)
13138 regs[i] = DREX_REG_UNKNOWN;
13139
13140 /* Determine if we have a SIB byte in addition to MODRM before the
13141 DREX byte. */
13142 if (((sizeflag & AFLAG) || address_mode == mode_64bit)
13143 && (modrm.mod != 3)
13144 && (modrm.rm == 4))
13145 has_sib = 1;
13146
13147 /* Get the DREX byte. */
13148 FETCH_DATA (the_info, codep + 2 + has_sib);
13149 drex_byte = codep[has_sib+1];
13150 drex_reg = DREX_XMM (drex_byte);
13151 modrm_reg = modrm.reg + ((drex_byte & REX_R) ? 8 : 0);
13152
13153 /* Is OC0 legal? If not, hardwire oc0 == 1. */
13154 if (flag_bytemode & DREX_NO_OC0)
13155 {
13156 oc0 = 1;
13157 if (DREX_OC0 (drex_byte))
13158 BadOp ();
13159 }
13160 else
13161 oc0 = DREX_OC0 (drex_byte);
13162
13163 if (modrm.mod == 3)
13164 {
13165 /* regmem == register */
13166 modrm_regmem = modrm.rm + ((drex_byte & REX_B) ? 8 : 0);
13167 rex = rex_used = 0;
13168 /* skip modrm/drex since we don't call OP_E_extended */
13169 codep += 2;
13170 }
13171 else
13172 {
13173 /* regmem == memory, fill in appropriate REX bits */
13174 modrm_regmem = DREX_REG_MEMORY;
13175 rex = drex_byte & (REX_B | REX_X | REX_R);
13176 if (rex)
13177 rex |= REX_OPCODE;
13178 rex_used = rex;
13179 }
13180
13181 /* Based on the OC1/OC0 bits, lay out the arguments in the correct
13182 order. */
13183 switch (oc0 + oc1)
13184 {
13185 default:
13186 BadOp ();
13187 return;
13188
13189 case 0:
13190 regs[0] = modrm_regmem;
13191 regs[1] = modrm_reg;
13192 regs[2] = drex_reg;
13193 regs[3] = drex_reg;
13194 break;
13195
13196 case 1:
13197 regs[0] = modrm_reg;
13198 regs[1] = modrm_regmem;
13199 regs[2] = drex_reg;
13200 regs[3] = drex_reg;
13201 break;
13202
13203 case 2:
13204 regs[0] = drex_reg;
13205 regs[1] = modrm_regmem;
13206 regs[2] = modrm_reg;
13207 regs[3] = drex_reg;
13208 break;
13209
13210 case 3:
13211 regs[0] = drex_reg;
13212 regs[1] = modrm_reg;
13213 regs[2] = modrm_regmem;
13214 regs[3] = drex_reg;
13215 break;
13216 }
13217
13218 /* Print out the arguments. */
13219 for (i = 0; i < 4; i++)
13220 {
13221 int j = (intel_syntax) ? 3 - i : i;
13222 if (i > 0)
13223 {
13224 *obufp++ = ',';
13225 *obufp = '\0';
13226 }
13227
13228 print_drex_arg (regs[j], bytemode, sizeflag);
13229 }
13230
13231 rex = rex_save;
13232 rex_used = rex_used_save;
13233}
13234
13235/* SSE5 instructions that have 3 arguments, and are encoded as:
13236 0f 24 <sub-opcode> <modrm> <optional-sib> <drex> <offset> (or)
13237 0f 25 <sub-opcode> <modrm> <optional-sib> <drex> <offset> <cmp-byte>
13238
13239 The DREX field has 1 bit (0x8) to determine how the arguments are
13240 laid out. The destination register is encoded in the DREX byte.
13241 No REX prefix is used for these instructions, since the DREX field
13242 contains the 3 extension bits provided by the REX prefix. */
13243
13244static void
13245OP_DREX3 (int flag_bytemode, int sizeflag)
13246{
13247 unsigned int drex_byte;
13248 unsigned int regs[3];
13249 unsigned int modrm_regmem;
13250 unsigned int modrm_reg;
13251 unsigned int drex_reg;
13252 int bytemode;
13253 int rex_save = rex;
13254 int rex_used_save = rex_used;
13255 int has_sib = 0;
13256 int oc0;
13257 int i;
13258
13259 bytemode = flag_bytemode & ~ DREX_MASK;
13260
13261 for (i = 0; i < 3; i++)
13262 regs[i] = DREX_REG_UNKNOWN;
13263
13264 /* Determine if we have a SIB byte in addition to MODRM before the
13265 DREX byte. */
13266 if (((sizeflag & AFLAG) || address_mode == mode_64bit)
13267 && (modrm.mod != 3)
13268 && (modrm.rm == 4))
13269 has_sib = 1;
13270
13271 /* Get the DREX byte. */
13272 FETCH_DATA (the_info, codep + 2 + has_sib);
13273 drex_byte = codep[has_sib+1];
13274 drex_reg = DREX_XMM (drex_byte);
13275 modrm_reg = modrm.reg + ((drex_byte & REX_R) ? 8 : 0);
13276
13277 /* Is OC0 legal? If not, hardwire oc0 == 0 */
13278 oc0 = DREX_OC0 (drex_byte);
13279 if ((flag_bytemode & DREX_NO_OC0) && oc0)
13280 BadOp ();
13281
13282 if (modrm.mod == 3)
13283 {
13284 /* regmem == register */
13285 modrm_regmem = modrm.rm + ((drex_byte & REX_B) ? 8 : 0);
13286 rex = rex_used = 0;
13287 /* skip modrm/drex since we don't call OP_E_extended. */
13288 codep += 2;
13289 }
13290 else
13291 {
13292 /* regmem == memory, fill in appropriate REX bits. */
13293 modrm_regmem = DREX_REG_MEMORY;
13294 rex = drex_byte & (REX_B | REX_X | REX_R);
13295 if (rex)
13296 rex |= REX_OPCODE;
13297 rex_used = rex;
13298 }
13299
13300 /* Based on the OC1/OC0 bits, lay out the arguments in the correct
13301 order. */
13302 switch (oc0)
13303 {
13304 default:
13305 BadOp ();
13306 return;
13307
13308 case 0:
13309 regs[0] = modrm_regmem;
13310 regs[1] = modrm_reg;
13311 regs[2] = drex_reg;
13312 break;
13313
13314 case 1:
13315 regs[0] = modrm_reg;
13316 regs[1] = modrm_regmem;
13317 regs[2] = drex_reg;
13318 break;
13319 }
13320
13321 /* Print out the arguments. */
13322 for (i = 0; i < 3; i++)
13323 {
13324 int j = (intel_syntax) ? 2 - i : i;
13325 if (i > 0)
13326 {
13327 *obufp++ = ',';
13328 *obufp = '\0';
13329 }
13330
13331 print_drex_arg (regs[j], bytemode, sizeflag);
13332 }
13333
13334 rex = rex_save;
13335 rex_used = rex_used_save;
13336}
13337
13338/* Emit a floating point comparison for comp<xx> instructions. */
13339
13340static void
13341OP_DREX_FCMP (int bytemode ATTRIBUTE_UNUSED,
13342 int sizeflag ATTRIBUTE_UNUSED)
13343{
13344 unsigned char byte;
13345
13346 static const char *const cmp_test[] = {
13347 "eq",
13348 "lt",
13349 "le",
13350 "unord",
13351 "ne",
13352 "nlt",
13353 "nle",
13354 "ord",
13355 "ueq",
13356 "ult",
13357 "ule",
13358 "false",
13359 "une",
13360 "unlt",
13361 "unle",
13362 "true"
13363 };
13364
13365 FETCH_DATA (the_info, codep + 1);
13366 byte = *codep & 0xff;
13367
13368 if (byte >= ARRAY_SIZE (cmp_test)
13369 || obuf[0] != 'c'
13370 || obuf[1] != 'o'
13371 || obuf[2] != 'm')
13372 {
13373 /* The instruction isn't one we know about, so just append the
13374 extension byte as a numeric value. */
13375 OP_I (b_mode, 0);
13376 }
13377
13378 else
13379 {
13380 sprintf (scratchbuf, "com%s%s", cmp_test[byte], obuf+3);
ea397f5b 13381 mnemonicendp = stpcpy (obuf, scratchbuf);
85f10a01
MM
13382 codep++;
13383 }
13384}
13385
13386/* Emit an integer point comparison for pcom<xx> instructions,
13387 rewriting the instruction to have the test inside of it. */
13388
13389static void
13390OP_DREX_ICMP (int bytemode ATTRIBUTE_UNUSED,
13391 int sizeflag ATTRIBUTE_UNUSED)
13392{
13393 unsigned char byte;
13394
13395 static const char *const cmp_test[] = {
13396 "lt",
13397 "le",
13398 "gt",
13399 "ge",
13400 "eq",
13401 "ne",
13402 "false",
13403 "true"
13404 };
13405
13406 FETCH_DATA (the_info, codep + 1);
13407 byte = *codep & 0xff;
13408
13409 if (byte >= ARRAY_SIZE (cmp_test)
13410 || obuf[0] != 'p'
13411 || obuf[1] != 'c'
13412 || obuf[2] != 'o'
13413 || obuf[3] != 'm')
13414 {
13415 /* The instruction isn't one we know about, so just print the
13416 comparison test byte as a numeric value. */
13417 OP_I (b_mode, 0);
13418 }
13419
13420 else
13421 {
13422 sprintf (scratchbuf, "pcom%s%s", cmp_test[byte], obuf+4);
ea397f5b 13423 mnemonicendp = stpcpy (obuf, scratchbuf);
85f10a01
MM
13424 codep++;
13425 }
13426}
c0f3af97
L
13427
13428/* Display the destination register operand for instructions with
13429 VEX. */
13430
13431static void
13432OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
13433{
13434 if (!need_vex)
13435 abort ();
13436
13437 if (!need_vex_reg)
13438 return;
13439
13440 switch (vex.length)
13441 {
13442 case 128:
13443 switch (bytemode)
13444 {
13445 case vex_mode:
13446 case vex128_mode:
13447 break;
13448 default:
13449 abort ();
13450 return;
13451 }
13452
13453 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
13454 break;
13455 case 256:
13456 switch (bytemode)
13457 {
13458 case vex_mode:
13459 case vex256_mode:
13460 break;
13461 default:
13462 abort ();
13463 return;
13464 }
13465
13466 sprintf (scratchbuf, "%%ymm%d", vex.register_specifier);
13467 break;
13468 default:
13469 abort ();
13470 break;
13471 }
13472 oappend (scratchbuf + intel_syntax);
13473}
13474
c0f3af97
L
13475static void
13476OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
13477{
13478 int reg;
13479 FETCH_DATA (the_info, codep + 1);
13480 reg = *codep++;
13481
13482 if (bytemode != x_mode)
13483 abort ();
13484
13485 if (reg & 0xf)
13486 BadOp ();
13487
13488 reg >>= 4;
dae39acc
L
13489 if (reg > 7 && address_mode != mode_64bit)
13490 BadOp ();
13491
c0f3af97
L
13492 switch (vex.length)
13493 {
13494 case 128:
13495 sprintf (scratchbuf, "%%xmm%d", reg);
13496 break;
13497 case 256:
13498 sprintf (scratchbuf, "%%ymm%d", reg);
13499 break;
13500 default:
13501 abort ();
13502 }
13503 oappend (scratchbuf + intel_syntax);
13504}
13505
c0f3af97
L
13506static void
13507OP_EX_Vex (int bytemode, int sizeflag)
13508{
13509 if (modrm.mod != 3)
13510 {
13511 if (vex.register_specifier != 0)
13512 BadOp ();
13513 need_vex_reg = 0;
13514 }
13515 OP_EX (bytemode, sizeflag);
13516}
13517
13518static void
13519OP_XMM_Vex (int bytemode, int sizeflag)
13520{
13521 if (modrm.mod != 3)
13522 {
13523 if (vex.register_specifier != 0)
13524 BadOp ();
13525 need_vex_reg = 0;
13526 }
13527 OP_XMM (bytemode, sizeflag);
13528}
13529
13530static void
13531VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13532{
13533 switch (vex.length)
13534 {
13535 case 128:
ea397f5b 13536 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
13537 break;
13538 case 256:
ea397f5b 13539 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
13540 break;
13541 default:
13542 abort ();
13543 }
13544}
13545
ea397f5b
L
13546static struct op vex_cmp_op[] =
13547{
13548 { STRING_COMMA_LEN ("eq") },
13549 { STRING_COMMA_LEN ("lt") },
13550 { STRING_COMMA_LEN ("le") },
13551 { STRING_COMMA_LEN ("unord") },
13552 { STRING_COMMA_LEN ("neq") },
13553 { STRING_COMMA_LEN ("nlt") },
13554 { STRING_COMMA_LEN ("nle") },
13555 { STRING_COMMA_LEN ("ord") },
13556 { STRING_COMMA_LEN ("eq_uq") },
13557 { STRING_COMMA_LEN ("nge") },
13558 { STRING_COMMA_LEN ("ngt") },
13559 { STRING_COMMA_LEN ("false") },
13560 { STRING_COMMA_LEN ("neq_oq") },
13561 { STRING_COMMA_LEN ("ge") },
13562 { STRING_COMMA_LEN ("gt") },
13563 { STRING_COMMA_LEN ("true") },
13564 { STRING_COMMA_LEN ("eq_os") },
13565 { STRING_COMMA_LEN ("lt_oq") },
13566 { STRING_COMMA_LEN ("le_oq") },
13567 { STRING_COMMA_LEN ("unord_s") },
13568 { STRING_COMMA_LEN ("neq_us") },
13569 { STRING_COMMA_LEN ("nlt_uq") },
13570 { STRING_COMMA_LEN ("nle_uq") },
13571 { STRING_COMMA_LEN ("ord_s") },
13572 { STRING_COMMA_LEN ("eq_us") },
13573 { STRING_COMMA_LEN ("nge_uq") },
13574 { STRING_COMMA_LEN ("ngt_uq") },
13575 { STRING_COMMA_LEN ("false_os") },
13576 { STRING_COMMA_LEN ("neq_os") },
13577 { STRING_COMMA_LEN ("ge_oq") },
13578 { STRING_COMMA_LEN ("gt_oq") },
13579 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
13580};
13581
13582static void
13583VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13584{
13585 unsigned int cmp_type;
13586
13587 FETCH_DATA (the_info, codep + 1);
13588 cmp_type = *codep++ & 0xff;
13589 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
13590 {
13591 char suffix [3];
ea397f5b 13592 char *p = mnemonicendp - 2;
c0f3af97
L
13593 suffix[0] = p[0];
13594 suffix[1] = p[1];
13595 suffix[2] = '\0';
ea397f5b
L
13596 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
13597 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
13598 }
13599 else
13600 {
13601 /* We have a reserved extension byte. Output it directly. */
13602 scratchbuf[0] = '$';
13603 print_operand_value (scratchbuf + 1, 1, cmp_type);
13604 oappend (scratchbuf + intel_syntax);
13605 scratchbuf[0] = '\0';
13606 }
13607}
13608
ea397f5b
L
13609static const struct op pclmul_op[] =
13610{
13611 { STRING_COMMA_LEN ("lql") },
13612 { STRING_COMMA_LEN ("hql") },
13613 { STRING_COMMA_LEN ("lqh") },
13614 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
13615};
13616
13617static void
13618PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
13619 int sizeflag ATTRIBUTE_UNUSED)
13620{
13621 unsigned int pclmul_type;
13622
13623 FETCH_DATA (the_info, codep + 1);
13624 pclmul_type = *codep++ & 0xff;
13625 switch (pclmul_type)
13626 {
13627 case 0x10:
13628 pclmul_type = 2;
13629 break;
13630 case 0x11:
13631 pclmul_type = 3;
13632 break;
13633 default:
13634 break;
13635 }
13636 if (pclmul_type < ARRAY_SIZE (pclmul_op))
13637 {
13638 char suffix [4];
ea397f5b 13639 char *p = mnemonicendp - 3;
c0f3af97
L
13640 suffix[0] = p[0];
13641 suffix[1] = p[1];
13642 suffix[2] = p[2];
13643 suffix[3] = '\0';
ea397f5b
L
13644 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
13645 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
13646 }
13647 else
13648 {
13649 /* We have a reserved extension byte. Output it directly. */
13650 scratchbuf[0] = '$';
13651 print_operand_value (scratchbuf + 1, 1, pclmul_type);
13652 oappend (scratchbuf + intel_syntax);
13653 scratchbuf[0] = '\0';
13654 }
13655}
13656
f1f8f695
L
13657static void
13658MOVBE_Fixup (int bytemode, int sizeflag)
13659{
13660 /* Add proper suffix to "movbe". */
ea397f5b 13661 char *p = mnemonicendp;
f1f8f695
L
13662
13663 switch (bytemode)
13664 {
13665 case v_mode:
13666 if (intel_syntax)
ea397f5b 13667 goto skip;
f1f8f695
L
13668
13669 USED_REX (REX_W);
13670 if (sizeflag & SUFFIX_ALWAYS)
13671 {
13672 if (rex & REX_W)
13673 *p++ = 'q';
13674 else if (sizeflag & DFLAG)
13675 *p++ = 'l';
13676 else
13677 *p++ = 'w';
13678 }
13679 used_prefixes |= (prefixes & PREFIX_DATA);
13680 break;
13681 default:
13682 oappend (INTERNAL_DISASSEMBLER_ERROR);
13683 break;
13684 }
ea397f5b 13685 mnemonicendp = p;
f1f8f695
L
13686 *p = '\0';
13687
ea397f5b 13688skip:
f1f8f695
L
13689 OP_M (bytemode, sizeflag);
13690}
This page took 1.386372 seconds and 4 git commands to generate.