* ld.texinfo: Make it clear that --nmagic disables linking
[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 print_insn (bfd_vma, disassemble_info *);
46static void dofloat (int);
47static void OP_ST (int, int);
48static void OP_STi (int, int);
49static int putop (const char *, int);
50static void oappend (const char *);
51static void append_seg (void);
52static void OP_indirE (int, int);
53static void print_operand_value (char *, int, bfd_vma);
c0f3af97 54static void OP_E_register (int, int);
c1e679ec 55static void OP_E_memory (int, int);
5d669648 56static void print_displacement (char *, bfd_vma);
26ca5450
AJ
57static void OP_E (int, int);
58static void OP_G (int, int);
59static bfd_vma get64 (void);
60static bfd_signed_vma get32 (void);
61static bfd_signed_vma get32s (void);
62static int get16 (void);
63static void set_op (bfd_vma, int);
b844680a 64static void OP_Skip_MODRM (int, int);
26ca5450
AJ
65static void OP_REG (int, int);
66static void OP_IMREG (int, int);
67static void OP_I (int, int);
68static void OP_I64 (int, int);
69static void OP_sI (int, int);
70static void OP_J (int, int);
71static void OP_SEG (int, int);
72static void OP_DIR (int, int);
73static void OP_OFF (int, int);
74static void OP_OFF64 (int, int);
75static void ptr_reg (int, int);
76static void OP_ESreg (int, int);
77static void OP_DSreg (int, int);
78static void OP_C (int, int);
79static void OP_D (int, int);
80static void OP_T (int, int);
6f74c397 81static void OP_R (int, int);
26ca5450
AJ
82static void OP_MMX (int, int);
83static void OP_XMM (int, int);
84static void OP_EM (int, int);
85static void OP_EX (int, int);
4d9567e0
MM
86static void OP_EMC (int,int);
87static void OP_MXC (int,int);
26ca5450
AJ
88static void OP_MS (int, int);
89static void OP_XS (int, int);
cc0ec051 90static void OP_M (int, int);
c0f3af97
L
91static void OP_VEX (int, int);
92static void OP_EX_Vex (int, int);
922d8de8 93static void OP_EX_VexW (int, int);
c0f3af97 94static void OP_XMM_Vex (int, int);
922d8de8 95static void OP_XMM_VexW (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
922d8de8 98static void VEXI4_Fixup (int, int);
c0f3af97
L
99static void VZERO_Fixup (int, int);
100static void VCMP_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
46e883c5
L
104static void NOP_Fixup1 (int, int);
105static void NOP_Fixup2 (int, int);
26ca5450 106static void OP_3DNowSuffix (int, int);
ad19981d 107static void CMP_Fixup (int, int);
26ca5450 108static void BadOp (void);
35c52694 109static void REP_Fixup (int, int);
f5804c90 110static void CMPXCHG8B_Fixup (int, int);
42903f7f 111static void XMM_Fixup (int, int);
381d071f 112static void CRC32_Fixup (int, int);
f88c9eb0
SP
113static void OP_LWPCB_E (int, int);
114static void OP_LWP_E (int, int);
115static void OP_LWP_I (int, int);
5dd85c99
SP
116static void OP_Vex_2src_1 (int, int);
117static void OP_Vex_2src_2 (int, int);
c1e679ec 118
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
7d421014
ILT
166/* Flags for prefixes which we somehow handled when printing the
167 current instruction. */
168static int used_prefixes;
169
5076851f
ILT
170/* Flags stored in PREFIXES. */
171#define PREFIX_REPZ 1
172#define PREFIX_REPNZ 2
173#define PREFIX_LOCK 4
174#define PREFIX_CS 8
175#define PREFIX_SS 0x10
176#define PREFIX_DS 0x20
177#define PREFIX_ES 0x40
178#define PREFIX_FS 0x80
179#define PREFIX_GS 0x100
180#define PREFIX_DATA 0x200
181#define PREFIX_ADDR 0x400
182#define PREFIX_FWAIT 0x800
183
252b5132
RH
184/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
185 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
186 on error. */
187#define FETCH_DATA(info, addr) \
6608db57 188 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
189 ? 1 : fetch_data ((info), (addr)))
190
191static int
26ca5450 192fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
193{
194 int status;
6608db57 195 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
196 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
197
0b1cf022 198 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
199 status = (*info->read_memory_func) (start,
200 priv->max_fetched,
201 addr - priv->max_fetched,
202 info);
203 else
204 status = -1;
252b5132
RH
205 if (status != 0)
206 {
7d421014 207 /* If we did manage to read at least one byte, then
db6eb5be
AM
208 print_insn_i386 will do something sensible. Otherwise, print
209 an error. We do that here because this is where we know
210 STATUS. */
7d421014 211 if (priv->max_fetched == priv->the_buffer)
5076851f 212 (*info->memory_error_func) (status, start, info);
252b5132
RH
213 longjmp (priv->bailout, 1);
214 }
215 else
216 priv->max_fetched = addr;
217 return 1;
218}
219
ce518a5f
L
220#define XX { NULL, 0 }
221
222#define Eb { OP_E, b_mode }
b6169b20 223#define EbS { OP_E, b_swap_mode }
ce518a5f 224#define Ev { OP_E, v_mode }
b6169b20 225#define EvS { OP_E, v_swap_mode }
ce518a5f
L
226#define Ed { OP_E, d_mode }
227#define Edq { OP_E, dq_mode }
228#define Edqw { OP_E, dqw_mode }
42903f7f
L
229#define Edqb { OP_E, dqb_mode }
230#define Edqd { OP_E, dqd_mode }
09335d05 231#define Eq { OP_E, q_mode }
ce518a5f
L
232#define indirEv { OP_indirE, stack_v_mode }
233#define indirEp { OP_indirE, f_mode }
234#define stackEv { OP_E, stack_v_mode }
235#define Em { OP_E, m_mode }
236#define Ew { OP_E, w_mode }
237#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 238#define Ma { OP_M, a_mode }
b844680a 239#define Mb { OP_M, b_mode }
d9a5e5e5 240#define Md { OP_M, d_mode }
f1f8f695 241#define Mo { OP_M, o_mode }
ce518a5f
L
242#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
243#define Mq { OP_M, q_mode }
4ee52178 244#define Mx { OP_M, x_mode }
c0f3af97 245#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
246#define Gb { OP_G, b_mode }
247#define Gv { OP_G, v_mode }
248#define Gd { OP_G, d_mode }
249#define Gdq { OP_G, dq_mode }
250#define Gm { OP_G, m_mode }
251#define Gw { OP_G, w_mode }
6f74c397
L
252#define Rd { OP_R, d_mode }
253#define Rm { OP_R, m_mode }
ce518a5f
L
254#define Ib { OP_I, b_mode }
255#define sIb { OP_sI, b_mode } /* sign extened byte */
256#define Iv { OP_I, v_mode }
257#define Iq { OP_I, q_mode }
258#define Iv64 { OP_I64, v_mode }
259#define Iw { OP_I, w_mode }
260#define I1 { OP_I, const_1_mode }
261#define Jb { OP_J, b_mode }
262#define Jv { OP_J, v_mode }
263#define Cm { OP_C, m_mode }
264#define Dm { OP_D, m_mode }
265#define Td { OP_T, d_mode }
b844680a 266#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
267
268#define RMeAX { OP_REG, eAX_reg }
269#define RMeBX { OP_REG, eBX_reg }
270#define RMeCX { OP_REG, eCX_reg }
271#define RMeDX { OP_REG, eDX_reg }
272#define RMeSP { OP_REG, eSP_reg }
273#define RMeBP { OP_REG, eBP_reg }
274#define RMeSI { OP_REG, eSI_reg }
275#define RMeDI { OP_REG, eDI_reg }
276#define RMrAX { OP_REG, rAX_reg }
277#define RMrBX { OP_REG, rBX_reg }
278#define RMrCX { OP_REG, rCX_reg }
279#define RMrDX { OP_REG, rDX_reg }
280#define RMrSP { OP_REG, rSP_reg }
281#define RMrBP { OP_REG, rBP_reg }
282#define RMrSI { OP_REG, rSI_reg }
283#define RMrDI { OP_REG, rDI_reg }
284#define RMAL { OP_REG, al_reg }
285#define RMAL { OP_REG, al_reg }
286#define RMCL { OP_REG, cl_reg }
287#define RMDL { OP_REG, dl_reg }
288#define RMBL { OP_REG, bl_reg }
289#define RMAH { OP_REG, ah_reg }
290#define RMCH { OP_REG, ch_reg }
291#define RMDH { OP_REG, dh_reg }
292#define RMBH { OP_REG, bh_reg }
293#define RMAX { OP_REG, ax_reg }
294#define RMDX { OP_REG, dx_reg }
295
296#define eAX { OP_IMREG, eAX_reg }
297#define eBX { OP_IMREG, eBX_reg }
298#define eCX { OP_IMREG, eCX_reg }
299#define eDX { OP_IMREG, eDX_reg }
300#define eSP { OP_IMREG, eSP_reg }
301#define eBP { OP_IMREG, eBP_reg }
302#define eSI { OP_IMREG, eSI_reg }
303#define eDI { OP_IMREG, eDI_reg }
304#define AL { OP_IMREG, al_reg }
305#define CL { OP_IMREG, cl_reg }
306#define DL { OP_IMREG, dl_reg }
307#define BL { OP_IMREG, bl_reg }
308#define AH { OP_IMREG, ah_reg }
309#define CH { OP_IMREG, ch_reg }
310#define DH { OP_IMREG, dh_reg }
311#define BH { OP_IMREG, bh_reg }
312#define AX { OP_IMREG, ax_reg }
313#define DX { OP_IMREG, dx_reg }
314#define zAX { OP_IMREG, z_mode_ax_reg }
315#define indirDX { OP_IMREG, indir_dx_reg }
316
317#define Sw { OP_SEG, w_mode }
318#define Sv { OP_SEG, v_mode }
319#define Ap { OP_DIR, 0 }
320#define Ob { OP_OFF64, b_mode }
321#define Ov { OP_OFF64, v_mode }
322#define Xb { OP_DSreg, eSI_reg }
323#define Xv { OP_DSreg, eSI_reg }
324#define Xz { OP_DSreg, eSI_reg }
325#define Yb { OP_ESreg, eDI_reg }
326#define Yv { OP_ESreg, eDI_reg }
327#define DSBX { OP_DSreg, eBX_reg }
328
329#define es { OP_REG, es_reg }
330#define ss { OP_REG, ss_reg }
331#define cs { OP_REG, cs_reg }
332#define ds { OP_REG, ds_reg }
333#define fs { OP_REG, fs_reg }
334#define gs { OP_REG, gs_reg }
335
336#define MX { OP_MMX, 0 }
337#define XM { OP_XMM, 0 }
c0f3af97 338#define XMM { OP_XMM, xmm_mode }
ce518a5f 339#define EM { OP_EM, v_mode }
b6169b20 340#define EMS { OP_EM, v_swap_mode }
09a2c6cf 341#define EMd { OP_EM, d_mode }
14051056 342#define EMx { OP_EM, x_mode }
8976381e 343#define EXw { OP_EX, w_mode }
09a2c6cf 344#define EXd { OP_EX, d_mode }
fa99fab2 345#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 346#define EXq { OP_EX, q_mode }
b6169b20 347#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 348#define EXx { OP_EX, x_mode }
b6169b20 349#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
350#define EXxmm { OP_EX, xmm_mode }
351#define EXxmmq { OP_EX, xmmq_mode }
352#define EXymmq { OP_EX, ymmq_mode }
0bfee649 353#define EXVexWdq { OP_EX, vex_w_dq_mode }
ce518a5f
L
354#define MS { OP_MS, v_mode }
355#define XS { OP_XS, v_mode }
09335d05 356#define EMCq { OP_EMC, q_mode }
ce518a5f 357#define MXC { OP_MXC, 0 }
ce518a5f 358#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 359#define CMP { CMP_Fixup, 0 }
42903f7f 360#define XMM0 { XMM_Fixup, 0 }
5dd85c99
SP
361#define Vex_2src_1 { OP_Vex_2src_1, 0 }
362#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 363
c0f3af97
L
364#define Vex { OP_VEX, vex_mode }
365#define Vex128 { OP_VEX, vex128_mode }
366#define Vex256 { OP_VEX, vex256_mode }
922d8de8 367#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 368#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 369#define EXdVexS { OP_EX_Vex, d_swap_mode }
c0f3af97 370#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 371#define EXqVexS { OP_EX_Vex, q_swap_mode }
922d8de8
DR
372#define EXVexW { OP_EX_VexW, x_mode }
373#define EXdVexW { OP_EX_VexW, d_mode }
374#define EXqVexW { OP_EX_VexW, q_mode }
c0f3af97 375#define XMVex { OP_XMM_Vex, 0 }
922d8de8 376#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
377#define XMVexI4 { OP_REG_VexI4, x_mode }
378#define PCLMUL { PCLMUL_Fixup, 0 }
379#define VZERO { VZERO_Fixup, 0 }
380#define VCMP { VCMP_Fixup, 0 }
c0f3af97 381
35c52694 382/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
383#define Xbr { REP_Fixup, eSI_reg }
384#define Xvr { REP_Fixup, eSI_reg }
385#define Ybr { REP_Fixup, eDI_reg }
386#define Yvr { REP_Fixup, eDI_reg }
387#define Yzr { REP_Fixup, eDI_reg }
388#define indirDXr { REP_Fixup, indir_dx_reg }
389#define ALr { REP_Fixup, al_reg }
390#define eAXr { REP_Fixup, eAX_reg }
391
392#define cond_jump_flag { NULL, cond_jump_mode }
393#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 394
252b5132 395/* bits in sizeflag */
252b5132 396#define SUFFIX_ALWAYS 4
252b5132
RH
397#define AFLAG 2
398#define DFLAG 1
399
51e7da1b
L
400enum
401{
402 /* byte operand */
403 b_mode = 1,
404 /* byte operand with operand swapped */
3873ba12 405 b_swap_mode,
51e7da1b 406 /* operand size depends on prefixes */
3873ba12 407 v_mode,
51e7da1b 408 /* operand size depends on prefixes with operand swapped */
3873ba12 409 v_swap_mode,
51e7da1b 410 /* word operand */
3873ba12 411 w_mode,
51e7da1b 412 /* double word operand */
3873ba12 413 d_mode,
51e7da1b 414 /* double word operand with operand swapped */
3873ba12 415 d_swap_mode,
51e7da1b 416 /* quad word operand */
3873ba12 417 q_mode,
51e7da1b 418 /* quad word operand with operand swapped */
3873ba12 419 q_swap_mode,
51e7da1b 420 /* ten-byte operand */
3873ba12 421 t_mode,
51e7da1b 422 /* 16-byte XMM or 32-byte YMM operand */
3873ba12 423 x_mode,
51e7da1b 424 /* 16-byte XMM or 32-byte YMM operand with operand swapped */
3873ba12 425 x_swap_mode,
51e7da1b 426 /* 16-byte XMM operand */
3873ba12 427 xmm_mode,
51e7da1b 428 /* 16-byte XMM or quad word operand */
3873ba12 429 xmmq_mode,
51e7da1b 430 /* 32-byte YMM or quad word operand */
3873ba12 431 ymmq_mode,
51e7da1b 432 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 433 m_mode,
51e7da1b 434 /* pair of v_mode operands */
3873ba12
L
435 a_mode,
436 cond_jump_mode,
437 loop_jcxz_mode,
51e7da1b 438 /* operand size depends on REX prefixes. */
3873ba12 439 dq_mode,
51e7da1b 440 /* registers like dq_mode, memory like w_mode. */
3873ba12 441 dqw_mode,
51e7da1b 442 /* 4- or 6-byte pointer operand */
3873ba12
L
443 f_mode,
444 const_1_mode,
51e7da1b 445 /* v_mode for stack-related opcodes. */
3873ba12 446 stack_v_mode,
51e7da1b 447 /* non-quad operand size depends on prefixes */
3873ba12 448 z_mode,
51e7da1b 449 /* 16-byte operand */
3873ba12 450 o_mode,
51e7da1b 451 /* registers like dq_mode, memory like b_mode. */
3873ba12 452 dqb_mode,
51e7da1b 453 /* registers like dq_mode, memory like d_mode. */
3873ba12 454 dqd_mode,
51e7da1b 455 /* normal vex mode */
3873ba12 456 vex_mode,
51e7da1b 457 /* 128bit vex mode */
3873ba12 458 vex128_mode,
51e7da1b 459 /* 256bit vex mode */
3873ba12 460 vex256_mode,
51e7da1b 461 /* operand size depends on the VEX.W bit. */
3873ba12 462 vex_w_dq_mode,
d55ee72f 463
3873ba12
L
464 es_reg,
465 cs_reg,
466 ss_reg,
467 ds_reg,
468 fs_reg,
469 gs_reg,
d55ee72f 470
3873ba12
L
471 eAX_reg,
472 eCX_reg,
473 eDX_reg,
474 eBX_reg,
475 eSP_reg,
476 eBP_reg,
477 eSI_reg,
478 eDI_reg,
d55ee72f 479
3873ba12
L
480 al_reg,
481 cl_reg,
482 dl_reg,
483 bl_reg,
484 ah_reg,
485 ch_reg,
486 dh_reg,
487 bh_reg,
d55ee72f 488
3873ba12
L
489 ax_reg,
490 cx_reg,
491 dx_reg,
492 bx_reg,
493 sp_reg,
494 bp_reg,
495 si_reg,
496 di_reg,
d55ee72f 497
3873ba12
L
498 rAX_reg,
499 rCX_reg,
500 rDX_reg,
501 rBX_reg,
502 rSP_reg,
503 rBP_reg,
504 rSI_reg,
505 rDI_reg,
d55ee72f 506
3873ba12
L
507 z_mode_ax_reg,
508 indir_dx_reg
51e7da1b 509};
252b5132 510
51e7da1b
L
511enum
512{
513 FLOATCODE = 1,
3873ba12
L
514 USE_REG_TABLE,
515 USE_MOD_TABLE,
516 USE_RM_TABLE,
517 USE_PREFIX_TABLE,
518 USE_X86_64_TABLE,
519 USE_3BYTE_TABLE,
f88c9eb0 520 USE_XOP_8F_TABLE,
3873ba12
L
521 USE_VEX_C4_TABLE,
522 USE_VEX_C5_TABLE,
523 USE_VEX_LEN_TABLE
51e7da1b 524};
6439fc28 525
1ceb70f8 526#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 527
4e7d34a6 528#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
529#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
530#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
531#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
532#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
533#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
534#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 535#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
536#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
537#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
538#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
1ceb70f8 539
51e7da1b
L
540enum
541{
542 REG_80 = 0,
3873ba12
L
543 REG_81,
544 REG_82,
545 REG_8F,
546 REG_C0,
547 REG_C1,
548 REG_C6,
549 REG_C7,
550 REG_D0,
551 REG_D1,
552 REG_D2,
553 REG_D3,
554 REG_F6,
555 REG_F7,
556 REG_FE,
557 REG_FF,
558 REG_0F00,
559 REG_0F01,
560 REG_0F0D,
561 REG_0F18,
562 REG_0F71,
563 REG_0F72,
564 REG_0F73,
565 REG_0FA6,
566 REG_0FA7,
567 REG_0FAE,
568 REG_0FBA,
569 REG_0FC7,
570 REG_VEX_71,
571 REG_VEX_72,
572 REG_VEX_73,
f88c9eb0
SP
573 REG_VEX_AE,
574 REG_XOP_LWPCB,
575 REG_XOP_LWP
51e7da1b 576};
1ceb70f8 577
51e7da1b
L
578enum
579{
580 MOD_8D = 0,
3873ba12
L
581 MOD_0F01_REG_0,
582 MOD_0F01_REG_1,
583 MOD_0F01_REG_2,
584 MOD_0F01_REG_3,
585 MOD_0F01_REG_7,
586 MOD_0F12_PREFIX_0,
587 MOD_0F13,
588 MOD_0F16_PREFIX_0,
589 MOD_0F17,
590 MOD_0F18_REG_0,
591 MOD_0F18_REG_1,
592 MOD_0F18_REG_2,
593 MOD_0F18_REG_3,
594 MOD_0F20,
595 MOD_0F21,
596 MOD_0F22,
597 MOD_0F23,
598 MOD_0F24,
599 MOD_0F26,
600 MOD_0F2B_PREFIX_0,
601 MOD_0F2B_PREFIX_1,
602 MOD_0F2B_PREFIX_2,
603 MOD_0F2B_PREFIX_3,
604 MOD_0F51,
605 MOD_0F71_REG_2,
606 MOD_0F71_REG_4,
607 MOD_0F71_REG_6,
608 MOD_0F72_REG_2,
609 MOD_0F72_REG_4,
610 MOD_0F72_REG_6,
611 MOD_0F73_REG_2,
612 MOD_0F73_REG_3,
613 MOD_0F73_REG_6,
614 MOD_0F73_REG_7,
615 MOD_0FAE_REG_0,
616 MOD_0FAE_REG_1,
617 MOD_0FAE_REG_2,
618 MOD_0FAE_REG_3,
619 MOD_0FAE_REG_4,
620 MOD_0FAE_REG_5,
621 MOD_0FAE_REG_6,
622 MOD_0FAE_REG_7,
623 MOD_0FB2,
624 MOD_0FB4,
625 MOD_0FB5,
626 MOD_0FC7_REG_6,
627 MOD_0FC7_REG_7,
628 MOD_0FD7,
629 MOD_0FE7_PREFIX_2,
630 MOD_0FF0_PREFIX_3,
631 MOD_0F382A_PREFIX_2,
632 MOD_62_32BIT,
633 MOD_C4_32BIT,
634 MOD_C5_32BIT,
635 MOD_VEX_12_PREFIX_0,
636 MOD_VEX_13,
637 MOD_VEX_16_PREFIX_0,
638 MOD_VEX_17,
639 MOD_VEX_2B,
640 MOD_VEX_51,
641 MOD_VEX_71_REG_2,
642 MOD_VEX_71_REG_4,
643 MOD_VEX_71_REG_6,
644 MOD_VEX_72_REG_2,
645 MOD_VEX_72_REG_4,
646 MOD_VEX_72_REG_6,
647 MOD_VEX_73_REG_2,
648 MOD_VEX_73_REG_3,
649 MOD_VEX_73_REG_6,
650 MOD_VEX_73_REG_7,
651 MOD_VEX_AE_REG_2,
652 MOD_VEX_AE_REG_3,
653 MOD_VEX_D7_PREFIX_2,
654 MOD_VEX_E7_PREFIX_2,
655 MOD_VEX_F0_PREFIX_3,
656 MOD_VEX_3818_PREFIX_2,
657 MOD_VEX_3819_PREFIX_2,
658 MOD_VEX_381A_PREFIX_2,
659 MOD_VEX_382A_PREFIX_2,
660 MOD_VEX_382C_PREFIX_2,
661 MOD_VEX_382D_PREFIX_2,
662 MOD_VEX_382E_PREFIX_2,
663 MOD_VEX_382F_PREFIX_2
51e7da1b 664};
1ceb70f8 665
51e7da1b
L
666enum
667{
668 RM_0F01_REG_0 = 0,
3873ba12
L
669 RM_0F01_REG_1,
670 RM_0F01_REG_2,
671 RM_0F01_REG_3,
672 RM_0F01_REG_7,
673 RM_0FAE_REG_5,
674 RM_0FAE_REG_6,
675 RM_0FAE_REG_7
51e7da1b 676};
1ceb70f8 677
51e7da1b
L
678enum
679{
680 PREFIX_90 = 0,
3873ba12
L
681 PREFIX_0F10,
682 PREFIX_0F11,
683 PREFIX_0F12,
684 PREFIX_0F16,
685 PREFIX_0F2A,
686 PREFIX_0F2B,
687 PREFIX_0F2C,
688 PREFIX_0F2D,
689 PREFIX_0F2E,
690 PREFIX_0F2F,
691 PREFIX_0F51,
692 PREFIX_0F52,
693 PREFIX_0F53,
694 PREFIX_0F58,
695 PREFIX_0F59,
696 PREFIX_0F5A,
697 PREFIX_0F5B,
698 PREFIX_0F5C,
699 PREFIX_0F5D,
700 PREFIX_0F5E,
701 PREFIX_0F5F,
702 PREFIX_0F60,
703 PREFIX_0F61,
704 PREFIX_0F62,
705 PREFIX_0F6C,
706 PREFIX_0F6D,
707 PREFIX_0F6F,
708 PREFIX_0F70,
709 PREFIX_0F73_REG_3,
710 PREFIX_0F73_REG_7,
711 PREFIX_0F78,
712 PREFIX_0F79,
713 PREFIX_0F7C,
714 PREFIX_0F7D,
715 PREFIX_0F7E,
716 PREFIX_0F7F,
717 PREFIX_0FB8,
718 PREFIX_0FBD,
719 PREFIX_0FC2,
720 PREFIX_0FC3,
721 PREFIX_0FC7_REG_6,
722 PREFIX_0FD0,
723 PREFIX_0FD6,
724 PREFIX_0FE6,
725 PREFIX_0FE7,
726 PREFIX_0FF0,
727 PREFIX_0FF7,
728 PREFIX_0F3810,
729 PREFIX_0F3814,
730 PREFIX_0F3815,
731 PREFIX_0F3817,
732 PREFIX_0F3820,
733 PREFIX_0F3821,
734 PREFIX_0F3822,
735 PREFIX_0F3823,
736 PREFIX_0F3824,
737 PREFIX_0F3825,
738 PREFIX_0F3828,
739 PREFIX_0F3829,
740 PREFIX_0F382A,
741 PREFIX_0F382B,
742 PREFIX_0F3830,
743 PREFIX_0F3831,
744 PREFIX_0F3832,
745 PREFIX_0F3833,
746 PREFIX_0F3834,
747 PREFIX_0F3835,
748 PREFIX_0F3837,
749 PREFIX_0F3838,
750 PREFIX_0F3839,
751 PREFIX_0F383A,
752 PREFIX_0F383B,
753 PREFIX_0F383C,
754 PREFIX_0F383D,
755 PREFIX_0F383E,
756 PREFIX_0F383F,
757 PREFIX_0F3840,
758 PREFIX_0F3841,
759 PREFIX_0F3880,
760 PREFIX_0F3881,
761 PREFIX_0F38DB,
762 PREFIX_0F38DC,
763 PREFIX_0F38DD,
764 PREFIX_0F38DE,
765 PREFIX_0F38DF,
766 PREFIX_0F38F0,
767 PREFIX_0F38F1,
768 PREFIX_0F3A08,
769 PREFIX_0F3A09,
770 PREFIX_0F3A0A,
771 PREFIX_0F3A0B,
772 PREFIX_0F3A0C,
773 PREFIX_0F3A0D,
774 PREFIX_0F3A0E,
775 PREFIX_0F3A14,
776 PREFIX_0F3A15,
777 PREFIX_0F3A16,
778 PREFIX_0F3A17,
779 PREFIX_0F3A20,
780 PREFIX_0F3A21,
781 PREFIX_0F3A22,
782 PREFIX_0F3A40,
783 PREFIX_0F3A41,
784 PREFIX_0F3A42,
785 PREFIX_0F3A44,
786 PREFIX_0F3A60,
787 PREFIX_0F3A61,
788 PREFIX_0F3A62,
789 PREFIX_0F3A63,
790 PREFIX_0F3ADF,
791 PREFIX_VEX_10,
792 PREFIX_VEX_11,
793 PREFIX_VEX_12,
794 PREFIX_VEX_16,
795 PREFIX_VEX_2A,
796 PREFIX_VEX_2C,
797 PREFIX_VEX_2D,
798 PREFIX_VEX_2E,
799 PREFIX_VEX_2F,
800 PREFIX_VEX_51,
801 PREFIX_VEX_52,
802 PREFIX_VEX_53,
803 PREFIX_VEX_58,
804 PREFIX_VEX_59,
805 PREFIX_VEX_5A,
806 PREFIX_VEX_5B,
807 PREFIX_VEX_5C,
808 PREFIX_VEX_5D,
809 PREFIX_VEX_5E,
810 PREFIX_VEX_5F,
811 PREFIX_VEX_60,
812 PREFIX_VEX_61,
813 PREFIX_VEX_62,
814 PREFIX_VEX_63,
815 PREFIX_VEX_64,
816 PREFIX_VEX_65,
817 PREFIX_VEX_66,
818 PREFIX_VEX_67,
819 PREFIX_VEX_68,
820 PREFIX_VEX_69,
821 PREFIX_VEX_6A,
822 PREFIX_VEX_6B,
823 PREFIX_VEX_6C,
824 PREFIX_VEX_6D,
825 PREFIX_VEX_6E,
826 PREFIX_VEX_6F,
827 PREFIX_VEX_70,
828 PREFIX_VEX_71_REG_2,
829 PREFIX_VEX_71_REG_4,
830 PREFIX_VEX_71_REG_6,
831 PREFIX_VEX_72_REG_2,
832 PREFIX_VEX_72_REG_4,
833 PREFIX_VEX_72_REG_6,
834 PREFIX_VEX_73_REG_2,
835 PREFIX_VEX_73_REG_3,
836 PREFIX_VEX_73_REG_6,
837 PREFIX_VEX_73_REG_7,
838 PREFIX_VEX_74,
839 PREFIX_VEX_75,
840 PREFIX_VEX_76,
841 PREFIX_VEX_77,
842 PREFIX_VEX_7C,
843 PREFIX_VEX_7D,
844 PREFIX_VEX_7E,
845 PREFIX_VEX_7F,
846 PREFIX_VEX_C2,
847 PREFIX_VEX_C4,
848 PREFIX_VEX_C5,
849 PREFIX_VEX_D0,
850 PREFIX_VEX_D1,
851 PREFIX_VEX_D2,
852 PREFIX_VEX_D3,
853 PREFIX_VEX_D4,
854 PREFIX_VEX_D5,
855 PREFIX_VEX_D6,
856 PREFIX_VEX_D7,
857 PREFIX_VEX_D8,
858 PREFIX_VEX_D9,
859 PREFIX_VEX_DA,
860 PREFIX_VEX_DB,
861 PREFIX_VEX_DC,
862 PREFIX_VEX_DD,
863 PREFIX_VEX_DE,
864 PREFIX_VEX_DF,
865 PREFIX_VEX_E0,
866 PREFIX_VEX_E1,
867 PREFIX_VEX_E2,
868 PREFIX_VEX_E3,
869 PREFIX_VEX_E4,
870 PREFIX_VEX_E5,
871 PREFIX_VEX_E6,
872 PREFIX_VEX_E7,
873 PREFIX_VEX_E8,
874 PREFIX_VEX_E9,
875 PREFIX_VEX_EA,
876 PREFIX_VEX_EB,
877 PREFIX_VEX_EC,
878 PREFIX_VEX_ED,
879 PREFIX_VEX_EE,
880 PREFIX_VEX_EF,
881 PREFIX_VEX_F0,
882 PREFIX_VEX_F1,
883 PREFIX_VEX_F2,
884 PREFIX_VEX_F3,
885 PREFIX_VEX_F4,
886 PREFIX_VEX_F5,
887 PREFIX_VEX_F6,
888 PREFIX_VEX_F7,
889 PREFIX_VEX_F8,
890 PREFIX_VEX_F9,
891 PREFIX_VEX_FA,
892 PREFIX_VEX_FB,
893 PREFIX_VEX_FC,
894 PREFIX_VEX_FD,
895 PREFIX_VEX_FE,
896 PREFIX_VEX_3800,
897 PREFIX_VEX_3801,
898 PREFIX_VEX_3802,
899 PREFIX_VEX_3803,
900 PREFIX_VEX_3804,
901 PREFIX_VEX_3805,
902 PREFIX_VEX_3806,
903 PREFIX_VEX_3807,
904 PREFIX_VEX_3808,
905 PREFIX_VEX_3809,
906 PREFIX_VEX_380A,
907 PREFIX_VEX_380B,
908 PREFIX_VEX_380C,
909 PREFIX_VEX_380D,
910 PREFIX_VEX_380E,
911 PREFIX_VEX_380F,
912 PREFIX_VEX_3817,
913 PREFIX_VEX_3818,
914 PREFIX_VEX_3819,
915 PREFIX_VEX_381A,
916 PREFIX_VEX_381C,
917 PREFIX_VEX_381D,
918 PREFIX_VEX_381E,
919 PREFIX_VEX_3820,
920 PREFIX_VEX_3821,
921 PREFIX_VEX_3822,
922 PREFIX_VEX_3823,
923 PREFIX_VEX_3824,
924 PREFIX_VEX_3825,
925 PREFIX_VEX_3828,
926 PREFIX_VEX_3829,
927 PREFIX_VEX_382A,
928 PREFIX_VEX_382B,
929 PREFIX_VEX_382C,
930 PREFIX_VEX_382D,
931 PREFIX_VEX_382E,
932 PREFIX_VEX_382F,
933 PREFIX_VEX_3830,
934 PREFIX_VEX_3831,
935 PREFIX_VEX_3832,
936 PREFIX_VEX_3833,
937 PREFIX_VEX_3834,
938 PREFIX_VEX_3835,
939 PREFIX_VEX_3837,
940 PREFIX_VEX_3838,
941 PREFIX_VEX_3839,
942 PREFIX_VEX_383A,
943 PREFIX_VEX_383B,
944 PREFIX_VEX_383C,
945 PREFIX_VEX_383D,
946 PREFIX_VEX_383E,
947 PREFIX_VEX_383F,
948 PREFIX_VEX_3840,
949 PREFIX_VEX_3841,
950 PREFIX_VEX_3896,
951 PREFIX_VEX_3897,
952 PREFIX_VEX_3898,
953 PREFIX_VEX_3899,
954 PREFIX_VEX_389A,
955 PREFIX_VEX_389B,
956 PREFIX_VEX_389C,
957 PREFIX_VEX_389D,
958 PREFIX_VEX_389E,
959 PREFIX_VEX_389F,
960 PREFIX_VEX_38A6,
961 PREFIX_VEX_38A7,
962 PREFIX_VEX_38A8,
963 PREFIX_VEX_38A9,
964 PREFIX_VEX_38AA,
965 PREFIX_VEX_38AB,
966 PREFIX_VEX_38AC,
967 PREFIX_VEX_38AD,
968 PREFIX_VEX_38AE,
969 PREFIX_VEX_38AF,
970 PREFIX_VEX_38B6,
971 PREFIX_VEX_38B7,
972 PREFIX_VEX_38B8,
973 PREFIX_VEX_38B9,
974 PREFIX_VEX_38BA,
975 PREFIX_VEX_38BB,
976 PREFIX_VEX_38BC,
977 PREFIX_VEX_38BD,
978 PREFIX_VEX_38BE,
979 PREFIX_VEX_38BF,
980 PREFIX_VEX_38DB,
981 PREFIX_VEX_38DC,
982 PREFIX_VEX_38DD,
983 PREFIX_VEX_38DE,
984 PREFIX_VEX_38DF,
985 PREFIX_VEX_3A04,
986 PREFIX_VEX_3A05,
987 PREFIX_VEX_3A06,
988 PREFIX_VEX_3A08,
989 PREFIX_VEX_3A09,
990 PREFIX_VEX_3A0A,
991 PREFIX_VEX_3A0B,
992 PREFIX_VEX_3A0C,
993 PREFIX_VEX_3A0D,
994 PREFIX_VEX_3A0E,
995 PREFIX_VEX_3A0F,
996 PREFIX_VEX_3A14,
997 PREFIX_VEX_3A15,
998 PREFIX_VEX_3A16,
999 PREFIX_VEX_3A17,
1000 PREFIX_VEX_3A18,
1001 PREFIX_VEX_3A19,
1002 PREFIX_VEX_3A20,
1003 PREFIX_VEX_3A21,
1004 PREFIX_VEX_3A22,
1005 PREFIX_VEX_3A40,
1006 PREFIX_VEX_3A41,
1007 PREFIX_VEX_3A42,
1008 PREFIX_VEX_3A44,
1009 PREFIX_VEX_3A4A,
1010 PREFIX_VEX_3A4B,
1011 PREFIX_VEX_3A4C,
1012 PREFIX_VEX_3A5C,
1013 PREFIX_VEX_3A5D,
1014 PREFIX_VEX_3A5E,
1015 PREFIX_VEX_3A5F,
1016 PREFIX_VEX_3A60,
1017 PREFIX_VEX_3A61,
1018 PREFIX_VEX_3A62,
1019 PREFIX_VEX_3A63,
1020 PREFIX_VEX_3A68,
1021 PREFIX_VEX_3A69,
1022 PREFIX_VEX_3A6A,
1023 PREFIX_VEX_3A6B,
1024 PREFIX_VEX_3A6C,
1025 PREFIX_VEX_3A6D,
1026 PREFIX_VEX_3A6E,
1027 PREFIX_VEX_3A6F,
1028 PREFIX_VEX_3A78,
1029 PREFIX_VEX_3A79,
1030 PREFIX_VEX_3A7A,
1031 PREFIX_VEX_3A7B,
1032 PREFIX_VEX_3A7C,
1033 PREFIX_VEX_3A7D,
1034 PREFIX_VEX_3A7E,
1035 PREFIX_VEX_3A7F,
1036 PREFIX_VEX_3ADF
51e7da1b 1037};
4e7d34a6 1038
51e7da1b
L
1039enum
1040{
1041 X86_64_06 = 0,
3873ba12
L
1042 X86_64_07,
1043 X86_64_0D,
1044 X86_64_16,
1045 X86_64_17,
1046 X86_64_1E,
1047 X86_64_1F,
1048 X86_64_27,
1049 X86_64_2F,
1050 X86_64_37,
1051 X86_64_3F,
1052 X86_64_60,
1053 X86_64_61,
1054 X86_64_62,
1055 X86_64_63,
1056 X86_64_6D,
1057 X86_64_6F,
1058 X86_64_9A,
1059 X86_64_C4,
1060 X86_64_C5,
1061 X86_64_CE,
1062 X86_64_D4,
1063 X86_64_D5,
1064 X86_64_EA,
1065 X86_64_0F01_REG_0,
1066 X86_64_0F01_REG_1,
1067 X86_64_0F01_REG_2,
1068 X86_64_0F01_REG_3
51e7da1b 1069};
4e7d34a6 1070
51e7da1b
L
1071enum
1072{
1073 THREE_BYTE_0F38 = 0,
3873ba12
L
1074 THREE_BYTE_0F3A,
1075 THREE_BYTE_0F7A
51e7da1b 1076};
4e7d34a6 1077
f88c9eb0
SP
1078enum
1079{
5dd85c99
SP
1080 XOP_08 = 0,
1081 XOP_09,
f88c9eb0
SP
1082 XOP_0A
1083};
1084
51e7da1b
L
1085enum
1086{
1087 VEX_0F = 0,
3873ba12
L
1088 VEX_0F38,
1089 VEX_0F3A
51e7da1b 1090};
c0f3af97 1091
51e7da1b
L
1092enum
1093{
1094 VEX_LEN_10_P_1 = 0,
3873ba12
L
1095 VEX_LEN_10_P_3,
1096 VEX_LEN_11_P_1,
1097 VEX_LEN_11_P_3,
1098 VEX_LEN_12_P_0_M_0,
1099 VEX_LEN_12_P_0_M_1,
1100 VEX_LEN_12_P_2,
1101 VEX_LEN_13_M_0,
1102 VEX_LEN_16_P_0_M_0,
1103 VEX_LEN_16_P_0_M_1,
1104 VEX_LEN_16_P_2,
1105 VEX_LEN_17_M_0,
1106 VEX_LEN_2A_P_1,
1107 VEX_LEN_2A_P_3,
1108 VEX_LEN_2C_P_1,
1109 VEX_LEN_2C_P_3,
1110 VEX_LEN_2D_P_1,
1111 VEX_LEN_2D_P_3,
1112 VEX_LEN_2E_P_0,
1113 VEX_LEN_2E_P_2,
1114 VEX_LEN_2F_P_0,
1115 VEX_LEN_2F_P_2,
1116 VEX_LEN_51_P_1,
1117 VEX_LEN_51_P_3,
1118 VEX_LEN_52_P_1,
1119 VEX_LEN_53_P_1,
1120 VEX_LEN_58_P_1,
1121 VEX_LEN_58_P_3,
1122 VEX_LEN_59_P_1,
1123 VEX_LEN_59_P_3,
1124 VEX_LEN_5A_P_1,
1125 VEX_LEN_5A_P_3,
1126 VEX_LEN_5C_P_1,
1127 VEX_LEN_5C_P_3,
1128 VEX_LEN_5D_P_1,
1129 VEX_LEN_5D_P_3,
1130 VEX_LEN_5E_P_1,
1131 VEX_LEN_5E_P_3,
1132 VEX_LEN_5F_P_1,
1133 VEX_LEN_5F_P_3,
1134 VEX_LEN_60_P_2,
1135 VEX_LEN_61_P_2,
1136 VEX_LEN_62_P_2,
1137 VEX_LEN_63_P_2,
1138 VEX_LEN_64_P_2,
1139 VEX_LEN_65_P_2,
1140 VEX_LEN_66_P_2,
1141 VEX_LEN_67_P_2,
1142 VEX_LEN_68_P_2,
1143 VEX_LEN_69_P_2,
1144 VEX_LEN_6A_P_2,
1145 VEX_LEN_6B_P_2,
1146 VEX_LEN_6C_P_2,
1147 VEX_LEN_6D_P_2,
1148 VEX_LEN_6E_P_2,
1149 VEX_LEN_70_P_1,
1150 VEX_LEN_70_P_2,
1151 VEX_LEN_70_P_3,
1152 VEX_LEN_71_R_2_P_2,
1153 VEX_LEN_71_R_4_P_2,
1154 VEX_LEN_71_R_6_P_2,
1155 VEX_LEN_72_R_2_P_2,
1156 VEX_LEN_72_R_4_P_2,
1157 VEX_LEN_72_R_6_P_2,
1158 VEX_LEN_73_R_2_P_2,
1159 VEX_LEN_73_R_3_P_2,
1160 VEX_LEN_73_R_6_P_2,
1161 VEX_LEN_73_R_7_P_2,
1162 VEX_LEN_74_P_2,
1163 VEX_LEN_75_P_2,
1164 VEX_LEN_76_P_2,
1165 VEX_LEN_7E_P_1,
1166 VEX_LEN_7E_P_2,
1167 VEX_LEN_AE_R_2_M_0,
1168 VEX_LEN_AE_R_3_M_0,
1169 VEX_LEN_C2_P_1,
1170 VEX_LEN_C2_P_3,
1171 VEX_LEN_C4_P_2,
1172 VEX_LEN_C5_P_2,
1173 VEX_LEN_D1_P_2,
1174 VEX_LEN_D2_P_2,
1175 VEX_LEN_D3_P_2,
1176 VEX_LEN_D4_P_2,
1177 VEX_LEN_D5_P_2,
1178 VEX_LEN_D6_P_2,
1179 VEX_LEN_D7_P_2_M_1,
1180 VEX_LEN_D8_P_2,
1181 VEX_LEN_D9_P_2,
1182 VEX_LEN_DA_P_2,
1183 VEX_LEN_DB_P_2,
1184 VEX_LEN_DC_P_2,
1185 VEX_LEN_DD_P_2,
1186 VEX_LEN_DE_P_2,
1187 VEX_LEN_DF_P_2,
1188 VEX_LEN_E0_P_2,
1189 VEX_LEN_E1_P_2,
1190 VEX_LEN_E2_P_2,
1191 VEX_LEN_E3_P_2,
1192 VEX_LEN_E4_P_2,
1193 VEX_LEN_E5_P_2,
1194 VEX_LEN_E8_P_2,
1195 VEX_LEN_E9_P_2,
1196 VEX_LEN_EA_P_2,
1197 VEX_LEN_EB_P_2,
1198 VEX_LEN_EC_P_2,
1199 VEX_LEN_ED_P_2,
1200 VEX_LEN_EE_P_2,
1201 VEX_LEN_EF_P_2,
1202 VEX_LEN_F1_P_2,
1203 VEX_LEN_F2_P_2,
1204 VEX_LEN_F3_P_2,
1205 VEX_LEN_F4_P_2,
1206 VEX_LEN_F5_P_2,
1207 VEX_LEN_F6_P_2,
1208 VEX_LEN_F7_P_2,
1209 VEX_LEN_F8_P_2,
1210 VEX_LEN_F9_P_2,
1211 VEX_LEN_FA_P_2,
1212 VEX_LEN_FB_P_2,
1213 VEX_LEN_FC_P_2,
1214 VEX_LEN_FD_P_2,
1215 VEX_LEN_FE_P_2,
1216 VEX_LEN_3800_P_2,
1217 VEX_LEN_3801_P_2,
1218 VEX_LEN_3802_P_2,
1219 VEX_LEN_3803_P_2,
1220 VEX_LEN_3804_P_2,
1221 VEX_LEN_3805_P_2,
1222 VEX_LEN_3806_P_2,
1223 VEX_LEN_3807_P_2,
1224 VEX_LEN_3808_P_2,
1225 VEX_LEN_3809_P_2,
1226 VEX_LEN_380A_P_2,
1227 VEX_LEN_380B_P_2,
1228 VEX_LEN_3819_P_2_M_0,
1229 VEX_LEN_381A_P_2_M_0,
1230 VEX_LEN_381C_P_2,
1231 VEX_LEN_381D_P_2,
1232 VEX_LEN_381E_P_2,
1233 VEX_LEN_3820_P_2,
1234 VEX_LEN_3821_P_2,
1235 VEX_LEN_3822_P_2,
1236 VEX_LEN_3823_P_2,
1237 VEX_LEN_3824_P_2,
1238 VEX_LEN_3825_P_2,
1239 VEX_LEN_3828_P_2,
1240 VEX_LEN_3829_P_2,
1241 VEX_LEN_382A_P_2_M_0,
1242 VEX_LEN_382B_P_2,
1243 VEX_LEN_3830_P_2,
1244 VEX_LEN_3831_P_2,
1245 VEX_LEN_3832_P_2,
1246 VEX_LEN_3833_P_2,
1247 VEX_LEN_3834_P_2,
1248 VEX_LEN_3835_P_2,
1249 VEX_LEN_3837_P_2,
1250 VEX_LEN_3838_P_2,
1251 VEX_LEN_3839_P_2,
1252 VEX_LEN_383A_P_2,
1253 VEX_LEN_383B_P_2,
1254 VEX_LEN_383C_P_2,
1255 VEX_LEN_383D_P_2,
1256 VEX_LEN_383E_P_2,
1257 VEX_LEN_383F_P_2,
1258 VEX_LEN_3840_P_2,
1259 VEX_LEN_3841_P_2,
1260 VEX_LEN_38DB_P_2,
1261 VEX_LEN_38DC_P_2,
1262 VEX_LEN_38DD_P_2,
1263 VEX_LEN_38DE_P_2,
1264 VEX_LEN_38DF_P_2,
1265 VEX_LEN_3A06_P_2,
1266 VEX_LEN_3A0A_P_2,
1267 VEX_LEN_3A0B_P_2,
1268 VEX_LEN_3A0E_P_2,
1269 VEX_LEN_3A0F_P_2,
1270 VEX_LEN_3A14_P_2,
1271 VEX_LEN_3A15_P_2,
1272 VEX_LEN_3A16_P_2,
1273 VEX_LEN_3A17_P_2,
1274 VEX_LEN_3A18_P_2,
1275 VEX_LEN_3A19_P_2,
1276 VEX_LEN_3A20_P_2,
1277 VEX_LEN_3A21_P_2,
1278 VEX_LEN_3A22_P_2,
1279 VEX_LEN_3A41_P_2,
1280 VEX_LEN_3A42_P_2,
1281 VEX_LEN_3A44_P_2,
1282 VEX_LEN_3A4C_P_2,
1283 VEX_LEN_3A60_P_2,
1284 VEX_LEN_3A61_P_2,
1285 VEX_LEN_3A62_P_2,
1286 VEX_LEN_3A63_P_2,
1287 VEX_LEN_3A6A_P_2,
1288 VEX_LEN_3A6B_P_2,
1289 VEX_LEN_3A6E_P_2,
1290 VEX_LEN_3A6F_P_2,
1291 VEX_LEN_3A7A_P_2,
1292 VEX_LEN_3A7B_P_2,
1293 VEX_LEN_3A7E_P_2,
1294 VEX_LEN_3A7F_P_2,
5dd85c99 1295 VEX_LEN_3ADF_P_2,
5dd85c99
SP
1296 VEX_LEN_XOP_09_80,
1297 VEX_LEN_XOP_09_81
51e7da1b 1298};
c0f3af97 1299
26ca5450 1300typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1301
1302struct dis386 {
2da11e11 1303 const char *name;
ce518a5f
L
1304 struct
1305 {
1306 op_rtn rtn;
1307 int bytemode;
1308 } op[MAX_OPERANDS];
252b5132
RH
1309};
1310
1311/* Upper case letters in the instruction names here are macros.
1312 'A' => print 'b' if no register operands or suffix_always is true
1313 'B' => print 'b' if suffix_always is true
9306ca4a 1314 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1315 size prefix
ed7841b3 1316 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1317 suffix_always is true
252b5132 1318 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1319 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1320 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1321 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1322 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1323 for some of the macro letters)
9306ca4a 1324 'J' => print 'l'
42903f7f 1325 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1326 'L' => print 'l' if suffix_always is true
9d141669 1327 'M' => print 'r' if intel_mnemonic is false.
252b5132 1328 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1329 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1330 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1331 or suffix_always is true. print 'q' if rex prefix is present.
1332 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1333 is true
a35ca55a 1334 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1335 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1336 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1337 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1338 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1339 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1340 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1341 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1342 suffix_always is true.
6dd5059a 1343 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1344 '!' => change condition from true to false or from false to true.
98b528ac
L
1345 '%' => add 1 upper case letter to the macro.
1346
1347 2 upper case letter macros:
c0f3af97
L
1348 "XY" => print 'x' or 'y' if no register operands or suffix_always
1349 is true.
4b06377f
L
1350 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1351 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1352 or suffix_always is true
4b06377f
L
1353 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1354 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1355 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
52b15da3 1356
6439fc28
AM
1357 Many of the above letters print nothing in Intel mode. See "putop"
1358 for the details.
52b15da3 1359
6439fc28 1360 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1361 mnemonic strings for AT&T and Intel. */
252b5132 1362
6439fc28 1363static const struct dis386 dis386[] = {
252b5132 1364 /* 00 */
ce518a5f
L
1365 { "addB", { Eb, Gb } },
1366 { "addS", { Ev, Gv } },
c7532693
L
1367 { "addB", { Gb, EbS } },
1368 { "addS", { Gv, EvS } },
ce518a5f
L
1369 { "addB", { AL, Ib } },
1370 { "addS", { eAX, Iv } },
4e7d34a6
L
1371 { X86_64_TABLE (X86_64_06) },
1372 { X86_64_TABLE (X86_64_07) },
252b5132 1373 /* 08 */
ce518a5f
L
1374 { "orB", { Eb, Gb } },
1375 { "orS", { Ev, Gv } },
c7532693
L
1376 { "orB", { Gb, EbS } },
1377 { "orS", { Gv, EvS } },
ce518a5f
L
1378 { "orB", { AL, Ib } },
1379 { "orS", { eAX, Iv } },
4e7d34a6 1380 { X86_64_TABLE (X86_64_0D) },
ce518a5f 1381 { "(bad)", { XX } }, /* 0x0f extended opcode escape */
252b5132 1382 /* 10 */
ce518a5f
L
1383 { "adcB", { Eb, Gb } },
1384 { "adcS", { Ev, Gv } },
c7532693
L
1385 { "adcB", { Gb, EbS } },
1386 { "adcS", { Gv, EvS } },
ce518a5f
L
1387 { "adcB", { AL, Ib } },
1388 { "adcS", { eAX, Iv } },
4e7d34a6
L
1389 { X86_64_TABLE (X86_64_16) },
1390 { X86_64_TABLE (X86_64_17) },
252b5132 1391 /* 18 */
ce518a5f
L
1392 { "sbbB", { Eb, Gb } },
1393 { "sbbS", { Ev, Gv } },
c7532693
L
1394 { "sbbB", { Gb, EbS } },
1395 { "sbbS", { Gv, EvS } },
ce518a5f
L
1396 { "sbbB", { AL, Ib } },
1397 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1398 { X86_64_TABLE (X86_64_1E) },
1399 { X86_64_TABLE (X86_64_1F) },
252b5132 1400 /* 20 */
ce518a5f
L
1401 { "andB", { Eb, Gb } },
1402 { "andS", { Ev, Gv } },
c7532693
L
1403 { "andB", { Gb, EbS } },
1404 { "andS", { Gv, EvS } },
ce518a5f
L
1405 { "andB", { AL, Ib } },
1406 { "andS", { eAX, Iv } },
1407 { "(bad)", { XX } }, /* SEG ES prefix */
4e7d34a6 1408 { X86_64_TABLE (X86_64_27) },
252b5132 1409 /* 28 */
ce518a5f
L
1410 { "subB", { Eb, Gb } },
1411 { "subS", { Ev, Gv } },
c7532693
L
1412 { "subB", { Gb, EbS } },
1413 { "subS", { Gv, EvS } },
ce518a5f
L
1414 { "subB", { AL, Ib } },
1415 { "subS", { eAX, Iv } },
1416 { "(bad)", { XX } }, /* SEG CS prefix */
4e7d34a6 1417 { X86_64_TABLE (X86_64_2F) },
252b5132 1418 /* 30 */
ce518a5f
L
1419 { "xorB", { Eb, Gb } },
1420 { "xorS", { Ev, Gv } },
c7532693
L
1421 { "xorB", { Gb, EbS } },
1422 { "xorS", { Gv, EvS } },
ce518a5f
L
1423 { "xorB", { AL, Ib } },
1424 { "xorS", { eAX, Iv } },
1425 { "(bad)", { XX } }, /* SEG SS prefix */
4e7d34a6 1426 { X86_64_TABLE (X86_64_37) },
252b5132 1427 /* 38 */
ce518a5f
L
1428 { "cmpB", { Eb, Gb } },
1429 { "cmpS", { Ev, Gv } },
c7532693
L
1430 { "cmpB", { Gb, EbS } },
1431 { "cmpS", { Gv, EvS } },
ce518a5f
L
1432 { "cmpB", { AL, Ib } },
1433 { "cmpS", { eAX, Iv } },
1434 { "(bad)", { XX } }, /* SEG DS prefix */
4e7d34a6 1435 { X86_64_TABLE (X86_64_3F) },
252b5132 1436 /* 40 */
ce518a5f
L
1437 { "inc{S|}", { RMeAX } },
1438 { "inc{S|}", { RMeCX } },
1439 { "inc{S|}", { RMeDX } },
1440 { "inc{S|}", { RMeBX } },
1441 { "inc{S|}", { RMeSP } },
1442 { "inc{S|}", { RMeBP } },
1443 { "inc{S|}", { RMeSI } },
1444 { "inc{S|}", { RMeDI } },
252b5132 1445 /* 48 */
ce518a5f
L
1446 { "dec{S|}", { RMeAX } },
1447 { "dec{S|}", { RMeCX } },
1448 { "dec{S|}", { RMeDX } },
1449 { "dec{S|}", { RMeBX } },
1450 { "dec{S|}", { RMeSP } },
1451 { "dec{S|}", { RMeBP } },
1452 { "dec{S|}", { RMeSI } },
1453 { "dec{S|}", { RMeDI } },
252b5132 1454 /* 50 */
ce518a5f
L
1455 { "pushV", { RMrAX } },
1456 { "pushV", { RMrCX } },
1457 { "pushV", { RMrDX } },
1458 { "pushV", { RMrBX } },
1459 { "pushV", { RMrSP } },
1460 { "pushV", { RMrBP } },
1461 { "pushV", { RMrSI } },
1462 { "pushV", { RMrDI } },
252b5132 1463 /* 58 */
ce518a5f
L
1464 { "popV", { RMrAX } },
1465 { "popV", { RMrCX } },
1466 { "popV", { RMrDX } },
1467 { "popV", { RMrBX } },
1468 { "popV", { RMrSP } },
1469 { "popV", { RMrBP } },
1470 { "popV", { RMrSI } },
1471 { "popV", { RMrDI } },
252b5132 1472 /* 60 */
4e7d34a6
L
1473 { X86_64_TABLE (X86_64_60) },
1474 { X86_64_TABLE (X86_64_61) },
1475 { X86_64_TABLE (X86_64_62) },
1476 { X86_64_TABLE (X86_64_63) },
ce518a5f
L
1477 { "(bad)", { XX } }, /* seg fs */
1478 { "(bad)", { XX } }, /* seg gs */
1479 { "(bad)", { XX } }, /* op size prefix */
1480 { "(bad)", { XX } }, /* adr size prefix */
252b5132 1481 /* 68 */
ce518a5f
L
1482 { "pushT", { Iq } },
1483 { "imulS", { Gv, Ev, Iv } },
1484 { "pushT", { sIb } },
1485 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1486 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1487 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1488 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1489 { X86_64_TABLE (X86_64_6F) },
252b5132 1490 /* 70 */
ce518a5f
L
1491 { "joH", { Jb, XX, cond_jump_flag } },
1492 { "jnoH", { Jb, XX, cond_jump_flag } },
1493 { "jbH", { Jb, XX, cond_jump_flag } },
1494 { "jaeH", { Jb, XX, cond_jump_flag } },
1495 { "jeH", { Jb, XX, cond_jump_flag } },
1496 { "jneH", { Jb, XX, cond_jump_flag } },
1497 { "jbeH", { Jb, XX, cond_jump_flag } },
1498 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1499 /* 78 */
ce518a5f
L
1500 { "jsH", { Jb, XX, cond_jump_flag } },
1501 { "jnsH", { Jb, XX, cond_jump_flag } },
1502 { "jpH", { Jb, XX, cond_jump_flag } },
1503 { "jnpH", { Jb, XX, cond_jump_flag } },
1504 { "jlH", { Jb, XX, cond_jump_flag } },
1505 { "jgeH", { Jb, XX, cond_jump_flag } },
1506 { "jleH", { Jb, XX, cond_jump_flag } },
1507 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1508 /* 80 */
1ceb70f8
L
1509 { REG_TABLE (REG_80) },
1510 { REG_TABLE (REG_81) },
ce518a5f 1511 { "(bad)", { XX } },
1ceb70f8 1512 { REG_TABLE (REG_82) },
ce518a5f
L
1513 { "testB", { Eb, Gb } },
1514 { "testS", { Ev, Gv } },
1515 { "xchgB", { Eb, Gb } },
1516 { "xchgS", { Ev, Gv } },
252b5132 1517 /* 88 */
ce518a5f
L
1518 { "movB", { Eb, Gb } },
1519 { "movS", { Ev, Gv } },
b6169b20
L
1520 { "movB", { Gb, EbS } },
1521 { "movS", { Gv, EvS } },
ce518a5f 1522 { "movD", { Sv, Sw } },
1ceb70f8 1523 { MOD_TABLE (MOD_8D) },
ce518a5f 1524 { "movD", { Sw, Sv } },
1ceb70f8 1525 { REG_TABLE (REG_8F) },
252b5132 1526 /* 90 */
1ceb70f8 1527 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1528 { "xchgS", { RMeCX, eAX } },
1529 { "xchgS", { RMeDX, eAX } },
1530 { "xchgS", { RMeBX, eAX } },
1531 { "xchgS", { RMeSP, eAX } },
1532 { "xchgS", { RMeBP, eAX } },
1533 { "xchgS", { RMeSI, eAX } },
1534 { "xchgS", { RMeDI, eAX } },
252b5132 1535 /* 98 */
7c52e0e8
L
1536 { "cW{t|}R", { XX } },
1537 { "cR{t|}O", { XX } },
4e7d34a6 1538 { X86_64_TABLE (X86_64_9A) },
ce518a5f
L
1539 { "(bad)", { XX } }, /* fwait */
1540 { "pushfT", { XX } },
1541 { "popfT", { XX } },
7c52e0e8
L
1542 { "sahf", { XX } },
1543 { "lahf", { XX } },
252b5132 1544 /* a0 */
4b06377f
L
1545 { "mov%LB", { AL, Ob } },
1546 { "mov%LS", { eAX, Ov } },
1547 { "mov%LB", { Ob, AL } },
1548 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1549 { "movs{b|}", { Ybr, Xb } },
1550 { "movs{R|}", { Yvr, Xv } },
1551 { "cmps{b|}", { Xb, Yb } },
1552 { "cmps{R|}", { Xv, Yv } },
252b5132 1553 /* a8 */
ce518a5f
L
1554 { "testB", { AL, Ib } },
1555 { "testS", { eAX, Iv } },
1556 { "stosB", { Ybr, AL } },
1557 { "stosS", { Yvr, eAX } },
1558 { "lodsB", { ALr, Xb } },
1559 { "lodsS", { eAXr, Xv } },
1560 { "scasB", { AL, Yb } },
1561 { "scasS", { eAX, Yv } },
252b5132 1562 /* b0 */
ce518a5f
L
1563 { "movB", { RMAL, Ib } },
1564 { "movB", { RMCL, Ib } },
1565 { "movB", { RMDL, Ib } },
1566 { "movB", { RMBL, Ib } },
1567 { "movB", { RMAH, Ib } },
1568 { "movB", { RMCH, Ib } },
1569 { "movB", { RMDH, Ib } },
1570 { "movB", { RMBH, Ib } },
252b5132 1571 /* b8 */
4b06377f
L
1572 { "mov%LV", { RMeAX, Iv64 } },
1573 { "mov%LV", { RMeCX, Iv64 } },
1574 { "mov%LV", { RMeDX, Iv64 } },
1575 { "mov%LV", { RMeBX, Iv64 } },
1576 { "mov%LV", { RMeSP, Iv64 } },
1577 { "mov%LV", { RMeBP, Iv64 } },
1578 { "mov%LV", { RMeSI, Iv64 } },
1579 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1580 /* c0 */
1ceb70f8
L
1581 { REG_TABLE (REG_C0) },
1582 { REG_TABLE (REG_C1) },
ce518a5f
L
1583 { "retT", { Iw } },
1584 { "retT", { XX } },
4e7d34a6
L
1585 { X86_64_TABLE (X86_64_C4) },
1586 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1587 { REG_TABLE (REG_C6) },
1588 { REG_TABLE (REG_C7) },
252b5132 1589 /* c8 */
ce518a5f
L
1590 { "enterT", { Iw, Ib } },
1591 { "leaveT", { XX } },
ddab3d59
JB
1592 { "Jret{|f}P", { Iw } },
1593 { "Jret{|f}P", { XX } },
ce518a5f
L
1594 { "int3", { XX } },
1595 { "int", { Ib } },
4e7d34a6 1596 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1597 { "iretP", { XX } },
252b5132 1598 /* d0 */
1ceb70f8
L
1599 { REG_TABLE (REG_D0) },
1600 { REG_TABLE (REG_D1) },
1601 { REG_TABLE (REG_D2) },
1602 { REG_TABLE (REG_D3) },
4e7d34a6
L
1603 { X86_64_TABLE (X86_64_D4) },
1604 { X86_64_TABLE (X86_64_D5) },
ce518a5f
L
1605 { "(bad)", { XX } },
1606 { "xlat", { DSBX } },
252b5132
RH
1607 /* d8 */
1608 { FLOAT },
1609 { FLOAT },
1610 { FLOAT },
1611 { FLOAT },
1612 { FLOAT },
1613 { FLOAT },
1614 { FLOAT },
1615 { FLOAT },
1616 /* e0 */
ce518a5f
L
1617 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1618 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1619 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1620 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1621 { "inB", { AL, Ib } },
1622 { "inG", { zAX, Ib } },
1623 { "outB", { Ib, AL } },
1624 { "outG", { Ib, zAX } },
252b5132 1625 /* e8 */
ce518a5f
L
1626 { "callT", { Jv } },
1627 { "jmpT", { Jv } },
4e7d34a6 1628 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1629 { "jmp", { Jb } },
1630 { "inB", { AL, indirDX } },
1631 { "inG", { zAX, indirDX } },
1632 { "outB", { indirDX, AL } },
1633 { "outG", { indirDX, zAX } },
252b5132 1634 /* f0 */
ce518a5f
L
1635 { "(bad)", { XX } }, /* lock prefix */
1636 { "icebp", { XX } },
1637 { "(bad)", { XX } }, /* repne */
1638 { "(bad)", { XX } }, /* repz */
1639 { "hlt", { XX } },
1640 { "cmc", { XX } },
1ceb70f8
L
1641 { REG_TABLE (REG_F6) },
1642 { REG_TABLE (REG_F7) },
252b5132 1643 /* f8 */
ce518a5f
L
1644 { "clc", { XX } },
1645 { "stc", { XX } },
1646 { "cli", { XX } },
1647 { "sti", { XX } },
1648 { "cld", { XX } },
1649 { "std", { XX } },
1ceb70f8
L
1650 { REG_TABLE (REG_FE) },
1651 { REG_TABLE (REG_FF) },
252b5132
RH
1652};
1653
6439fc28 1654static const struct dis386 dis386_twobyte[] = {
252b5132 1655 /* 00 */
1ceb70f8
L
1656 { REG_TABLE (REG_0F00 ) },
1657 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1658 { "larS", { Gv, Ew } },
1659 { "lslS", { Gv, Ew } },
1660 { "(bad)", { XX } },
1661 { "syscall", { XX } },
1662 { "clts", { XX } },
1663 { "sysretP", { XX } },
252b5132 1664 /* 08 */
ce518a5f
L
1665 { "invd", { XX } },
1666 { "wbinvd", { XX } },
1667 { "(bad)", { XX } },
1668 { "ud2a", { XX } },
1669 { "(bad)", { XX } },
b5b1fc4f 1670 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1671 { "femms", { XX } },
1672 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1673 /* 10 */
1ceb70f8
L
1674 { PREFIX_TABLE (PREFIX_0F10) },
1675 { PREFIX_TABLE (PREFIX_0F11) },
1676 { PREFIX_TABLE (PREFIX_0F12) },
1677 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1678 { "unpcklpX", { XM, EXx } },
1679 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1680 { PREFIX_TABLE (PREFIX_0F16) },
1681 { MOD_TABLE (MOD_0F17) },
252b5132 1682 /* 18 */
1ceb70f8 1683 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1684 { "nopQ", { Ev } },
1685 { "nopQ", { Ev } },
1686 { "nopQ", { Ev } },
1687 { "nopQ", { Ev } },
1688 { "nopQ", { Ev } },
1689 { "nopQ", { Ev } },
ce518a5f 1690 { "nopQ", { Ev } },
252b5132 1691 /* 20 */
1ceb70f8
L
1692 { MOD_TABLE (MOD_0F20) },
1693 { MOD_TABLE (MOD_0F21) },
1694 { MOD_TABLE (MOD_0F22) },
1695 { MOD_TABLE (MOD_0F23) },
1696 { MOD_TABLE (MOD_0F24) },
c1e679ec 1697 { "(bad)", { XX } },
1ceb70f8 1698 { MOD_TABLE (MOD_0F26) },
ce518a5f 1699 { "(bad)", { XX } },
252b5132 1700 /* 28 */
09a2c6cf 1701 { "movapX", { XM, EXx } },
b6169b20 1702 { "movapX", { EXxS, XM } },
1ceb70f8
L
1703 { PREFIX_TABLE (PREFIX_0F2A) },
1704 { PREFIX_TABLE (PREFIX_0F2B) },
1705 { PREFIX_TABLE (PREFIX_0F2C) },
1706 { PREFIX_TABLE (PREFIX_0F2D) },
1707 { PREFIX_TABLE (PREFIX_0F2E) },
1708 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 1709 /* 30 */
ce518a5f
L
1710 { "wrmsr", { XX } },
1711 { "rdtsc", { XX } },
1712 { "rdmsr", { XX } },
1713 { "rdpmc", { XX } },
1714 { "sysenter", { XX } },
1715 { "sysexit", { XX } },
1716 { "(bad)", { XX } },
47dd174c 1717 { "getsec", { XX } },
252b5132 1718 /* 38 */
4e7d34a6 1719 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
ce518a5f 1720 { "(bad)", { XX } },
4e7d34a6 1721 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
ce518a5f
L
1722 { "(bad)", { XX } },
1723 { "(bad)", { XX } },
1724 { "(bad)", { XX } },
1725 { "(bad)", { XX } },
1726 { "(bad)", { XX } },
252b5132 1727 /* 40 */
b19d5385
JB
1728 { "cmovoS", { Gv, Ev } },
1729 { "cmovnoS", { Gv, Ev } },
1730 { "cmovbS", { Gv, Ev } },
1731 { "cmovaeS", { Gv, Ev } },
1732 { "cmoveS", { Gv, Ev } },
1733 { "cmovneS", { Gv, Ev } },
1734 { "cmovbeS", { Gv, Ev } },
1735 { "cmovaS", { Gv, Ev } },
252b5132 1736 /* 48 */
b19d5385
JB
1737 { "cmovsS", { Gv, Ev } },
1738 { "cmovnsS", { Gv, Ev } },
1739 { "cmovpS", { Gv, Ev } },
1740 { "cmovnpS", { Gv, Ev } },
1741 { "cmovlS", { Gv, Ev } },
1742 { "cmovgeS", { Gv, Ev } },
1743 { "cmovleS", { Gv, Ev } },
1744 { "cmovgS", { Gv, Ev } },
252b5132 1745 /* 50 */
75c135a8 1746 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
1747 { PREFIX_TABLE (PREFIX_0F51) },
1748 { PREFIX_TABLE (PREFIX_0F52) },
1749 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
1750 { "andpX", { XM, EXx } },
1751 { "andnpX", { XM, EXx } },
1752 { "orpX", { XM, EXx } },
1753 { "xorpX", { XM, EXx } },
252b5132 1754 /* 58 */
1ceb70f8
L
1755 { PREFIX_TABLE (PREFIX_0F58) },
1756 { PREFIX_TABLE (PREFIX_0F59) },
1757 { PREFIX_TABLE (PREFIX_0F5A) },
1758 { PREFIX_TABLE (PREFIX_0F5B) },
1759 { PREFIX_TABLE (PREFIX_0F5C) },
1760 { PREFIX_TABLE (PREFIX_0F5D) },
1761 { PREFIX_TABLE (PREFIX_0F5E) },
1762 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 1763 /* 60 */
1ceb70f8
L
1764 { PREFIX_TABLE (PREFIX_0F60) },
1765 { PREFIX_TABLE (PREFIX_0F61) },
1766 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
1767 { "packsswb", { MX, EM } },
1768 { "pcmpgtb", { MX, EM } },
1769 { "pcmpgtw", { MX, EM } },
1770 { "pcmpgtd", { MX, EM } },
1771 { "packuswb", { MX, EM } },
252b5132 1772 /* 68 */
ce518a5f
L
1773 { "punpckhbw", { MX, EM } },
1774 { "punpckhwd", { MX, EM } },
1775 { "punpckhdq", { MX, EM } },
1776 { "packssdw", { MX, EM } },
1ceb70f8
L
1777 { PREFIX_TABLE (PREFIX_0F6C) },
1778 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 1779 { "movK", { MX, Edq } },
1ceb70f8 1780 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 1781 /* 70 */
1ceb70f8
L
1782 { PREFIX_TABLE (PREFIX_0F70) },
1783 { REG_TABLE (REG_0F71) },
1784 { REG_TABLE (REG_0F72) },
1785 { REG_TABLE (REG_0F73) },
ce518a5f
L
1786 { "pcmpeqb", { MX, EM } },
1787 { "pcmpeqw", { MX, EM } },
1788 { "pcmpeqd", { MX, EM } },
1789 { "emms", { XX } },
252b5132 1790 /* 78 */
1ceb70f8
L
1791 { PREFIX_TABLE (PREFIX_0F78) },
1792 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 1793 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
c1e679ec 1794 { "(bad)", { XX } },
1ceb70f8
L
1795 { PREFIX_TABLE (PREFIX_0F7C) },
1796 { PREFIX_TABLE (PREFIX_0F7D) },
1797 { PREFIX_TABLE (PREFIX_0F7E) },
1798 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 1799 /* 80 */
ce518a5f
L
1800 { "joH", { Jv, XX, cond_jump_flag } },
1801 { "jnoH", { Jv, XX, cond_jump_flag } },
1802 { "jbH", { Jv, XX, cond_jump_flag } },
1803 { "jaeH", { Jv, XX, cond_jump_flag } },
1804 { "jeH", { Jv, XX, cond_jump_flag } },
1805 { "jneH", { Jv, XX, cond_jump_flag } },
1806 { "jbeH", { Jv, XX, cond_jump_flag } },
1807 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 1808 /* 88 */
ce518a5f
L
1809 { "jsH", { Jv, XX, cond_jump_flag } },
1810 { "jnsH", { Jv, XX, cond_jump_flag } },
1811 { "jpH", { Jv, XX, cond_jump_flag } },
1812 { "jnpH", { Jv, XX, cond_jump_flag } },
1813 { "jlH", { Jv, XX, cond_jump_flag } },
1814 { "jgeH", { Jv, XX, cond_jump_flag } },
1815 { "jleH", { Jv, XX, cond_jump_flag } },
1816 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 1817 /* 90 */
ce518a5f
L
1818 { "seto", { Eb } },
1819 { "setno", { Eb } },
1820 { "setb", { Eb } },
1821 { "setae", { Eb } },
1822 { "sete", { Eb } },
1823 { "setne", { Eb } },
1824 { "setbe", { Eb } },
1825 { "seta", { Eb } },
252b5132 1826 /* 98 */
ce518a5f
L
1827 { "sets", { Eb } },
1828 { "setns", { Eb } },
1829 { "setp", { Eb } },
1830 { "setnp", { Eb } },
1831 { "setl", { Eb } },
1832 { "setge", { Eb } },
1833 { "setle", { Eb } },
1834 { "setg", { Eb } },
252b5132 1835 /* a0 */
ce518a5f
L
1836 { "pushT", { fs } },
1837 { "popT", { fs } },
1838 { "cpuid", { XX } },
1839 { "btS", { Ev, Gv } },
1840 { "shldS", { Ev, Gv, Ib } },
1841 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
1842 { REG_TABLE (REG_0FA6) },
1843 { REG_TABLE (REG_0FA7) },
252b5132 1844 /* a8 */
ce518a5f
L
1845 { "pushT", { gs } },
1846 { "popT", { gs } },
1847 { "rsm", { XX } },
1848 { "btsS", { Ev, Gv } },
1849 { "shrdS", { Ev, Gv, Ib } },
1850 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 1851 { REG_TABLE (REG_0FAE) },
ce518a5f 1852 { "imulS", { Gv, Ev } },
252b5132 1853 /* b0 */
ce518a5f
L
1854 { "cmpxchgB", { Eb, Gb } },
1855 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 1856 { MOD_TABLE (MOD_0FB2) },
ce518a5f 1857 { "btrS", { Ev, Gv } },
1ceb70f8
L
1858 { MOD_TABLE (MOD_0FB4) },
1859 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
1860 { "movz{bR|x}", { Gv, Eb } },
1861 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 1862 /* b8 */
1ceb70f8 1863 { PREFIX_TABLE (PREFIX_0FB8) },
ce518a5f 1864 { "ud2b", { XX } },
1ceb70f8 1865 { REG_TABLE (REG_0FBA) },
ce518a5f
L
1866 { "btcS", { Ev, Gv } },
1867 { "bsfS", { Gv, Ev } },
1ceb70f8 1868 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
1869 { "movs{bR|x}", { Gv, Eb } },
1870 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 1871 /* c0 */
ce518a5f
L
1872 { "xaddB", { Eb, Gb } },
1873 { "xaddS", { Ev, Gv } },
1ceb70f8 1874 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 1875 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
1876 { "pinsrw", { MX, Edqw, Ib } },
1877 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 1878 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 1879 { REG_TABLE (REG_0FC7) },
252b5132 1880 /* c8 */
ce518a5f
L
1881 { "bswap", { RMeAX } },
1882 { "bswap", { RMeCX } },
1883 { "bswap", { RMeDX } },
1884 { "bswap", { RMeBX } },
1885 { "bswap", { RMeSP } },
1886 { "bswap", { RMeBP } },
1887 { "bswap", { RMeSI } },
1888 { "bswap", { RMeDI } },
252b5132 1889 /* d0 */
1ceb70f8 1890 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
1891 { "psrlw", { MX, EM } },
1892 { "psrld", { MX, EM } },
1893 { "psrlq", { MX, EM } },
1894 { "paddq", { MX, EM } },
1895 { "pmullw", { MX, EM } },
1ceb70f8 1896 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 1897 { MOD_TABLE (MOD_0FD7) },
252b5132 1898 /* d8 */
ce518a5f
L
1899 { "psubusb", { MX, EM } },
1900 { "psubusw", { MX, EM } },
1901 { "pminub", { MX, EM } },
1902 { "pand", { MX, EM } },
1903 { "paddusb", { MX, EM } },
1904 { "paddusw", { MX, EM } },
1905 { "pmaxub", { MX, EM } },
1906 { "pandn", { MX, EM } },
252b5132 1907 /* e0 */
ce518a5f
L
1908 { "pavgb", { MX, EM } },
1909 { "psraw", { MX, EM } },
1910 { "psrad", { MX, EM } },
1911 { "pavgw", { MX, EM } },
1912 { "pmulhuw", { MX, EM } },
1913 { "pmulhw", { MX, EM } },
1ceb70f8
L
1914 { PREFIX_TABLE (PREFIX_0FE6) },
1915 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 1916 /* e8 */
ce518a5f
L
1917 { "psubsb", { MX, EM } },
1918 { "psubsw", { MX, EM } },
1919 { "pminsw", { MX, EM } },
1920 { "por", { MX, EM } },
1921 { "paddsb", { MX, EM } },
1922 { "paddsw", { MX, EM } },
1923 { "pmaxsw", { MX, EM } },
1924 { "pxor", { MX, EM } },
252b5132 1925 /* f0 */
1ceb70f8 1926 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
1927 { "psllw", { MX, EM } },
1928 { "pslld", { MX, EM } },
1929 { "psllq", { MX, EM } },
1930 { "pmuludq", { MX, EM } },
1931 { "pmaddwd", { MX, EM } },
1932 { "psadbw", { MX, EM } },
1ceb70f8 1933 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 1934 /* f8 */
ce518a5f
L
1935 { "psubb", { MX, EM } },
1936 { "psubw", { MX, EM } },
1937 { "psubd", { MX, EM } },
1938 { "psubq", { MX, EM } },
1939 { "paddb", { MX, EM } },
1940 { "paddw", { MX, EM } },
1941 { "paddd", { MX, EM } },
1942 { "(bad)", { XX } },
252b5132
RH
1943};
1944
1945static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
1946 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1947 /* ------------------------------- */
1948 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
1949 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
1950 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
1951 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
1952 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
1953 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
1954 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
1955 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
1956 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
1957 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
1958 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
1959 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
1960 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
1961 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
1962 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
1963 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
1964 /* ------------------------------- */
1965 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
1966};
1967
1968static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
1969 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1970 /* ------------------------------- */
252b5132 1971 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 1972 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 1973 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 1974 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 1975 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
1976 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
1977 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 1978 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
1979 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
1980 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 1981 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 1982 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 1983 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 1984 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 1985 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 1986 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
1987 /* ------------------------------- */
1988 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1989};
1990
252b5132
RH
1991static char obuf[100];
1992static char *obufp;
ea397f5b 1993static char *mnemonicendp;
252b5132
RH
1994static char scratchbuf[100];
1995static unsigned char *start_codep;
1996static unsigned char *insn_codep;
1997static unsigned char *codep;
f16cd0d5
L
1998static int last_lock_prefix;
1999static int last_repz_prefix;
2000static int last_repnz_prefix;
2001static int last_data_prefix;
2002static int last_addr_prefix;
2003static int last_rex_prefix;
2004static int last_seg_prefix;
2005#define MAX_CODE_LENGTH 15
2006/* We can up to 14 prefixes since the maximum instruction length is
2007 15bytes. */
2008static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2009static disassemble_info *the_info;
7967e09e
L
2010static struct
2011 {
2012 int mod;
7967e09e 2013 int reg;
484c222e 2014 int rm;
7967e09e
L
2015 }
2016modrm;
4bba6815 2017static unsigned char need_modrm;
c0f3af97
L
2018static struct
2019 {
2020 int register_specifier;
2021 int length;
2022 int prefix;
2023 int w;
2024 }
2025vex;
2026static unsigned char need_vex;
2027static unsigned char need_vex_reg;
dae39acc 2028static unsigned char vex_w_done;
252b5132 2029
ea397f5b
L
2030struct op
2031 {
2032 const char *name;
2033 unsigned int len;
2034 };
2035
4bba6815
AM
2036/* If we are accessing mod/rm/reg without need_modrm set, then the
2037 values are stale. Hitting this abort likely indicates that you
2038 need to update onebyte_has_modrm or twobyte_has_modrm. */
2039#define MODRM_CHECK if (!need_modrm) abort ()
2040
d708bcba
AM
2041static const char **names64;
2042static const char **names32;
2043static const char **names16;
2044static const char **names8;
2045static const char **names8rex;
2046static const char **names_seg;
db51cc60
L
2047static const char *index64;
2048static const char *index32;
d708bcba
AM
2049static const char **index16;
2050
2051static const char *intel_names64[] = {
2052 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2053 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2054};
2055static const char *intel_names32[] = {
2056 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2057 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2058};
2059static const char *intel_names16[] = {
2060 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2061 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2062};
2063static const char *intel_names8[] = {
2064 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2065};
2066static const char *intel_names8rex[] = {
2067 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2068 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2069};
2070static const char *intel_names_seg[] = {
2071 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2072};
db51cc60
L
2073static const char *intel_index64 = "riz";
2074static const char *intel_index32 = "eiz";
d708bcba
AM
2075static const char *intel_index16[] = {
2076 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2077};
2078
2079static const char *att_names64[] = {
2080 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2081 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2082};
d708bcba
AM
2083static const char *att_names32[] = {
2084 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2085 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2086};
d708bcba
AM
2087static const char *att_names16[] = {
2088 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2089 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2090};
d708bcba
AM
2091static const char *att_names8[] = {
2092 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2093};
d708bcba
AM
2094static const char *att_names8rex[] = {
2095 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2096 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2097};
d708bcba
AM
2098static const char *att_names_seg[] = {
2099 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2100};
db51cc60
L
2101static const char *att_index64 = "%riz";
2102static const char *att_index32 = "%eiz";
d708bcba
AM
2103static const char *att_index16[] = {
2104 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2105};
2106
1ceb70f8
L
2107static const struct dis386 reg_table[][8] = {
2108 /* REG_80 */
252b5132 2109 {
ce518a5f
L
2110 { "addA", { Eb, Ib } },
2111 { "orA", { Eb, Ib } },
2112 { "adcA", { Eb, Ib } },
2113 { "sbbA", { Eb, Ib } },
2114 { "andA", { Eb, Ib } },
2115 { "subA", { Eb, Ib } },
2116 { "xorA", { Eb, Ib } },
2117 { "cmpA", { Eb, Ib } },
252b5132 2118 },
1ceb70f8 2119 /* REG_81 */
252b5132 2120 {
ce518a5f
L
2121 { "addQ", { Ev, Iv } },
2122 { "orQ", { Ev, Iv } },
2123 { "adcQ", { Ev, Iv } },
2124 { "sbbQ", { Ev, Iv } },
2125 { "andQ", { Ev, Iv } },
2126 { "subQ", { Ev, Iv } },
2127 { "xorQ", { Ev, Iv } },
2128 { "cmpQ", { Ev, Iv } },
252b5132 2129 },
1ceb70f8 2130 /* REG_82 */
252b5132 2131 {
ce518a5f
L
2132 { "addQ", { Ev, sIb } },
2133 { "orQ", { Ev, sIb } },
2134 { "adcQ", { Ev, sIb } },
2135 { "sbbQ", { Ev, sIb } },
2136 { "andQ", { Ev, sIb } },
2137 { "subQ", { Ev, sIb } },
2138 { "xorQ", { Ev, sIb } },
2139 { "cmpQ", { Ev, sIb } },
252b5132 2140 },
1ceb70f8 2141 /* REG_8F */
4e7d34a6
L
2142 {
2143 { "popU", { stackEv } },
c48244a5 2144 { XOP_8F_TABLE (XOP_09) },
4e7d34a6
L
2145 { "(bad)", { XX } },
2146 { "(bad)", { XX } },
2147 { "(bad)", { XX } },
f88c9eb0 2148 { XOP_8F_TABLE (XOP_09) },
4e7d34a6
L
2149 { "(bad)", { XX } },
2150 { "(bad)", { XX } },
2151 },
1ceb70f8 2152 /* REG_C0 */
252b5132 2153 {
ce518a5f
L
2154 { "rolA", { Eb, Ib } },
2155 { "rorA", { Eb, Ib } },
2156 { "rclA", { Eb, Ib } },
2157 { "rcrA", { Eb, Ib } },
2158 { "shlA", { Eb, Ib } },
2159 { "shrA", { Eb, Ib } },
2160 { "(bad)", { XX } },
2161 { "sarA", { Eb, Ib } },
252b5132 2162 },
1ceb70f8 2163 /* REG_C1 */
252b5132 2164 {
ce518a5f
L
2165 { "rolQ", { Ev, Ib } },
2166 { "rorQ", { Ev, Ib } },
2167 { "rclQ", { Ev, Ib } },
2168 { "rcrQ", { Ev, Ib } },
2169 { "shlQ", { Ev, Ib } },
2170 { "shrQ", { Ev, Ib } },
2171 { "(bad)", { XX } },
2172 { "sarQ", { Ev, Ib } },
252b5132 2173 },
1ceb70f8 2174 /* REG_C6 */
4e7d34a6
L
2175 {
2176 { "movA", { Eb, Ib } },
2177 { "(bad)", { XX } },
2178 { "(bad)", { XX } },
2179 { "(bad)", { XX } },
2180 { "(bad)", { XX } },
2181 { "(bad)", { XX } },
2182 { "(bad)", { XX } },
2183 { "(bad)", { XX } },
2184 },
1ceb70f8 2185 /* REG_C7 */
4e7d34a6
L
2186 {
2187 { "movQ", { Ev, Iv } },
2188 { "(bad)", { XX } },
2189 { "(bad)", { XX } },
2190 { "(bad)", { XX } },
2191 { "(bad)", { XX } },
2192 { "(bad)", { XX } },
2193 { "(bad)", { XX } },
2194 { "(bad)", { XX } },
2195 },
1ceb70f8 2196 /* REG_D0 */
252b5132 2197 {
ce518a5f
L
2198 { "rolA", { Eb, I1 } },
2199 { "rorA", { Eb, I1 } },
2200 { "rclA", { Eb, I1 } },
2201 { "rcrA", { Eb, I1 } },
2202 { "shlA", { Eb, I1 } },
2203 { "shrA", { Eb, I1 } },
2204 { "(bad)", { XX } },
2205 { "sarA", { Eb, I1 } },
252b5132 2206 },
1ceb70f8 2207 /* REG_D1 */
252b5132 2208 {
ce518a5f
L
2209 { "rolQ", { Ev, I1 } },
2210 { "rorQ", { Ev, I1 } },
2211 { "rclQ", { Ev, I1 } },
2212 { "rcrQ", { Ev, I1 } },
2213 { "shlQ", { Ev, I1 } },
2214 { "shrQ", { Ev, I1 } },
2215 { "(bad)", { XX } },
2216 { "sarQ", { Ev, I1 } },
252b5132 2217 },
1ceb70f8 2218 /* REG_D2 */
252b5132 2219 {
ce518a5f
L
2220 { "rolA", { Eb, CL } },
2221 { "rorA", { Eb, CL } },
2222 { "rclA", { Eb, CL } },
2223 { "rcrA", { Eb, CL } },
2224 { "shlA", { Eb, CL } },
2225 { "shrA", { Eb, CL } },
2226 { "(bad)", { XX } },
2227 { "sarA", { Eb, CL } },
252b5132 2228 },
1ceb70f8 2229 /* REG_D3 */
252b5132 2230 {
ce518a5f
L
2231 { "rolQ", { Ev, CL } },
2232 { "rorQ", { Ev, CL } },
2233 { "rclQ", { Ev, CL } },
2234 { "rcrQ", { Ev, CL } },
2235 { "shlQ", { Ev, CL } },
2236 { "shrQ", { Ev, CL } },
2237 { "(bad)", { XX } },
2238 { "sarQ", { Ev, CL } },
252b5132 2239 },
1ceb70f8 2240 /* REG_F6 */
252b5132 2241 {
ce518a5f 2242 { "testA", { Eb, Ib } },
058f233b 2243 { "(bad)", { XX } },
ce518a5f
L
2244 { "notA", { Eb } },
2245 { "negA", { Eb } },
2246 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2247 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2248 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2249 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2250 },
1ceb70f8 2251 /* REG_F7 */
252b5132 2252 {
ce518a5f
L
2253 { "testQ", { Ev, Iv } },
2254 { "(bad)", { XX } },
2255 { "notQ", { Ev } },
2256 { "negQ", { Ev } },
2257 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2258 { "imulQ", { Ev } },
2259 { "divQ", { Ev } },
2260 { "idivQ", { Ev } },
252b5132 2261 },
1ceb70f8 2262 /* REG_FE */
252b5132 2263 {
ce518a5f
L
2264 { "incA", { Eb } },
2265 { "decA", { Eb } },
2266 { "(bad)", { XX } },
2267 { "(bad)", { XX } },
2268 { "(bad)", { XX } },
2269 { "(bad)", { XX } },
2270 { "(bad)", { XX } },
2271 { "(bad)", { XX } },
252b5132 2272 },
1ceb70f8 2273 /* REG_FF */
252b5132 2274 {
ce518a5f
L
2275 { "incQ", { Ev } },
2276 { "decQ", { Ev } },
2277 { "callT", { indirEv } },
2278 { "JcallT", { indirEp } },
2279 { "jmpT", { indirEv } },
2280 { "JjmpT", { indirEp } },
2281 { "pushU", { stackEv } },
2282 { "(bad)", { XX } },
252b5132 2283 },
1ceb70f8 2284 /* REG_0F00 */
252b5132 2285 {
ce518a5f
L
2286 { "sldtD", { Sv } },
2287 { "strD", { Sv } },
2288 { "lldt", { Ew } },
2289 { "ltr", { Ew } },
2290 { "verr", { Ew } },
2291 { "verw", { Ew } },
2292 { "(bad)", { XX } },
2293 { "(bad)", { XX } },
252b5132 2294 },
1ceb70f8 2295 /* REG_0F01 */
252b5132 2296 {
1ceb70f8
L
2297 { MOD_TABLE (MOD_0F01_REG_0) },
2298 { MOD_TABLE (MOD_0F01_REG_1) },
2299 { MOD_TABLE (MOD_0F01_REG_2) },
2300 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f
L
2301 { "smswD", { Sv } },
2302 { "(bad)", { XX } },
2303 { "lmsw", { Ew } },
1ceb70f8 2304 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2305 },
b5b1fc4f 2306 /* REG_0F0D */
252b5132 2307 {
4e7d34a6
L
2308 { "prefetch", { Eb } },
2309 { "prefetchw", { Eb } },
2310 { "(bad)", { XX } },
2311 { "(bad)", { XX } },
2312 { "(bad)", { XX } },
2313 { "(bad)", { XX } },
2314 { "(bad)", { XX } },
2315 { "(bad)", { XX } },
252b5132 2316 },
1ceb70f8 2317 /* REG_0F18 */
252b5132 2318 {
1ceb70f8
L
2319 { MOD_TABLE (MOD_0F18_REG_0) },
2320 { MOD_TABLE (MOD_0F18_REG_1) },
2321 { MOD_TABLE (MOD_0F18_REG_2) },
2322 { MOD_TABLE (MOD_0F18_REG_3) },
ce518a5f
L
2323 { "(bad)", { XX } },
2324 { "(bad)", { XX } },
2325 { "(bad)", { XX } },
2326 { "(bad)", { XX } },
252b5132 2327 },
1ceb70f8 2328 /* REG_0F71 */
a6bd098c 2329 {
ce518a5f
L
2330 { "(bad)", { XX } },
2331 { "(bad)", { XX } },
1ceb70f8 2332 { MOD_TABLE (MOD_0F71_REG_2) },
ce518a5f 2333 { "(bad)", { XX } },
1ceb70f8 2334 { MOD_TABLE (MOD_0F71_REG_4) },
ce518a5f 2335 { "(bad)", { XX } },
1ceb70f8 2336 { MOD_TABLE (MOD_0F71_REG_6) },
ce518a5f 2337 { "(bad)", { XX } },
a6bd098c 2338 },
1ceb70f8 2339 /* REG_0F72 */
a6bd098c 2340 {
ce518a5f
L
2341 { "(bad)", { XX } },
2342 { "(bad)", { XX } },
1ceb70f8 2343 { MOD_TABLE (MOD_0F72_REG_2) },
ce518a5f 2344 { "(bad)", { XX } },
1ceb70f8 2345 { MOD_TABLE (MOD_0F72_REG_4) },
ce518a5f 2346 { "(bad)", { XX } },
1ceb70f8 2347 { MOD_TABLE (MOD_0F72_REG_6) },
ce518a5f 2348 { "(bad)", { XX } },
a6bd098c 2349 },
1ceb70f8 2350 /* REG_0F73 */
252b5132 2351 {
ce518a5f
L
2352 { "(bad)", { XX } },
2353 { "(bad)", { XX } },
1ceb70f8
L
2354 { MOD_TABLE (MOD_0F73_REG_2) },
2355 { MOD_TABLE (MOD_0F73_REG_3) },
ce518a5f 2356 { "(bad)", { XX } },
ce518a5f 2357 { "(bad)", { XX } },
1ceb70f8
L
2358 { MOD_TABLE (MOD_0F73_REG_6) },
2359 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2360 },
1ceb70f8 2361 /* REG_0FA6 */
252b5132 2362 {
4e7d34a6
L
2363 { "montmul", { { OP_0f07, 0 } } },
2364 { "xsha1", { { OP_0f07, 0 } } },
2365 { "xsha256", { { OP_0f07, 0 } } },
2366 { "(bad)", { { OP_0f07, 0 } } },
2367 { "(bad)", { { OP_0f07, 0 } } },
2368 { "(bad)", { { OP_0f07, 0 } } },
2369 { "(bad)", { { OP_0f07, 0 } } },
2370 { "(bad)", { { OP_0f07, 0 } } },
2371 },
1ceb70f8 2372 /* REG_0FA7 */
4e7d34a6
L
2373 {
2374 { "xstore-rng", { { OP_0f07, 0 } } },
2375 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2376 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2377 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2378 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2379 { "xcrypt-ofb", { { OP_0f07, 0 } } },
2380 { "(bad)", { { OP_0f07, 0 } } },
2381 { "(bad)", { { OP_0f07, 0 } } },
2382 },
1ceb70f8 2383 /* REG_0FAE */
4e7d34a6 2384 {
1ceb70f8
L
2385 { MOD_TABLE (MOD_0FAE_REG_0) },
2386 { MOD_TABLE (MOD_0FAE_REG_1) },
2387 { MOD_TABLE (MOD_0FAE_REG_2) },
2388 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2389 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2390 { MOD_TABLE (MOD_0FAE_REG_5) },
2391 { MOD_TABLE (MOD_0FAE_REG_6) },
2392 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2393 },
1ceb70f8 2394 /* REG_0FBA */
252b5132 2395 {
ce518a5f
L
2396 { "(bad)", { XX } },
2397 { "(bad)", { XX } },
d8faab4e
L
2398 { "(bad)", { XX } },
2399 { "(bad)", { XX } },
4e7d34a6
L
2400 { "btQ", { Ev, Ib } },
2401 { "btsQ", { Ev, Ib } },
2402 { "btrQ", { Ev, Ib } },
2403 { "btcQ", { Ev, Ib } },
c608c12e 2404 },
1ceb70f8 2405 /* REG_0FC7 */
c608c12e 2406 {
b844680a 2407 { "(bad)", { XX } },
4e7d34a6 2408 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
d8faab4e 2409 { "(bad)", { XX } },
b844680a
L
2410 { "(bad)", { XX } },
2411 { "(bad)", { XX } },
2412 { "(bad)", { XX } },
1ceb70f8
L
2413 { MOD_TABLE (MOD_0FC7_REG_6) },
2414 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2415 },
c0f3af97
L
2416 /* REG_VEX_71 */
2417 {
2418 { "(bad)", { XX } },
2419 { "(bad)", { XX } },
2420 { MOD_TABLE (MOD_VEX_71_REG_2) },
2421 { "(bad)", { XX } },
2422 { MOD_TABLE (MOD_VEX_71_REG_4) },
2423 { "(bad)", { XX } },
2424 { MOD_TABLE (MOD_VEX_71_REG_6) },
2425 { "(bad)", { XX } },
2426 },
2427 /* REG_VEX_72 */
2428 {
2429 { "(bad)", { XX } },
2430 { "(bad)", { XX } },
2431 { MOD_TABLE (MOD_VEX_72_REG_2) },
2432 { "(bad)", { XX } },
2433 { MOD_TABLE (MOD_VEX_72_REG_4) },
2434 { "(bad)", { XX } },
2435 { MOD_TABLE (MOD_VEX_72_REG_6) },
2436 { "(bad)", { XX } },
2437 },
2438 /* REG_VEX_73 */
2439 {
2440 { "(bad)", { XX } },
2441 { "(bad)", { XX } },
2442 { MOD_TABLE (MOD_VEX_73_REG_2) },
2443 { MOD_TABLE (MOD_VEX_73_REG_3) },
2444 { "(bad)", { XX } },
2445 { "(bad)", { XX } },
2446 { MOD_TABLE (MOD_VEX_73_REG_6) },
2447 { MOD_TABLE (MOD_VEX_73_REG_7) },
2448 },
2449 /* REG_VEX_AE */
2450 {
2451 { "(bad)", { XX } },
2452 { "(bad)", { XX } },
2453 { MOD_TABLE (MOD_VEX_AE_REG_2) },
2454 { MOD_TABLE (MOD_VEX_AE_REG_3) },
2455 { "(bad)", { XX } },
2456 { "(bad)", { XX } },
2457 { "(bad)", { XX } },
2458 { "(bad)", { XX } },
2459 },
f88c9eb0
SP
2460 /* REG_XOP_LWPCB */
2461 {
2462 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2463 { "slwpcb", { { OP_LWPCB_E, 0 } } },
2464 { "(bad)", { XX } },
2465 { "(bad)", { XX } },
2466 { "(bad)", { XX } },
2467 { "(bad)", { XX } },
2468 { "(bad)", { XX } },
2469 { "(bad)", { XX } },
2470 },
2471 /* REG_XOP_LWP */
2472 {
2473 { "lwpins", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
2474 { "lwpval", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
2475 { "(bad)", { XX } },
2476 { "(bad)", { XX } },
2477 { "(bad)", { XX } },
2478 { "(bad)", { XX } },
2479 { "(bad)", { XX } },
2480 { "(bad)", { XX } },
2481 },
4e7d34a6
L
2482};
2483
1ceb70f8
L
2484static const struct dis386 prefix_table[][4] = {
2485 /* PREFIX_90 */
252b5132 2486 {
4e7d34a6
L
2487 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2488 { "pause", { XX } },
2489 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2490 { "(bad)", { XX } },
0f10071e 2491 },
4e7d34a6 2492
1ceb70f8 2493 /* PREFIX_0F10 */
cc0ec051 2494 {
4e7d34a6
L
2495 { "movups", { XM, EXx } },
2496 { "movss", { XM, EXd } },
2497 { "movupd", { XM, EXx } },
2498 { "movsd", { XM, EXq } },
30d1c836 2499 },
4e7d34a6 2500
1ceb70f8 2501 /* PREFIX_0F11 */
30d1c836 2502 {
b6169b20 2503 { "movups", { EXxS, XM } },
fa99fab2 2504 { "movss", { EXdS, XM } },
b6169b20 2505 { "movupd", { EXxS, XM } },
fa99fab2 2506 { "movsd", { EXqS, XM } },
4e7d34a6 2507 },
252b5132 2508
1ceb70f8 2509 /* PREFIX_0F12 */
c608c12e 2510 {
1ceb70f8 2511 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2512 { "movsldup", { XM, EXx } },
2513 { "movlpd", { XM, EXq } },
2514 { "movddup", { XM, EXq } },
c608c12e 2515 },
4e7d34a6 2516
1ceb70f8 2517 /* PREFIX_0F16 */
c608c12e 2518 {
1ceb70f8 2519 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2520 { "movshdup", { XM, EXx } },
2521 { "movhpd", { XM, EXq } },
058f233b 2522 { "(bad)", { XX } },
c608c12e 2523 },
4e7d34a6 2524
1ceb70f8 2525 /* PREFIX_0F2A */
c608c12e 2526 {
09335d05 2527 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2528 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2529 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2530 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2531 },
4e7d34a6 2532
1ceb70f8 2533 /* PREFIX_0F2B */
c608c12e 2534 {
75c135a8
L
2535 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2536 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2537 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2538 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2539 },
4e7d34a6 2540
1ceb70f8 2541 /* PREFIX_0F2C */
c608c12e 2542 {
09335d05
L
2543 { "cvttps2pi", { MXC, EXq } },
2544 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2545 { "cvttpd2pi", { MXC, EXx } },
09335d05 2546 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2547 },
4e7d34a6 2548
1ceb70f8 2549 /* PREFIX_0F2D */
c608c12e 2550 {
4e7d34a6
L
2551 { "cvtps2pi", { MXC, EXq } },
2552 { "cvtss2siY", { Gv, EXd } },
2553 { "cvtpd2pi", { MXC, EXx } },
2554 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2555 },
4e7d34a6 2556
1ceb70f8 2557 /* PREFIX_0F2E */
c608c12e 2558 {
4e7d34a6
L
2559 { "ucomiss",{ XM, EXd } },
2560 { "(bad)", { XX } },
2561 { "ucomisd",{ XM, EXq } },
2562 { "(bad)", { XX } },
c608c12e 2563 },
4e7d34a6 2564
1ceb70f8 2565 /* PREFIX_0F2F */
c608c12e 2566 {
4e7d34a6
L
2567 { "comiss", { XM, EXd } },
2568 { "(bad)", { XX } },
2569 { "comisd", { XM, EXq } },
2570 { "(bad)", { XX } },
c608c12e 2571 },
4e7d34a6 2572
1ceb70f8 2573 /* PREFIX_0F51 */
c608c12e 2574 {
4e7d34a6
L
2575 { "sqrtps", { XM, EXx } },
2576 { "sqrtss", { XM, EXd } },
2577 { "sqrtpd", { XM, EXx } },
2578 { "sqrtsd", { XM, EXq } },
c608c12e 2579 },
4e7d34a6 2580
1ceb70f8 2581 /* PREFIX_0F52 */
c608c12e 2582 {
4e7d34a6
L
2583 { "rsqrtps",{ XM, EXx } },
2584 { "rsqrtss",{ XM, EXd } },
058f233b
L
2585 { "(bad)", { XX } },
2586 { "(bad)", { XX } },
c608c12e 2587 },
4e7d34a6 2588
1ceb70f8 2589 /* PREFIX_0F53 */
c608c12e 2590 {
4e7d34a6
L
2591 { "rcpps", { XM, EXx } },
2592 { "rcpss", { XM, EXd } },
058f233b
L
2593 { "(bad)", { XX } },
2594 { "(bad)", { XX } },
c608c12e 2595 },
4e7d34a6 2596
1ceb70f8 2597 /* PREFIX_0F58 */
c608c12e 2598 {
4e7d34a6
L
2599 { "addps", { XM, EXx } },
2600 { "addss", { XM, EXd } },
2601 { "addpd", { XM, EXx } },
2602 { "addsd", { XM, EXq } },
c608c12e 2603 },
4e7d34a6 2604
1ceb70f8 2605 /* PREFIX_0F59 */
c608c12e 2606 {
4e7d34a6
L
2607 { "mulps", { XM, EXx } },
2608 { "mulss", { XM, EXd } },
2609 { "mulpd", { XM, EXx } },
2610 { "mulsd", { XM, EXq } },
041bd2e0 2611 },
4e7d34a6 2612
1ceb70f8 2613 /* PREFIX_0F5A */
041bd2e0 2614 {
4e7d34a6
L
2615 { "cvtps2pd", { XM, EXq } },
2616 { "cvtss2sd", { XM, EXd } },
2617 { "cvtpd2ps", { XM, EXx } },
2618 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2619 },
4e7d34a6 2620
1ceb70f8 2621 /* PREFIX_0F5B */
041bd2e0 2622 {
09a2c6cf
L
2623 { "cvtdq2ps", { XM, EXx } },
2624 { "cvttps2dq", { XM, EXx } },
2625 { "cvtps2dq", { XM, EXx } },
058f233b 2626 { "(bad)", { XX } },
041bd2e0 2627 },
4e7d34a6 2628
1ceb70f8 2629 /* PREFIX_0F5C */
041bd2e0 2630 {
4e7d34a6
L
2631 { "subps", { XM, EXx } },
2632 { "subss", { XM, EXd } },
2633 { "subpd", { XM, EXx } },
2634 { "subsd", { XM, EXq } },
041bd2e0 2635 },
4e7d34a6 2636
1ceb70f8 2637 /* PREFIX_0F5D */
041bd2e0 2638 {
4e7d34a6
L
2639 { "minps", { XM, EXx } },
2640 { "minss", { XM, EXd } },
2641 { "minpd", { XM, EXx } },
2642 { "minsd", { XM, EXq } },
041bd2e0 2643 },
4e7d34a6 2644
1ceb70f8 2645 /* PREFIX_0F5E */
041bd2e0 2646 {
4e7d34a6
L
2647 { "divps", { XM, EXx } },
2648 { "divss", { XM, EXd } },
2649 { "divpd", { XM, EXx } },
2650 { "divsd", { XM, EXq } },
041bd2e0 2651 },
4e7d34a6 2652
1ceb70f8 2653 /* PREFIX_0F5F */
041bd2e0 2654 {
4e7d34a6
L
2655 { "maxps", { XM, EXx } },
2656 { "maxss", { XM, EXd } },
2657 { "maxpd", { XM, EXx } },
2658 { "maxsd", { XM, EXq } },
041bd2e0 2659 },
4e7d34a6 2660
1ceb70f8 2661 /* PREFIX_0F60 */
041bd2e0 2662 {
4e7d34a6
L
2663 { "punpcklbw",{ MX, EMd } },
2664 { "(bad)", { XX } },
2665 { "punpcklbw",{ MX, EMx } },
2666 { "(bad)", { XX } },
041bd2e0 2667 },
4e7d34a6 2668
1ceb70f8 2669 /* PREFIX_0F61 */
041bd2e0 2670 {
4e7d34a6
L
2671 { "punpcklwd",{ MX, EMd } },
2672 { "(bad)", { XX } },
2673 { "punpcklwd",{ MX, EMx } },
2674 { "(bad)", { XX } },
041bd2e0 2675 },
4e7d34a6 2676
1ceb70f8 2677 /* PREFIX_0F62 */
041bd2e0 2678 {
4e7d34a6
L
2679 { "punpckldq",{ MX, EMd } },
2680 { "(bad)", { XX } },
2681 { "punpckldq",{ MX, EMx } },
2682 { "(bad)", { XX } },
041bd2e0 2683 },
4e7d34a6 2684
1ceb70f8 2685 /* PREFIX_0F6C */
041bd2e0 2686 {
058f233b
L
2687 { "(bad)", { XX } },
2688 { "(bad)", { XX } },
4e7d34a6 2689 { "punpcklqdq", { XM, EXx } },
058f233b 2690 { "(bad)", { XX } },
0f17484f 2691 },
4e7d34a6 2692
1ceb70f8 2693 /* PREFIX_0F6D */
0f17484f 2694 {
058f233b
L
2695 { "(bad)", { XX } },
2696 { "(bad)", { XX } },
4e7d34a6 2697 { "punpckhqdq", { XM, EXx } },
058f233b 2698 { "(bad)", { XX } },
041bd2e0 2699 },
4e7d34a6 2700
1ceb70f8 2701 /* PREFIX_0F6F */
ca164297 2702 {
4e7d34a6
L
2703 { "movq", { MX, EM } },
2704 { "movdqu", { XM, EXx } },
2705 { "movdqa", { XM, EXx } },
058f233b 2706 { "(bad)", { XX } },
ca164297 2707 },
4e7d34a6 2708
1ceb70f8 2709 /* PREFIX_0F70 */
4e7d34a6
L
2710 {
2711 { "pshufw", { MX, EM, Ib } },
2712 { "pshufhw",{ XM, EXx, Ib } },
2713 { "pshufd", { XM, EXx, Ib } },
2714 { "pshuflw",{ XM, EXx, Ib } },
2715 },
2716
92fddf8e
L
2717 /* PREFIX_0F73_REG_3 */
2718 {
2719 { "(bad)", { XX } },
2720 { "(bad)", { XX } },
2721 { "psrldq", { XS, Ib } },
2722 { "(bad)", { XX } },
2723 },
2724
2725 /* PREFIX_0F73_REG_7 */
2726 {
2727 { "(bad)", { XX } },
2728 { "(bad)", { XX } },
2729 { "pslldq", { XS, Ib } },
2730 { "(bad)", { XX } },
2731 },
2732
1ceb70f8 2733 /* PREFIX_0F78 */
4e7d34a6
L
2734 {
2735 {"vmread", { Em, Gm } },
2736 {"(bad)", { XX } },
2737 {"extrq", { XS, Ib, Ib } },
2738 {"insertq", { XM, XS, Ib, Ib } },
2739 },
2740
1ceb70f8 2741 /* PREFIX_0F79 */
4e7d34a6
L
2742 {
2743 {"vmwrite", { Gm, Em } },
2744 {"(bad)", { XX } },
2745 {"extrq", { XM, XS } },
2746 {"insertq", { XM, XS } },
2747 },
2748
1ceb70f8 2749 /* PREFIX_0F7C */
ca164297 2750 {
058f233b
L
2751 { "(bad)", { XX } },
2752 { "(bad)", { XX } },
09a2c6cf
L
2753 { "haddpd", { XM, EXx } },
2754 { "haddps", { XM, EXx } },
ca164297 2755 },
4e7d34a6 2756
1ceb70f8 2757 /* PREFIX_0F7D */
ca164297 2758 {
058f233b
L
2759 { "(bad)", { XX } },
2760 { "(bad)", { XX } },
09a2c6cf
L
2761 { "hsubpd", { XM, EXx } },
2762 { "hsubps", { XM, EXx } },
ca164297 2763 },
4e7d34a6 2764
1ceb70f8 2765 /* PREFIX_0F7E */
ca164297 2766 {
4e7d34a6
L
2767 { "movK", { Edq, MX } },
2768 { "movq", { XM, EXq } },
2769 { "movK", { Edq, XM } },
058f233b 2770 { "(bad)", { XX } },
ca164297 2771 },
4e7d34a6 2772
1ceb70f8 2773 /* PREFIX_0F7F */
ca164297 2774 {
b6169b20
L
2775 { "movq", { EMS, MX } },
2776 { "movdqu", { EXxS, XM } },
2777 { "movdqa", { EXxS, XM } },
058f233b 2778 { "(bad)", { XX } },
ca164297 2779 },
4e7d34a6 2780
1ceb70f8 2781 /* PREFIX_0FB8 */
ca164297 2782 {
4e7d34a6
L
2783 { "(bad)", { XX } },
2784 { "popcntS", { Gv, Ev } },
2785 { "(bad)", { XX } },
2786 { "(bad)", { XX } },
ca164297 2787 },
4e7d34a6 2788
1ceb70f8 2789 /* PREFIX_0FBD */
050dfa73 2790 {
4e7d34a6
L
2791 { "bsrS", { Gv, Ev } },
2792 { "lzcntS", { Gv, Ev } },
2793 { "bsrS", { Gv, Ev } },
2794 { "(bad)", { XX } },
050dfa73
MM
2795 },
2796
1ceb70f8 2797 /* PREFIX_0FC2 */
050dfa73 2798 {
ad19981d
L
2799 { "cmpps", { XM, EXx, CMP } },
2800 { "cmpss", { XM, EXd, CMP } },
2801 { "cmppd", { XM, EXx, CMP } },
2802 { "cmpsd", { XM, EXq, CMP } },
050dfa73 2803 },
246c51aa 2804
4ee52178
L
2805 /* PREFIX_0FC3 */
2806 {
2807 { "movntiS", { Ma, Gv } },
2808 { "(bad)", { XX } },
2809 { "(bad)", { XX } },
2810 { "(bad)", { XX } },
2811 },
2812
92fddf8e
L
2813 /* PREFIX_0FC7_REG_6 */
2814 {
2815 { "vmptrld",{ Mq } },
2816 { "vmxon", { Mq } },
2817 { "vmclear",{ Mq } },
2818 { "(bad)", { XX } },
2819 },
2820
1ceb70f8 2821 /* PREFIX_0FD0 */
050dfa73 2822 {
058f233b
L
2823 { "(bad)", { XX } },
2824 { "(bad)", { XX } },
4e7d34a6
L
2825 { "addsubpd", { XM, EXx } },
2826 { "addsubps", { XM, EXx } },
246c51aa 2827 },
050dfa73 2828
1ceb70f8 2829 /* PREFIX_0FD6 */
050dfa73 2830 {
058f233b 2831 { "(bad)", { XX } },
4e7d34a6 2832 { "movq2dq",{ XM, MS } },
b6169b20 2833 { "movq", { EXqS, XM } },
4e7d34a6 2834 { "movdq2q",{ MX, XS } },
050dfa73
MM
2835 },
2836
1ceb70f8 2837 /* PREFIX_0FE6 */
7918206c 2838 {
058f233b 2839 { "(bad)", { XX } },
4e7d34a6
L
2840 { "cvtdq2pd", { XM, EXq } },
2841 { "cvttpd2dq", { XM, EXx } },
2842 { "cvtpd2dq", { XM, EXx } },
7918206c 2843 },
8b38ad71 2844
1ceb70f8 2845 /* PREFIX_0FE7 */
8b38ad71 2846 {
4ee52178 2847 { "movntq", { Mq, MX } },
058f233b 2848 { "(bad)", { XX } },
75c135a8 2849 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
058f233b 2850 { "(bad)", { XX } },
4e7d34a6
L
2851 },
2852
1ceb70f8 2853 /* PREFIX_0FF0 */
4e7d34a6 2854 {
058f233b
L
2855 { "(bad)", { XX } },
2856 { "(bad)", { XX } },
2857 { "(bad)", { XX } },
1ceb70f8 2858 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
2859 },
2860
1ceb70f8 2861 /* PREFIX_0FF7 */
4e7d34a6
L
2862 {
2863 { "maskmovq", { MX, MS } },
058f233b 2864 { "(bad)", { XX } },
4e7d34a6 2865 { "maskmovdqu", { XM, XS } },
058f233b 2866 { "(bad)", { XX } },
8b38ad71 2867 },
42903f7f 2868
1ceb70f8 2869 /* PREFIX_0F3810 */
42903f7f
L
2870 {
2871 { "(bad)", { XX } },
2872 { "(bad)", { XX } },
88a94849 2873 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
2874 { "(bad)", { XX } },
2875 },
2876
1ceb70f8 2877 /* PREFIX_0F3814 */
42903f7f
L
2878 {
2879 { "(bad)", { XX } },
2880 { "(bad)", { XX } },
88a94849 2881 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
2882 { "(bad)", { XX } },
2883 },
2884
1ceb70f8 2885 /* PREFIX_0F3815 */
42903f7f
L
2886 {
2887 { "(bad)", { XX } },
2888 { "(bad)", { XX } },
09a2c6cf 2889 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
2890 { "(bad)", { XX } },
2891 },
2892
1ceb70f8 2893 /* PREFIX_0F3817 */
42903f7f
L
2894 {
2895 { "(bad)", { XX } },
2896 { "(bad)", { XX } },
09a2c6cf 2897 { "ptest", { XM, EXx } },
42903f7f
L
2898 { "(bad)", { XX } },
2899 },
2900
1ceb70f8 2901 /* PREFIX_0F3820 */
42903f7f
L
2902 {
2903 { "(bad)", { XX } },
2904 { "(bad)", { XX } },
8976381e 2905 { "pmovsxbw", { XM, EXq } },
42903f7f
L
2906 { "(bad)", { XX } },
2907 },
2908
1ceb70f8 2909 /* PREFIX_0F3821 */
42903f7f
L
2910 {
2911 { "(bad)", { XX } },
2912 { "(bad)", { XX } },
8976381e 2913 { "pmovsxbd", { XM, EXd } },
42903f7f
L
2914 { "(bad)", { XX } },
2915 },
2916
1ceb70f8 2917 /* PREFIX_0F3822 */
42903f7f
L
2918 {
2919 { "(bad)", { XX } },
2920 { "(bad)", { XX } },
8976381e 2921 { "pmovsxbq", { XM, EXw } },
42903f7f
L
2922 { "(bad)", { XX } },
2923 },
2924
1ceb70f8 2925 /* PREFIX_0F3823 */
42903f7f
L
2926 {
2927 { "(bad)", { XX } },
2928 { "(bad)", { XX } },
8976381e 2929 { "pmovsxwd", { XM, EXq } },
42903f7f
L
2930 { "(bad)", { XX } },
2931 },
2932
1ceb70f8 2933 /* PREFIX_0F3824 */
42903f7f
L
2934 {
2935 { "(bad)", { XX } },
2936 { "(bad)", { XX } },
8976381e 2937 { "pmovsxwq", { XM, EXd } },
42903f7f
L
2938 { "(bad)", { XX } },
2939 },
2940
1ceb70f8 2941 /* PREFIX_0F3825 */
42903f7f
L
2942 {
2943 { "(bad)", { XX } },
2944 { "(bad)", { XX } },
8976381e 2945 { "pmovsxdq", { XM, EXq } },
42903f7f
L
2946 { "(bad)", { XX } },
2947 },
2948
1ceb70f8 2949 /* PREFIX_0F3828 */
42903f7f
L
2950 {
2951 { "(bad)", { XX } },
2952 { "(bad)", { XX } },
09a2c6cf 2953 { "pmuldq", { XM, EXx } },
42903f7f
L
2954 { "(bad)", { XX } },
2955 },
2956
1ceb70f8 2957 /* PREFIX_0F3829 */
42903f7f
L
2958 {
2959 { "(bad)", { XX } },
2960 { "(bad)", { XX } },
09a2c6cf 2961 { "pcmpeqq", { XM, EXx } },
42903f7f
L
2962 { "(bad)", { XX } },
2963 },
2964
1ceb70f8 2965 /* PREFIX_0F382A */
42903f7f
L
2966 {
2967 { "(bad)", { XX } },
2968 { "(bad)", { XX } },
75c135a8 2969 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
2970 { "(bad)", { XX } },
2971 },
2972
1ceb70f8 2973 /* PREFIX_0F382B */
42903f7f
L
2974 {
2975 { "(bad)", { XX } },
2976 { "(bad)", { XX } },
09a2c6cf 2977 { "packusdw", { XM, EXx } },
42903f7f
L
2978 { "(bad)", { XX } },
2979 },
2980
1ceb70f8 2981 /* PREFIX_0F3830 */
42903f7f
L
2982 {
2983 { "(bad)", { XX } },
2984 { "(bad)", { XX } },
8976381e 2985 { "pmovzxbw", { XM, EXq } },
42903f7f
L
2986 { "(bad)", { XX } },
2987 },
2988
1ceb70f8 2989 /* PREFIX_0F3831 */
42903f7f
L
2990 {
2991 { "(bad)", { XX } },
2992 { "(bad)", { XX } },
8976381e 2993 { "pmovzxbd", { XM, EXd } },
42903f7f
L
2994 { "(bad)", { XX } },
2995 },
2996
1ceb70f8 2997 /* PREFIX_0F3832 */
42903f7f
L
2998 {
2999 { "(bad)", { XX } },
3000 { "(bad)", { XX } },
8976381e 3001 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3002 { "(bad)", { XX } },
3003 },
3004
1ceb70f8 3005 /* PREFIX_0F3833 */
42903f7f
L
3006 {
3007 { "(bad)", { XX } },
3008 { "(bad)", { XX } },
8976381e 3009 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3010 { "(bad)", { XX } },
3011 },
3012
1ceb70f8 3013 /* PREFIX_0F3834 */
42903f7f
L
3014 {
3015 { "(bad)", { XX } },
3016 { "(bad)", { XX } },
8976381e 3017 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3018 { "(bad)", { XX } },
3019 },
3020
1ceb70f8 3021 /* PREFIX_0F3835 */
42903f7f
L
3022 {
3023 { "(bad)", { XX } },
3024 { "(bad)", { XX } },
8976381e 3025 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3026 { "(bad)", { XX } },
3027 },
3028
1ceb70f8 3029 /* PREFIX_0F3837 */
4e7d34a6
L
3030 {
3031 { "(bad)", { XX } },
3032 { "(bad)", { XX } },
3033 { "pcmpgtq", { XM, EXx } },
3034 { "(bad)", { XX } },
3035 },
3036
1ceb70f8 3037 /* PREFIX_0F3838 */
42903f7f
L
3038 {
3039 { "(bad)", { XX } },
3040 { "(bad)", { XX } },
09a2c6cf 3041 { "pminsb", { XM, EXx } },
42903f7f
L
3042 { "(bad)", { XX } },
3043 },
3044
1ceb70f8 3045 /* PREFIX_0F3839 */
42903f7f
L
3046 {
3047 { "(bad)", { XX } },
3048 { "(bad)", { XX } },
09a2c6cf 3049 { "pminsd", { XM, EXx } },
42903f7f
L
3050 { "(bad)", { XX } },
3051 },
3052
1ceb70f8 3053 /* PREFIX_0F383A */
42903f7f
L
3054 {
3055 { "(bad)", { XX } },
3056 { "(bad)", { XX } },
09a2c6cf 3057 { "pminuw", { XM, EXx } },
42903f7f
L
3058 { "(bad)", { XX } },
3059 },
3060
1ceb70f8 3061 /* PREFIX_0F383B */
42903f7f
L
3062 {
3063 { "(bad)", { XX } },
3064 { "(bad)", { XX } },
09a2c6cf 3065 { "pminud", { XM, EXx } },
42903f7f
L
3066 { "(bad)", { XX } },
3067 },
3068
1ceb70f8 3069 /* PREFIX_0F383C */
42903f7f
L
3070 {
3071 { "(bad)", { XX } },
3072 { "(bad)", { XX } },
09a2c6cf 3073 { "pmaxsb", { XM, EXx } },
42903f7f
L
3074 { "(bad)", { XX } },
3075 },
3076
1ceb70f8 3077 /* PREFIX_0F383D */
42903f7f
L
3078 {
3079 { "(bad)", { XX } },
3080 { "(bad)", { XX } },
09a2c6cf 3081 { "pmaxsd", { XM, EXx } },
42903f7f
L
3082 { "(bad)", { XX } },
3083 },
3084
1ceb70f8 3085 /* PREFIX_0F383E */
42903f7f
L
3086 {
3087 { "(bad)", { XX } },
3088 { "(bad)", { XX } },
09a2c6cf 3089 { "pmaxuw", { XM, EXx } },
42903f7f
L
3090 { "(bad)", { XX } },
3091 },
3092
1ceb70f8 3093 /* PREFIX_0F383F */
42903f7f
L
3094 {
3095 { "(bad)", { XX } },
3096 { "(bad)", { XX } },
09a2c6cf 3097 { "pmaxud", { XM, EXx } },
42903f7f
L
3098 { "(bad)", { XX } },
3099 },
3100
1ceb70f8 3101 /* PREFIX_0F3840 */
42903f7f
L
3102 {
3103 { "(bad)", { XX } },
3104 { "(bad)", { XX } },
09a2c6cf 3105 { "pmulld", { XM, EXx } },
42903f7f
L
3106 { "(bad)", { XX } },
3107 },
3108
1ceb70f8 3109 /* PREFIX_0F3841 */
42903f7f
L
3110 {
3111 { "(bad)", { XX } },
3112 { "(bad)", { XX } },
09a2c6cf 3113 { "phminposuw", { XM, EXx } },
42903f7f
L
3114 { "(bad)", { XX } },
3115 },
3116
f1f8f695
L
3117 /* PREFIX_0F3880 */
3118 {
3119 { "(bad)", { XX } },
3120 { "(bad)", { XX } },
3121 { "invept", { Gm, Mo } },
3122 { "(bad)", { XX } },
3123 },
3124
3125 /* PREFIX_0F3881 */
3126 {
3127 { "(bad)", { XX } },
3128 { "(bad)", { XX } },
3129 { "invvpid", { Gm, Mo } },
3130 { "(bad)", { XX } },
3131 },
3132
c0f3af97
L
3133 /* PREFIX_0F38DB */
3134 {
3135 { "(bad)", { XX } },
3136 { "(bad)", { XX } },
3137 { "aesimc", { XM, EXx } },
3138 { "(bad)", { XX } },
3139 },
3140
3141 /* PREFIX_0F38DC */
3142 {
3143 { "(bad)", { XX } },
3144 { "(bad)", { XX } },
3145 { "aesenc", { XM, EXx } },
3146 { "(bad)", { XX } },
3147 },
3148
3149 /* PREFIX_0F38DD */
3150 {
3151 { "(bad)", { XX } },
3152 { "(bad)", { XX } },
3153 { "aesenclast", { XM, EXx } },
3154 { "(bad)", { XX } },
3155 },
3156
3157 /* PREFIX_0F38DE */
3158 {
3159 { "(bad)", { XX } },
3160 { "(bad)", { XX } },
3161 { "aesdec", { XM, EXx } },
3162 { "(bad)", { XX } },
3163 },
3164
3165 /* PREFIX_0F38DF */
3166 {
3167 { "(bad)", { XX } },
3168 { "(bad)", { XX } },
3169 { "aesdeclast", { XM, EXx } },
3170 { "(bad)", { XX } },
3171 },
3172
1ceb70f8 3173 /* PREFIX_0F38F0 */
4e7d34a6 3174 {
f1f8f695 3175 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6 3176 { "(bad)", { XX } },
f1f8f695 3177 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3178 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3179 },
3180
1ceb70f8 3181 /* PREFIX_0F38F1 */
4e7d34a6 3182 {
f1f8f695 3183 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6 3184 { "(bad)", { XX } },
f1f8f695 3185 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3186 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3187 },
3188
1ceb70f8 3189 /* PREFIX_0F3A08 */
42903f7f
L
3190 {
3191 { "(bad)", { XX } },
3192 { "(bad)", { XX } },
09a2c6cf 3193 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3194 { "(bad)", { XX } },
3195 },
3196
1ceb70f8 3197 /* PREFIX_0F3A09 */
42903f7f
L
3198 {
3199 { "(bad)", { XX } },
3200 { "(bad)", { XX } },
09a2c6cf 3201 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3202 { "(bad)", { XX } },
3203 },
3204
1ceb70f8 3205 /* PREFIX_0F3A0A */
42903f7f
L
3206 {
3207 { "(bad)", { XX } },
3208 { "(bad)", { XX } },
09335d05 3209 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3210 { "(bad)", { XX } },
3211 },
3212
1ceb70f8 3213 /* PREFIX_0F3A0B */
42903f7f
L
3214 {
3215 { "(bad)", { XX } },
3216 { "(bad)", { XX } },
09335d05 3217 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3218 { "(bad)", { XX } },
3219 },
3220
1ceb70f8 3221 /* PREFIX_0F3A0C */
42903f7f
L
3222 {
3223 { "(bad)", { XX } },
3224 { "(bad)", { XX } },
09a2c6cf 3225 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3226 { "(bad)", { XX } },
3227 },
3228
1ceb70f8 3229 /* PREFIX_0F3A0D */
42903f7f
L
3230 {
3231 { "(bad)", { XX } },
3232 { "(bad)", { XX } },
09a2c6cf 3233 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3234 { "(bad)", { XX } },
3235 },
3236
1ceb70f8 3237 /* PREFIX_0F3A0E */
42903f7f
L
3238 {
3239 { "(bad)", { XX } },
3240 { "(bad)", { XX } },
09a2c6cf 3241 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3242 { "(bad)", { XX } },
3243 },
3244
1ceb70f8 3245 /* PREFIX_0F3A14 */
42903f7f
L
3246 {
3247 { "(bad)", { XX } },
3248 { "(bad)", { XX } },
3249 { "pextrb", { Edqb, XM, Ib } },
3250 { "(bad)", { XX } },
3251 },
3252
1ceb70f8 3253 /* PREFIX_0F3A15 */
42903f7f
L
3254 {
3255 { "(bad)", { XX } },
3256 { "(bad)", { XX } },
3257 { "pextrw", { Edqw, XM, Ib } },
3258 { "(bad)", { XX } },
3259 },
3260
1ceb70f8 3261 /* PREFIX_0F3A16 */
42903f7f
L
3262 {
3263 { "(bad)", { XX } },
3264 { "(bad)", { XX } },
3265 { "pextrK", { Edq, XM, Ib } },
3266 { "(bad)", { XX } },
3267 },
3268
1ceb70f8 3269 /* PREFIX_0F3A17 */
42903f7f
L
3270 {
3271 { "(bad)", { XX } },
3272 { "(bad)", { XX } },
3273 { "extractps", { Edqd, XM, Ib } },
3274 { "(bad)", { XX } },
3275 },
3276
1ceb70f8 3277 /* PREFIX_0F3A20 */
42903f7f
L
3278 {
3279 { "(bad)", { XX } },
3280 { "(bad)", { XX } },
3281 { "pinsrb", { XM, Edqb, Ib } },
3282 { "(bad)", { XX } },
3283 },
3284
1ceb70f8 3285 /* PREFIX_0F3A21 */
42903f7f
L
3286 {
3287 { "(bad)", { XX } },
3288 { "(bad)", { XX } },
8976381e 3289 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3290 { "(bad)", { XX } },
3291 },
3292
1ceb70f8 3293 /* PREFIX_0F3A22 */
42903f7f
L
3294 {
3295 { "(bad)", { XX } },
3296 { "(bad)", { XX } },
3297 { "pinsrK", { XM, Edq, Ib } },
3298 { "(bad)", { XX } },
3299 },
3300
1ceb70f8 3301 /* PREFIX_0F3A40 */
42903f7f
L
3302 {
3303 { "(bad)", { XX } },
3304 { "(bad)", { XX } },
09a2c6cf 3305 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3306 { "(bad)", { XX } },
3307 },
3308
1ceb70f8 3309 /* PREFIX_0F3A41 */
42903f7f
L
3310 {
3311 { "(bad)", { XX } },
3312 { "(bad)", { XX } },
09a2c6cf 3313 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3314 { "(bad)", { XX } },
3315 },
3316
1ceb70f8 3317 /* PREFIX_0F3A42 */
42903f7f
L
3318 {
3319 { "(bad)", { XX } },
3320 { "(bad)", { XX } },
09a2c6cf 3321 { "mpsadbw", { XM, EXx, Ib } },
42903f7f
L
3322 { "(bad)", { XX } },
3323 },
381d071f 3324
c0f3af97
L
3325 /* PREFIX_0F3A44 */
3326 {
3327 { "(bad)", { XX } },
3328 { "(bad)", { XX } },
3329 { "pclmulqdq", { XM, EXx, PCLMUL } },
3330 { "(bad)", { XX } },
3331 },
3332
1ceb70f8 3333 /* PREFIX_0F3A60 */
381d071f
L
3334 {
3335 { "(bad)", { XX } },
3336 { "(bad)", { XX } },
4e7d34a6 3337 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3338 { "(bad)", { XX } },
3339 },
3340
1ceb70f8 3341 /* PREFIX_0F3A61 */
381d071f
L
3342 {
3343 { "(bad)", { XX } },
3344 { "(bad)", { XX } },
4e7d34a6 3345 { "pcmpestri", { XM, EXx, Ib } },
381d071f 3346 { "(bad)", { XX } },
381d071f
L
3347 },
3348
1ceb70f8 3349 /* PREFIX_0F3A62 */
381d071f
L
3350 {
3351 { "(bad)", { XX } },
3352 { "(bad)", { XX } },
4e7d34a6 3353 { "pcmpistrm", { XM, EXx, Ib } },
381d071f 3354 { "(bad)", { XX } },
381d071f
L
3355 },
3356
1ceb70f8 3357 /* PREFIX_0F3A63 */
381d071f
L
3358 {
3359 { "(bad)", { XX } },
3360 { "(bad)", { XX } },
4e7d34a6 3361 { "pcmpistri", { XM, EXx, Ib } },
381d071f
L
3362 { "(bad)", { XX } },
3363 },
09a2c6cf 3364
c0f3af97 3365 /* PREFIX_0F3ADF */
09a2c6cf 3366 {
c0f3af97
L
3367 { "(bad)", { XX } },
3368 { "(bad)", { XX } },
3369 { "aeskeygenassist", { XM, EXx, Ib } },
3370 { "(bad)", { XX } },
09a2c6cf
L
3371 },
3372
c0f3af97 3373 /* PREFIX_VEX_10 */
09a2c6cf 3374 {
c0f3af97
L
3375 { "vmovups", { XM, EXx } },
3376 { VEX_LEN_TABLE (VEX_LEN_10_P_1) },
3377 { "vmovupd", { XM, EXx } },
3378 { VEX_LEN_TABLE (VEX_LEN_10_P_3) },
09a2c6cf
L
3379 },
3380
c0f3af97 3381 /* PREFIX_VEX_11 */
09a2c6cf 3382 {
b6169b20 3383 { "vmovups", { EXxS, XM } },
c0f3af97 3384 { VEX_LEN_TABLE (VEX_LEN_11_P_1) },
b6169b20 3385 { "vmovupd", { EXxS, XM } },
c0f3af97 3386 { VEX_LEN_TABLE (VEX_LEN_11_P_3) },
09a2c6cf
L
3387 },
3388
c0f3af97 3389 /* PREFIX_VEX_12 */
09a2c6cf 3390 {
c0f3af97
L
3391 { MOD_TABLE (MOD_VEX_12_PREFIX_0) },
3392 { "vmovsldup", { XM, EXx } },
3393 { VEX_LEN_TABLE (VEX_LEN_12_P_2) },
3394 { "vmovddup", { XM, EXymmq } },
09a2c6cf
L
3395 },
3396
c0f3af97 3397 /* PREFIX_VEX_16 */
09a2c6cf 3398 {
c0f3af97
L
3399 { MOD_TABLE (MOD_VEX_16_PREFIX_0) },
3400 { "vmovshdup", { XM, EXx } },
3401 { VEX_LEN_TABLE (VEX_LEN_16_P_2) },
3402 { "(bad)", { XX } },
5f754f58 3403 },
7c52e0e8 3404
c0f3af97 3405 /* PREFIX_VEX_2A */
5f754f58 3406 {
c0f3af97
L
3407 { "(bad)", { XX } },
3408 { VEX_LEN_TABLE (VEX_LEN_2A_P_1) },
3409 { "(bad)", { XX } },
3410 { VEX_LEN_TABLE (VEX_LEN_2A_P_3) },
5f754f58 3411 },
7c52e0e8 3412
c0f3af97 3413 /* PREFIX_VEX_2C */
5f754f58 3414 {
c0f3af97
L
3415 { "(bad)", { XX } },
3416 { VEX_LEN_TABLE (VEX_LEN_2C_P_1) },
3417 { "(bad)", { XX } },
3418 { VEX_LEN_TABLE (VEX_LEN_2C_P_3) },
5f754f58 3419 },
7c52e0e8 3420
c0f3af97 3421 /* PREFIX_VEX_2D */
7c52e0e8 3422 {
c0f3af97
L
3423 { "(bad)", { XX } },
3424 { VEX_LEN_TABLE (VEX_LEN_2D_P_1) },
3425 { "(bad)", { XX } },
3426 { VEX_LEN_TABLE (VEX_LEN_2D_P_3) },
7c52e0e8
L
3427 },
3428
c0f3af97 3429 /* PREFIX_VEX_2E */
7c52e0e8 3430 {
c0f3af97
L
3431 { VEX_LEN_TABLE (VEX_LEN_2E_P_0) },
3432 { "(bad)", { XX } },
3433 { VEX_LEN_TABLE (VEX_LEN_2E_P_2) },
3434 { "(bad)", { XX } },
7c52e0e8
L
3435 },
3436
c0f3af97 3437 /* PREFIX_VEX_2F */
7c52e0e8 3438 {
c0f3af97
L
3439 { VEX_LEN_TABLE (VEX_LEN_2F_P_0) },
3440 { "(bad)", { XX } },
3441 { VEX_LEN_TABLE (VEX_LEN_2F_P_2) },
3442 { "(bad)", { XX } },
7c52e0e8
L
3443 },
3444
c0f3af97 3445 /* PREFIX_VEX_51 */
7c52e0e8 3446 {
c0f3af97
L
3447 { "vsqrtps", { XM, EXx } },
3448 { VEX_LEN_TABLE (VEX_LEN_51_P_1) },
3449 { "vsqrtpd", { XM, EXx } },
3450 { VEX_LEN_TABLE (VEX_LEN_51_P_3) },
7c52e0e8
L
3451 },
3452
c0f3af97 3453 /* PREFIX_VEX_52 */
7c52e0e8 3454 {
c0f3af97
L
3455 { "vrsqrtps", { XM, EXx } },
3456 { VEX_LEN_TABLE (VEX_LEN_52_P_1) },
3457 { "(bad)", { XX } },
3458 { "(bad)", { XX } },
7c52e0e8
L
3459 },
3460
c0f3af97 3461 /* PREFIX_VEX_53 */
7c52e0e8 3462 {
c0f3af97
L
3463 { "vrcpps", { XM, EXx } },
3464 { VEX_LEN_TABLE (VEX_LEN_53_P_1) },
3465 { "(bad)", { XX } },
3466 { "(bad)", { XX } },
7c52e0e8
L
3467 },
3468
c0f3af97 3469 /* PREFIX_VEX_58 */
7c52e0e8 3470 {
c0f3af97
L
3471 { "vaddps", { XM, Vex, EXx } },
3472 { VEX_LEN_TABLE (VEX_LEN_58_P_1) },
3473 { "vaddpd", { XM, Vex, EXx } },
3474 { VEX_LEN_TABLE (VEX_LEN_58_P_3) },
7c52e0e8
L
3475 },
3476
c0f3af97 3477 /* PREFIX_VEX_59 */
7c52e0e8 3478 {
c0f3af97
L
3479 { "vmulps", { XM, Vex, EXx } },
3480 { VEX_LEN_TABLE (VEX_LEN_59_P_1) },
3481 { "vmulpd", { XM, Vex, EXx } },
3482 { VEX_LEN_TABLE (VEX_LEN_59_P_3) },
7c52e0e8
L
3483 },
3484
c0f3af97 3485 /* PREFIX_VEX_5A */
7c52e0e8 3486 {
c0f3af97
L
3487 { "vcvtps2pd", { XM, EXxmmq } },
3488 { VEX_LEN_TABLE (VEX_LEN_5A_P_1) },
3489 { "vcvtpd2ps%XY", { XMM, EXx } },
3490 { VEX_LEN_TABLE (VEX_LEN_5A_P_3) },
7c52e0e8
L
3491 },
3492
c0f3af97 3493 /* PREFIX_VEX_5B */
7c52e0e8 3494 {
c0f3af97
L
3495 { "vcvtdq2ps", { XM, EXx } },
3496 { "vcvttps2dq", { XM, EXx } },
3497 { "vcvtps2dq", { XM, EXx } },
3498 { "(bad)", { XX } },
7c52e0e8
L
3499 },
3500
c0f3af97 3501 /* PREFIX_VEX_5C */
7c52e0e8 3502 {
c0f3af97
L
3503 { "vsubps", { XM, Vex, EXx } },
3504 { VEX_LEN_TABLE (VEX_LEN_5C_P_1) },
3505 { "vsubpd", { XM, Vex, EXx } },
3506 { VEX_LEN_TABLE (VEX_LEN_5C_P_3) },
7c52e0e8
L
3507 },
3508
c0f3af97 3509 /* PREFIX_VEX_5D */
7c52e0e8 3510 {
c0f3af97
L
3511 { "vminps", { XM, Vex, EXx } },
3512 { VEX_LEN_TABLE (VEX_LEN_5D_P_1) },
3513 { "vminpd", { XM, Vex, EXx } },
3514 { VEX_LEN_TABLE (VEX_LEN_5D_P_3) },
7c52e0e8
L
3515 },
3516
c0f3af97 3517 /* PREFIX_VEX_5E */
7c52e0e8 3518 {
c0f3af97
L
3519 { "vdivps", { XM, Vex, EXx } },
3520 { VEX_LEN_TABLE (VEX_LEN_5E_P_1) },
3521 { "vdivpd", { XM, Vex, EXx } },
3522 { VEX_LEN_TABLE (VEX_LEN_5E_P_3) },
7c52e0e8
L
3523 },
3524
c0f3af97 3525 /* PREFIX_VEX_5F */
7c52e0e8 3526 {
c0f3af97
L
3527 { "vmaxps", { XM, Vex, EXx } },
3528 { VEX_LEN_TABLE (VEX_LEN_5F_P_1) },
3529 { "vmaxpd", { XM, Vex, EXx } },
3530 { VEX_LEN_TABLE (VEX_LEN_5F_P_3) },
7c52e0e8
L
3531 },
3532
c0f3af97 3533 /* PREFIX_VEX_60 */
7c52e0e8 3534 {
c0f3af97
L
3535 { "(bad)", { XX } },
3536 { "(bad)", { XX } },
3537 { VEX_LEN_TABLE (VEX_LEN_60_P_2) },
3538 { "(bad)", { XX } },
7c52e0e8
L
3539 },
3540
c0f3af97 3541 /* PREFIX_VEX_61 */
7c52e0e8 3542 {
c0f3af97
L
3543 { "(bad)", { XX } },
3544 { "(bad)", { XX } },
3545 { VEX_LEN_TABLE (VEX_LEN_61_P_2) },
3546 { "(bad)", { XX } },
7c52e0e8
L
3547 },
3548
c0f3af97 3549 /* PREFIX_VEX_62 */
7c52e0e8 3550 {
c0f3af97
L
3551 { "(bad)", { XX } },
3552 { "(bad)", { XX } },
3553 { VEX_LEN_TABLE (VEX_LEN_62_P_2) },
3554 { "(bad)", { XX } },
7c52e0e8
L
3555 },
3556
c0f3af97 3557 /* PREFIX_VEX_63 */
7c52e0e8 3558 {
c0f3af97
L
3559 { "(bad)", { XX } },
3560 { "(bad)", { XX } },
3561 { VEX_LEN_TABLE (VEX_LEN_63_P_2) },
3562 { "(bad)", { XX } },
7c52e0e8
L
3563 },
3564
c0f3af97 3565 /* PREFIX_VEX_64 */
7c52e0e8 3566 {
c0f3af97
L
3567 { "(bad)", { XX } },
3568 { "(bad)", { XX } },
3569 { VEX_LEN_TABLE (VEX_LEN_64_P_2) },
3570 { "(bad)", { XX } },
7c52e0e8
L
3571 },
3572
c0f3af97 3573 /* PREFIX_VEX_65 */
7c52e0e8 3574 {
c0f3af97
L
3575 { "(bad)", { XX } },
3576 { "(bad)", { XX } },
3577 { VEX_LEN_TABLE (VEX_LEN_65_P_2) },
3578 { "(bad)", { XX } },
7c52e0e8
L
3579 },
3580
c0f3af97 3581 /* PREFIX_VEX_66 */
7c52e0e8 3582 {
c0f3af97
L
3583 { "(bad)", { XX } },
3584 { "(bad)", { XX } },
3585 { VEX_LEN_TABLE (VEX_LEN_66_P_2) },
3586 { "(bad)", { XX } },
7c52e0e8 3587 },
6439fc28 3588
c0f3af97 3589 /* PREFIX_VEX_67 */
331d2d0d 3590 {
c0f3af97
L
3591 { "(bad)", { XX } },
3592 { "(bad)", { XX } },
3593 { VEX_LEN_TABLE (VEX_LEN_67_P_2) },
3594 { "(bad)", { XX } },
3595 },
3596
3597 /* PREFIX_VEX_68 */
3598 {
3599 { "(bad)", { XX } },
3600 { "(bad)", { XX } },
3601 { VEX_LEN_TABLE (VEX_LEN_68_P_2) },
3602 { "(bad)", { XX } },
3603 },
3604
3605 /* PREFIX_VEX_69 */
3606 {
3607 { "(bad)", { XX } },
3608 { "(bad)", { XX } },
3609 { VEX_LEN_TABLE (VEX_LEN_69_P_2) },
3610 { "(bad)", { XX } },
3611 },
3612
3613 /* PREFIX_VEX_6A */
3614 {
3615 { "(bad)", { XX } },
3616 { "(bad)", { XX } },
3617 { VEX_LEN_TABLE (VEX_LEN_6A_P_2) },
3618 { "(bad)", { XX } },
3619 },
3620
3621 /* PREFIX_VEX_6B */
3622 {
3623 { "(bad)", { XX } },
3624 { "(bad)", { XX } },
3625 { VEX_LEN_TABLE (VEX_LEN_6B_P_2) },
3626 { "(bad)", { XX } },
3627 },
3628
3629 /* PREFIX_VEX_6C */
3630 {
3631 { "(bad)", { XX } },
3632 { "(bad)", { XX } },
3633 { VEX_LEN_TABLE (VEX_LEN_6C_P_2) },
3634 { "(bad)", { XX } },
3635 },
3636
3637 /* PREFIX_VEX_6D */
3638 {
3639 { "(bad)", { XX } },
3640 { "(bad)", { XX } },
3641 { VEX_LEN_TABLE (VEX_LEN_6D_P_2) },
3642 { "(bad)", { XX } },
3643 },
3644
3645 /* PREFIX_VEX_6E */
3646 {
3647 { "(bad)", { XX } },
3648 { "(bad)", { XX } },
3649 { VEX_LEN_TABLE (VEX_LEN_6E_P_2) },
3650 { "(bad)", { XX } },
3651 },
3652
3653 /* PREFIX_VEX_6F */
3654 {
3655 { "(bad)", { XX } },
3656 { "vmovdqu", { XM, EXx } },
3657 { "vmovdqa", { XM, EXx } },
3658 { "(bad)", { XX } },
3659 },
3660
3661 /* PREFIX_VEX_70 */
3662 {
3663 { "(bad)", { XX } },
3664 { VEX_LEN_TABLE (VEX_LEN_70_P_1) },
3665 { VEX_LEN_TABLE (VEX_LEN_70_P_2) },
3666 { VEX_LEN_TABLE (VEX_LEN_70_P_3) },
3667 },
3668
3669 /* PREFIX_VEX_71_REG_2 */
3670 {
3671 { "(bad)", { XX } },
3672 { "(bad)", { XX } },
3673 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) },
3674 { "(bad)", { XX } },
3675 },
3676
3677 /* PREFIX_VEX_71_REG_4 */
3678 {
3679 { "(bad)", { XX } },
3680 { "(bad)", { XX } },
3681 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) },
3682 { "(bad)", { XX } },
3683 },
3684
3685 /* PREFIX_VEX_71_REG_6 */
3686 {
3687 { "(bad)", { XX } },
3688 { "(bad)", { XX } },
3689 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) },
3690 { "(bad)", { XX } },
3691 },
3692
3693 /* PREFIX_VEX_72_REG_2 */
3694 {
3695 { "(bad)", { XX } },
3696 { "(bad)", { XX } },
3697 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) },
3698 { "(bad)", { XX } },
3699 },
3700
3701 /* PREFIX_VEX_72_REG_4 */
3702 {
3703 { "(bad)", { XX } },
3704 { "(bad)", { XX } },
3705 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) },
3706 { "(bad)", { XX } },
3707 },
3708
3709 /* PREFIX_VEX_72_REG_6 */
3710 {
3711 { "(bad)", { XX } },
3712 { "(bad)", { XX } },
3713 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) },
3714 { "(bad)", { XX } },
3715 },
3716
3717 /* PREFIX_VEX_73_REG_2 */
3718 {
3719 { "(bad)", { XX } },
3720 { "(bad)", { XX } },
3721 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) },
3722 { "(bad)", { XX } },
3723 },
3724
3725 /* PREFIX_VEX_73_REG_3 */
3726 {
3727 { "(bad)", { XX } },
3728 { "(bad)", { XX } },
3729 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) },
3730 { "(bad)", { XX } },
3731 },
3732
3733 /* PREFIX_VEX_73_REG_6 */
3734 {
3735 { "(bad)", { XX } },
3736 { "(bad)", { XX } },
3737 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) },
3738 { "(bad)", { XX } },
3739 },
3740
3741 /* PREFIX_VEX_73_REG_7 */
3742 {
3743 { "(bad)", { XX } },
3744 { "(bad)", { XX } },
3745 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) },
3746 { "(bad)", { XX } },
3747 },
3748
3749 /* PREFIX_VEX_74 */
3750 {
3751 { "(bad)", { XX } },
3752 { "(bad)", { XX } },
3753 { VEX_LEN_TABLE (VEX_LEN_74_P_2) },
3754 { "(bad)", { XX } },
3755 },
3756
3757 /* PREFIX_VEX_75 */
3758 {
3759 { "(bad)", { XX } },
3760 { "(bad)", { XX } },
3761 { VEX_LEN_TABLE (VEX_LEN_75_P_2) },
3762 { "(bad)", { XX } },
3763 },
3764
3765 /* PREFIX_VEX_76 */
3766 {
3767 { "(bad)", { XX } },
3768 { "(bad)", { XX } },
3769 { VEX_LEN_TABLE (VEX_LEN_76_P_2) },
3770 { "(bad)", { XX } },
3771 },
3772
3773 /* PREFIX_VEX_77 */
3774 {
3775 { "", { VZERO } },
3776 { "(bad)", { XX } },
3777 { "(bad)", { XX } },
3778 { "(bad)", { XX } },
3779 },
3780
3781 /* PREFIX_VEX_7C */
3782 {
3783 { "(bad)", { XX } },
3784 { "(bad)", { XX } },
3785 { "vhaddpd", { XM, Vex, EXx } },
3786 { "vhaddps", { XM, Vex, EXx } },
3787 },
3788
3789 /* PREFIX_VEX_7D */
3790 {
3791 { "(bad)", { XX } },
3792 { "(bad)", { XX } },
3793 { "vhsubpd", { XM, Vex, EXx } },
3794 { "vhsubps", { XM, Vex, EXx } },
3795 },
3796
3797 /* PREFIX_VEX_7E */
3798 {
3799 { "(bad)", { XX } },
3800 { VEX_LEN_TABLE (VEX_LEN_7E_P_1) },
3801 { VEX_LEN_TABLE (VEX_LEN_7E_P_2) },
3802 { "(bad)", { XX } },
3803 },
3804
3805 /* PREFIX_VEX_7F */
3806 {
3807 { "(bad)", { XX } },
b6169b20
L
3808 { "vmovdqu", { EXxS, XM } },
3809 { "vmovdqa", { EXxS, XM } },
c0f3af97
L
3810 { "(bad)", { XX } },
3811 },
3812
3813 /* PREFIX_VEX_C2 */
3814 {
3815 { "vcmpps", { XM, Vex, EXx, VCMP } },
3816 { VEX_LEN_TABLE (VEX_LEN_C2_P_1) },
3817 { "vcmppd", { XM, Vex, EXx, VCMP } },
3818 { VEX_LEN_TABLE (VEX_LEN_C2_P_3) },
3819 },
3820
3821 /* PREFIX_VEX_C4 */
3822 {
3823 { "(bad)", { XX } },
3824 { "(bad)", { XX } },
3825 { VEX_LEN_TABLE (VEX_LEN_C4_P_2) },
3826 { "(bad)", { XX } },
3827 },
3828
3829 /* PREFIX_VEX_C5 */
3830 {
3831 { "(bad)", { XX } },
3832 { "(bad)", { XX } },
3833 { VEX_LEN_TABLE (VEX_LEN_C5_P_2) },
3834 { "(bad)", { XX } },
3835 },
3836
3837 /* PREFIX_VEX_D0 */
3838 {
3839 { "(bad)", { XX } },
3840 { "(bad)", { XX } },
3841 { "vaddsubpd", { XM, Vex, EXx } },
3842 { "vaddsubps", { XM, Vex, EXx } },
3843 },
3844
3845 /* PREFIX_VEX_D1 */
3846 {
3847 { "(bad)", { XX } },
3848 { "(bad)", { XX } },
3849 { VEX_LEN_TABLE (VEX_LEN_D1_P_2) },
3850 { "(bad)", { XX } },
3851 },
3852
3853 /* PREFIX_VEX_D2 */
3854 {
3855 { "(bad)", { XX } },
3856 { "(bad)", { XX } },
3857 { VEX_LEN_TABLE (VEX_LEN_D2_P_2) },
3858 { "(bad)", { XX } },
3859 },
3860
3861 /* PREFIX_VEX_D3 */
3862 {
3863 { "(bad)", { XX } },
3864 { "(bad)", { XX } },
3865 { VEX_LEN_TABLE (VEX_LEN_D3_P_2) },
3866 { "(bad)", { XX } },
3867 },
3868
3869 /* PREFIX_VEX_D4 */
3870 {
3871 { "(bad)", { XX } },
3872 { "(bad)", { XX } },
3873 { VEX_LEN_TABLE (VEX_LEN_D4_P_2) },
3874 { "(bad)", { XX } },
3875 },
3876
3877 /* PREFIX_VEX_D5 */
3878 {
3879 { "(bad)", { XX } },
3880 { "(bad)", { XX } },
3881 { VEX_LEN_TABLE (VEX_LEN_D5_P_2) },
3882 { "(bad)", { XX } },
3883 },
3884
3885 /* PREFIX_VEX_D6 */
3886 {
3887 { "(bad)", { XX } },
3888 { "(bad)", { XX } },
3889 { VEX_LEN_TABLE (VEX_LEN_D6_P_2) },
3890 { "(bad)", { XX } },
3891 },
3892
3893 /* PREFIX_VEX_D7 */
3894 {
3895 { "(bad)", { XX } },
3896 { "(bad)", { XX } },
3897 { MOD_TABLE (MOD_VEX_D7_PREFIX_2) },
3898 { "(bad)", { XX } },
3899 },
3900
3901 /* PREFIX_VEX_D8 */
3902 {
3903 { "(bad)", { XX } },
3904 { "(bad)", { XX } },
3905 { VEX_LEN_TABLE (VEX_LEN_D8_P_2) },
3906 { "(bad)", { XX } },
3907 },
3908
3909 /* PREFIX_VEX_D9 */
3910 {
3911 { "(bad)", { XX } },
3912 { "(bad)", { XX } },
3913 { VEX_LEN_TABLE (VEX_LEN_D9_P_2) },
3914 { "(bad)", { XX } },
3915 },
3916
3917 /* PREFIX_VEX_DA */
3918 {
3919 { "(bad)", { XX } },
3920 { "(bad)", { XX } },
3921 { VEX_LEN_TABLE (VEX_LEN_DA_P_2) },
3922 { "(bad)", { XX } },
3923 },
3924
3925 /* PREFIX_VEX_DB */
3926 {
3927 { "(bad)", { XX } },
3928 { "(bad)", { XX } },
3929 { VEX_LEN_TABLE (VEX_LEN_DB_P_2) },
3930 { "(bad)", { XX } },
3931 },
3932
3933 /* PREFIX_VEX_DC */
3934 {
3935 { "(bad)", { XX } },
3936 { "(bad)", { XX } },
3937 { VEX_LEN_TABLE (VEX_LEN_DC_P_2) },
3938 { "(bad)", { XX } },
3939 },
3940
3941 /* PREFIX_VEX_DD */
3942 {
3943 { "(bad)", { XX } },
3944 { "(bad)", { XX } },
3945 { VEX_LEN_TABLE (VEX_LEN_DD_P_2) },
3946 { "(bad)", { XX } },
3947 },
3948
3949 /* PREFIX_VEX_DE */
3950 {
3951 { "(bad)", { XX } },
3952 { "(bad)", { XX } },
3953 { VEX_LEN_TABLE (VEX_LEN_DE_P_2) },
3954 { "(bad)", { XX } },
3955 },
3956
3957 /* PREFIX_VEX_DF */
3958 {
3959 { "(bad)", { XX } },
3960 { "(bad)", { XX } },
3961 { VEX_LEN_TABLE (VEX_LEN_DF_P_2) },
3962 { "(bad)", { XX } },
3963 },
3964
3965 /* PREFIX_VEX_E0 */
3966 {
3967 { "(bad)", { XX } },
3968 { "(bad)", { XX } },
3969 { VEX_LEN_TABLE (VEX_LEN_E0_P_2) },
3970 { "(bad)", { XX } },
3971 },
3972
3973 /* PREFIX_VEX_E1 */
3974 {
3975 { "(bad)", { XX } },
3976 { "(bad)", { XX } },
3977 { VEX_LEN_TABLE (VEX_LEN_E1_P_2) },
3978 { "(bad)", { XX } },
3979 },
3980
3981 /* PREFIX_VEX_E2 */
3982 {
3983 { "(bad)", { XX } },
3984 { "(bad)", { XX } },
3985 { VEX_LEN_TABLE (VEX_LEN_E2_P_2) },
3986 { "(bad)", { XX } },
3987 },
3988
3989 /* PREFIX_VEX_E3 */
3990 {
3991 { "(bad)", { XX } },
3992 { "(bad)", { XX } },
3993 { VEX_LEN_TABLE (VEX_LEN_E3_P_2) },
3994 { "(bad)", { XX } },
3995 },
3996
3997 /* PREFIX_VEX_E4 */
3998 {
3999 { "(bad)", { XX } },
4000 { "(bad)", { XX } },
4001 { VEX_LEN_TABLE (VEX_LEN_E4_P_2) },
4002 { "(bad)", { XX } },
4003 },
4004
4005 /* PREFIX_VEX_E5 */
4006 {
4007 { "(bad)", { XX } },
4008 { "(bad)", { XX } },
4009 { VEX_LEN_TABLE (VEX_LEN_E5_P_2) },
4010 { "(bad)", { XX } },
4011 },
4012
4013 /* PREFIX_VEX_E6 */
4014 {
4015 { "(bad)", { XX } },
4016 { "vcvtdq2pd", { XM, EXxmmq } },
4017 { "vcvttpd2dq%XY", { XMM, EXx } },
4018 { "vcvtpd2dq%XY", { XMM, EXx } },
4019 },
4020
4021 /* PREFIX_VEX_E7 */
4022 {
4023 { "(bad)", { XX } },
4024 { "(bad)", { XX } },
4025 { MOD_TABLE (MOD_VEX_E7_PREFIX_2) },
4026 { "(bad)", { XX } },
4027 },
4028
4029 /* PREFIX_VEX_E8 */
4030 {
4031 { "(bad)", { XX } },
4032 { "(bad)", { XX } },
4033 { VEX_LEN_TABLE (VEX_LEN_E8_P_2) },
4034 { "(bad)", { XX } },
4035 },
4036
4037 /* PREFIX_VEX_E9 */
4038 {
4039 { "(bad)", { XX } },
4040 { "(bad)", { XX } },
4041 { VEX_LEN_TABLE (VEX_LEN_E9_P_2) },
4042 { "(bad)", { XX } },
4043 },
4044
4045 /* PREFIX_VEX_EA */
4046 {
4047 { "(bad)", { XX } },
4048 { "(bad)", { XX } },
4049 { VEX_LEN_TABLE (VEX_LEN_EA_P_2) },
4050 { "(bad)", { XX } },
4051 },
4052
4053 /* PREFIX_VEX_EB */
4054 {
4055 { "(bad)", { XX } },
4056 { "(bad)", { XX } },
4057 { VEX_LEN_TABLE (VEX_LEN_EB_P_2) },
4058 { "(bad)", { XX } },
4059 },
4060
4061 /* PREFIX_VEX_EC */
4062 {
4063 { "(bad)", { XX } },
4064 { "(bad)", { XX } },
4065 { VEX_LEN_TABLE (VEX_LEN_EC_P_2) },
4066 { "(bad)", { XX } },
4067 },
4068
4069 /* PREFIX_VEX_ED */
4070 {
4071 { "(bad)", { XX } },
4072 { "(bad)", { XX } },
4073 { VEX_LEN_TABLE (VEX_LEN_ED_P_2) },
4074 { "(bad)", { XX } },
4075 },
4076
4077 /* PREFIX_VEX_EE */
4078 {
4079 { "(bad)", { XX } },
4080 { "(bad)", { XX } },
4081 { VEX_LEN_TABLE (VEX_LEN_EE_P_2) },
4082 { "(bad)", { XX } },
4083 },
4084
4085 /* PREFIX_VEX_EF */
4086 {
4087 { "(bad)", { XX } },
4088 { "(bad)", { XX } },
4089 { VEX_LEN_TABLE (VEX_LEN_EF_P_2) },
4090 { "(bad)", { XX } },
4091 },
4092
4093 /* PREFIX_VEX_F0 */
4094 {
4095 { "(bad)", { XX } },
4096 { "(bad)", { XX } },
4097 { "(bad)", { XX } },
4098 { MOD_TABLE (MOD_VEX_F0_PREFIX_3) },
4099 },
4100
4101 /* PREFIX_VEX_F1 */
4102 {
4103 { "(bad)", { XX } },
4104 { "(bad)", { XX } },
4105 { VEX_LEN_TABLE (VEX_LEN_F1_P_2) },
4106 { "(bad)", { XX } },
4107 },
4108
4109 /* PREFIX_VEX_F2 */
4110 {
4111 { "(bad)", { XX } },
4112 { "(bad)", { XX } },
4113 { VEX_LEN_TABLE (VEX_LEN_F2_P_2) },
4114 { "(bad)", { XX } },
4115 },
4116
4117 /* PREFIX_VEX_F3 */
4118 {
4119 { "(bad)", { XX } },
4120 { "(bad)", { XX } },
4121 { VEX_LEN_TABLE (VEX_LEN_F3_P_2) },
4122 { "(bad)", { XX } },
4123 },
4124
4125 /* PREFIX_VEX_F4 */
4126 {
4127 { "(bad)", { XX } },
4128 { "(bad)", { XX } },
4129 { VEX_LEN_TABLE (VEX_LEN_F4_P_2) },
4130 { "(bad)", { XX } },
4131 },
4132
4133 /* PREFIX_VEX_F5 */
4134 {
4135 { "(bad)", { XX } },
4136 { "(bad)", { XX } },
4137 { VEX_LEN_TABLE (VEX_LEN_F5_P_2) },
4138 { "(bad)", { XX } },
4139 },
4140
4141 /* PREFIX_VEX_F6 */
4142 {
4143 { "(bad)", { XX } },
4144 { "(bad)", { XX } },
4145 { VEX_LEN_TABLE (VEX_LEN_F6_P_2) },
4146 { "(bad)", { XX } },
4147 },
4148
4149 /* PREFIX_VEX_F7 */
4150 {
4151 { "(bad)", { XX } },
4152 { "(bad)", { XX } },
4153 { VEX_LEN_TABLE (VEX_LEN_F7_P_2) },
4154 { "(bad)", { XX } },
4155 },
4156
4157 /* PREFIX_VEX_F8 */
4158 {
4159 { "(bad)", { XX } },
4160 { "(bad)", { XX } },
4161 { VEX_LEN_TABLE (VEX_LEN_F8_P_2) },
4162 { "(bad)", { XX } },
4163 },
4164
4165 /* PREFIX_VEX_F9 */
4166 {
4167 { "(bad)", { XX } },
4168 { "(bad)", { XX } },
4169 { VEX_LEN_TABLE (VEX_LEN_F9_P_2) },
4170 { "(bad)", { XX } },
4171 },
4172
4173 /* PREFIX_VEX_FA */
4174 {
4175 { "(bad)", { XX } },
4176 { "(bad)", { XX } },
4177 { VEX_LEN_TABLE (VEX_LEN_FA_P_2) },
4178 { "(bad)", { XX } },
4179 },
4180
4181 /* PREFIX_VEX_FB */
4182 {
4183 { "(bad)", { XX } },
4184 { "(bad)", { XX } },
4185 { VEX_LEN_TABLE (VEX_LEN_FB_P_2) },
4186 { "(bad)", { XX } },
4187 },
4188
4189 /* PREFIX_VEX_FC */
4190 {
4191 { "(bad)", { XX } },
4192 { "(bad)", { XX } },
4193 { VEX_LEN_TABLE (VEX_LEN_FC_P_2) },
4194 { "(bad)", { XX } },
4195 },
4196
4197 /* PREFIX_VEX_FD */
4198 {
4199 { "(bad)", { XX } },
4200 { "(bad)", { XX } },
4201 { VEX_LEN_TABLE (VEX_LEN_FD_P_2) },
4202 { "(bad)", { XX } },
4203 },
4204
4205 /* PREFIX_VEX_FE */
4206 {
4207 { "(bad)", { XX } },
4208 { "(bad)", { XX } },
4209 { VEX_LEN_TABLE (VEX_LEN_FE_P_2) },
4210 { "(bad)", { XX } },
4211 },
4212
4213 /* PREFIX_VEX_3800 */
4214 {
4215 { "(bad)", { XX } },
4216 { "(bad)", { XX } },
4217 { VEX_LEN_TABLE (VEX_LEN_3800_P_2) },
4218 { "(bad)", { XX } },
4219 },
4220
4221 /* PREFIX_VEX_3801 */
4222 {
4223 { "(bad)", { XX } },
4224 { "(bad)", { XX } },
4225 { VEX_LEN_TABLE (VEX_LEN_3801_P_2) },
4226 { "(bad)", { XX } },
4227 },
4228
4229 /* PREFIX_VEX_3802 */
4230 {
4231 { "(bad)", { XX } },
4232 { "(bad)", { XX } },
4233 { VEX_LEN_TABLE (VEX_LEN_3802_P_2) },
4234 { "(bad)", { XX } },
4235 },
4236
4237 /* PREFIX_VEX_3803 */
4238 {
4239 { "(bad)", { XX } },
4240 { "(bad)", { XX } },
4241 { VEX_LEN_TABLE (VEX_LEN_3803_P_2) },
4242 { "(bad)", { XX } },
4243 },
4244
4245 /* PREFIX_VEX_3804 */
4246 {
4247 { "(bad)", { XX } },
4248 { "(bad)", { XX } },
4249 { VEX_LEN_TABLE (VEX_LEN_3804_P_2) },
4250 { "(bad)", { XX } },
4251 },
4252
4253 /* PREFIX_VEX_3805 */
4254 {
4255 { "(bad)", { XX } },
4256 { "(bad)", { XX } },
4257 { VEX_LEN_TABLE (VEX_LEN_3805_P_2) },
4258 { "(bad)", { XX } },
4259 },
4260
4261 /* PREFIX_VEX_3806 */
4262 {
4263 { "(bad)", { XX } },
4264 { "(bad)", { XX } },
4265 { VEX_LEN_TABLE (VEX_LEN_3806_P_2) },
4266 { "(bad)", { XX } },
4267 },
4268
4269 /* PREFIX_VEX_3807 */
4270 {
4271 { "(bad)", { XX } },
4272 { "(bad)", { XX } },
4273 { VEX_LEN_TABLE (VEX_LEN_3807_P_2) },
4274 { "(bad)", { XX } },
4275 },
4276
4277 /* PREFIX_VEX_3808 */
4278 {
4279 { "(bad)", { XX } },
4280 { "(bad)", { XX } },
4281 { VEX_LEN_TABLE (VEX_LEN_3808_P_2) },
4282 { "(bad)", { XX } },
4283 },
4284
4285 /* PREFIX_VEX_3809 */
4286 {
4287 { "(bad)", { XX } },
4288 { "(bad)", { XX } },
4289 { VEX_LEN_TABLE (VEX_LEN_3809_P_2) },
4290 { "(bad)", { XX } },
4291 },
4292
4293 /* PREFIX_VEX_380A */
4294 {
4295 { "(bad)", { XX } },
4296 { "(bad)", { XX } },
4297 { VEX_LEN_TABLE (VEX_LEN_380A_P_2) },
4298 { "(bad)", { XX } },
4299 },
4300
4301 /* PREFIX_VEX_380B */
4302 {
4303 { "(bad)", { XX } },
4304 { "(bad)", { XX } },
4305 { VEX_LEN_TABLE (VEX_LEN_380B_P_2) },
4306 { "(bad)", { XX } },
4307 },
4308
4309 /* PREFIX_VEX_380C */
4310 {
4311 { "(bad)", { XX } },
4312 { "(bad)", { XX } },
4313 { "vpermilps", { XM, Vex, EXx } },
4314 { "(bad)", { XX } },
4315 },
4316
4317 /* PREFIX_VEX_380D */
4318 {
4319 { "(bad)", { XX } },
4320 { "(bad)", { XX } },
4321 { "vpermilpd", { XM, Vex, EXx } },
4322 { "(bad)", { XX } },
4323 },
4324
4325 /* PREFIX_VEX_380E */
4326 {
4327 { "(bad)", { XX } },
4328 { "(bad)", { XX } },
4329 { "vtestps", { XM, EXx } },
4330 { "(bad)", { XX } },
4331 },
4332
4333 /* PREFIX_VEX_380F */
4334 {
4335 { "(bad)", { XX } },
4336 { "(bad)", { XX } },
4337 { "vtestpd", { XM, EXx } },
4338 { "(bad)", { XX } },
4339 },
4340
4341 /* PREFIX_VEX_3817 */
4342 {
4343 { "(bad)", { XX } },
4344 { "(bad)", { XX } },
4345 { "vptest", { XM, EXx } },
4346 { "(bad)", { XX } },
4347 },
4348
4349 /* PREFIX_VEX_3818 */
4350 {
4351 { "(bad)", { XX } },
4352 { "(bad)", { XX } },
4353 { MOD_TABLE (MOD_VEX_3818_PREFIX_2) },
4354 { "(bad)", { XX } },
4355 },
4356
4357 /* PREFIX_VEX_3819 */
4358 {
4359 { "(bad)", { XX } },
4360 { "(bad)", { XX } },
4361 { MOD_TABLE (MOD_VEX_3819_PREFIX_2) },
4362 { "(bad)", { XX } },
4363 },
4364
4365 /* PREFIX_VEX_381A */
4366 {
4367 { "(bad)", { XX } },
4368 { "(bad)", { XX } },
4369 { MOD_TABLE (MOD_VEX_381A_PREFIX_2) },
4370 { "(bad)", { XX } },
4371 },
4372
4373 /* PREFIX_VEX_381C */
4374 {
4375 { "(bad)", { XX } },
4376 { "(bad)", { XX } },
4377 { VEX_LEN_TABLE (VEX_LEN_381C_P_2) },
4378 { "(bad)", { XX } },
4379 },
4380
4381 /* PREFIX_VEX_381D */
4382 {
4383 { "(bad)", { XX } },
4384 { "(bad)", { XX } },
4385 { VEX_LEN_TABLE (VEX_LEN_381D_P_2) },
4386 { "(bad)", { XX } },
4387 },
4388
4389 /* PREFIX_VEX_381E */
4390 {
4391 { "(bad)", { XX } },
4392 { "(bad)", { XX } },
4393 { VEX_LEN_TABLE (VEX_LEN_381E_P_2) },
4394 { "(bad)", { XX } },
4395 },
4396
4397 /* PREFIX_VEX_3820 */
4398 {
4399 { "(bad)", { XX } },
4400 { "(bad)", { XX } },
4401 { VEX_LEN_TABLE (VEX_LEN_3820_P_2) },
4402 { "(bad)", { XX } },
4403 },
4404
4405 /* PREFIX_VEX_3821 */
4406 {
4407 { "(bad)", { XX } },
4408 { "(bad)", { XX } },
4409 { VEX_LEN_TABLE (VEX_LEN_3821_P_2) },
4410 { "(bad)", { XX } },
4411 },
4412
4413 /* PREFIX_VEX_3822 */
4414 {
4415 { "(bad)", { XX } },
4416 { "(bad)", { XX } },
4417 { VEX_LEN_TABLE (VEX_LEN_3822_P_2) },
4418 { "(bad)", { XX } },
4419 },
4420
4421 /* PREFIX_VEX_3823 */
4422 {
4423 { "(bad)", { XX } },
4424 { "(bad)", { XX } },
4425 { VEX_LEN_TABLE (VEX_LEN_3823_P_2) },
4426 { "(bad)", { XX } },
4427 },
4428
4429 /* PREFIX_VEX_3824 */
4430 {
4431 { "(bad)", { XX } },
4432 { "(bad)", { XX } },
4433 { VEX_LEN_TABLE (VEX_LEN_3824_P_2) },
4434 { "(bad)", { XX } },
4435 },
4436
4437 /* PREFIX_VEX_3825 */
4438 {
4439 { "(bad)", { XX } },
4440 { "(bad)", { XX } },
4441 { VEX_LEN_TABLE (VEX_LEN_3825_P_2) },
4442 { "(bad)", { XX } },
4443 },
4444
4445 /* PREFIX_VEX_3828 */
4446 {
4447 { "(bad)", { XX } },
4448 { "(bad)", { XX } },
4449 { VEX_LEN_TABLE (VEX_LEN_3828_P_2) },
4450 { "(bad)", { XX } },
4451 },
4452
4453 /* PREFIX_VEX_3829 */
4454 {
4455 { "(bad)", { XX } },
4456 { "(bad)", { XX } },
4457 { VEX_LEN_TABLE (VEX_LEN_3829_P_2) },
4458 { "(bad)", { XX } },
4459 },
4460
4461 /* PREFIX_VEX_382A */
4462 {
4463 { "(bad)", { XX } },
4464 { "(bad)", { XX } },
4465 { MOD_TABLE (MOD_VEX_382A_PREFIX_2) },
4466 { "(bad)", { XX } },
4467 },
4468
4469 /* PREFIX_VEX_382B */
4470 {
4471 { "(bad)", { XX } },
4472 { "(bad)", { XX } },
4473 { VEX_LEN_TABLE (VEX_LEN_382B_P_2) },
4474 { "(bad)", { XX } },
4475 },
4476
4477 /* PREFIX_VEX_382C */
4478 {
4479 { "(bad)", { XX } },
4480 { "(bad)", { XX } },
4481 { MOD_TABLE (MOD_VEX_382C_PREFIX_2) },
4482 { "(bad)", { XX } },
4483 },
4484
4485 /* PREFIX_VEX_382D */
4486 {
4487 { "(bad)", { XX } },
4488 { "(bad)", { XX } },
4489 { MOD_TABLE (MOD_VEX_382D_PREFIX_2) },
4490 { "(bad)", { XX } },
4491 },
4492
4493 /* PREFIX_VEX_382E */
4494 {
4495 { "(bad)", { XX } },
4496 { "(bad)", { XX } },
4497 { MOD_TABLE (MOD_VEX_382E_PREFIX_2) },
4498 { "(bad)", { XX } },
4499 },
4500
4501 /* PREFIX_VEX_382F */
4502 {
4503 { "(bad)", { XX } },
4504 { "(bad)", { XX } },
4505 { MOD_TABLE (MOD_VEX_382F_PREFIX_2) },
4506 { "(bad)", { XX } },
4507 },
4508
4509 /* PREFIX_VEX_3830 */
4510 {
4511 { "(bad)", { XX } },
4512 { "(bad)", { XX } },
4513 { VEX_LEN_TABLE (VEX_LEN_3830_P_2) },
4514 { "(bad)", { XX } },
4515 },
4516
4517 /* PREFIX_VEX_3831 */
4518 {
4519 { "(bad)", { XX } },
4520 { "(bad)", { XX } },
4521 { VEX_LEN_TABLE (VEX_LEN_3831_P_2) },
4522 { "(bad)", { XX } },
4523 },
4524
4525 /* PREFIX_VEX_3832 */
4526 {
4527 { "(bad)", { XX } },
4528 { "(bad)", { XX } },
4529 { VEX_LEN_TABLE (VEX_LEN_3832_P_2) },
4530 { "(bad)", { XX } },
4531 },
4532
4533 /* PREFIX_VEX_3833 */
4534 {
4535 { "(bad)", { XX } },
4536 { "(bad)", { XX } },
4537 { VEX_LEN_TABLE (VEX_LEN_3833_P_2) },
4538 { "(bad)", { XX } },
4539 },
4540
4541 /* PREFIX_VEX_3834 */
4542 {
4543 { "(bad)", { XX } },
4544 { "(bad)", { XX } },
4545 { VEX_LEN_TABLE (VEX_LEN_3834_P_2) },
4546 { "(bad)", { XX } },
4547 },
4548
4549 /* PREFIX_VEX_3835 */
4550 {
4551 { "(bad)", { XX } },
4552 { "(bad)", { XX } },
4553 { VEX_LEN_TABLE (VEX_LEN_3835_P_2) },
4554 { "(bad)", { XX } },
4555 },
4556
4557 /* PREFIX_VEX_3837 */
4558 {
4559 { "(bad)", { XX } },
4560 { "(bad)", { XX } },
4561 { VEX_LEN_TABLE (VEX_LEN_3837_P_2) },
4562 { "(bad)", { XX } },
4563 },
4564
4565 /* PREFIX_VEX_3838 */
4566 {
4567 { "(bad)", { XX } },
4568 { "(bad)", { XX } },
4569 { VEX_LEN_TABLE (VEX_LEN_3838_P_2) },
4570 { "(bad)", { XX } },
4571 },
4572
4573 /* PREFIX_VEX_3839 */
4574 {
4575 { "(bad)", { XX } },
4576 { "(bad)", { XX } },
4577 { VEX_LEN_TABLE (VEX_LEN_3839_P_2) },
4578 { "(bad)", { XX } },
4579 },
4580
4581 /* PREFIX_VEX_383A */
4582 {
4583 { "(bad)", { XX } },
4584 { "(bad)", { XX } },
4585 { VEX_LEN_TABLE (VEX_LEN_383A_P_2) },
4586 { "(bad)", { XX } },
4587 },
4588
4589 /* PREFIX_VEX_383B */
4590 {
4591 { "(bad)", { XX } },
4592 { "(bad)", { XX } },
4593 { VEX_LEN_TABLE (VEX_LEN_383B_P_2) },
4594 { "(bad)", { XX } },
4595 },
4596
4597 /* PREFIX_VEX_383C */
4598 {
4599 { "(bad)", { XX } },
4600 { "(bad)", { XX } },
4601 { VEX_LEN_TABLE (VEX_LEN_383C_P_2) },
4602 { "(bad)", { XX } },
4603 },
4604
4605 /* PREFIX_VEX_383D */
4606 {
4607 { "(bad)", { XX } },
4608 { "(bad)", { XX } },
4609 { VEX_LEN_TABLE (VEX_LEN_383D_P_2) },
4610 { "(bad)", { XX } },
4611 },
4612
4613 /* PREFIX_VEX_383E */
4614 {
4615 { "(bad)", { XX } },
4616 { "(bad)", { XX } },
4617 { VEX_LEN_TABLE (VEX_LEN_383E_P_2) },
4618 { "(bad)", { XX } },
4619 },
4620
4621 /* PREFIX_VEX_383F */
4622 {
4623 { "(bad)", { XX } },
4624 { "(bad)", { XX } },
4625 { VEX_LEN_TABLE (VEX_LEN_383F_P_2) },
4626 { "(bad)", { XX } },
4627 },
4628
4629 /* PREFIX_VEX_3840 */
4630 {
4631 { "(bad)", { XX } },
4632 { "(bad)", { XX } },
4633 { VEX_LEN_TABLE (VEX_LEN_3840_P_2) },
4634 { "(bad)", { XX } },
4635 },
4636
4637 /* PREFIX_VEX_3841 */
4638 {
4639 { "(bad)", { XX } },
4640 { "(bad)", { XX } },
4641 { VEX_LEN_TABLE (VEX_LEN_3841_P_2) },
4642 { "(bad)", { XX } },
4643 },
4644
0bfee649 4645 /* PREFIX_VEX_3896 */
a5ff0eb2
L
4646 {
4647 { "(bad)", { XX } },
4648 { "(bad)", { XX } },
0bfee649 4649 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4650 { "(bad)", { XX } },
4651 },
4652
0bfee649 4653 /* PREFIX_VEX_3897 */
a5ff0eb2
L
4654 {
4655 { "(bad)", { XX } },
4656 { "(bad)", { XX } },
0bfee649 4657 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4658 { "(bad)", { XX } },
4659 },
4660
0bfee649 4661 /* PREFIX_VEX_3898 */
a5ff0eb2
L
4662 {
4663 { "(bad)", { XX } },
4664 { "(bad)", { XX } },
0bfee649 4665 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4666 { "(bad)", { XX } },
4667 },
4668
0bfee649 4669 /* PREFIX_VEX_3899 */
a5ff0eb2
L
4670 {
4671 { "(bad)", { XX } },
4672 { "(bad)", { XX } },
0bfee649 4673 { "vfmadd132s%XW", { XM, Vex, EXVexWdq } },
a5ff0eb2
L
4674 { "(bad)", { XX } },
4675 },
4676
0bfee649 4677 /* PREFIX_VEX_389A */
a5ff0eb2
L
4678 {
4679 { "(bad)", { XX } },
4680 { "(bad)", { XX } },
0bfee649 4681 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4682 { "(bad)", { XX } },
4683 },
4684
0bfee649 4685 /* PREFIX_VEX_389B */
c0f3af97
L
4686 {
4687 { "(bad)", { XX } },
4688 { "(bad)", { XX } },
0bfee649 4689 { "vfmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4690 { "(bad)", { XX } },
4691 },
4692
0bfee649 4693 /* PREFIX_VEX_389C */
c0f3af97
L
4694 {
4695 { "(bad)", { XX } },
4696 { "(bad)", { XX } },
0bfee649 4697 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4698 { "(bad)", { XX } },
4699 },
4700
0bfee649 4701 /* PREFIX_VEX_389D */
c0f3af97
L
4702 {
4703 { "(bad)", { XX } },
4704 { "(bad)", { XX } },
0bfee649 4705 { "vfnmadd132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4706 { "(bad)", { XX } },
4707 },
4708
0bfee649 4709 /* PREFIX_VEX_389E */
c0f3af97
L
4710 {
4711 { "(bad)", { XX } },
4712 { "(bad)", { XX } },
0bfee649 4713 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4714 { "(bad)", { XX } },
4715 },
4716
0bfee649 4717 /* PREFIX_VEX_389F */
c0f3af97
L
4718 {
4719 { "(bad)", { XX } },
4720 { "(bad)", { XX } },
0bfee649 4721 { "vfnmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4722 { "(bad)", { XX } },
4723 },
4724
0bfee649 4725 /* PREFIX_VEX_38A6 */
c0f3af97
L
4726 {
4727 { "(bad)", { XX } },
4728 { "(bad)", { XX } },
0bfee649 4729 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4730 { "(bad)", { XX } },
4731 },
4732
0bfee649 4733 /* PREFIX_VEX_38A7 */
c0f3af97
L
4734 {
4735 { "(bad)", { XX } },
4736 { "(bad)", { XX } },
0bfee649 4737 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4738 { "(bad)", { XX } },
4739 },
4740
0bfee649 4741 /* PREFIX_VEX_38A8 */
c0f3af97
L
4742 {
4743 { "(bad)", { XX } },
4744 { "(bad)", { XX } },
0bfee649 4745 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4746 { "(bad)", { XX } },
4747 },
4748
0bfee649 4749 /* PREFIX_VEX_38A9 */
c0f3af97
L
4750 {
4751 { "(bad)", { XX } },
4752 { "(bad)", { XX } },
0bfee649 4753 { "vfmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4754 { "(bad)", { XX } },
4755 },
4756
0bfee649 4757 /* PREFIX_VEX_38AA */
c0f3af97
L
4758 {
4759 { "(bad)", { XX } },
4760 { "(bad)", { XX } },
0bfee649 4761 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4762 { "(bad)", { XX } },
4763 },
4764
0bfee649 4765 /* PREFIX_VEX_38AB */
c0f3af97
L
4766 {
4767 { "(bad)", { XX } },
4768 { "(bad)", { XX } },
0bfee649 4769 { "vfmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4770 { "(bad)", { XX } },
4771 },
4772
0bfee649 4773 /* PREFIX_VEX_38AC */
c0f3af97
L
4774 {
4775 { "(bad)", { XX } },
4776 { "(bad)", { XX } },
0bfee649 4777 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4778 { "(bad)", { XX } },
4779 },
4780
0bfee649 4781 /* PREFIX_VEX_38AD */
c0f3af97
L
4782 {
4783 { "(bad)", { XX } },
4784 { "(bad)", { XX } },
0bfee649 4785 { "vfnmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4786 { "(bad)", { XX } },
4787 },
4788
0bfee649 4789 /* PREFIX_VEX_38AE */
c0f3af97
L
4790 {
4791 { "(bad)", { XX } },
4792 { "(bad)", { XX } },
0bfee649 4793 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4794 { "(bad)", { XX } },
4795 },
4796
0bfee649 4797 /* PREFIX_VEX_38AF */
c0f3af97
L
4798 {
4799 { "(bad)", { XX } },
4800 { "(bad)", { XX } },
0bfee649 4801 { "vfnmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4802 { "(bad)", { XX } },
4803 },
4804
0bfee649 4805 /* PREFIX_VEX_38B6 */
c0f3af97
L
4806 {
4807 { "(bad)", { XX } },
4808 { "(bad)", { XX } },
0bfee649 4809 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4810 { "(bad)", { XX } },
4811 },
4812
0bfee649 4813 /* PREFIX_VEX_38B7 */
c0f3af97
L
4814 {
4815 { "(bad)", { XX } },
4816 { "(bad)", { XX } },
0bfee649 4817 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4818 { "(bad)", { XX } },
4819 },
4820
0bfee649 4821 /* PREFIX_VEX_38B8 */
c0f3af97
L
4822 {
4823 { "(bad)", { XX } },
4824 { "(bad)", { XX } },
0bfee649 4825 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4826 { "(bad)", { XX } },
4827 },
4828
0bfee649 4829 /* PREFIX_VEX_38B9 */
c0f3af97
L
4830 {
4831 { "(bad)", { XX } },
4832 { "(bad)", { XX } },
0bfee649 4833 { "vfmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4834 { "(bad)", { XX } },
4835 },
4836
0bfee649 4837 /* PREFIX_VEX_38BA */
c0f3af97
L
4838 {
4839 { "(bad)", { XX } },
4840 { "(bad)", { XX } },
0bfee649 4841 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4842 { "(bad)", { XX } },
4843 },
4844
0bfee649 4845 /* PREFIX_VEX_38BB */
c0f3af97
L
4846 {
4847 { "(bad)", { XX } },
4848 { "(bad)", { XX } },
0bfee649 4849 { "vfmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4850 { "(bad)", { XX } },
4851 },
4852
0bfee649 4853 /* PREFIX_VEX_38BC */
c0f3af97
L
4854 {
4855 { "(bad)", { XX } },
4856 { "(bad)", { XX } },
0bfee649 4857 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4858 { "(bad)", { XX } },
4859 },
4860
0bfee649 4861 /* PREFIX_VEX_38BD */
c0f3af97
L
4862 {
4863 { "(bad)", { XX } },
4864 { "(bad)", { XX } },
0bfee649 4865 { "vfnmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4866 { "(bad)", { XX } },
4867 },
4868
0bfee649 4869 /* PREFIX_VEX_38BE */
c0f3af97
L
4870 {
4871 { "(bad)", { XX } },
4872 { "(bad)", { XX } },
0bfee649 4873 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4874 { "(bad)", { XX } },
4875 },
4876
0bfee649 4877 /* PREFIX_VEX_38BF */
c0f3af97
L
4878 {
4879 { "(bad)", { XX } },
4880 { "(bad)", { XX } },
0bfee649 4881 { "vfnmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4882 { "(bad)", { XX } },
4883 },
4884
0bfee649 4885 /* PREFIX_VEX_38DB */
c0f3af97
L
4886 {
4887 { "(bad)", { XX } },
4888 { "(bad)", { XX } },
0bfee649 4889 { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
c0f3af97
L
4890 { "(bad)", { XX } },
4891 },
4892
0bfee649 4893 /* PREFIX_VEX_38DC */
c0f3af97
L
4894 {
4895 { "(bad)", { XX } },
4896 { "(bad)", { XX } },
0bfee649 4897 { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
c0f3af97
L
4898 { "(bad)", { XX } },
4899 },
4900
0bfee649 4901 /* PREFIX_VEX_38DD */
c0f3af97
L
4902 {
4903 { "(bad)", { XX } },
4904 { "(bad)", { XX } },
0bfee649 4905 { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
c0f3af97
L
4906 { "(bad)", { XX } },
4907 },
4908
0bfee649 4909 /* PREFIX_VEX_38DE */
c0f3af97
L
4910 {
4911 { "(bad)", { XX } },
4912 { "(bad)", { XX } },
0bfee649 4913 { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
c0f3af97
L
4914 { "(bad)", { XX } },
4915 },
4916
0bfee649 4917 /* PREFIX_VEX_38DF */
c0f3af97
L
4918 {
4919 { "(bad)", { XX } },
4920 { "(bad)", { XX } },
0bfee649 4921 { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
c0f3af97
L
4922 { "(bad)", { XX } },
4923 },
4924
0bfee649 4925 /* PREFIX_VEX_3A04 */
c0f3af97
L
4926 {
4927 { "(bad)", { XX } },
4928 { "(bad)", { XX } },
0bfee649 4929 { "vpermilps", { XM, EXx, Ib } },
c0f3af97
L
4930 { "(bad)", { XX } },
4931 },
4932
0bfee649 4933 /* PREFIX_VEX_3A05 */
c0f3af97
L
4934 {
4935 { "(bad)", { XX } },
4936 { "(bad)", { XX } },
0bfee649 4937 { "vpermilpd", { XM, EXx, Ib } },
c0f3af97
L
4938 { "(bad)", { XX } },
4939 },
4940
0bfee649 4941 /* PREFIX_VEX_3A06 */
c0f3af97
L
4942 {
4943 { "(bad)", { XX } },
4944 { "(bad)", { XX } },
0bfee649 4945 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) },
c0f3af97
L
4946 { "(bad)", { XX } },
4947 },
4948
0bfee649 4949 /* PREFIX_VEX_3A08 */
c0f3af97
L
4950 {
4951 { "(bad)", { XX } },
4952 { "(bad)", { XX } },
0bfee649 4953 { "vroundps", { XM, EXx, Ib } },
c0f3af97
L
4954 { "(bad)", { XX } },
4955 },
4956
0bfee649 4957 /* PREFIX_VEX_3A09 */
c0f3af97
L
4958 {
4959 { "(bad)", { XX } },
4960 { "(bad)", { XX } },
0bfee649 4961 { "vroundpd", { XM, EXx, Ib } },
c0f3af97
L
4962 { "(bad)", { XX } },
4963 },
4964
0bfee649 4965 /* PREFIX_VEX_3A0A */
c0f3af97
L
4966 {
4967 { "(bad)", { XX } },
4968 { "(bad)", { XX } },
0bfee649
L
4969 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) },
4970 { "(bad)", { XX } },
4971 },
4972
4973 /* PREFIX_VEX_3A0B */
4974 {
4975 { "(bad)", { XX } },
4976 { "(bad)", { XX } },
4977 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) },
4978 { "(bad)", { XX } },
4979 },
4980
4981 /* PREFIX_VEX_3A0C */
4982 {
4983 { "(bad)", { XX } },
4984 { "(bad)", { XX } },
4985 { "vblendps", { XM, Vex, EXx, Ib } },
4986 { "(bad)", { XX } },
4987 },
4988
4989 /* PREFIX_VEX_3A0D */
4990 {
4991 { "(bad)", { XX } },
4992 { "(bad)", { XX } },
4993 { "vblendpd", { XM, Vex, EXx, Ib } },
c0f3af97
L
4994 { "(bad)", { XX } },
4995 },
4996
0bfee649
L
4997 /* PREFIX_VEX_3A0E */
4998 {
4999 { "(bad)", { XX } },
5000 { "(bad)", { XX } },
5001 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) },
5002 { "(bad)", { XX } },
5003 },
5004
5005 /* PREFIX_VEX_3A0F */
5006 {
5007 { "(bad)", { XX } },
5008 { "(bad)", { XX } },
5009 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) },
5010 { "(bad)", { XX } },
5011 },
5012
5013 /* PREFIX_VEX_3A14 */
5014 {
5015 { "(bad)", { XX } },
5016 { "(bad)", { XX } },
5017 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) },
5018 { "(bad)", { XX } },
5019 },
5020
5021 /* PREFIX_VEX_3A15 */
5022 {
5023 { "(bad)", { XX } },
5024 { "(bad)", { XX } },
5025 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) },
5026 { "(bad)", { XX } },
5027 },
5028
5029 /* PREFIX_VEX_3A16 */
c0f3af97
L
5030 {
5031 { "(bad)", { XX } },
5032 { "(bad)", { XX } },
0bfee649 5033 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) },
c0f3af97
L
5034 { "(bad)", { XX } },
5035 },
5036
0bfee649 5037 /* PREFIX_VEX_3A17 */
c0f3af97
L
5038 {
5039 { "(bad)", { XX } },
5040 { "(bad)", { XX } },
0bfee649 5041 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) },
c0f3af97
L
5042 { "(bad)", { XX } },
5043 },
5044
0bfee649 5045 /* PREFIX_VEX_3A18 */
c0f3af97
L
5046 {
5047 { "(bad)", { XX } },
5048 { "(bad)", { XX } },
0bfee649 5049 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) },
c0f3af97
L
5050 { "(bad)", { XX } },
5051 },
5052
0bfee649 5053 /* PREFIX_VEX_3A19 */
c0f3af97
L
5054 {
5055 { "(bad)", { XX } },
5056 { "(bad)", { XX } },
0bfee649 5057 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) },
c0f3af97
L
5058 { "(bad)", { XX } },
5059 },
5060
0bfee649 5061 /* PREFIX_VEX_3A20 */
c0f3af97
L
5062 {
5063 { "(bad)", { XX } },
5064 { "(bad)", { XX } },
0bfee649 5065 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) },
c0f3af97
L
5066 { "(bad)", { XX } },
5067 },
5068
0bfee649 5069 /* PREFIX_VEX_3A21 */
c0f3af97
L
5070 {
5071 { "(bad)", { XX } },
5072 { "(bad)", { XX } },
0bfee649 5073 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) },
c0f3af97
L
5074 { "(bad)", { XX } },
5075 },
5076
0bfee649
L
5077 /* PREFIX_VEX_3A22 */
5078 {
5079 { "(bad)", { XX } },
5080 { "(bad)", { XX } },
5081 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) },
5082 { "(bad)", { XX } },
5083 },
5084
5085 /* PREFIX_VEX_3A40 */
c0f3af97
L
5086 {
5087 { "(bad)", { XX } },
5088 { "(bad)", { XX } },
0bfee649 5089 { "vdpps", { XM, Vex, EXx, Ib } },
c0f3af97
L
5090 { "(bad)", { XX } },
5091 },
5092
0bfee649 5093 /* PREFIX_VEX_3A41 */
c0f3af97
L
5094 {
5095 { "(bad)", { XX } },
5096 { "(bad)", { XX } },
0bfee649 5097 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) },
c0f3af97
L
5098 { "(bad)", { XX } },
5099 },
5100
0bfee649 5101 /* PREFIX_VEX_3A42 */
c0f3af97
L
5102 {
5103 { "(bad)", { XX } },
5104 { "(bad)", { XX } },
0bfee649 5105 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) },
c0f3af97
L
5106 { "(bad)", { XX } },
5107 },
5108
ce2f5b3c
L
5109 /* PREFIX_VEX_3A44 */
5110 {
5111 { "(bad)", { XX } },
5112 { "(bad)", { XX } },
5113 { VEX_LEN_TABLE (VEX_LEN_3A44_P_2) },
5114 { "(bad)", { XX } },
5115 },
5116
0bfee649 5117 /* PREFIX_VEX_3A4A */
c0f3af97
L
5118 {
5119 { "(bad)", { XX } },
5120 { "(bad)", { XX } },
0bfee649 5121 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5122 { "(bad)", { XX } },
5123 },
5124
0bfee649 5125 /* PREFIX_VEX_3A4B */
c0f3af97
L
5126 {
5127 { "(bad)", { XX } },
5128 { "(bad)", { XX } },
0bfee649 5129 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5130 { "(bad)", { XX } },
5131 },
5132
0bfee649 5133 /* PREFIX_VEX_3A4C */
c0f3af97
L
5134 {
5135 { "(bad)", { XX } },
5136 { "(bad)", { XX } },
0bfee649 5137 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) },
c0f3af97
L
5138 { "(bad)", { XX } },
5139 },
5140
922d8de8
DR
5141 /* PREFIX_VEX_3A5C */
5142 {
5143 { "(bad)", { XX } },
5144 { "(bad)", { XX } },
206c2556 5145 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5146 { "(bad)", { XX } },
5147 },
5148
5149 /* PREFIX_VEX_3A5D */
5150 {
5151 { "(bad)", { XX } },
5152 { "(bad)", { XX } },
206c2556 5153 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5154 { "(bad)", { XX } },
5155 },
5156
5157 /* PREFIX_VEX_3A5E */
5158 {
5159 { "(bad)", { XX } },
5160 { "(bad)", { XX } },
206c2556 5161 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5162 { "(bad)", { XX } },
5163 },
5164
5165 /* PREFIX_VEX_3A5F */
5166 {
5167 { "(bad)", { XX } },
5168 { "(bad)", { XX } },
206c2556 5169 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5170 { "(bad)", { XX } },
5171 },
5172
0bfee649 5173 /* PREFIX_VEX_3A60 */
c0f3af97
L
5174 {
5175 { "(bad)", { XX } },
5176 { "(bad)", { XX } },
0bfee649 5177 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) },
c0f3af97
L
5178 { "(bad)", { XX } },
5179 },
5180
0bfee649 5181 /* PREFIX_VEX_3A61 */
c0f3af97
L
5182 {
5183 { "(bad)", { XX } },
5184 { "(bad)", { XX } },
0bfee649 5185 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) },
c0f3af97
L
5186 { "(bad)", { XX } },
5187 },
5188
0bfee649 5189 /* PREFIX_VEX_3A62 */
c0f3af97
L
5190 {
5191 { "(bad)", { XX } },
5192 { "(bad)", { XX } },
0bfee649 5193 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) },
c0f3af97
L
5194 { "(bad)", { XX } },
5195 },
5196
0bfee649 5197 /* PREFIX_VEX_3A63 */
c0f3af97
L
5198 {
5199 { "(bad)", { XX } },
5200 { "(bad)", { XX } },
0bfee649 5201 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) },
c0f3af97
L
5202 { "(bad)", { XX } },
5203 },
a5ff0eb2 5204
922d8de8
DR
5205 /* PREFIX_VEX_3A68 */
5206 {
5207 { "(bad)", { XX } },
5208 { "(bad)", { XX } },
206c2556 5209 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5210 { "(bad)", { XX } },
5211 },
5212
5213 /* PREFIX_VEX_3A69 */
5214 {
5215 { "(bad)", { XX } },
5216 { "(bad)", { XX } },
206c2556 5217 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5218 { "(bad)", { XX } },
5219 },
5220
5221 /* PREFIX_VEX_3A6A */
5222 {
5223 { "(bad)", { XX } },
5224 { "(bad)", { XX } },
5225 { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2) },
5226 { "(bad)", { XX } },
5227 },
5228
5229 /* PREFIX_VEX_3A6B */
5230 {
5231 { "(bad)", { XX } },
5232 { "(bad)", { XX } },
5233 { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2) },
5234 { "(bad)", { XX } },
5235 },
5236
5237 /* PREFIX_VEX_3A6C */
5238 {
5239 { "(bad)", { XX } },
5240 { "(bad)", { XX } },
206c2556 5241 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5242 { "(bad)", { XX } },
5243 },
5244
5245 /* PREFIX_VEX_3A6D */
5246 {
5247 { "(bad)", { XX } },
5248 { "(bad)", { XX } },
206c2556 5249 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5250 { "(bad)", { XX } },
5251 },
5252
5253 /* PREFIX_VEX_3A6E */
5254 {
5255 { "(bad)", { XX } },
5256 { "(bad)", { XX } },
5257 { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2) },
5258 { "(bad)", { XX } },
5259 },
5260
5261 /* PREFIX_VEX_3A6F */
5262 {
5263 { "(bad)", { XX } },
5264 { "(bad)", { XX } },
5265 { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2) },
5266 { "(bad)", { XX } },
5267 },
5268
5269 /* PREFIX_VEX_3A78 */
5270 {
5271 { "(bad)", { XX } },
5272 { "(bad)", { XX } },
206c2556 5273 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5274 { "(bad)", { XX } },
5275 },
5276
5277 /* PREFIX_VEX_3A79 */
5278 {
5279 { "(bad)", { XX } },
5280 { "(bad)", { XX } },
206c2556 5281 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5282 { "(bad)", { XX } },
5283 },
5284
5285 /* PREFIX_VEX_3A7A */
5286 {
5287 { "(bad)", { XX } },
5288 { "(bad)", { XX } },
5289 { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2) },
5290 { "(bad)", { XX } },
5291 },
5292
5293 /* PREFIX_VEX_3A7B */
5294 {
5295 { "(bad)", { XX } },
5296 { "(bad)", { XX } },
5297 { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2) },
5298 { "(bad)", { XX } },
5299 },
5300
5301 /* PREFIX_VEX_3A7C */
5302 {
5303 { "(bad)", { XX } },
5304 { "(bad)", { XX } },
206c2556 5305 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5306 { "(bad)", { XX } },
5307 },
5308
5309 /* PREFIX_VEX_3A7D */
5310 {
5311 { "(bad)", { XX } },
5312 { "(bad)", { XX } },
206c2556 5313 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5314 { "(bad)", { XX } },
5315 },
5316
5317 /* PREFIX_VEX_3A7E */
5318 {
5319 { "(bad)", { XX } },
5320 { "(bad)", { XX } },
5321 { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2) },
5322 { "(bad)", { XX } },
5323 },
5324
5325 /* PREFIX_VEX_3A7F */
5326 {
5327 { "(bad)", { XX } },
5328 { "(bad)", { XX } },
5329 { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) },
5330 { "(bad)", { XX } },
5331 },
5332
a5ff0eb2
L
5333 /* PREFIX_VEX_3ADF */
5334 {
5335 { "(bad)", { XX } },
5336 { "(bad)", { XX } },
5337 { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
5338 { "(bad)", { XX } },
5339 },
c0f3af97
L
5340};
5341
5342static const struct dis386 x86_64_table[][2] = {
5343 /* X86_64_06 */
5344 {
5345 { "push{T|}", { es } },
5346 { "(bad)", { XX } },
5347 },
5348
5349 /* X86_64_07 */
5350 {
5351 { "pop{T|}", { es } },
5352 { "(bad)", { XX } },
5353 },
5354
5355 /* X86_64_0D */
5356 {
5357 { "push{T|}", { cs } },
5358 { "(bad)", { XX } },
5359 },
5360
5361 /* X86_64_16 */
5362 {
5363 { "push{T|}", { ss } },
5364 { "(bad)", { XX } },
5365 },
5366
5367 /* X86_64_17 */
5368 {
5369 { "pop{T|}", { ss } },
5370 { "(bad)", { XX } },
5371 },
5372
5373 /* X86_64_1E */
5374 {
5375 { "push{T|}", { ds } },
5376 { "(bad)", { XX } },
5377 },
5378
5379 /* X86_64_1F */
5380 {
5381 { "pop{T|}", { ds } },
5382 { "(bad)", { XX } },
5383 },
5384
5385 /* X86_64_27 */
5386 {
5387 { "daa", { XX } },
5388 { "(bad)", { XX } },
5389 },
5390
5391 /* X86_64_2F */
5392 {
5393 { "das", { XX } },
5394 { "(bad)", { XX } },
5395 },
5396
5397 /* X86_64_37 */
5398 {
5399 { "aaa", { XX } },
5400 { "(bad)", { XX } },
5401 },
5402
5403 /* X86_64_3F */
5404 {
5405 { "aas", { XX } },
5406 { "(bad)", { XX } },
5407 },
5408
5409 /* X86_64_60 */
5410 {
5411 { "pusha{P|}", { XX } },
5412 { "(bad)", { XX } },
5413 },
5414
5415 /* X86_64_61 */
5416 {
5417 { "popa{P|}", { XX } },
5418 { "(bad)", { XX } },
5419 },
5420
5421 /* X86_64_62 */
5422 {
5423 { MOD_TABLE (MOD_62_32BIT) },
5424 { "(bad)", { XX } },
5425 },
5426
5427 /* X86_64_63 */
5428 {
5429 { "arpl", { Ew, Gw } },
5430 { "movs{lq|xd}", { Gv, Ed } },
5431 },
5432
5433 /* X86_64_6D */
5434 {
5435 { "ins{R|}", { Yzr, indirDX } },
5436 { "ins{G|}", { Yzr, indirDX } },
5437 },
5438
5439 /* X86_64_6F */
5440 {
5441 { "outs{R|}", { indirDXr, Xz } },
5442 { "outs{G|}", { indirDXr, Xz } },
5443 },
5444
5445 /* X86_64_9A */
5446 {
5447 { "Jcall{T|}", { Ap } },
5448 { "(bad)", { XX } },
5449 },
5450
5451 /* X86_64_C4 */
5452 {
5453 { MOD_TABLE (MOD_C4_32BIT) },
5454 { VEX_C4_TABLE (VEX_0F) },
5455 },
5456
5457 /* X86_64_C5 */
5458 {
5459 { MOD_TABLE (MOD_C5_32BIT) },
5460 { VEX_C5_TABLE (VEX_0F) },
5461 },
5462
5463 /* X86_64_CE */
5464 {
5465 { "into", { XX } },
5466 { "(bad)", { XX } },
5467 },
5468
5469 /* X86_64_D4 */
5470 {
5471 { "aam", { sIb } },
5472 { "(bad)", { XX } },
5473 },
5474
5475 /* X86_64_D5 */
5476 {
5477 { "aad", { sIb } },
5478 { "(bad)", { XX } },
5479 },
5480
5481 /* X86_64_EA */
5482 {
5483 { "Jjmp{T|}", { Ap } },
5484 { "(bad)", { XX } },
5485 },
5486
5487 /* X86_64_0F01_REG_0 */
5488 {
5489 { "sgdt{Q|IQ}", { M } },
5490 { "sgdt", { M } },
5491 },
5492
5493 /* X86_64_0F01_REG_1 */
5494 {
5495 { "sidt{Q|IQ}", { M } },
5496 { "sidt", { M } },
5497 },
5498
5499 /* X86_64_0F01_REG_2 */
5500 {
5501 { "lgdt{Q|Q}", { M } },
5502 { "lgdt", { M } },
5503 },
5504
5505 /* X86_64_0F01_REG_3 */
5506 {
5507 { "lidt{Q|Q}", { M } },
5508 { "lidt", { M } },
5509 },
5510};
5511
5512static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5513
5514 /* THREE_BYTE_0F38 */
c0f3af97
L
5515 {
5516 /* 00 */
c1e679ec
DR
5517 { "pshufb", { MX, EM } },
5518 { "phaddw", { MX, EM } },
5519 { "phaddd", { MX, EM } },
5520 { "phaddsw", { MX, EM } },
5521 { "pmaddubsw", { MX, EM } },
5522 { "phsubw", { MX, EM } },
5523 { "phsubd", { MX, EM } },
5524 { "phsubsw", { MX, EM } },
c0f3af97 5525 /* 08 */
c1e679ec
DR
5526 { "psignb", { MX, EM } },
5527 { "psignw", { MX, EM } },
5528 { "psignd", { MX, EM } },
5529 { "pmulhrsw", { MX, EM } },
c0f3af97
L
5530 { "(bad)", { XX } },
5531 { "(bad)", { XX } },
5532 { "(bad)", { XX } },
5533 { "(bad)", { XX } },
f88c9eb0
SP
5534 /* 10 */
5535 { PREFIX_TABLE (PREFIX_0F3810) },
5536 { "(bad)", { XX } },
5537 { "(bad)", { XX } },
5538 { "(bad)", { XX } },
5539 { PREFIX_TABLE (PREFIX_0F3814) },
5540 { PREFIX_TABLE (PREFIX_0F3815) },
5541 { "(bad)", { XX } },
5542 { PREFIX_TABLE (PREFIX_0F3817) },
5543 /* 18 */
5544 { "(bad)", { XX } },
5545 { "(bad)", { XX } },
5546 { "(bad)", { XX } },
5547 { "(bad)", { XX } },
5548 { "pabsb", { MX, EM } },
5549 { "pabsw", { MX, EM } },
5550 { "pabsd", { MX, EM } },
5551 { "(bad)", { XX } },
5552 /* 20 */
5553 { PREFIX_TABLE (PREFIX_0F3820) },
5554 { PREFIX_TABLE (PREFIX_0F3821) },
5555 { PREFIX_TABLE (PREFIX_0F3822) },
5556 { PREFIX_TABLE (PREFIX_0F3823) },
5557 { PREFIX_TABLE (PREFIX_0F3824) },
5558 { PREFIX_TABLE (PREFIX_0F3825) },
5559 { "(bad)", { XX } },
5560 { "(bad)", { XX } },
5561 /* 28 */
5562 { PREFIX_TABLE (PREFIX_0F3828) },
5563 { PREFIX_TABLE (PREFIX_0F3829) },
5564 { PREFIX_TABLE (PREFIX_0F382A) },
5565 { PREFIX_TABLE (PREFIX_0F382B) },
5566 { "(bad)", { XX } },
5567 { "(bad)", { XX } },
5568 { "(bad)", { XX } },
5569 { "(bad)", { XX } },
5570 /* 30 */
5571 { PREFIX_TABLE (PREFIX_0F3830) },
5572 { PREFIX_TABLE (PREFIX_0F3831) },
5573 { PREFIX_TABLE (PREFIX_0F3832) },
5574 { PREFIX_TABLE (PREFIX_0F3833) },
5575 { PREFIX_TABLE (PREFIX_0F3834) },
5576 { PREFIX_TABLE (PREFIX_0F3835) },
5577 { "(bad)", { XX } },
5578 { PREFIX_TABLE (PREFIX_0F3837) },
5579 /* 38 */
5580 { PREFIX_TABLE (PREFIX_0F3838) },
5581 { PREFIX_TABLE (PREFIX_0F3839) },
5582 { PREFIX_TABLE (PREFIX_0F383A) },
5583 { PREFIX_TABLE (PREFIX_0F383B) },
5584 { PREFIX_TABLE (PREFIX_0F383C) },
5585 { PREFIX_TABLE (PREFIX_0F383D) },
5586 { PREFIX_TABLE (PREFIX_0F383E) },
5587 { PREFIX_TABLE (PREFIX_0F383F) },
5588 /* 40 */
5589 { PREFIX_TABLE (PREFIX_0F3840) },
5590 { PREFIX_TABLE (PREFIX_0F3841) },
5591 { "(bad)", { XX } },
5592 { "(bad)", { XX } },
5593 { "(bad)", { XX } },
5594 { "(bad)", { XX } },
5595 { "(bad)", { XX } },
5596 { "(bad)", { XX } },
5597 /* 48 */
5598 { "(bad)", { XX } },
5599 { "(bad)", { XX } },
5600 { "(bad)", { XX } },
5601 { "(bad)", { XX } },
5602 { "(bad)", { XX } },
5603 { "(bad)", { XX } },
5604 { "(bad)", { XX } },
5605 { "(bad)", { XX } },
5606 /* 50 */
5607 { "(bad)", { XX } },
5608 { "(bad)", { XX } },
5609 { "(bad)", { XX } },
5610 { "(bad)", { XX } },
5611 { "(bad)", { XX } },
5612 { "(bad)", { XX } },
5613 { "(bad)", { XX } },
5614 { "(bad)", { XX } },
5615 /* 58 */
5616 { "(bad)", { XX } },
5617 { "(bad)", { XX } },
5618 { "(bad)", { XX } },
5619 { "(bad)", { XX } },
5620 { "(bad)", { XX } },
5621 { "(bad)", { XX } },
5622 { "(bad)", { XX } },
5623 { "(bad)", { XX } },
5624 /* 60 */
5625 { "(bad)", { XX } },
5626 { "(bad)", { XX } },
5627 { "(bad)", { XX } },
5628 { "(bad)", { XX } },
5629 { "(bad)", { XX } },
5630 { "(bad)", { XX } },
5631 { "(bad)", { XX } },
5632 { "(bad)", { XX } },
5633 /* 68 */
5634 { "(bad)", { XX } },
5635 { "(bad)", { XX } },
5636 { "(bad)", { XX } },
5637 { "(bad)", { XX } },
5638 { "(bad)", { XX } },
5639 { "(bad)", { XX } },
5640 { "(bad)", { XX } },
5641 { "(bad)", { XX } },
5642 /* 70 */
5643 { "(bad)", { XX } },
5644 { "(bad)", { XX } },
5645 { "(bad)", { XX } },
5646 { "(bad)", { XX } },
5647 { "(bad)", { XX } },
5648 { "(bad)", { XX } },
5649 { "(bad)", { XX } },
5650 { "(bad)", { XX } },
5651 /* 78 */
5652 { "(bad)", { XX } },
5653 { "(bad)", { XX } },
5654 { "(bad)", { XX } },
5655 { "(bad)", { XX } },
5656 { "(bad)", { XX } },
5657 { "(bad)", { XX } },
5658 { "(bad)", { XX } },
5659 { "(bad)", { XX } },
5660 /* 80 */
5661 { PREFIX_TABLE (PREFIX_0F3880) },
5662 { PREFIX_TABLE (PREFIX_0F3881) },
5663 { "(bad)", { XX } },
5664 { "(bad)", { XX } },
5665 { "(bad)", { XX } },
5666 { "(bad)", { XX } },
5667 { "(bad)", { XX } },
5668 { "(bad)", { XX } },
5669 /* 88 */
5670 { "(bad)", { XX } },
5671 { "(bad)", { XX } },
5672 { "(bad)", { XX } },
5673 { "(bad)", { XX } },
5674 { "(bad)", { XX } },
5675 { "(bad)", { XX } },
5676 { "(bad)", { XX } },
5677 { "(bad)", { XX } },
5678 /* 90 */
5679 { "(bad)", { XX } },
5680 { "(bad)", { XX } },
5681 { "(bad)", { XX } },
5682 { "(bad)", { XX } },
5683 { "(bad)", { XX } },
5684 { "(bad)", { XX } },
5685 { "(bad)", { XX } },
5686 { "(bad)", { XX } },
5687 /* 98 */
5688 { "(bad)", { XX } },
5689 { "(bad)", { XX } },
5690 { "(bad)", { XX } },
5691 { "(bad)", { XX } },
5692 { "(bad)", { XX } },
5693 { "(bad)", { XX } },
5694 { "(bad)", { XX } },
5695 { "(bad)", { XX } },
5696 /* a0 */
5697 { "(bad)", { XX } },
5698 { "(bad)", { XX } },
5699 { "(bad)", { XX } },
5700 { "(bad)", { XX } },
5701 { "(bad)", { XX } },
5702 { "(bad)", { XX } },
5703 { "(bad)", { XX } },
5704 { "(bad)", { XX } },
5705 /* a8 */
5706 { "(bad)", { XX } },
5707 { "(bad)", { XX } },
5708 { "(bad)", { XX } },
5709 { "(bad)", { XX } },
5710 { "(bad)", { XX } },
5711 { "(bad)", { XX } },
5712 { "(bad)", { XX } },
5713 { "(bad)", { XX } },
5714 /* b0 */
5715 { "(bad)", { XX } },
5716 { "(bad)", { XX } },
5717 { "(bad)", { XX } },
5718 { "(bad)", { XX } },
5719 { "(bad)", { XX } },
5720 { "(bad)", { XX } },
5721 { "(bad)", { XX } },
5722 { "(bad)", { XX } },
5723 /* b8 */
5724 { "(bad)", { XX } },
5725 { "(bad)", { XX } },
5726 { "(bad)", { XX } },
5727 { "(bad)", { XX } },
5728 { "(bad)", { XX } },
5729 { "(bad)", { XX } },
5730 { "(bad)", { XX } },
5731 { "(bad)", { XX } },
5732 /* c0 */
5733 { "(bad)", { XX } },
5734 { "(bad)", { XX } },
5735 { "(bad)", { XX } },
5736 { "(bad)", { XX } },
5737 { "(bad)", { XX } },
5738 { "(bad)", { XX } },
5739 { "(bad)", { XX } },
5740 { "(bad)", { XX } },
5741 /* c8 */
5742 { "(bad)", { XX } },
5743 { "(bad)", { XX } },
5744 { "(bad)", { XX } },
5745 { "(bad)", { XX } },
5746 { "(bad)", { XX } },
5747 { "(bad)", { XX } },
5748 { "(bad)", { XX } },
5749 { "(bad)", { XX } },
5750 /* d0 */
5751 { "(bad)", { XX } },
5752 { "(bad)", { XX } },
5753 { "(bad)", { XX } },
5754 { "(bad)", { XX } },
5755 { "(bad)", { XX } },
5756 { "(bad)", { XX } },
5757 { "(bad)", { XX } },
5758 { "(bad)", { XX } },
5759 /* d8 */
5760 { "(bad)", { XX } },
5761 { "(bad)", { XX } },
5762 { "(bad)", { XX } },
5763 { PREFIX_TABLE (PREFIX_0F38DB) },
5764 { PREFIX_TABLE (PREFIX_0F38DC) },
5765 { PREFIX_TABLE (PREFIX_0F38DD) },
5766 { PREFIX_TABLE (PREFIX_0F38DE) },
5767 { PREFIX_TABLE (PREFIX_0F38DF) },
5768 /* e0 */
5769 { "(bad)", { XX } },
5770 { "(bad)", { XX } },
5771 { "(bad)", { XX } },
5772 { "(bad)", { XX } },
5773 { "(bad)", { XX } },
5774 { "(bad)", { XX } },
5775 { "(bad)", { XX } },
5776 { "(bad)", { XX } },
5777 /* e8 */
5778 { "(bad)", { XX } },
5779 { "(bad)", { XX } },
5780 { "(bad)", { XX } },
5781 { "(bad)", { XX } },
5782 { "(bad)", { XX } },
5783 { "(bad)", { XX } },
5784 { "(bad)", { XX } },
5785 { "(bad)", { XX } },
5786 /* f0 */
5787 { PREFIX_TABLE (PREFIX_0F38F0) },
5788 { PREFIX_TABLE (PREFIX_0F38F1) },
5789 { "(bad)", { XX } },
5790 { "(bad)", { XX } },
5791 { "(bad)", { XX } },
5792 { "(bad)", { XX } },
5793 { "(bad)", { XX } },
5794 { "(bad)", { XX } },
5795 /* f8 */
5796 { "(bad)", { XX } },
5797 { "(bad)", { XX } },
5798 { "(bad)", { XX } },
5799 { "(bad)", { XX } },
5800 { "(bad)", { XX } },
5801 { "(bad)", { XX } },
5802 { "(bad)", { XX } },
5803 { "(bad)", { XX } },
5804 },
5805 /* THREE_BYTE_0F3A */
5806 {
5807 /* 00 */
5808 { "(bad)", { XX } },
5809 { "(bad)", { XX } },
5810 { "(bad)", { XX } },
5811 { "(bad)", { XX } },
5812 { "(bad)", { XX } },
5813 { "(bad)", { XX } },
5814 { "(bad)", { XX } },
5815 { "(bad)", { XX } },
5816 /* 08 */
5817 { PREFIX_TABLE (PREFIX_0F3A08) },
5818 { PREFIX_TABLE (PREFIX_0F3A09) },
5819 { PREFIX_TABLE (PREFIX_0F3A0A) },
5820 { PREFIX_TABLE (PREFIX_0F3A0B) },
5821 { PREFIX_TABLE (PREFIX_0F3A0C) },
5822 { PREFIX_TABLE (PREFIX_0F3A0D) },
5823 { PREFIX_TABLE (PREFIX_0F3A0E) },
5824 { "palignr", { MX, EM, Ib } },
5825 /* 10 */
5826 { "(bad)", { XX } },
5827 { "(bad)", { XX } },
5828 { "(bad)", { XX } },
5829 { "(bad)", { XX } },
5830 { PREFIX_TABLE (PREFIX_0F3A14) },
5831 { PREFIX_TABLE (PREFIX_0F3A15) },
5832 { PREFIX_TABLE (PREFIX_0F3A16) },
5833 { PREFIX_TABLE (PREFIX_0F3A17) },
5834 /* 18 */
5835 { "(bad)", { XX } },
5836 { "(bad)", { XX } },
5837 { "(bad)", { XX } },
5838 { "(bad)", { XX } },
5839 { "(bad)", { XX } },
5840 { "(bad)", { XX } },
5841 { "(bad)", { XX } },
5842 { "(bad)", { XX } },
5843 /* 20 */
5844 { PREFIX_TABLE (PREFIX_0F3A20) },
5845 { PREFIX_TABLE (PREFIX_0F3A21) },
5846 { PREFIX_TABLE (PREFIX_0F3A22) },
5847 { "(bad)", { XX } },
5848 { "(bad)", { XX } },
5849 { "(bad)", { XX } },
5850 { "(bad)", { XX } },
5851 { "(bad)", { XX } },
5852 /* 28 */
5853 { "(bad)", { XX } },
5854 { "(bad)", { XX } },
5855 { "(bad)", { XX } },
5856 { "(bad)", { XX } },
5857 { "(bad)", { XX } },
5858 { "(bad)", { XX } },
5859 { "(bad)", { XX } },
5860 { "(bad)", { XX } },
5861 /* 30 */
5862 { "(bad)", { XX } },
5863 { "(bad)", { XX } },
5864 { "(bad)", { XX } },
5865 { "(bad)", { XX } },
5866 { "(bad)", { XX } },
5867 { "(bad)", { XX } },
5868 { "(bad)", { XX } },
5869 { "(bad)", { XX } },
5870 /* 38 */
5871 { "(bad)", { XX } },
5872 { "(bad)", { XX } },
5873 { "(bad)", { XX } },
5874 { "(bad)", { XX } },
5875 { "(bad)", { XX } },
5876 { "(bad)", { XX } },
5877 { "(bad)", { XX } },
5878 { "(bad)", { XX } },
5879 /* 40 */
5880 { PREFIX_TABLE (PREFIX_0F3A40) },
5881 { PREFIX_TABLE (PREFIX_0F3A41) },
5882 { PREFIX_TABLE (PREFIX_0F3A42) },
5883 { "(bad)", { XX } },
5884 { PREFIX_TABLE (PREFIX_0F3A44) },
5885 { "(bad)", { XX } },
5886 { "(bad)", { XX } },
5887 { "(bad)", { XX } },
5888 /* 48 */
5889 { "(bad)", { XX } },
5890 { "(bad)", { XX } },
5891 { "(bad)", { XX } },
5892 { "(bad)", { XX } },
5893 { "(bad)", { XX } },
5894 { "(bad)", { XX } },
5895 { "(bad)", { XX } },
5896 { "(bad)", { XX } },
5897 /* 50 */
5898 { "(bad)", { XX } },
5899 { "(bad)", { XX } },
5900 { "(bad)", { XX } },
5901 { "(bad)", { XX } },
5902 { "(bad)", { XX } },
5903 { "(bad)", { XX } },
5904 { "(bad)", { XX } },
5905 { "(bad)", { XX } },
5906 /* 58 */
5907 { "(bad)", { XX } },
5908 { "(bad)", { XX } },
5909 { "(bad)", { XX } },
5910 { "(bad)", { XX } },
5911 { "(bad)", { XX } },
5912 { "(bad)", { XX } },
5913 { "(bad)", { XX } },
5914 { "(bad)", { XX } },
5915 /* 60 */
5916 { PREFIX_TABLE (PREFIX_0F3A60) },
5917 { PREFIX_TABLE (PREFIX_0F3A61) },
5918 { PREFIX_TABLE (PREFIX_0F3A62) },
5919 { PREFIX_TABLE (PREFIX_0F3A63) },
5920 { "(bad)", { XX } },
5921 { "(bad)", { XX } },
5922 { "(bad)", { XX } },
5923 { "(bad)", { XX } },
5924 /* 68 */
5925 { "(bad)", { XX } },
5926 { "(bad)", { XX } },
5927 { "(bad)", { XX } },
5928 { "(bad)", { XX } },
5929 { "(bad)", { XX } },
5930 { "(bad)", { XX } },
5931 { "(bad)", { XX } },
5932 { "(bad)", { XX } },
5933 /* 70 */
5934 { "(bad)", { XX } },
5935 { "(bad)", { XX } },
5936 { "(bad)", { XX } },
5937 { "(bad)", { XX } },
5938 { "(bad)", { XX } },
5939 { "(bad)", { XX } },
5940 { "(bad)", { XX } },
5941 { "(bad)", { XX } },
5942 /* 78 */
5943 { "(bad)", { XX } },
5944 { "(bad)", { XX } },
5945 { "(bad)", { XX } },
5946 { "(bad)", { XX } },
5947 { "(bad)", { XX } },
5948 { "(bad)", { XX } },
5949 { "(bad)", { XX } },
5950 { "(bad)", { XX } },
5951 /* 80 */
5952 { "(bad)", { XX } },
5953 { "(bad)", { XX } },
5954 { "(bad)", { XX } },
5955 { "(bad)", { XX } },
5956 { "(bad)", { XX } },
5957 { "(bad)", { XX } },
5958 { "(bad)", { XX } },
5959 { "(bad)", { XX } },
5960 /* 88 */
5961 { "(bad)", { XX } },
5962 { "(bad)", { XX } },
5963 { "(bad)", { XX } },
5964 { "(bad)", { XX } },
5965 { "(bad)", { XX } },
5966 { "(bad)", { XX } },
5967 { "(bad)", { XX } },
5968 { "(bad)", { XX } },
5969 /* 90 */
5970 { "(bad)", { XX } },
5971 { "(bad)", { XX } },
5972 { "(bad)", { XX } },
5973 { "(bad)", { XX } },
5974 { "(bad)", { XX } },
5975 { "(bad)", { XX } },
5976 { "(bad)", { XX } },
5977 { "(bad)", { XX } },
5978 /* 98 */
5979 { "(bad)", { XX } },
5980 { "(bad)", { XX } },
5981 { "(bad)", { XX } },
5982 { "(bad)", { XX } },
5983 { "(bad)", { XX } },
5984 { "(bad)", { XX } },
5985 { "(bad)", { XX } },
5986 { "(bad)", { XX } },
5987 /* a0 */
5988 { "(bad)", { XX } },
5989 { "(bad)", { XX } },
5990 { "(bad)", { XX } },
5991 { "(bad)", { XX } },
5992 { "(bad)", { XX } },
5993 { "(bad)", { XX } },
5994 { "(bad)", { XX } },
5995 { "(bad)", { XX } },
5996 /* a8 */
5997 { "(bad)", { XX } },
5998 { "(bad)", { XX } },
5999 { "(bad)", { XX } },
6000 { "(bad)", { XX } },
6001 { "(bad)", { XX } },
6002 { "(bad)", { XX } },
6003 { "(bad)", { XX } },
6004 { "(bad)", { XX } },
6005 /* b0 */
6006 { "(bad)", { XX } },
6007 { "(bad)", { XX } },
6008 { "(bad)", { XX } },
6009 { "(bad)", { XX } },
6010 { "(bad)", { XX } },
6011 { "(bad)", { XX } },
6012 { "(bad)", { XX } },
6013 { "(bad)", { XX } },
6014 /* b8 */
6015 { "(bad)", { XX } },
6016 { "(bad)", { XX } },
6017 { "(bad)", { XX } },
6018 { "(bad)", { XX } },
6019 { "(bad)", { XX } },
6020 { "(bad)", { XX } },
6021 { "(bad)", { XX } },
6022 { "(bad)", { XX } },
6023 /* c0 */
6024 { "(bad)", { XX } },
6025 { "(bad)", { XX } },
6026 { "(bad)", { XX } },
6027 { "(bad)", { XX } },
6028 { "(bad)", { XX } },
6029 { "(bad)", { XX } },
6030 { "(bad)", { XX } },
6031 { "(bad)", { XX } },
6032 /* c8 */
6033 { "(bad)", { XX } },
6034 { "(bad)", { XX } },
6035 { "(bad)", { XX } },
6036 { "(bad)", { XX } },
6037 { "(bad)", { XX } },
6038 { "(bad)", { XX } },
6039 { "(bad)", { XX } },
6040 { "(bad)", { XX } },
6041 /* d0 */
6042 { "(bad)", { XX } },
6043 { "(bad)", { XX } },
6044 { "(bad)", { XX } },
6045 { "(bad)", { XX } },
6046 { "(bad)", { XX } },
6047 { "(bad)", { XX } },
6048 { "(bad)", { XX } },
6049 { "(bad)", { XX } },
6050 /* d8 */
6051 { "(bad)", { XX } },
6052 { "(bad)", { XX } },
6053 { "(bad)", { XX } },
6054 { "(bad)", { XX } },
6055 { "(bad)", { XX } },
6056 { "(bad)", { XX } },
6057 { "(bad)", { XX } },
6058 { PREFIX_TABLE (PREFIX_0F3ADF) },
6059 /* e0 */
6060 { "(bad)", { XX } },
6061 { "(bad)", { XX } },
6062 { "(bad)", { XX } },
6063 { "(bad)", { XX } },
6064 { "(bad)", { XX } },
6065 { "(bad)", { XX } },
6066 { "(bad)", { XX } },
6067 { "(bad)", { XX } },
6068 /* e8 */
6069 { "(bad)", { XX } },
6070 { "(bad)", { XX } },
6071 { "(bad)", { XX } },
6072 { "(bad)", { XX } },
6073 { "(bad)", { XX } },
6074 { "(bad)", { XX } },
6075 { "(bad)", { XX } },
6076 { "(bad)", { XX } },
6077 /* f0 */
6078 { "(bad)", { XX } },
6079 { "(bad)", { XX } },
6080 { "(bad)", { XX } },
6081 { "(bad)", { XX } },
6082 { "(bad)", { XX } },
6083 { "(bad)", { XX } },
6084 { "(bad)", { XX } },
6085 { "(bad)", { XX } },
6086 /* f8 */
6087 { "(bad)", { XX } },
6088 { "(bad)", { XX } },
6089 { "(bad)", { XX } },
6090 { "(bad)", { XX } },
6091 { "(bad)", { XX } },
6092 { "(bad)", { XX } },
6093 { "(bad)", { XX } },
6094 { "(bad)", { XX } },
6095 },
6096
6097 /* THREE_BYTE_0F7A */
6098 {
6099 /* 00 */
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 /* 08 */
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 /* 10 */
6118 { "(bad)", { XX } },
6119 { "(bad)", { XX } },
6120 { "(bad)", { XX } },
6121 { "(bad)", { XX } },
6122 { "(bad)", { XX } },
6123 { "(bad)", { XX } },
6124 { "(bad)", { XX } },
6125 { "(bad)", { XX } },
6126 /* 18 */
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 /* 20 */
6136 { "ptest", { XX } },
6137 { "(bad)", { XX } },
6138 { "(bad)", { XX } },
c0f3af97
L
6139 { "(bad)", { XX } },
6140 { "(bad)", { XX } },
6141 { "(bad)", { XX } },
6142 { "(bad)", { XX } },
6143 { "(bad)", { XX } },
f88c9eb0 6144 /* 28 */
c0f3af97
L
6145 { "(bad)", { XX } },
6146 { "(bad)", { XX } },
6147 { "(bad)", { XX } },
c0f3af97
L
6148 { "(bad)", { XX } },
6149 { "(bad)", { XX } },
6150 { "(bad)", { XX } },
6151 { "(bad)", { XX } },
6152 { "(bad)", { XX } },
f88c9eb0 6153 /* 30 */
c0f3af97
L
6154 { "(bad)", { XX } },
6155 { "(bad)", { XX } },
6156 { "(bad)", { XX } },
4e7d34a6
L
6157 { "(bad)", { XX } },
6158 { "(bad)", { XX } },
c0f3af97 6159 { "(bad)", { XX } },
c0f3af97
L
6160 { "(bad)", { XX } },
6161 { "(bad)", { XX } },
f88c9eb0 6162 /* 38 */
c0f3af97 6163 { "(bad)", { XX } },
4e7d34a6
L
6164 { "(bad)", { XX } },
6165 { "(bad)", { XX } },
6166 { "(bad)", { XX } },
6167 { "(bad)", { XX } },
4e7d34a6
L
6168 { "(bad)", { XX } },
6169 { "(bad)", { XX } },
6170 { "(bad)", { XX } },
f88c9eb0 6171 /* 40 */
4e7d34a6 6172 { "(bad)", { XX } },
f88c9eb0
SP
6173 { "phaddbw", { XM, EXq } },
6174 { "phaddbd", { XM, EXq } },
6175 { "phaddbq", { XM, EXq } },
4e7d34a6
L
6176 { "(bad)", { XX } },
6177 { "(bad)", { XX } },
f88c9eb0
SP
6178 { "phaddwd", { XM, EXq } },
6179 { "phaddwq", { XM, EXq } },
6180 /* 48 */
4e7d34a6
L
6181 { "(bad)", { XX } },
6182 { "(bad)", { XX } },
4e7d34a6 6183 { "(bad)", { XX } },
f88c9eb0 6184 { "phadddq", { XM, EXq } },
4e7d34a6
L
6185 { "(bad)", { XX } },
6186 { "(bad)", { XX } },
6187 { "(bad)", { XX } },
6188 { "(bad)", { XX } },
f88c9eb0 6189 /* 50 */
4e7d34a6 6190 { "(bad)", { XX } },
f88c9eb0
SP
6191 { "phaddubw", { XM, EXq } },
6192 { "phaddubd", { XM, EXq } },
6193 { "phaddubq", { XM, EXq } },
4e7d34a6
L
6194 { "(bad)", { XX } },
6195 { "(bad)", { XX } },
f88c9eb0
SP
6196 { "phadduwd", { XM, EXq } },
6197 { "phadduwq", { XM, EXq } },
6198 /* 58 */
4e7d34a6
L
6199 { "(bad)", { XX } },
6200 { "(bad)", { XX } },
6201 { "(bad)", { XX } },
f88c9eb0 6202 { "phaddudq", { XM, EXq } },
4e7d34a6 6203 { "(bad)", { XX } },
c1e679ec
DR
6204 { "(bad)", { XX } },
6205 { "(bad)", { XX } },
6206 { "(bad)", { XX } },
f88c9eb0 6207 /* 60 */
c1e679ec 6208 { "(bad)", { XX } },
f88c9eb0
SP
6209 { "phsubbw", { XM, EXq } },
6210 { "phsubbd", { XM, EXq } },
6211 { "phsubbq", { XM, EXq } },
4e7d34a6
L
6212 { "(bad)", { XX } },
6213 { "(bad)", { XX } },
6214 { "(bad)", { XX } },
6215 { "(bad)", { XX } },
6216 /* 68 */
6217 { "(bad)", { XX } },
6218 { "(bad)", { XX } },
6219 { "(bad)", { XX } },
6220 { "(bad)", { XX } },
6221 { "(bad)", { XX } },
6222 { "(bad)", { XX } },
6223 { "(bad)", { XX } },
6224 { "(bad)", { XX } },
85f10a01 6225 /* 70 */
4e7d34a6
L
6226 { "(bad)", { XX } },
6227 { "(bad)", { XX } },
6228 { "(bad)", { XX } },
6229 { "(bad)", { XX } },
6230 { "(bad)", { XX } },
6231 { "(bad)", { XX } },
6232 { "(bad)", { XX } },
6233 { "(bad)", { XX } },
85f10a01 6234 /* 78 */
4e7d34a6
L
6235 { "(bad)", { XX } },
6236 { "(bad)", { XX } },
6237 { "(bad)", { XX } },
6238 { "(bad)", { XX } },
6239 { "(bad)", { XX } },
6240 { "(bad)", { XX } },
6241 { "(bad)", { XX } },
6242 { "(bad)", { XX } },
85f10a01 6243 /* 80 */
f88c9eb0
SP
6244 { "(bad)", { XX } },
6245 { "(bad)", { XX } },
4e7d34a6
L
6246 { "(bad)", { XX } },
6247 { "(bad)", { XX } },
6248 { "(bad)", { XX } },
c0f3af97
L
6249 { "(bad)", { XX } },
6250 { "(bad)", { XX } },
6251 { "(bad)", { XX } },
85f10a01 6252 /* 88 */
4e7d34a6
L
6253 { "(bad)", { XX } },
6254 { "(bad)", { XX } },
6255 { "(bad)", { XX } },
6256 { "(bad)", { XX } },
6257 { "(bad)", { XX } },
6258 { "(bad)", { XX } },
c0f3af97
L
6259 { "(bad)", { XX } },
6260 { "(bad)", { XX } },
85f10a01 6261 /* 90 */
4e7d34a6
L
6262 { "(bad)", { XX } },
6263 { "(bad)", { XX } },
6264 { "(bad)", { XX } },
6265 { "(bad)", { XX } },
6266 { "(bad)", { XX } },
c0f3af97
L
6267 { "(bad)", { XX } },
6268 { "(bad)", { XX } },
6269 { "(bad)", { XX } },
85f10a01 6270 /* 98 */
4e7d34a6
L
6271 { "(bad)", { XX } },
6272 { "(bad)", { XX } },
6273 { "(bad)", { XX } },
6274 { "(bad)", { XX } },
6275 { "(bad)", { XX } },
6276 { "(bad)", { XX } },
c0f3af97
L
6277 { "(bad)", { XX } },
6278 { "(bad)", { XX } },
85f10a01 6279 /* a0 */
4e7d34a6
L
6280 { "(bad)", { XX } },
6281 { "(bad)", { XX } },
6282 { "(bad)", { XX } },
6283 { "(bad)", { XX } },
6284 { "(bad)", { XX } },
6285 { "(bad)", { XX } },
c0f3af97 6286 { "(bad)", { XX } },
4e7d34a6 6287 { "(bad)", { XX } },
85f10a01 6288 /* a8 */
4e7d34a6
L
6289 { "(bad)", { XX } },
6290 { "(bad)", { XX } },
6291 { "(bad)", { XX } },
6292 { "(bad)", { XX } },
6293 { "(bad)", { XX } },
6294 { "(bad)", { XX } },
6295 { "(bad)", { XX } },
6296 { "(bad)", { XX } },
85f10a01 6297 /* b0 */
4e7d34a6
L
6298 { "(bad)", { XX } },
6299 { "(bad)", { XX } },
6300 { "(bad)", { XX } },
6301 { "(bad)", { XX } },
6302 { "(bad)", { XX } },
6303 { "(bad)", { XX } },
c0f3af97 6304 { "(bad)", { XX } },
4e7d34a6 6305 { "(bad)", { XX } },
85f10a01 6306 /* b8 */
4e7d34a6
L
6307 { "(bad)", { XX } },
6308 { "(bad)", { XX } },
6309 { "(bad)", { XX } },
6310 { "(bad)", { XX } },
6311 { "(bad)", { XX } },
6312 { "(bad)", { XX } },
6313 { "(bad)", { XX } },
6314 { "(bad)", { XX } },
85f10a01 6315 /* c0 */
4e7d34a6
L
6316 { "(bad)", { XX } },
6317 { "(bad)", { XX } },
6318 { "(bad)", { XX } },
6319 { "(bad)", { XX } },
6320 { "(bad)", { XX } },
6321 { "(bad)", { XX } },
6322 { "(bad)", { XX } },
6323 { "(bad)", { XX } },
85f10a01 6324 /* c8 */
4e7d34a6
L
6325 { "(bad)", { XX } },
6326 { "(bad)", { XX } },
6327 { "(bad)", { XX } },
6328 { "(bad)", { XX } },
6329 { "(bad)", { XX } },
6330 { "(bad)", { XX } },
6331 { "(bad)", { XX } },
6332 { "(bad)", { XX } },
85f10a01 6333 /* d0 */
4e7d34a6
L
6334 { "(bad)", { XX } },
6335 { "(bad)", { XX } },
6336 { "(bad)", { XX } },
6337 { "(bad)", { XX } },
6338 { "(bad)", { XX } },
6339 { "(bad)", { XX } },
6340 { "(bad)", { XX } },
6341 { "(bad)", { XX } },
85f10a01 6342 /* d8 */
4e7d34a6
L
6343 { "(bad)", { XX } },
6344 { "(bad)", { XX } },
6345 { "(bad)", { XX } },
f88c9eb0
SP
6346 { "(bad)", { XX } },
6347 { "(bad)", { XX } },
6348 { "(bad)", { XX } },
6349 { "(bad)", { XX } },
6350 { "(bad)", { XX } },
85f10a01 6351 /* e0 */
4e7d34a6
L
6352 { "(bad)", { XX } },
6353 { "(bad)", { XX } },
6354 { "(bad)", { XX } },
6355 { "(bad)", { XX } },
6356 { "(bad)", { XX } },
6357 { "(bad)", { XX } },
6358 { "(bad)", { XX } },
6359 { "(bad)", { XX } },
85f10a01 6360 /* e8 */
4e7d34a6
L
6361 { "(bad)", { XX } },
6362 { "(bad)", { XX } },
6363 { "(bad)", { XX } },
6364 { "(bad)", { XX } },
6365 { "(bad)", { XX } },
6366 { "(bad)", { XX } },
6367 { "(bad)", { XX } },
6368 { "(bad)", { XX } },
85f10a01 6369 /* f0 */
f88c9eb0
SP
6370 { "(bad)", { XX } },
6371 { "(bad)", { XX } },
4e7d34a6
L
6372 { "(bad)", { XX } },
6373 { "(bad)", { XX } },
6374 { "(bad)", { XX } },
6375 { "(bad)", { XX } },
6376 { "(bad)", { XX } },
6377 { "(bad)", { XX } },
85f10a01 6378 /* f8 */
4e7d34a6
L
6379 { "(bad)", { XX } },
6380 { "(bad)", { XX } },
6381 { "(bad)", { XX } },
6382 { "(bad)", { XX } },
6383 { "(bad)", { XX } },
6384 { "(bad)", { XX } },
6385 { "(bad)", { XX } },
6386 { "(bad)", { XX } },
85f10a01 6387 },
f88c9eb0
SP
6388};
6389
6390static const struct dis386 xop_table[][256] = {
5dd85c99 6391 /* XOP_08 */
85f10a01
MM
6392 {
6393 /* 00 */
4e7d34a6
L
6394 { "(bad)", { XX } },
6395 { "(bad)", { XX } },
6396 { "(bad)", { XX } },
6397 { "(bad)", { XX } },
6398 { "(bad)", { XX } },
6399 { "(bad)", { XX } },
6400 { "(bad)", { XX } },
6401 { "(bad)", { XX } },
85f10a01 6402 /* 08 */
f88c9eb0
SP
6403 { "(bad)", { XX } },
6404 { "(bad)", { XX } },
6405 { "(bad)", { XX } },
6406 { "(bad)", { XX } },
6407 { "(bad)", { XX } },
6408 { "(bad)", { XX } },
6409 { "(bad)", { XX } },
6410 { "(bad)", { XX } },
85f10a01 6411 /* 10 */
4e7d34a6
L
6412 { "(bad)", { XX } },
6413 { "(bad)", { XX } },
5dd85c99 6414 { "(bad)", { XX } },
f88c9eb0
SP
6415 { "(bad)", { XX } },
6416 { "(bad)", { XX } },
6417 { "(bad)", { XX } },
4e7d34a6
L
6418 { "(bad)", { XX } },
6419 { "(bad)", { XX } },
85f10a01 6420 /* 18 */
4e7d34a6
L
6421 { "(bad)", { XX } },
6422 { "(bad)", { XX } },
6423 { "(bad)", { XX } },
6424 { "(bad)", { XX } },
6425 { "(bad)", { XX } },
6426 { "(bad)", { XX } },
6427 { "(bad)", { XX } },
6428 { "(bad)", { XX } },
85f10a01 6429 /* 20 */
f88c9eb0
SP
6430 { "(bad)", { XX } },
6431 { "(bad)", { XX } },
6432 { "(bad)", { XX } },
4e7d34a6
L
6433 { "(bad)", { XX } },
6434 { "(bad)", { XX } },
6435 { "(bad)", { XX } },
6436 { "(bad)", { XX } },
6437 { "(bad)", { XX } },
85f10a01 6438 /* 28 */
4e7d34a6
L
6439 { "(bad)", { XX } },
6440 { "(bad)", { XX } },
6441 { "(bad)", { XX } },
6442 { "(bad)", { XX } },
4e7d34a6
L
6443 { "(bad)", { XX } },
6444 { "(bad)", { XX } },
6445 { "(bad)", { XX } },
6446 { "(bad)", { XX } },
c0f3af97 6447 /* 30 */
c1e679ec
DR
6448 { "(bad)", { XX } },
6449 { "(bad)", { XX } },
4e7d34a6 6450 { "(bad)", { XX } },
4e7d34a6
L
6451 { "(bad)", { XX } },
6452 { "(bad)", { XX } },
6453 { "(bad)", { XX } },
6454 { "(bad)", { XX } },
6455 { "(bad)", { XX } },
c0f3af97 6456 /* 38 */
4e7d34a6
L
6457 { "(bad)", { XX } },
6458 { "(bad)", { XX } },
6459 { "(bad)", { XX } },
4e7d34a6
L
6460 { "(bad)", { XX } },
6461 { "(bad)", { XX } },
6462 { "(bad)", { XX } },
6463 { "(bad)", { XX } },
6464 { "(bad)", { XX } },
c0f3af97 6465 /* 40 */
c1e679ec 6466 { "(bad)", { XX } },
f88c9eb0
SP
6467 { "(bad)", { XX } },
6468 { "(bad)", { XX } },
6469 { "(bad)", { XX } },
6470 { "(bad)", { XX } },
4e7d34a6
L
6471 { "(bad)", { XX } },
6472 { "(bad)", { XX } },
6473 { "(bad)", { XX } },
85f10a01 6474 /* 48 */
4e7d34a6
L
6475 { "(bad)", { XX } },
6476 { "(bad)", { XX } },
6477 { "(bad)", { XX } },
c1e679ec 6478 { "(bad)", { XX } },
4e7d34a6
L
6479 { "(bad)", { XX } },
6480 { "(bad)", { XX } },
6481 { "(bad)", { XX } },
6482 { "(bad)", { XX } },
c0f3af97 6483 /* 50 */
4e7d34a6
L
6484 { "(bad)", { XX } },
6485 { "(bad)", { XX } },
6486 { "(bad)", { XX } },
c1e679ec
DR
6487 { "(bad)", { XX } },
6488 { "(bad)", { XX } },
6489 { "(bad)", { XX } },
6490 { "(bad)", { XX } },
6491 { "(bad)", { XX } },
85f10a01 6492 /* 58 */
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 } },
4e7d34a6 6500 { "(bad)", { XX } },
c1e679ec 6501 /* 60 */
f88c9eb0
SP
6502 { "(bad)", { XX } },
6503 { "(bad)", { XX } },
6504 { "(bad)", { XX } },
6505 { "(bad)", { XX } },
4e7d34a6
L
6506 { "(bad)", { XX } },
6507 { "(bad)", { XX } },
6508 { "(bad)", { XX } },
6509 { "(bad)", { XX } },
c0f3af97
L
6510 /* 68 */
6511 { "(bad)", { XX } },
4e7d34a6
L
6512 { "(bad)", { XX } },
6513 { "(bad)", { XX } },
6514 { "(bad)", { XX } },
4e7d34a6
L
6515 { "(bad)", { XX } },
6516 { "(bad)", { XX } },
6517 { "(bad)", { XX } },
6518 { "(bad)", { XX } },
85f10a01 6519 /* 70 */
4e7d34a6
L
6520 { "(bad)", { XX } },
6521 { "(bad)", { XX } },
6522 { "(bad)", { XX } },
6523 { "(bad)", { XX } },
6524 { "(bad)", { XX } },
6525 { "(bad)", { XX } },
6526 { "(bad)", { XX } },
6527 { "(bad)", { XX } },
85f10a01 6528 /* 78 */
4e7d34a6
L
6529 { "(bad)", { XX } },
6530 { "(bad)", { XX } },
6531 { "(bad)", { XX } },
6532 { "(bad)", { XX } },
6533 { "(bad)", { XX } },
6534 { "(bad)", { XX } },
6535 { "(bad)", { XX } },
6536 { "(bad)", { XX } },
85f10a01 6537 /* 80 */
4e7d34a6
L
6538 { "(bad)", { XX } },
6539 { "(bad)", { XX } },
6540 { "(bad)", { XX } },
6541 { "(bad)", { XX } },
6542 { "(bad)", { XX } },
5dd85c99
SP
6543 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6544 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6545 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6546 /* 88 */
4e7d34a6
L
6547 { "(bad)", { XX } },
6548 { "(bad)", { XX } },
6549 { "(bad)", { XX } },
4e7d34a6
L
6550 { "(bad)", { XX } },
6551 { "(bad)", { XX } },
6552 { "(bad)", { XX } },
5dd85c99
SP
6553 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6554 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6555 /* 90 */
4e7d34a6
L
6556 { "(bad)", { XX } },
6557 { "(bad)", { XX } },
6558 { "(bad)", { XX } },
6559 { "(bad)", { XX } },
6560 { "(bad)", { XX } },
5dd85c99
SP
6561 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6562 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6563 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6564 /* 98 */
4e7d34a6
L
6565 { "(bad)", { XX } },
6566 { "(bad)", { XX } },
6567 { "(bad)", { XX } },
6568 { "(bad)", { XX } },
6569 { "(bad)", { XX } },
6570 { "(bad)", { XX } },
5dd85c99
SP
6571 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6572 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6573 /* a0 */
f0ae4a24
SP
6574 { "(bad)", { XX } },
6575 { "(bad)", { XX } },
5dd85c99
SP
6576 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6577 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
4e7d34a6
L
6578 { "(bad)", { XX } },
6579 { "(bad)", { XX } },
5dd85c99 6580 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
4e7d34a6 6581 { "(bad)", { XX } },
5dd85c99 6582 /* a8 */
4e7d34a6
L
6583 { "(bad)", { XX } },
6584 { "(bad)", { XX } },
6585 { "(bad)", { XX } },
6586 { "(bad)", { XX } },
6587 { "(bad)", { XX } },
6588 { "(bad)", { XX } },
6589 { "(bad)", { XX } },
4e7d34a6 6590 { "(bad)", { XX } },
5dd85c99 6591 /* b0 */
4e7d34a6
L
6592 { "(bad)", { XX } },
6593 { "(bad)", { XX } },
6594 { "(bad)", { XX } },
6595 { "(bad)", { XX } },
6596 { "(bad)", { XX } },
6597 { "(bad)", { XX } },
5dd85c99 6598 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
4e7d34a6 6599 { "(bad)", { XX } },
5dd85c99 6600 /* b8 */
4e7d34a6
L
6601 { "(bad)", { XX } },
6602 { "(bad)", { XX } },
6603 { "(bad)", { XX } },
6604 { "(bad)", { XX } },
6605 { "(bad)", { XX } },
6606 { "(bad)", { XX } },
6607 { "(bad)", { XX } },
6608 { "(bad)", { XX } },
5dd85c99
SP
6609 /* c0 */
6610 { "vprotb", { XM, Vex_2src_1, Ib } },
6611 { "vprotw", { XM, Vex_2src_1, Ib } },
6612 { "vprotd", { XM, Vex_2src_1, Ib } },
6613 { "vprotq", { XM, Vex_2src_1, Ib } },
4e7d34a6
L
6614 { "(bad)", { XX } },
6615 { "(bad)", { XX } },
6616 { "(bad)", { XX } },
6617 { "(bad)", { XX } },
5dd85c99 6618 /* c8 */
4e7d34a6
L
6619 { "(bad)", { XX } },
6620 { "(bad)", { XX } },
6621 { "(bad)", { XX } },
6622 { "(bad)", { XX } },
5dd85c99
SP
6623 { "vpcomb", { XM, Vex128, EXx, Ib } },
6624 { "vpcomw", { XM, Vex128, EXx, Ib } },
6625 { "vpcomd", { XM, Vex128, EXx, Ib } },
6626 { "vpcomq", { XM, Vex128, EXx, Ib } },
6627 /* d0 */
4e7d34a6
L
6628 { "(bad)", { XX } },
6629 { "(bad)", { XX } },
6630 { "(bad)", { XX } },
6631 { "(bad)", { XX } },
6632 { "(bad)", { XX } },
6633 { "(bad)", { XX } },
6634 { "(bad)", { XX } },
6635 { "(bad)", { XX } },
5dd85c99 6636 /* d8 */
4e7d34a6
L
6637 { "(bad)", { XX } },
6638 { "(bad)", { XX } },
6639 { "(bad)", { XX } },
6640 { "(bad)", { XX } },
6641 { "(bad)", { XX } },
6642 { "(bad)", { XX } },
6643 { "(bad)", { XX } },
6644 { "(bad)", { XX } },
5dd85c99 6645 /* e0 */
4e7d34a6
L
6646 { "(bad)", { XX } },
6647 { "(bad)", { XX } },
6648 { "(bad)", { XX } },
6649 { "(bad)", { XX } },
6650 { "(bad)", { XX } },
6651 { "(bad)", { XX } },
6652 { "(bad)", { XX } },
6653 { "(bad)", { XX } },
5dd85c99 6654 /* e8 */
4e7d34a6
L
6655 { "(bad)", { XX } },
6656 { "(bad)", { XX } },
6657 { "(bad)", { XX } },
6658 { "(bad)", { XX } },
5dd85c99
SP
6659 { "vpcomub", { XM, Vex128, EXx, Ib } },
6660 { "vpcomuw", { XM, Vex128, EXx, Ib } },
6661 { "vpcomud", { XM, Vex128, EXx, Ib } },
6662 { "vpcomuq", { XM, Vex128, EXx, Ib } },
6663 /* f0 */
4e7d34a6
L
6664 { "(bad)", { XX } },
6665 { "(bad)", { XX } },
6666 { "(bad)", { XX } },
6667 { "(bad)", { XX } },
4e7d34a6
L
6668 { "(bad)", { XX } },
6669 { "(bad)", { XX } },
6670 { "(bad)", { XX } },
6671 { "(bad)", { XX } },
5dd85c99
SP
6672 /* f8 */
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 },
6682 /* XOP_09 */
6683 {
6684 /* 00 */
6685 { "(bad)", { XX } },
6686 { "(bad)", { XX } },
6687 { "(bad)", { XX } },
6688 { "(bad)", { XX } },
6689 { "(bad)", { XX } },
6690 { "(bad)", { XX } },
6691 { "(bad)", { XX } },
6692 { "(bad)", { XX } },
6693 /* 08 */
6694 { "(bad)", { XX } },
6695 { "(bad)", { XX } },
6696 { "(bad)", { XX } },
6697 { "(bad)", { XX } },
6698 { "(bad)", { XX } },
6699 { "(bad)", { XX } },
6700 { "(bad)", { XX } },
6701 { "(bad)", { XX } },
6702 /* 10 */
6703 { "(bad)", { XX } },
6704 { "(bad)", { XX } },
6705 { REG_TABLE (REG_XOP_LWPCB) },
6706 { "(bad)", { XX } },
6707 { "(bad)", { XX } },
6708 { "(bad)", { XX } },
6709 { "(bad)", { XX } },
6710 { "(bad)", { XX } },
6711 /* 18 */
6712 { "(bad)", { XX } },
6713 { "(bad)", { XX } },
6714 { "(bad)", { XX } },
6715 { "(bad)", { XX } },
6716 { "(bad)", { XX } },
6717 { "(bad)", { XX } },
6718 { "(bad)", { XX } },
6719 { "(bad)", { XX } },
6720 /* 20 */
4e7d34a6
L
6721 { "(bad)", { XX } },
6722 { "(bad)", { XX } },
6723 { "(bad)", { XX } },
f88c9eb0 6724 { "(bad)", { XX } },
4e7d34a6
L
6725 { "(bad)", { XX } },
6726 { "(bad)", { XX } },
6727 { "(bad)", { XX } },
6728 { "(bad)", { XX } },
5dd85c99
SP
6729 /* 28 */
6730 { "(bad)", { XX } },
6731 { "(bad)", { XX } },
6732 { "(bad)", { XX } },
6733 { "(bad)", { XX } },
6734 { "(bad)", { XX } },
6735 { "(bad)", { XX } },
6736 { "(bad)", { XX } },
6737 { "(bad)", { XX } },
6738 /* 30 */
6739 { "(bad)", { XX } },
6740 { "(bad)", { XX } },
6741 { "(bad)", { XX } },
6742 { "(bad)", { XX } },
6743 { "(bad)", { XX } },
6744 { "(bad)", { XX } },
6745 { "(bad)", { XX } },
6746 { "(bad)", { XX } },
6747 /* 38 */
6748 { "(bad)", { XX } },
6749 { "(bad)", { XX } },
6750 { "(bad)", { XX } },
6751 { "(bad)", { XX } },
6752 { "(bad)", { XX } },
6753 { "(bad)", { XX } },
6754 { "(bad)", { XX } },
6755 { "(bad)", { XX } },
6756 /* 40 */
6757 { "(bad)", { XX } },
6758 { "(bad)", { XX } },
6759 { "(bad)", { XX } },
6760 { "(bad)", { XX } },
6761 { "(bad)", { XX } },
6762 { "(bad)", { XX } },
6763 { "(bad)", { XX } },
6764 { "(bad)", { XX } },
6765 /* 48 */
6766 { "(bad)", { XX } },
6767 { "(bad)", { XX } },
6768 { "(bad)", { XX } },
6769 { "(bad)", { XX } },
6770 { "(bad)", { XX } },
6771 { "(bad)", { XX } },
6772 { "(bad)", { XX } },
6773 { "(bad)", { XX } },
6774 /* 50 */
6775 { "(bad)", { XX } },
6776 { "(bad)", { XX } },
6777 { "(bad)", { XX } },
6778 { "(bad)", { XX } },
6779 { "(bad)", { XX } },
6780 { "(bad)", { XX } },
6781 { "(bad)", { XX } },
6782 { "(bad)", { XX } },
6783 /* 58 */
6784 { "(bad)", { XX } },
6785 { "(bad)", { XX } },
6786 { "(bad)", { XX } },
6787 { "(bad)", { XX } },
6788 { "(bad)", { XX } },
6789 { "(bad)", { XX } },
6790 { "(bad)", { XX } },
6791 { "(bad)", { XX } },
6792 /* 60 */
6793 { "(bad)", { XX } },
6794 { "(bad)", { XX } },
6795 { "(bad)", { XX } },
6796 { "(bad)", { XX } },
6797 { "(bad)", { XX } },
6798 { "(bad)", { XX } },
6799 { "(bad)", { XX } },
6800 { "(bad)", { XX } },
6801 /* 68 */
6802 { "(bad)", { XX } },
6803 { "(bad)", { XX } },
6804 { "(bad)", { XX } },
6805 { "(bad)", { XX } },
6806 { "(bad)", { XX } },
6807 { "(bad)", { XX } },
6808 { "(bad)", { XX } },
6809 { "(bad)", { XX } },
6810 /* 70 */
6811 { "(bad)", { XX } },
6812 { "(bad)", { XX } },
6813 { "(bad)", { XX } },
6814 { "(bad)", { XX } },
6815 { "(bad)", { XX } },
6816 { "(bad)", { XX } },
6817 { "(bad)", { XX } },
6818 { "(bad)", { XX } },
6819 /* 78 */
6820 { "(bad)", { XX } },
6821 { "(bad)", { XX } },
6822 { "(bad)", { XX } },
6823 { "(bad)", { XX } },
6824 { "(bad)", { XX } },
6825 { "(bad)", { XX } },
6826 { "(bad)", { XX } },
6827 { "(bad)", { XX } },
6828 /* 80 */
6829 { VEX_LEN_TABLE (VEX_LEN_XOP_09_80) },
6830 { VEX_LEN_TABLE (VEX_LEN_XOP_09_81) },
6831 { "vfrczss", { XM, EXd } },
6832 { "vfrczsd", { XM, EXq } },
6833 { "(bad)", { XX } },
6834 { "(bad)", { XX } },
6835 { "(bad)", { XX } },
6836 { "(bad)", { XX } },
6837 /* 88 */
6838 { "(bad)", { XX } },
6839 { "(bad)", { XX } },
6840 { "(bad)", { XX } },
6841 { "(bad)", { XX } },
6842 { "(bad)", { XX } },
6843 { "(bad)", { XX } },
6844 { "(bad)", { XX } },
6845 { "(bad)", { XX } },
6846 /* 90 */
6847 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
6848 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
6849 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
6850 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
6851 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
6852 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
6853 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
6854 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
6855 /* 98 */
6856 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
6857 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
6858 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
6859 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
6860 { "(bad)", { XX } },
6861 { "(bad)", { XX } },
6862 { "(bad)", { XX } },
6863 { "(bad)", { XX } },
6864 /* a0 */
6865 { "(bad)", { XX } },
6866 { "(bad)", { XX } },
6867 { "(bad)", { XX } },
6868 { "(bad)", { XX } },
6869 { "(bad)", { XX } },
6870 { "(bad)", { XX } },
6871 { "(bad)", { XX } },
6872 { "(bad)", { XX } },
6873 /* a8 */
6874 { "(bad)", { XX } },
6875 { "(bad)", { XX } },
6876 { "(bad)", { XX } },
6877 { "(bad)", { XX } },
6878 { "(bad)", { XX } },
6879 { "(bad)", { XX } },
6880 { "(bad)", { XX } },
6881 { "(bad)", { XX } },
6882 /* b0 */
6883 { "(bad)", { XX } },
6884 { "(bad)", { XX } },
6885 { "(bad)", { XX } },
6886 { "(bad)", { XX } },
6887 { "(bad)", { XX } },
6888 { "(bad)", { XX } },
6889 { "(bad)", { XX } },
6890 { "(bad)", { XX } },
6891 /* b8 */
6892 { "(bad)", { XX } },
6893 { "(bad)", { XX } },
6894 { "(bad)", { XX } },
6895 { "(bad)", { XX } },
6896 { "(bad)", { XX } },
6897 { "(bad)", { XX } },
6898 { "(bad)", { XX } },
6899 { "(bad)", { XX } },
6900 /* c0 */
6901 { "(bad)", { XX } },
6902 { "vphaddbw", { XM, EXxmm } },
6903 { "vphaddbd", { XM, EXxmm } },
6904 { "vphaddbq", { XM, EXxmm } },
6905 { "(bad)", { XX } },
6906 { "(bad)", { XX } },
6907 { "vphaddwd", { XM, EXxmm } },
6908 { "vphaddwq", { XM, EXxmm } },
6909 /* c8 */
6910 { "(bad)", { XX } },
6911 { "(bad)", { XX } },
6912 { "(bad)", { XX } },
6913 { "vphadddq", { XM, EXxmm } },
6914 { "(bad)", { XX } },
6915 { "(bad)", { XX } },
6916 { "(bad)", { XX } },
6917 { "(bad)", { XX } },
6918 /* d0 */
6919 { "(bad)", { XX } },
6920 { "vphaddubw", { XM, EXxmm } },
6921 { "vphaddubd", { XM, EXxmm } },
6922 { "vphaddubq", { XM, EXxmm } },
6923 { "(bad)", { XX } },
6924 { "(bad)", { XX } },
6925 { "vphadduwd", { XM, EXxmm } },
6926 { "vphadduwq", { XM, EXxmm } },
6927 /* d8 */
6928 { "(bad)", { XX } },
6929 { "(bad)", { XX } },
6930 { "(bad)", { XX } },
6931 { "vphaddudq", { XM, EXxmm } },
6932 { "(bad)", { XX } },
6933 { "(bad)", { XX } },
6934 { "(bad)", { XX } },
6935 { "(bad)", { XX } },
6936 /* e0 */
6937 { "(bad)", { XX } },
6938 { "vphsubbw", { XM, EXxmm } },
6939 { "vphsubwd", { XM, EXxmm } },
6940 { "vphsubdq", { XM, EXxmm } },
4e7d34a6
L
6941 { "(bad)", { XX } },
6942 { "(bad)", { XX } },
6943 { "(bad)", { XX } },
6944 { "(bad)", { XX } },
6945 /* e8 */
6946 { "(bad)", { XX } },
6947 { "(bad)", { XX } },
6948 { "(bad)", { XX } },
6949 { "(bad)", { XX } },
6950 { "(bad)", { XX } },
6951 { "(bad)", { XX } },
6952 { "(bad)", { XX } },
6953 { "(bad)", { XX } },
6954 /* f0 */
6955 { "(bad)", { XX } },
6956 { "(bad)", { XX } },
6957 { "(bad)", { XX } },
6958 { "(bad)", { XX } },
6959 { "(bad)", { XX } },
6960 { "(bad)", { XX } },
6961 { "(bad)", { XX } },
6962 { "(bad)", { XX } },
6963 /* f8 */
6964 { "(bad)", { XX } },
6965 { "(bad)", { XX } },
6966 { "(bad)", { XX } },
6967 { "(bad)", { XX } },
6968 { "(bad)", { XX } },
6969 { "(bad)", { XX } },
6970 { "(bad)", { XX } },
6971 { "(bad)", { XX } },
6972 },
f88c9eb0 6973 /* XOP_0A */
4e7d34a6
L
6974 {
6975 /* 00 */
c0f3af97
L
6976 { "(bad)", { XX } },
6977 { "(bad)", { XX } },
6978 { "(bad)", { XX } },
6979 { "(bad)", { XX } },
6980 { "(bad)", { XX } },
6981 { "(bad)", { XX } },
6982 { "(bad)", { XX } },
6983 { "(bad)", { XX } },
4e7d34a6 6984 /* 08 */
c0f3af97
L
6985 { "(bad)", { XX } },
6986 { "(bad)", { XX } },
6987 { "(bad)", { XX } },
6988 { "(bad)", { XX } },
d5d7db8e
L
6989 { "(bad)", { XX } },
6990 { "(bad)", { XX } },
6991 { "(bad)", { XX } },
6992 { "(bad)", { XX } },
4e7d34a6 6993 /* 10 */
d5d7db8e
L
6994 { "(bad)", { XX } },
6995 { "(bad)", { XX } },
f88c9eb0 6996 { REG_TABLE (REG_XOP_LWP) },
d5d7db8e 6997 { "(bad)", { XX } },
c0f3af97
L
6998 { "(bad)", { XX } },
6999 { "(bad)", { XX } },
7000 { "(bad)", { XX } },
7001 { "(bad)", { XX } },
4e7d34a6 7002 /* 18 */
d5d7db8e
L
7003 { "(bad)", { XX } },
7004 { "(bad)", { XX } },
7005 { "(bad)", { XX } },
7006 { "(bad)", { XX } },
c0f3af97
L
7007 { "(bad)", { XX } },
7008 { "(bad)", { XX } },
7009 { "(bad)", { XX } },
d5d7db8e 7010 { "(bad)", { XX } },
4e7d34a6 7011 /* 20 */
f88c9eb0 7012 { "(bad)", { XX } },
c0f3af97
L
7013 { "(bad)", { XX } },
7014 { "(bad)", { XX } },
7015 { "(bad)", { XX } },
7016 { "(bad)", { XX } },
7017 { "(bad)", { XX } },
d5d7db8e
L
7018 { "(bad)", { XX } },
7019 { "(bad)", { XX } },
4e7d34a6 7020 /* 28 */
c0f3af97
L
7021 { "(bad)", { XX } },
7022 { "(bad)", { XX } },
7023 { "(bad)", { XX } },
7024 { "(bad)", { XX } },
d5d7db8e
L
7025 { "(bad)", { XX } },
7026 { "(bad)", { XX } },
7027 { "(bad)", { XX } },
7028 { "(bad)", { XX } },
4e7d34a6 7029 /* 30 */
d5d7db8e 7030 { "(bad)", { XX } },
d5d7db8e
L
7031 { "(bad)", { XX } },
7032 { "(bad)", { XX } },
7033 { "(bad)", { XX } },
7034 { "(bad)", { XX } },
7035 { "(bad)", { XX } },
7036 { "(bad)", { XX } },
c0f3af97
L
7037 { "(bad)", { XX } },
7038 /* 38 */
7039 { "(bad)", { XX } },
7040 { "(bad)", { XX } },
7041 { "(bad)", { XX } },
7042 { "(bad)", { XX } },
d5d7db8e
L
7043 { "(bad)", { XX } },
7044 { "(bad)", { XX } },
7045 { "(bad)", { XX } },
7046 { "(bad)", { XX } },
c0f3af97 7047 /* 40 */
c1e679ec 7048 { "(bad)", { XX } },
d5d7db8e
L
7049 { "(bad)", { XX } },
7050 { "(bad)", { XX } },
f88c9eb0
SP
7051 { "(bad)", { XX } },
7052 { "(bad)", { XX } },
7053 { "(bad)", { XX } },
7054 { "(bad)", { XX } },
7055 { "(bad)", { XX } },
c1e679ec 7056 /* 48 */
d5d7db8e
L
7057 { "(bad)", { XX } },
7058 { "(bad)", { XX } },
d5d7db8e 7059 { "(bad)", { XX } },
f88c9eb0 7060 { "(bad)", { XX } },
d5d7db8e
L
7061 { "(bad)", { XX } },
7062 { "(bad)", { XX } },
7063 { "(bad)", { XX } },
7064 { "(bad)", { XX } },
c1e679ec 7065 /* 50 */
d5d7db8e
L
7066 { "(bad)", { XX } },
7067 { "(bad)", { XX } },
7068 { "(bad)", { XX } },
f88c9eb0
SP
7069 { "(bad)", { XX } },
7070 { "(bad)", { XX } },
7071 { "(bad)", { XX } },
7072 { "(bad)", { XX } },
7073 { "(bad)", { XX } },
4e7d34a6 7074 /* 58 */
d5d7db8e
L
7075 { "(bad)", { XX } },
7076 { "(bad)", { XX } },
7077 { "(bad)", { XX } },
f88c9eb0 7078 { "(bad)", { XX } },
d5d7db8e
L
7079 { "(bad)", { XX } },
7080 { "(bad)", { XX } },
7081 { "(bad)", { XX } },
7082 { "(bad)", { XX } },
4e7d34a6 7083 /* 60 */
d5d7db8e 7084 { "(bad)", { XX } },
f88c9eb0
SP
7085 { "(bad)", { XX } },
7086 { "(bad)", { XX } },
7087 { "(bad)", { XX } },
d5d7db8e
L
7088 { "(bad)", { XX } },
7089 { "(bad)", { XX } },
7090 { "(bad)", { XX } },
7091 { "(bad)", { XX } },
4e7d34a6 7092 /* 68 */
d5d7db8e
L
7093 { "(bad)", { XX } },
7094 { "(bad)", { XX } },
7095 { "(bad)", { XX } },
7096 { "(bad)", { XX } },
7097 { "(bad)", { XX } },
7098 { "(bad)", { XX } },
7099 { "(bad)", { XX } },
7100 { "(bad)", { XX } },
4e7d34a6 7101 /* 70 */
d5d7db8e
L
7102 { "(bad)", { XX } },
7103 { "(bad)", { XX } },
7104 { "(bad)", { XX } },
7105 { "(bad)", { XX } },
7106 { "(bad)", { XX } },
7107 { "(bad)", { XX } },
7108 { "(bad)", { XX } },
7109 { "(bad)", { XX } },
4e7d34a6 7110 /* 78 */
d5d7db8e
L
7111 { "(bad)", { XX } },
7112 { "(bad)", { XX } },
7113 { "(bad)", { XX } },
7114 { "(bad)", { XX } },
7115 { "(bad)", { XX } },
7116 { "(bad)", { XX } },
7117 { "(bad)", { XX } },
7118 { "(bad)", { XX } },
4e7d34a6 7119 /* 80 */
d5d7db8e
L
7120 { "(bad)", { XX } },
7121 { "(bad)", { XX } },
7122 { "(bad)", { XX } },
7123 { "(bad)", { XX } },
7124 { "(bad)", { XX } },
7125 { "(bad)", { XX } },
7126 { "(bad)", { XX } },
7127 { "(bad)", { XX } },
4e7d34a6 7128 /* 88 */
d5d7db8e
L
7129 { "(bad)", { XX } },
7130 { "(bad)", { XX } },
7131 { "(bad)", { XX } },
7132 { "(bad)", { XX } },
7133 { "(bad)", { XX } },
7134 { "(bad)", { XX } },
7135 { "(bad)", { XX } },
7136 { "(bad)", { XX } },
4e7d34a6 7137 /* 90 */
d5d7db8e
L
7138 { "(bad)", { XX } },
7139 { "(bad)", { XX } },
7140 { "(bad)", { XX } },
7141 { "(bad)", { XX } },
7142 { "(bad)", { XX } },
7143 { "(bad)", { XX } },
7144 { "(bad)", { XX } },
7145 { "(bad)", { XX } },
4e7d34a6 7146 /* 98 */
d5d7db8e
L
7147 { "(bad)", { XX } },
7148 { "(bad)", { XX } },
7149 { "(bad)", { XX } },
7150 { "(bad)", { XX } },
7151 { "(bad)", { XX } },
7152 { "(bad)", { XX } },
7153 { "(bad)", { XX } },
7154 { "(bad)", { XX } },
4e7d34a6 7155 /* a0 */
d5d7db8e
L
7156 { "(bad)", { XX } },
7157 { "(bad)", { XX } },
7158 { "(bad)", { XX } },
7159 { "(bad)", { XX } },
7160 { "(bad)", { XX } },
7161 { "(bad)", { XX } },
7162 { "(bad)", { XX } },
7163 { "(bad)", { XX } },
4e7d34a6 7164 /* a8 */
d5d7db8e
L
7165 { "(bad)", { XX } },
7166 { "(bad)", { XX } },
7167 { "(bad)", { XX } },
7168 { "(bad)", { XX } },
7169 { "(bad)", { XX } },
7170 { "(bad)", { XX } },
7171 { "(bad)", { XX } },
7172 { "(bad)", { XX } },
7173 /* b0 */
7174 { "(bad)", { XX } },
7175 { "(bad)", { XX } },
7176 { "(bad)", { XX } },
7177 { "(bad)", { XX } },
7178 { "(bad)", { XX } },
7179 { "(bad)", { XX } },
7180 { "(bad)", { XX } },
7181 { "(bad)", { XX } },
85f10a01 7182 /* b8 */
d5d7db8e
L
7183 { "(bad)", { XX } },
7184 { "(bad)", { XX } },
7185 { "(bad)", { XX } },
7186 { "(bad)", { XX } },
7187 { "(bad)", { XX } },
7188 { "(bad)", { XX } },
7189 { "(bad)", { XX } },
7190 { "(bad)", { XX } },
85f10a01 7191 /* c0 */
d5d7db8e
L
7192 { "(bad)", { XX } },
7193 { "(bad)", { XX } },
7194 { "(bad)", { XX } },
7195 { "(bad)", { XX } },
7196 { "(bad)", { XX } },
7197 { "(bad)", { XX } },
7198 { "(bad)", { XX } },
7199 { "(bad)", { XX } },
85f10a01 7200 /* c8 */
d5d7db8e
L
7201 { "(bad)", { XX } },
7202 { "(bad)", { XX } },
7203 { "(bad)", { XX } },
7204 { "(bad)", { XX } },
7205 { "(bad)", { XX } },
7206 { "(bad)", { XX } },
7207 { "(bad)", { XX } },
7208 { "(bad)", { XX } },
85f10a01 7209 /* d0 */
d5d7db8e
L
7210 { "(bad)", { XX } },
7211 { "(bad)", { XX } },
7212 { "(bad)", { XX } },
7213 { "(bad)", { XX } },
7214 { "(bad)", { XX } },
7215 { "(bad)", { XX } },
7216 { "(bad)", { XX } },
7217 { "(bad)", { XX } },
85f10a01 7218 /* d8 */
d5d7db8e
L
7219 { "(bad)", { XX } },
7220 { "(bad)", { XX } },
7221 { "(bad)", { XX } },
7222 { "(bad)", { XX } },
7223 { "(bad)", { XX } },
7224 { "(bad)", { XX } },
7225 { "(bad)", { XX } },
7226 { "(bad)", { XX } },
85f10a01 7227 /* e0 */
d5d7db8e
L
7228 { "(bad)", { XX } },
7229 { "(bad)", { XX } },
7230 { "(bad)", { XX } },
7231 { "(bad)", { XX } },
7232 { "(bad)", { XX } },
7233 { "(bad)", { XX } },
7234 { "(bad)", { XX } },
7235 { "(bad)", { XX } },
85f10a01 7236 /* e8 */
d5d7db8e
L
7237 { "(bad)", { XX } },
7238 { "(bad)", { XX } },
7239 { "(bad)", { XX } },
7240 { "(bad)", { XX } },
7241 { "(bad)", { XX } },
7242 { "(bad)", { XX } },
7243 { "(bad)", { XX } },
7244 { "(bad)", { XX } },
85f10a01 7245 /* f0 */
c0f3af97
L
7246 { "(bad)", { XX } },
7247 { "(bad)", { XX } },
d5d7db8e
L
7248 { "(bad)", { XX } },
7249 { "(bad)", { XX } },
7250 { "(bad)", { XX } },
7251 { "(bad)", { XX } },
7252 { "(bad)", { XX } },
7253 { "(bad)", { XX } },
85f10a01 7254 /* f8 */
d5d7db8e
L
7255 { "(bad)", { XX } },
7256 { "(bad)", { XX } },
7257 { "(bad)", { XX } },
7258 { "(bad)", { XX } },
7259 { "(bad)", { XX } },
7260 { "(bad)", { XX } },
7261 { "(bad)", { XX } },
7262 { "(bad)", { XX } },
85f10a01 7263 },
c0f3af97
L
7264};
7265
7266static const struct dis386 vex_table[][256] = {
7267 /* VEX_0F */
85f10a01
MM
7268 {
7269 /* 00 */
d5d7db8e
L
7270 { "(bad)", { XX } },
7271 { "(bad)", { XX } },
7272 { "(bad)", { XX } },
7273 { "(bad)", { XX } },
7274 { "(bad)", { XX } },
7275 { "(bad)", { XX } },
7276 { "(bad)", { XX } },
7277 { "(bad)", { XX } },
85f10a01 7278 /* 08 */
d5d7db8e
L
7279 { "(bad)", { XX } },
7280 { "(bad)", { XX } },
7281 { "(bad)", { XX } },
7282 { "(bad)", { XX } },
d5d7db8e
L
7283 { "(bad)", { XX } },
7284 { "(bad)", { XX } },
7285 { "(bad)", { XX } },
7286 { "(bad)", { XX } },
c0f3af97
L
7287 /* 10 */
7288 { PREFIX_TABLE (PREFIX_VEX_10) },
7289 { PREFIX_TABLE (PREFIX_VEX_11) },
7290 { PREFIX_TABLE (PREFIX_VEX_12) },
7291 { MOD_TABLE (MOD_VEX_13) },
7292 { "vunpcklpX", { XM, Vex, EXx } },
7293 { "vunpckhpX", { XM, Vex, EXx } },
7294 { PREFIX_TABLE (PREFIX_VEX_16) },
7295 { MOD_TABLE (MOD_VEX_17) },
7296 /* 18 */
d5d7db8e
L
7297 { "(bad)", { XX } },
7298 { "(bad)", { XX } },
7299 { "(bad)", { XX } },
d5d7db8e
L
7300 { "(bad)", { XX } },
7301 { "(bad)", { XX } },
7302 { "(bad)", { XX } },
7303 { "(bad)", { XX } },
7304 { "(bad)", { XX } },
c0f3af97 7305 /* 20 */
d5d7db8e
L
7306 { "(bad)", { XX } },
7307 { "(bad)", { XX } },
7308 { "(bad)", { XX } },
7309 { "(bad)", { XX } },
7310 { "(bad)", { XX } },
7311 { "(bad)", { XX } },
7312 { "(bad)", { XX } },
7313 { "(bad)", { XX } },
c0f3af97
L
7314 /* 28 */
7315 { "vmovapX", { XM, EXx } },
b6169b20 7316 { "vmovapX", { EXxS, XM } },
c0f3af97
L
7317 { PREFIX_TABLE (PREFIX_VEX_2A) },
7318 { MOD_TABLE (MOD_VEX_2B) },
7319 { PREFIX_TABLE (PREFIX_VEX_2C) },
7320 { PREFIX_TABLE (PREFIX_VEX_2D) },
7321 { PREFIX_TABLE (PREFIX_VEX_2E) },
7322 { PREFIX_TABLE (PREFIX_VEX_2F) },
85f10a01 7323 /* 30 */
d5d7db8e
L
7324 { "(bad)", { XX } },
7325 { "(bad)", { XX } },
7326 { "(bad)", { XX } },
7327 { "(bad)", { XX } },
7328 { "(bad)", { XX } },
7329 { "(bad)", { XX } },
7330 { "(bad)", { XX } },
7331 { "(bad)", { XX } },
4e7d34a6 7332 /* 38 */
d5d7db8e
L
7333 { "(bad)", { XX } },
7334 { "(bad)", { XX } },
7335 { "(bad)", { XX } },
7336 { "(bad)", { XX } },
7337 { "(bad)", { XX } },
7338 { "(bad)", { XX } },
7339 { "(bad)", { XX } },
7340 { "(bad)", { XX } },
7341 /* 40 */
c0f3af97
L
7342 { "(bad)", { XX } },
7343 { "(bad)", { XX } },
7344 { "(bad)", { XX } },
d5d7db8e
L
7345 { "(bad)", { XX } },
7346 { "(bad)", { XX } },
7347 { "(bad)", { XX } },
7348 { "(bad)", { XX } },
7349 { "(bad)", { XX } },
85f10a01 7350 /* 48 */
85f10a01
MM
7351 { "(bad)", { XX } },
7352 { "(bad)", { XX } },
7353 { "(bad)", { XX } },
7354 { "(bad)", { XX } },
7355 { "(bad)", { XX } },
7356 { "(bad)", { XX } },
7357 { "(bad)", { XX } },
7358 { "(bad)", { XX } },
d5d7db8e 7359 /* 50 */
c0f3af97
L
7360 { MOD_TABLE (MOD_VEX_51) },
7361 { PREFIX_TABLE (PREFIX_VEX_51) },
7362 { PREFIX_TABLE (PREFIX_VEX_52) },
7363 { PREFIX_TABLE (PREFIX_VEX_53) },
7364 { "vandpX", { XM, Vex, EXx } },
7365 { "vandnpX", { XM, Vex, EXx } },
7366 { "vorpX", { XM, Vex, EXx } },
7367 { "vxorpX", { XM, Vex, EXx } },
7368 /* 58 */
7369 { PREFIX_TABLE (PREFIX_VEX_58) },
7370 { PREFIX_TABLE (PREFIX_VEX_59) },
7371 { PREFIX_TABLE (PREFIX_VEX_5A) },
7372 { PREFIX_TABLE (PREFIX_VEX_5B) },
7373 { PREFIX_TABLE (PREFIX_VEX_5C) },
7374 { PREFIX_TABLE (PREFIX_VEX_5D) },
7375 { PREFIX_TABLE (PREFIX_VEX_5E) },
7376 { PREFIX_TABLE (PREFIX_VEX_5F) },
7377 /* 60 */
7378 { PREFIX_TABLE (PREFIX_VEX_60) },
7379 { PREFIX_TABLE (PREFIX_VEX_61) },
7380 { PREFIX_TABLE (PREFIX_VEX_62) },
7381 { PREFIX_TABLE (PREFIX_VEX_63) },
7382 { PREFIX_TABLE (PREFIX_VEX_64) },
7383 { PREFIX_TABLE (PREFIX_VEX_65) },
7384 { PREFIX_TABLE (PREFIX_VEX_66) },
7385 { PREFIX_TABLE (PREFIX_VEX_67) },
7386 /* 68 */
7387 { PREFIX_TABLE (PREFIX_VEX_68) },
7388 { PREFIX_TABLE (PREFIX_VEX_69) },
7389 { PREFIX_TABLE (PREFIX_VEX_6A) },
7390 { PREFIX_TABLE (PREFIX_VEX_6B) },
7391 { PREFIX_TABLE (PREFIX_VEX_6C) },
7392 { PREFIX_TABLE (PREFIX_VEX_6D) },
7393 { PREFIX_TABLE (PREFIX_VEX_6E) },
7394 { PREFIX_TABLE (PREFIX_VEX_6F) },
7395 /* 70 */
7396 { PREFIX_TABLE (PREFIX_VEX_70) },
7397 { REG_TABLE (REG_VEX_71) },
7398 { REG_TABLE (REG_VEX_72) },
7399 { REG_TABLE (REG_VEX_73) },
7400 { PREFIX_TABLE (PREFIX_VEX_74) },
7401 { PREFIX_TABLE (PREFIX_VEX_75) },
7402 { PREFIX_TABLE (PREFIX_VEX_76) },
7403 { PREFIX_TABLE (PREFIX_VEX_77) },
7404 /* 78 */
85f10a01
MM
7405 { "(bad)", { XX } },
7406 { "(bad)", { XX } },
7407 { "(bad)", { XX } },
7408 { "(bad)", { XX } },
c0f3af97
L
7409 { PREFIX_TABLE (PREFIX_VEX_7C) },
7410 { PREFIX_TABLE (PREFIX_VEX_7D) },
7411 { PREFIX_TABLE (PREFIX_VEX_7E) },
7412 { PREFIX_TABLE (PREFIX_VEX_7F) },
7413 /* 80 */
85f10a01
MM
7414 { "(bad)", { XX } },
7415 { "(bad)", { XX } },
7416 { "(bad)", { XX } },
7417 { "(bad)", { XX } },
85f10a01
MM
7418 { "(bad)", { XX } },
7419 { "(bad)", { XX } },
7420 { "(bad)", { XX } },
7421 { "(bad)", { XX } },
c0f3af97 7422 /* 88 */
85f10a01
MM
7423 { "(bad)", { XX } },
7424 { "(bad)", { XX } },
7425 { "(bad)", { XX } },
7426 { "(bad)", { XX } },
7427 { "(bad)", { XX } },
7428 { "(bad)", { XX } },
7429 { "(bad)", { XX } },
7430 { "(bad)", { XX } },
c0f3af97 7431 /* 90 */
85f10a01
MM
7432 { "(bad)", { XX } },
7433 { "(bad)", { XX } },
7434 { "(bad)", { XX } },
7435 { "(bad)", { XX } },
7436 { "(bad)", { XX } },
7437 { "(bad)", { XX } },
7438 { "(bad)", { XX } },
85f10a01 7439 { "(bad)", { XX } },
c0f3af97 7440 /* 98 */
85f10a01
MM
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 /* a0 */
d5d7db8e
L
7450 { "(bad)", { XX } },
7451 { "(bad)", { XX } },
7452 { "(bad)", { XX } },
7453 { "(bad)", { XX } },
7454 { "(bad)", { XX } },
7455 { "(bad)", { XX } },
7456 { "(bad)", { XX } },
7457 { "(bad)", { XX } },
c0f3af97 7458 /* a8 */
d5d7db8e
L
7459 { "(bad)", { XX } },
7460 { "(bad)", { XX } },
7461 { "(bad)", { XX } },
7462 { "(bad)", { XX } },
7463 { "(bad)", { XX } },
7464 { "(bad)", { XX } },
c0f3af97 7465 { REG_TABLE (REG_VEX_AE) },
d5d7db8e 7466 { "(bad)", { XX } },
c0f3af97 7467 /* b0 */
d5d7db8e 7468 { "(bad)", { XX } },
d5d7db8e
L
7469 { "(bad)", { XX } },
7470 { "(bad)", { XX } },
7471 { "(bad)", { XX } },
7472 { "(bad)", { XX } },
7473 { "(bad)", { XX } },
7474 { "(bad)", { XX } },
7475 { "(bad)", { XX } },
c0f3af97 7476 /* b8 */
d5d7db8e 7477 { "(bad)", { XX } },
d5d7db8e
L
7478 { "(bad)", { XX } },
7479 { "(bad)", { XX } },
7480 { "(bad)", { XX } },
7481 { "(bad)", { XX } },
7482 { "(bad)", { XX } },
7483 { "(bad)", { XX } },
7484 { "(bad)", { XX } },
c0f3af97 7485 /* c0 */
d5d7db8e 7486 { "(bad)", { XX } },
d5d7db8e 7487 { "(bad)", { XX } },
c0f3af97 7488 { PREFIX_TABLE (PREFIX_VEX_C2) },
d5d7db8e 7489 { "(bad)", { XX } },
c0f3af97
L
7490 { PREFIX_TABLE (PREFIX_VEX_C4) },
7491 { PREFIX_TABLE (PREFIX_VEX_C5) },
7492 { "vshufpX", { XM, Vex, EXx, Ib } },
d5d7db8e 7493 { "(bad)", { XX } },
c0f3af97 7494 /* c8 */
d5d7db8e
L
7495 { "(bad)", { XX } },
7496 { "(bad)", { XX } },
7497 { "(bad)", { XX } },
7498 { "(bad)", { XX } },
7499 { "(bad)", { XX } },
d5d7db8e
L
7500 { "(bad)", { XX } },
7501 { "(bad)", { XX } },
7502 { "(bad)", { XX } },
c0f3af97
L
7503 /* d0 */
7504 { PREFIX_TABLE (PREFIX_VEX_D0) },
7505 { PREFIX_TABLE (PREFIX_VEX_D1) },
7506 { PREFIX_TABLE (PREFIX_VEX_D2) },
7507 { PREFIX_TABLE (PREFIX_VEX_D3) },
7508 { PREFIX_TABLE (PREFIX_VEX_D4) },
7509 { PREFIX_TABLE (PREFIX_VEX_D5) },
7510 { PREFIX_TABLE (PREFIX_VEX_D6) },
7511 { PREFIX_TABLE (PREFIX_VEX_D7) },
7512 /* d8 */
7513 { PREFIX_TABLE (PREFIX_VEX_D8) },
7514 { PREFIX_TABLE (PREFIX_VEX_D9) },
7515 { PREFIX_TABLE (PREFIX_VEX_DA) },
7516 { PREFIX_TABLE (PREFIX_VEX_DB) },
7517 { PREFIX_TABLE (PREFIX_VEX_DC) },
7518 { PREFIX_TABLE (PREFIX_VEX_DD) },
7519 { PREFIX_TABLE (PREFIX_VEX_DE) },
7520 { PREFIX_TABLE (PREFIX_VEX_DF) },
7521 /* e0 */
7522 { PREFIX_TABLE (PREFIX_VEX_E0) },
7523 { PREFIX_TABLE (PREFIX_VEX_E1) },
7524 { PREFIX_TABLE (PREFIX_VEX_E2) },
7525 { PREFIX_TABLE (PREFIX_VEX_E3) },
7526 { PREFIX_TABLE (PREFIX_VEX_E4) },
7527 { PREFIX_TABLE (PREFIX_VEX_E5) },
7528 { PREFIX_TABLE (PREFIX_VEX_E6) },
7529 { PREFIX_TABLE (PREFIX_VEX_E7) },
7530 /* e8 */
7531 { PREFIX_TABLE (PREFIX_VEX_E8) },
7532 { PREFIX_TABLE (PREFIX_VEX_E9) },
7533 { PREFIX_TABLE (PREFIX_VEX_EA) },
7534 { PREFIX_TABLE (PREFIX_VEX_EB) },
7535 { PREFIX_TABLE (PREFIX_VEX_EC) },
7536 { PREFIX_TABLE (PREFIX_VEX_ED) },
7537 { PREFIX_TABLE (PREFIX_VEX_EE) },
7538 { PREFIX_TABLE (PREFIX_VEX_EF) },
7539 /* f0 */
7540 { PREFIX_TABLE (PREFIX_VEX_F0) },
7541 { PREFIX_TABLE (PREFIX_VEX_F1) },
7542 { PREFIX_TABLE (PREFIX_VEX_F2) },
7543 { PREFIX_TABLE (PREFIX_VEX_F3) },
7544 { PREFIX_TABLE (PREFIX_VEX_F4) },
7545 { PREFIX_TABLE (PREFIX_VEX_F5) },
7546 { PREFIX_TABLE (PREFIX_VEX_F6) },
7547 { PREFIX_TABLE (PREFIX_VEX_F7) },
7548 /* f8 */
7549 { PREFIX_TABLE (PREFIX_VEX_F8) },
7550 { PREFIX_TABLE (PREFIX_VEX_F9) },
7551 { PREFIX_TABLE (PREFIX_VEX_FA) },
7552 { PREFIX_TABLE (PREFIX_VEX_FB) },
7553 { PREFIX_TABLE (PREFIX_VEX_FC) },
7554 { PREFIX_TABLE (PREFIX_VEX_FD) },
7555 { PREFIX_TABLE (PREFIX_VEX_FE) },
d5d7db8e 7556 { "(bad)", { XX } },
c0f3af97
L
7557 },
7558 /* VEX_0F38 */
7559 {
7560 /* 00 */
7561 { PREFIX_TABLE (PREFIX_VEX_3800) },
7562 { PREFIX_TABLE (PREFIX_VEX_3801) },
7563 { PREFIX_TABLE (PREFIX_VEX_3802) },
7564 { PREFIX_TABLE (PREFIX_VEX_3803) },
7565 { PREFIX_TABLE (PREFIX_VEX_3804) },
7566 { PREFIX_TABLE (PREFIX_VEX_3805) },
7567 { PREFIX_TABLE (PREFIX_VEX_3806) },
7568 { PREFIX_TABLE (PREFIX_VEX_3807) },
7569 /* 08 */
7570 { PREFIX_TABLE (PREFIX_VEX_3808) },
7571 { PREFIX_TABLE (PREFIX_VEX_3809) },
7572 { PREFIX_TABLE (PREFIX_VEX_380A) },
7573 { PREFIX_TABLE (PREFIX_VEX_380B) },
7574 { PREFIX_TABLE (PREFIX_VEX_380C) },
7575 { PREFIX_TABLE (PREFIX_VEX_380D) },
7576 { PREFIX_TABLE (PREFIX_VEX_380E) },
7577 { PREFIX_TABLE (PREFIX_VEX_380F) },
7578 /* 10 */
d5d7db8e
L
7579 { "(bad)", { XX } },
7580 { "(bad)", { XX } },
7581 { "(bad)", { XX } },
7582 { "(bad)", { XX } },
d5d7db8e
L
7583 { "(bad)", { XX } },
7584 { "(bad)", { XX } },
7585 { "(bad)", { XX } },
c0f3af97
L
7586 { PREFIX_TABLE (PREFIX_VEX_3817) },
7587 /* 18 */
7588 { PREFIX_TABLE (PREFIX_VEX_3818) },
7589 { PREFIX_TABLE (PREFIX_VEX_3819) },
7590 { PREFIX_TABLE (PREFIX_VEX_381A) },
d5d7db8e 7591 { "(bad)", { XX } },
c0f3af97
L
7592 { PREFIX_TABLE (PREFIX_VEX_381C) },
7593 { PREFIX_TABLE (PREFIX_VEX_381D) },
7594 { PREFIX_TABLE (PREFIX_VEX_381E) },
d5d7db8e 7595 { "(bad)", { XX } },
c0f3af97
L
7596 /* 20 */
7597 { PREFIX_TABLE (PREFIX_VEX_3820) },
7598 { PREFIX_TABLE (PREFIX_VEX_3821) },
7599 { PREFIX_TABLE (PREFIX_VEX_3822) },
7600 { PREFIX_TABLE (PREFIX_VEX_3823) },
7601 { PREFIX_TABLE (PREFIX_VEX_3824) },
7602 { PREFIX_TABLE (PREFIX_VEX_3825) },
d5d7db8e
L
7603 { "(bad)", { XX } },
7604 { "(bad)", { XX } },
c0f3af97
L
7605 /* 28 */
7606 { PREFIX_TABLE (PREFIX_VEX_3828) },
7607 { PREFIX_TABLE (PREFIX_VEX_3829) },
7608 { PREFIX_TABLE (PREFIX_VEX_382A) },
7609 { PREFIX_TABLE (PREFIX_VEX_382B) },
7610 { PREFIX_TABLE (PREFIX_VEX_382C) },
7611 { PREFIX_TABLE (PREFIX_VEX_382D) },
7612 { PREFIX_TABLE (PREFIX_VEX_382E) },
7613 { PREFIX_TABLE (PREFIX_VEX_382F) },
7614 /* 30 */
7615 { PREFIX_TABLE (PREFIX_VEX_3830) },
7616 { PREFIX_TABLE (PREFIX_VEX_3831) },
7617 { PREFIX_TABLE (PREFIX_VEX_3832) },
7618 { PREFIX_TABLE (PREFIX_VEX_3833) },
7619 { PREFIX_TABLE (PREFIX_VEX_3834) },
7620 { PREFIX_TABLE (PREFIX_VEX_3835) },
7621 { "(bad)", { XX } },
7622 { PREFIX_TABLE (PREFIX_VEX_3837) },
7623 /* 38 */
7624 { PREFIX_TABLE (PREFIX_VEX_3838) },
7625 { PREFIX_TABLE (PREFIX_VEX_3839) },
7626 { PREFIX_TABLE (PREFIX_VEX_383A) },
7627 { PREFIX_TABLE (PREFIX_VEX_383B) },
7628 { PREFIX_TABLE (PREFIX_VEX_383C) },
7629 { PREFIX_TABLE (PREFIX_VEX_383D) },
7630 { PREFIX_TABLE (PREFIX_VEX_383E) },
7631 { PREFIX_TABLE (PREFIX_VEX_383F) },
7632 /* 40 */
7633 { PREFIX_TABLE (PREFIX_VEX_3840) },
7634 { PREFIX_TABLE (PREFIX_VEX_3841) },
d5d7db8e 7635 { "(bad)", { XX } },
d5d7db8e
L
7636 { "(bad)", { XX } },
7637 { "(bad)", { XX } },
7638 { "(bad)", { XX } },
7639 { "(bad)", { XX } },
7640 { "(bad)", { XX } },
c0f3af97 7641 /* 48 */
d5d7db8e
L
7642 { "(bad)", { XX } },
7643 { "(bad)", { XX } },
7644 { "(bad)", { XX } },
d5d7db8e
L
7645 { "(bad)", { XX } },
7646 { "(bad)", { XX } },
7647 { "(bad)", { XX } },
7648 { "(bad)", { XX } },
7649 { "(bad)", { XX } },
c0f3af97 7650 /* 50 */
d5d7db8e
L
7651 { "(bad)", { XX } },
7652 { "(bad)", { XX } },
7653 { "(bad)", { XX } },
d5d7db8e
L
7654 { "(bad)", { XX } },
7655 { "(bad)", { XX } },
7656 { "(bad)", { XX } },
7657 { "(bad)", { XX } },
7658 { "(bad)", { XX } },
c0f3af97 7659 /* 58 */
d5d7db8e
L
7660 { "(bad)", { XX } },
7661 { "(bad)", { XX } },
7662 { "(bad)", { XX } },
d5d7db8e
L
7663 { "(bad)", { XX } },
7664 { "(bad)", { XX } },
7665 { "(bad)", { XX } },
7666 { "(bad)", { XX } },
7667 { "(bad)", { XX } },
c0f3af97 7668 /* 60 */
d5d7db8e
L
7669 { "(bad)", { XX } },
7670 { "(bad)", { XX } },
7671 { "(bad)", { XX } },
d5d7db8e
L
7672 { "(bad)", { XX } },
7673 { "(bad)", { XX } },
7674 { "(bad)", { XX } },
7675 { "(bad)", { XX } },
7676 { "(bad)", { XX } },
c0f3af97 7677 /* 68 */
d5d7db8e
L
7678 { "(bad)", { XX } },
7679 { "(bad)", { XX } },
7680 { "(bad)", { XX } },
d5d7db8e
L
7681 { "(bad)", { XX } },
7682 { "(bad)", { XX } },
7683 { "(bad)", { XX } },
7684 { "(bad)", { XX } },
7685 { "(bad)", { XX } },
c0f3af97 7686 /* 70 */
d5d7db8e
L
7687 { "(bad)", { XX } },
7688 { "(bad)", { XX } },
7689 { "(bad)", { XX } },
d5d7db8e
L
7690 { "(bad)", { XX } },
7691 { "(bad)", { XX } },
7692 { "(bad)", { XX } },
7693 { "(bad)", { XX } },
7694 { "(bad)", { XX } },
c0f3af97 7695 /* 78 */
d5d7db8e
L
7696 { "(bad)", { XX } },
7697 { "(bad)", { XX } },
7698 { "(bad)", { XX } },
d5d7db8e
L
7699 { "(bad)", { XX } },
7700 { "(bad)", { XX } },
7701 { "(bad)", { XX } },
7702 { "(bad)", { XX } },
7703 { "(bad)", { XX } },
c0f3af97 7704 /* 80 */
d5d7db8e
L
7705 { "(bad)", { XX } },
7706 { "(bad)", { XX } },
7707 { "(bad)", { XX } },
d5d7db8e
L
7708 { "(bad)", { XX } },
7709 { "(bad)", { XX } },
7710 { "(bad)", { XX } },
7711 { "(bad)", { XX } },
7712 { "(bad)", { XX } },
c0f3af97 7713 /* 88 */
d5d7db8e
L
7714 { "(bad)", { XX } },
7715 { "(bad)", { XX } },
7716 { "(bad)", { XX } },
d5d7db8e
L
7717 { "(bad)", { XX } },
7718 { "(bad)", { XX } },
7719 { "(bad)", { XX } },
7720 { "(bad)", { XX } },
7721 { "(bad)", { XX } },
c0f3af97 7722 /* 90 */
d5d7db8e
L
7723 { "(bad)", { XX } },
7724 { "(bad)", { XX } },
7725 { "(bad)", { XX } },
d5d7db8e
L
7726 { "(bad)", { XX } },
7727 { "(bad)", { XX } },
7728 { "(bad)", { XX } },
0bfee649
L
7729 { PREFIX_TABLE (PREFIX_VEX_3896) },
7730 { PREFIX_TABLE (PREFIX_VEX_3897) },
c0f3af97 7731 /* 98 */
0bfee649
L
7732 { PREFIX_TABLE (PREFIX_VEX_3898) },
7733 { PREFIX_TABLE (PREFIX_VEX_3899) },
7734 { PREFIX_TABLE (PREFIX_VEX_389A) },
7735 { PREFIX_TABLE (PREFIX_VEX_389B) },
7736 { PREFIX_TABLE (PREFIX_VEX_389C) },
7737 { PREFIX_TABLE (PREFIX_VEX_389D) },
7738 { PREFIX_TABLE (PREFIX_VEX_389E) },
7739 { PREFIX_TABLE (PREFIX_VEX_389F) },
c0f3af97 7740 /* a0 */
d5d7db8e
L
7741 { "(bad)", { XX } },
7742 { "(bad)", { XX } },
7743 { "(bad)", { XX } },
d5d7db8e
L
7744 { "(bad)", { XX } },
7745 { "(bad)", { XX } },
7746 { "(bad)", { XX } },
0bfee649
L
7747 { PREFIX_TABLE (PREFIX_VEX_38A6) },
7748 { PREFIX_TABLE (PREFIX_VEX_38A7) },
c0f3af97 7749 /* a8 */
0bfee649
L
7750 { PREFIX_TABLE (PREFIX_VEX_38A8) },
7751 { PREFIX_TABLE (PREFIX_VEX_38A9) },
7752 { PREFIX_TABLE (PREFIX_VEX_38AA) },
7753 { PREFIX_TABLE (PREFIX_VEX_38AB) },
7754 { PREFIX_TABLE (PREFIX_VEX_38AC) },
7755 { PREFIX_TABLE (PREFIX_VEX_38AD) },
7756 { PREFIX_TABLE (PREFIX_VEX_38AE) },
7757 { PREFIX_TABLE (PREFIX_VEX_38AF) },
c0f3af97 7758 /* b0 */
d5d7db8e
L
7759 { "(bad)", { XX } },
7760 { "(bad)", { XX } },
7761 { "(bad)", { XX } },
7762 { "(bad)", { XX } },
7763 { "(bad)", { XX } },
7764 { "(bad)", { XX } },
0bfee649
L
7765 { PREFIX_TABLE (PREFIX_VEX_38B6) },
7766 { PREFIX_TABLE (PREFIX_VEX_38B7) },
c0f3af97 7767 /* b8 */
0bfee649
L
7768 { PREFIX_TABLE (PREFIX_VEX_38B8) },
7769 { PREFIX_TABLE (PREFIX_VEX_38B9) },
7770 { PREFIX_TABLE (PREFIX_VEX_38BA) },
7771 { PREFIX_TABLE (PREFIX_VEX_38BB) },
7772 { PREFIX_TABLE (PREFIX_VEX_38BC) },
7773 { PREFIX_TABLE (PREFIX_VEX_38BD) },
7774 { PREFIX_TABLE (PREFIX_VEX_38BE) },
7775 { PREFIX_TABLE (PREFIX_VEX_38BF) },
c0f3af97 7776 /* c0 */
d5d7db8e
L
7777 { "(bad)", { XX } },
7778 { "(bad)", { XX } },
7779 { "(bad)", { XX } },
7780 { "(bad)", { XX } },
d5d7db8e
L
7781 { "(bad)", { XX } },
7782 { "(bad)", { XX } },
7783 { "(bad)", { XX } },
7784 { "(bad)", { XX } },
c0f3af97 7785 /* c8 */
d5d7db8e
L
7786 { "(bad)", { XX } },
7787 { "(bad)", { XX } },
7788 { "(bad)", { XX } },
7789 { "(bad)", { XX } },
d5d7db8e 7790 { "(bad)", { XX } },
d5d7db8e
L
7791 { "(bad)", { XX } },
7792 { "(bad)", { XX } },
d5d7db8e 7793 { "(bad)", { XX } },
c0f3af97 7794 /* d0 */
d5d7db8e
L
7795 { "(bad)", { XX } },
7796 { "(bad)", { XX } },
d5d7db8e
L
7797 { "(bad)", { XX } },
7798 { "(bad)", { XX } },
7799 { "(bad)", { XX } },
7800 { "(bad)", { XX } },
d5d7db8e 7801 { "(bad)", { XX } },
d5d7db8e 7802 { "(bad)", { XX } },
c0f3af97 7803 /* d8 */
d5d7db8e 7804 { "(bad)", { XX } },
d5d7db8e
L
7805 { "(bad)", { XX } },
7806 { "(bad)", { XX } },
a5ff0eb2
L
7807 { PREFIX_TABLE (PREFIX_VEX_38DB) },
7808 { PREFIX_TABLE (PREFIX_VEX_38DC) },
7809 { PREFIX_TABLE (PREFIX_VEX_38DD) },
7810 { PREFIX_TABLE (PREFIX_VEX_38DE) },
7811 { PREFIX_TABLE (PREFIX_VEX_38DF) },
c0f3af97 7812 /* e0 */
d5d7db8e 7813 { "(bad)", { XX } },
d5d7db8e
L
7814 { "(bad)", { XX } },
7815 { "(bad)", { XX } },
7816 { "(bad)", { XX } },
7817 { "(bad)", { XX } },
d5d7db8e
L
7818 { "(bad)", { XX } },
7819 { "(bad)", { XX } },
7820 { "(bad)", { XX } },
c0f3af97 7821 /* e8 */
d5d7db8e
L
7822 { "(bad)", { XX } },
7823 { "(bad)", { XX } },
7824 { "(bad)", { XX } },
7825 { "(bad)", { XX } },
7826 { "(bad)", { XX } },
d5d7db8e
L
7827 { "(bad)", { XX } },
7828 { "(bad)", { XX } },
7829 { "(bad)", { XX } },
c0f3af97 7830 /* f0 */
d5d7db8e
L
7831 { "(bad)", { XX } },
7832 { "(bad)", { XX } },
7833 { "(bad)", { XX } },
7834 { "(bad)", { XX } },
7835 { "(bad)", { XX } },
d5d7db8e
L
7836 { "(bad)", { XX } },
7837 { "(bad)", { XX } },
7838 { "(bad)", { XX } },
c0f3af97 7839 /* f8 */
d5d7db8e
L
7840 { "(bad)", { XX } },
7841 { "(bad)", { XX } },
7842 { "(bad)", { XX } },
7843 { "(bad)", { XX } },
7844 { "(bad)", { XX } },
d5d7db8e
L
7845 { "(bad)", { XX } },
7846 { "(bad)", { XX } },
7847 { "(bad)", { XX } },
c0f3af97
L
7848 },
7849 /* VEX_0F3A */
7850 {
7851 /* 00 */
d5d7db8e
L
7852 { "(bad)", { XX } },
7853 { "(bad)", { XX } },
7854 { "(bad)", { XX } },
7855 { "(bad)", { XX } },
c0f3af97
L
7856 { PREFIX_TABLE (PREFIX_VEX_3A04) },
7857 { PREFIX_TABLE (PREFIX_VEX_3A05) },
7858 { PREFIX_TABLE (PREFIX_VEX_3A06) },
d5d7db8e 7859 { "(bad)", { XX } },
c0f3af97
L
7860 /* 08 */
7861 { PREFIX_TABLE (PREFIX_VEX_3A08) },
7862 { PREFIX_TABLE (PREFIX_VEX_3A09) },
7863 { PREFIX_TABLE (PREFIX_VEX_3A0A) },
7864 { PREFIX_TABLE (PREFIX_VEX_3A0B) },
7865 { PREFIX_TABLE (PREFIX_VEX_3A0C) },
7866 { PREFIX_TABLE (PREFIX_VEX_3A0D) },
7867 { PREFIX_TABLE (PREFIX_VEX_3A0E) },
7868 { PREFIX_TABLE (PREFIX_VEX_3A0F) },
7869 /* 10 */
d5d7db8e
L
7870 { "(bad)", { XX } },
7871 { "(bad)", { XX } },
7872 { "(bad)", { XX } },
7873 { "(bad)", { XX } },
c0f3af97
L
7874 { PREFIX_TABLE (PREFIX_VEX_3A14) },
7875 { PREFIX_TABLE (PREFIX_VEX_3A15) },
7876 { PREFIX_TABLE (PREFIX_VEX_3A16) },
7877 { PREFIX_TABLE (PREFIX_VEX_3A17) },
7878 /* 18 */
7879 { PREFIX_TABLE (PREFIX_VEX_3A18) },
7880 { PREFIX_TABLE (PREFIX_VEX_3A19) },
d5d7db8e
L
7881 { "(bad)", { XX } },
7882 { "(bad)", { XX } },
7883 { "(bad)", { XX } },
7884 { "(bad)", { XX } },
d5d7db8e
L
7885 { "(bad)", { XX } },
7886 { "(bad)", { XX } },
c0f3af97
L
7887 /* 20 */
7888 { PREFIX_TABLE (PREFIX_VEX_3A20) },
7889 { PREFIX_TABLE (PREFIX_VEX_3A21) },
7890 { PREFIX_TABLE (PREFIX_VEX_3A22) },
d5d7db8e
L
7891 { "(bad)", { XX } },
7892 { "(bad)", { XX } },
7893 { "(bad)", { XX } },
7894 { "(bad)", { XX } },
7895 { "(bad)", { XX } },
c0f3af97 7896 /* 28 */
d5d7db8e 7897 { "(bad)", { XX } },
d5d7db8e
L
7898 { "(bad)", { XX } },
7899 { "(bad)", { XX } },
7900 { "(bad)", { XX } },
7901 { "(bad)", { XX } },
7902 { "(bad)", { XX } },
7903 { "(bad)", { XX } },
7904 { "(bad)", { XX } },
c0f3af97 7905 /* 30 */
d5d7db8e 7906 { "(bad)", { XX } },
d5d7db8e
L
7907 { "(bad)", { XX } },
7908 { "(bad)", { XX } },
7909 { "(bad)", { XX } },
7910 { "(bad)", { XX } },
7911 { "(bad)", { XX } },
7912 { "(bad)", { XX } },
7913 { "(bad)", { XX } },
c0f3af97 7914 /* 38 */
d5d7db8e 7915 { "(bad)", { XX } },
d5d7db8e
L
7916 { "(bad)", { XX } },
7917 { "(bad)", { XX } },
7918 { "(bad)", { XX } },
7919 { "(bad)", { XX } },
7920 { "(bad)", { XX } },
7921 { "(bad)", { XX } },
7922 { "(bad)", { XX } },
c0f3af97
L
7923 /* 40 */
7924 { PREFIX_TABLE (PREFIX_VEX_3A40) },
7925 { PREFIX_TABLE (PREFIX_VEX_3A41) },
7926 { PREFIX_TABLE (PREFIX_VEX_3A42) },
d5d7db8e 7927 { "(bad)", { XX } },
ce2f5b3c 7928 { PREFIX_TABLE (PREFIX_VEX_3A44) },
d5d7db8e
L
7929 { "(bad)", { XX } },
7930 { "(bad)", { XX } },
7931 { "(bad)", { XX } },
c0f3af97 7932 /* 48 */
0bfee649
L
7933 { "(bad)", { XX } },
7934 { "(bad)", { XX } },
c0f3af97
L
7935 { PREFIX_TABLE (PREFIX_VEX_3A4A) },
7936 { PREFIX_TABLE (PREFIX_VEX_3A4B) },
7937 { PREFIX_TABLE (PREFIX_VEX_3A4C) },
d5d7db8e
L
7938 { "(bad)", { XX } },
7939 { "(bad)", { XX } },
7940 { "(bad)", { XX } },
c0f3af97 7941 /* 50 */
d5d7db8e 7942 { "(bad)", { XX } },
d5d7db8e
L
7943 { "(bad)", { XX } },
7944 { "(bad)", { XX } },
7945 { "(bad)", { XX } },
7946 { "(bad)", { XX } },
7947 { "(bad)", { XX } },
7948 { "(bad)", { XX } },
7949 { "(bad)", { XX } },
c0f3af97 7950 /* 58 */
d5d7db8e 7951 { "(bad)", { XX } },
d5d7db8e
L
7952 { "(bad)", { XX } },
7953 { "(bad)", { XX } },
7954 { "(bad)", { XX } },
922d8de8
DR
7955 { PREFIX_TABLE (PREFIX_VEX_3A5C) },
7956 { PREFIX_TABLE (PREFIX_VEX_3A5D) },
7957 { PREFIX_TABLE (PREFIX_VEX_3A5E) },
7958 { PREFIX_TABLE (PREFIX_VEX_3A5F) },
c0f3af97
L
7959 /* 60 */
7960 { PREFIX_TABLE (PREFIX_VEX_3A60) },
7961 { PREFIX_TABLE (PREFIX_VEX_3A61) },
7962 { PREFIX_TABLE (PREFIX_VEX_3A62) },
7963 { PREFIX_TABLE (PREFIX_VEX_3A63) },
d5d7db8e
L
7964 { "(bad)", { XX } },
7965 { "(bad)", { XX } },
7966 { "(bad)", { XX } },
7967 { "(bad)", { XX } },
c0f3af97 7968 /* 68 */
922d8de8
DR
7969 { PREFIX_TABLE (PREFIX_VEX_3A68) },
7970 { PREFIX_TABLE (PREFIX_VEX_3A69) },
7971 { PREFIX_TABLE (PREFIX_VEX_3A6A) },
7972 { PREFIX_TABLE (PREFIX_VEX_3A6B) },
7973 { PREFIX_TABLE (PREFIX_VEX_3A6C) },
7974 { PREFIX_TABLE (PREFIX_VEX_3A6D) },
7975 { PREFIX_TABLE (PREFIX_VEX_3A6E) },
7976 { PREFIX_TABLE (PREFIX_VEX_3A6F) },
c0f3af97 7977 /* 70 */
d5d7db8e 7978 { "(bad)", { XX } },
d5d7db8e
L
7979 { "(bad)", { XX } },
7980 { "(bad)", { XX } },
7981 { "(bad)", { XX } },
7982 { "(bad)", { XX } },
7983 { "(bad)", { XX } },
7984 { "(bad)", { XX } },
7985 { "(bad)", { XX } },
c0f3af97 7986 /* 78 */
922d8de8
DR
7987 { PREFIX_TABLE (PREFIX_VEX_3A78) },
7988 { PREFIX_TABLE (PREFIX_VEX_3A79) },
7989 { PREFIX_TABLE (PREFIX_VEX_3A7A) },
7990 { PREFIX_TABLE (PREFIX_VEX_3A7B) },
7991 { PREFIX_TABLE (PREFIX_VEX_3A7C) },
7992 { PREFIX_TABLE (PREFIX_VEX_3A7D) },
7993 { PREFIX_TABLE (PREFIX_VEX_3A7E) },
7994 { PREFIX_TABLE (PREFIX_VEX_3A7F) },
c0f3af97 7995 /* 80 */
d5d7db8e 7996 { "(bad)", { XX } },
d5d7db8e
L
7997 { "(bad)", { XX } },
7998 { "(bad)", { XX } },
7999 { "(bad)", { XX } },
8000 { "(bad)", { XX } },
8001 { "(bad)", { XX } },
8002 { "(bad)", { XX } },
8003 { "(bad)", { XX } },
c0f3af97 8004 /* 88 */
d5d7db8e 8005 { "(bad)", { XX } },
d5d7db8e
L
8006 { "(bad)", { XX } },
8007 { "(bad)", { XX } },
8008 { "(bad)", { XX } },
8009 { "(bad)", { XX } },
8010 { "(bad)", { XX } },
8011 { "(bad)", { XX } },
8012 { "(bad)", { XX } },
c0f3af97 8013 /* 90 */
d5d7db8e 8014 { "(bad)", { XX } },
d5d7db8e
L
8015 { "(bad)", { XX } },
8016 { "(bad)", { XX } },
8017 { "(bad)", { XX } },
8018 { "(bad)", { XX } },
8019 { "(bad)", { XX } },
8020 { "(bad)", { XX } },
8021 { "(bad)", { XX } },
c0f3af97 8022 /* 98 */
d5d7db8e 8023 { "(bad)", { XX } },
d5d7db8e
L
8024 { "(bad)", { XX } },
8025 { "(bad)", { XX } },
8026 { "(bad)", { XX } },
8027 { "(bad)", { XX } },
8028 { "(bad)", { XX } },
8029 { "(bad)", { XX } },
8030 { "(bad)", { XX } },
c0f3af97 8031 /* a0 */
d5d7db8e 8032 { "(bad)", { XX } },
85f10a01
MM
8033 { "(bad)", { XX } },
8034 { "(bad)", { XX } },
d5d7db8e
L
8035 { "(bad)", { XX } },
8036 { "(bad)", { XX } },
8037 { "(bad)", { XX } },
8038 { "(bad)", { XX } },
8039 { "(bad)", { XX } },
c0f3af97 8040 /* a8 */
d5d7db8e 8041 { "(bad)", { XX } },
d5d7db8e
L
8042 { "(bad)", { XX } },
8043 { "(bad)", { XX } },
8044 { "(bad)", { XX } },
8045 { "(bad)", { XX } },
8046 { "(bad)", { XX } },
8047 { "(bad)", { XX } },
8048 { "(bad)", { XX } },
c0f3af97
L
8049 /* b0 */
8050 { "(bad)", { XX } },
8051 { "(bad)", { XX } },
8052 { "(bad)", { XX } },
8053 { "(bad)", { XX } },
8054 { "(bad)", { XX } },
8055 { "(bad)", { XX } },
8056 { "(bad)", { XX } },
8057 { "(bad)", { XX } },
8058 /* b8 */
8059 { "(bad)", { XX } },
8060 { "(bad)", { XX } },
8061 { "(bad)", { XX } },
8062 { "(bad)", { XX } },
8063 { "(bad)", { XX } },
8064 { "(bad)", { XX } },
8065 { "(bad)", { XX } },
8066 { "(bad)", { XX } },
8067 /* c0 */
8068 { "(bad)", { XX } },
8069 { "(bad)", { XX } },
8070 { "(bad)", { XX } },
8071 { "(bad)", { XX } },
8072 { "(bad)", { XX } },
8073 { "(bad)", { XX } },
8074 { "(bad)", { XX } },
8075 { "(bad)", { XX } },
8076 /* c8 */
8077 { "(bad)", { XX } },
8078 { "(bad)", { XX } },
d5d7db8e 8079 { "(bad)", { XX } },
d5d7db8e
L
8080 { "(bad)", { XX } },
8081 { "(bad)", { XX } },
8082 { "(bad)", { XX } },
8083 { "(bad)", { XX } },
8084 { "(bad)", { XX } },
c0f3af97
L
8085 /* d0 */
8086 { "(bad)", { XX } },
8087 { "(bad)", { XX } },
8088 { "(bad)", { XX } },
d5d7db8e
L
8089 { "(bad)", { XX } },
8090 { "(bad)", { XX } },
8091 { "(bad)", { XX } },
c0f3af97
L
8092 { "(bad)", { XX } },
8093 { "(bad)", { XX } },
8094 /* d8 */
8095 { "(bad)", { XX } },
d5d7db8e
L
8096 { "(bad)", { XX } },
8097 { "(bad)", { XX } },
8098 { "(bad)", { XX } },
8099 { "(bad)", { XX } },
8100 { "(bad)", { XX } },
8101 { "(bad)", { XX } },
a5ff0eb2 8102 { PREFIX_TABLE (PREFIX_VEX_3ADF) },
c0f3af97 8103 /* e0 */
d5d7db8e 8104 { "(bad)", { XX } },
d5d7db8e
L
8105 { "(bad)", { XX } },
8106 { "(bad)", { XX } },
8107 { "(bad)", { XX } },
8108 { "(bad)", { XX } },
8109 { "(bad)", { XX } },
8110 { "(bad)", { XX } },
8111 { "(bad)", { XX } },
c0f3af97 8112 /* e8 */
d5d7db8e 8113 { "(bad)", { XX } },
d5d7db8e
L
8114 { "(bad)", { XX } },
8115 { "(bad)", { XX } },
8116 { "(bad)", { XX } },
8117 { "(bad)", { XX } },
8118 { "(bad)", { XX } },
8119 { "(bad)", { XX } },
8120 { "(bad)", { XX } },
c0f3af97 8121 /* f0 */
d5d7db8e 8122 { "(bad)", { XX } },
d5d7db8e
L
8123 { "(bad)", { XX } },
8124 { "(bad)", { XX } },
8125 { "(bad)", { XX } },
8126 { "(bad)", { XX } },
8127 { "(bad)", { XX } },
8128 { "(bad)", { XX } },
8129 { "(bad)", { XX } },
c0f3af97 8130 /* f8 */
d5d7db8e 8131 { "(bad)", { XX } },
d5d7db8e
L
8132 { "(bad)", { XX } },
8133 { "(bad)", { XX } },
8134 { "(bad)", { XX } },
8135 { "(bad)", { XX } },
8136 { "(bad)", { XX } },
8137 { "(bad)", { XX } },
8138 { "(bad)", { XX } },
c0f3af97
L
8139 },
8140};
8141
8142static const struct dis386 vex_len_table[][2] = {
8143 /* VEX_LEN_10_P_1 */
8144 {
8145 { "vmovss", { XMVex, Vex128, EXd } },
d5d7db8e 8146 { "(bad)", { XX } },
c0f3af97
L
8147 },
8148
8149 /* VEX_LEN_10_P_3 */
8150 {
8151 { "vmovsd", { XMVex, Vex128, EXq } },
d5d7db8e 8152 { "(bad)", { XX } },
c0f3af97
L
8153 },
8154
8155 /* VEX_LEN_11_P_1 */
8156 {
fa99fab2 8157 { "vmovss", { EXdVexS, Vex128, XM } },
d5d7db8e 8158 { "(bad)", { XX } },
c0f3af97
L
8159 },
8160
8161 /* VEX_LEN_11_P_3 */
8162 {
fa99fab2 8163 { "vmovsd", { EXqVexS, Vex128, XM } },
d5d7db8e 8164 { "(bad)", { XX } },
c0f3af97
L
8165 },
8166
8167 /* VEX_LEN_12_P_0_M_0 */
8168 {
8169 { "vmovlps", { XM, Vex128, EXq } },
d5d7db8e 8170 { "(bad)", { XX } },
c0f3af97
L
8171 },
8172
8173 /* VEX_LEN_12_P_0_M_1 */
8174 {
8175 { "vmovhlps", { XM, Vex128, EXq } },
d5d7db8e 8176 { "(bad)", { XX } },
c0f3af97
L
8177 },
8178
8179 /* VEX_LEN_12_P_2 */
8180 {
8181 { "vmovlpd", { XM, Vex128, EXq } },
d5d7db8e 8182 { "(bad)", { XX } },
c0f3af97
L
8183 },
8184
8185 /* VEX_LEN_13_M_0 */
8186 {
8187 { "vmovlpX", { EXq, XM } },
85f10a01 8188 { "(bad)", { XX } },
c0f3af97
L
8189 },
8190
8191 /* VEX_LEN_16_P_0_M_0 */
8192 {
8193 { "vmovhps", { XM, Vex128, EXq } },
85f10a01 8194 { "(bad)", { XX } },
c0f3af97
L
8195 },
8196
8197 /* VEX_LEN_16_P_0_M_1 */
8198 {
8199 { "vmovlhps", { XM, Vex128, EXq } },
85f10a01 8200 { "(bad)", { XX } },
c0f3af97
L
8201 },
8202
8203 /* VEX_LEN_16_P_2 */
8204 {
8205 { "vmovhpd", { XM, Vex128, EXq } },
85f10a01 8206 { "(bad)", { XX } },
c0f3af97
L
8207 },
8208
8209 /* VEX_LEN_17_M_0 */
8210 {
8211 { "vmovhpX", { EXq, XM } },
85f10a01 8212 { "(bad)", { XX } },
c0f3af97
L
8213 },
8214
8215 /* VEX_LEN_2A_P_1 */
8216 {
8217 { "vcvtsi2ss%LQ", { XM, Vex128, Ev } },
d5d7db8e 8218 { "(bad)", { XX } },
c0f3af97
L
8219 },
8220
8221 /* VEX_LEN_2A_P_3 */
8222 {
8223 { "vcvtsi2sd%LQ", { XM, Vex128, Ev } },
d5d7db8e 8224 { "(bad)", { XX } },
c0f3af97
L
8225 },
8226
c0f3af97
L
8227 /* VEX_LEN_2C_P_1 */
8228 {
8229 { "vcvttss2siY", { Gv, EXd } },
d5d7db8e 8230 { "(bad)", { XX } },
c0f3af97
L
8231 },
8232
8233 /* VEX_LEN_2C_P_3 */
8234 {
8235 { "vcvttsd2siY", { Gv, EXq } },
d5d7db8e 8236 { "(bad)", { XX } },
c0f3af97
L
8237 },
8238
8239 /* VEX_LEN_2D_P_1 */
8240 {
8241 { "vcvtss2siY", { Gv, EXd } },
85f10a01 8242 { "(bad)", { XX } },
c0f3af97
L
8243 },
8244
8245 /* VEX_LEN_2D_P_3 */
8246 {
8247 { "vcvtsd2siY", { Gv, EXq } },
d5d7db8e 8248 { "(bad)", { XX } },
c0f3af97
L
8249 },
8250
8251 /* VEX_LEN_2E_P_0 */
8252 {
8253 { "vucomiss", { XM, EXd } },
d5d7db8e 8254 { "(bad)", { XX } },
c0f3af97
L
8255 },
8256
8257 /* VEX_LEN_2E_P_2 */
8258 {
8259 { "vucomisd", { XM, EXq } },
d5d7db8e 8260 { "(bad)", { XX } },
c0f3af97
L
8261 },
8262
8263 /* VEX_LEN_2F_P_0 */
8264 {
8265 { "vcomiss", { XM, EXd } },
d5d7db8e 8266 { "(bad)", { XX } },
c0f3af97
L
8267 },
8268
8269 /* VEX_LEN_2F_P_2 */
8270 {
8271 { "vcomisd", { XM, EXq } },
d5d7db8e 8272 { "(bad)", { XX } },
c0f3af97
L
8273 },
8274
8275 /* VEX_LEN_51_P_1 */
8276 {
8277 { "vsqrtss", { XM, Vex128, EXd } },
d5d7db8e 8278 { "(bad)", { XX } },
c0f3af97
L
8279 },
8280
8281 /* VEX_LEN_51_P_3 */
8282 {
8283 { "vsqrtsd", { XM, Vex128, EXq } },
d5d7db8e 8284 { "(bad)", { XX } },
c0f3af97
L
8285 },
8286
8287 /* VEX_LEN_52_P_1 */
8288 {
8289 { "vrsqrtss", { XM, Vex128, EXd } },
d5d7db8e 8290 { "(bad)", { XX } },
c0f3af97
L
8291 },
8292
8293 /* VEX_LEN_53_P_1 */
8294 {
8295 { "vrcpss", { XM, Vex128, EXd } },
d5d7db8e 8296 { "(bad)", { XX } },
c0f3af97
L
8297 },
8298
8299 /* VEX_LEN_58_P_1 */
8300 {
8301 { "vaddss", { XM, Vex128, EXd } },
d5d7db8e 8302 { "(bad)", { XX } },
c0f3af97
L
8303 },
8304
8305 /* VEX_LEN_58_P_3 */
8306 {
8307 { "vaddsd", { XM, Vex128, EXq } },
d5d7db8e 8308 { "(bad)", { XX } },
c0f3af97
L
8309 },
8310
8311 /* VEX_LEN_59_P_1 */
8312 {
8313 { "vmulss", { XM, Vex128, EXd } },
d5d7db8e 8314 { "(bad)", { XX } },
c0f3af97
L
8315 },
8316
8317 /* VEX_LEN_59_P_3 */
8318 {
8319 { "vmulsd", { XM, Vex128, EXq } },
d5d7db8e 8320 { "(bad)", { XX } },
c0f3af97
L
8321 },
8322
8323 /* VEX_LEN_5A_P_1 */
8324 {
8325 { "vcvtss2sd", { XM, Vex128, EXd } },
d5d7db8e 8326 { "(bad)", { XX } },
c0f3af97
L
8327 },
8328
8329 /* VEX_LEN_5A_P_3 */
8330 {
8331 { "vcvtsd2ss", { XM, Vex128, EXq } },
d5d7db8e 8332 { "(bad)", { XX } },
c0f3af97
L
8333 },
8334
8335 /* VEX_LEN_5C_P_1 */
8336 {
8337 { "vsubss", { XM, Vex128, EXd } },
d5d7db8e 8338 { "(bad)", { XX } },
c0f3af97
L
8339 },
8340
8341 /* VEX_LEN_5C_P_3 */
8342 {
8343 { "vsubsd", { XM, Vex128, EXq } },
d5d7db8e 8344 { "(bad)", { XX } },
c0f3af97
L
8345 },
8346
8347 /* VEX_LEN_5D_P_1 */
8348 {
8349 { "vminss", { XM, Vex128, EXd } },
d5d7db8e 8350 { "(bad)", { XX } },
c0f3af97
L
8351 },
8352
8353 /* VEX_LEN_5D_P_3 */
8354 {
8355 { "vminsd", { XM, Vex128, EXq } },
d5d7db8e 8356 { "(bad)", { XX } },
c0f3af97
L
8357 },
8358
8359 /* VEX_LEN_5E_P_1 */
8360 {
8361 { "vdivss", { XM, Vex128, EXd } },
85f10a01 8362 { "(bad)", { XX } },
c0f3af97
L
8363 },
8364
8365 /* VEX_LEN_5E_P_3 */
8366 {
8367 { "vdivsd", { XM, Vex128, EXq } },
85f10a01 8368 { "(bad)", { XX } },
c0f3af97
L
8369 },
8370
8371 /* VEX_LEN_5F_P_1 */
8372 {
8373 { "vmaxss", { XM, Vex128, EXd } },
85f10a01 8374 { "(bad)", { XX } },
c0f3af97
L
8375 },
8376
8377 /* VEX_LEN_5F_P_3 */
8378 {
8379 { "vmaxsd", { XM, Vex128, EXq } },
85f10a01 8380 { "(bad)", { XX } },
c0f3af97
L
8381 },
8382
8383 /* VEX_LEN_60_P_2 */
8384 {
8385 { "vpunpcklbw", { XM, Vex128, EXx } },
d5d7db8e 8386 { "(bad)", { XX } },
c0f3af97
L
8387 },
8388
8389 /* VEX_LEN_61_P_2 */
8390 {
8391 { "vpunpcklwd", { XM, Vex128, EXx } },
d5d7db8e 8392 { "(bad)", { XX } },
c0f3af97
L
8393 },
8394
8395 /* VEX_LEN_62_P_2 */
8396 {
8397 { "vpunpckldq", { XM, Vex128, EXx } },
d5d7db8e 8398 { "(bad)", { XX } },
c0f3af97
L
8399 },
8400
8401 /* VEX_LEN_63_P_2 */
8402 {
8403 { "vpacksswb", { XM, Vex128, EXx } },
d5d7db8e 8404 { "(bad)", { XX } },
c0f3af97
L
8405 },
8406
8407 /* VEX_LEN_64_P_2 */
8408 {
8409 { "vpcmpgtb", { XM, Vex128, EXx } },
d5d7db8e 8410 { "(bad)", { XX } },
c0f3af97
L
8411 },
8412
8413 /* VEX_LEN_65_P_2 */
8414 {
8415 { "vpcmpgtw", { XM, Vex128, EXx } },
d5d7db8e 8416 { "(bad)", { XX } },
c0f3af97
L
8417 },
8418
8419 /* VEX_LEN_66_P_2 */
8420 {
8421 { "vpcmpgtd", { XM, Vex128, EXx } },
d5d7db8e 8422 { "(bad)", { XX } },
c0f3af97
L
8423 },
8424
8425 /* VEX_LEN_67_P_2 */
8426 {
8427 { "vpackuswb", { XM, Vex128, EXx } },
d5d7db8e 8428 { "(bad)", { XX } },
c0f3af97
L
8429 },
8430
8431 /* VEX_LEN_68_P_2 */
8432 {
8433 { "vpunpckhbw", { XM, Vex128, EXx } },
d5d7db8e 8434 { "(bad)", { XX } },
c0f3af97
L
8435 },
8436
8437 /* VEX_LEN_69_P_2 */
8438 {
8439 { "vpunpckhwd", { XM, Vex128, EXx } },
d5d7db8e 8440 { "(bad)", { XX } },
c0f3af97
L
8441 },
8442
8443 /* VEX_LEN_6A_P_2 */
8444 {
8445 { "vpunpckhdq", { XM, Vex128, EXx } },
d5d7db8e 8446 { "(bad)", { XX } },
c0f3af97
L
8447 },
8448
8449 /* VEX_LEN_6B_P_2 */
8450 {
8451 { "vpackssdw", { XM, Vex128, EXx } },
d5d7db8e 8452 { "(bad)", { XX } },
c0f3af97
L
8453 },
8454
8455 /* VEX_LEN_6C_P_2 */
8456 {
8457 { "vpunpcklqdq", { XM, Vex128, EXx } },
d5d7db8e 8458 { "(bad)", { XX } },
c0f3af97
L
8459 },
8460
8461 /* VEX_LEN_6D_P_2 */
8462 {
8463 { "vpunpckhqdq", { XM, Vex128, EXx } },
d5d7db8e 8464 { "(bad)", { XX } },
c0f3af97
L
8465 },
8466
8467 /* VEX_LEN_6E_P_2 */
8468 {
8469 { "vmovK", { XM, Edq } },
d5d7db8e 8470 { "(bad)", { XX } },
c0f3af97
L
8471 },
8472
8473 /* VEX_LEN_70_P_1 */
8474 {
8475 { "vpshufhw", { XM, EXx, Ib } },
d5d7db8e 8476 { "(bad)", { XX } },
c0f3af97
L
8477 },
8478
8479 /* VEX_LEN_70_P_2 */
8480 {
8481 { "vpshufd", { XM, EXx, Ib } },
d5d7db8e 8482 { "(bad)", { XX } },
c0f3af97
L
8483 },
8484
8485 /* VEX_LEN_70_P_3 */
8486 {
8487 { "vpshuflw", { XM, EXx, Ib } },
d5d7db8e 8488 { "(bad)", { XX } },
c0f3af97
L
8489 },
8490
8491 /* VEX_LEN_71_R_2_P_2 */
8492 {
8493 { "vpsrlw", { Vex128, XS, Ib } },
d5d7db8e 8494 { "(bad)", { XX } },
c0f3af97
L
8495 },
8496
8497 /* VEX_LEN_71_R_4_P_2 */
8498 {
8499 { "vpsraw", { Vex128, XS, Ib } },
d5d7db8e 8500 { "(bad)", { XX } },
c0f3af97
L
8501 },
8502
8503 /* VEX_LEN_71_R_6_P_2 */
8504 {
8505 { "vpsllw", { Vex128, XS, Ib } },
d5d7db8e 8506 { "(bad)", { XX } },
c0f3af97
L
8507 },
8508
8509 /* VEX_LEN_72_R_2_P_2 */
8510 {
8511 { "vpsrld", { Vex128, XS, Ib } },
d5d7db8e 8512 { "(bad)", { XX } },
c0f3af97
L
8513 },
8514
8515 /* VEX_LEN_72_R_4_P_2 */
8516 {
8517 { "vpsrad", { Vex128, XS, Ib } },
d5d7db8e 8518 { "(bad)", { XX } },
c0f3af97
L
8519 },
8520
8521 /* VEX_LEN_72_R_6_P_2 */
8522 {
8523 { "vpslld", { Vex128, XS, Ib } },
d5d7db8e 8524 { "(bad)", { XX } },
c0f3af97
L
8525 },
8526
8527 /* VEX_LEN_73_R_2_P_2 */
8528 {
8529 { "vpsrlq", { Vex128, XS, Ib } },
d5d7db8e 8530 { "(bad)", { XX } },
c0f3af97
L
8531 },
8532
8533 /* VEX_LEN_73_R_3_P_2 */
8534 {
8535 { "vpsrldq", { Vex128, XS, Ib } },
d5d7db8e 8536 { "(bad)", { XX } },
c0f3af97
L
8537 },
8538
8539 /* VEX_LEN_73_R_6_P_2 */
8540 {
8541 { "vpsllq", { Vex128, XS, Ib } },
d5d7db8e 8542 { "(bad)", { XX } },
c0f3af97
L
8543 },
8544
8545 /* VEX_LEN_73_R_7_P_2 */
8546 {
8547 { "vpslldq", { Vex128, XS, Ib } },
d5d7db8e 8548 { "(bad)", { XX } },
c0f3af97
L
8549 },
8550
8551 /* VEX_LEN_74_P_2 */
8552 {
8553 { "vpcmpeqb", { XM, Vex128, EXx } },
d5d7db8e 8554 { "(bad)", { XX } },
c0f3af97
L
8555 },
8556
8557 /* VEX_LEN_75_P_2 */
8558 {
8559 { "vpcmpeqw", { XM, Vex128, EXx } },
d5d7db8e 8560 { "(bad)", { XX } },
c0f3af97
L
8561 },
8562
8563 /* VEX_LEN_76_P_2 */
8564 {
8565 { "vpcmpeqd", { XM, Vex128, EXx } },
d5d7db8e 8566 { "(bad)", { XX } },
c0f3af97
L
8567 },
8568
8569 /* VEX_LEN_7E_P_1 */
8570 {
8571 { "vmovq", { XM, EXq } },
d5d7db8e 8572 { "(bad)", { XX } },
c0f3af97
L
8573 },
8574
8575 /* VEX_LEN_7E_P_2 */
8576 {
8577 { "vmovK", { Edq, XM } },
d5d7db8e 8578 { "(bad)", { XX } },
c0f3af97
L
8579 },
8580
9daa0d29 8581 /* VEX_LEN_AE_R_2_M_0 */
c0f3af97
L
8582 {
8583 { "vldmxcsr", { Md } },
d5d7db8e 8584 { "(bad)", { XX } },
c0f3af97
L
8585 },
8586
9daa0d29 8587 /* VEX_LEN_AE_R_3_M_0 */
c0f3af97
L
8588 {
8589 { "vstmxcsr", { Md } },
d5d7db8e 8590 { "(bad)", { XX } },
c0f3af97
L
8591 },
8592
8593 /* VEX_LEN_C2_P_1 */
8594 {
8595 { "vcmpss", { XM, Vex128, EXd, VCMP } },
d5d7db8e 8596 { "(bad)", { XX } },
c0f3af97
L
8597 },
8598
8599 /* VEX_LEN_C2_P_3 */
8600 {
8601 { "vcmpsd", { XM, Vex128, EXq, VCMP } },
d5d7db8e 8602 { "(bad)", { XX } },
c0f3af97
L
8603 },
8604
8605 /* VEX_LEN_C4_P_2 */
8606 {
8607 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
d5d7db8e 8608 { "(bad)", { XX } },
c0f3af97
L
8609 },
8610
8611 /* VEX_LEN_C5_P_2 */
8612 {
8613 { "vpextrw", { Gdq, XS, Ib } },
d5d7db8e 8614 { "(bad)", { XX } },
c0f3af97
L
8615 },
8616
8617 /* VEX_LEN_D1_P_2 */
8618 {
8619 { "vpsrlw", { XM, Vex128, EXx } },
d5d7db8e 8620 { "(bad)", { XX } },
c0f3af97
L
8621 },
8622
8623 /* VEX_LEN_D2_P_2 */
8624 {
8625 { "vpsrld", { XM, Vex128, EXx } },
d5d7db8e 8626 { "(bad)", { XX } },
c0f3af97
L
8627 },
8628
8629 /* VEX_LEN_D3_P_2 */
8630 {
8631 { "vpsrlq", { XM, Vex128, EXx } },
d5d7db8e 8632 { "(bad)", { XX } },
c0f3af97
L
8633 },
8634
8635 /* VEX_LEN_D4_P_2 */
8636 {
8637 { "vpaddq", { XM, Vex128, EXx } },
d5d7db8e 8638 { "(bad)", { XX } },
c0f3af97
L
8639 },
8640
8641 /* VEX_LEN_D5_P_2 */
8642 {
8643 { "vpmullw", { XM, Vex128, EXx } },
d5d7db8e 8644 { "(bad)", { XX } },
c0f3af97
L
8645 },
8646
8647 /* VEX_LEN_D6_P_2 */
8648 {
b6169b20 8649 { "vmovq", { EXqS, XM } },
d5d7db8e 8650 { "(bad)", { XX } },
c0f3af97
L
8651 },
8652
8653 /* VEX_LEN_D7_P_2_M_1 */
8654 {
8655 { "vpmovmskb", { Gdq, XS } },
d5d7db8e 8656 { "(bad)", { XX } },
c0f3af97
L
8657 },
8658
8659 /* VEX_LEN_D8_P_2 */
8660 {
8661 { "vpsubusb", { XM, Vex128, EXx } },
d5d7db8e 8662 { "(bad)", { XX } },
c0f3af97
L
8663 },
8664
8665 /* VEX_LEN_D9_P_2 */
8666 {
8667 { "vpsubusw", { XM, Vex128, EXx } },
d5d7db8e 8668 { "(bad)", { XX } },
c0f3af97
L
8669 },
8670
8671 /* VEX_LEN_DA_P_2 */
8672 {
8673 { "vpminub", { XM, Vex128, EXx } },
d5d7db8e 8674 { "(bad)", { XX } },
c0f3af97
L
8675 },
8676
8677 /* VEX_LEN_DB_P_2 */
8678 {
8679 { "vpand", { XM, Vex128, EXx } },
d5d7db8e 8680 { "(bad)", { XX } },
c0f3af97
L
8681 },
8682
8683 /* VEX_LEN_DC_P_2 */
8684 {
8685 { "vpaddusb", { XM, Vex128, EXx } },
d5d7db8e 8686 { "(bad)", { XX } },
c0f3af97
L
8687 },
8688
8689 /* VEX_LEN_DD_P_2 */
8690 {
8691 { "vpaddusw", { XM, Vex128, EXx } },
d5d7db8e 8692 { "(bad)", { XX } },
c0f3af97
L
8693 },
8694
8695 /* VEX_LEN_DE_P_2 */
8696 {
8697 { "vpmaxub", { XM, Vex128, EXx } },
d5d7db8e 8698 { "(bad)", { XX } },
c0f3af97
L
8699 },
8700
8701 /* VEX_LEN_DF_P_2 */
8702 {
8703 { "vpandn", { XM, Vex128, EXx } },
d5d7db8e 8704 { "(bad)", { XX } },
c0f3af97
L
8705 },
8706
8707 /* VEX_LEN_E0_P_2 */
8708 {
8709 { "vpavgb", { XM, Vex128, EXx } },
d5d7db8e 8710 { "(bad)", { XX } },
c0f3af97
L
8711 },
8712
8713 /* VEX_LEN_E1_P_2 */
8714 {
8715 { "vpsraw", { XM, Vex128, EXx } },
d5d7db8e 8716 { "(bad)", { XX } },
c0f3af97
L
8717 },
8718
8719 /* VEX_LEN_E2_P_2 */
8720 {
8721 { "vpsrad", { XM, Vex128, EXx } },
d5d7db8e 8722 { "(bad)", { XX } },
c0f3af97
L
8723 },
8724
8725 /* VEX_LEN_E3_P_2 */
8726 {
8727 { "vpavgw", { XM, Vex128, EXx } },
d5d7db8e 8728 { "(bad)", { XX } },
c0f3af97
L
8729 },
8730
8731 /* VEX_LEN_E4_P_2 */
8732 {
8733 { "vpmulhuw", { XM, Vex128, EXx } },
d5d7db8e 8734 { "(bad)", { XX } },
c0f3af97
L
8735 },
8736
8737 /* VEX_LEN_E5_P_2 */
8738 {
8739 { "vpmulhw", { XM, Vex128, EXx } },
d5d7db8e 8740 { "(bad)", { XX } },
c0f3af97
L
8741 },
8742
c0f3af97
L
8743 /* VEX_LEN_E8_P_2 */
8744 {
8745 { "vpsubsb", { XM, Vex128, EXx } },
d5d7db8e 8746 { "(bad)", { XX } },
c0f3af97
L
8747 },
8748
8749 /* VEX_LEN_E9_P_2 */
8750 {
8751 { "vpsubsw", { XM, Vex128, EXx } },
d5d7db8e 8752 { "(bad)", { XX } },
c0f3af97
L
8753 },
8754
8755 /* VEX_LEN_EA_P_2 */
8756 {
8757 { "vpminsw", { XM, Vex128, EXx } },
d5d7db8e 8758 { "(bad)", { XX } },
c0f3af97
L
8759 },
8760
8761 /* VEX_LEN_EB_P_2 */
8762 {
8763 { "vpor", { XM, Vex128, EXx } },
d5d7db8e 8764 { "(bad)", { XX } },
c0f3af97
L
8765 },
8766
8767 /* VEX_LEN_EC_P_2 */
8768 {
8769 { "vpaddsb", { XM, Vex128, EXx } },
d5d7db8e 8770 { "(bad)", { XX } },
c0f3af97
L
8771 },
8772
8773 /* VEX_LEN_ED_P_2 */
8774 {
8775 { "vpaddsw", { XM, Vex128, EXx } },
d5d7db8e 8776 { "(bad)", { XX } },
c0f3af97
L
8777 },
8778
8779 /* VEX_LEN_EE_P_2 */
8780 {
8781 { "vpmaxsw", { XM, Vex128, EXx } },
d5d7db8e 8782 { "(bad)", { XX } },
c0f3af97
L
8783 },
8784
8785 /* VEX_LEN_EF_P_2 */
8786 {
8787 { "vpxor", { XM, Vex128, EXx } },
d5d7db8e 8788 { "(bad)", { XX } },
c0f3af97
L
8789 },
8790
8791 /* VEX_LEN_F1_P_2 */
8792 {
8793 { "vpsllw", { XM, Vex128, EXx } },
d5d7db8e 8794 { "(bad)", { XX } },
c0f3af97
L
8795 },
8796
8797 /* VEX_LEN_F2_P_2 */
8798 {
8799 { "vpslld", { XM, Vex128, EXx } },
d5d7db8e 8800 { "(bad)", { XX } },
c0f3af97
L
8801 },
8802
8803 /* VEX_LEN_F3_P_2 */
8804 {
8805 { "vpsllq", { XM, Vex128, EXx } },
d5d7db8e 8806 { "(bad)", { XX } },
c0f3af97
L
8807 },
8808
8809 /* VEX_LEN_F4_P_2 */
8810 {
8811 { "vpmuludq", { XM, Vex128, EXx } },
d5d7db8e 8812 { "(bad)", { XX } },
c0f3af97
L
8813 },
8814
8815 /* VEX_LEN_F5_P_2 */
8816 {
8817 { "vpmaddwd", { XM, Vex128, EXx } },
d5d7db8e 8818 { "(bad)", { XX } },
c0f3af97
L
8819 },
8820
8821 /* VEX_LEN_F6_P_2 */
8822 {
8823 { "vpsadbw", { XM, Vex128, EXx } },
d5d7db8e 8824 { "(bad)", { XX } },
c0f3af97
L
8825 },
8826
8827 /* VEX_LEN_F7_P_2 */
8828 {
8829 { "vmaskmovdqu", { XM, XS } },
d5d7db8e 8830 { "(bad)", { XX } },
c0f3af97
L
8831 },
8832
8833 /* VEX_LEN_F8_P_2 */
8834 {
8835 { "vpsubb", { XM, Vex128, EXx } },
d5d7db8e 8836 { "(bad)", { XX } },
c0f3af97
L
8837 },
8838
8839 /* VEX_LEN_F9_P_2 */
8840 {
8841 { "vpsubw", { XM, Vex128, EXx } },
d5d7db8e 8842 { "(bad)", { XX } },
c0f3af97
L
8843 },
8844
8845 /* VEX_LEN_FA_P_2 */
8846 {
8847 { "vpsubd", { XM, Vex128, EXx } },
d5d7db8e 8848 { "(bad)", { XX } },
c0f3af97
L
8849 },
8850
8851 /* VEX_LEN_FB_P_2 */
8852 {
8853 { "vpsubq", { XM, Vex128, EXx } },
d5d7db8e 8854 { "(bad)", { XX } },
c0f3af97
L
8855 },
8856
8857 /* VEX_LEN_FC_P_2 */
8858 {
8859 { "vpaddb", { XM, Vex128, EXx } },
d5d7db8e 8860 { "(bad)", { XX } },
c0f3af97
L
8861 },
8862
8863 /* VEX_LEN_FD_P_2 */
8864 {
8865 { "vpaddw", { XM, Vex128, EXx } },
d5d7db8e 8866 { "(bad)", { XX } },
c0f3af97
L
8867 },
8868
8869 /* VEX_LEN_FE_P_2 */
8870 {
8871 { "vpaddd", { XM, Vex128, EXx } },
d5d7db8e 8872 { "(bad)", { XX } },
c0f3af97
L
8873 },
8874
8875 /* VEX_LEN_3800_P_2 */
8876 {
8877 { "vpshufb", { XM, Vex128, EXx } },
d5d7db8e 8878 { "(bad)", { XX } },
c0f3af97
L
8879 },
8880
8881 /* VEX_LEN_3801_P_2 */
8882 {
8883 { "vphaddw", { XM, Vex128, EXx } },
d5d7db8e 8884 { "(bad)", { XX } },
c0f3af97
L
8885 },
8886
8887 /* VEX_LEN_3802_P_2 */
8888 {
8889 { "vphaddd", { XM, Vex128, EXx } },
d5d7db8e 8890 { "(bad)", { XX } },
c0f3af97
L
8891 },
8892
8893 /* VEX_LEN_3803_P_2 */
8894 {
8895 { "vphaddsw", { XM, Vex128, EXx } },
d5d7db8e 8896 { "(bad)", { XX } },
c0f3af97
L
8897 },
8898
8899 /* VEX_LEN_3804_P_2 */
8900 {
8901 { "vpmaddubsw", { XM, Vex128, EXx } },
d5d7db8e 8902 { "(bad)", { XX } },
c0f3af97
L
8903 },
8904
8905 /* VEX_LEN_3805_P_2 */
8906 {
8907 { "vphsubw", { XM, Vex128, EXx } },
d5d7db8e 8908 { "(bad)", { XX } },
c0f3af97
L
8909 },
8910
8911 /* VEX_LEN_3806_P_2 */
8912 {
8913 { "vphsubd", { XM, Vex128, EXx } },
d5d7db8e 8914 { "(bad)", { XX } },
c0f3af97
L
8915 },
8916
8917 /* VEX_LEN_3807_P_2 */
8918 {
8919 { "vphsubsw", { XM, Vex128, EXx } },
d5d7db8e 8920 { "(bad)", { XX } },
c0f3af97
L
8921 },
8922
8923 /* VEX_LEN_3808_P_2 */
8924 {
8925 { "vpsignb", { XM, Vex128, EXx } },
d5d7db8e 8926 { "(bad)", { XX } },
c0f3af97
L
8927 },
8928
8929 /* VEX_LEN_3809_P_2 */
8930 {
8931 { "vpsignw", { XM, Vex128, EXx } },
d5d7db8e 8932 { "(bad)", { XX } },
c0f3af97
L
8933 },
8934
8935 /* VEX_LEN_380A_P_2 */
8936 {
8937 { "vpsignd", { XM, Vex128, EXx } },
d5d7db8e 8938 { "(bad)", { XX } },
c0f3af97
L
8939 },
8940
8941 /* VEX_LEN_380B_P_2 */
8942 {
8943 { "vpmulhrsw", { XM, Vex128, EXx } },
d5d7db8e 8944 { "(bad)", { XX } },
c0f3af97
L
8945 },
8946
8947 /* VEX_LEN_3819_P_2_M_0 */
8948 {
d5d7db8e 8949 { "(bad)", { XX } },
c0f3af97
L
8950 { "vbroadcastsd", { XM, Mq } },
8951 },
8952
8953 /* VEX_LEN_381A_P_2_M_0 */
8954 {
d5d7db8e 8955 { "(bad)", { XX } },
c0f3af97
L
8956 { "vbroadcastf128", { XM, Mxmm } },
8957 },
8958
8959 /* VEX_LEN_381C_P_2 */
8960 {
8961 { "vpabsb", { XM, EXx } },
d5d7db8e 8962 { "(bad)", { XX } },
c0f3af97
L
8963 },
8964
8965 /* VEX_LEN_381D_P_2 */
8966 {
8967 { "vpabsw", { XM, EXx } },
d5d7db8e 8968 { "(bad)", { XX } },
c0f3af97
L
8969 },
8970
8971 /* VEX_LEN_381E_P_2 */
8972 {
8973 { "vpabsd", { XM, EXx } },
d5d7db8e 8974 { "(bad)", { XX } },
c0f3af97
L
8975 },
8976
8977 /* VEX_LEN_3820_P_2 */
8978 {
8979 { "vpmovsxbw", { XM, EXq } },
d5d7db8e 8980 { "(bad)", { XX } },
c0f3af97
L
8981 },
8982
8983 /* VEX_LEN_3821_P_2 */
8984 {
8985 { "vpmovsxbd", { XM, EXd } },
d5d7db8e 8986 { "(bad)", { XX } },
c0f3af97
L
8987 },
8988
8989 /* VEX_LEN_3822_P_2 */
8990 {
8991 { "vpmovsxbq", { XM, EXw } },
d5d7db8e 8992 { "(bad)", { XX } },
c0f3af97
L
8993 },
8994
8995 /* VEX_LEN_3823_P_2 */
8996 {
8997 { "vpmovsxwd", { XM, EXq } },
d5d7db8e 8998 { "(bad)", { XX } },
c0f3af97
L
8999 },
9000
9001 /* VEX_LEN_3824_P_2 */
9002 {
9003 { "vpmovsxwq", { XM, EXd } },
d5d7db8e 9004 { "(bad)", { XX } },
c0f3af97
L
9005 },
9006
9007 /* VEX_LEN_3825_P_2 */
9008 {
9009 { "vpmovsxdq", { XM, EXq } },
d5d7db8e 9010 { "(bad)", { XX } },
c0f3af97
L
9011 },
9012
9013 /* VEX_LEN_3828_P_2 */
9014 {
9015 { "vpmuldq", { XM, Vex128, EXx } },
d5d7db8e 9016 { "(bad)", { XX } },
c0f3af97
L
9017 },
9018
9019 /* VEX_LEN_3829_P_2 */
9020 {
9021 { "vpcmpeqq", { XM, Vex128, EXx } },
d5d7db8e 9022 { "(bad)", { XX } },
c0f3af97
L
9023 },
9024
9025 /* VEX_LEN_382A_P_2_M_0 */
9026 {
9027 { "vmovntdqa", { XM, Mx } },
d5d7db8e 9028 { "(bad)", { XX } },
c0f3af97
L
9029 },
9030
9031 /* VEX_LEN_382B_P_2 */
9032 {
9033 { "vpackusdw", { XM, Vex128, EXx } },
d5d7db8e 9034 { "(bad)", { XX } },
c0f3af97
L
9035 },
9036
9037 /* VEX_LEN_3830_P_2 */
9038 {
9039 { "vpmovzxbw", { XM, EXq } },
d5d7db8e 9040 { "(bad)", { XX } },
c0f3af97
L
9041 },
9042
9043 /* VEX_LEN_3831_P_2 */
9044 {
9045 { "vpmovzxbd", { XM, EXd } },
d5d7db8e 9046 { "(bad)", { XX } },
c0f3af97
L
9047 },
9048
9049 /* VEX_LEN_3832_P_2 */
9050 {
9051 { "vpmovzxbq", { XM, EXw } },
d5d7db8e 9052 { "(bad)", { XX } },
c0f3af97
L
9053 },
9054
9055 /* VEX_LEN_3833_P_2 */
9056 {
9057 { "vpmovzxwd", { XM, EXq } },
d5d7db8e 9058 { "(bad)", { XX } },
c0f3af97
L
9059 },
9060
9061 /* VEX_LEN_3834_P_2 */
9062 {
9063 { "vpmovzxwq", { XM, EXd } },
d5d7db8e 9064 { "(bad)", { XX } },
c0f3af97
L
9065 },
9066
9067 /* VEX_LEN_3835_P_2 */
9068 {
9069 { "vpmovzxdq", { XM, EXq } },
d5d7db8e 9070 { "(bad)", { XX } },
c0f3af97
L
9071 },
9072
9073 /* VEX_LEN_3837_P_2 */
9074 {
9075 { "vpcmpgtq", { XM, Vex128, EXx } },
d5d7db8e 9076 { "(bad)", { XX } },
c0f3af97
L
9077 },
9078
9079 /* VEX_LEN_3838_P_2 */
9080 {
9081 { "vpminsb", { XM, Vex128, EXx } },
d5d7db8e 9082 { "(bad)", { XX } },
c0f3af97
L
9083 },
9084
9085 /* VEX_LEN_3839_P_2 */
9086 {
9087 { "vpminsd", { XM, Vex128, EXx } },
d5d7db8e 9088 { "(bad)", { XX } },
c0f3af97
L
9089 },
9090
9091 /* VEX_LEN_383A_P_2 */
9092 {
9093 { "vpminuw", { XM, Vex128, EXx } },
d5d7db8e 9094 { "(bad)", { XX } },
c0f3af97
L
9095 },
9096
9097 /* VEX_LEN_383B_P_2 */
9098 {
9099 { "vpminud", { XM, Vex128, EXx } },
d5d7db8e 9100 { "(bad)", { XX } },
c0f3af97
L
9101 },
9102
9103 /* VEX_LEN_383C_P_2 */
9104 {
9105 { "vpmaxsb", { XM, Vex128, EXx } },
d5d7db8e 9106 { "(bad)", { XX } },
c0f3af97
L
9107 },
9108
9109 /* VEX_LEN_383D_P_2 */
9110 {
9111 { "vpmaxsd", { XM, Vex128, EXx } },
d5d7db8e 9112 { "(bad)", { XX } },
c0f3af97
L
9113 },
9114
9115 /* VEX_LEN_383E_P_2 */
9116 {
9117 { "vpmaxuw", { XM, Vex128, EXx } },
d5d7db8e 9118 { "(bad)", { XX } },
c0f3af97
L
9119 },
9120
9121 /* VEX_LEN_383F_P_2 */
9122 {
9123 { "vpmaxud", { XM, Vex128, EXx } },
d5d7db8e 9124 { "(bad)", { XX } },
c0f3af97
L
9125 },
9126
9127 /* VEX_LEN_3840_P_2 */
9128 {
9129 { "vpmulld", { XM, Vex128, EXx } },
d5d7db8e 9130 { "(bad)", { XX } },
c0f3af97
L
9131 },
9132
9133 /* VEX_LEN_3841_P_2 */
9134 {
9135 { "vphminposuw", { XM, EXx } },
d5d7db8e 9136 { "(bad)", { XX } },
c0f3af97
L
9137 },
9138
a5ff0eb2
L
9139 /* VEX_LEN_38DB_P_2 */
9140 {
9141 { "vaesimc", { XM, EXx } },
9142 { "(bad)", { XX } },
9143 },
9144
9145 /* VEX_LEN_38DC_P_2 */
9146 {
9147 { "vaesenc", { XM, Vex128, EXx } },
9148 { "(bad)", { XX } },
9149 },
9150
9151 /* VEX_LEN_38DD_P_2 */
9152 {
9153 { "vaesenclast", { XM, Vex128, EXx } },
9154 { "(bad)", { XX } },
9155 },
9156
9157 /* VEX_LEN_38DE_P_2 */
9158 {
9159 { "vaesdec", { XM, Vex128, EXx } },
9160 { "(bad)", { XX } },
9161 },
9162
9163 /* VEX_LEN_38DF_P_2 */
9164 {
9165 { "vaesdeclast", { XM, Vex128, EXx } },
9166 { "(bad)", { XX } },
9167 },
9168
c0f3af97
L
9169 /* VEX_LEN_3A06_P_2 */
9170 {
d5d7db8e 9171 { "(bad)", { XX } },
c0f3af97
L
9172 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9173 },
9174
9175 /* VEX_LEN_3A0A_P_2 */
9176 {
9177 { "vroundss", { XM, Vex128, EXd, Ib } },
d5d7db8e 9178 { "(bad)", { XX } },
c0f3af97
L
9179 },
9180
9181 /* VEX_LEN_3A0B_P_2 */
9182 {
9183 { "vroundsd", { XM, Vex128, EXq, Ib } },
d5d7db8e 9184 { "(bad)", { XX } },
c0f3af97
L
9185 },
9186
9187 /* VEX_LEN_3A0E_P_2 */
9188 {
9189 { "vpblendw", { XM, Vex128, EXx, Ib } },
d5d7db8e 9190 { "(bad)", { XX } },
c0f3af97
L
9191 },
9192
9193 /* VEX_LEN_3A0F_P_2 */
9194 {
9195 { "vpalignr", { XM, Vex128, EXx, Ib } },
d5d7db8e 9196 { "(bad)", { XX } },
c0f3af97
L
9197 },
9198
9199 /* VEX_LEN_3A14_P_2 */
9200 {
9201 { "vpextrb", { Edqb, XM, Ib } },
d5d7db8e 9202 { "(bad)", { XX } },
c0f3af97
L
9203 },
9204
9205 /* VEX_LEN_3A15_P_2 */
9206 {
9207 { "vpextrw", { Edqw, XM, Ib } },
d5d7db8e 9208 { "(bad)", { XX } },
c0f3af97
L
9209 },
9210
9211 /* VEX_LEN_3A16_P_2 */
9212 {
9213 { "vpextrK", { Edq, XM, Ib } },
d5d7db8e 9214 { "(bad)", { XX } },
c0f3af97
L
9215 },
9216
9217 /* VEX_LEN_3A17_P_2 */
9218 {
9219 { "vextractps", { Edqd, XM, Ib } },
d5d7db8e 9220 { "(bad)", { XX } },
c0f3af97
L
9221 },
9222
9223 /* VEX_LEN_3A18_P_2 */
9224 {
d5d7db8e 9225 { "(bad)", { XX } },
c0f3af97
L
9226 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9227 },
9228
9229 /* VEX_LEN_3A19_P_2 */
9230 {
d5d7db8e 9231 { "(bad)", { XX } },
c0f3af97
L
9232 { "vextractf128", { EXxmm, XM, Ib } },
9233 },
9234
9235 /* VEX_LEN_3A20_P_2 */
9236 {
9237 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
d5d7db8e 9238 { "(bad)", { XX } },
c0f3af97
L
9239 },
9240
9241 /* VEX_LEN_3A21_P_2 */
9242 {
9243 { "vinsertps", { XM, Vex128, EXd, Ib } },
d5d7db8e 9244 { "(bad)", { XX } },
c0f3af97
L
9245 },
9246
9247 /* VEX_LEN_3A22_P_2 */
9248 {
9249 { "vpinsrK", { XM, Vex128, Edq, Ib } },
d5d7db8e 9250 { "(bad)", { XX } },
c0f3af97
L
9251 },
9252
9253 /* VEX_LEN_3A41_P_2 */
9254 {
9255 { "vdppd", { XM, Vex128, EXx, Ib } },
d5d7db8e 9256 { "(bad)", { XX } },
c0f3af97
L
9257 },
9258
9259 /* VEX_LEN_3A42_P_2 */
9260 {
9261 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
d5d7db8e 9262 { "(bad)", { XX } },
c0f3af97
L
9263 },
9264
ce2f5b3c
L
9265 /* VEX_LEN_3A44_P_2 */
9266 {
9267 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9268 { "(bad)", { XX } },
9269 },
9270
c0f3af97
L
9271 /* VEX_LEN_3A4C_P_2 */
9272 {
9273 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
d5d7db8e 9274 { "(bad)", { XX } },
c0f3af97
L
9275 },
9276
9277 /* VEX_LEN_3A60_P_2 */
9278 {
9279 { "vpcmpestrm", { XM, EXx, Ib } },
d5d7db8e 9280 { "(bad)", { XX } },
c0f3af97
L
9281 },
9282
9283 /* VEX_LEN_3A61_P_2 */
9284 {
9285 { "vpcmpestri", { XM, EXx, Ib } },
d5d7db8e 9286 { "(bad)", { XX } },
c0f3af97
L
9287 },
9288
9289 /* VEX_LEN_3A62_P_2 */
9290 {
9291 { "vpcmpistrm", { XM, EXx, Ib } },
d5d7db8e 9292 { "(bad)", { XX } },
c0f3af97
L
9293 },
9294
9295 /* VEX_LEN_3A63_P_2 */
9296 {
9297 { "vpcmpistri", { XM, EXx, Ib } },
d5d7db8e 9298 { "(bad)", { XX } },
c0f3af97
L
9299 },
9300
922d8de8
DR
9301 /* VEX_LEN_3A6A_P_2 */
9302 {
206c2556 9303 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9304 { "(bad)", { XX } },
9305 },
9306
9307 /* VEX_LEN_3A6B_P_2 */
9308 {
206c2556 9309 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9310 { "(bad)", { XX } },
9311 },
9312
9313 /* VEX_LEN_3A6E_P_2 */
9314 {
206c2556 9315 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9316 { "(bad)", { XX } },
9317 },
9318
9319 /* VEX_LEN_3A6F_P_2 */
9320 {
206c2556 9321 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9322 { "(bad)", { XX } },
9323 },
9324
9325 /* VEX_LEN_3A7A_P_2 */
9326 {
206c2556 9327 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9328 { "(bad)", { XX } },
9329 },
9330
9331 /* VEX_LEN_3A7B_P_2 */
9332 {
206c2556 9333 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9334 { "(bad)", { XX } },
9335 },
9336
9337 /* VEX_LEN_3A7E_P_2 */
9338 {
206c2556 9339 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9340 { "(bad)", { XX } },
9341 },
9342
9343 /* VEX_LEN_3A7F_P_2 */
9344 {
206c2556 9345 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9346 { "(bad)", { XX } },
9347 },
9348
a5ff0eb2
L
9349 /* VEX_LEN_3ADF_P_2 */
9350 {
9351 { "vaeskeygenassist", { XM, EXx, Ib } },
9352 { "(bad)", { XX } },
9353 },
5dd85c99
SP
9354 /* VEX_LEN_XOP_09_80 */
9355 {
9356 { "vfrczps", { XM, EXxmm } },
9357 { "vfrczps", { XM, EXymmq } },
9358 },
9359 /* VEX_LEN_XOP_09_81 */
9360 {
9361 { "vfrczpd", { XM, EXxmm } },
9362 { "vfrczpd", { XM, EXymmq } },
9363 },
331d2d0d
L
9364};
9365
1ceb70f8 9366static const struct dis386 mod_table[][2] = {
b844680a 9367 {
1ceb70f8 9368 /* MOD_8D */
d8faab4e
L
9369 { "leaS", { Gv, M } },
9370 { "(bad)", { XX } },
9371 },
9372 {
92fddf8e
L
9373 /* MOD_0F01_REG_0 */
9374 { X86_64_TABLE (X86_64_0F01_REG_0) },
9375 { RM_TABLE (RM_0F01_REG_0) },
d8faab4e
L
9376 },
9377 {
92fddf8e
L
9378 /* MOD_0F01_REG_1 */
9379 { X86_64_TABLE (X86_64_0F01_REG_1) },
9380 { RM_TABLE (RM_0F01_REG_1) },
d8faab4e
L
9381 },
9382 {
92fddf8e
L
9383 /* MOD_0F01_REG_2 */
9384 { X86_64_TABLE (X86_64_0F01_REG_2) },
475a2301 9385 { RM_TABLE (RM_0F01_REG_2) },
d8faab4e
L
9386 },
9387 {
92fddf8e
L
9388 /* MOD_0F01_REG_3 */
9389 { X86_64_TABLE (X86_64_0F01_REG_3) },
9390 { RM_TABLE (RM_0F01_REG_3) },
d8faab4e
L
9391 },
9392 {
92fddf8e
L
9393 /* MOD_0F01_REG_7 */
9394 { "invlpg", { Mb } },
9395 { RM_TABLE (RM_0F01_REG_7) },
b844680a
L
9396 },
9397 {
92fddf8e
L
9398 /* MOD_0F12_PREFIX_0 */
9399 { "movlps", { XM, EXq } },
9400 { "movhlps", { XM, EXq } },
b844680a
L
9401 },
9402 {
92fddf8e
L
9403 /* MOD_0F13 */
9404 { "movlpX", { EXq, XM } },
d8faab4e
L
9405 { "(bad)", { XX } },
9406 },
9407 {
92fddf8e
L
9408 /* MOD_0F16_PREFIX_0 */
9409 { "movhps", { XM, EXq } },
9410 { "movlhps", { XM, EXq } },
b844680a
L
9411 },
9412 {
92fddf8e
L
9413 /* MOD_0F17 */
9414 { "movhpX", { EXq, XM } },
b844680a
L
9415 { "(bad)", { XX } },
9416 },
9417 {
92fddf8e
L
9418 /* MOD_0F18_REG_0 */
9419 { "prefetchnta", { Mb } },
b844680a 9420 { "(bad)", { XX } },
b844680a
L
9421 },
9422 {
92fddf8e
L
9423 /* MOD_0F18_REG_1 */
9424 { "prefetcht0", { Mb } },
9425 { "(bad)", { XX } },
b844680a
L
9426 },
9427 {
92fddf8e
L
9428 /* MOD_0F18_REG_2 */
9429 { "prefetcht1", { Mb } },
9430 { "(bad)", { XX } },
b844680a
L
9431 },
9432 {
92fddf8e
L
9433 /* MOD_0F18_REG_3 */
9434 { "prefetcht2", { Mb } },
b844680a 9435 { "(bad)", { XX } },
b844680a
L
9436 },
9437 {
92fddf8e
L
9438 /* MOD_0F20 */
9439 { "(bad)", { XX } },
9440 { "movZ", { Rm, Cm } },
b844680a
L
9441 },
9442 {
92fddf8e
L
9443 /* MOD_0F21 */
9444 { "(bad)", { XX } },
9445 { "movZ", { Rm, Dm } },
b844680a
L
9446 },
9447 {
92fddf8e 9448 /* MOD_0F22 */
b844680a 9449 { "(bad)", { XX } },
92fddf8e 9450 { "movZ", { Cm, Rm } },
b844680a
L
9451 },
9452 {
92fddf8e 9453 /* MOD_0F23 */
b844680a 9454 { "(bad)", { XX } },
92fddf8e 9455 { "movZ", { Dm, Rm } },
b844680a
L
9456 },
9457 {
92fddf8e 9458 /* MOD_0F24 */
c1e679ec 9459 { "(bad)", { XX } },
92fddf8e 9460 { "movL", { Rd, Td } },
b844680a
L
9461 },
9462 {
92fddf8e 9463 /* MOD_0F26 */
b844680a 9464 { "(bad)", { XX } },
92fddf8e 9465 { "movL", { Td, Rd } },
b844680a 9466 },
75c135a8
L
9467 {
9468 /* MOD_0F2B_PREFIX_0 */
4ee52178 9469 {"movntps", { Mx, XM } },
75c135a8
L
9470 { "(bad)", { XX } },
9471 },
9472 {
9473 /* MOD_0F2B_PREFIX_1 */
4ee52178 9474 {"movntss", { Md, XM } },
75c135a8
L
9475 { "(bad)", { XX } },
9476 },
9477 {
9478 /* MOD_0F2B_PREFIX_2 */
4ee52178 9479 {"movntpd", { Mx, XM } },
75c135a8
L
9480 { "(bad)", { XX } },
9481 },
9482 {
9483 /* MOD_0F2B_PREFIX_3 */
4ee52178 9484 {"movntsd", { Mq, XM } },
75c135a8
L
9485 { "(bad)", { XX } },
9486 },
9487 {
9488 /* MOD_0F51 */
9489 { "(bad)", { XX } },
9490 { "movmskpX", { Gdq, XS } },
9491 },
b844680a 9492 {
1ceb70f8 9493 /* MOD_0F71_REG_2 */
b844680a 9494 { "(bad)", { XX } },
4e7d34a6 9495 { "psrlw", { MS, Ib } },
b844680a
L
9496 },
9497 {
1ceb70f8 9498 /* MOD_0F71_REG_4 */
b844680a 9499 { "(bad)", { XX } },
4e7d34a6 9500 { "psraw", { MS, Ib } },
b844680a
L
9501 },
9502 {
1ceb70f8 9503 /* MOD_0F71_REG_6 */
b844680a 9504 { "(bad)", { XX } },
4e7d34a6 9505 { "psllw", { MS, Ib } },
b844680a
L
9506 },
9507 {
1ceb70f8 9508 /* MOD_0F72_REG_2 */
b844680a 9509 { "(bad)", { XX } },
4e7d34a6 9510 { "psrld", { MS, Ib } },
b844680a
L
9511 },
9512 {
1ceb70f8 9513 /* MOD_0F72_REG_4 */
b844680a 9514 { "(bad)", { XX } },
4e7d34a6 9515 { "psrad", { MS, Ib } },
b844680a
L
9516 },
9517 {
1ceb70f8 9518 /* MOD_0F72_REG_6 */
b844680a 9519 { "(bad)", { XX } },
4e7d34a6 9520 { "pslld", { MS, Ib } },
b844680a
L
9521 },
9522 {
1ceb70f8 9523 /* MOD_0F73_REG_2 */
4e7d34a6
L
9524 { "(bad)", { XX } },
9525 { "psrlq", { MS, Ib } },
b844680a
L
9526 },
9527 {
1ceb70f8 9528 /* MOD_0F73_REG_3 */
b844680a 9529 { "(bad)", { XX } },
c0f3af97
L
9530 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
9531 },
9532 {
9533 /* MOD_0F73_REG_6 */
9534 { "(bad)", { XX } },
9535 { "psllq", { MS, Ib } },
9536 },
9537 {
9538 /* MOD_0F73_REG_7 */
9539 { "(bad)", { XX } },
9540 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
9541 },
9542 {
9543 /* MOD_0FAE_REG_0 */
9544 { "fxsave", { M } },
9545 { "(bad)", { XX } },
9546 },
9547 {
9548 /* MOD_0FAE_REG_1 */
9549 { "fxrstor", { M } },
9550 { "(bad)", { XX } },
9551 },
9552 {
9553 /* MOD_0FAE_REG_2 */
9554 { "ldmxcsr", { Md } },
9555 { "(bad)", { XX } },
9556 },
9557 {
9558 /* MOD_0FAE_REG_3 */
9559 { "stmxcsr", { Md } },
9560 { "(bad)", { XX } },
9561 },
9562 {
9563 /* MOD_0FAE_REG_4 */
9564 { "xsave", { M } },
9565 { "(bad)", { XX } },
9566 },
9567 {
9568 /* MOD_0FAE_REG_5 */
9569 { "xrstor", { M } },
9570 { RM_TABLE (RM_0FAE_REG_5) },
9571 },
9572 {
9573 /* MOD_0FAE_REG_6 */
9574 { "xsaveopt", { M } },
9575 { RM_TABLE (RM_0FAE_REG_6) },
9576 },
9577 {
9578 /* MOD_0FAE_REG_7 */
9579 { "clflush", { Mb } },
9580 { RM_TABLE (RM_0FAE_REG_7) },
9581 },
9582 {
9583 /* MOD_0FB2 */
9584 { "lssS", { Gv, Mp } },
9585 { "(bad)", { XX } },
9586 },
9587 {
9588 /* MOD_0FB4 */
9589 { "lfsS", { Gv, Mp } },
9590 { "(bad)", { XX } },
9591 },
9592 {
9593 /* MOD_0FB5 */
9594 { "lgsS", { Gv, Mp } },
9595 { "(bad)", { XX } },
9596 },
9597 {
9598 /* MOD_0FC7_REG_6 */
9599 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
9600 { "(bad)", { XX } },
9601 },
9602 {
9603 /* MOD_0FC7_REG_7 */
9604 { "vmptrst", { Mq } },
9605 { "(bad)", { XX } },
9606 },
9607 {
9608 /* MOD_0FD7 */
9609 { "(bad)", { XX } },
9610 { "pmovmskb", { Gdq, MS } },
9611 },
9612 {
9613 /* MOD_0FE7_PREFIX_2 */
9614 { "movntdq", { Mx, XM } },
9615 { "(bad)", { XX } },
9616 },
9617 {
9618 /* MOD_0FF0_PREFIX_3 */
9619 { "lddqu", { XM, M } },
9620 { "(bad)", { XX } },
9621 },
9622 {
9623 /* MOD_0F382A_PREFIX_2 */
9624 { "movntdqa", { XM, Mx } },
9625 { "(bad)", { XX } },
9626 },
9627 {
9628 /* MOD_62_32BIT */
9629 { "bound{S|}", { Gv, Ma } },
9630 { "(bad)", { XX } },
9631 },
9632 {
9633 /* MOD_C4_32BIT */
9634 { "lesS", { Gv, Mp } },
9635 { VEX_C4_TABLE (VEX_0F) },
9636 },
9637 {
9638 /* MOD_C5_32BIT */
9639 { "ldsS", { Gv, Mp } },
9640 { VEX_C5_TABLE (VEX_0F) },
9641 },
9642 {
9643 /* MOD_VEX_12_PREFIX_0 */
9644 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) },
9645 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) },
9646 },
9647 {
9648 /* MOD_VEX_13 */
9649 { VEX_LEN_TABLE (VEX_LEN_13_M_0) },
9650 { "(bad)", { XX } },
9651 },
9652 {
9653 /* MOD_VEX_16_PREFIX_0 */
9654 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) },
9655 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) },
9656 },
9657 {
9658 /* MOD_VEX_17 */
9659 { VEX_LEN_TABLE (VEX_LEN_17_M_0) },
9660 { "(bad)", { XX } },
9661 },
9662 {
9663 /* MOD_VEX_2B */
168e3097 9664 { "vmovntpX", { Mx, XM } },
c0f3af97
L
9665 { "(bad)", { XX } },
9666 },
9667 {
9668 /* MOD_VEX_51 */
9669 { "(bad)", { XX } },
9670 { "vmovmskpX", { Gdq, XS } },
9671 },
9672 {
9673 /* MOD_VEX_71_REG_2 */
9674 { "(bad)", { XX } },
9675 { PREFIX_TABLE (PREFIX_VEX_71_REG_2) },
b844680a
L
9676 },
9677 {
c0f3af97 9678 /* MOD_VEX_71_REG_4 */
b844680a 9679 { "(bad)", { XX } },
c0f3af97 9680 { PREFIX_TABLE (PREFIX_VEX_71_REG_4) },
b844680a
L
9681 },
9682 {
c0f3af97 9683 /* MOD_VEX_71_REG_6 */
b844680a 9684 { "(bad)", { XX } },
c0f3af97 9685 { PREFIX_TABLE (PREFIX_VEX_71_REG_6) },
b844680a
L
9686 },
9687 {
c0f3af97 9688 /* MOD_VEX_72_REG_2 */
b844680a 9689 { "(bad)", { XX } },
c0f3af97 9690 { PREFIX_TABLE (PREFIX_VEX_72_REG_2) },
b844680a 9691 },
d8faab4e 9692 {
c0f3af97 9693 /* MOD_VEX_72_REG_4 */
d8faab4e 9694 { "(bad)", { XX } },
c0f3af97 9695 { PREFIX_TABLE (PREFIX_VEX_72_REG_4) },
d8faab4e
L
9696 },
9697 {
c0f3af97 9698 /* MOD_VEX_72_REG_6 */
d8faab4e 9699 { "(bad)", { XX } },
c0f3af97 9700 { PREFIX_TABLE (PREFIX_VEX_72_REG_6) },
d8faab4e 9701 },
876d4bfa 9702 {
c0f3af97 9703 /* MOD_VEX_73_REG_2 */
876d4bfa 9704 { "(bad)", { XX } },
c0f3af97 9705 { PREFIX_TABLE (PREFIX_VEX_73_REG_2) },
876d4bfa
L
9706 },
9707 {
c0f3af97 9708 /* MOD_VEX_73_REG_3 */
876d4bfa 9709 { "(bad)", { XX } },
c0f3af97 9710 { PREFIX_TABLE (PREFIX_VEX_73_REG_3) },
475a2301
L
9711 },
9712 {
c0f3af97
L
9713 /* MOD_VEX_73_REG_6 */
9714 { "(bad)", { XX } },
9715 { PREFIX_TABLE (PREFIX_VEX_73_REG_6) },
876d4bfa
L
9716 },
9717 {
c0f3af97 9718 /* MOD_VEX_73_REG_7 */
4e7d34a6 9719 { "(bad)", { XX } },
c0f3af97 9720 { PREFIX_TABLE (PREFIX_VEX_73_REG_7) },
876d4bfa
L
9721 },
9722 {
c0f3af97
L
9723 /* MOD_VEX_AE_REG_2 */
9724 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) },
9725 { "(bad)", { XX } },
876d4bfa 9726 },
bbedc832 9727 {
c0f3af97
L
9728 /* MOD_VEX_AE_REG_3 */
9729 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) },
4e7d34a6 9730 { "(bad)", { XX } },
bbedc832 9731 },
144c41d9 9732 {
c0f3af97 9733 /* MOD_VEX_D7_PREFIX_2 */
4e7d34a6 9734 { "(bad)", { XX } },
c0f3af97 9735 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) },
144c41d9 9736 },
1afd85e3 9737 {
c0f3af97 9738 /* MOD_VEX_E7_PREFIX_2 */
168e3097 9739 { "vmovntdq", { Mx, XM } },
92fddf8e 9740 { "(bad)", { XX } },
1afd85e3
L
9741 },
9742 {
c0f3af97
L
9743 /* MOD_VEX_F0_PREFIX_3 */
9744 { "vlddqu", { XM, M } },
92fddf8e
L
9745 { "(bad)", { XX } },
9746 },
9747 {
c0f3af97
L
9748 /* MOD_VEX_3818_PREFIX_2 */
9749 { "vbroadcastss", { XM, Md } },
92fddf8e 9750 { "(bad)", { XX } },
1afd85e3 9751 },
75c135a8 9752 {
c0f3af97
L
9753 /* MOD_VEX_3819_PREFIX_2 */
9754 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) },
75c135a8 9755 { "(bad)", { XX } },
75c135a8
L
9756 },
9757 {
c0f3af97
L
9758 /* MOD_VEX_381A_PREFIX_2 */
9759 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) },
75c135a8
L
9760 { "(bad)", { XX } },
9761 },
1afd85e3 9762 {
c0f3af97
L
9763 /* MOD_VEX_382A_PREFIX_2 */
9764 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) },
1afd85e3 9765 { "(bad)", { XX } },
1afd85e3 9766 },
75c135a8 9767 {
c0f3af97
L
9768 /* MOD_VEX_382C_PREFIX_2 */
9769 { "vmaskmovps", { XM, Vex, Mx } },
75c135a8
L
9770 { "(bad)", { XX } },
9771 },
1afd85e3 9772 {
c0f3af97
L
9773 /* MOD_VEX_382D_PREFIX_2 */
9774 { "vmaskmovpd", { XM, Vex, Mx } },
1afd85e3 9775 { "(bad)", { XX } },
1afd85e3
L
9776 },
9777 {
c0f3af97
L
9778 /* MOD_VEX_382E_PREFIX_2 */
9779 { "vmaskmovps", { Mx, Vex, XM } },
4e7d34a6 9780 { "(bad)", { XX } },
1afd85e3
L
9781 },
9782 {
c0f3af97
L
9783 /* MOD_VEX_382F_PREFIX_2 */
9784 { "vmaskmovpd", { Mx, Vex, XM } },
1afd85e3 9785 { "(bad)", { XX } },
1afd85e3 9786 },
b844680a
L
9787};
9788
1ceb70f8 9789static const struct dis386 rm_table[][8] = {
b844680a 9790 {
1ceb70f8 9791 /* RM_0F01_REG_0 */
b844680a
L
9792 { "(bad)", { XX } },
9793 { "vmcall", { Skip_MODRM } },
9794 { "vmlaunch", { Skip_MODRM } },
9795 { "vmresume", { Skip_MODRM } },
9796 { "vmxoff", { Skip_MODRM } },
9797 { "(bad)", { XX } },
9798 { "(bad)", { XX } },
9799 { "(bad)", { XX } },
9800 },
9801 {
1ceb70f8 9802 /* RM_0F01_REG_1 */
b844680a
L
9803 { "monitor", { { OP_Monitor, 0 } } },
9804 { "mwait", { { OP_Mwait, 0 } } },
9805 { "(bad)", { XX } },
9806 { "(bad)", { XX } },
9807 { "(bad)", { XX } },
9808 { "(bad)", { XX } },
9809 { "(bad)", { XX } },
9810 { "(bad)", { XX } },
9811 },
475a2301
L
9812 {
9813 /* RM_0F01_REG_2 */
9814 { "xgetbv", { Skip_MODRM } },
9815 { "xsetbv", { Skip_MODRM } },
9816 { "(bad)", { XX } },
9817 { "(bad)", { XX } },
9818 { "(bad)", { XX } },
9819 { "(bad)", { XX } },
9820 { "(bad)", { XX } },
9821 { "(bad)", { XX } },
9822 },
b844680a 9823 {
1ceb70f8 9824 /* RM_0F01_REG_3 */
4e7d34a6
L
9825 { "vmrun", { Skip_MODRM } },
9826 { "vmmcall", { Skip_MODRM } },
9827 { "vmload", { Skip_MODRM } },
9828 { "vmsave", { Skip_MODRM } },
9829 { "stgi", { Skip_MODRM } },
9830 { "clgi", { Skip_MODRM } },
9831 { "skinit", { Skip_MODRM } },
9832 { "invlpga", { Skip_MODRM } },
9833 },
9834 {
1ceb70f8 9835 /* RM_0F01_REG_7 */
4e7d34a6
L
9836 { "swapgs", { Skip_MODRM } },
9837 { "rdtscp", { Skip_MODRM } },
b844680a
L
9838 { "(bad)", { XX } },
9839 { "(bad)", { XX } },
9840 { "(bad)", { XX } },
9841 { "(bad)", { XX } },
9842 { "(bad)", { XX } },
9843 { "(bad)", { XX } },
9844 },
9845 {
1ceb70f8 9846 /* RM_0FAE_REG_5 */
4e7d34a6 9847 { "lfence", { Skip_MODRM } },
b844680a
L
9848 { "(bad)", { XX } },
9849 { "(bad)", { XX } },
9850 { "(bad)", { XX } },
9851 { "(bad)", { XX } },
9852 { "(bad)", { XX } },
9853 { "(bad)", { XX } },
9854 { "(bad)", { XX } },
9855 },
9856 {
1ceb70f8 9857 /* RM_0FAE_REG_6 */
4e7d34a6 9858 { "mfence", { Skip_MODRM } },
b844680a
L
9859 { "(bad)", { XX } },
9860 { "(bad)", { XX } },
9861 { "(bad)", { XX } },
9862 { "(bad)", { XX } },
9863 { "(bad)", { XX } },
9864 { "(bad)", { XX } },
9865 { "(bad)", { XX } },
9866 },
bbedc832 9867 {
1ceb70f8 9868 /* RM_0FAE_REG_7 */
4e7d34a6
L
9869 { "sfence", { Skip_MODRM } },
9870 { "(bad)", { XX } },
bbedc832
L
9871 { "(bad)", { XX } },
9872 { "(bad)", { XX } },
9873 { "(bad)", { XX } },
9874 { "(bad)", { XX } },
9875 { "(bad)", { XX } },
9876 { "(bad)", { XX } },
144c41d9 9877 },
b844680a
L
9878};
9879
c608c12e
AM
9880#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
9881
f16cd0d5
L
9882/* We use the high bit to indicate different name for the same
9883 prefix. */
9884#define ADDR16_PREFIX (0x67 | 0x100)
9885#define ADDR32_PREFIX (0x67 | 0x200)
9886#define DATA16_PREFIX (0x66 | 0x100)
9887#define DATA32_PREFIX (0x66 | 0x200)
9888#define REP_PREFIX (0xf3 | 0x100)
9889
9890static int
26ca5450 9891ckprefix (void)
252b5132 9892{
f16cd0d5 9893 int newrex, i, length;
52b15da3 9894 rex = 0;
c0f3af97
L
9895 rex_original = 0;
9896 rex_ignored = 0;
252b5132 9897 prefixes = 0;
7d421014 9898 used_prefixes = 0;
52b15da3 9899 rex_used = 0;
f16cd0d5
L
9900 last_lock_prefix = -1;
9901 last_repz_prefix = -1;
9902 last_repnz_prefix = -1;
9903 last_data_prefix = -1;
9904 last_addr_prefix = -1;
9905 last_rex_prefix = -1;
9906 last_seg_prefix = -1;
f310f33d
L
9907 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
9908 all_prefixes[i] = 0;
9909 i = 0;
f16cd0d5
L
9910 length = 0;
9911 /* The maximum instruction length is 15bytes. */
9912 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
9913 {
9914 FETCH_DATA (the_info, codep + 1);
52b15da3 9915 newrex = 0;
252b5132
RH
9916 switch (*codep)
9917 {
52b15da3
JH
9918 /* REX prefixes family. */
9919 case 0x40:
9920 case 0x41:
9921 case 0x42:
9922 case 0x43:
9923 case 0x44:
9924 case 0x45:
9925 case 0x46:
9926 case 0x47:
9927 case 0x48:
9928 case 0x49:
9929 case 0x4a:
9930 case 0x4b:
9931 case 0x4c:
9932 case 0x4d:
9933 case 0x4e:
9934 case 0x4f:
f16cd0d5
L
9935 if (address_mode == mode_64bit)
9936 newrex = *codep;
9937 else
9938 return 1;
9939 last_rex_prefix = i;
52b15da3 9940 break;
252b5132
RH
9941 case 0xf3:
9942 prefixes |= PREFIX_REPZ;
f16cd0d5 9943 last_repz_prefix = i;
252b5132
RH
9944 break;
9945 case 0xf2:
9946 prefixes |= PREFIX_REPNZ;
f16cd0d5 9947 last_repnz_prefix = i;
252b5132
RH
9948 break;
9949 case 0xf0:
9950 prefixes |= PREFIX_LOCK;
f16cd0d5 9951 last_lock_prefix = i;
252b5132
RH
9952 break;
9953 case 0x2e:
9954 prefixes |= PREFIX_CS;
f16cd0d5 9955 last_seg_prefix = i;
252b5132
RH
9956 break;
9957 case 0x36:
9958 prefixes |= PREFIX_SS;
f16cd0d5 9959 last_seg_prefix = i;
252b5132
RH
9960 break;
9961 case 0x3e:
9962 prefixes |= PREFIX_DS;
f16cd0d5 9963 last_seg_prefix = i;
252b5132
RH
9964 break;
9965 case 0x26:
9966 prefixes |= PREFIX_ES;
f16cd0d5 9967 last_seg_prefix = i;
252b5132
RH
9968 break;
9969 case 0x64:
9970 prefixes |= PREFIX_FS;
f16cd0d5 9971 last_seg_prefix = i;
252b5132
RH
9972 break;
9973 case 0x65:
9974 prefixes |= PREFIX_GS;
f16cd0d5 9975 last_seg_prefix = i;
252b5132
RH
9976 break;
9977 case 0x66:
9978 prefixes |= PREFIX_DATA;
f16cd0d5 9979 last_data_prefix = i;
252b5132
RH
9980 break;
9981 case 0x67:
9982 prefixes |= PREFIX_ADDR;
f16cd0d5 9983 last_addr_prefix = i;
252b5132 9984 break;
5076851f 9985 case FWAIT_OPCODE:
252b5132
RH
9986 /* fwait is really an instruction. If there are prefixes
9987 before the fwait, they belong to the fwait, *not* to the
9988 following instruction. */
3e7d61b2 9989 if (prefixes || rex)
252b5132
RH
9990 {
9991 prefixes |= PREFIX_FWAIT;
9992 codep++;
f16cd0d5 9993 return 1;
252b5132
RH
9994 }
9995 prefixes = PREFIX_FWAIT;
9996 break;
9997 default:
f16cd0d5 9998 return 1;
252b5132 9999 }
52b15da3
JH
10000 /* Rex is ignored when followed by another prefix. */
10001 if (rex)
10002 {
3e7d61b2 10003 rex_used = rex;
f16cd0d5 10004 return 1;
52b15da3 10005 }
f16cd0d5
L
10006 if (*codep != FWAIT_OPCODE)
10007 all_prefixes[i++] = *codep;
52b15da3 10008 rex = newrex;
c0f3af97 10009 rex_original = rex;
252b5132 10010 codep++;
f16cd0d5
L
10011 length++;
10012 }
10013 return 0;
10014}
10015
10016static int
10017seg_prefix (int pref)
10018{
10019 switch (pref)
10020 {
10021 case 0x2e:
10022 return PREFIX_CS;
10023 case 0x36:
10024 return PREFIX_SS;
10025 case 0x3e:
10026 return PREFIX_DS;
10027 case 0x26:
10028 return PREFIX_ES;
10029 case 0x64:
10030 return PREFIX_FS;
10031 case 0x65:
10032 return PREFIX_GS;
10033 default:
10034 return 0;
252b5132
RH
10035 }
10036}
10037
7d421014
ILT
10038/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10039 prefix byte. */
10040
10041static const char *
26ca5450 10042prefix_name (int pref, int sizeflag)
7d421014 10043{
0003779b
L
10044 static const char *rexes [16] =
10045 {
10046 "rex", /* 0x40 */
10047 "rex.B", /* 0x41 */
10048 "rex.X", /* 0x42 */
10049 "rex.XB", /* 0x43 */
10050 "rex.R", /* 0x44 */
10051 "rex.RB", /* 0x45 */
10052 "rex.RX", /* 0x46 */
10053 "rex.RXB", /* 0x47 */
10054 "rex.W", /* 0x48 */
10055 "rex.WB", /* 0x49 */
10056 "rex.WX", /* 0x4a */
10057 "rex.WXB", /* 0x4b */
10058 "rex.WR", /* 0x4c */
10059 "rex.WRB", /* 0x4d */
10060 "rex.WRX", /* 0x4e */
10061 "rex.WRXB", /* 0x4f */
10062 };
10063
7d421014
ILT
10064 switch (pref)
10065 {
52b15da3
JH
10066 /* REX prefixes family. */
10067 case 0x40:
52b15da3 10068 case 0x41:
52b15da3 10069 case 0x42:
52b15da3 10070 case 0x43:
52b15da3 10071 case 0x44:
52b15da3 10072 case 0x45:
52b15da3 10073 case 0x46:
52b15da3 10074 case 0x47:
52b15da3 10075 case 0x48:
52b15da3 10076 case 0x49:
52b15da3 10077 case 0x4a:
52b15da3 10078 case 0x4b:
52b15da3 10079 case 0x4c:
52b15da3 10080 case 0x4d:
52b15da3 10081 case 0x4e:
52b15da3 10082 case 0x4f:
0003779b 10083 return rexes [pref - 0x40];
7d421014
ILT
10084 case 0xf3:
10085 return "repz";
10086 case 0xf2:
10087 return "repnz";
10088 case 0xf0:
10089 return "lock";
10090 case 0x2e:
10091 return "cs";
10092 case 0x36:
10093 return "ss";
10094 case 0x3e:
10095 return "ds";
10096 case 0x26:
10097 return "es";
10098 case 0x64:
10099 return "fs";
10100 case 0x65:
10101 return "gs";
10102 case 0x66:
10103 return (sizeflag & DFLAG) ? "data16" : "data32";
10104 case 0x67:
cb712a9e 10105 if (address_mode == mode_64bit)
db6eb5be 10106 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10107 else
2888cb7a 10108 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10109 case FWAIT_OPCODE:
10110 return "fwait";
f16cd0d5
L
10111 case ADDR16_PREFIX:
10112 return "addr16";
10113 case ADDR32_PREFIX:
10114 return "addr32";
10115 case DATA16_PREFIX:
10116 return "data16";
10117 case DATA32_PREFIX:
10118 return "data32";
10119 case REP_PREFIX:
10120 return "rep";
7d421014
ILT
10121 default:
10122 return NULL;
10123 }
10124}
10125
ce518a5f
L
10126static char op_out[MAX_OPERANDS][100];
10127static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10128static int two_source_ops;
ce518a5f
L
10129static bfd_vma op_address[MAX_OPERANDS];
10130static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10131static bfd_vma start_pc;
ce518a5f 10132
252b5132
RH
10133/*
10134 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10135 * (see topic "Redundant prefixes" in the "Differences from 8086"
10136 * section of the "Virtual 8086 Mode" chapter.)
10137 * 'pc' should be the address of this instruction, it will
10138 * be used to print the target address if this is a relative jump or call
10139 * The function returns the length of this instruction in bytes.
10140 */
10141
252b5132 10142static char intel_syntax;
9d141669 10143static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10144static char open_char;
10145static char close_char;
10146static char separator_char;
10147static char scale_char;
10148
e396998b
AM
10149/* Here for backwards compatibility. When gdb stops using
10150 print_insn_i386_att and print_insn_i386_intel these functions can
10151 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10152int
26ca5450 10153print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10154{
10155 intel_syntax = 0;
e396998b
AM
10156
10157 return print_insn (pc, info);
252b5132
RH
10158}
10159
10160int
26ca5450 10161print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10162{
10163 intel_syntax = 1;
e396998b
AM
10164
10165 return print_insn (pc, info);
252b5132
RH
10166}
10167
e396998b 10168int
26ca5450 10169print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10170{
10171 intel_syntax = -1;
10172
10173 return print_insn (pc, info);
10174}
10175
f59a29b9
L
10176void
10177print_i386_disassembler_options (FILE *stream)
10178{
10179 fprintf (stream, _("\n\
10180The following i386/x86-64 specific disassembler options are supported for use\n\
10181with the -M switch (multiple options should be separated by commas):\n"));
10182
10183 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10184 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10185 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10186 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10187 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10188 fprintf (stream, _(" att-mnemonic\n"
10189 " Display instruction in AT&T mnemonic\n"));
10190 fprintf (stream, _(" intel-mnemonic\n"
10191 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10192 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10193 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10194 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10195 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10196 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10197 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10198}
10199
b844680a
L
10200/* Get a pointer to struct dis386 with a valid name. */
10201
10202static const struct dis386 *
8bb15339 10203get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10204{
c0f3af97 10205 int index, vex_table_index;
b844680a
L
10206
10207 if (dp->name != NULL)
10208 return dp;
10209
10210 switch (dp->op[0].bytemode)
10211 {
1ceb70f8
L
10212 case USE_REG_TABLE:
10213 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10214 break;
10215
10216 case USE_MOD_TABLE:
10217 index = modrm.mod == 0x3 ? 1 : 0;
10218 dp = &mod_table[dp->op[1].bytemode][index];
10219 break;
10220
10221 case USE_RM_TABLE:
10222 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
10223 break;
10224
4e7d34a6 10225 case USE_PREFIX_TABLE:
c0f3af97 10226 if (need_vex)
b844680a 10227 {
c0f3af97
L
10228 /* The prefix in VEX is implicit. */
10229 switch (vex.prefix)
10230 {
10231 case 0:
10232 index = 0;
10233 break;
10234 case REPE_PREFIX_OPCODE:
10235 index = 1;
10236 break;
10237 case DATA_PREFIX_OPCODE:
10238 index = 2;
10239 break;
10240 case REPNE_PREFIX_OPCODE:
10241 index = 3;
10242 break;
10243 default:
10244 abort ();
10245 break;
10246 }
b844680a 10247 }
c0f3af97 10248 else
b844680a 10249 {
c0f3af97
L
10250 index = 0;
10251 used_prefixes |= (prefixes & PREFIX_REPZ);
10252 if (prefixes & PREFIX_REPZ)
b844680a 10253 {
c0f3af97 10254 index = 1;
f16cd0d5 10255 all_prefixes[last_repz_prefix] = 0;
b844680a
L
10256 }
10257 else
10258 {
c0f3af97
L
10259 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
10260 PREFIX_DATA. */
10261 used_prefixes |= (prefixes & PREFIX_REPNZ);
10262 if (prefixes & PREFIX_REPNZ)
10263 {
10264 index = 3;
f16cd0d5 10265 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
10266 }
10267 else
b844680a 10268 {
c0f3af97
L
10269 used_prefixes |= (prefixes & PREFIX_DATA);
10270 if (prefixes & PREFIX_DATA)
10271 {
10272 index = 2;
f16cd0d5 10273 all_prefixes[last_data_prefix] = 0;
c0f3af97 10274 }
b844680a
L
10275 }
10276 }
10277 }
1ceb70f8 10278 dp = &prefix_table[dp->op[1].bytemode][index];
b844680a
L
10279 break;
10280
4e7d34a6 10281 case USE_X86_64_TABLE:
b844680a
L
10282 index = address_mode == mode_64bit ? 1 : 0;
10283 dp = &x86_64_table[dp->op[1].bytemode][index];
10284 break;
10285
4e7d34a6 10286 case USE_3BYTE_TABLE:
8bb15339
L
10287 FETCH_DATA (info, codep + 2);
10288 index = *codep++;
10289 dp = &three_byte_table[dp->op[1].bytemode][index];
10290 modrm.mod = (*codep >> 6) & 3;
10291 modrm.reg = (*codep >> 3) & 7;
10292 modrm.rm = *codep & 7;
10293 break;
10294
c0f3af97
L
10295 case USE_VEX_LEN_TABLE:
10296 if (!need_vex)
10297 abort ();
10298
10299 switch (vex.length)
10300 {
10301 case 128:
10302 index = 0;
10303 break;
10304 case 256:
10305 index = 1;
10306 break;
10307 default:
10308 abort ();
10309 break;
10310 }
10311
10312 dp = &vex_len_table[dp->op[1].bytemode][index];
10313 break;
10314
f88c9eb0
SP
10315 case USE_XOP_8F_TABLE:
10316 FETCH_DATA (info, codep + 3);
10317 /* All bits in the REX prefix are ignored. */
10318 rex_ignored = rex;
10319 rex = ~(*codep >> 5) & 0x7;
10320
10321 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
10322 switch ((*codep & 0x1f))
10323 {
10324 default:
10325 BadOp ();
5dd85c99
SP
10326 case 0x8:
10327 vex_table_index = XOP_08;
10328 break;
f88c9eb0
SP
10329 case 0x9:
10330 vex_table_index = XOP_09;
10331 break;
10332 case 0xa:
10333 vex_table_index = XOP_0A;
10334 break;
10335 }
10336 codep++;
10337 vex.w = *codep & 0x80;
10338 if (vex.w && address_mode == mode_64bit)
10339 rex |= REX_W;
10340
10341 vex.register_specifier = (~(*codep >> 3)) & 0xf;
10342 if (address_mode != mode_64bit
10343 && vex.register_specifier > 0x7)
10344 BadOp ();
10345
10346 vex.length = (*codep & 0x4) ? 256 : 128;
10347 switch ((*codep & 0x3))
10348 {
10349 case 0:
10350 vex.prefix = 0;
10351 break;
10352 case 1:
10353 vex.prefix = DATA_PREFIX_OPCODE;
10354 break;
10355 case 2:
10356 vex.prefix = REPE_PREFIX_OPCODE;
10357 break;
10358 case 3:
10359 vex.prefix = REPNE_PREFIX_OPCODE;
10360 break;
10361 }
10362 need_vex = 1;
10363 need_vex_reg = 1;
10364 codep++;
10365 index = *codep++;
10366 dp = &xop_table[vex_table_index][index];
c48244a5
SP
10367
10368 FETCH_DATA (info, codep + 1);
10369 modrm.mod = (*codep >> 6) & 3;
10370 modrm.reg = (*codep >> 3) & 7;
10371 modrm.rm = *codep & 7;
f88c9eb0
SP
10372 break;
10373
c0f3af97
L
10374 case USE_VEX_C4_TABLE:
10375 FETCH_DATA (info, codep + 3);
10376 /* All bits in the REX prefix are ignored. */
10377 rex_ignored = rex;
10378 rex = ~(*codep >> 5) & 0x7;
10379 switch ((*codep & 0x1f))
10380 {
10381 default:
10382 BadOp ();
10383 case 0x1:
f88c9eb0 10384 vex_table_index = VEX_0F;
c0f3af97
L
10385 break;
10386 case 0x2:
f88c9eb0 10387 vex_table_index = VEX_0F38;
c0f3af97
L
10388 break;
10389 case 0x3:
f88c9eb0 10390 vex_table_index = VEX_0F3A;
c0f3af97
L
10391 break;
10392 }
10393 codep++;
10394 vex.w = *codep & 0x80;
10395 if (vex.w && address_mode == mode_64bit)
10396 rex |= REX_W;
10397
10398 vex.register_specifier = (~(*codep >> 3)) & 0xf;
10399 if (address_mode != mode_64bit
10400 && vex.register_specifier > 0x7)
10401 BadOp ();
10402
10403 vex.length = (*codep & 0x4) ? 256 : 128;
10404 switch ((*codep & 0x3))
10405 {
10406 case 0:
10407 vex.prefix = 0;
10408 break;
10409 case 1:
10410 vex.prefix = DATA_PREFIX_OPCODE;
10411 break;
10412 case 2:
10413 vex.prefix = REPE_PREFIX_OPCODE;
10414 break;
10415 case 3:
10416 vex.prefix = REPNE_PREFIX_OPCODE;
10417 break;
10418 }
10419 need_vex = 1;
10420 need_vex_reg = 1;
10421 codep++;
10422 index = *codep++;
10423 dp = &vex_table[vex_table_index][index];
10424 /* There is no MODRM byte for VEX [82|77]. */
10425 if (index != 0x77 && index != 0x82)
10426 {
10427 FETCH_DATA (info, codep + 1);
10428 modrm.mod = (*codep >> 6) & 3;
10429 modrm.reg = (*codep >> 3) & 7;
10430 modrm.rm = *codep & 7;
10431 }
10432 break;
10433
10434 case USE_VEX_C5_TABLE:
10435 FETCH_DATA (info, codep + 2);
10436 /* All bits in the REX prefix are ignored. */
10437 rex_ignored = rex;
10438 rex = (*codep & 0x80) ? 0 : REX_R;
10439
10440 vex.register_specifier = (~(*codep >> 3)) & 0xf;
10441 if (address_mode != mode_64bit
10442 && vex.register_specifier > 0x7)
10443 BadOp ();
10444
10445 vex.length = (*codep & 0x4) ? 256 : 128;
10446 switch ((*codep & 0x3))
10447 {
10448 case 0:
10449 vex.prefix = 0;
10450 break;
10451 case 1:
10452 vex.prefix = DATA_PREFIX_OPCODE;
10453 break;
10454 case 2:
10455 vex.prefix = REPE_PREFIX_OPCODE;
10456 break;
10457 case 3:
10458 vex.prefix = REPNE_PREFIX_OPCODE;
10459 break;
10460 }
10461 need_vex = 1;
10462 need_vex_reg = 1;
10463 codep++;
10464 index = *codep++;
10465 dp = &vex_table[dp->op[1].bytemode][index];
10466 /* There is no MODRM byte for VEX [82|77]. */
10467 if (index != 0x77 && index != 0x82)
10468 {
10469 FETCH_DATA (info, codep + 1);
10470 modrm.mod = (*codep >> 6) & 3;
10471 modrm.reg = (*codep >> 3) & 7;
10472 modrm.rm = *codep & 7;
10473 }
10474 break;
10475
b844680a 10476 default:
d34b5006 10477 abort ();
b844680a
L
10478 }
10479
10480 if (dp->name != NULL)
10481 return dp;
10482 else
8bb15339 10483 return get_valid_dis386 (dp, info);
b844680a
L
10484}
10485
e396998b 10486static int
26ca5450 10487print_insn (bfd_vma pc, disassemble_info *info)
252b5132 10488{
2da11e11 10489 const struct dis386 *dp;
252b5132 10490 int i;
ce518a5f 10491 char *op_txt[MAX_OPERANDS];
252b5132 10492 int needcomma;
e396998b
AM
10493 int sizeflag;
10494 const char *p;
252b5132 10495 struct dis_private priv;
eec0f4ca 10496 unsigned char op;
f16cd0d5
L
10497 int prefix_length;
10498 int default_prefixes;
252b5132 10499
cb712a9e 10500 if (info->mach == bfd_mach_x86_64_intel_syntax
8a9036a4
L
10501 || info->mach == bfd_mach_x86_64
10502 || info->mach == bfd_mach_l1om
10503 || info->mach == bfd_mach_l1om_intel_syntax)
cb712a9e
L
10504 address_mode = mode_64bit;
10505 else
10506 address_mode = mode_32bit;
52b15da3 10507
8373f971 10508 if (intel_syntax == (char) -1)
e396998b 10509 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
10510 || info->mach == bfd_mach_x86_64_intel_syntax
10511 || info->mach == bfd_mach_l1om_intel_syntax);
e396998b 10512
2da11e11 10513 if (info->mach == bfd_mach_i386_i386
52b15da3 10514 || info->mach == bfd_mach_x86_64
8a9036a4 10515 || info->mach == bfd_mach_l1om
52b15da3 10516 || info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
10517 || info->mach == bfd_mach_x86_64_intel_syntax
10518 || info->mach == bfd_mach_l1om_intel_syntax)
e396998b 10519 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 10520 else if (info->mach == bfd_mach_i386_i8086)
e396998b 10521 priv.orig_sizeflag = 0;
2da11e11
AM
10522 else
10523 abort ();
e396998b
AM
10524
10525 for (p = info->disassembler_options; p != NULL; )
10526 {
0112cd26 10527 if (CONST_STRNEQ (p, "x86-64"))
e396998b 10528 {
cb712a9e 10529 address_mode = mode_64bit;
e396998b
AM
10530 priv.orig_sizeflag = AFLAG | DFLAG;
10531 }
0112cd26 10532 else if (CONST_STRNEQ (p, "i386"))
e396998b 10533 {
cb712a9e 10534 address_mode = mode_32bit;
e396998b
AM
10535 priv.orig_sizeflag = AFLAG | DFLAG;
10536 }
0112cd26 10537 else if (CONST_STRNEQ (p, "i8086"))
e396998b 10538 {
cb712a9e 10539 address_mode = mode_16bit;
e396998b
AM
10540 priv.orig_sizeflag = 0;
10541 }
0112cd26 10542 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
10543 {
10544 intel_syntax = 1;
9d141669
L
10545 if (CONST_STRNEQ (p + 5, "-mnemonic"))
10546 intel_mnemonic = 1;
e396998b 10547 }
0112cd26 10548 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
10549 {
10550 intel_syntax = 0;
9d141669
L
10551 if (CONST_STRNEQ (p + 3, "-mnemonic"))
10552 intel_mnemonic = 0;
e396998b 10553 }
0112cd26 10554 else if (CONST_STRNEQ (p, "addr"))
e396998b 10555 {
f59a29b9
L
10556 if (address_mode == mode_64bit)
10557 {
10558 if (p[4] == '3' && p[5] == '2')
10559 priv.orig_sizeflag &= ~AFLAG;
10560 else if (p[4] == '6' && p[5] == '4')
10561 priv.orig_sizeflag |= AFLAG;
10562 }
10563 else
10564 {
10565 if (p[4] == '1' && p[5] == '6')
10566 priv.orig_sizeflag &= ~AFLAG;
10567 else if (p[4] == '3' && p[5] == '2')
10568 priv.orig_sizeflag |= AFLAG;
10569 }
e396998b 10570 }
0112cd26 10571 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
10572 {
10573 if (p[4] == '1' && p[5] == '6')
10574 priv.orig_sizeflag &= ~DFLAG;
10575 else if (p[4] == '3' && p[5] == '2')
10576 priv.orig_sizeflag |= DFLAG;
10577 }
0112cd26 10578 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
10579 priv.orig_sizeflag |= SUFFIX_ALWAYS;
10580
10581 p = strchr (p, ',');
10582 if (p != NULL)
10583 p++;
10584 }
10585
10586 if (intel_syntax)
10587 {
10588 names64 = intel_names64;
10589 names32 = intel_names32;
10590 names16 = intel_names16;
10591 names8 = intel_names8;
10592 names8rex = intel_names8rex;
10593 names_seg = intel_names_seg;
db51cc60
L
10594 index64 = intel_index64;
10595 index32 = intel_index32;
e396998b
AM
10596 index16 = intel_index16;
10597 open_char = '[';
10598 close_char = ']';
10599 separator_char = '+';
10600 scale_char = '*';
10601 }
10602 else
10603 {
10604 names64 = att_names64;
10605 names32 = att_names32;
10606 names16 = att_names16;
10607 names8 = att_names8;
10608 names8rex = att_names8rex;
10609 names_seg = att_names_seg;
db51cc60
L
10610 index64 = att_index64;
10611 index32 = att_index32;
e396998b
AM
10612 index16 = att_index16;
10613 open_char = '(';
10614 close_char = ')';
10615 separator_char = ',';
10616 scale_char = ',';
10617 }
2da11e11 10618
4fe53c98 10619 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
10620 puts most long word instructions on a single line. Use 8 bytes
10621 for Intel L1OM. */
10622 if (info->mach == bfd_mach_l1om
10623 || info->mach == bfd_mach_l1om_intel_syntax)
10624 info->bytes_per_line = 8;
10625 else
10626 info->bytes_per_line = 7;
252b5132 10627
26ca5450 10628 info->private_data = &priv;
252b5132
RH
10629 priv.max_fetched = priv.the_buffer;
10630 priv.insn_start = pc;
252b5132
RH
10631
10632 obuf[0] = 0;
ce518a5f
L
10633 for (i = 0; i < MAX_OPERANDS; ++i)
10634 {
10635 op_out[i][0] = 0;
10636 op_index[i] = -1;
10637 }
252b5132
RH
10638
10639 the_info = info;
10640 start_pc = pc;
e396998b
AM
10641 start_codep = priv.the_buffer;
10642 codep = priv.the_buffer;
252b5132 10643
5076851f
ILT
10644 if (setjmp (priv.bailout) != 0)
10645 {
7d421014
ILT
10646 const char *name;
10647
5076851f 10648 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
10649 means we have an incomplete instruction of some sort. Just
10650 print the first byte as a prefix or a .byte pseudo-op. */
10651 if (codep > priv.the_buffer)
5076851f 10652 {
e396998b 10653 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
10654 if (name != NULL)
10655 (*info->fprintf_func) (info->stream, "%s", name);
10656 else
5076851f 10657 {
7d421014
ILT
10658 /* Just print the first byte as a .byte instruction. */
10659 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 10660 (unsigned int) priv.the_buffer[0]);
5076851f 10661 }
5076851f 10662
7d421014 10663 return 1;
5076851f
ILT
10664 }
10665
10666 return -1;
10667 }
10668
52b15da3 10669 obufp = obuf;
f16cd0d5
L
10670 sizeflag = priv.orig_sizeflag;
10671
10672 if (!ckprefix () || rex_used)
10673 {
10674 /* Too many prefixes or unused REX prefixes. */
10675 for (i = 0;
10676 all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes);
10677 i++)
10678 (*info->fprintf_func) (info->stream, "%s",
10679 prefix_name (all_prefixes[i], sizeflag));
10680 return 1;
10681 }
252b5132
RH
10682
10683 insn_codep = codep;
10684
10685 FETCH_DATA (info, codep + 1);
10686 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
10687
3e7d61b2 10688 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 10689 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 10690 {
f16cd0d5 10691 (*info->fprintf_func) (info->stream, "fwait");
7d421014 10692 return 1;
252b5132
RH
10693 }
10694
eec0f4ca 10695 op = 0;
c1e679ec 10696
252b5132
RH
10697 if (*codep == 0x0f)
10698 {
eec0f4ca 10699 unsigned char threebyte;
252b5132 10700 FETCH_DATA (info, codep + 2);
eec0f4ca
L
10701 threebyte = *++codep;
10702 dp = &dis386_twobyte[threebyte];
252b5132 10703 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 10704 codep++;
252b5132
RH
10705 }
10706 else
10707 {
6439fc28 10708 dp = &dis386[*codep];
252b5132 10709 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 10710 codep++;
252b5132 10711 }
246c51aa 10712
b844680a 10713 if ((prefixes & PREFIX_REPZ))
f16cd0d5 10714 used_prefixes |= PREFIX_REPZ;
b844680a 10715 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 10716 used_prefixes |= PREFIX_REPNZ;
b844680a 10717 if ((prefixes & PREFIX_LOCK))
f16cd0d5 10718 used_prefixes |= PREFIX_LOCK;
c608c12e 10719
f16cd0d5 10720 default_prefixes = 0;
c608c12e
AM
10721 if (prefixes & PREFIX_ADDR)
10722 {
10723 sizeflag ^= AFLAG;
ce518a5f 10724 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 10725 {
cb712a9e 10726 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 10727 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 10728 else
f16cd0d5
L
10729 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
10730 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
10731 }
10732 }
10733
b844680a 10734 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
10735 {
10736 sizeflag ^= DFLAG;
ce518a5f
L
10737 if (dp->op[2].bytemode == cond_jump_mode
10738 && dp->op[0].bytemode == v_mode
6439fc28 10739 && !intel_syntax)
3ffd33cf
AM
10740 {
10741 if (sizeflag & DFLAG)
f16cd0d5 10742 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 10743 else
f16cd0d5
L
10744 all_prefixes[last_data_prefix] = DATA16_PREFIX;
10745 default_prefixes |= PREFIX_DATA;
10746 }
10747 else if (rex & REX_W)
10748 {
10749 /* REX_W will override PREFIX_DATA. */
10750 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
10751 }
10752 }
10753
8bb15339 10754 if (need_modrm)
252b5132
RH
10755 {
10756 FETCH_DATA (info, codep + 1);
7967e09e
L
10757 modrm.mod = (*codep >> 6) & 3;
10758 modrm.reg = (*codep >> 3) & 7;
10759 modrm.rm = *codep & 7;
252b5132
RH
10760 }
10761
55b126d4
L
10762 need_vex = 0;
10763 need_vex_reg = 0;
10764 vex_w_done = 0;
10765
ce518a5f 10766 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132
RH
10767 {
10768 dofloat (sizeflag);
10769 }
10770 else
10771 {
8bb15339 10772 dp = get_valid_dis386 (dp, info);
b844680a 10773 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f
L
10774 {
10775 for (i = 0; i < MAX_OPERANDS; ++i)
10776 {
246c51aa 10777 obufp = op_out[i];
ce518a5f
L
10778 op_ad = MAX_OPERANDS - 1 - i;
10779 if (dp->op[i].rtn)
10780 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
10781 }
6439fc28 10782 }
252b5132
RH
10783 }
10784
7d421014
ILT
10785 /* See if any prefixes were not used. If so, print the first one
10786 separately. If we don't do this, we'll wind up printing an
10787 instruction stream which does not precisely correspond to the
10788 bytes we are disassembling. */
f16cd0d5 10789 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 10790 {
f16cd0d5
L
10791 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10792 if (all_prefixes[i])
10793 {
10794 const char *name;
10795 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
10796 if (name == NULL)
10797 name = INTERNAL_DISASSEMBLER_ERROR;
10798 (*info->fprintf_func) (info->stream, "%s", name);
10799 return 1;
10800 }
52b15da3 10801 }
7d421014 10802
f16cd0d5 10803 /* Check if the REX prefix used. */
2a70cca4 10804 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
10805 all_prefixes[last_rex_prefix] = 0;
10806
10807 /* Check if the SEG prefix used. */
10808 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
10809 | PREFIX_FS | PREFIX_GS)) != 0
10810 && (used_prefixes
10811 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
10812 all_prefixes[last_seg_prefix] = 0;
10813
10814 /* Check if the ADDR prefix used. */
10815 if ((prefixes & PREFIX_ADDR) != 0
10816 && (used_prefixes & PREFIX_ADDR) != 0)
10817 all_prefixes[last_addr_prefix] = 0;
10818
10819 /* Check if the DATA prefix used. */
10820 if ((prefixes & PREFIX_DATA) != 0
10821 && (used_prefixes & PREFIX_DATA) != 0)
10822 all_prefixes[last_data_prefix] = 0;
10823
10824 prefix_length = 0;
f310f33d 10825 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
10826 if (all_prefixes[i])
10827 {
10828 const char *name;
10829 name = prefix_name (all_prefixes[i], sizeflag);
10830 if (name == NULL)
10831 abort ();
10832 prefix_length += strlen (name) + 1;
10833 (*info->fprintf_func) (info->stream, "%s ", name);
10834 }
b844680a 10835
f16cd0d5
L
10836 /* Check maximum code length. */
10837 if ((codep - start_codep) > MAX_CODE_LENGTH)
10838 {
10839 (*info->fprintf_func) (info->stream, "(bad)");
10840 return MAX_CODE_LENGTH;
10841 }
b844680a 10842
ea397f5b 10843 obufp = mnemonicendp;
f16cd0d5 10844 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
10845 oappend (" ");
10846 oappend (" ");
10847 (*info->fprintf_func) (info->stream, "%s", obuf);
10848
10849 /* The enter and bound instructions are printed with operands in the same
10850 order as the intel book; everything else is printed in reverse order. */
2da11e11 10851 if (intel_syntax || two_source_ops)
252b5132 10852 {
185b1163
L
10853 bfd_vma riprel;
10854
ce518a5f
L
10855 for (i = 0; i < MAX_OPERANDS; ++i)
10856 op_txt[i] = op_out[i];
246c51aa 10857
ce518a5f
L
10858 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
10859 {
10860 op_ad = op_index[i];
10861 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
10862 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
10863 riprel = op_riprel[i];
10864 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
10865 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 10866 }
252b5132
RH
10867 }
10868 else
10869 {
ce518a5f
L
10870 for (i = 0; i < MAX_OPERANDS; ++i)
10871 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
10872 }
10873
ce518a5f
L
10874 needcomma = 0;
10875 for (i = 0; i < MAX_OPERANDS; ++i)
10876 if (*op_txt[i])
10877 {
10878 if (needcomma)
10879 (*info->fprintf_func) (info->stream, ",");
10880 if (op_index[i] != -1 && !op_riprel[i])
10881 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
10882 else
10883 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
10884 needcomma = 1;
10885 }
050dfa73 10886
ce518a5f 10887 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
10888 if (op_index[i] != -1 && op_riprel[i])
10889 {
10890 (*info->fprintf_func) (info->stream, " # ");
10891 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
10892 + op_address[op_index[i]]), info);
185b1163 10893 break;
52b15da3 10894 }
e396998b 10895 return codep - priv.the_buffer;
252b5132
RH
10896}
10897
6439fc28 10898static const char *float_mem[] = {
252b5132 10899 /* d8 */
7c52e0e8
L
10900 "fadd{s|}",
10901 "fmul{s|}",
10902 "fcom{s|}",
10903 "fcomp{s|}",
10904 "fsub{s|}",
10905 "fsubr{s|}",
10906 "fdiv{s|}",
10907 "fdivr{s|}",
db6eb5be 10908 /* d9 */
7c52e0e8 10909 "fld{s|}",
252b5132 10910 "(bad)",
7c52e0e8
L
10911 "fst{s|}",
10912 "fstp{s|}",
9306ca4a 10913 "fldenvIC",
252b5132 10914 "fldcw",
9306ca4a 10915 "fNstenvIC",
252b5132
RH
10916 "fNstcw",
10917 /* da */
7c52e0e8
L
10918 "fiadd{l|}",
10919 "fimul{l|}",
10920 "ficom{l|}",
10921 "ficomp{l|}",
10922 "fisub{l|}",
10923 "fisubr{l|}",
10924 "fidiv{l|}",
10925 "fidivr{l|}",
252b5132 10926 /* db */
7c52e0e8
L
10927 "fild{l|}",
10928 "fisttp{l|}",
10929 "fist{l|}",
10930 "fistp{l|}",
252b5132 10931 "(bad)",
6439fc28 10932 "fld{t||t|}",
252b5132 10933 "(bad)",
6439fc28 10934 "fstp{t||t|}",
252b5132 10935 /* dc */
7c52e0e8
L
10936 "fadd{l|}",
10937 "fmul{l|}",
10938 "fcom{l|}",
10939 "fcomp{l|}",
10940 "fsub{l|}",
10941 "fsubr{l|}",
10942 "fdiv{l|}",
10943 "fdivr{l|}",
252b5132 10944 /* dd */
7c52e0e8
L
10945 "fld{l|}",
10946 "fisttp{ll|}",
10947 "fst{l||}",
10948 "fstp{l|}",
9306ca4a 10949 "frstorIC",
252b5132 10950 "(bad)",
9306ca4a 10951 "fNsaveIC",
252b5132
RH
10952 "fNstsw",
10953 /* de */
10954 "fiadd",
10955 "fimul",
10956 "ficom",
10957 "ficomp",
10958 "fisub",
10959 "fisubr",
10960 "fidiv",
10961 "fidivr",
10962 /* df */
10963 "fild",
ca164297 10964 "fisttp",
252b5132
RH
10965 "fist",
10966 "fistp",
10967 "fbld",
7c52e0e8 10968 "fild{ll|}",
252b5132 10969 "fbstp",
7c52e0e8 10970 "fistp{ll|}",
1d9f512f
AM
10971};
10972
10973static const unsigned char float_mem_mode[] = {
10974 /* d8 */
10975 d_mode,
10976 d_mode,
10977 d_mode,
10978 d_mode,
10979 d_mode,
10980 d_mode,
10981 d_mode,
10982 d_mode,
10983 /* d9 */
10984 d_mode,
10985 0,
10986 d_mode,
10987 d_mode,
10988 0,
10989 w_mode,
10990 0,
10991 w_mode,
10992 /* da */
10993 d_mode,
10994 d_mode,
10995 d_mode,
10996 d_mode,
10997 d_mode,
10998 d_mode,
10999 d_mode,
11000 d_mode,
11001 /* db */
11002 d_mode,
11003 d_mode,
11004 d_mode,
11005 d_mode,
11006 0,
9306ca4a 11007 t_mode,
1d9f512f 11008 0,
9306ca4a 11009 t_mode,
1d9f512f
AM
11010 /* dc */
11011 q_mode,
11012 q_mode,
11013 q_mode,
11014 q_mode,
11015 q_mode,
11016 q_mode,
11017 q_mode,
11018 q_mode,
11019 /* dd */
11020 q_mode,
11021 q_mode,
11022 q_mode,
11023 q_mode,
11024 0,
11025 0,
11026 0,
11027 w_mode,
11028 /* de */
11029 w_mode,
11030 w_mode,
11031 w_mode,
11032 w_mode,
11033 w_mode,
11034 w_mode,
11035 w_mode,
11036 w_mode,
11037 /* df */
11038 w_mode,
11039 w_mode,
11040 w_mode,
11041 w_mode,
9306ca4a 11042 t_mode,
1d9f512f 11043 q_mode,
9306ca4a 11044 t_mode,
1d9f512f 11045 q_mode
252b5132
RH
11046};
11047
ce518a5f
L
11048#define ST { OP_ST, 0 }
11049#define STi { OP_STi, 0 }
252b5132 11050
4efba78c
L
11051#define FGRPd9_2 NULL, { { NULL, 0 } }
11052#define FGRPd9_4 NULL, { { NULL, 1 } }
11053#define FGRPd9_5 NULL, { { NULL, 2 } }
11054#define FGRPd9_6 NULL, { { NULL, 3 } }
11055#define FGRPd9_7 NULL, { { NULL, 4 } }
11056#define FGRPda_5 NULL, { { NULL, 5 } }
11057#define FGRPdb_4 NULL, { { NULL, 6 } }
11058#define FGRPde_3 NULL, { { NULL, 7 } }
11059#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11060
2da11e11 11061static const struct dis386 float_reg[][8] = {
252b5132
RH
11062 /* d8 */
11063 {
ce518a5f
L
11064 { "fadd", { ST, STi } },
11065 { "fmul", { ST, STi } },
11066 { "fcom", { STi } },
11067 { "fcomp", { STi } },
11068 { "fsub", { ST, STi } },
11069 { "fsubr", { ST, STi } },
11070 { "fdiv", { ST, STi } },
11071 { "fdivr", { ST, STi } },
252b5132
RH
11072 },
11073 /* d9 */
11074 {
ce518a5f
L
11075 { "fld", { STi } },
11076 { "fxch", { STi } },
252b5132 11077 { FGRPd9_2 },
ce518a5f 11078 { "(bad)", { XX } },
252b5132
RH
11079 { FGRPd9_4 },
11080 { FGRPd9_5 },
11081 { FGRPd9_6 },
11082 { FGRPd9_7 },
11083 },
11084 /* da */
11085 {
ce518a5f
L
11086 { "fcmovb", { ST, STi } },
11087 { "fcmove", { ST, STi } },
11088 { "fcmovbe",{ ST, STi } },
11089 { "fcmovu", { ST, STi } },
11090 { "(bad)", { XX } },
252b5132 11091 { FGRPda_5 },
ce518a5f
L
11092 { "(bad)", { XX } },
11093 { "(bad)", { XX } },
252b5132
RH
11094 },
11095 /* db */
11096 {
ce518a5f
L
11097 { "fcmovnb",{ ST, STi } },
11098 { "fcmovne",{ ST, STi } },
11099 { "fcmovnbe",{ ST, STi } },
11100 { "fcmovnu",{ ST, STi } },
252b5132 11101 { FGRPdb_4 },
ce518a5f
L
11102 { "fucomi", { ST, STi } },
11103 { "fcomi", { ST, STi } },
11104 { "(bad)", { XX } },
252b5132
RH
11105 },
11106 /* dc */
11107 {
ce518a5f
L
11108 { "fadd", { STi, ST } },
11109 { "fmul", { STi, ST } },
11110 { "(bad)", { XX } },
11111 { "(bad)", { XX } },
9d141669
L
11112 { "fsub!M", { STi, ST } },
11113 { "fsubM", { STi, ST } },
11114 { "fdiv!M", { STi, ST } },
11115 { "fdivM", { STi, ST } },
252b5132
RH
11116 },
11117 /* dd */
11118 {
ce518a5f
L
11119 { "ffree", { STi } },
11120 { "(bad)", { XX } },
11121 { "fst", { STi } },
11122 { "fstp", { STi } },
11123 { "fucom", { STi } },
11124 { "fucomp", { STi } },
11125 { "(bad)", { XX } },
11126 { "(bad)", { XX } },
252b5132
RH
11127 },
11128 /* de */
11129 {
ce518a5f
L
11130 { "faddp", { STi, ST } },
11131 { "fmulp", { STi, ST } },
11132 { "(bad)", { XX } },
252b5132 11133 { FGRPde_3 },
9d141669
L
11134 { "fsub!Mp", { STi, ST } },
11135 { "fsubMp", { STi, ST } },
11136 { "fdiv!Mp", { STi, ST } },
11137 { "fdivMp", { STi, ST } },
252b5132
RH
11138 },
11139 /* df */
11140 {
ce518a5f
L
11141 { "ffreep", { STi } },
11142 { "(bad)", { XX } },
11143 { "(bad)", { XX } },
11144 { "(bad)", { XX } },
252b5132 11145 { FGRPdf_4 },
ce518a5f
L
11146 { "fucomip", { ST, STi } },
11147 { "fcomip", { ST, STi } },
11148 { "(bad)", { XX } },
252b5132
RH
11149 },
11150};
11151
252b5132
RH
11152static char *fgrps[][8] = {
11153 /* d9_2 0 */
11154 {
11155 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11156 },
11157
11158 /* d9_4 1 */
11159 {
11160 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11161 },
11162
11163 /* d9_5 2 */
11164 {
11165 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11166 },
11167
11168 /* d9_6 3 */
11169 {
11170 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11171 },
11172
11173 /* d9_7 4 */
11174 {
11175 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11176 },
11177
11178 /* da_5 5 */
11179 {
11180 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11181 },
11182
11183 /* db_4 6 */
11184 {
309d3373
JB
11185 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11186 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11187 },
11188
11189 /* de_3 7 */
11190 {
11191 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11192 },
11193
11194 /* df_4 8 */
11195 {
11196 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11197 },
11198};
11199
b6169b20
L
11200static void
11201swap_operand (void)
11202{
11203 mnemonicendp[0] = '.';
11204 mnemonicendp[1] = 's';
11205 mnemonicendp += 2;
11206}
11207
b844680a
L
11208static void
11209OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
11210 int sizeflag ATTRIBUTE_UNUSED)
11211{
11212 /* Skip mod/rm byte. */
11213 MODRM_CHECK;
11214 codep++;
11215}
11216
252b5132 11217static void
26ca5450 11218dofloat (int sizeflag)
252b5132 11219{
2da11e11 11220 const struct dis386 *dp;
252b5132
RH
11221 unsigned char floatop;
11222
11223 floatop = codep[-1];
11224
7967e09e 11225 if (modrm.mod != 3)
252b5132 11226 {
7967e09e 11227 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
11228
11229 putop (float_mem[fp_indx], sizeflag);
ce518a5f 11230 obufp = op_out[0];
6e50d963 11231 op_ad = 2;
1d9f512f 11232 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
11233 return;
11234 }
6608db57 11235 /* Skip mod/rm byte. */
4bba6815 11236 MODRM_CHECK;
252b5132
RH
11237 codep++;
11238
7967e09e 11239 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
11240 if (dp->name == NULL)
11241 {
7967e09e 11242 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 11243
6608db57 11244 /* Instruction fnstsw is only one with strange arg. */
252b5132 11245 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 11246 strcpy (op_out[0], names16[0]);
252b5132
RH
11247 }
11248 else
11249 {
11250 putop (dp->name, sizeflag);
11251
ce518a5f 11252 obufp = op_out[0];
6e50d963 11253 op_ad = 2;
ce518a5f
L
11254 if (dp->op[0].rtn)
11255 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 11256
ce518a5f 11257 obufp = op_out[1];
6e50d963 11258 op_ad = 1;
ce518a5f
L
11259 if (dp->op[1].rtn)
11260 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
11261 }
11262}
11263
252b5132 11264static void
26ca5450 11265OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11266{
422673a9 11267 oappend ("%st" + intel_syntax);
252b5132
RH
11268}
11269
252b5132 11270static void
26ca5450 11271OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11272{
7967e09e 11273 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 11274 oappend (scratchbuf + intel_syntax);
252b5132
RH
11275}
11276
6608db57 11277/* Capital letters in template are macros. */
6439fc28 11278static int
d3ce72d0 11279putop (const char *in_template, int sizeflag)
252b5132 11280{
2da11e11 11281 const char *p;
9306ca4a 11282 int alt = 0;
9d141669 11283 int cond = 1;
98b528ac
L
11284 unsigned int l = 0, len = 1;
11285 char last[4];
11286
11287#define SAVE_LAST(c) \
11288 if (l < len && l < sizeof (last)) \
11289 last[l++] = c; \
11290 else \
11291 abort ();
252b5132 11292
d3ce72d0 11293 for (p = in_template; *p; p++)
252b5132
RH
11294 {
11295 switch (*p)
11296 {
11297 default:
11298 *obufp++ = *p;
11299 break;
98b528ac
L
11300 case '%':
11301 len++;
11302 break;
9d141669
L
11303 case '!':
11304 cond = 0;
11305 break;
6439fc28
AM
11306 case '{':
11307 alt = 0;
11308 if (intel_syntax)
6439fc28
AM
11309 {
11310 while (*++p != '|')
7c52e0e8
L
11311 if (*p == '}' || *p == '\0')
11312 abort ();
6439fc28 11313 }
9306ca4a
JB
11314 /* Fall through. */
11315 case 'I':
11316 alt = 1;
11317 continue;
6439fc28
AM
11318 case '|':
11319 while (*++p != '}')
11320 {
11321 if (*p == '\0')
11322 abort ();
11323 }
11324 break;
11325 case '}':
11326 break;
252b5132 11327 case 'A':
db6eb5be
AM
11328 if (intel_syntax)
11329 break;
7967e09e 11330 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
11331 *obufp++ = 'b';
11332 break;
11333 case 'B':
4b06377f
L
11334 if (l == 0 && len == 1)
11335 {
11336case_B:
11337 if (intel_syntax)
11338 break;
11339 if (sizeflag & SUFFIX_ALWAYS)
11340 *obufp++ = 'b';
11341 }
11342 else
11343 {
11344 if (l != 1
11345 || len != 2
11346 || last[0] != 'L')
11347 {
11348 SAVE_LAST (*p);
11349 break;
11350 }
11351
11352 if (address_mode == mode_64bit
11353 && !(prefixes & PREFIX_ADDR))
11354 {
11355 *obufp++ = 'a';
11356 *obufp++ = 'b';
11357 *obufp++ = 's';
11358 }
11359
11360 goto case_B;
11361 }
252b5132 11362 break;
9306ca4a
JB
11363 case 'C':
11364 if (intel_syntax && !alt)
11365 break;
11366 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
11367 {
11368 if (sizeflag & DFLAG)
11369 *obufp++ = intel_syntax ? 'd' : 'l';
11370 else
11371 *obufp++ = intel_syntax ? 'w' : 's';
11372 used_prefixes |= (prefixes & PREFIX_DATA);
11373 }
11374 break;
ed7841b3
JB
11375 case 'D':
11376 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
11377 break;
161a04f6 11378 USED_REX (REX_W);
7967e09e 11379 if (modrm.mod == 3)
ed7841b3 11380 {
161a04f6 11381 if (rex & REX_W)
ed7841b3 11382 *obufp++ = 'q';
ed7841b3 11383 else
f16cd0d5
L
11384 {
11385 if (sizeflag & DFLAG)
11386 *obufp++ = intel_syntax ? 'd' : 'l';
11387 else
11388 *obufp++ = 'w';
11389 used_prefixes |= (prefixes & PREFIX_DATA);
11390 }
ed7841b3
JB
11391 }
11392 else
11393 *obufp++ = 'w';
11394 break;
252b5132 11395 case 'E': /* For jcxz/jecxz */
cb712a9e 11396 if (address_mode == mode_64bit)
c1a64871
JH
11397 {
11398 if (sizeflag & AFLAG)
11399 *obufp++ = 'r';
11400 else
11401 *obufp++ = 'e';
11402 }
11403 else
11404 if (sizeflag & AFLAG)
11405 *obufp++ = 'e';
3ffd33cf
AM
11406 used_prefixes |= (prefixes & PREFIX_ADDR);
11407 break;
11408 case 'F':
db6eb5be
AM
11409 if (intel_syntax)
11410 break;
e396998b 11411 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
11412 {
11413 if (sizeflag & AFLAG)
cb712a9e 11414 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 11415 else
cb712a9e 11416 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
11417 used_prefixes |= (prefixes & PREFIX_ADDR);
11418 }
252b5132 11419 break;
52fd6d94
JB
11420 case 'G':
11421 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
11422 break;
161a04f6 11423 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
11424 *obufp++ = 'l';
11425 else
11426 *obufp++ = 'w';
161a04f6 11427 if (!(rex & REX_W))
52fd6d94
JB
11428 used_prefixes |= (prefixes & PREFIX_DATA);
11429 break;
5dd0794d 11430 case 'H':
db6eb5be
AM
11431 if (intel_syntax)
11432 break;
5dd0794d
AM
11433 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
11434 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
11435 {
11436 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
11437 *obufp++ = ',';
11438 *obufp++ = 'p';
11439 if (prefixes & PREFIX_DS)
11440 *obufp++ = 't';
11441 else
11442 *obufp++ = 'n';
11443 }
11444 break;
9306ca4a
JB
11445 case 'J':
11446 if (intel_syntax)
11447 break;
11448 *obufp++ = 'l';
11449 break;
42903f7f
L
11450 case 'K':
11451 USED_REX (REX_W);
11452 if (rex & REX_W)
11453 *obufp++ = 'q';
11454 else
11455 *obufp++ = 'd';
11456 break;
6dd5059a
L
11457 case 'Z':
11458 if (intel_syntax)
11459 break;
11460 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
11461 {
11462 *obufp++ = 'q';
11463 break;
11464 }
11465 /* Fall through. */
98b528ac 11466 goto case_L;
252b5132 11467 case 'L':
98b528ac
L
11468 if (l != 0 || len != 1)
11469 {
11470 SAVE_LAST (*p);
11471 break;
11472 }
11473case_L:
db6eb5be
AM
11474 if (intel_syntax)
11475 break;
252b5132
RH
11476 if (sizeflag & SUFFIX_ALWAYS)
11477 *obufp++ = 'l';
252b5132 11478 break;
9d141669
L
11479 case 'M':
11480 if (intel_mnemonic != cond)
11481 *obufp++ = 'r';
11482 break;
252b5132
RH
11483 case 'N':
11484 if ((prefixes & PREFIX_FWAIT) == 0)
11485 *obufp++ = 'n';
7d421014
ILT
11486 else
11487 used_prefixes |= PREFIX_FWAIT;
252b5132 11488 break;
52b15da3 11489 case 'O':
161a04f6
L
11490 USED_REX (REX_W);
11491 if (rex & REX_W)
6439fc28 11492 *obufp++ = 'o';
a35ca55a
JB
11493 else if (intel_syntax && (sizeflag & DFLAG))
11494 *obufp++ = 'q';
52b15da3
JH
11495 else
11496 *obufp++ = 'd';
161a04f6 11497 if (!(rex & REX_W))
a35ca55a 11498 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 11499 break;
6439fc28 11500 case 'T':
db6eb5be
AM
11501 if (intel_syntax)
11502 break;
cb712a9e 11503 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
11504 {
11505 *obufp++ = 'q';
11506 break;
11507 }
6608db57 11508 /* Fall through. */
252b5132 11509 case 'P':
db6eb5be
AM
11510 if (intel_syntax)
11511 break;
252b5132 11512 if ((prefixes & PREFIX_DATA)
161a04f6 11513 || (rex & REX_W)
e396998b 11514 || (sizeflag & SUFFIX_ALWAYS))
252b5132 11515 {
161a04f6
L
11516 USED_REX (REX_W);
11517 if (rex & REX_W)
52b15da3 11518 *obufp++ = 'q';
c2419411 11519 else
52b15da3
JH
11520 {
11521 if (sizeflag & DFLAG)
11522 *obufp++ = 'l';
11523 else
11524 *obufp++ = 'w';
f16cd0d5 11525 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 11526 }
252b5132
RH
11527 }
11528 break;
6439fc28 11529 case 'U':
db6eb5be
AM
11530 if (intel_syntax)
11531 break;
cb712a9e 11532 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 11533 {
7967e09e 11534 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 11535 *obufp++ = 'q';
6439fc28
AM
11536 break;
11537 }
6608db57 11538 /* Fall through. */
98b528ac 11539 goto case_Q;
252b5132 11540 case 'Q':
98b528ac 11541 if (l == 0 && len == 1)
252b5132 11542 {
98b528ac
L
11543case_Q:
11544 if (intel_syntax && !alt)
11545 break;
11546 USED_REX (REX_W);
11547 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 11548 {
98b528ac
L
11549 if (rex & REX_W)
11550 *obufp++ = 'q';
52b15da3 11551 else
98b528ac
L
11552 {
11553 if (sizeflag & DFLAG)
11554 *obufp++ = intel_syntax ? 'd' : 'l';
11555 else
11556 *obufp++ = 'w';
f16cd0d5 11557 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 11558 }
52b15da3 11559 }
98b528ac
L
11560 }
11561 else
11562 {
11563 if (l != 1 || len != 2 || last[0] != 'L')
11564 {
11565 SAVE_LAST (*p);
11566 break;
11567 }
11568 if (intel_syntax
11569 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
11570 break;
11571 if ((rex & REX_W))
11572 {
11573 USED_REX (REX_W);
11574 *obufp++ = 'q';
11575 }
11576 else
11577 *obufp++ = 'l';
252b5132
RH
11578 }
11579 break;
11580 case 'R':
161a04f6
L
11581 USED_REX (REX_W);
11582 if (rex & REX_W)
a35ca55a
JB
11583 *obufp++ = 'q';
11584 else if (sizeflag & DFLAG)
c608c12e 11585 {
a35ca55a 11586 if (intel_syntax)
c608c12e 11587 *obufp++ = 'd';
c608c12e 11588 else
a35ca55a 11589 *obufp++ = 'l';
c608c12e 11590 }
252b5132 11591 else
a35ca55a
JB
11592 *obufp++ = 'w';
11593 if (intel_syntax && !p[1]
161a04f6 11594 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 11595 *obufp++ = 'e';
161a04f6 11596 if (!(rex & REX_W))
52b15da3 11597 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 11598 break;
1a114b12 11599 case 'V':
4b06377f 11600 if (l == 0 && len == 1)
1a114b12 11601 {
4b06377f
L
11602 if (intel_syntax)
11603 break;
11604 if (address_mode == mode_64bit && (sizeflag & DFLAG))
11605 {
11606 if (sizeflag & SUFFIX_ALWAYS)
11607 *obufp++ = 'q';
11608 break;
11609 }
11610 }
11611 else
11612 {
11613 if (l != 1
11614 || len != 2
11615 || last[0] != 'L')
11616 {
11617 SAVE_LAST (*p);
11618 break;
11619 }
11620
11621 if (rex & REX_W)
11622 {
11623 *obufp++ = 'a';
11624 *obufp++ = 'b';
11625 *obufp++ = 's';
11626 }
1a114b12
JB
11627 }
11628 /* Fall through. */
4b06377f 11629 goto case_S;
252b5132 11630 case 'S':
4b06377f 11631 if (l == 0 && len == 1)
252b5132 11632 {
4b06377f
L
11633case_S:
11634 if (intel_syntax)
11635 break;
11636 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 11637 {
4b06377f
L
11638 if (rex & REX_W)
11639 *obufp++ = 'q';
52b15da3 11640 else
4b06377f
L
11641 {
11642 if (sizeflag & DFLAG)
11643 *obufp++ = 'l';
11644 else
11645 *obufp++ = 'w';
11646 used_prefixes |= (prefixes & PREFIX_DATA);
11647 }
11648 }
11649 }
11650 else
11651 {
11652 if (l != 1
11653 || len != 2
11654 || last[0] != 'L')
11655 {
11656 SAVE_LAST (*p);
11657 break;
52b15da3 11658 }
4b06377f
L
11659
11660 if (address_mode == mode_64bit
11661 && !(prefixes & PREFIX_ADDR))
11662 {
11663 *obufp++ = 'a';
11664 *obufp++ = 'b';
11665 *obufp++ = 's';
11666 }
11667
11668 goto case_S;
252b5132 11669 }
252b5132 11670 break;
041bd2e0 11671 case 'X':
c0f3af97
L
11672 if (l != 0 || len != 1)
11673 {
11674 SAVE_LAST (*p);
11675 break;
11676 }
11677 if (need_vex && vex.prefix)
11678 {
11679 if (vex.prefix == DATA_PREFIX_OPCODE)
11680 *obufp++ = 'd';
11681 else
11682 *obufp++ = 's';
11683 }
041bd2e0 11684 else
f16cd0d5
L
11685 {
11686 if (prefixes & PREFIX_DATA)
11687 *obufp++ = 'd';
11688 else
11689 *obufp++ = 's';
11690 used_prefixes |= (prefixes & PREFIX_DATA);
11691 }
041bd2e0 11692 break;
76f227a5 11693 case 'Y':
c0f3af97 11694 if (l == 0 && len == 1)
76f227a5 11695 {
c0f3af97
L
11696 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
11697 break;
11698 if (rex & REX_W)
11699 {
11700 USED_REX (REX_W);
11701 *obufp++ = 'q';
11702 }
11703 break;
11704 }
11705 else
11706 {
11707 if (l != 1 || len != 2 || last[0] != 'X')
11708 {
11709 SAVE_LAST (*p);
11710 break;
11711 }
11712 if (!need_vex)
11713 abort ();
11714 if (intel_syntax
11715 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
11716 break;
11717 switch (vex.length)
11718 {
11719 case 128:
11720 *obufp++ = 'x';
11721 break;
11722 case 256:
11723 *obufp++ = 'y';
11724 break;
11725 default:
11726 abort ();
11727 }
76f227a5
JH
11728 }
11729 break;
252b5132 11730 case 'W':
0bfee649 11731 if (l == 0 && len == 1)
a35ca55a 11732 {
0bfee649
L
11733 /* operand size flag for cwtl, cbtw */
11734 USED_REX (REX_W);
11735 if (rex & REX_W)
11736 {
11737 if (intel_syntax)
11738 *obufp++ = 'd';
11739 else
11740 *obufp++ = 'l';
11741 }
11742 else if (sizeflag & DFLAG)
11743 *obufp++ = 'w';
a35ca55a 11744 else
0bfee649
L
11745 *obufp++ = 'b';
11746 if (!(rex & REX_W))
11747 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 11748 }
252b5132 11749 else
0bfee649
L
11750 {
11751 if (l != 1 || len != 2 || last[0] != 'X')
11752 {
11753 SAVE_LAST (*p);
11754 break;
11755 }
11756 if (!need_vex)
11757 abort ();
11758 *obufp++ = vex.w ? 'd': 's';
11759 }
252b5132
RH
11760 break;
11761 }
9306ca4a 11762 alt = 0;
252b5132
RH
11763 }
11764 *obufp = 0;
ea397f5b 11765 mnemonicendp = obufp;
6439fc28 11766 return 0;
252b5132
RH
11767}
11768
11769static void
26ca5450 11770oappend (const char *s)
252b5132 11771{
ea397f5b 11772 obufp = stpcpy (obufp, s);
252b5132
RH
11773}
11774
11775static void
26ca5450 11776append_seg (void)
252b5132
RH
11777{
11778 if (prefixes & PREFIX_CS)
7d421014 11779 {
7d421014 11780 used_prefixes |= PREFIX_CS;
d708bcba 11781 oappend ("%cs:" + intel_syntax);
7d421014 11782 }
252b5132 11783 if (prefixes & PREFIX_DS)
7d421014 11784 {
7d421014 11785 used_prefixes |= PREFIX_DS;
d708bcba 11786 oappend ("%ds:" + intel_syntax);
7d421014 11787 }
252b5132 11788 if (prefixes & PREFIX_SS)
7d421014 11789 {
7d421014 11790 used_prefixes |= PREFIX_SS;
d708bcba 11791 oappend ("%ss:" + intel_syntax);
7d421014 11792 }
252b5132 11793 if (prefixes & PREFIX_ES)
7d421014 11794 {
7d421014 11795 used_prefixes |= PREFIX_ES;
d708bcba 11796 oappend ("%es:" + intel_syntax);
7d421014 11797 }
252b5132 11798 if (prefixes & PREFIX_FS)
7d421014 11799 {
7d421014 11800 used_prefixes |= PREFIX_FS;
d708bcba 11801 oappend ("%fs:" + intel_syntax);
7d421014 11802 }
252b5132 11803 if (prefixes & PREFIX_GS)
7d421014 11804 {
7d421014 11805 used_prefixes |= PREFIX_GS;
d708bcba 11806 oappend ("%gs:" + intel_syntax);
7d421014 11807 }
252b5132
RH
11808}
11809
11810static void
26ca5450 11811OP_indirE (int bytemode, int sizeflag)
252b5132
RH
11812{
11813 if (!intel_syntax)
11814 oappend ("*");
11815 OP_E (bytemode, sizeflag);
11816}
11817
52b15da3 11818static void
26ca5450 11819print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 11820{
cb712a9e 11821 if (address_mode == mode_64bit)
52b15da3
JH
11822 {
11823 if (hex)
11824 {
11825 char tmp[30];
11826 int i;
11827 buf[0] = '0';
11828 buf[1] = 'x';
11829 sprintf_vma (tmp, disp);
6608db57 11830 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
11831 strcpy (buf + 2, tmp + i);
11832 }
11833 else
11834 {
11835 bfd_signed_vma v = disp;
11836 char tmp[30];
11837 int i;
11838 if (v < 0)
11839 {
11840 *(buf++) = '-';
11841 v = -disp;
6608db57 11842 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
11843 if (v < 0)
11844 {
11845 strcpy (buf, "9223372036854775808");
11846 return;
11847 }
11848 }
11849 if (!v)
11850 {
11851 strcpy (buf, "0");
11852 return;
11853 }
11854
11855 i = 0;
11856 tmp[29] = 0;
11857 while (v)
11858 {
6608db57 11859 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
11860 v /= 10;
11861 i++;
11862 }
11863 strcpy (buf, tmp + 29 - i);
11864 }
11865 }
11866 else
11867 {
11868 if (hex)
11869 sprintf (buf, "0x%x", (unsigned int) disp);
11870 else
11871 sprintf (buf, "%d", (int) disp);
11872 }
11873}
11874
5d669648
L
11875/* Put DISP in BUF as signed hex number. */
11876
11877static void
11878print_displacement (char *buf, bfd_vma disp)
11879{
11880 bfd_signed_vma val = disp;
11881 char tmp[30];
11882 int i, j = 0;
11883
11884 if (val < 0)
11885 {
11886 buf[j++] = '-';
11887 val = -disp;
11888
11889 /* Check for possible overflow. */
11890 if (val < 0)
11891 {
11892 switch (address_mode)
11893 {
11894 case mode_64bit:
11895 strcpy (buf + j, "0x8000000000000000");
11896 break;
11897 case mode_32bit:
11898 strcpy (buf + j, "0x80000000");
11899 break;
11900 case mode_16bit:
11901 strcpy (buf + j, "0x8000");
11902 break;
11903 }
11904 return;
11905 }
11906 }
11907
11908 buf[j++] = '0';
11909 buf[j++] = 'x';
11910
0af1713e 11911 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
11912 for (i = 0; tmp[i] == '0'; i++)
11913 continue;
11914 if (tmp[i] == '\0')
11915 i--;
11916 strcpy (buf + j, tmp + i);
11917}
11918
3f31e633
JB
11919static void
11920intel_operand_size (int bytemode, int sizeflag)
11921{
11922 switch (bytemode)
11923 {
11924 case b_mode:
b6169b20 11925 case b_swap_mode:
42903f7f 11926 case dqb_mode:
3f31e633
JB
11927 oappend ("BYTE PTR ");
11928 break;
11929 case w_mode:
11930 case dqw_mode:
11931 oappend ("WORD PTR ");
11932 break;
1a114b12 11933 case stack_v_mode:
cb712a9e 11934 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
11935 {
11936 oappend ("QWORD PTR ");
3f31e633
JB
11937 break;
11938 }
11939 /* FALLTHRU */
11940 case v_mode:
b6169b20 11941 case v_swap_mode:
3f31e633 11942 case dq_mode:
161a04f6
L
11943 USED_REX (REX_W);
11944 if (rex & REX_W)
3f31e633 11945 oappend ("QWORD PTR ");
3f31e633 11946 else
f16cd0d5
L
11947 {
11948 if ((sizeflag & DFLAG) || bytemode == dq_mode)
11949 oappend ("DWORD PTR ");
11950 else
11951 oappend ("WORD PTR ");
11952 used_prefixes |= (prefixes & PREFIX_DATA);
11953 }
3f31e633 11954 break;
52fd6d94 11955 case z_mode:
161a04f6 11956 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
11957 *obufp++ = 'D';
11958 oappend ("WORD PTR ");
161a04f6 11959 if (!(rex & REX_W))
52fd6d94
JB
11960 used_prefixes |= (prefixes & PREFIX_DATA);
11961 break;
34b772a6
JB
11962 case a_mode:
11963 if (sizeflag & DFLAG)
11964 oappend ("QWORD PTR ");
11965 else
11966 oappend ("DWORD PTR ");
11967 used_prefixes |= (prefixes & PREFIX_DATA);
11968 break;
3f31e633 11969 case d_mode:
fa99fab2 11970 case d_swap_mode:
42903f7f 11971 case dqd_mode:
3f31e633
JB
11972 oappend ("DWORD PTR ");
11973 break;
11974 case q_mode:
b6169b20 11975 case q_swap_mode:
3f31e633
JB
11976 oappend ("QWORD PTR ");
11977 break;
11978 case m_mode:
cb712a9e 11979 if (address_mode == mode_64bit)
3f31e633
JB
11980 oappend ("QWORD PTR ");
11981 else
11982 oappend ("DWORD PTR ");
11983 break;
11984 case f_mode:
11985 if (sizeflag & DFLAG)
11986 oappend ("FWORD PTR ");
11987 else
11988 oappend ("DWORD PTR ");
11989 used_prefixes |= (prefixes & PREFIX_DATA);
11990 break;
11991 case t_mode:
11992 oappend ("TBYTE PTR ");
11993 break;
11994 case x_mode:
b6169b20 11995 case x_swap_mode:
c0f3af97
L
11996 if (need_vex)
11997 {
11998 switch (vex.length)
11999 {
12000 case 128:
12001 oappend ("XMMWORD PTR ");
12002 break;
12003 case 256:
12004 oappend ("YMMWORD PTR ");
12005 break;
12006 default:
12007 abort ();
12008 }
12009 }
12010 else
12011 oappend ("XMMWORD PTR ");
12012 break;
12013 case xmm_mode:
3f31e633
JB
12014 oappend ("XMMWORD PTR ");
12015 break;
c0f3af97
L
12016 case xmmq_mode:
12017 if (!need_vex)
12018 abort ();
12019
12020 switch (vex.length)
12021 {
12022 case 128:
12023 oappend ("QWORD PTR ");
12024 break;
12025 case 256:
12026 oappend ("XMMWORD PTR ");
12027 break;
12028 default:
12029 abort ();
12030 }
12031 break;
12032 case ymmq_mode:
12033 if (!need_vex)
12034 abort ();
12035
12036 switch (vex.length)
12037 {
12038 case 128:
12039 oappend ("QWORD PTR ");
12040 break;
12041 case 256:
12042 oappend ("YMMWORD PTR ");
12043 break;
12044 default:
12045 abort ();
12046 }
12047 break;
fb9c77c7
L
12048 case o_mode:
12049 oappend ("OWORD PTR ");
12050 break;
0bfee649
L
12051 case vex_w_dq_mode:
12052 if (!need_vex)
12053 abort ();
12054
12055 if (vex.w)
12056 oappend ("QWORD PTR ");
12057 else
12058 oappend ("DWORD PTR ");
12059 break;
3f31e633
JB
12060 default:
12061 break;
12062 }
12063}
12064
252b5132 12065static void
c0f3af97 12066OP_E_register (int bytemode, int sizeflag)
252b5132 12067{
c0f3af97
L
12068 int reg = modrm.rm;
12069 const char **names;
252b5132 12070
c0f3af97
L
12071 USED_REX (REX_B);
12072 if ((rex & REX_B))
12073 reg += 8;
252b5132 12074
b6169b20
L
12075 if ((sizeflag & SUFFIX_ALWAYS)
12076 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
12077 swap_operand ();
12078
c0f3af97 12079 switch (bytemode)
252b5132 12080 {
c0f3af97 12081 case b_mode:
b6169b20 12082 case b_swap_mode:
c0f3af97
L
12083 USED_REX (0);
12084 if (rex)
12085 names = names8rex;
12086 else
12087 names = names8;
12088 break;
12089 case w_mode:
12090 names = names16;
12091 break;
12092 case d_mode:
12093 names = names32;
12094 break;
12095 case q_mode:
12096 names = names64;
12097 break;
12098 case m_mode:
12099 names = address_mode == mode_64bit ? names64 : names32;
12100 break;
12101 case stack_v_mode:
12102 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 12103 {
c0f3af97 12104 names = names64;
252b5132 12105 break;
252b5132 12106 }
c0f3af97
L
12107 bytemode = v_mode;
12108 /* FALLTHRU */
12109 case v_mode:
b6169b20 12110 case v_swap_mode:
c0f3af97
L
12111 case dq_mode:
12112 case dqb_mode:
12113 case dqd_mode:
12114 case dqw_mode:
12115 USED_REX (REX_W);
12116 if (rex & REX_W)
12117 names = names64;
c0f3af97 12118 else
f16cd0d5
L
12119 {
12120 if ((sizeflag & DFLAG)
12121 || (bytemode != v_mode
12122 && bytemode != v_swap_mode))
12123 names = names32;
12124 else
12125 names = names16;
12126 used_prefixes |= (prefixes & PREFIX_DATA);
12127 }
c0f3af97
L
12128 break;
12129 case 0:
12130 return;
12131 default:
12132 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
12133 return;
12134 }
c0f3af97
L
12135 oappend (names[reg]);
12136}
12137
12138static void
c1e679ec 12139OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
12140{
12141 bfd_vma disp = 0;
12142 int add = (rex & REX_B) ? 8 : 0;
12143 int riprel = 0;
252b5132 12144
c0f3af97 12145 USED_REX (REX_B);
3f31e633
JB
12146 if (intel_syntax)
12147 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12148 append_seg ();
12149
5d669648 12150 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 12151 {
5d669648
L
12152 /* 32/64 bit address mode */
12153 int havedisp;
252b5132
RH
12154 int havesib;
12155 int havebase;
0f7da397 12156 int haveindex;
20afcfb7 12157 int needindex;
82c18208 12158 int base, rbase;
252b5132
RH
12159 int index = 0;
12160 int scale = 0;
12161
12162 havesib = 0;
12163 havebase = 1;
0f7da397 12164 haveindex = 0;
7967e09e 12165 base = modrm.rm;
252b5132
RH
12166
12167 if (base == 4)
12168 {
12169 havesib = 1;
12170 FETCH_DATA (the_info, codep + 1);
252b5132 12171 index = (*codep >> 3) & 7;
db51cc60 12172 scale = (*codep >> 6) & 3;
252b5132 12173 base = *codep & 7;
161a04f6
L
12174 USED_REX (REX_X);
12175 if (rex & REX_X)
52b15da3 12176 index += 8;
0f7da397 12177 haveindex = index != 4;
252b5132
RH
12178 codep++;
12179 }
82c18208 12180 rbase = base + add;
252b5132 12181
7967e09e 12182 switch (modrm.mod)
252b5132
RH
12183 {
12184 case 0:
82c18208 12185 if (base == 5)
252b5132
RH
12186 {
12187 havebase = 0;
cb712a9e 12188 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
12189 riprel = 1;
12190 disp = get32s ();
252b5132
RH
12191 }
12192 break;
12193 case 1:
12194 FETCH_DATA (the_info, codep + 1);
12195 disp = *codep++;
12196 if ((disp & 0x80) != 0)
12197 disp -= 0x100;
12198 break;
12199 case 2:
52b15da3 12200 disp = get32s ();
252b5132
RH
12201 break;
12202 }
12203
20afcfb7
L
12204 /* In 32bit mode, we need index register to tell [offset] from
12205 [eiz*1 + offset]. */
12206 needindex = (havesib
12207 && !havebase
12208 && !haveindex
12209 && address_mode == mode_32bit);
12210 havedisp = (havebase
12211 || needindex
12212 || (havesib && (haveindex || scale != 0)));
5d669648 12213
252b5132 12214 if (!intel_syntax)
82c18208 12215 if (modrm.mod != 0 || base == 5)
db6eb5be 12216 {
5d669648
L
12217 if (havedisp || riprel)
12218 print_displacement (scratchbuf, disp);
12219 else
12220 print_operand_value (scratchbuf, 1, disp);
db6eb5be 12221 oappend (scratchbuf);
52b15da3
JH
12222 if (riprel)
12223 {
12224 set_op (disp, 1);
87767711 12225 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 12226 }
db6eb5be 12227 }
2da11e11 12228
87767711
JB
12229 if (havebase || haveindex || riprel)
12230 used_prefixes |= PREFIX_ADDR;
12231
5d669648 12232 if (havedisp || (intel_syntax && riprel))
252b5132 12233 {
252b5132 12234 *obufp++ = open_char;
52b15da3 12235 if (intel_syntax && riprel)
185b1163
L
12236 {
12237 set_op (disp, 1);
87767711 12238 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 12239 }
db6eb5be 12240 *obufp = '\0';
252b5132 12241 if (havebase)
cb712a9e 12242 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 12243 ? names64[rbase] : names32[rbase]);
252b5132
RH
12244 if (havesib)
12245 {
db51cc60
L
12246 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
12247 print index to tell base + index from base. */
12248 if (scale != 0
20afcfb7 12249 || needindex
db51cc60
L
12250 || haveindex
12251 || (havebase && base != ESP_REG_NUM))
252b5132 12252 {
9306ca4a 12253 if (!intel_syntax || havebase)
db6eb5be 12254 {
9306ca4a
JB
12255 *obufp++ = separator_char;
12256 *obufp = '\0';
db6eb5be 12257 }
db51cc60
L
12258 if (haveindex)
12259 oappend (address_mode == mode_64bit
12260 && (sizeflag & AFLAG)
12261 ? names64[index] : names32[index]);
12262 else
12263 oappend (address_mode == mode_64bit
12264 && (sizeflag & AFLAG)
12265 ? index64 : index32);
12266
db6eb5be
AM
12267 *obufp++ = scale_char;
12268 *obufp = '\0';
12269 sprintf (scratchbuf, "%d", 1 << scale);
12270 oappend (scratchbuf);
12271 }
252b5132 12272 }
185b1163 12273 if (intel_syntax
82c18208 12274 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 12275 {
db51cc60 12276 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
12277 {
12278 *obufp++ = '+';
12279 *obufp = '\0';
12280 }
05203043 12281 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
12282 {
12283 *obufp++ = '-';
12284 *obufp = '\0';
12285 disp = - (bfd_signed_vma) disp;
12286 }
12287
db51cc60
L
12288 if (havedisp)
12289 print_displacement (scratchbuf, disp);
12290 else
12291 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
12292 oappend (scratchbuf);
12293 }
252b5132
RH
12294
12295 *obufp++ = close_char;
db6eb5be 12296 *obufp = '\0';
252b5132
RH
12297 }
12298 else if (intel_syntax)
db6eb5be 12299 {
82c18208 12300 if (modrm.mod != 0 || base == 5)
db6eb5be 12301 {
252b5132
RH
12302 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
12303 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
12304 ;
12305 else
12306 {
d708bcba 12307 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
12308 oappend (":");
12309 }
52b15da3 12310 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
12311 oappend (scratchbuf);
12312 }
12313 }
252b5132
RH
12314 }
12315 else
f16cd0d5
L
12316 {
12317 /* 16 bit address mode */
12318 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 12319 switch (modrm.mod)
252b5132
RH
12320 {
12321 case 0:
7967e09e 12322 if (modrm.rm == 6)
252b5132
RH
12323 {
12324 disp = get16 ();
12325 if ((disp & 0x8000) != 0)
12326 disp -= 0x10000;
12327 }
12328 break;
12329 case 1:
12330 FETCH_DATA (the_info, codep + 1);
12331 disp = *codep++;
12332 if ((disp & 0x80) != 0)
12333 disp -= 0x100;
12334 break;
12335 case 2:
12336 disp = get16 ();
12337 if ((disp & 0x8000) != 0)
12338 disp -= 0x10000;
12339 break;
12340 }
12341
12342 if (!intel_syntax)
7967e09e 12343 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 12344 {
5d669648 12345 print_displacement (scratchbuf, disp);
db6eb5be
AM
12346 oappend (scratchbuf);
12347 }
252b5132 12348
7967e09e 12349 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
12350 {
12351 *obufp++ = open_char;
db6eb5be 12352 *obufp = '\0';
7967e09e 12353 oappend (index16[modrm.rm]);
5d669648
L
12354 if (intel_syntax
12355 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 12356 {
5d669648 12357 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
12358 {
12359 *obufp++ = '+';
12360 *obufp = '\0';
12361 }
7967e09e 12362 else if (modrm.mod != 1)
3d456fa1
JB
12363 {
12364 *obufp++ = '-';
12365 *obufp = '\0';
12366 disp = - (bfd_signed_vma) disp;
12367 }
12368
5d669648 12369 print_displacement (scratchbuf, disp);
3d456fa1
JB
12370 oappend (scratchbuf);
12371 }
12372
db6eb5be
AM
12373 *obufp++ = close_char;
12374 *obufp = '\0';
252b5132 12375 }
3d456fa1
JB
12376 else if (intel_syntax)
12377 {
12378 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
12379 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
12380 ;
12381 else
12382 {
12383 oappend (names_seg[ds_reg - es_reg]);
12384 oappend (":");
12385 }
12386 print_operand_value (scratchbuf, 1, disp & 0xffff);
12387 oappend (scratchbuf);
12388 }
252b5132
RH
12389 }
12390}
12391
c0f3af97 12392static void
8b3f93e7 12393OP_E (int bytemode, int sizeflag)
c0f3af97
L
12394{
12395 /* Skip mod/rm byte. */
12396 MODRM_CHECK;
12397 codep++;
12398
12399 if (modrm.mod == 3)
12400 OP_E_register (bytemode, sizeflag);
12401 else
c1e679ec 12402 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
12403}
12404
252b5132 12405static void
26ca5450 12406OP_G (int bytemode, int sizeflag)
252b5132 12407{
52b15da3 12408 int add = 0;
161a04f6
L
12409 USED_REX (REX_R);
12410 if (rex & REX_R)
52b15da3 12411 add += 8;
252b5132
RH
12412 switch (bytemode)
12413 {
12414 case b_mode:
52b15da3
JH
12415 USED_REX (0);
12416 if (rex)
7967e09e 12417 oappend (names8rex[modrm.reg + add]);
52b15da3 12418 else
7967e09e 12419 oappend (names8[modrm.reg + add]);
252b5132
RH
12420 break;
12421 case w_mode:
7967e09e 12422 oappend (names16[modrm.reg + add]);
252b5132
RH
12423 break;
12424 case d_mode:
7967e09e 12425 oappend (names32[modrm.reg + add]);
52b15da3
JH
12426 break;
12427 case q_mode:
7967e09e 12428 oappend (names64[modrm.reg + add]);
252b5132
RH
12429 break;
12430 case v_mode:
9306ca4a 12431 case dq_mode:
42903f7f
L
12432 case dqb_mode:
12433 case dqd_mode:
9306ca4a 12434 case dqw_mode:
161a04f6
L
12435 USED_REX (REX_W);
12436 if (rex & REX_W)
7967e09e 12437 oappend (names64[modrm.reg + add]);
252b5132 12438 else
f16cd0d5
L
12439 {
12440 if ((sizeflag & DFLAG) || bytemode != v_mode)
12441 oappend (names32[modrm.reg + add]);
12442 else
12443 oappend (names16[modrm.reg + add]);
12444 used_prefixes |= (prefixes & PREFIX_DATA);
12445 }
252b5132 12446 break;
90700ea2 12447 case m_mode:
cb712a9e 12448 if (address_mode == mode_64bit)
7967e09e 12449 oappend (names64[modrm.reg + add]);
90700ea2 12450 else
7967e09e 12451 oappend (names32[modrm.reg + add]);
90700ea2 12452 break;
252b5132
RH
12453 default:
12454 oappend (INTERNAL_DISASSEMBLER_ERROR);
12455 break;
12456 }
12457}
12458
52b15da3 12459static bfd_vma
26ca5450 12460get64 (void)
52b15da3 12461{
5dd0794d 12462 bfd_vma x;
52b15da3 12463#ifdef BFD64
5dd0794d
AM
12464 unsigned int a;
12465 unsigned int b;
12466
52b15da3
JH
12467 FETCH_DATA (the_info, codep + 8);
12468 a = *codep++ & 0xff;
12469 a |= (*codep++ & 0xff) << 8;
12470 a |= (*codep++ & 0xff) << 16;
12471 a |= (*codep++ & 0xff) << 24;
5dd0794d 12472 b = *codep++ & 0xff;
52b15da3
JH
12473 b |= (*codep++ & 0xff) << 8;
12474 b |= (*codep++ & 0xff) << 16;
12475 b |= (*codep++ & 0xff) << 24;
12476 x = a + ((bfd_vma) b << 32);
12477#else
6608db57 12478 abort ();
5dd0794d 12479 x = 0;
52b15da3
JH
12480#endif
12481 return x;
12482}
12483
12484static bfd_signed_vma
26ca5450 12485get32 (void)
252b5132 12486{
52b15da3 12487 bfd_signed_vma x = 0;
252b5132
RH
12488
12489 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
12490 x = *codep++ & (bfd_signed_vma) 0xff;
12491 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
12492 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
12493 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
12494 return x;
12495}
12496
12497static bfd_signed_vma
26ca5450 12498get32s (void)
52b15da3
JH
12499{
12500 bfd_signed_vma x = 0;
12501
12502 FETCH_DATA (the_info, codep + 4);
12503 x = *codep++ & (bfd_signed_vma) 0xff;
12504 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
12505 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
12506 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
12507
12508 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
12509
252b5132
RH
12510 return x;
12511}
12512
12513static int
26ca5450 12514get16 (void)
252b5132
RH
12515{
12516 int x = 0;
12517
12518 FETCH_DATA (the_info, codep + 2);
12519 x = *codep++ & 0xff;
12520 x |= (*codep++ & 0xff) << 8;
12521 return x;
12522}
12523
12524static void
26ca5450 12525set_op (bfd_vma op, int riprel)
252b5132
RH
12526{
12527 op_index[op_ad] = op_ad;
cb712a9e 12528 if (address_mode == mode_64bit)
7081ff04
AJ
12529 {
12530 op_address[op_ad] = op;
12531 op_riprel[op_ad] = riprel;
12532 }
12533 else
12534 {
12535 /* Mask to get a 32-bit address. */
12536 op_address[op_ad] = op & 0xffffffff;
12537 op_riprel[op_ad] = riprel & 0xffffffff;
12538 }
252b5132
RH
12539}
12540
12541static void
26ca5450 12542OP_REG (int code, int sizeflag)
252b5132 12543{
2da11e11 12544 const char *s;
9b60702d 12545 int add;
161a04f6
L
12546 USED_REX (REX_B);
12547 if (rex & REX_B)
52b15da3 12548 add = 8;
9b60702d
L
12549 else
12550 add = 0;
52b15da3
JH
12551
12552 switch (code)
12553 {
52b15da3
JH
12554 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
12555 case sp_reg: case bp_reg: case si_reg: case di_reg:
12556 s = names16[code - ax_reg + add];
12557 break;
12558 case es_reg: case ss_reg: case cs_reg:
12559 case ds_reg: case fs_reg: case gs_reg:
12560 s = names_seg[code - es_reg + add];
12561 break;
12562 case al_reg: case ah_reg: case cl_reg: case ch_reg:
12563 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
12564 USED_REX (0);
12565 if (rex)
12566 s = names8rex[code - al_reg + add];
12567 else
12568 s = names8[code - al_reg];
12569 break;
6439fc28
AM
12570 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
12571 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 12572 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
12573 {
12574 s = names64[code - rAX_reg + add];
12575 break;
12576 }
12577 code += eAX_reg - rAX_reg;
6608db57 12578 /* Fall through. */
52b15da3
JH
12579 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
12580 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
12581 USED_REX (REX_W);
12582 if (rex & REX_W)
52b15da3 12583 s = names64[code - eAX_reg + add];
52b15da3 12584 else
f16cd0d5
L
12585 {
12586 if (sizeflag & DFLAG)
12587 s = names32[code - eAX_reg + add];
12588 else
12589 s = names16[code - eAX_reg + add];
12590 used_prefixes |= (prefixes & PREFIX_DATA);
12591 }
52b15da3 12592 break;
52b15da3
JH
12593 default:
12594 s = INTERNAL_DISASSEMBLER_ERROR;
12595 break;
12596 }
12597 oappend (s);
12598}
12599
12600static void
26ca5450 12601OP_IMREG (int code, int sizeflag)
52b15da3
JH
12602{
12603 const char *s;
252b5132
RH
12604
12605 switch (code)
12606 {
12607 case indir_dx_reg:
d708bcba 12608 if (intel_syntax)
52fd6d94 12609 s = "dx";
d708bcba 12610 else
db6eb5be 12611 s = "(%dx)";
252b5132
RH
12612 break;
12613 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
12614 case sp_reg: case bp_reg: case si_reg: case di_reg:
12615 s = names16[code - ax_reg];
12616 break;
12617 case es_reg: case ss_reg: case cs_reg:
12618 case ds_reg: case fs_reg: case gs_reg:
12619 s = names_seg[code - es_reg];
12620 break;
12621 case al_reg: case ah_reg: case cl_reg: case ch_reg:
12622 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
12623 USED_REX (0);
12624 if (rex)
12625 s = names8rex[code - al_reg];
12626 else
12627 s = names8[code - al_reg];
252b5132
RH
12628 break;
12629 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
12630 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
12631 USED_REX (REX_W);
12632 if (rex & REX_W)
52b15da3 12633 s = names64[code - eAX_reg];
252b5132 12634 else
f16cd0d5
L
12635 {
12636 if (sizeflag & DFLAG)
12637 s = names32[code - eAX_reg];
12638 else
12639 s = names16[code - eAX_reg];
12640 used_prefixes |= (prefixes & PREFIX_DATA);
12641 }
252b5132 12642 break;
52fd6d94 12643 case z_mode_ax_reg:
161a04f6 12644 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12645 s = *names32;
12646 else
12647 s = *names16;
161a04f6 12648 if (!(rex & REX_W))
52fd6d94
JB
12649 used_prefixes |= (prefixes & PREFIX_DATA);
12650 break;
252b5132
RH
12651 default:
12652 s = INTERNAL_DISASSEMBLER_ERROR;
12653 break;
12654 }
12655 oappend (s);
12656}
12657
12658static void
26ca5450 12659OP_I (int bytemode, int sizeflag)
252b5132 12660{
52b15da3
JH
12661 bfd_signed_vma op;
12662 bfd_signed_vma mask = -1;
252b5132
RH
12663
12664 switch (bytemode)
12665 {
12666 case b_mode:
12667 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
12668 op = *codep++;
12669 mask = 0xff;
12670 break;
12671 case q_mode:
cb712a9e 12672 if (address_mode == mode_64bit)
6439fc28
AM
12673 {
12674 op = get32s ();
12675 break;
12676 }
6608db57 12677 /* Fall through. */
252b5132 12678 case v_mode:
161a04f6
L
12679 USED_REX (REX_W);
12680 if (rex & REX_W)
52b15da3 12681 op = get32s ();
252b5132 12682 else
52b15da3 12683 {
f16cd0d5
L
12684 if (sizeflag & DFLAG)
12685 {
12686 op = get32 ();
12687 mask = 0xffffffff;
12688 }
12689 else
12690 {
12691 op = get16 ();
12692 mask = 0xfffff;
12693 }
12694 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12695 }
252b5132
RH
12696 break;
12697 case w_mode:
52b15da3 12698 mask = 0xfffff;
252b5132
RH
12699 op = get16 ();
12700 break;
9306ca4a
JB
12701 case const_1_mode:
12702 if (intel_syntax)
12703 oappend ("1");
12704 return;
252b5132
RH
12705 default:
12706 oappend (INTERNAL_DISASSEMBLER_ERROR);
12707 return;
12708 }
12709
52b15da3
JH
12710 op &= mask;
12711 scratchbuf[0] = '$';
d708bcba
AM
12712 print_operand_value (scratchbuf + 1, 1, op);
12713 oappend (scratchbuf + intel_syntax);
52b15da3
JH
12714 scratchbuf[0] = '\0';
12715}
12716
12717static void
26ca5450 12718OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
12719{
12720 bfd_signed_vma op;
12721 bfd_signed_vma mask = -1;
12722
cb712a9e 12723 if (address_mode != mode_64bit)
6439fc28
AM
12724 {
12725 OP_I (bytemode, sizeflag);
12726 return;
12727 }
12728
52b15da3
JH
12729 switch (bytemode)
12730 {
12731 case b_mode:
12732 FETCH_DATA (the_info, codep + 1);
12733 op = *codep++;
12734 mask = 0xff;
12735 break;
12736 case v_mode:
161a04f6
L
12737 USED_REX (REX_W);
12738 if (rex & REX_W)
52b15da3 12739 op = get64 ();
52b15da3
JH
12740 else
12741 {
f16cd0d5
L
12742 if (sizeflag & DFLAG)
12743 {
12744 op = get32 ();
12745 mask = 0xffffffff;
12746 }
12747 else
12748 {
12749 op = get16 ();
12750 mask = 0xfffff;
12751 }
12752 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12753 }
52b15da3
JH
12754 break;
12755 case w_mode:
12756 mask = 0xfffff;
12757 op = get16 ();
12758 break;
12759 default:
12760 oappend (INTERNAL_DISASSEMBLER_ERROR);
12761 return;
12762 }
12763
12764 op &= mask;
12765 scratchbuf[0] = '$';
d708bcba
AM
12766 print_operand_value (scratchbuf + 1, 1, op);
12767 oappend (scratchbuf + intel_syntax);
252b5132
RH
12768 scratchbuf[0] = '\0';
12769}
12770
12771static void
26ca5450 12772OP_sI (int bytemode, int sizeflag)
252b5132 12773{
52b15da3
JH
12774 bfd_signed_vma op;
12775 bfd_signed_vma mask = -1;
252b5132
RH
12776
12777 switch (bytemode)
12778 {
12779 case b_mode:
12780 FETCH_DATA (the_info, codep + 1);
12781 op = *codep++;
12782 if ((op & 0x80) != 0)
12783 op -= 0x100;
52b15da3 12784 mask = 0xffffffff;
252b5132
RH
12785 break;
12786 case v_mode:
161a04f6
L
12787 USED_REX (REX_W);
12788 if (rex & REX_W)
52b15da3 12789 op = get32s ();
252b5132
RH
12790 else
12791 {
f16cd0d5
L
12792 if (sizeflag & DFLAG)
12793 {
12794 op = get32s ();
12795 mask = 0xffffffff;
12796 }
12797 else
12798 {
12799 mask = 0xffffffff;
12800 op = get16 ();
12801 if ((op & 0x8000) != 0)
12802 op -= 0x10000;
12803 }
12804 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
12805 }
12806 break;
12807 case w_mode:
12808 op = get16 ();
52b15da3 12809 mask = 0xffffffff;
252b5132
RH
12810 if ((op & 0x8000) != 0)
12811 op -= 0x10000;
12812 break;
12813 default:
12814 oappend (INTERNAL_DISASSEMBLER_ERROR);
12815 return;
12816 }
52b15da3
JH
12817
12818 scratchbuf[0] = '$';
12819 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 12820 oappend (scratchbuf + intel_syntax);
252b5132
RH
12821}
12822
12823static void
26ca5450 12824OP_J (int bytemode, int sizeflag)
252b5132 12825{
52b15da3 12826 bfd_vma disp;
7081ff04 12827 bfd_vma mask = -1;
65ca155d 12828 bfd_vma segment = 0;
252b5132
RH
12829
12830 switch (bytemode)
12831 {
12832 case b_mode:
12833 FETCH_DATA (the_info, codep + 1);
12834 disp = *codep++;
12835 if ((disp & 0x80) != 0)
12836 disp -= 0x100;
12837 break;
12838 case v_mode:
f16cd0d5 12839 USED_REX (REX_W);
161a04f6 12840 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 12841 disp = get32s ();
252b5132
RH
12842 else
12843 {
12844 disp = get16 ();
206717e8
L
12845 if ((disp & 0x8000) != 0)
12846 disp -= 0x10000;
65ca155d
L
12847 /* In 16bit mode, address is wrapped around at 64k within
12848 the same segment. Otherwise, a data16 prefix on a jump
12849 instruction means that the pc is masked to 16 bits after
12850 the displacement is added! */
12851 mask = 0xffff;
12852 if ((prefixes & PREFIX_DATA) == 0)
12853 segment = ((start_pc + codep - start_codep)
12854 & ~((bfd_vma) 0xffff));
252b5132 12855 }
f16cd0d5
L
12856 if (!(rex & REX_W))
12857 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
12858 break;
12859 default:
12860 oappend (INTERNAL_DISASSEMBLER_ERROR);
12861 return;
12862 }
65ca155d 12863 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
12864 set_op (disp, 0);
12865 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
12866 oappend (scratchbuf);
12867}
12868
252b5132 12869static void
ed7841b3 12870OP_SEG (int bytemode, int sizeflag)
252b5132 12871{
ed7841b3 12872 if (bytemode == w_mode)
7967e09e 12873 oappend (names_seg[modrm.reg]);
ed7841b3 12874 else
7967e09e 12875 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
12876}
12877
12878static void
26ca5450 12879OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
12880{
12881 int seg, offset;
12882
c608c12e 12883 if (sizeflag & DFLAG)
252b5132 12884 {
c608c12e
AM
12885 offset = get32 ();
12886 seg = get16 ();
252b5132 12887 }
c608c12e
AM
12888 else
12889 {
12890 offset = get16 ();
12891 seg = get16 ();
12892 }
7d421014 12893 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 12894 if (intel_syntax)
3f31e633 12895 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
12896 else
12897 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 12898 oappend (scratchbuf);
252b5132
RH
12899}
12900
252b5132 12901static void
3f31e633 12902OP_OFF (int bytemode, int sizeflag)
252b5132 12903{
52b15da3 12904 bfd_vma off;
252b5132 12905
3f31e633
JB
12906 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
12907 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12908 append_seg ();
12909
cb712a9e 12910 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
12911 off = get32 ();
12912 else
12913 off = get16 ();
12914
12915 if (intel_syntax)
12916 {
12917 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 12918 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 12919 {
d708bcba 12920 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
12921 oappend (":");
12922 }
12923 }
52b15da3
JH
12924 print_operand_value (scratchbuf, 1, off);
12925 oappend (scratchbuf);
12926}
6439fc28 12927
52b15da3 12928static void
3f31e633 12929OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
12930{
12931 bfd_vma off;
12932
539e75ad
L
12933 if (address_mode != mode_64bit
12934 || (prefixes & PREFIX_ADDR))
6439fc28
AM
12935 {
12936 OP_OFF (bytemode, sizeflag);
12937 return;
12938 }
12939
3f31e633
JB
12940 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
12941 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
12942 append_seg ();
12943
6608db57 12944 off = get64 ();
52b15da3
JH
12945
12946 if (intel_syntax)
12947 {
12948 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 12949 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 12950 {
d708bcba 12951 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
12952 oappend (":");
12953 }
12954 }
12955 print_operand_value (scratchbuf, 1, off);
252b5132
RH
12956 oappend (scratchbuf);
12957}
12958
12959static void
26ca5450 12960ptr_reg (int code, int sizeflag)
252b5132 12961{
2da11e11 12962 const char *s;
d708bcba 12963
1d9f512f 12964 *obufp++ = open_char;
20f0a1fc 12965 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 12966 if (address_mode == mode_64bit)
c1a64871
JH
12967 {
12968 if (!(sizeflag & AFLAG))
db6eb5be 12969 s = names32[code - eAX_reg];
c1a64871 12970 else
db6eb5be 12971 s = names64[code - eAX_reg];
c1a64871 12972 }
52b15da3 12973 else if (sizeflag & AFLAG)
252b5132
RH
12974 s = names32[code - eAX_reg];
12975 else
12976 s = names16[code - eAX_reg];
12977 oappend (s);
1d9f512f
AM
12978 *obufp++ = close_char;
12979 *obufp = 0;
252b5132
RH
12980}
12981
12982static void
26ca5450 12983OP_ESreg (int code, int sizeflag)
252b5132 12984{
9306ca4a 12985 if (intel_syntax)
52fd6d94
JB
12986 {
12987 switch (codep[-1])
12988 {
12989 case 0x6d: /* insw/insl */
12990 intel_operand_size (z_mode, sizeflag);
12991 break;
12992 case 0xa5: /* movsw/movsl/movsq */
12993 case 0xa7: /* cmpsw/cmpsl/cmpsq */
12994 case 0xab: /* stosw/stosl */
12995 case 0xaf: /* scasw/scasl */
12996 intel_operand_size (v_mode, sizeflag);
12997 break;
12998 default:
12999 intel_operand_size (b_mode, sizeflag);
13000 }
13001 }
d708bcba 13002 oappend ("%es:" + intel_syntax);
252b5132
RH
13003 ptr_reg (code, sizeflag);
13004}
13005
13006static void
26ca5450 13007OP_DSreg (int code, int sizeflag)
252b5132 13008{
9306ca4a 13009 if (intel_syntax)
52fd6d94
JB
13010 {
13011 switch (codep[-1])
13012 {
13013 case 0x6f: /* outsw/outsl */
13014 intel_operand_size (z_mode, sizeflag);
13015 break;
13016 case 0xa5: /* movsw/movsl/movsq */
13017 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13018 case 0xad: /* lodsw/lodsl/lodsq */
13019 intel_operand_size (v_mode, sizeflag);
13020 break;
13021 default:
13022 intel_operand_size (b_mode, sizeflag);
13023 }
13024 }
252b5132
RH
13025 if ((prefixes
13026 & (PREFIX_CS
13027 | PREFIX_DS
13028 | PREFIX_SS
13029 | PREFIX_ES
13030 | PREFIX_FS
13031 | PREFIX_GS)) == 0)
13032 prefixes |= PREFIX_DS;
6608db57 13033 append_seg ();
252b5132
RH
13034 ptr_reg (code, sizeflag);
13035}
13036
252b5132 13037static void
26ca5450 13038OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13039{
9b60702d 13040 int add;
161a04f6 13041 if (rex & REX_R)
c4a530c5 13042 {
161a04f6 13043 USED_REX (REX_R);
c4a530c5
JB
13044 add = 8;
13045 }
cb712a9e 13046 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 13047 {
f16cd0d5 13048 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
13049 used_prefixes |= PREFIX_LOCK;
13050 add = 8;
13051 }
9b60702d
L
13052 else
13053 add = 0;
7967e09e 13054 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 13055 oappend (scratchbuf + intel_syntax);
252b5132
RH
13056}
13057
252b5132 13058static void
26ca5450 13059OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13060{
9b60702d 13061 int add;
161a04f6
L
13062 USED_REX (REX_R);
13063 if (rex & REX_R)
52b15da3 13064 add = 8;
9b60702d
L
13065 else
13066 add = 0;
d708bcba 13067 if (intel_syntax)
7967e09e 13068 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 13069 else
7967e09e 13070 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
13071 oappend (scratchbuf);
13072}
13073
252b5132 13074static void
26ca5450 13075OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13076{
7967e09e 13077 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 13078 oappend (scratchbuf + intel_syntax);
252b5132
RH
13079}
13080
13081static void
6f74c397 13082OP_R (int bytemode, int sizeflag)
252b5132 13083{
7967e09e 13084 if (modrm.mod == 3)
2da11e11
AM
13085 OP_E (bytemode, sizeflag);
13086 else
6608db57 13087 BadOp ();
252b5132
RH
13088}
13089
13090static void
26ca5450 13091OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13092{
041bd2e0
JH
13093 used_prefixes |= (prefixes & PREFIX_DATA);
13094 if (prefixes & PREFIX_DATA)
20f0a1fc 13095 {
9b60702d 13096 int add;
161a04f6
L
13097 USED_REX (REX_R);
13098 if (rex & REX_R)
20f0a1fc 13099 add = 8;
9b60702d
L
13100 else
13101 add = 0;
7967e09e 13102 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
20f0a1fc 13103 }
041bd2e0 13104 else
7967e09e 13105 sprintf (scratchbuf, "%%mm%d", modrm.reg);
d708bcba 13106 oappend (scratchbuf + intel_syntax);
252b5132
RH
13107}
13108
c608c12e 13109static void
c0f3af97 13110OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 13111{
9b60702d 13112 int add;
161a04f6
L
13113 USED_REX (REX_R);
13114 if (rex & REX_R)
041bd2e0 13115 add = 8;
9b60702d
L
13116 else
13117 add = 0;
c0f3af97
L
13118 if (need_vex && bytemode != xmm_mode)
13119 {
13120 switch (vex.length)
13121 {
13122 case 128:
13123 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
13124 break;
13125 case 256:
13126 sprintf (scratchbuf, "%%ymm%d", modrm.reg + add);
13127 break;
13128 default:
13129 abort ();
13130 }
13131 }
13132 else
13133 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
d708bcba 13134 oappend (scratchbuf + intel_syntax);
c608c12e
AM
13135}
13136
252b5132 13137static void
26ca5450 13138OP_EM (int bytemode, int sizeflag)
252b5132 13139{
7967e09e 13140 if (modrm.mod != 3)
252b5132 13141 {
b6169b20
L
13142 if (intel_syntax
13143 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
13144 {
13145 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13146 used_prefixes |= (prefixes & PREFIX_DATA);
13147 }
252b5132
RH
13148 OP_E (bytemode, sizeflag);
13149 return;
13150 }
13151
b6169b20
L
13152 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
13153 swap_operand ();
13154
6608db57 13155 /* Skip mod/rm byte. */
4bba6815 13156 MODRM_CHECK;
252b5132 13157 codep++;
041bd2e0
JH
13158 used_prefixes |= (prefixes & PREFIX_DATA);
13159 if (prefixes & PREFIX_DATA)
20f0a1fc 13160 {
9b60702d 13161 int add;
20f0a1fc 13162
161a04f6
L
13163 USED_REX (REX_B);
13164 if (rex & REX_B)
20f0a1fc 13165 add = 8;
9b60702d
L
13166 else
13167 add = 0;
7967e09e 13168 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
20f0a1fc 13169 }
041bd2e0 13170 else
7967e09e 13171 sprintf (scratchbuf, "%%mm%d", modrm.rm);
d708bcba 13172 oappend (scratchbuf + intel_syntax);
252b5132
RH
13173}
13174
246c51aa
L
13175/* cvt* are the only instructions in sse2 which have
13176 both SSE and MMX operands and also have 0x66 prefix
13177 in their opcode. 0x66 was originally used to differentiate
13178 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
13179 cvt* separately using OP_EMC and OP_MXC */
13180static void
13181OP_EMC (int bytemode, int sizeflag)
13182{
7967e09e 13183 if (modrm.mod != 3)
4d9567e0
MM
13184 {
13185 if (intel_syntax && bytemode == v_mode)
13186 {
13187 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13188 used_prefixes |= (prefixes & PREFIX_DATA);
13189 }
13190 OP_E (bytemode, sizeflag);
13191 return;
13192 }
246c51aa 13193
4d9567e0
MM
13194 /* Skip mod/rm byte. */
13195 MODRM_CHECK;
13196 codep++;
13197 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 13198 sprintf (scratchbuf, "%%mm%d", modrm.rm);
4d9567e0
MM
13199 oappend (scratchbuf + intel_syntax);
13200}
13201
13202static void
13203OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13204{
13205 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 13206 sprintf (scratchbuf, "%%mm%d", modrm.reg);
4d9567e0
MM
13207 oappend (scratchbuf + intel_syntax);
13208}
13209
c608c12e 13210static void
26ca5450 13211OP_EX (int bytemode, int sizeflag)
c608c12e 13212{
9b60702d 13213 int add;
d6f574e0
L
13214
13215 /* Skip mod/rm byte. */
13216 MODRM_CHECK;
13217 codep++;
13218
7967e09e 13219 if (modrm.mod != 3)
c608c12e 13220 {
c1e679ec 13221 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
13222 return;
13223 }
d6f574e0 13224
161a04f6
L
13225 USED_REX (REX_B);
13226 if (rex & REX_B)
041bd2e0 13227 add = 8;
9b60702d
L
13228 else
13229 add = 0;
c608c12e 13230
b6169b20 13231 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
13232 && (bytemode == x_swap_mode
13233 || bytemode == d_swap_mode
13234 || bytemode == q_swap_mode))
b6169b20
L
13235 swap_operand ();
13236
c0f3af97
L
13237 if (need_vex
13238 && bytemode != xmm_mode
13239 && bytemode != xmmq_mode)
13240 {
13241 switch (vex.length)
13242 {
13243 case 128:
13244 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
13245 break;
13246 case 256:
13247 sprintf (scratchbuf, "%%ymm%d", modrm.rm + add);
13248 break;
13249 default:
13250 abort ();
13251 }
13252 }
13253 else
13254 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
d708bcba 13255 oappend (scratchbuf + intel_syntax);
c608c12e
AM
13256}
13257
252b5132 13258static void
26ca5450 13259OP_MS (int bytemode, int sizeflag)
252b5132 13260{
7967e09e 13261 if (modrm.mod == 3)
2da11e11
AM
13262 OP_EM (bytemode, sizeflag);
13263 else
6608db57 13264 BadOp ();
252b5132
RH
13265}
13266
992aaec9 13267static void
26ca5450 13268OP_XS (int bytemode, int sizeflag)
992aaec9 13269{
7967e09e 13270 if (modrm.mod == 3)
992aaec9
AM
13271 OP_EX (bytemode, sizeflag);
13272 else
6608db57 13273 BadOp ();
992aaec9
AM
13274}
13275
cc0ec051
AM
13276static void
13277OP_M (int bytemode, int sizeflag)
13278{
7967e09e 13279 if (modrm.mod == 3)
75413a22
L
13280 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
13281 BadOp ();
cc0ec051
AM
13282 else
13283 OP_E (bytemode, sizeflag);
13284}
13285
13286static void
13287OP_0f07 (int bytemode, int sizeflag)
13288{
7967e09e 13289 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
13290 BadOp ();
13291 else
13292 OP_E (bytemode, sizeflag);
13293}
13294
46e883c5 13295/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 13296 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 13297
cc0ec051 13298static void
46e883c5 13299NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 13300{
8b38ad71
L
13301 if ((prefixes & PREFIX_DATA) != 0
13302 || (rex != 0
13303 && rex != 0x48
13304 && address_mode == mode_64bit))
46e883c5
L
13305 OP_REG (bytemode, sizeflag);
13306 else
13307 strcpy (obuf, "nop");
13308}
13309
13310static void
13311NOP_Fixup2 (int bytemode, int sizeflag)
13312{
8b38ad71
L
13313 if ((prefixes & PREFIX_DATA) != 0
13314 || (rex != 0
13315 && rex != 0x48
13316 && address_mode == mode_64bit))
46e883c5 13317 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
13318}
13319
84037f8c 13320static const char *const Suffix3DNow[] = {
252b5132
RH
13321/* 00 */ NULL, NULL, NULL, NULL,
13322/* 04 */ NULL, NULL, NULL, NULL,
13323/* 08 */ NULL, NULL, NULL, NULL,
9e525108 13324/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
13325/* 10 */ NULL, NULL, NULL, NULL,
13326/* 14 */ NULL, NULL, NULL, NULL,
13327/* 18 */ NULL, NULL, NULL, NULL,
9e525108 13328/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
13329/* 20 */ NULL, NULL, NULL, NULL,
13330/* 24 */ NULL, NULL, NULL, NULL,
13331/* 28 */ NULL, NULL, NULL, NULL,
13332/* 2C */ NULL, NULL, NULL, NULL,
13333/* 30 */ NULL, NULL, NULL, NULL,
13334/* 34 */ NULL, NULL, NULL, NULL,
13335/* 38 */ NULL, NULL, NULL, NULL,
13336/* 3C */ NULL, NULL, NULL, NULL,
13337/* 40 */ NULL, NULL, NULL, NULL,
13338/* 44 */ NULL, NULL, NULL, NULL,
13339/* 48 */ NULL, NULL, NULL, NULL,
13340/* 4C */ NULL, NULL, NULL, NULL,
13341/* 50 */ NULL, NULL, NULL, NULL,
13342/* 54 */ NULL, NULL, NULL, NULL,
13343/* 58 */ NULL, NULL, NULL, NULL,
13344/* 5C */ NULL, NULL, NULL, NULL,
13345/* 60 */ NULL, NULL, NULL, NULL,
13346/* 64 */ NULL, NULL, NULL, NULL,
13347/* 68 */ NULL, NULL, NULL, NULL,
13348/* 6C */ NULL, NULL, NULL, NULL,
13349/* 70 */ NULL, NULL, NULL, NULL,
13350/* 74 */ NULL, NULL, NULL, NULL,
13351/* 78 */ NULL, NULL, NULL, NULL,
13352/* 7C */ NULL, NULL, NULL, NULL,
13353/* 80 */ NULL, NULL, NULL, NULL,
13354/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
13355/* 88 */ NULL, NULL, "pfnacc", NULL,
13356/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
13357/* 90 */ "pfcmpge", NULL, NULL, NULL,
13358/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
13359/* 98 */ NULL, NULL, "pfsub", NULL,
13360/* 9C */ NULL, NULL, "pfadd", NULL,
13361/* A0 */ "pfcmpgt", NULL, NULL, NULL,
13362/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
13363/* A8 */ NULL, NULL, "pfsubr", NULL,
13364/* AC */ NULL, NULL, "pfacc", NULL,
13365/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 13366/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 13367/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
13368/* BC */ NULL, NULL, NULL, "pavgusb",
13369/* C0 */ NULL, NULL, NULL, NULL,
13370/* C4 */ NULL, NULL, NULL, NULL,
13371/* C8 */ NULL, NULL, NULL, NULL,
13372/* CC */ NULL, NULL, NULL, NULL,
13373/* D0 */ NULL, NULL, NULL, NULL,
13374/* D4 */ NULL, NULL, NULL, NULL,
13375/* D8 */ NULL, NULL, NULL, NULL,
13376/* DC */ NULL, NULL, NULL, NULL,
13377/* E0 */ NULL, NULL, NULL, NULL,
13378/* E4 */ NULL, NULL, NULL, NULL,
13379/* E8 */ NULL, NULL, NULL, NULL,
13380/* EC */ NULL, NULL, NULL, NULL,
13381/* F0 */ NULL, NULL, NULL, NULL,
13382/* F4 */ NULL, NULL, NULL, NULL,
13383/* F8 */ NULL, NULL, NULL, NULL,
13384/* FC */ NULL, NULL, NULL, NULL,
13385};
13386
13387static void
26ca5450 13388OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
13389{
13390 const char *mnemonic;
13391
13392 FETCH_DATA (the_info, codep + 1);
13393 /* AMD 3DNow! instructions are specified by an opcode suffix in the
13394 place where an 8-bit immediate would normally go. ie. the last
13395 byte of the instruction. */
ea397f5b 13396 obufp = mnemonicendp;
c608c12e 13397 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 13398 if (mnemonic)
2da11e11 13399 oappend (mnemonic);
252b5132
RH
13400 else
13401 {
13402 /* Since a variable sized modrm/sib chunk is between the start
13403 of the opcode (0x0f0f) and the opcode suffix, we need to do
13404 all the modrm processing first, and don't know until now that
13405 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
13406 op_out[0][0] = '\0';
13407 op_out[1][0] = '\0';
6608db57 13408 BadOp ();
252b5132 13409 }
ea397f5b 13410 mnemonicendp = obufp;
252b5132 13411}
c608c12e 13412
ea397f5b
L
13413static struct op simd_cmp_op[] =
13414{
13415 { STRING_COMMA_LEN ("eq") },
13416 { STRING_COMMA_LEN ("lt") },
13417 { STRING_COMMA_LEN ("le") },
13418 { STRING_COMMA_LEN ("unord") },
13419 { STRING_COMMA_LEN ("neq") },
13420 { STRING_COMMA_LEN ("nlt") },
13421 { STRING_COMMA_LEN ("nle") },
13422 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
13423};
13424
13425static void
ad19981d 13426CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
13427{
13428 unsigned int cmp_type;
13429
13430 FETCH_DATA (the_info, codep + 1);
13431 cmp_type = *codep++ & 0xff;
c0f3af97 13432 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 13433 {
ad19981d 13434 char suffix [3];
ea397f5b 13435 char *p = mnemonicendp - 2;
ad19981d
L
13436 suffix[0] = p[0];
13437 suffix[1] = p[1];
13438 suffix[2] = '\0';
ea397f5b
L
13439 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
13440 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
13441 }
13442 else
13443 {
ad19981d
L
13444 /* We have a reserved extension byte. Output it directly. */
13445 scratchbuf[0] = '$';
13446 print_operand_value (scratchbuf + 1, 1, cmp_type);
13447 oappend (scratchbuf + intel_syntax);
13448 scratchbuf[0] = '\0';
c608c12e
AM
13449 }
13450}
13451
ca164297 13452static void
b844680a
L
13453OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
13454 int sizeflag ATTRIBUTE_UNUSED)
13455{
13456 /* mwait %eax,%ecx */
13457 if (!intel_syntax)
13458 {
13459 const char **names = (address_mode == mode_64bit
13460 ? names64 : names32);
13461 strcpy (op_out[0], names[0]);
13462 strcpy (op_out[1], names[1]);
13463 two_source_ops = 1;
13464 }
13465 /* Skip mod/rm byte. */
13466 MODRM_CHECK;
13467 codep++;
13468}
13469
13470static void
13471OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
13472 int sizeflag ATTRIBUTE_UNUSED)
ca164297 13473{
b844680a
L
13474 /* monitor %eax,%ecx,%edx" */
13475 if (!intel_syntax)
ca164297 13476 {
b844680a 13477 const char **op1_names;
cb712a9e
L
13478 const char **names = (address_mode == mode_64bit
13479 ? names64 : names32);
1d9f512f 13480
b844680a
L
13481 if (!(prefixes & PREFIX_ADDR))
13482 op1_names = (address_mode == mode_16bit
13483 ? names16 : names);
ca164297
L
13484 else
13485 {
b844680a 13486 /* Remove "addr16/addr32". */
f16cd0d5 13487 all_prefixes[last_addr_prefix] = 0;
b844680a
L
13488 op1_names = (address_mode != mode_32bit
13489 ? names32 : names16);
13490 used_prefixes |= PREFIX_ADDR;
ca164297 13491 }
b844680a
L
13492 strcpy (op_out[0], op1_names[0]);
13493 strcpy (op_out[1], names[1]);
13494 strcpy (op_out[2], names[2]);
13495 two_source_ops = 1;
ca164297 13496 }
b844680a
L
13497 /* Skip mod/rm byte. */
13498 MODRM_CHECK;
13499 codep++;
30123838
JB
13500}
13501
6608db57
KH
13502static void
13503BadOp (void)
2da11e11 13504{
6608db57
KH
13505 /* Throw away prefixes and 1st. opcode byte. */
13506 codep = insn_codep + 1;
2da11e11
AM
13507 oappend ("(bad)");
13508}
4cc91dba 13509
35c52694
L
13510static void
13511REP_Fixup (int bytemode, int sizeflag)
13512{
13513 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
13514 lods and stos. */
35c52694 13515 if (prefixes & PREFIX_REPZ)
f16cd0d5 13516 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
13517
13518 switch (bytemode)
13519 {
13520 case al_reg:
13521 case eAX_reg:
13522 case indir_dx_reg:
13523 OP_IMREG (bytemode, sizeflag);
13524 break;
13525 case eDI_reg:
13526 OP_ESreg (bytemode, sizeflag);
13527 break;
13528 case eSI_reg:
13529 OP_DSreg (bytemode, sizeflag);
13530 break;
13531 default:
13532 abort ();
13533 break;
13534 }
13535}
f5804c90
L
13536
13537static void
13538CMPXCHG8B_Fixup (int bytemode, int sizeflag)
13539{
161a04f6
L
13540 USED_REX (REX_W);
13541 if (rex & REX_W)
f5804c90
L
13542 {
13543 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
13544 char *p = mnemonicendp - 2;
13545 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 13546 bytemode = o_mode;
f5804c90
L
13547 }
13548 OP_M (bytemode, sizeflag);
13549}
42903f7f
L
13550
13551static void
13552XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
13553{
c0f3af97
L
13554 if (need_vex)
13555 {
13556 switch (vex.length)
13557 {
13558 case 128:
13559 sprintf (scratchbuf, "%%xmm%d", reg);
13560 break;
13561 case 256:
13562 sprintf (scratchbuf, "%%ymm%d", reg);
13563 break;
13564 default:
13565 abort ();
13566 }
13567 }
13568 else
13569 sprintf (scratchbuf, "%%xmm%d", reg);
42903f7f
L
13570 oappend (scratchbuf + intel_syntax);
13571}
381d071f
L
13572
13573static void
13574CRC32_Fixup (int bytemode, int sizeflag)
13575{
13576 /* Add proper suffix to "crc32". */
ea397f5b 13577 char *p = mnemonicendp;
381d071f
L
13578
13579 switch (bytemode)
13580 {
13581 case b_mode:
20592a94 13582 if (intel_syntax)
ea397f5b 13583 goto skip;
20592a94 13584
381d071f
L
13585 *p++ = 'b';
13586 break;
13587 case v_mode:
20592a94 13588 if (intel_syntax)
ea397f5b 13589 goto skip;
20592a94 13590
381d071f
L
13591 USED_REX (REX_W);
13592 if (rex & REX_W)
13593 *p++ = 'q';
f16cd0d5
L
13594 else
13595 {
13596 if (sizeflag & DFLAG)
13597 *p++ = 'l';
13598 else
13599 *p++ = 'w';
13600 used_prefixes |= (prefixes & PREFIX_DATA);
13601 }
381d071f
L
13602 break;
13603 default:
13604 oappend (INTERNAL_DISASSEMBLER_ERROR);
13605 break;
13606 }
ea397f5b 13607 mnemonicendp = p;
381d071f
L
13608 *p = '\0';
13609
ea397f5b 13610skip:
381d071f
L
13611 if (modrm.mod == 3)
13612 {
13613 int add;
13614
13615 /* Skip mod/rm byte. */
13616 MODRM_CHECK;
13617 codep++;
13618
13619 USED_REX (REX_B);
13620 add = (rex & REX_B) ? 8 : 0;
13621 if (bytemode == b_mode)
13622 {
13623 USED_REX (0);
13624 if (rex)
13625 oappend (names8rex[modrm.rm + add]);
13626 else
13627 oappend (names8[modrm.rm + add]);
13628 }
13629 else
13630 {
13631 USED_REX (REX_W);
13632 if (rex & REX_W)
13633 oappend (names64[modrm.rm + add]);
13634 else if ((prefixes & PREFIX_DATA))
13635 oappend (names16[modrm.rm + add]);
13636 else
13637 oappend (names32[modrm.rm + add]);
13638 }
13639 }
13640 else
9344ff29 13641 OP_E (bytemode, sizeflag);
381d071f 13642}
85f10a01 13643
c0f3af97
L
13644/* Display the destination register operand for instructions with
13645 VEX. */
13646
13647static void
13648OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
13649{
13650 if (!need_vex)
13651 abort ();
13652
13653 if (!need_vex_reg)
13654 return;
13655
13656 switch (vex.length)
13657 {
13658 case 128:
13659 switch (bytemode)
13660 {
13661 case vex_mode:
13662 case vex128_mode:
13663 break;
13664 default:
13665 abort ();
13666 return;
13667 }
13668
13669 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
13670 break;
13671 case 256:
13672 switch (bytemode)
13673 {
13674 case vex_mode:
13675 case vex256_mode:
13676 break;
13677 default:
13678 abort ();
13679 return;
13680 }
13681
13682 sprintf (scratchbuf, "%%ymm%d", vex.register_specifier);
13683 break;
13684 default:
13685 abort ();
13686 break;
13687 }
13688 oappend (scratchbuf + intel_syntax);
13689}
13690
922d8de8
DR
13691/* Get the VEX immediate byte without moving codep. */
13692
13693static unsigned char
ccc5981b 13694get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
13695{
13696 int bytes_before_imm = 0;
13697
922d8de8
DR
13698 if (modrm.mod != 3)
13699 {
13700 /* There are SIB/displacement bytes. */
13701 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
13702 {
13703 /* 32/64 bit address mode */
13704 int base = modrm.rm;
13705
13706 /* Check SIB byte. */
13707 if (base == 4)
13708 {
13709 FETCH_DATA (the_info, codep + 1);
13710 base = *codep & 7;
ccc5981b
SP
13711 /* When decoding the third source, don't increase
13712 bytes_before_imm as this has already been incremented
13713 by one in OP_E_memory while decoding the second
13714 source operand. */
13715 if (opnum == 0)
13716 bytes_before_imm++;
922d8de8 13717 }
922d8de8
DR
13718 switch (modrm.mod)
13719 {
13720 case 0:
13721 /* When modrm.rm == 5 or modrm.rm == 4 and base in
13722 SIB == 5, there is a 4 byte displacement. */
13723 if (base != 5)
13724 /* No displacement. */
13725 break;
13726 case 2:
13727 /* 4 byte displacement. */
13728 bytes_before_imm += 4;
13729 break;
13730 case 1:
ccc5981b
SP
13731 /* 1 byte displacement: when decoding the third source,
13732 don't increase bytes_before_imm as this has already
13733 been incremented by one in OP_E_memory while decoding
13734 the second source operand. */
13735 if (opnum == 0)
13736 bytes_before_imm++;
13737
922d8de8
DR
13738 break;
13739 }
13740 }
13741 else
13742 { /* 16 bit address mode */
13743 switch (modrm.mod)
13744 {
13745 case 0:
13746 /* When modrm.rm == 6, there is a 2 byte displacement. */
13747 if (modrm.rm != 6)
13748 /* No displacement. */
13749 break;
13750 case 2:
13751 /* 2 byte displacement. */
13752 bytes_before_imm += 2;
13753 break;
13754 case 1:
ccc5981b
SP
13755 /* 1 byte displacement: when decoding the third source,
13756 don't increase bytes_before_imm as this has already
13757 been incremented by one in OP_E_memory while decoding
13758 the second source operand. */
13759 if (opnum == 0)
13760 bytes_before_imm++;
13761
922d8de8
DR
13762 break;
13763 }
13764 }
13765 }
13766
13767 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
13768 return codep [bytes_before_imm];
13769}
13770
13771static void
13772OP_EX_VexReg (int bytemode, int sizeflag, int reg)
13773{
13774 if (reg == -1 && modrm.mod != 3)
13775 {
13776 OP_E_memory (bytemode, sizeflag);
13777 return;
13778 }
13779 else
13780 {
13781 if (reg == -1)
13782 {
13783 reg = modrm.rm;
13784 USED_REX (REX_B);
13785 if (rex & REX_B)
13786 reg += 8;
13787 }
13788 else if (reg > 7 && address_mode != mode_64bit)
13789 BadOp ();
13790 }
13791
13792 switch (vex.length)
13793 {
13794 case 128:
13795 sprintf (scratchbuf, "%%xmm%d", reg);
13796 break;
13797 case 256:
13798 sprintf (scratchbuf, "%%ymm%d", reg);
13799 break;
13800 default:
13801 abort ();
13802 }
13803 oappend (scratchbuf + intel_syntax);
13804}
13805
5dd85c99
SP
13806static void
13807OP_Vex_2src (int bytemode, int sizeflag)
13808{
13809 if (modrm.mod == 3)
13810 {
13811 USED_REX (REX_B);
13812 sprintf (scratchbuf, "%%xmm%d", rex & REX_B ? modrm.rm + 8 : modrm.rm);
13813 oappend (scratchbuf + intel_syntax);
13814 }
13815 else
13816 {
13817 if (intel_syntax
13818 && (bytemode == v_mode || bytemode == v_swap_mode))
13819 {
13820 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13821 used_prefixes |= (prefixes & PREFIX_DATA);
13822 }
13823 OP_E (bytemode, sizeflag);
13824 }
13825}
13826
13827static void
13828OP_Vex_2src_1 (int bytemode, int sizeflag)
13829{
13830 if (modrm.mod == 3)
13831 {
13832 /* Skip mod/rm byte. */
13833 MODRM_CHECK;
13834 codep++;
13835 }
13836
13837 if (vex.w)
13838 {
13839 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
13840 oappend (scratchbuf + intel_syntax);
13841 }
13842 else
13843 OP_Vex_2src (bytemode, sizeflag);
13844}
13845
13846static void
13847OP_Vex_2src_2 (int bytemode, int sizeflag)
13848{
13849 if (vex.w)
13850 OP_Vex_2src (bytemode, sizeflag);
13851 else
13852 {
13853 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
13854 oappend (scratchbuf + intel_syntax);
13855 }
13856}
13857
922d8de8
DR
13858static void
13859OP_EX_VexW (int bytemode, int sizeflag)
13860{
13861 int reg = -1;
13862
13863 if (!vex_w_done)
13864 {
13865 vex_w_done = 1;
41effecb
SP
13866
13867 /* Skip mod/rm byte. */
13868 MODRM_CHECK;
13869 codep++;
13870
922d8de8 13871 if (vex.w)
ccc5981b 13872 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
13873 }
13874 else
13875 {
13876 if (!vex.w)
ccc5981b 13877 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
13878 }
13879
13880 OP_EX_VexReg (bytemode, sizeflag, reg);
13881}
13882
922d8de8
DR
13883static void
13884VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
13885 int sizeflag ATTRIBUTE_UNUSED)
13886{
13887 /* Skip the immediate byte and check for invalid bits. */
13888 FETCH_DATA (the_info, codep + 1);
13889 if (*codep++ & 0xf)
13890 BadOp ();
13891}
13892
c0f3af97
L
13893static void
13894OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
13895{
13896 int reg;
13897 FETCH_DATA (the_info, codep + 1);
13898 reg = *codep++;
13899
13900 if (bytemode != x_mode)
13901 abort ();
13902
13903 if (reg & 0xf)
13904 BadOp ();
13905
13906 reg >>= 4;
dae39acc
L
13907 if (reg > 7 && address_mode != mode_64bit)
13908 BadOp ();
13909
c0f3af97
L
13910 switch (vex.length)
13911 {
13912 case 128:
13913 sprintf (scratchbuf, "%%xmm%d", reg);
13914 break;
13915 case 256:
13916 sprintf (scratchbuf, "%%ymm%d", reg);
13917 break;
13918 default:
13919 abort ();
13920 }
13921 oappend (scratchbuf + intel_syntax);
13922}
13923
922d8de8
DR
13924static void
13925OP_XMM_VexW (int bytemode, int sizeflag)
13926{
13927 /* Turn off the REX.W bit since it is used for swapping operands
13928 now. */
13929 rex &= ~REX_W;
13930 OP_XMM (bytemode, sizeflag);
13931}
13932
c0f3af97
L
13933static void
13934OP_EX_Vex (int bytemode, int sizeflag)
13935{
13936 if (modrm.mod != 3)
13937 {
13938 if (vex.register_specifier != 0)
13939 BadOp ();
13940 need_vex_reg = 0;
13941 }
13942 OP_EX (bytemode, sizeflag);
13943}
13944
13945static void
13946OP_XMM_Vex (int bytemode, int sizeflag)
13947{
13948 if (modrm.mod != 3)
13949 {
13950 if (vex.register_specifier != 0)
13951 BadOp ();
13952 need_vex_reg = 0;
13953 }
13954 OP_XMM (bytemode, sizeflag);
13955}
13956
13957static void
13958VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13959{
13960 switch (vex.length)
13961 {
13962 case 128:
ea397f5b 13963 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
13964 break;
13965 case 256:
ea397f5b 13966 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
13967 break;
13968 default:
13969 abort ();
13970 }
13971}
13972
ea397f5b
L
13973static struct op vex_cmp_op[] =
13974{
13975 { STRING_COMMA_LEN ("eq") },
13976 { STRING_COMMA_LEN ("lt") },
13977 { STRING_COMMA_LEN ("le") },
13978 { STRING_COMMA_LEN ("unord") },
13979 { STRING_COMMA_LEN ("neq") },
13980 { STRING_COMMA_LEN ("nlt") },
13981 { STRING_COMMA_LEN ("nle") },
13982 { STRING_COMMA_LEN ("ord") },
13983 { STRING_COMMA_LEN ("eq_uq") },
13984 { STRING_COMMA_LEN ("nge") },
13985 { STRING_COMMA_LEN ("ngt") },
13986 { STRING_COMMA_LEN ("false") },
13987 { STRING_COMMA_LEN ("neq_oq") },
13988 { STRING_COMMA_LEN ("ge") },
13989 { STRING_COMMA_LEN ("gt") },
13990 { STRING_COMMA_LEN ("true") },
13991 { STRING_COMMA_LEN ("eq_os") },
13992 { STRING_COMMA_LEN ("lt_oq") },
13993 { STRING_COMMA_LEN ("le_oq") },
13994 { STRING_COMMA_LEN ("unord_s") },
13995 { STRING_COMMA_LEN ("neq_us") },
13996 { STRING_COMMA_LEN ("nlt_uq") },
13997 { STRING_COMMA_LEN ("nle_uq") },
13998 { STRING_COMMA_LEN ("ord_s") },
13999 { STRING_COMMA_LEN ("eq_us") },
14000 { STRING_COMMA_LEN ("nge_uq") },
14001 { STRING_COMMA_LEN ("ngt_uq") },
14002 { STRING_COMMA_LEN ("false_os") },
14003 { STRING_COMMA_LEN ("neq_os") },
14004 { STRING_COMMA_LEN ("ge_oq") },
14005 { STRING_COMMA_LEN ("gt_oq") },
14006 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
14007};
14008
14009static void
14010VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14011{
14012 unsigned int cmp_type;
14013
14014 FETCH_DATA (the_info, codep + 1);
14015 cmp_type = *codep++ & 0xff;
14016 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
14017 {
14018 char suffix [3];
ea397f5b 14019 char *p = mnemonicendp - 2;
c0f3af97
L
14020 suffix[0] = p[0];
14021 suffix[1] = p[1];
14022 suffix[2] = '\0';
ea397f5b
L
14023 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
14024 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
14025 }
14026 else
14027 {
14028 /* We have a reserved extension byte. Output it directly. */
14029 scratchbuf[0] = '$';
14030 print_operand_value (scratchbuf + 1, 1, cmp_type);
14031 oappend (scratchbuf + intel_syntax);
14032 scratchbuf[0] = '\0';
14033 }
14034}
14035
ea397f5b
L
14036static const struct op pclmul_op[] =
14037{
14038 { STRING_COMMA_LEN ("lql") },
14039 { STRING_COMMA_LEN ("hql") },
14040 { STRING_COMMA_LEN ("lqh") },
14041 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
14042};
14043
14044static void
14045PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
14046 int sizeflag ATTRIBUTE_UNUSED)
14047{
14048 unsigned int pclmul_type;
14049
14050 FETCH_DATA (the_info, codep + 1);
14051 pclmul_type = *codep++ & 0xff;
14052 switch (pclmul_type)
14053 {
14054 case 0x10:
14055 pclmul_type = 2;
14056 break;
14057 case 0x11:
14058 pclmul_type = 3;
14059 break;
14060 default:
14061 break;
14062 }
14063 if (pclmul_type < ARRAY_SIZE (pclmul_op))
14064 {
14065 char suffix [4];
ea397f5b 14066 char *p = mnemonicendp - 3;
c0f3af97
L
14067 suffix[0] = p[0];
14068 suffix[1] = p[1];
14069 suffix[2] = p[2];
14070 suffix[3] = '\0';
ea397f5b
L
14071 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
14072 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
14073 }
14074 else
14075 {
14076 /* We have a reserved extension byte. Output it directly. */
14077 scratchbuf[0] = '$';
14078 print_operand_value (scratchbuf + 1, 1, pclmul_type);
14079 oappend (scratchbuf + intel_syntax);
14080 scratchbuf[0] = '\0';
14081 }
14082}
14083
f1f8f695
L
14084static void
14085MOVBE_Fixup (int bytemode, int sizeflag)
14086{
14087 /* Add proper suffix to "movbe". */
ea397f5b 14088 char *p = mnemonicendp;
f1f8f695
L
14089
14090 switch (bytemode)
14091 {
14092 case v_mode:
14093 if (intel_syntax)
ea397f5b 14094 goto skip;
f1f8f695
L
14095
14096 USED_REX (REX_W);
14097 if (sizeflag & SUFFIX_ALWAYS)
14098 {
14099 if (rex & REX_W)
14100 *p++ = 'q';
f1f8f695 14101 else
f16cd0d5
L
14102 {
14103 if (sizeflag & DFLAG)
14104 *p++ = 'l';
14105 else
14106 *p++ = 'w';
14107 used_prefixes |= (prefixes & PREFIX_DATA);
14108 }
f1f8f695 14109 }
f1f8f695
L
14110 break;
14111 default:
14112 oappend (INTERNAL_DISASSEMBLER_ERROR);
14113 break;
14114 }
ea397f5b 14115 mnemonicendp = p;
f1f8f695
L
14116 *p = '\0';
14117
ea397f5b 14118skip:
f1f8f695
L
14119 OP_M (bytemode, sizeflag);
14120}
f88c9eb0
SP
14121
14122static void
14123OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14124{
14125 int reg;
14126 const char **names;
14127
14128 /* Skip mod/rm byte. */
14129 MODRM_CHECK;
14130 codep++;
14131
14132 if (vex.w)
14133 names = names64;
14134 else if (vex.length == 256)
14135 names = names32;
14136 else
14137 names = names16;
14138
14139 reg = modrm.rm;
14140 USED_REX (REX_B);
14141 if (rex & REX_B)
14142 reg += 8;
14143
14144 oappend (names[reg]);
14145}
14146
14147static void
14148OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14149{
14150 const char **names;
14151
14152 if (vex.w)
14153 names = names64;
14154 else if (vex.length == 256)
14155 names = names32;
14156 else
14157 names = names16;
14158
14159 oappend (names[vex.register_specifier]);
14160}
14161
14162static void
14163OP_LWP_I (int bytemode ATTRIBUTE_UNUSED, int sizeflag)
14164{
14165 if (vex.w || vex.length == 256)
14166 OP_I (q_mode, sizeflag);
14167 else
14168 OP_I (w_mode, sizeflag);
14169}
14170
This page took 1.33628 seconds and 4 git commands to generate.