Remove suffix on fxsave.
[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
SP
1295 VEX_LEN_3ADF_P_2,
1296 VEX_LEN_XOP_08_A0,
1297 VEX_LEN_XOP_08_A1,
1298 VEX_LEN_XOP_09_80,
1299 VEX_LEN_XOP_09_81
51e7da1b 1300};
c0f3af97 1301
26ca5450 1302typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1303
1304struct dis386 {
2da11e11 1305 const char *name;
ce518a5f
L
1306 struct
1307 {
1308 op_rtn rtn;
1309 int bytemode;
1310 } op[MAX_OPERANDS];
252b5132
RH
1311};
1312
1313/* Upper case letters in the instruction names here are macros.
1314 'A' => print 'b' if no register operands or suffix_always is true
1315 'B' => print 'b' if suffix_always is true
9306ca4a 1316 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1317 size prefix
ed7841b3 1318 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1319 suffix_always is true
252b5132 1320 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1321 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1322 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1323 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1324 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1325 for some of the macro letters)
9306ca4a 1326 'J' => print 'l'
42903f7f 1327 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1328 'L' => print 'l' if suffix_always is true
9d141669 1329 'M' => print 'r' if intel_mnemonic is false.
252b5132 1330 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1331 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1332 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1333 or suffix_always is true. print 'q' if rex prefix is present.
1334 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1335 is true
a35ca55a 1336 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1337 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1338 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1339 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1340 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1341 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1342 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1343 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1344 suffix_always is true.
6dd5059a 1345 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1346 '!' => change condition from true to false or from false to true.
98b528ac
L
1347 '%' => add 1 upper case letter to the macro.
1348
1349 2 upper case letter macros:
c0f3af97
L
1350 "XY" => print 'x' or 'y' if no register operands or suffix_always
1351 is true.
4b06377f
L
1352 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1353 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1354 or suffix_always is true
4b06377f
L
1355 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1356 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1357 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
52b15da3 1358
6439fc28
AM
1359 Many of the above letters print nothing in Intel mode. See "putop"
1360 for the details.
52b15da3 1361
6439fc28 1362 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1363 mnemonic strings for AT&T and Intel. */
252b5132 1364
6439fc28 1365static const struct dis386 dis386[] = {
252b5132 1366 /* 00 */
ce518a5f
L
1367 { "addB", { Eb, Gb } },
1368 { "addS", { Ev, Gv } },
c7532693
L
1369 { "addB", { Gb, EbS } },
1370 { "addS", { Gv, EvS } },
ce518a5f
L
1371 { "addB", { AL, Ib } },
1372 { "addS", { eAX, Iv } },
4e7d34a6
L
1373 { X86_64_TABLE (X86_64_06) },
1374 { X86_64_TABLE (X86_64_07) },
252b5132 1375 /* 08 */
ce518a5f
L
1376 { "orB", { Eb, Gb } },
1377 { "orS", { Ev, Gv } },
c7532693
L
1378 { "orB", { Gb, EbS } },
1379 { "orS", { Gv, EvS } },
ce518a5f
L
1380 { "orB", { AL, Ib } },
1381 { "orS", { eAX, Iv } },
4e7d34a6 1382 { X86_64_TABLE (X86_64_0D) },
ce518a5f 1383 { "(bad)", { XX } }, /* 0x0f extended opcode escape */
252b5132 1384 /* 10 */
ce518a5f
L
1385 { "adcB", { Eb, Gb } },
1386 { "adcS", { Ev, Gv } },
c7532693
L
1387 { "adcB", { Gb, EbS } },
1388 { "adcS", { Gv, EvS } },
ce518a5f
L
1389 { "adcB", { AL, Ib } },
1390 { "adcS", { eAX, Iv } },
4e7d34a6
L
1391 { X86_64_TABLE (X86_64_16) },
1392 { X86_64_TABLE (X86_64_17) },
252b5132 1393 /* 18 */
ce518a5f
L
1394 { "sbbB", { Eb, Gb } },
1395 { "sbbS", { Ev, Gv } },
c7532693
L
1396 { "sbbB", { Gb, EbS } },
1397 { "sbbS", { Gv, EvS } },
ce518a5f
L
1398 { "sbbB", { AL, Ib } },
1399 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1400 { X86_64_TABLE (X86_64_1E) },
1401 { X86_64_TABLE (X86_64_1F) },
252b5132 1402 /* 20 */
ce518a5f
L
1403 { "andB", { Eb, Gb } },
1404 { "andS", { Ev, Gv } },
c7532693
L
1405 { "andB", { Gb, EbS } },
1406 { "andS", { Gv, EvS } },
ce518a5f
L
1407 { "andB", { AL, Ib } },
1408 { "andS", { eAX, Iv } },
1409 { "(bad)", { XX } }, /* SEG ES prefix */
4e7d34a6 1410 { X86_64_TABLE (X86_64_27) },
252b5132 1411 /* 28 */
ce518a5f
L
1412 { "subB", { Eb, Gb } },
1413 { "subS", { Ev, Gv } },
c7532693
L
1414 { "subB", { Gb, EbS } },
1415 { "subS", { Gv, EvS } },
ce518a5f
L
1416 { "subB", { AL, Ib } },
1417 { "subS", { eAX, Iv } },
1418 { "(bad)", { XX } }, /* SEG CS prefix */
4e7d34a6 1419 { X86_64_TABLE (X86_64_2F) },
252b5132 1420 /* 30 */
ce518a5f
L
1421 { "xorB", { Eb, Gb } },
1422 { "xorS", { Ev, Gv } },
c7532693
L
1423 { "xorB", { Gb, EbS } },
1424 { "xorS", { Gv, EvS } },
ce518a5f
L
1425 { "xorB", { AL, Ib } },
1426 { "xorS", { eAX, Iv } },
1427 { "(bad)", { XX } }, /* SEG SS prefix */
4e7d34a6 1428 { X86_64_TABLE (X86_64_37) },
252b5132 1429 /* 38 */
ce518a5f
L
1430 { "cmpB", { Eb, Gb } },
1431 { "cmpS", { Ev, Gv } },
c7532693
L
1432 { "cmpB", { Gb, EbS } },
1433 { "cmpS", { Gv, EvS } },
ce518a5f
L
1434 { "cmpB", { AL, Ib } },
1435 { "cmpS", { eAX, Iv } },
1436 { "(bad)", { XX } }, /* SEG DS prefix */
4e7d34a6 1437 { X86_64_TABLE (X86_64_3F) },
252b5132 1438 /* 40 */
ce518a5f
L
1439 { "inc{S|}", { RMeAX } },
1440 { "inc{S|}", { RMeCX } },
1441 { "inc{S|}", { RMeDX } },
1442 { "inc{S|}", { RMeBX } },
1443 { "inc{S|}", { RMeSP } },
1444 { "inc{S|}", { RMeBP } },
1445 { "inc{S|}", { RMeSI } },
1446 { "inc{S|}", { RMeDI } },
252b5132 1447 /* 48 */
ce518a5f
L
1448 { "dec{S|}", { RMeAX } },
1449 { "dec{S|}", { RMeCX } },
1450 { "dec{S|}", { RMeDX } },
1451 { "dec{S|}", { RMeBX } },
1452 { "dec{S|}", { RMeSP } },
1453 { "dec{S|}", { RMeBP } },
1454 { "dec{S|}", { RMeSI } },
1455 { "dec{S|}", { RMeDI } },
252b5132 1456 /* 50 */
ce518a5f
L
1457 { "pushV", { RMrAX } },
1458 { "pushV", { RMrCX } },
1459 { "pushV", { RMrDX } },
1460 { "pushV", { RMrBX } },
1461 { "pushV", { RMrSP } },
1462 { "pushV", { RMrBP } },
1463 { "pushV", { RMrSI } },
1464 { "pushV", { RMrDI } },
252b5132 1465 /* 58 */
ce518a5f
L
1466 { "popV", { RMrAX } },
1467 { "popV", { RMrCX } },
1468 { "popV", { RMrDX } },
1469 { "popV", { RMrBX } },
1470 { "popV", { RMrSP } },
1471 { "popV", { RMrBP } },
1472 { "popV", { RMrSI } },
1473 { "popV", { RMrDI } },
252b5132 1474 /* 60 */
4e7d34a6
L
1475 { X86_64_TABLE (X86_64_60) },
1476 { X86_64_TABLE (X86_64_61) },
1477 { X86_64_TABLE (X86_64_62) },
1478 { X86_64_TABLE (X86_64_63) },
ce518a5f
L
1479 { "(bad)", { XX } }, /* seg fs */
1480 { "(bad)", { XX } }, /* seg gs */
1481 { "(bad)", { XX } }, /* op size prefix */
1482 { "(bad)", { XX } }, /* adr size prefix */
252b5132 1483 /* 68 */
ce518a5f
L
1484 { "pushT", { Iq } },
1485 { "imulS", { Gv, Ev, Iv } },
1486 { "pushT", { sIb } },
1487 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1488 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1489 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1490 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1491 { X86_64_TABLE (X86_64_6F) },
252b5132 1492 /* 70 */
ce518a5f
L
1493 { "joH", { Jb, XX, cond_jump_flag } },
1494 { "jnoH", { Jb, XX, cond_jump_flag } },
1495 { "jbH", { Jb, XX, cond_jump_flag } },
1496 { "jaeH", { Jb, XX, cond_jump_flag } },
1497 { "jeH", { Jb, XX, cond_jump_flag } },
1498 { "jneH", { Jb, XX, cond_jump_flag } },
1499 { "jbeH", { Jb, XX, cond_jump_flag } },
1500 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1501 /* 78 */
ce518a5f
L
1502 { "jsH", { Jb, XX, cond_jump_flag } },
1503 { "jnsH", { Jb, XX, cond_jump_flag } },
1504 { "jpH", { Jb, XX, cond_jump_flag } },
1505 { "jnpH", { Jb, XX, cond_jump_flag } },
1506 { "jlH", { Jb, XX, cond_jump_flag } },
1507 { "jgeH", { Jb, XX, cond_jump_flag } },
1508 { "jleH", { Jb, XX, cond_jump_flag } },
1509 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1510 /* 80 */
1ceb70f8
L
1511 { REG_TABLE (REG_80) },
1512 { REG_TABLE (REG_81) },
ce518a5f 1513 { "(bad)", { XX } },
1ceb70f8 1514 { REG_TABLE (REG_82) },
ce518a5f
L
1515 { "testB", { Eb, Gb } },
1516 { "testS", { Ev, Gv } },
1517 { "xchgB", { Eb, Gb } },
1518 { "xchgS", { Ev, Gv } },
252b5132 1519 /* 88 */
ce518a5f
L
1520 { "movB", { Eb, Gb } },
1521 { "movS", { Ev, Gv } },
b6169b20
L
1522 { "movB", { Gb, EbS } },
1523 { "movS", { Gv, EvS } },
ce518a5f 1524 { "movD", { Sv, Sw } },
1ceb70f8 1525 { MOD_TABLE (MOD_8D) },
ce518a5f 1526 { "movD", { Sw, Sv } },
1ceb70f8 1527 { REG_TABLE (REG_8F) },
252b5132 1528 /* 90 */
1ceb70f8 1529 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1530 { "xchgS", { RMeCX, eAX } },
1531 { "xchgS", { RMeDX, eAX } },
1532 { "xchgS", { RMeBX, eAX } },
1533 { "xchgS", { RMeSP, eAX } },
1534 { "xchgS", { RMeBP, eAX } },
1535 { "xchgS", { RMeSI, eAX } },
1536 { "xchgS", { RMeDI, eAX } },
252b5132 1537 /* 98 */
7c52e0e8
L
1538 { "cW{t|}R", { XX } },
1539 { "cR{t|}O", { XX } },
4e7d34a6 1540 { X86_64_TABLE (X86_64_9A) },
ce518a5f
L
1541 { "(bad)", { XX } }, /* fwait */
1542 { "pushfT", { XX } },
1543 { "popfT", { XX } },
7c52e0e8
L
1544 { "sahf", { XX } },
1545 { "lahf", { XX } },
252b5132 1546 /* a0 */
4b06377f
L
1547 { "mov%LB", { AL, Ob } },
1548 { "mov%LS", { eAX, Ov } },
1549 { "mov%LB", { Ob, AL } },
1550 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1551 { "movs{b|}", { Ybr, Xb } },
1552 { "movs{R|}", { Yvr, Xv } },
1553 { "cmps{b|}", { Xb, Yb } },
1554 { "cmps{R|}", { Xv, Yv } },
252b5132 1555 /* a8 */
ce518a5f
L
1556 { "testB", { AL, Ib } },
1557 { "testS", { eAX, Iv } },
1558 { "stosB", { Ybr, AL } },
1559 { "stosS", { Yvr, eAX } },
1560 { "lodsB", { ALr, Xb } },
1561 { "lodsS", { eAXr, Xv } },
1562 { "scasB", { AL, Yb } },
1563 { "scasS", { eAX, Yv } },
252b5132 1564 /* b0 */
ce518a5f
L
1565 { "movB", { RMAL, Ib } },
1566 { "movB", { RMCL, Ib } },
1567 { "movB", { RMDL, Ib } },
1568 { "movB", { RMBL, Ib } },
1569 { "movB", { RMAH, Ib } },
1570 { "movB", { RMCH, Ib } },
1571 { "movB", { RMDH, Ib } },
1572 { "movB", { RMBH, Ib } },
252b5132 1573 /* b8 */
4b06377f
L
1574 { "mov%LV", { RMeAX, Iv64 } },
1575 { "mov%LV", { RMeCX, Iv64 } },
1576 { "mov%LV", { RMeDX, Iv64 } },
1577 { "mov%LV", { RMeBX, Iv64 } },
1578 { "mov%LV", { RMeSP, Iv64 } },
1579 { "mov%LV", { RMeBP, Iv64 } },
1580 { "mov%LV", { RMeSI, Iv64 } },
1581 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1582 /* c0 */
1ceb70f8
L
1583 { REG_TABLE (REG_C0) },
1584 { REG_TABLE (REG_C1) },
ce518a5f
L
1585 { "retT", { Iw } },
1586 { "retT", { XX } },
4e7d34a6
L
1587 { X86_64_TABLE (X86_64_C4) },
1588 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1589 { REG_TABLE (REG_C6) },
1590 { REG_TABLE (REG_C7) },
252b5132 1591 /* c8 */
ce518a5f
L
1592 { "enterT", { Iw, Ib } },
1593 { "leaveT", { XX } },
ddab3d59
JB
1594 { "Jret{|f}P", { Iw } },
1595 { "Jret{|f}P", { XX } },
ce518a5f
L
1596 { "int3", { XX } },
1597 { "int", { Ib } },
4e7d34a6 1598 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1599 { "iretP", { XX } },
252b5132 1600 /* d0 */
1ceb70f8
L
1601 { REG_TABLE (REG_D0) },
1602 { REG_TABLE (REG_D1) },
1603 { REG_TABLE (REG_D2) },
1604 { REG_TABLE (REG_D3) },
4e7d34a6
L
1605 { X86_64_TABLE (X86_64_D4) },
1606 { X86_64_TABLE (X86_64_D5) },
ce518a5f
L
1607 { "(bad)", { XX } },
1608 { "xlat", { DSBX } },
252b5132
RH
1609 /* d8 */
1610 { FLOAT },
1611 { FLOAT },
1612 { FLOAT },
1613 { FLOAT },
1614 { FLOAT },
1615 { FLOAT },
1616 { FLOAT },
1617 { FLOAT },
1618 /* e0 */
ce518a5f
L
1619 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1620 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1621 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1622 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1623 { "inB", { AL, Ib } },
1624 { "inG", { zAX, Ib } },
1625 { "outB", { Ib, AL } },
1626 { "outG", { Ib, zAX } },
252b5132 1627 /* e8 */
ce518a5f
L
1628 { "callT", { Jv } },
1629 { "jmpT", { Jv } },
4e7d34a6 1630 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1631 { "jmp", { Jb } },
1632 { "inB", { AL, indirDX } },
1633 { "inG", { zAX, indirDX } },
1634 { "outB", { indirDX, AL } },
1635 { "outG", { indirDX, zAX } },
252b5132 1636 /* f0 */
ce518a5f
L
1637 { "(bad)", { XX } }, /* lock prefix */
1638 { "icebp", { XX } },
1639 { "(bad)", { XX } }, /* repne */
1640 { "(bad)", { XX } }, /* repz */
1641 { "hlt", { XX } },
1642 { "cmc", { XX } },
1ceb70f8
L
1643 { REG_TABLE (REG_F6) },
1644 { REG_TABLE (REG_F7) },
252b5132 1645 /* f8 */
ce518a5f
L
1646 { "clc", { XX } },
1647 { "stc", { XX } },
1648 { "cli", { XX } },
1649 { "sti", { XX } },
1650 { "cld", { XX } },
1651 { "std", { XX } },
1ceb70f8
L
1652 { REG_TABLE (REG_FE) },
1653 { REG_TABLE (REG_FF) },
252b5132
RH
1654};
1655
6439fc28 1656static const struct dis386 dis386_twobyte[] = {
252b5132 1657 /* 00 */
1ceb70f8
L
1658 { REG_TABLE (REG_0F00 ) },
1659 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1660 { "larS", { Gv, Ew } },
1661 { "lslS", { Gv, Ew } },
1662 { "(bad)", { XX } },
1663 { "syscall", { XX } },
1664 { "clts", { XX } },
1665 { "sysretP", { XX } },
252b5132 1666 /* 08 */
ce518a5f
L
1667 { "invd", { XX } },
1668 { "wbinvd", { XX } },
1669 { "(bad)", { XX } },
1670 { "ud2a", { XX } },
1671 { "(bad)", { XX } },
b5b1fc4f 1672 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1673 { "femms", { XX } },
1674 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1675 /* 10 */
1ceb70f8
L
1676 { PREFIX_TABLE (PREFIX_0F10) },
1677 { PREFIX_TABLE (PREFIX_0F11) },
1678 { PREFIX_TABLE (PREFIX_0F12) },
1679 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1680 { "unpcklpX", { XM, EXx } },
1681 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1682 { PREFIX_TABLE (PREFIX_0F16) },
1683 { MOD_TABLE (MOD_0F17) },
252b5132 1684 /* 18 */
1ceb70f8 1685 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1686 { "nopQ", { Ev } },
1687 { "nopQ", { Ev } },
1688 { "nopQ", { Ev } },
1689 { "nopQ", { Ev } },
1690 { "nopQ", { Ev } },
1691 { "nopQ", { Ev } },
ce518a5f 1692 { "nopQ", { Ev } },
252b5132 1693 /* 20 */
1ceb70f8
L
1694 { MOD_TABLE (MOD_0F20) },
1695 { MOD_TABLE (MOD_0F21) },
1696 { MOD_TABLE (MOD_0F22) },
1697 { MOD_TABLE (MOD_0F23) },
1698 { MOD_TABLE (MOD_0F24) },
c1e679ec 1699 { "(bad)", { XX } },
1ceb70f8 1700 { MOD_TABLE (MOD_0F26) },
ce518a5f 1701 { "(bad)", { XX } },
252b5132 1702 /* 28 */
09a2c6cf 1703 { "movapX", { XM, EXx } },
b6169b20 1704 { "movapX", { EXxS, XM } },
1ceb70f8
L
1705 { PREFIX_TABLE (PREFIX_0F2A) },
1706 { PREFIX_TABLE (PREFIX_0F2B) },
1707 { PREFIX_TABLE (PREFIX_0F2C) },
1708 { PREFIX_TABLE (PREFIX_0F2D) },
1709 { PREFIX_TABLE (PREFIX_0F2E) },
1710 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 1711 /* 30 */
ce518a5f
L
1712 { "wrmsr", { XX } },
1713 { "rdtsc", { XX } },
1714 { "rdmsr", { XX } },
1715 { "rdpmc", { XX } },
1716 { "sysenter", { XX } },
1717 { "sysexit", { XX } },
1718 { "(bad)", { XX } },
47dd174c 1719 { "getsec", { XX } },
252b5132 1720 /* 38 */
4e7d34a6 1721 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
ce518a5f 1722 { "(bad)", { XX } },
4e7d34a6 1723 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
ce518a5f
L
1724 { "(bad)", { XX } },
1725 { "(bad)", { XX } },
1726 { "(bad)", { XX } },
1727 { "(bad)", { XX } },
1728 { "(bad)", { XX } },
252b5132 1729 /* 40 */
b19d5385
JB
1730 { "cmovoS", { Gv, Ev } },
1731 { "cmovnoS", { Gv, Ev } },
1732 { "cmovbS", { Gv, Ev } },
1733 { "cmovaeS", { Gv, Ev } },
1734 { "cmoveS", { Gv, Ev } },
1735 { "cmovneS", { Gv, Ev } },
1736 { "cmovbeS", { Gv, Ev } },
1737 { "cmovaS", { Gv, Ev } },
252b5132 1738 /* 48 */
b19d5385
JB
1739 { "cmovsS", { Gv, Ev } },
1740 { "cmovnsS", { Gv, Ev } },
1741 { "cmovpS", { Gv, Ev } },
1742 { "cmovnpS", { Gv, Ev } },
1743 { "cmovlS", { Gv, Ev } },
1744 { "cmovgeS", { Gv, Ev } },
1745 { "cmovleS", { Gv, Ev } },
1746 { "cmovgS", { Gv, Ev } },
252b5132 1747 /* 50 */
75c135a8 1748 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
1749 { PREFIX_TABLE (PREFIX_0F51) },
1750 { PREFIX_TABLE (PREFIX_0F52) },
1751 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
1752 { "andpX", { XM, EXx } },
1753 { "andnpX", { XM, EXx } },
1754 { "orpX", { XM, EXx } },
1755 { "xorpX", { XM, EXx } },
252b5132 1756 /* 58 */
1ceb70f8
L
1757 { PREFIX_TABLE (PREFIX_0F58) },
1758 { PREFIX_TABLE (PREFIX_0F59) },
1759 { PREFIX_TABLE (PREFIX_0F5A) },
1760 { PREFIX_TABLE (PREFIX_0F5B) },
1761 { PREFIX_TABLE (PREFIX_0F5C) },
1762 { PREFIX_TABLE (PREFIX_0F5D) },
1763 { PREFIX_TABLE (PREFIX_0F5E) },
1764 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 1765 /* 60 */
1ceb70f8
L
1766 { PREFIX_TABLE (PREFIX_0F60) },
1767 { PREFIX_TABLE (PREFIX_0F61) },
1768 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
1769 { "packsswb", { MX, EM } },
1770 { "pcmpgtb", { MX, EM } },
1771 { "pcmpgtw", { MX, EM } },
1772 { "pcmpgtd", { MX, EM } },
1773 { "packuswb", { MX, EM } },
252b5132 1774 /* 68 */
ce518a5f
L
1775 { "punpckhbw", { MX, EM } },
1776 { "punpckhwd", { MX, EM } },
1777 { "punpckhdq", { MX, EM } },
1778 { "packssdw", { MX, EM } },
1ceb70f8
L
1779 { PREFIX_TABLE (PREFIX_0F6C) },
1780 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 1781 { "movK", { MX, Edq } },
1ceb70f8 1782 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 1783 /* 70 */
1ceb70f8
L
1784 { PREFIX_TABLE (PREFIX_0F70) },
1785 { REG_TABLE (REG_0F71) },
1786 { REG_TABLE (REG_0F72) },
1787 { REG_TABLE (REG_0F73) },
ce518a5f
L
1788 { "pcmpeqb", { MX, EM } },
1789 { "pcmpeqw", { MX, EM } },
1790 { "pcmpeqd", { MX, EM } },
1791 { "emms", { XX } },
252b5132 1792 /* 78 */
1ceb70f8
L
1793 { PREFIX_TABLE (PREFIX_0F78) },
1794 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 1795 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
c1e679ec 1796 { "(bad)", { XX } },
1ceb70f8
L
1797 { PREFIX_TABLE (PREFIX_0F7C) },
1798 { PREFIX_TABLE (PREFIX_0F7D) },
1799 { PREFIX_TABLE (PREFIX_0F7E) },
1800 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 1801 /* 80 */
ce518a5f
L
1802 { "joH", { Jv, XX, cond_jump_flag } },
1803 { "jnoH", { Jv, XX, cond_jump_flag } },
1804 { "jbH", { Jv, XX, cond_jump_flag } },
1805 { "jaeH", { Jv, XX, cond_jump_flag } },
1806 { "jeH", { Jv, XX, cond_jump_flag } },
1807 { "jneH", { Jv, XX, cond_jump_flag } },
1808 { "jbeH", { Jv, XX, cond_jump_flag } },
1809 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 1810 /* 88 */
ce518a5f
L
1811 { "jsH", { Jv, XX, cond_jump_flag } },
1812 { "jnsH", { Jv, XX, cond_jump_flag } },
1813 { "jpH", { Jv, XX, cond_jump_flag } },
1814 { "jnpH", { Jv, XX, cond_jump_flag } },
1815 { "jlH", { Jv, XX, cond_jump_flag } },
1816 { "jgeH", { Jv, XX, cond_jump_flag } },
1817 { "jleH", { Jv, XX, cond_jump_flag } },
1818 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 1819 /* 90 */
ce518a5f
L
1820 { "seto", { Eb } },
1821 { "setno", { Eb } },
1822 { "setb", { Eb } },
1823 { "setae", { Eb } },
1824 { "sete", { Eb } },
1825 { "setne", { Eb } },
1826 { "setbe", { Eb } },
1827 { "seta", { Eb } },
252b5132 1828 /* 98 */
ce518a5f
L
1829 { "sets", { Eb } },
1830 { "setns", { Eb } },
1831 { "setp", { Eb } },
1832 { "setnp", { Eb } },
1833 { "setl", { Eb } },
1834 { "setge", { Eb } },
1835 { "setle", { Eb } },
1836 { "setg", { Eb } },
252b5132 1837 /* a0 */
ce518a5f
L
1838 { "pushT", { fs } },
1839 { "popT", { fs } },
1840 { "cpuid", { XX } },
1841 { "btS", { Ev, Gv } },
1842 { "shldS", { Ev, Gv, Ib } },
1843 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
1844 { REG_TABLE (REG_0FA6) },
1845 { REG_TABLE (REG_0FA7) },
252b5132 1846 /* a8 */
ce518a5f
L
1847 { "pushT", { gs } },
1848 { "popT", { gs } },
1849 { "rsm", { XX } },
1850 { "btsS", { Ev, Gv } },
1851 { "shrdS", { Ev, Gv, Ib } },
1852 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 1853 { REG_TABLE (REG_0FAE) },
ce518a5f 1854 { "imulS", { Gv, Ev } },
252b5132 1855 /* b0 */
ce518a5f
L
1856 { "cmpxchgB", { Eb, Gb } },
1857 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 1858 { MOD_TABLE (MOD_0FB2) },
ce518a5f 1859 { "btrS", { Ev, Gv } },
1ceb70f8
L
1860 { MOD_TABLE (MOD_0FB4) },
1861 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
1862 { "movz{bR|x}", { Gv, Eb } },
1863 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 1864 /* b8 */
1ceb70f8 1865 { PREFIX_TABLE (PREFIX_0FB8) },
ce518a5f 1866 { "ud2b", { XX } },
1ceb70f8 1867 { REG_TABLE (REG_0FBA) },
ce518a5f
L
1868 { "btcS", { Ev, Gv } },
1869 { "bsfS", { Gv, Ev } },
1ceb70f8 1870 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
1871 { "movs{bR|x}", { Gv, Eb } },
1872 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 1873 /* c0 */
ce518a5f
L
1874 { "xaddB", { Eb, Gb } },
1875 { "xaddS", { Ev, Gv } },
1ceb70f8 1876 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 1877 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
1878 { "pinsrw", { MX, Edqw, Ib } },
1879 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 1880 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 1881 { REG_TABLE (REG_0FC7) },
252b5132 1882 /* c8 */
ce518a5f
L
1883 { "bswap", { RMeAX } },
1884 { "bswap", { RMeCX } },
1885 { "bswap", { RMeDX } },
1886 { "bswap", { RMeBX } },
1887 { "bswap", { RMeSP } },
1888 { "bswap", { RMeBP } },
1889 { "bswap", { RMeSI } },
1890 { "bswap", { RMeDI } },
252b5132 1891 /* d0 */
1ceb70f8 1892 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
1893 { "psrlw", { MX, EM } },
1894 { "psrld", { MX, EM } },
1895 { "psrlq", { MX, EM } },
1896 { "paddq", { MX, EM } },
1897 { "pmullw", { MX, EM } },
1ceb70f8 1898 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 1899 { MOD_TABLE (MOD_0FD7) },
252b5132 1900 /* d8 */
ce518a5f
L
1901 { "psubusb", { MX, EM } },
1902 { "psubusw", { MX, EM } },
1903 { "pminub", { MX, EM } },
1904 { "pand", { MX, EM } },
1905 { "paddusb", { MX, EM } },
1906 { "paddusw", { MX, EM } },
1907 { "pmaxub", { MX, EM } },
1908 { "pandn", { MX, EM } },
252b5132 1909 /* e0 */
ce518a5f
L
1910 { "pavgb", { MX, EM } },
1911 { "psraw", { MX, EM } },
1912 { "psrad", { MX, EM } },
1913 { "pavgw", { MX, EM } },
1914 { "pmulhuw", { MX, EM } },
1915 { "pmulhw", { MX, EM } },
1ceb70f8
L
1916 { PREFIX_TABLE (PREFIX_0FE6) },
1917 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 1918 /* e8 */
ce518a5f
L
1919 { "psubsb", { MX, EM } },
1920 { "psubsw", { MX, EM } },
1921 { "pminsw", { MX, EM } },
1922 { "por", { MX, EM } },
1923 { "paddsb", { MX, EM } },
1924 { "paddsw", { MX, EM } },
1925 { "pmaxsw", { MX, EM } },
1926 { "pxor", { MX, EM } },
252b5132 1927 /* f0 */
1ceb70f8 1928 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
1929 { "psllw", { MX, EM } },
1930 { "pslld", { MX, EM } },
1931 { "psllq", { MX, EM } },
1932 { "pmuludq", { MX, EM } },
1933 { "pmaddwd", { MX, EM } },
1934 { "psadbw", { MX, EM } },
1ceb70f8 1935 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 1936 /* f8 */
ce518a5f
L
1937 { "psubb", { MX, EM } },
1938 { "psubw", { MX, EM } },
1939 { "psubd", { MX, EM } },
1940 { "psubq", { MX, EM } },
1941 { "paddb", { MX, EM } },
1942 { "paddw", { MX, EM } },
1943 { "paddd", { MX, EM } },
1944 { "(bad)", { XX } },
252b5132
RH
1945};
1946
1947static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
1948 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1949 /* ------------------------------- */
1950 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
1951 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
1952 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
1953 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
1954 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
1955 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
1956 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
1957 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
1958 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
1959 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
1960 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
1961 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
1962 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
1963 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
1964 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
1965 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
1966 /* ------------------------------- */
1967 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
1968};
1969
1970static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
1971 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1972 /* ------------------------------- */
252b5132 1973 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 1974 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 1975 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 1976 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 1977 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
1978 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
1979 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 1980 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
1981 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
1982 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 1983 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 1984 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 1985 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 1986 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 1987 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 1988 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
1989 /* ------------------------------- */
1990 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1991};
1992
252b5132
RH
1993static char obuf[100];
1994static char *obufp;
ea397f5b 1995static char *mnemonicendp;
252b5132
RH
1996static char scratchbuf[100];
1997static unsigned char *start_codep;
1998static unsigned char *insn_codep;
1999static unsigned char *codep;
f16cd0d5
L
2000static int last_lock_prefix;
2001static int last_repz_prefix;
2002static int last_repnz_prefix;
2003static int last_data_prefix;
2004static int last_addr_prefix;
2005static int last_rex_prefix;
2006static int last_seg_prefix;
2007#define MAX_CODE_LENGTH 15
2008/* We can up to 14 prefixes since the maximum instruction length is
2009 15bytes. */
2010static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2011static disassemble_info *the_info;
7967e09e
L
2012static struct
2013 {
2014 int mod;
7967e09e 2015 int reg;
484c222e 2016 int rm;
7967e09e
L
2017 }
2018modrm;
4bba6815 2019static unsigned char need_modrm;
c0f3af97
L
2020static struct
2021 {
2022 int register_specifier;
2023 int length;
2024 int prefix;
2025 int w;
2026 }
2027vex;
2028static unsigned char need_vex;
2029static unsigned char need_vex_reg;
dae39acc 2030static unsigned char vex_w_done;
252b5132 2031
ea397f5b
L
2032struct op
2033 {
2034 const char *name;
2035 unsigned int len;
2036 };
2037
4bba6815
AM
2038/* If we are accessing mod/rm/reg without need_modrm set, then the
2039 values are stale. Hitting this abort likely indicates that you
2040 need to update onebyte_has_modrm or twobyte_has_modrm. */
2041#define MODRM_CHECK if (!need_modrm) abort ()
2042
d708bcba
AM
2043static const char **names64;
2044static const char **names32;
2045static const char **names16;
2046static const char **names8;
2047static const char **names8rex;
2048static const char **names_seg;
db51cc60
L
2049static const char *index64;
2050static const char *index32;
d708bcba
AM
2051static const char **index16;
2052
2053static const char *intel_names64[] = {
2054 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2055 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2056};
2057static const char *intel_names32[] = {
2058 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2059 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2060};
2061static const char *intel_names16[] = {
2062 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2063 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2064};
2065static const char *intel_names8[] = {
2066 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2067};
2068static const char *intel_names8rex[] = {
2069 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2070 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2071};
2072static const char *intel_names_seg[] = {
2073 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2074};
db51cc60
L
2075static const char *intel_index64 = "riz";
2076static const char *intel_index32 = "eiz";
d708bcba
AM
2077static const char *intel_index16[] = {
2078 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2079};
2080
2081static const char *att_names64[] = {
2082 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2083 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2084};
d708bcba
AM
2085static const char *att_names32[] = {
2086 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2087 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2088};
d708bcba
AM
2089static const char *att_names16[] = {
2090 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2091 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2092};
d708bcba
AM
2093static const char *att_names8[] = {
2094 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2095};
d708bcba
AM
2096static const char *att_names8rex[] = {
2097 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2098 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2099};
d708bcba
AM
2100static const char *att_names_seg[] = {
2101 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2102};
db51cc60
L
2103static const char *att_index64 = "%riz";
2104static const char *att_index32 = "%eiz";
d708bcba
AM
2105static const char *att_index16[] = {
2106 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2107};
2108
1ceb70f8
L
2109static const struct dis386 reg_table[][8] = {
2110 /* REG_80 */
252b5132 2111 {
ce518a5f
L
2112 { "addA", { Eb, Ib } },
2113 { "orA", { Eb, Ib } },
2114 { "adcA", { Eb, Ib } },
2115 { "sbbA", { Eb, Ib } },
2116 { "andA", { Eb, Ib } },
2117 { "subA", { Eb, Ib } },
2118 { "xorA", { Eb, Ib } },
2119 { "cmpA", { Eb, Ib } },
252b5132 2120 },
1ceb70f8 2121 /* REG_81 */
252b5132 2122 {
ce518a5f
L
2123 { "addQ", { Ev, Iv } },
2124 { "orQ", { Ev, Iv } },
2125 { "adcQ", { Ev, Iv } },
2126 { "sbbQ", { Ev, Iv } },
2127 { "andQ", { Ev, Iv } },
2128 { "subQ", { Ev, Iv } },
2129 { "xorQ", { Ev, Iv } },
2130 { "cmpQ", { Ev, Iv } },
252b5132 2131 },
1ceb70f8 2132 /* REG_82 */
252b5132 2133 {
ce518a5f
L
2134 { "addQ", { Ev, sIb } },
2135 { "orQ", { Ev, sIb } },
2136 { "adcQ", { Ev, sIb } },
2137 { "sbbQ", { Ev, sIb } },
2138 { "andQ", { Ev, sIb } },
2139 { "subQ", { Ev, sIb } },
2140 { "xorQ", { Ev, sIb } },
2141 { "cmpQ", { Ev, sIb } },
252b5132 2142 },
1ceb70f8 2143 /* REG_8F */
4e7d34a6
L
2144 {
2145 { "popU", { stackEv } },
c48244a5 2146 { XOP_8F_TABLE (XOP_09) },
4e7d34a6
L
2147 { "(bad)", { XX } },
2148 { "(bad)", { XX } },
2149 { "(bad)", { XX } },
f88c9eb0 2150 { XOP_8F_TABLE (XOP_09) },
4e7d34a6
L
2151 { "(bad)", { XX } },
2152 { "(bad)", { XX } },
2153 },
1ceb70f8 2154 /* REG_C0 */
252b5132 2155 {
ce518a5f
L
2156 { "rolA", { Eb, Ib } },
2157 { "rorA", { Eb, Ib } },
2158 { "rclA", { Eb, Ib } },
2159 { "rcrA", { Eb, Ib } },
2160 { "shlA", { Eb, Ib } },
2161 { "shrA", { Eb, Ib } },
2162 { "(bad)", { XX } },
2163 { "sarA", { Eb, Ib } },
252b5132 2164 },
1ceb70f8 2165 /* REG_C1 */
252b5132 2166 {
ce518a5f
L
2167 { "rolQ", { Ev, Ib } },
2168 { "rorQ", { Ev, Ib } },
2169 { "rclQ", { Ev, Ib } },
2170 { "rcrQ", { Ev, Ib } },
2171 { "shlQ", { Ev, Ib } },
2172 { "shrQ", { Ev, Ib } },
2173 { "(bad)", { XX } },
2174 { "sarQ", { Ev, Ib } },
252b5132 2175 },
1ceb70f8 2176 /* REG_C6 */
4e7d34a6
L
2177 {
2178 { "movA", { Eb, Ib } },
2179 { "(bad)", { XX } },
2180 { "(bad)", { XX } },
2181 { "(bad)", { XX } },
2182 { "(bad)", { XX } },
2183 { "(bad)", { XX } },
2184 { "(bad)", { XX } },
2185 { "(bad)", { XX } },
2186 },
1ceb70f8 2187 /* REG_C7 */
4e7d34a6
L
2188 {
2189 { "movQ", { Ev, Iv } },
2190 { "(bad)", { XX } },
2191 { "(bad)", { XX } },
2192 { "(bad)", { XX } },
2193 { "(bad)", { XX } },
2194 { "(bad)", { XX } },
2195 { "(bad)", { XX } },
2196 { "(bad)", { XX } },
2197 },
1ceb70f8 2198 /* REG_D0 */
252b5132 2199 {
ce518a5f
L
2200 { "rolA", { Eb, I1 } },
2201 { "rorA", { Eb, I1 } },
2202 { "rclA", { Eb, I1 } },
2203 { "rcrA", { Eb, I1 } },
2204 { "shlA", { Eb, I1 } },
2205 { "shrA", { Eb, I1 } },
2206 { "(bad)", { XX } },
2207 { "sarA", { Eb, I1 } },
252b5132 2208 },
1ceb70f8 2209 /* REG_D1 */
252b5132 2210 {
ce518a5f
L
2211 { "rolQ", { Ev, I1 } },
2212 { "rorQ", { Ev, I1 } },
2213 { "rclQ", { Ev, I1 } },
2214 { "rcrQ", { Ev, I1 } },
2215 { "shlQ", { Ev, I1 } },
2216 { "shrQ", { Ev, I1 } },
2217 { "(bad)", { XX } },
2218 { "sarQ", { Ev, I1 } },
252b5132 2219 },
1ceb70f8 2220 /* REG_D2 */
252b5132 2221 {
ce518a5f
L
2222 { "rolA", { Eb, CL } },
2223 { "rorA", { Eb, CL } },
2224 { "rclA", { Eb, CL } },
2225 { "rcrA", { Eb, CL } },
2226 { "shlA", { Eb, CL } },
2227 { "shrA", { Eb, CL } },
2228 { "(bad)", { XX } },
2229 { "sarA", { Eb, CL } },
252b5132 2230 },
1ceb70f8 2231 /* REG_D3 */
252b5132 2232 {
ce518a5f
L
2233 { "rolQ", { Ev, CL } },
2234 { "rorQ", { Ev, CL } },
2235 { "rclQ", { Ev, CL } },
2236 { "rcrQ", { Ev, CL } },
2237 { "shlQ", { Ev, CL } },
2238 { "shrQ", { Ev, CL } },
2239 { "(bad)", { XX } },
2240 { "sarQ", { Ev, CL } },
252b5132 2241 },
1ceb70f8 2242 /* REG_F6 */
252b5132 2243 {
ce518a5f 2244 { "testA", { Eb, Ib } },
058f233b 2245 { "(bad)", { XX } },
ce518a5f
L
2246 { "notA", { Eb } },
2247 { "negA", { Eb } },
2248 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2249 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2250 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2251 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2252 },
1ceb70f8 2253 /* REG_F7 */
252b5132 2254 {
ce518a5f
L
2255 { "testQ", { Ev, Iv } },
2256 { "(bad)", { XX } },
2257 { "notQ", { Ev } },
2258 { "negQ", { Ev } },
2259 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2260 { "imulQ", { Ev } },
2261 { "divQ", { Ev } },
2262 { "idivQ", { Ev } },
252b5132 2263 },
1ceb70f8 2264 /* REG_FE */
252b5132 2265 {
ce518a5f
L
2266 { "incA", { Eb } },
2267 { "decA", { Eb } },
2268 { "(bad)", { XX } },
2269 { "(bad)", { XX } },
2270 { "(bad)", { XX } },
2271 { "(bad)", { XX } },
2272 { "(bad)", { XX } },
2273 { "(bad)", { XX } },
252b5132 2274 },
1ceb70f8 2275 /* REG_FF */
252b5132 2276 {
ce518a5f
L
2277 { "incQ", { Ev } },
2278 { "decQ", { Ev } },
2279 { "callT", { indirEv } },
2280 { "JcallT", { indirEp } },
2281 { "jmpT", { indirEv } },
2282 { "JjmpT", { indirEp } },
2283 { "pushU", { stackEv } },
2284 { "(bad)", { XX } },
252b5132 2285 },
1ceb70f8 2286 /* REG_0F00 */
252b5132 2287 {
ce518a5f
L
2288 { "sldtD", { Sv } },
2289 { "strD", { Sv } },
2290 { "lldt", { Ew } },
2291 { "ltr", { Ew } },
2292 { "verr", { Ew } },
2293 { "verw", { Ew } },
2294 { "(bad)", { XX } },
2295 { "(bad)", { XX } },
252b5132 2296 },
1ceb70f8 2297 /* REG_0F01 */
252b5132 2298 {
1ceb70f8
L
2299 { MOD_TABLE (MOD_0F01_REG_0) },
2300 { MOD_TABLE (MOD_0F01_REG_1) },
2301 { MOD_TABLE (MOD_0F01_REG_2) },
2302 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f
L
2303 { "smswD", { Sv } },
2304 { "(bad)", { XX } },
2305 { "lmsw", { Ew } },
1ceb70f8 2306 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2307 },
b5b1fc4f 2308 /* REG_0F0D */
252b5132 2309 {
4e7d34a6
L
2310 { "prefetch", { Eb } },
2311 { "prefetchw", { Eb } },
2312 { "(bad)", { XX } },
2313 { "(bad)", { XX } },
2314 { "(bad)", { XX } },
2315 { "(bad)", { XX } },
2316 { "(bad)", { XX } },
2317 { "(bad)", { XX } },
252b5132 2318 },
1ceb70f8 2319 /* REG_0F18 */
252b5132 2320 {
1ceb70f8
L
2321 { MOD_TABLE (MOD_0F18_REG_0) },
2322 { MOD_TABLE (MOD_0F18_REG_1) },
2323 { MOD_TABLE (MOD_0F18_REG_2) },
2324 { MOD_TABLE (MOD_0F18_REG_3) },
ce518a5f
L
2325 { "(bad)", { XX } },
2326 { "(bad)", { XX } },
2327 { "(bad)", { XX } },
2328 { "(bad)", { XX } },
252b5132 2329 },
1ceb70f8 2330 /* REG_0F71 */
a6bd098c 2331 {
ce518a5f
L
2332 { "(bad)", { XX } },
2333 { "(bad)", { XX } },
1ceb70f8 2334 { MOD_TABLE (MOD_0F71_REG_2) },
ce518a5f 2335 { "(bad)", { XX } },
1ceb70f8 2336 { MOD_TABLE (MOD_0F71_REG_4) },
ce518a5f 2337 { "(bad)", { XX } },
1ceb70f8 2338 { MOD_TABLE (MOD_0F71_REG_6) },
ce518a5f 2339 { "(bad)", { XX } },
a6bd098c 2340 },
1ceb70f8 2341 /* REG_0F72 */
a6bd098c 2342 {
ce518a5f
L
2343 { "(bad)", { XX } },
2344 { "(bad)", { XX } },
1ceb70f8 2345 { MOD_TABLE (MOD_0F72_REG_2) },
ce518a5f 2346 { "(bad)", { XX } },
1ceb70f8 2347 { MOD_TABLE (MOD_0F72_REG_4) },
ce518a5f 2348 { "(bad)", { XX } },
1ceb70f8 2349 { MOD_TABLE (MOD_0F72_REG_6) },
ce518a5f 2350 { "(bad)", { XX } },
a6bd098c 2351 },
1ceb70f8 2352 /* REG_0F73 */
252b5132 2353 {
ce518a5f
L
2354 { "(bad)", { XX } },
2355 { "(bad)", { XX } },
1ceb70f8
L
2356 { MOD_TABLE (MOD_0F73_REG_2) },
2357 { MOD_TABLE (MOD_0F73_REG_3) },
ce518a5f 2358 { "(bad)", { XX } },
ce518a5f 2359 { "(bad)", { XX } },
1ceb70f8
L
2360 { MOD_TABLE (MOD_0F73_REG_6) },
2361 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2362 },
1ceb70f8 2363 /* REG_0FA6 */
252b5132 2364 {
4e7d34a6
L
2365 { "montmul", { { OP_0f07, 0 } } },
2366 { "xsha1", { { OP_0f07, 0 } } },
2367 { "xsha256", { { OP_0f07, 0 } } },
2368 { "(bad)", { { OP_0f07, 0 } } },
2369 { "(bad)", { { OP_0f07, 0 } } },
2370 { "(bad)", { { OP_0f07, 0 } } },
2371 { "(bad)", { { OP_0f07, 0 } } },
2372 { "(bad)", { { OP_0f07, 0 } } },
2373 },
1ceb70f8 2374 /* REG_0FA7 */
4e7d34a6
L
2375 {
2376 { "xstore-rng", { { OP_0f07, 0 } } },
2377 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2378 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2379 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2380 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2381 { "xcrypt-ofb", { { OP_0f07, 0 } } },
2382 { "(bad)", { { OP_0f07, 0 } } },
2383 { "(bad)", { { OP_0f07, 0 } } },
2384 },
1ceb70f8 2385 /* REG_0FAE */
4e7d34a6 2386 {
1ceb70f8
L
2387 { MOD_TABLE (MOD_0FAE_REG_0) },
2388 { MOD_TABLE (MOD_0FAE_REG_1) },
2389 { MOD_TABLE (MOD_0FAE_REG_2) },
2390 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2391 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2392 { MOD_TABLE (MOD_0FAE_REG_5) },
2393 { MOD_TABLE (MOD_0FAE_REG_6) },
2394 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2395 },
1ceb70f8 2396 /* REG_0FBA */
252b5132 2397 {
ce518a5f
L
2398 { "(bad)", { XX } },
2399 { "(bad)", { XX } },
d8faab4e
L
2400 { "(bad)", { XX } },
2401 { "(bad)", { XX } },
4e7d34a6
L
2402 { "btQ", { Ev, Ib } },
2403 { "btsQ", { Ev, Ib } },
2404 { "btrQ", { Ev, Ib } },
2405 { "btcQ", { Ev, Ib } },
c608c12e 2406 },
1ceb70f8 2407 /* REG_0FC7 */
c608c12e 2408 {
b844680a 2409 { "(bad)", { XX } },
4e7d34a6 2410 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
d8faab4e 2411 { "(bad)", { XX } },
b844680a
L
2412 { "(bad)", { XX } },
2413 { "(bad)", { XX } },
2414 { "(bad)", { XX } },
1ceb70f8
L
2415 { MOD_TABLE (MOD_0FC7_REG_6) },
2416 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2417 },
c0f3af97
L
2418 /* REG_VEX_71 */
2419 {
2420 { "(bad)", { XX } },
2421 { "(bad)", { XX } },
2422 { MOD_TABLE (MOD_VEX_71_REG_2) },
2423 { "(bad)", { XX } },
2424 { MOD_TABLE (MOD_VEX_71_REG_4) },
2425 { "(bad)", { XX } },
2426 { MOD_TABLE (MOD_VEX_71_REG_6) },
2427 { "(bad)", { XX } },
2428 },
2429 /* REG_VEX_72 */
2430 {
2431 { "(bad)", { XX } },
2432 { "(bad)", { XX } },
2433 { MOD_TABLE (MOD_VEX_72_REG_2) },
2434 { "(bad)", { XX } },
2435 { MOD_TABLE (MOD_VEX_72_REG_4) },
2436 { "(bad)", { XX } },
2437 { MOD_TABLE (MOD_VEX_72_REG_6) },
2438 { "(bad)", { XX } },
2439 },
2440 /* REG_VEX_73 */
2441 {
2442 { "(bad)", { XX } },
2443 { "(bad)", { XX } },
2444 { MOD_TABLE (MOD_VEX_73_REG_2) },
2445 { MOD_TABLE (MOD_VEX_73_REG_3) },
2446 { "(bad)", { XX } },
2447 { "(bad)", { XX } },
2448 { MOD_TABLE (MOD_VEX_73_REG_6) },
2449 { MOD_TABLE (MOD_VEX_73_REG_7) },
2450 },
2451 /* REG_VEX_AE */
2452 {
2453 { "(bad)", { XX } },
2454 { "(bad)", { XX } },
2455 { MOD_TABLE (MOD_VEX_AE_REG_2) },
2456 { MOD_TABLE (MOD_VEX_AE_REG_3) },
2457 { "(bad)", { XX } },
2458 { "(bad)", { XX } },
2459 { "(bad)", { XX } },
2460 { "(bad)", { XX } },
2461 },
f88c9eb0
SP
2462 /* REG_XOP_LWPCB */
2463 {
2464 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2465 { "slwpcb", { { OP_LWPCB_E, 0 } } },
2466 { "(bad)", { XX } },
2467 { "(bad)", { XX } },
2468 { "(bad)", { XX } },
2469 { "(bad)", { XX } },
2470 { "(bad)", { XX } },
2471 { "(bad)", { XX } },
2472 },
2473 /* REG_XOP_LWP */
2474 {
2475 { "lwpins", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
2476 { "lwpval", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
2477 { "(bad)", { XX } },
2478 { "(bad)", { XX } },
2479 { "(bad)", { XX } },
2480 { "(bad)", { XX } },
2481 { "(bad)", { XX } },
2482 { "(bad)", { XX } },
2483 },
4e7d34a6
L
2484};
2485
1ceb70f8
L
2486static const struct dis386 prefix_table[][4] = {
2487 /* PREFIX_90 */
252b5132 2488 {
4e7d34a6
L
2489 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2490 { "pause", { XX } },
2491 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2492 { "(bad)", { XX } },
0f10071e 2493 },
4e7d34a6 2494
1ceb70f8 2495 /* PREFIX_0F10 */
cc0ec051 2496 {
4e7d34a6
L
2497 { "movups", { XM, EXx } },
2498 { "movss", { XM, EXd } },
2499 { "movupd", { XM, EXx } },
2500 { "movsd", { XM, EXq } },
30d1c836 2501 },
4e7d34a6 2502
1ceb70f8 2503 /* PREFIX_0F11 */
30d1c836 2504 {
b6169b20 2505 { "movups", { EXxS, XM } },
fa99fab2 2506 { "movss", { EXdS, XM } },
b6169b20 2507 { "movupd", { EXxS, XM } },
fa99fab2 2508 { "movsd", { EXqS, XM } },
4e7d34a6 2509 },
252b5132 2510
1ceb70f8 2511 /* PREFIX_0F12 */
c608c12e 2512 {
1ceb70f8 2513 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2514 { "movsldup", { XM, EXx } },
2515 { "movlpd", { XM, EXq } },
2516 { "movddup", { XM, EXq } },
c608c12e 2517 },
4e7d34a6 2518
1ceb70f8 2519 /* PREFIX_0F16 */
c608c12e 2520 {
1ceb70f8 2521 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2522 { "movshdup", { XM, EXx } },
2523 { "movhpd", { XM, EXq } },
058f233b 2524 { "(bad)", { XX } },
c608c12e 2525 },
4e7d34a6 2526
1ceb70f8 2527 /* PREFIX_0F2A */
c608c12e 2528 {
09335d05 2529 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2530 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2531 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2532 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2533 },
4e7d34a6 2534
1ceb70f8 2535 /* PREFIX_0F2B */
c608c12e 2536 {
75c135a8
L
2537 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2538 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2539 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2540 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2541 },
4e7d34a6 2542
1ceb70f8 2543 /* PREFIX_0F2C */
c608c12e 2544 {
09335d05
L
2545 { "cvttps2pi", { MXC, EXq } },
2546 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2547 { "cvttpd2pi", { MXC, EXx } },
09335d05 2548 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2549 },
4e7d34a6 2550
1ceb70f8 2551 /* PREFIX_0F2D */
c608c12e 2552 {
4e7d34a6
L
2553 { "cvtps2pi", { MXC, EXq } },
2554 { "cvtss2siY", { Gv, EXd } },
2555 { "cvtpd2pi", { MXC, EXx } },
2556 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2557 },
4e7d34a6 2558
1ceb70f8 2559 /* PREFIX_0F2E */
c608c12e 2560 {
4e7d34a6
L
2561 { "ucomiss",{ XM, EXd } },
2562 { "(bad)", { XX } },
2563 { "ucomisd",{ XM, EXq } },
2564 { "(bad)", { XX } },
c608c12e 2565 },
4e7d34a6 2566
1ceb70f8 2567 /* PREFIX_0F2F */
c608c12e 2568 {
4e7d34a6
L
2569 { "comiss", { XM, EXd } },
2570 { "(bad)", { XX } },
2571 { "comisd", { XM, EXq } },
2572 { "(bad)", { XX } },
c608c12e 2573 },
4e7d34a6 2574
1ceb70f8 2575 /* PREFIX_0F51 */
c608c12e 2576 {
4e7d34a6
L
2577 { "sqrtps", { XM, EXx } },
2578 { "sqrtss", { XM, EXd } },
2579 { "sqrtpd", { XM, EXx } },
2580 { "sqrtsd", { XM, EXq } },
c608c12e 2581 },
4e7d34a6 2582
1ceb70f8 2583 /* PREFIX_0F52 */
c608c12e 2584 {
4e7d34a6
L
2585 { "rsqrtps",{ XM, EXx } },
2586 { "rsqrtss",{ XM, EXd } },
058f233b
L
2587 { "(bad)", { XX } },
2588 { "(bad)", { XX } },
c608c12e 2589 },
4e7d34a6 2590
1ceb70f8 2591 /* PREFIX_0F53 */
c608c12e 2592 {
4e7d34a6
L
2593 { "rcpps", { XM, EXx } },
2594 { "rcpss", { XM, EXd } },
058f233b
L
2595 { "(bad)", { XX } },
2596 { "(bad)", { XX } },
c608c12e 2597 },
4e7d34a6 2598
1ceb70f8 2599 /* PREFIX_0F58 */
c608c12e 2600 {
4e7d34a6
L
2601 { "addps", { XM, EXx } },
2602 { "addss", { XM, EXd } },
2603 { "addpd", { XM, EXx } },
2604 { "addsd", { XM, EXq } },
c608c12e 2605 },
4e7d34a6 2606
1ceb70f8 2607 /* PREFIX_0F59 */
c608c12e 2608 {
4e7d34a6
L
2609 { "mulps", { XM, EXx } },
2610 { "mulss", { XM, EXd } },
2611 { "mulpd", { XM, EXx } },
2612 { "mulsd", { XM, EXq } },
041bd2e0 2613 },
4e7d34a6 2614
1ceb70f8 2615 /* PREFIX_0F5A */
041bd2e0 2616 {
4e7d34a6
L
2617 { "cvtps2pd", { XM, EXq } },
2618 { "cvtss2sd", { XM, EXd } },
2619 { "cvtpd2ps", { XM, EXx } },
2620 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2621 },
4e7d34a6 2622
1ceb70f8 2623 /* PREFIX_0F5B */
041bd2e0 2624 {
09a2c6cf
L
2625 { "cvtdq2ps", { XM, EXx } },
2626 { "cvttps2dq", { XM, EXx } },
2627 { "cvtps2dq", { XM, EXx } },
058f233b 2628 { "(bad)", { XX } },
041bd2e0 2629 },
4e7d34a6 2630
1ceb70f8 2631 /* PREFIX_0F5C */
041bd2e0 2632 {
4e7d34a6
L
2633 { "subps", { XM, EXx } },
2634 { "subss", { XM, EXd } },
2635 { "subpd", { XM, EXx } },
2636 { "subsd", { XM, EXq } },
041bd2e0 2637 },
4e7d34a6 2638
1ceb70f8 2639 /* PREFIX_0F5D */
041bd2e0 2640 {
4e7d34a6
L
2641 { "minps", { XM, EXx } },
2642 { "minss", { XM, EXd } },
2643 { "minpd", { XM, EXx } },
2644 { "minsd", { XM, EXq } },
041bd2e0 2645 },
4e7d34a6 2646
1ceb70f8 2647 /* PREFIX_0F5E */
041bd2e0 2648 {
4e7d34a6
L
2649 { "divps", { XM, EXx } },
2650 { "divss", { XM, EXd } },
2651 { "divpd", { XM, EXx } },
2652 { "divsd", { XM, EXq } },
041bd2e0 2653 },
4e7d34a6 2654
1ceb70f8 2655 /* PREFIX_0F5F */
041bd2e0 2656 {
4e7d34a6
L
2657 { "maxps", { XM, EXx } },
2658 { "maxss", { XM, EXd } },
2659 { "maxpd", { XM, EXx } },
2660 { "maxsd", { XM, EXq } },
041bd2e0 2661 },
4e7d34a6 2662
1ceb70f8 2663 /* PREFIX_0F60 */
041bd2e0 2664 {
4e7d34a6
L
2665 { "punpcklbw",{ MX, EMd } },
2666 { "(bad)", { XX } },
2667 { "punpcklbw",{ MX, EMx } },
2668 { "(bad)", { XX } },
041bd2e0 2669 },
4e7d34a6 2670
1ceb70f8 2671 /* PREFIX_0F61 */
041bd2e0 2672 {
4e7d34a6
L
2673 { "punpcklwd",{ MX, EMd } },
2674 { "(bad)", { XX } },
2675 { "punpcklwd",{ MX, EMx } },
2676 { "(bad)", { XX } },
041bd2e0 2677 },
4e7d34a6 2678
1ceb70f8 2679 /* PREFIX_0F62 */
041bd2e0 2680 {
4e7d34a6
L
2681 { "punpckldq",{ MX, EMd } },
2682 { "(bad)", { XX } },
2683 { "punpckldq",{ MX, EMx } },
2684 { "(bad)", { XX } },
041bd2e0 2685 },
4e7d34a6 2686
1ceb70f8 2687 /* PREFIX_0F6C */
041bd2e0 2688 {
058f233b
L
2689 { "(bad)", { XX } },
2690 { "(bad)", { XX } },
4e7d34a6 2691 { "punpcklqdq", { XM, EXx } },
058f233b 2692 { "(bad)", { XX } },
0f17484f 2693 },
4e7d34a6 2694
1ceb70f8 2695 /* PREFIX_0F6D */
0f17484f 2696 {
058f233b
L
2697 { "(bad)", { XX } },
2698 { "(bad)", { XX } },
4e7d34a6 2699 { "punpckhqdq", { XM, EXx } },
058f233b 2700 { "(bad)", { XX } },
041bd2e0 2701 },
4e7d34a6 2702
1ceb70f8 2703 /* PREFIX_0F6F */
ca164297 2704 {
4e7d34a6
L
2705 { "movq", { MX, EM } },
2706 { "movdqu", { XM, EXx } },
2707 { "movdqa", { XM, EXx } },
058f233b 2708 { "(bad)", { XX } },
ca164297 2709 },
4e7d34a6 2710
1ceb70f8 2711 /* PREFIX_0F70 */
4e7d34a6
L
2712 {
2713 { "pshufw", { MX, EM, Ib } },
2714 { "pshufhw",{ XM, EXx, Ib } },
2715 { "pshufd", { XM, EXx, Ib } },
2716 { "pshuflw",{ XM, EXx, Ib } },
2717 },
2718
92fddf8e
L
2719 /* PREFIX_0F73_REG_3 */
2720 {
2721 { "(bad)", { XX } },
2722 { "(bad)", { XX } },
2723 { "psrldq", { XS, Ib } },
2724 { "(bad)", { XX } },
2725 },
2726
2727 /* PREFIX_0F73_REG_7 */
2728 {
2729 { "(bad)", { XX } },
2730 { "(bad)", { XX } },
2731 { "pslldq", { XS, Ib } },
2732 { "(bad)", { XX } },
2733 },
2734
1ceb70f8 2735 /* PREFIX_0F78 */
4e7d34a6
L
2736 {
2737 {"vmread", { Em, Gm } },
2738 {"(bad)", { XX } },
2739 {"extrq", { XS, Ib, Ib } },
2740 {"insertq", { XM, XS, Ib, Ib } },
2741 },
2742
1ceb70f8 2743 /* PREFIX_0F79 */
4e7d34a6
L
2744 {
2745 {"vmwrite", { Gm, Em } },
2746 {"(bad)", { XX } },
2747 {"extrq", { XM, XS } },
2748 {"insertq", { XM, XS } },
2749 },
2750
1ceb70f8 2751 /* PREFIX_0F7C */
ca164297 2752 {
058f233b
L
2753 { "(bad)", { XX } },
2754 { "(bad)", { XX } },
09a2c6cf
L
2755 { "haddpd", { XM, EXx } },
2756 { "haddps", { XM, EXx } },
ca164297 2757 },
4e7d34a6 2758
1ceb70f8 2759 /* PREFIX_0F7D */
ca164297 2760 {
058f233b
L
2761 { "(bad)", { XX } },
2762 { "(bad)", { XX } },
09a2c6cf
L
2763 { "hsubpd", { XM, EXx } },
2764 { "hsubps", { XM, EXx } },
ca164297 2765 },
4e7d34a6 2766
1ceb70f8 2767 /* PREFIX_0F7E */
ca164297 2768 {
4e7d34a6
L
2769 { "movK", { Edq, MX } },
2770 { "movq", { XM, EXq } },
2771 { "movK", { Edq, XM } },
058f233b 2772 { "(bad)", { XX } },
ca164297 2773 },
4e7d34a6 2774
1ceb70f8 2775 /* PREFIX_0F7F */
ca164297 2776 {
b6169b20
L
2777 { "movq", { EMS, MX } },
2778 { "movdqu", { EXxS, XM } },
2779 { "movdqa", { EXxS, XM } },
058f233b 2780 { "(bad)", { XX } },
ca164297 2781 },
4e7d34a6 2782
1ceb70f8 2783 /* PREFIX_0FB8 */
ca164297 2784 {
4e7d34a6
L
2785 { "(bad)", { XX } },
2786 { "popcntS", { Gv, Ev } },
2787 { "(bad)", { XX } },
2788 { "(bad)", { XX } },
ca164297 2789 },
4e7d34a6 2790
1ceb70f8 2791 /* PREFIX_0FBD */
050dfa73 2792 {
4e7d34a6
L
2793 { "bsrS", { Gv, Ev } },
2794 { "lzcntS", { Gv, Ev } },
2795 { "bsrS", { Gv, Ev } },
2796 { "(bad)", { XX } },
050dfa73
MM
2797 },
2798
1ceb70f8 2799 /* PREFIX_0FC2 */
050dfa73 2800 {
ad19981d
L
2801 { "cmpps", { XM, EXx, CMP } },
2802 { "cmpss", { XM, EXd, CMP } },
2803 { "cmppd", { XM, EXx, CMP } },
2804 { "cmpsd", { XM, EXq, CMP } },
050dfa73 2805 },
246c51aa 2806
4ee52178
L
2807 /* PREFIX_0FC3 */
2808 {
2809 { "movntiS", { Ma, Gv } },
2810 { "(bad)", { XX } },
2811 { "(bad)", { XX } },
2812 { "(bad)", { XX } },
2813 },
2814
92fddf8e
L
2815 /* PREFIX_0FC7_REG_6 */
2816 {
2817 { "vmptrld",{ Mq } },
2818 { "vmxon", { Mq } },
2819 { "vmclear",{ Mq } },
2820 { "(bad)", { XX } },
2821 },
2822
1ceb70f8 2823 /* PREFIX_0FD0 */
050dfa73 2824 {
058f233b
L
2825 { "(bad)", { XX } },
2826 { "(bad)", { XX } },
4e7d34a6
L
2827 { "addsubpd", { XM, EXx } },
2828 { "addsubps", { XM, EXx } },
246c51aa 2829 },
050dfa73 2830
1ceb70f8 2831 /* PREFIX_0FD6 */
050dfa73 2832 {
058f233b 2833 { "(bad)", { XX } },
4e7d34a6 2834 { "movq2dq",{ XM, MS } },
b6169b20 2835 { "movq", { EXqS, XM } },
4e7d34a6 2836 { "movdq2q",{ MX, XS } },
050dfa73
MM
2837 },
2838
1ceb70f8 2839 /* PREFIX_0FE6 */
7918206c 2840 {
058f233b 2841 { "(bad)", { XX } },
4e7d34a6
L
2842 { "cvtdq2pd", { XM, EXq } },
2843 { "cvttpd2dq", { XM, EXx } },
2844 { "cvtpd2dq", { XM, EXx } },
7918206c 2845 },
8b38ad71 2846
1ceb70f8 2847 /* PREFIX_0FE7 */
8b38ad71 2848 {
4ee52178 2849 { "movntq", { Mq, MX } },
058f233b 2850 { "(bad)", { XX } },
75c135a8 2851 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
058f233b 2852 { "(bad)", { XX } },
4e7d34a6
L
2853 },
2854
1ceb70f8 2855 /* PREFIX_0FF0 */
4e7d34a6 2856 {
058f233b
L
2857 { "(bad)", { XX } },
2858 { "(bad)", { XX } },
2859 { "(bad)", { XX } },
1ceb70f8 2860 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
2861 },
2862
1ceb70f8 2863 /* PREFIX_0FF7 */
4e7d34a6
L
2864 {
2865 { "maskmovq", { MX, MS } },
058f233b 2866 { "(bad)", { XX } },
4e7d34a6 2867 { "maskmovdqu", { XM, XS } },
058f233b 2868 { "(bad)", { XX } },
8b38ad71 2869 },
42903f7f 2870
1ceb70f8 2871 /* PREFIX_0F3810 */
42903f7f
L
2872 {
2873 { "(bad)", { XX } },
2874 { "(bad)", { XX } },
88a94849 2875 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
2876 { "(bad)", { XX } },
2877 },
2878
1ceb70f8 2879 /* PREFIX_0F3814 */
42903f7f
L
2880 {
2881 { "(bad)", { XX } },
2882 { "(bad)", { XX } },
88a94849 2883 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
2884 { "(bad)", { XX } },
2885 },
2886
1ceb70f8 2887 /* PREFIX_0F3815 */
42903f7f
L
2888 {
2889 { "(bad)", { XX } },
2890 { "(bad)", { XX } },
09a2c6cf 2891 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
2892 { "(bad)", { XX } },
2893 },
2894
1ceb70f8 2895 /* PREFIX_0F3817 */
42903f7f
L
2896 {
2897 { "(bad)", { XX } },
2898 { "(bad)", { XX } },
09a2c6cf 2899 { "ptest", { XM, EXx } },
42903f7f
L
2900 { "(bad)", { XX } },
2901 },
2902
1ceb70f8 2903 /* PREFIX_0F3820 */
42903f7f
L
2904 {
2905 { "(bad)", { XX } },
2906 { "(bad)", { XX } },
8976381e 2907 { "pmovsxbw", { XM, EXq } },
42903f7f
L
2908 { "(bad)", { XX } },
2909 },
2910
1ceb70f8 2911 /* PREFIX_0F3821 */
42903f7f
L
2912 {
2913 { "(bad)", { XX } },
2914 { "(bad)", { XX } },
8976381e 2915 { "pmovsxbd", { XM, EXd } },
42903f7f
L
2916 { "(bad)", { XX } },
2917 },
2918
1ceb70f8 2919 /* PREFIX_0F3822 */
42903f7f
L
2920 {
2921 { "(bad)", { XX } },
2922 { "(bad)", { XX } },
8976381e 2923 { "pmovsxbq", { XM, EXw } },
42903f7f
L
2924 { "(bad)", { XX } },
2925 },
2926
1ceb70f8 2927 /* PREFIX_0F3823 */
42903f7f
L
2928 {
2929 { "(bad)", { XX } },
2930 { "(bad)", { XX } },
8976381e 2931 { "pmovsxwd", { XM, EXq } },
42903f7f
L
2932 { "(bad)", { XX } },
2933 },
2934
1ceb70f8 2935 /* PREFIX_0F3824 */
42903f7f
L
2936 {
2937 { "(bad)", { XX } },
2938 { "(bad)", { XX } },
8976381e 2939 { "pmovsxwq", { XM, EXd } },
42903f7f
L
2940 { "(bad)", { XX } },
2941 },
2942
1ceb70f8 2943 /* PREFIX_0F3825 */
42903f7f
L
2944 {
2945 { "(bad)", { XX } },
2946 { "(bad)", { XX } },
8976381e 2947 { "pmovsxdq", { XM, EXq } },
42903f7f
L
2948 { "(bad)", { XX } },
2949 },
2950
1ceb70f8 2951 /* PREFIX_0F3828 */
42903f7f
L
2952 {
2953 { "(bad)", { XX } },
2954 { "(bad)", { XX } },
09a2c6cf 2955 { "pmuldq", { XM, EXx } },
42903f7f
L
2956 { "(bad)", { XX } },
2957 },
2958
1ceb70f8 2959 /* PREFIX_0F3829 */
42903f7f
L
2960 {
2961 { "(bad)", { XX } },
2962 { "(bad)", { XX } },
09a2c6cf 2963 { "pcmpeqq", { XM, EXx } },
42903f7f
L
2964 { "(bad)", { XX } },
2965 },
2966
1ceb70f8 2967 /* PREFIX_0F382A */
42903f7f
L
2968 {
2969 { "(bad)", { XX } },
2970 { "(bad)", { XX } },
75c135a8 2971 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
2972 { "(bad)", { XX } },
2973 },
2974
1ceb70f8 2975 /* PREFIX_0F382B */
42903f7f
L
2976 {
2977 { "(bad)", { XX } },
2978 { "(bad)", { XX } },
09a2c6cf 2979 { "packusdw", { XM, EXx } },
42903f7f
L
2980 { "(bad)", { XX } },
2981 },
2982
1ceb70f8 2983 /* PREFIX_0F3830 */
42903f7f
L
2984 {
2985 { "(bad)", { XX } },
2986 { "(bad)", { XX } },
8976381e 2987 { "pmovzxbw", { XM, EXq } },
42903f7f
L
2988 { "(bad)", { XX } },
2989 },
2990
1ceb70f8 2991 /* PREFIX_0F3831 */
42903f7f
L
2992 {
2993 { "(bad)", { XX } },
2994 { "(bad)", { XX } },
8976381e 2995 { "pmovzxbd", { XM, EXd } },
42903f7f
L
2996 { "(bad)", { XX } },
2997 },
2998
1ceb70f8 2999 /* PREFIX_0F3832 */
42903f7f
L
3000 {
3001 { "(bad)", { XX } },
3002 { "(bad)", { XX } },
8976381e 3003 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3004 { "(bad)", { XX } },
3005 },
3006
1ceb70f8 3007 /* PREFIX_0F3833 */
42903f7f
L
3008 {
3009 { "(bad)", { XX } },
3010 { "(bad)", { XX } },
8976381e 3011 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3012 { "(bad)", { XX } },
3013 },
3014
1ceb70f8 3015 /* PREFIX_0F3834 */
42903f7f
L
3016 {
3017 { "(bad)", { XX } },
3018 { "(bad)", { XX } },
8976381e 3019 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3020 { "(bad)", { XX } },
3021 },
3022
1ceb70f8 3023 /* PREFIX_0F3835 */
42903f7f
L
3024 {
3025 { "(bad)", { XX } },
3026 { "(bad)", { XX } },
8976381e 3027 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3028 { "(bad)", { XX } },
3029 },
3030
1ceb70f8 3031 /* PREFIX_0F3837 */
4e7d34a6
L
3032 {
3033 { "(bad)", { XX } },
3034 { "(bad)", { XX } },
3035 { "pcmpgtq", { XM, EXx } },
3036 { "(bad)", { XX } },
3037 },
3038
1ceb70f8 3039 /* PREFIX_0F3838 */
42903f7f
L
3040 {
3041 { "(bad)", { XX } },
3042 { "(bad)", { XX } },
09a2c6cf 3043 { "pminsb", { XM, EXx } },
42903f7f
L
3044 { "(bad)", { XX } },
3045 },
3046
1ceb70f8 3047 /* PREFIX_0F3839 */
42903f7f
L
3048 {
3049 { "(bad)", { XX } },
3050 { "(bad)", { XX } },
09a2c6cf 3051 { "pminsd", { XM, EXx } },
42903f7f
L
3052 { "(bad)", { XX } },
3053 },
3054
1ceb70f8 3055 /* PREFIX_0F383A */
42903f7f
L
3056 {
3057 { "(bad)", { XX } },
3058 { "(bad)", { XX } },
09a2c6cf 3059 { "pminuw", { XM, EXx } },
42903f7f
L
3060 { "(bad)", { XX } },
3061 },
3062
1ceb70f8 3063 /* PREFIX_0F383B */
42903f7f
L
3064 {
3065 { "(bad)", { XX } },
3066 { "(bad)", { XX } },
09a2c6cf 3067 { "pminud", { XM, EXx } },
42903f7f
L
3068 { "(bad)", { XX } },
3069 },
3070
1ceb70f8 3071 /* PREFIX_0F383C */
42903f7f
L
3072 {
3073 { "(bad)", { XX } },
3074 { "(bad)", { XX } },
09a2c6cf 3075 { "pmaxsb", { XM, EXx } },
42903f7f
L
3076 { "(bad)", { XX } },
3077 },
3078
1ceb70f8 3079 /* PREFIX_0F383D */
42903f7f
L
3080 {
3081 { "(bad)", { XX } },
3082 { "(bad)", { XX } },
09a2c6cf 3083 { "pmaxsd", { XM, EXx } },
42903f7f
L
3084 { "(bad)", { XX } },
3085 },
3086
1ceb70f8 3087 /* PREFIX_0F383E */
42903f7f
L
3088 {
3089 { "(bad)", { XX } },
3090 { "(bad)", { XX } },
09a2c6cf 3091 { "pmaxuw", { XM, EXx } },
42903f7f
L
3092 { "(bad)", { XX } },
3093 },
3094
1ceb70f8 3095 /* PREFIX_0F383F */
42903f7f
L
3096 {
3097 { "(bad)", { XX } },
3098 { "(bad)", { XX } },
09a2c6cf 3099 { "pmaxud", { XM, EXx } },
42903f7f
L
3100 { "(bad)", { XX } },
3101 },
3102
1ceb70f8 3103 /* PREFIX_0F3840 */
42903f7f
L
3104 {
3105 { "(bad)", { XX } },
3106 { "(bad)", { XX } },
09a2c6cf 3107 { "pmulld", { XM, EXx } },
42903f7f
L
3108 { "(bad)", { XX } },
3109 },
3110
1ceb70f8 3111 /* PREFIX_0F3841 */
42903f7f
L
3112 {
3113 { "(bad)", { XX } },
3114 { "(bad)", { XX } },
09a2c6cf 3115 { "phminposuw", { XM, EXx } },
42903f7f
L
3116 { "(bad)", { XX } },
3117 },
3118
f1f8f695
L
3119 /* PREFIX_0F3880 */
3120 {
3121 { "(bad)", { XX } },
3122 { "(bad)", { XX } },
3123 { "invept", { Gm, Mo } },
3124 { "(bad)", { XX } },
3125 },
3126
3127 /* PREFIX_0F3881 */
3128 {
3129 { "(bad)", { XX } },
3130 { "(bad)", { XX } },
3131 { "invvpid", { Gm, Mo } },
3132 { "(bad)", { XX } },
3133 },
3134
c0f3af97
L
3135 /* PREFIX_0F38DB */
3136 {
3137 { "(bad)", { XX } },
3138 { "(bad)", { XX } },
3139 { "aesimc", { XM, EXx } },
3140 { "(bad)", { XX } },
3141 },
3142
3143 /* PREFIX_0F38DC */
3144 {
3145 { "(bad)", { XX } },
3146 { "(bad)", { XX } },
3147 { "aesenc", { XM, EXx } },
3148 { "(bad)", { XX } },
3149 },
3150
3151 /* PREFIX_0F38DD */
3152 {
3153 { "(bad)", { XX } },
3154 { "(bad)", { XX } },
3155 { "aesenclast", { XM, EXx } },
3156 { "(bad)", { XX } },
3157 },
3158
3159 /* PREFIX_0F38DE */
3160 {
3161 { "(bad)", { XX } },
3162 { "(bad)", { XX } },
3163 { "aesdec", { XM, EXx } },
3164 { "(bad)", { XX } },
3165 },
3166
3167 /* PREFIX_0F38DF */
3168 {
3169 { "(bad)", { XX } },
3170 { "(bad)", { XX } },
3171 { "aesdeclast", { XM, EXx } },
3172 { "(bad)", { XX } },
3173 },
3174
1ceb70f8 3175 /* PREFIX_0F38F0 */
4e7d34a6 3176 {
f1f8f695 3177 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6 3178 { "(bad)", { XX } },
f1f8f695 3179 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3180 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3181 },
3182
1ceb70f8 3183 /* PREFIX_0F38F1 */
4e7d34a6 3184 {
f1f8f695 3185 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6 3186 { "(bad)", { XX } },
f1f8f695 3187 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3188 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3189 },
3190
1ceb70f8 3191 /* PREFIX_0F3A08 */
42903f7f
L
3192 {
3193 { "(bad)", { XX } },
3194 { "(bad)", { XX } },
09a2c6cf 3195 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3196 { "(bad)", { XX } },
3197 },
3198
1ceb70f8 3199 /* PREFIX_0F3A09 */
42903f7f
L
3200 {
3201 { "(bad)", { XX } },
3202 { "(bad)", { XX } },
09a2c6cf 3203 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3204 { "(bad)", { XX } },
3205 },
3206
1ceb70f8 3207 /* PREFIX_0F3A0A */
42903f7f
L
3208 {
3209 { "(bad)", { XX } },
3210 { "(bad)", { XX } },
09335d05 3211 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3212 { "(bad)", { XX } },
3213 },
3214
1ceb70f8 3215 /* PREFIX_0F3A0B */
42903f7f
L
3216 {
3217 { "(bad)", { XX } },
3218 { "(bad)", { XX } },
09335d05 3219 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3220 { "(bad)", { XX } },
3221 },
3222
1ceb70f8 3223 /* PREFIX_0F3A0C */
42903f7f
L
3224 {
3225 { "(bad)", { XX } },
3226 { "(bad)", { XX } },
09a2c6cf 3227 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3228 { "(bad)", { XX } },
3229 },
3230
1ceb70f8 3231 /* PREFIX_0F3A0D */
42903f7f
L
3232 {
3233 { "(bad)", { XX } },
3234 { "(bad)", { XX } },
09a2c6cf 3235 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3236 { "(bad)", { XX } },
3237 },
3238
1ceb70f8 3239 /* PREFIX_0F3A0E */
42903f7f
L
3240 {
3241 { "(bad)", { XX } },
3242 { "(bad)", { XX } },
09a2c6cf 3243 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3244 { "(bad)", { XX } },
3245 },
3246
1ceb70f8 3247 /* PREFIX_0F3A14 */
42903f7f
L
3248 {
3249 { "(bad)", { XX } },
3250 { "(bad)", { XX } },
3251 { "pextrb", { Edqb, XM, Ib } },
3252 { "(bad)", { XX } },
3253 },
3254
1ceb70f8 3255 /* PREFIX_0F3A15 */
42903f7f
L
3256 {
3257 { "(bad)", { XX } },
3258 { "(bad)", { XX } },
3259 { "pextrw", { Edqw, XM, Ib } },
3260 { "(bad)", { XX } },
3261 },
3262
1ceb70f8 3263 /* PREFIX_0F3A16 */
42903f7f
L
3264 {
3265 { "(bad)", { XX } },
3266 { "(bad)", { XX } },
3267 { "pextrK", { Edq, XM, Ib } },
3268 { "(bad)", { XX } },
3269 },
3270
1ceb70f8 3271 /* PREFIX_0F3A17 */
42903f7f
L
3272 {
3273 { "(bad)", { XX } },
3274 { "(bad)", { XX } },
3275 { "extractps", { Edqd, XM, Ib } },
3276 { "(bad)", { XX } },
3277 },
3278
1ceb70f8 3279 /* PREFIX_0F3A20 */
42903f7f
L
3280 {
3281 { "(bad)", { XX } },
3282 { "(bad)", { XX } },
3283 { "pinsrb", { XM, Edqb, Ib } },
3284 { "(bad)", { XX } },
3285 },
3286
1ceb70f8 3287 /* PREFIX_0F3A21 */
42903f7f
L
3288 {
3289 { "(bad)", { XX } },
3290 { "(bad)", { XX } },
8976381e 3291 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3292 { "(bad)", { XX } },
3293 },
3294
1ceb70f8 3295 /* PREFIX_0F3A22 */
42903f7f
L
3296 {
3297 { "(bad)", { XX } },
3298 { "(bad)", { XX } },
3299 { "pinsrK", { XM, Edq, Ib } },
3300 { "(bad)", { XX } },
3301 },
3302
1ceb70f8 3303 /* PREFIX_0F3A40 */
42903f7f
L
3304 {
3305 { "(bad)", { XX } },
3306 { "(bad)", { XX } },
09a2c6cf 3307 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3308 { "(bad)", { XX } },
3309 },
3310
1ceb70f8 3311 /* PREFIX_0F3A41 */
42903f7f
L
3312 {
3313 { "(bad)", { XX } },
3314 { "(bad)", { XX } },
09a2c6cf 3315 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3316 { "(bad)", { XX } },
3317 },
3318
1ceb70f8 3319 /* PREFIX_0F3A42 */
42903f7f
L
3320 {
3321 { "(bad)", { XX } },
3322 { "(bad)", { XX } },
09a2c6cf 3323 { "mpsadbw", { XM, EXx, Ib } },
42903f7f
L
3324 { "(bad)", { XX } },
3325 },
381d071f 3326
c0f3af97
L
3327 /* PREFIX_0F3A44 */
3328 {
3329 { "(bad)", { XX } },
3330 { "(bad)", { XX } },
3331 { "pclmulqdq", { XM, EXx, PCLMUL } },
3332 { "(bad)", { XX } },
3333 },
3334
1ceb70f8 3335 /* PREFIX_0F3A60 */
381d071f
L
3336 {
3337 { "(bad)", { XX } },
3338 { "(bad)", { XX } },
4e7d34a6 3339 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3340 { "(bad)", { XX } },
3341 },
3342
1ceb70f8 3343 /* PREFIX_0F3A61 */
381d071f
L
3344 {
3345 { "(bad)", { XX } },
3346 { "(bad)", { XX } },
4e7d34a6 3347 { "pcmpestri", { XM, EXx, Ib } },
381d071f 3348 { "(bad)", { XX } },
381d071f
L
3349 },
3350
1ceb70f8 3351 /* PREFIX_0F3A62 */
381d071f
L
3352 {
3353 { "(bad)", { XX } },
3354 { "(bad)", { XX } },
4e7d34a6 3355 { "pcmpistrm", { XM, EXx, Ib } },
381d071f 3356 { "(bad)", { XX } },
381d071f
L
3357 },
3358
1ceb70f8 3359 /* PREFIX_0F3A63 */
381d071f
L
3360 {
3361 { "(bad)", { XX } },
3362 { "(bad)", { XX } },
4e7d34a6 3363 { "pcmpistri", { XM, EXx, Ib } },
381d071f
L
3364 { "(bad)", { XX } },
3365 },
09a2c6cf 3366
c0f3af97 3367 /* PREFIX_0F3ADF */
09a2c6cf 3368 {
c0f3af97
L
3369 { "(bad)", { XX } },
3370 { "(bad)", { XX } },
3371 { "aeskeygenassist", { XM, EXx, Ib } },
3372 { "(bad)", { XX } },
09a2c6cf
L
3373 },
3374
c0f3af97 3375 /* PREFIX_VEX_10 */
09a2c6cf 3376 {
c0f3af97
L
3377 { "vmovups", { XM, EXx } },
3378 { VEX_LEN_TABLE (VEX_LEN_10_P_1) },
3379 { "vmovupd", { XM, EXx } },
3380 { VEX_LEN_TABLE (VEX_LEN_10_P_3) },
09a2c6cf
L
3381 },
3382
c0f3af97 3383 /* PREFIX_VEX_11 */
09a2c6cf 3384 {
b6169b20 3385 { "vmovups", { EXxS, XM } },
c0f3af97 3386 { VEX_LEN_TABLE (VEX_LEN_11_P_1) },
b6169b20 3387 { "vmovupd", { EXxS, XM } },
c0f3af97 3388 { VEX_LEN_TABLE (VEX_LEN_11_P_3) },
09a2c6cf
L
3389 },
3390
c0f3af97 3391 /* PREFIX_VEX_12 */
09a2c6cf 3392 {
c0f3af97
L
3393 { MOD_TABLE (MOD_VEX_12_PREFIX_0) },
3394 { "vmovsldup", { XM, EXx } },
3395 { VEX_LEN_TABLE (VEX_LEN_12_P_2) },
3396 { "vmovddup", { XM, EXymmq } },
09a2c6cf
L
3397 },
3398
c0f3af97 3399 /* PREFIX_VEX_16 */
09a2c6cf 3400 {
c0f3af97
L
3401 { MOD_TABLE (MOD_VEX_16_PREFIX_0) },
3402 { "vmovshdup", { XM, EXx } },
3403 { VEX_LEN_TABLE (VEX_LEN_16_P_2) },
3404 { "(bad)", { XX } },
5f754f58 3405 },
7c52e0e8 3406
c0f3af97 3407 /* PREFIX_VEX_2A */
5f754f58 3408 {
c0f3af97
L
3409 { "(bad)", { XX } },
3410 { VEX_LEN_TABLE (VEX_LEN_2A_P_1) },
3411 { "(bad)", { XX } },
3412 { VEX_LEN_TABLE (VEX_LEN_2A_P_3) },
5f754f58 3413 },
7c52e0e8 3414
c0f3af97 3415 /* PREFIX_VEX_2C */
5f754f58 3416 {
c0f3af97
L
3417 { "(bad)", { XX } },
3418 { VEX_LEN_TABLE (VEX_LEN_2C_P_1) },
3419 { "(bad)", { XX } },
3420 { VEX_LEN_TABLE (VEX_LEN_2C_P_3) },
5f754f58 3421 },
7c52e0e8 3422
c0f3af97 3423 /* PREFIX_VEX_2D */
7c52e0e8 3424 {
c0f3af97
L
3425 { "(bad)", { XX } },
3426 { VEX_LEN_TABLE (VEX_LEN_2D_P_1) },
3427 { "(bad)", { XX } },
3428 { VEX_LEN_TABLE (VEX_LEN_2D_P_3) },
7c52e0e8
L
3429 },
3430
c0f3af97 3431 /* PREFIX_VEX_2E */
7c52e0e8 3432 {
c0f3af97
L
3433 { VEX_LEN_TABLE (VEX_LEN_2E_P_0) },
3434 { "(bad)", { XX } },
3435 { VEX_LEN_TABLE (VEX_LEN_2E_P_2) },
3436 { "(bad)", { XX } },
7c52e0e8
L
3437 },
3438
c0f3af97 3439 /* PREFIX_VEX_2F */
7c52e0e8 3440 {
c0f3af97
L
3441 { VEX_LEN_TABLE (VEX_LEN_2F_P_0) },
3442 { "(bad)", { XX } },
3443 { VEX_LEN_TABLE (VEX_LEN_2F_P_2) },
3444 { "(bad)", { XX } },
7c52e0e8
L
3445 },
3446
c0f3af97 3447 /* PREFIX_VEX_51 */
7c52e0e8 3448 {
c0f3af97
L
3449 { "vsqrtps", { XM, EXx } },
3450 { VEX_LEN_TABLE (VEX_LEN_51_P_1) },
3451 { "vsqrtpd", { XM, EXx } },
3452 { VEX_LEN_TABLE (VEX_LEN_51_P_3) },
7c52e0e8
L
3453 },
3454
c0f3af97 3455 /* PREFIX_VEX_52 */
7c52e0e8 3456 {
c0f3af97
L
3457 { "vrsqrtps", { XM, EXx } },
3458 { VEX_LEN_TABLE (VEX_LEN_52_P_1) },
3459 { "(bad)", { XX } },
3460 { "(bad)", { XX } },
7c52e0e8
L
3461 },
3462
c0f3af97 3463 /* PREFIX_VEX_53 */
7c52e0e8 3464 {
c0f3af97
L
3465 { "vrcpps", { XM, EXx } },
3466 { VEX_LEN_TABLE (VEX_LEN_53_P_1) },
3467 { "(bad)", { XX } },
3468 { "(bad)", { XX } },
7c52e0e8
L
3469 },
3470
c0f3af97 3471 /* PREFIX_VEX_58 */
7c52e0e8 3472 {
c0f3af97
L
3473 { "vaddps", { XM, Vex, EXx } },
3474 { VEX_LEN_TABLE (VEX_LEN_58_P_1) },
3475 { "vaddpd", { XM, Vex, EXx } },
3476 { VEX_LEN_TABLE (VEX_LEN_58_P_3) },
7c52e0e8
L
3477 },
3478
c0f3af97 3479 /* PREFIX_VEX_59 */
7c52e0e8 3480 {
c0f3af97
L
3481 { "vmulps", { XM, Vex, EXx } },
3482 { VEX_LEN_TABLE (VEX_LEN_59_P_1) },
3483 { "vmulpd", { XM, Vex, EXx } },
3484 { VEX_LEN_TABLE (VEX_LEN_59_P_3) },
7c52e0e8
L
3485 },
3486
c0f3af97 3487 /* PREFIX_VEX_5A */
7c52e0e8 3488 {
c0f3af97
L
3489 { "vcvtps2pd", { XM, EXxmmq } },
3490 { VEX_LEN_TABLE (VEX_LEN_5A_P_1) },
3491 { "vcvtpd2ps%XY", { XMM, EXx } },
3492 { VEX_LEN_TABLE (VEX_LEN_5A_P_3) },
7c52e0e8
L
3493 },
3494
c0f3af97 3495 /* PREFIX_VEX_5B */
7c52e0e8 3496 {
c0f3af97
L
3497 { "vcvtdq2ps", { XM, EXx } },
3498 { "vcvttps2dq", { XM, EXx } },
3499 { "vcvtps2dq", { XM, EXx } },
3500 { "(bad)", { XX } },
7c52e0e8
L
3501 },
3502
c0f3af97 3503 /* PREFIX_VEX_5C */
7c52e0e8 3504 {
c0f3af97
L
3505 { "vsubps", { XM, Vex, EXx } },
3506 { VEX_LEN_TABLE (VEX_LEN_5C_P_1) },
3507 { "vsubpd", { XM, Vex, EXx } },
3508 { VEX_LEN_TABLE (VEX_LEN_5C_P_3) },
7c52e0e8
L
3509 },
3510
c0f3af97 3511 /* PREFIX_VEX_5D */
7c52e0e8 3512 {
c0f3af97
L
3513 { "vminps", { XM, Vex, EXx } },
3514 { VEX_LEN_TABLE (VEX_LEN_5D_P_1) },
3515 { "vminpd", { XM, Vex, EXx } },
3516 { VEX_LEN_TABLE (VEX_LEN_5D_P_3) },
7c52e0e8
L
3517 },
3518
c0f3af97 3519 /* PREFIX_VEX_5E */
7c52e0e8 3520 {
c0f3af97
L
3521 { "vdivps", { XM, Vex, EXx } },
3522 { VEX_LEN_TABLE (VEX_LEN_5E_P_1) },
3523 { "vdivpd", { XM, Vex, EXx } },
3524 { VEX_LEN_TABLE (VEX_LEN_5E_P_3) },
7c52e0e8
L
3525 },
3526
c0f3af97 3527 /* PREFIX_VEX_5F */
7c52e0e8 3528 {
c0f3af97
L
3529 { "vmaxps", { XM, Vex, EXx } },
3530 { VEX_LEN_TABLE (VEX_LEN_5F_P_1) },
3531 { "vmaxpd", { XM, Vex, EXx } },
3532 { VEX_LEN_TABLE (VEX_LEN_5F_P_3) },
7c52e0e8
L
3533 },
3534
c0f3af97 3535 /* PREFIX_VEX_60 */
7c52e0e8 3536 {
c0f3af97
L
3537 { "(bad)", { XX } },
3538 { "(bad)", { XX } },
3539 { VEX_LEN_TABLE (VEX_LEN_60_P_2) },
3540 { "(bad)", { XX } },
7c52e0e8
L
3541 },
3542
c0f3af97 3543 /* PREFIX_VEX_61 */
7c52e0e8 3544 {
c0f3af97
L
3545 { "(bad)", { XX } },
3546 { "(bad)", { XX } },
3547 { VEX_LEN_TABLE (VEX_LEN_61_P_2) },
3548 { "(bad)", { XX } },
7c52e0e8
L
3549 },
3550
c0f3af97 3551 /* PREFIX_VEX_62 */
7c52e0e8 3552 {
c0f3af97
L
3553 { "(bad)", { XX } },
3554 { "(bad)", { XX } },
3555 { VEX_LEN_TABLE (VEX_LEN_62_P_2) },
3556 { "(bad)", { XX } },
7c52e0e8
L
3557 },
3558
c0f3af97 3559 /* PREFIX_VEX_63 */
7c52e0e8 3560 {
c0f3af97
L
3561 { "(bad)", { XX } },
3562 { "(bad)", { XX } },
3563 { VEX_LEN_TABLE (VEX_LEN_63_P_2) },
3564 { "(bad)", { XX } },
7c52e0e8
L
3565 },
3566
c0f3af97 3567 /* PREFIX_VEX_64 */
7c52e0e8 3568 {
c0f3af97
L
3569 { "(bad)", { XX } },
3570 { "(bad)", { XX } },
3571 { VEX_LEN_TABLE (VEX_LEN_64_P_2) },
3572 { "(bad)", { XX } },
7c52e0e8
L
3573 },
3574
c0f3af97 3575 /* PREFIX_VEX_65 */
7c52e0e8 3576 {
c0f3af97
L
3577 { "(bad)", { XX } },
3578 { "(bad)", { XX } },
3579 { VEX_LEN_TABLE (VEX_LEN_65_P_2) },
3580 { "(bad)", { XX } },
7c52e0e8
L
3581 },
3582
c0f3af97 3583 /* PREFIX_VEX_66 */
7c52e0e8 3584 {
c0f3af97
L
3585 { "(bad)", { XX } },
3586 { "(bad)", { XX } },
3587 { VEX_LEN_TABLE (VEX_LEN_66_P_2) },
3588 { "(bad)", { XX } },
7c52e0e8 3589 },
6439fc28 3590
c0f3af97 3591 /* PREFIX_VEX_67 */
331d2d0d 3592 {
c0f3af97
L
3593 { "(bad)", { XX } },
3594 { "(bad)", { XX } },
3595 { VEX_LEN_TABLE (VEX_LEN_67_P_2) },
3596 { "(bad)", { XX } },
3597 },
3598
3599 /* PREFIX_VEX_68 */
3600 {
3601 { "(bad)", { XX } },
3602 { "(bad)", { XX } },
3603 { VEX_LEN_TABLE (VEX_LEN_68_P_2) },
3604 { "(bad)", { XX } },
3605 },
3606
3607 /* PREFIX_VEX_69 */
3608 {
3609 { "(bad)", { XX } },
3610 { "(bad)", { XX } },
3611 { VEX_LEN_TABLE (VEX_LEN_69_P_2) },
3612 { "(bad)", { XX } },
3613 },
3614
3615 /* PREFIX_VEX_6A */
3616 {
3617 { "(bad)", { XX } },
3618 { "(bad)", { XX } },
3619 { VEX_LEN_TABLE (VEX_LEN_6A_P_2) },
3620 { "(bad)", { XX } },
3621 },
3622
3623 /* PREFIX_VEX_6B */
3624 {
3625 { "(bad)", { XX } },
3626 { "(bad)", { XX } },
3627 { VEX_LEN_TABLE (VEX_LEN_6B_P_2) },
3628 { "(bad)", { XX } },
3629 },
3630
3631 /* PREFIX_VEX_6C */
3632 {
3633 { "(bad)", { XX } },
3634 { "(bad)", { XX } },
3635 { VEX_LEN_TABLE (VEX_LEN_6C_P_2) },
3636 { "(bad)", { XX } },
3637 },
3638
3639 /* PREFIX_VEX_6D */
3640 {
3641 { "(bad)", { XX } },
3642 { "(bad)", { XX } },
3643 { VEX_LEN_TABLE (VEX_LEN_6D_P_2) },
3644 { "(bad)", { XX } },
3645 },
3646
3647 /* PREFIX_VEX_6E */
3648 {
3649 { "(bad)", { XX } },
3650 { "(bad)", { XX } },
3651 { VEX_LEN_TABLE (VEX_LEN_6E_P_2) },
3652 { "(bad)", { XX } },
3653 },
3654
3655 /* PREFIX_VEX_6F */
3656 {
3657 { "(bad)", { XX } },
3658 { "vmovdqu", { XM, EXx } },
3659 { "vmovdqa", { XM, EXx } },
3660 { "(bad)", { XX } },
3661 },
3662
3663 /* PREFIX_VEX_70 */
3664 {
3665 { "(bad)", { XX } },
3666 { VEX_LEN_TABLE (VEX_LEN_70_P_1) },
3667 { VEX_LEN_TABLE (VEX_LEN_70_P_2) },
3668 { VEX_LEN_TABLE (VEX_LEN_70_P_3) },
3669 },
3670
3671 /* PREFIX_VEX_71_REG_2 */
3672 {
3673 { "(bad)", { XX } },
3674 { "(bad)", { XX } },
3675 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) },
3676 { "(bad)", { XX } },
3677 },
3678
3679 /* PREFIX_VEX_71_REG_4 */
3680 {
3681 { "(bad)", { XX } },
3682 { "(bad)", { XX } },
3683 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) },
3684 { "(bad)", { XX } },
3685 },
3686
3687 /* PREFIX_VEX_71_REG_6 */
3688 {
3689 { "(bad)", { XX } },
3690 { "(bad)", { XX } },
3691 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) },
3692 { "(bad)", { XX } },
3693 },
3694
3695 /* PREFIX_VEX_72_REG_2 */
3696 {
3697 { "(bad)", { XX } },
3698 { "(bad)", { XX } },
3699 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) },
3700 { "(bad)", { XX } },
3701 },
3702
3703 /* PREFIX_VEX_72_REG_4 */
3704 {
3705 { "(bad)", { XX } },
3706 { "(bad)", { XX } },
3707 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) },
3708 { "(bad)", { XX } },
3709 },
3710
3711 /* PREFIX_VEX_72_REG_6 */
3712 {
3713 { "(bad)", { XX } },
3714 { "(bad)", { XX } },
3715 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) },
3716 { "(bad)", { XX } },
3717 },
3718
3719 /* PREFIX_VEX_73_REG_2 */
3720 {
3721 { "(bad)", { XX } },
3722 { "(bad)", { XX } },
3723 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) },
3724 { "(bad)", { XX } },
3725 },
3726
3727 /* PREFIX_VEX_73_REG_3 */
3728 {
3729 { "(bad)", { XX } },
3730 { "(bad)", { XX } },
3731 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) },
3732 { "(bad)", { XX } },
3733 },
3734
3735 /* PREFIX_VEX_73_REG_6 */
3736 {
3737 { "(bad)", { XX } },
3738 { "(bad)", { XX } },
3739 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) },
3740 { "(bad)", { XX } },
3741 },
3742
3743 /* PREFIX_VEX_73_REG_7 */
3744 {
3745 { "(bad)", { XX } },
3746 { "(bad)", { XX } },
3747 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) },
3748 { "(bad)", { XX } },
3749 },
3750
3751 /* PREFIX_VEX_74 */
3752 {
3753 { "(bad)", { XX } },
3754 { "(bad)", { XX } },
3755 { VEX_LEN_TABLE (VEX_LEN_74_P_2) },
3756 { "(bad)", { XX } },
3757 },
3758
3759 /* PREFIX_VEX_75 */
3760 {
3761 { "(bad)", { XX } },
3762 { "(bad)", { XX } },
3763 { VEX_LEN_TABLE (VEX_LEN_75_P_2) },
3764 { "(bad)", { XX } },
3765 },
3766
3767 /* PREFIX_VEX_76 */
3768 {
3769 { "(bad)", { XX } },
3770 { "(bad)", { XX } },
3771 { VEX_LEN_TABLE (VEX_LEN_76_P_2) },
3772 { "(bad)", { XX } },
3773 },
3774
3775 /* PREFIX_VEX_77 */
3776 {
3777 { "", { VZERO } },
3778 { "(bad)", { XX } },
3779 { "(bad)", { XX } },
3780 { "(bad)", { XX } },
3781 },
3782
3783 /* PREFIX_VEX_7C */
3784 {
3785 { "(bad)", { XX } },
3786 { "(bad)", { XX } },
3787 { "vhaddpd", { XM, Vex, EXx } },
3788 { "vhaddps", { XM, Vex, EXx } },
3789 },
3790
3791 /* PREFIX_VEX_7D */
3792 {
3793 { "(bad)", { XX } },
3794 { "(bad)", { XX } },
3795 { "vhsubpd", { XM, Vex, EXx } },
3796 { "vhsubps", { XM, Vex, EXx } },
3797 },
3798
3799 /* PREFIX_VEX_7E */
3800 {
3801 { "(bad)", { XX } },
3802 { VEX_LEN_TABLE (VEX_LEN_7E_P_1) },
3803 { VEX_LEN_TABLE (VEX_LEN_7E_P_2) },
3804 { "(bad)", { XX } },
3805 },
3806
3807 /* PREFIX_VEX_7F */
3808 {
3809 { "(bad)", { XX } },
b6169b20
L
3810 { "vmovdqu", { EXxS, XM } },
3811 { "vmovdqa", { EXxS, XM } },
c0f3af97
L
3812 { "(bad)", { XX } },
3813 },
3814
3815 /* PREFIX_VEX_C2 */
3816 {
3817 { "vcmpps", { XM, Vex, EXx, VCMP } },
3818 { VEX_LEN_TABLE (VEX_LEN_C2_P_1) },
3819 { "vcmppd", { XM, Vex, EXx, VCMP } },
3820 { VEX_LEN_TABLE (VEX_LEN_C2_P_3) },
3821 },
3822
3823 /* PREFIX_VEX_C4 */
3824 {
3825 { "(bad)", { XX } },
3826 { "(bad)", { XX } },
3827 { VEX_LEN_TABLE (VEX_LEN_C4_P_2) },
3828 { "(bad)", { XX } },
3829 },
3830
3831 /* PREFIX_VEX_C5 */
3832 {
3833 { "(bad)", { XX } },
3834 { "(bad)", { XX } },
3835 { VEX_LEN_TABLE (VEX_LEN_C5_P_2) },
3836 { "(bad)", { XX } },
3837 },
3838
3839 /* PREFIX_VEX_D0 */
3840 {
3841 { "(bad)", { XX } },
3842 { "(bad)", { XX } },
3843 { "vaddsubpd", { XM, Vex, EXx } },
3844 { "vaddsubps", { XM, Vex, EXx } },
3845 },
3846
3847 /* PREFIX_VEX_D1 */
3848 {
3849 { "(bad)", { XX } },
3850 { "(bad)", { XX } },
3851 { VEX_LEN_TABLE (VEX_LEN_D1_P_2) },
3852 { "(bad)", { XX } },
3853 },
3854
3855 /* PREFIX_VEX_D2 */
3856 {
3857 { "(bad)", { XX } },
3858 { "(bad)", { XX } },
3859 { VEX_LEN_TABLE (VEX_LEN_D2_P_2) },
3860 { "(bad)", { XX } },
3861 },
3862
3863 /* PREFIX_VEX_D3 */
3864 {
3865 { "(bad)", { XX } },
3866 { "(bad)", { XX } },
3867 { VEX_LEN_TABLE (VEX_LEN_D3_P_2) },
3868 { "(bad)", { XX } },
3869 },
3870
3871 /* PREFIX_VEX_D4 */
3872 {
3873 { "(bad)", { XX } },
3874 { "(bad)", { XX } },
3875 { VEX_LEN_TABLE (VEX_LEN_D4_P_2) },
3876 { "(bad)", { XX } },
3877 },
3878
3879 /* PREFIX_VEX_D5 */
3880 {
3881 { "(bad)", { XX } },
3882 { "(bad)", { XX } },
3883 { VEX_LEN_TABLE (VEX_LEN_D5_P_2) },
3884 { "(bad)", { XX } },
3885 },
3886
3887 /* PREFIX_VEX_D6 */
3888 {
3889 { "(bad)", { XX } },
3890 { "(bad)", { XX } },
3891 { VEX_LEN_TABLE (VEX_LEN_D6_P_2) },
3892 { "(bad)", { XX } },
3893 },
3894
3895 /* PREFIX_VEX_D7 */
3896 {
3897 { "(bad)", { XX } },
3898 { "(bad)", { XX } },
3899 { MOD_TABLE (MOD_VEX_D7_PREFIX_2) },
3900 { "(bad)", { XX } },
3901 },
3902
3903 /* PREFIX_VEX_D8 */
3904 {
3905 { "(bad)", { XX } },
3906 { "(bad)", { XX } },
3907 { VEX_LEN_TABLE (VEX_LEN_D8_P_2) },
3908 { "(bad)", { XX } },
3909 },
3910
3911 /* PREFIX_VEX_D9 */
3912 {
3913 { "(bad)", { XX } },
3914 { "(bad)", { XX } },
3915 { VEX_LEN_TABLE (VEX_LEN_D9_P_2) },
3916 { "(bad)", { XX } },
3917 },
3918
3919 /* PREFIX_VEX_DA */
3920 {
3921 { "(bad)", { XX } },
3922 { "(bad)", { XX } },
3923 { VEX_LEN_TABLE (VEX_LEN_DA_P_2) },
3924 { "(bad)", { XX } },
3925 },
3926
3927 /* PREFIX_VEX_DB */
3928 {
3929 { "(bad)", { XX } },
3930 { "(bad)", { XX } },
3931 { VEX_LEN_TABLE (VEX_LEN_DB_P_2) },
3932 { "(bad)", { XX } },
3933 },
3934
3935 /* PREFIX_VEX_DC */
3936 {
3937 { "(bad)", { XX } },
3938 { "(bad)", { XX } },
3939 { VEX_LEN_TABLE (VEX_LEN_DC_P_2) },
3940 { "(bad)", { XX } },
3941 },
3942
3943 /* PREFIX_VEX_DD */
3944 {
3945 { "(bad)", { XX } },
3946 { "(bad)", { XX } },
3947 { VEX_LEN_TABLE (VEX_LEN_DD_P_2) },
3948 { "(bad)", { XX } },
3949 },
3950
3951 /* PREFIX_VEX_DE */
3952 {
3953 { "(bad)", { XX } },
3954 { "(bad)", { XX } },
3955 { VEX_LEN_TABLE (VEX_LEN_DE_P_2) },
3956 { "(bad)", { XX } },
3957 },
3958
3959 /* PREFIX_VEX_DF */
3960 {
3961 { "(bad)", { XX } },
3962 { "(bad)", { XX } },
3963 { VEX_LEN_TABLE (VEX_LEN_DF_P_2) },
3964 { "(bad)", { XX } },
3965 },
3966
3967 /* PREFIX_VEX_E0 */
3968 {
3969 { "(bad)", { XX } },
3970 { "(bad)", { XX } },
3971 { VEX_LEN_TABLE (VEX_LEN_E0_P_2) },
3972 { "(bad)", { XX } },
3973 },
3974
3975 /* PREFIX_VEX_E1 */
3976 {
3977 { "(bad)", { XX } },
3978 { "(bad)", { XX } },
3979 { VEX_LEN_TABLE (VEX_LEN_E1_P_2) },
3980 { "(bad)", { XX } },
3981 },
3982
3983 /* PREFIX_VEX_E2 */
3984 {
3985 { "(bad)", { XX } },
3986 { "(bad)", { XX } },
3987 { VEX_LEN_TABLE (VEX_LEN_E2_P_2) },
3988 { "(bad)", { XX } },
3989 },
3990
3991 /* PREFIX_VEX_E3 */
3992 {
3993 { "(bad)", { XX } },
3994 { "(bad)", { XX } },
3995 { VEX_LEN_TABLE (VEX_LEN_E3_P_2) },
3996 { "(bad)", { XX } },
3997 },
3998
3999 /* PREFIX_VEX_E4 */
4000 {
4001 { "(bad)", { XX } },
4002 { "(bad)", { XX } },
4003 { VEX_LEN_TABLE (VEX_LEN_E4_P_2) },
4004 { "(bad)", { XX } },
4005 },
4006
4007 /* PREFIX_VEX_E5 */
4008 {
4009 { "(bad)", { XX } },
4010 { "(bad)", { XX } },
4011 { VEX_LEN_TABLE (VEX_LEN_E5_P_2) },
4012 { "(bad)", { XX } },
4013 },
4014
4015 /* PREFIX_VEX_E6 */
4016 {
4017 { "(bad)", { XX } },
4018 { "vcvtdq2pd", { XM, EXxmmq } },
4019 { "vcvttpd2dq%XY", { XMM, EXx } },
4020 { "vcvtpd2dq%XY", { XMM, EXx } },
4021 },
4022
4023 /* PREFIX_VEX_E7 */
4024 {
4025 { "(bad)", { XX } },
4026 { "(bad)", { XX } },
4027 { MOD_TABLE (MOD_VEX_E7_PREFIX_2) },
4028 { "(bad)", { XX } },
4029 },
4030
4031 /* PREFIX_VEX_E8 */
4032 {
4033 { "(bad)", { XX } },
4034 { "(bad)", { XX } },
4035 { VEX_LEN_TABLE (VEX_LEN_E8_P_2) },
4036 { "(bad)", { XX } },
4037 },
4038
4039 /* PREFIX_VEX_E9 */
4040 {
4041 { "(bad)", { XX } },
4042 { "(bad)", { XX } },
4043 { VEX_LEN_TABLE (VEX_LEN_E9_P_2) },
4044 { "(bad)", { XX } },
4045 },
4046
4047 /* PREFIX_VEX_EA */
4048 {
4049 { "(bad)", { XX } },
4050 { "(bad)", { XX } },
4051 { VEX_LEN_TABLE (VEX_LEN_EA_P_2) },
4052 { "(bad)", { XX } },
4053 },
4054
4055 /* PREFIX_VEX_EB */
4056 {
4057 { "(bad)", { XX } },
4058 { "(bad)", { XX } },
4059 { VEX_LEN_TABLE (VEX_LEN_EB_P_2) },
4060 { "(bad)", { XX } },
4061 },
4062
4063 /* PREFIX_VEX_EC */
4064 {
4065 { "(bad)", { XX } },
4066 { "(bad)", { XX } },
4067 { VEX_LEN_TABLE (VEX_LEN_EC_P_2) },
4068 { "(bad)", { XX } },
4069 },
4070
4071 /* PREFIX_VEX_ED */
4072 {
4073 { "(bad)", { XX } },
4074 { "(bad)", { XX } },
4075 { VEX_LEN_TABLE (VEX_LEN_ED_P_2) },
4076 { "(bad)", { XX } },
4077 },
4078
4079 /* PREFIX_VEX_EE */
4080 {
4081 { "(bad)", { XX } },
4082 { "(bad)", { XX } },
4083 { VEX_LEN_TABLE (VEX_LEN_EE_P_2) },
4084 { "(bad)", { XX } },
4085 },
4086
4087 /* PREFIX_VEX_EF */
4088 {
4089 { "(bad)", { XX } },
4090 { "(bad)", { XX } },
4091 { VEX_LEN_TABLE (VEX_LEN_EF_P_2) },
4092 { "(bad)", { XX } },
4093 },
4094
4095 /* PREFIX_VEX_F0 */
4096 {
4097 { "(bad)", { XX } },
4098 { "(bad)", { XX } },
4099 { "(bad)", { XX } },
4100 { MOD_TABLE (MOD_VEX_F0_PREFIX_3) },
4101 },
4102
4103 /* PREFIX_VEX_F1 */
4104 {
4105 { "(bad)", { XX } },
4106 { "(bad)", { XX } },
4107 { VEX_LEN_TABLE (VEX_LEN_F1_P_2) },
4108 { "(bad)", { XX } },
4109 },
4110
4111 /* PREFIX_VEX_F2 */
4112 {
4113 { "(bad)", { XX } },
4114 { "(bad)", { XX } },
4115 { VEX_LEN_TABLE (VEX_LEN_F2_P_2) },
4116 { "(bad)", { XX } },
4117 },
4118
4119 /* PREFIX_VEX_F3 */
4120 {
4121 { "(bad)", { XX } },
4122 { "(bad)", { XX } },
4123 { VEX_LEN_TABLE (VEX_LEN_F3_P_2) },
4124 { "(bad)", { XX } },
4125 },
4126
4127 /* PREFIX_VEX_F4 */
4128 {
4129 { "(bad)", { XX } },
4130 { "(bad)", { XX } },
4131 { VEX_LEN_TABLE (VEX_LEN_F4_P_2) },
4132 { "(bad)", { XX } },
4133 },
4134
4135 /* PREFIX_VEX_F5 */
4136 {
4137 { "(bad)", { XX } },
4138 { "(bad)", { XX } },
4139 { VEX_LEN_TABLE (VEX_LEN_F5_P_2) },
4140 { "(bad)", { XX } },
4141 },
4142
4143 /* PREFIX_VEX_F6 */
4144 {
4145 { "(bad)", { XX } },
4146 { "(bad)", { XX } },
4147 { VEX_LEN_TABLE (VEX_LEN_F6_P_2) },
4148 { "(bad)", { XX } },
4149 },
4150
4151 /* PREFIX_VEX_F7 */
4152 {
4153 { "(bad)", { XX } },
4154 { "(bad)", { XX } },
4155 { VEX_LEN_TABLE (VEX_LEN_F7_P_2) },
4156 { "(bad)", { XX } },
4157 },
4158
4159 /* PREFIX_VEX_F8 */
4160 {
4161 { "(bad)", { XX } },
4162 { "(bad)", { XX } },
4163 { VEX_LEN_TABLE (VEX_LEN_F8_P_2) },
4164 { "(bad)", { XX } },
4165 },
4166
4167 /* PREFIX_VEX_F9 */
4168 {
4169 { "(bad)", { XX } },
4170 { "(bad)", { XX } },
4171 { VEX_LEN_TABLE (VEX_LEN_F9_P_2) },
4172 { "(bad)", { XX } },
4173 },
4174
4175 /* PREFIX_VEX_FA */
4176 {
4177 { "(bad)", { XX } },
4178 { "(bad)", { XX } },
4179 { VEX_LEN_TABLE (VEX_LEN_FA_P_2) },
4180 { "(bad)", { XX } },
4181 },
4182
4183 /* PREFIX_VEX_FB */
4184 {
4185 { "(bad)", { XX } },
4186 { "(bad)", { XX } },
4187 { VEX_LEN_TABLE (VEX_LEN_FB_P_2) },
4188 { "(bad)", { XX } },
4189 },
4190
4191 /* PREFIX_VEX_FC */
4192 {
4193 { "(bad)", { XX } },
4194 { "(bad)", { XX } },
4195 { VEX_LEN_TABLE (VEX_LEN_FC_P_2) },
4196 { "(bad)", { XX } },
4197 },
4198
4199 /* PREFIX_VEX_FD */
4200 {
4201 { "(bad)", { XX } },
4202 { "(bad)", { XX } },
4203 { VEX_LEN_TABLE (VEX_LEN_FD_P_2) },
4204 { "(bad)", { XX } },
4205 },
4206
4207 /* PREFIX_VEX_FE */
4208 {
4209 { "(bad)", { XX } },
4210 { "(bad)", { XX } },
4211 { VEX_LEN_TABLE (VEX_LEN_FE_P_2) },
4212 { "(bad)", { XX } },
4213 },
4214
4215 /* PREFIX_VEX_3800 */
4216 {
4217 { "(bad)", { XX } },
4218 { "(bad)", { XX } },
4219 { VEX_LEN_TABLE (VEX_LEN_3800_P_2) },
4220 { "(bad)", { XX } },
4221 },
4222
4223 /* PREFIX_VEX_3801 */
4224 {
4225 { "(bad)", { XX } },
4226 { "(bad)", { XX } },
4227 { VEX_LEN_TABLE (VEX_LEN_3801_P_2) },
4228 { "(bad)", { XX } },
4229 },
4230
4231 /* PREFIX_VEX_3802 */
4232 {
4233 { "(bad)", { XX } },
4234 { "(bad)", { XX } },
4235 { VEX_LEN_TABLE (VEX_LEN_3802_P_2) },
4236 { "(bad)", { XX } },
4237 },
4238
4239 /* PREFIX_VEX_3803 */
4240 {
4241 { "(bad)", { XX } },
4242 { "(bad)", { XX } },
4243 { VEX_LEN_TABLE (VEX_LEN_3803_P_2) },
4244 { "(bad)", { XX } },
4245 },
4246
4247 /* PREFIX_VEX_3804 */
4248 {
4249 { "(bad)", { XX } },
4250 { "(bad)", { XX } },
4251 { VEX_LEN_TABLE (VEX_LEN_3804_P_2) },
4252 { "(bad)", { XX } },
4253 },
4254
4255 /* PREFIX_VEX_3805 */
4256 {
4257 { "(bad)", { XX } },
4258 { "(bad)", { XX } },
4259 { VEX_LEN_TABLE (VEX_LEN_3805_P_2) },
4260 { "(bad)", { XX } },
4261 },
4262
4263 /* PREFIX_VEX_3806 */
4264 {
4265 { "(bad)", { XX } },
4266 { "(bad)", { XX } },
4267 { VEX_LEN_TABLE (VEX_LEN_3806_P_2) },
4268 { "(bad)", { XX } },
4269 },
4270
4271 /* PREFIX_VEX_3807 */
4272 {
4273 { "(bad)", { XX } },
4274 { "(bad)", { XX } },
4275 { VEX_LEN_TABLE (VEX_LEN_3807_P_2) },
4276 { "(bad)", { XX } },
4277 },
4278
4279 /* PREFIX_VEX_3808 */
4280 {
4281 { "(bad)", { XX } },
4282 { "(bad)", { XX } },
4283 { VEX_LEN_TABLE (VEX_LEN_3808_P_2) },
4284 { "(bad)", { XX } },
4285 },
4286
4287 /* PREFIX_VEX_3809 */
4288 {
4289 { "(bad)", { XX } },
4290 { "(bad)", { XX } },
4291 { VEX_LEN_TABLE (VEX_LEN_3809_P_2) },
4292 { "(bad)", { XX } },
4293 },
4294
4295 /* PREFIX_VEX_380A */
4296 {
4297 { "(bad)", { XX } },
4298 { "(bad)", { XX } },
4299 { VEX_LEN_TABLE (VEX_LEN_380A_P_2) },
4300 { "(bad)", { XX } },
4301 },
4302
4303 /* PREFIX_VEX_380B */
4304 {
4305 { "(bad)", { XX } },
4306 { "(bad)", { XX } },
4307 { VEX_LEN_TABLE (VEX_LEN_380B_P_2) },
4308 { "(bad)", { XX } },
4309 },
4310
4311 /* PREFIX_VEX_380C */
4312 {
4313 { "(bad)", { XX } },
4314 { "(bad)", { XX } },
4315 { "vpermilps", { XM, Vex, EXx } },
4316 { "(bad)", { XX } },
4317 },
4318
4319 /* PREFIX_VEX_380D */
4320 {
4321 { "(bad)", { XX } },
4322 { "(bad)", { XX } },
4323 { "vpermilpd", { XM, Vex, EXx } },
4324 { "(bad)", { XX } },
4325 },
4326
4327 /* PREFIX_VEX_380E */
4328 {
4329 { "(bad)", { XX } },
4330 { "(bad)", { XX } },
4331 { "vtestps", { XM, EXx } },
4332 { "(bad)", { XX } },
4333 },
4334
4335 /* PREFIX_VEX_380F */
4336 {
4337 { "(bad)", { XX } },
4338 { "(bad)", { XX } },
4339 { "vtestpd", { XM, EXx } },
4340 { "(bad)", { XX } },
4341 },
4342
4343 /* PREFIX_VEX_3817 */
4344 {
4345 { "(bad)", { XX } },
4346 { "(bad)", { XX } },
4347 { "vptest", { XM, EXx } },
4348 { "(bad)", { XX } },
4349 },
4350
4351 /* PREFIX_VEX_3818 */
4352 {
4353 { "(bad)", { XX } },
4354 { "(bad)", { XX } },
4355 { MOD_TABLE (MOD_VEX_3818_PREFIX_2) },
4356 { "(bad)", { XX } },
4357 },
4358
4359 /* PREFIX_VEX_3819 */
4360 {
4361 { "(bad)", { XX } },
4362 { "(bad)", { XX } },
4363 { MOD_TABLE (MOD_VEX_3819_PREFIX_2) },
4364 { "(bad)", { XX } },
4365 },
4366
4367 /* PREFIX_VEX_381A */
4368 {
4369 { "(bad)", { XX } },
4370 { "(bad)", { XX } },
4371 { MOD_TABLE (MOD_VEX_381A_PREFIX_2) },
4372 { "(bad)", { XX } },
4373 },
4374
4375 /* PREFIX_VEX_381C */
4376 {
4377 { "(bad)", { XX } },
4378 { "(bad)", { XX } },
4379 { VEX_LEN_TABLE (VEX_LEN_381C_P_2) },
4380 { "(bad)", { XX } },
4381 },
4382
4383 /* PREFIX_VEX_381D */
4384 {
4385 { "(bad)", { XX } },
4386 { "(bad)", { XX } },
4387 { VEX_LEN_TABLE (VEX_LEN_381D_P_2) },
4388 { "(bad)", { XX } },
4389 },
4390
4391 /* PREFIX_VEX_381E */
4392 {
4393 { "(bad)", { XX } },
4394 { "(bad)", { XX } },
4395 { VEX_LEN_TABLE (VEX_LEN_381E_P_2) },
4396 { "(bad)", { XX } },
4397 },
4398
4399 /* PREFIX_VEX_3820 */
4400 {
4401 { "(bad)", { XX } },
4402 { "(bad)", { XX } },
4403 { VEX_LEN_TABLE (VEX_LEN_3820_P_2) },
4404 { "(bad)", { XX } },
4405 },
4406
4407 /* PREFIX_VEX_3821 */
4408 {
4409 { "(bad)", { XX } },
4410 { "(bad)", { XX } },
4411 { VEX_LEN_TABLE (VEX_LEN_3821_P_2) },
4412 { "(bad)", { XX } },
4413 },
4414
4415 /* PREFIX_VEX_3822 */
4416 {
4417 { "(bad)", { XX } },
4418 { "(bad)", { XX } },
4419 { VEX_LEN_TABLE (VEX_LEN_3822_P_2) },
4420 { "(bad)", { XX } },
4421 },
4422
4423 /* PREFIX_VEX_3823 */
4424 {
4425 { "(bad)", { XX } },
4426 { "(bad)", { XX } },
4427 { VEX_LEN_TABLE (VEX_LEN_3823_P_2) },
4428 { "(bad)", { XX } },
4429 },
4430
4431 /* PREFIX_VEX_3824 */
4432 {
4433 { "(bad)", { XX } },
4434 { "(bad)", { XX } },
4435 { VEX_LEN_TABLE (VEX_LEN_3824_P_2) },
4436 { "(bad)", { XX } },
4437 },
4438
4439 /* PREFIX_VEX_3825 */
4440 {
4441 { "(bad)", { XX } },
4442 { "(bad)", { XX } },
4443 { VEX_LEN_TABLE (VEX_LEN_3825_P_2) },
4444 { "(bad)", { XX } },
4445 },
4446
4447 /* PREFIX_VEX_3828 */
4448 {
4449 { "(bad)", { XX } },
4450 { "(bad)", { XX } },
4451 { VEX_LEN_TABLE (VEX_LEN_3828_P_2) },
4452 { "(bad)", { XX } },
4453 },
4454
4455 /* PREFIX_VEX_3829 */
4456 {
4457 { "(bad)", { XX } },
4458 { "(bad)", { XX } },
4459 { VEX_LEN_TABLE (VEX_LEN_3829_P_2) },
4460 { "(bad)", { XX } },
4461 },
4462
4463 /* PREFIX_VEX_382A */
4464 {
4465 { "(bad)", { XX } },
4466 { "(bad)", { XX } },
4467 { MOD_TABLE (MOD_VEX_382A_PREFIX_2) },
4468 { "(bad)", { XX } },
4469 },
4470
4471 /* PREFIX_VEX_382B */
4472 {
4473 { "(bad)", { XX } },
4474 { "(bad)", { XX } },
4475 { VEX_LEN_TABLE (VEX_LEN_382B_P_2) },
4476 { "(bad)", { XX } },
4477 },
4478
4479 /* PREFIX_VEX_382C */
4480 {
4481 { "(bad)", { XX } },
4482 { "(bad)", { XX } },
4483 { MOD_TABLE (MOD_VEX_382C_PREFIX_2) },
4484 { "(bad)", { XX } },
4485 },
4486
4487 /* PREFIX_VEX_382D */
4488 {
4489 { "(bad)", { XX } },
4490 { "(bad)", { XX } },
4491 { MOD_TABLE (MOD_VEX_382D_PREFIX_2) },
4492 { "(bad)", { XX } },
4493 },
4494
4495 /* PREFIX_VEX_382E */
4496 {
4497 { "(bad)", { XX } },
4498 { "(bad)", { XX } },
4499 { MOD_TABLE (MOD_VEX_382E_PREFIX_2) },
4500 { "(bad)", { XX } },
4501 },
4502
4503 /* PREFIX_VEX_382F */
4504 {
4505 { "(bad)", { XX } },
4506 { "(bad)", { XX } },
4507 { MOD_TABLE (MOD_VEX_382F_PREFIX_2) },
4508 { "(bad)", { XX } },
4509 },
4510
4511 /* PREFIX_VEX_3830 */
4512 {
4513 { "(bad)", { XX } },
4514 { "(bad)", { XX } },
4515 { VEX_LEN_TABLE (VEX_LEN_3830_P_2) },
4516 { "(bad)", { XX } },
4517 },
4518
4519 /* PREFIX_VEX_3831 */
4520 {
4521 { "(bad)", { XX } },
4522 { "(bad)", { XX } },
4523 { VEX_LEN_TABLE (VEX_LEN_3831_P_2) },
4524 { "(bad)", { XX } },
4525 },
4526
4527 /* PREFIX_VEX_3832 */
4528 {
4529 { "(bad)", { XX } },
4530 { "(bad)", { XX } },
4531 { VEX_LEN_TABLE (VEX_LEN_3832_P_2) },
4532 { "(bad)", { XX } },
4533 },
4534
4535 /* PREFIX_VEX_3833 */
4536 {
4537 { "(bad)", { XX } },
4538 { "(bad)", { XX } },
4539 { VEX_LEN_TABLE (VEX_LEN_3833_P_2) },
4540 { "(bad)", { XX } },
4541 },
4542
4543 /* PREFIX_VEX_3834 */
4544 {
4545 { "(bad)", { XX } },
4546 { "(bad)", { XX } },
4547 { VEX_LEN_TABLE (VEX_LEN_3834_P_2) },
4548 { "(bad)", { XX } },
4549 },
4550
4551 /* PREFIX_VEX_3835 */
4552 {
4553 { "(bad)", { XX } },
4554 { "(bad)", { XX } },
4555 { VEX_LEN_TABLE (VEX_LEN_3835_P_2) },
4556 { "(bad)", { XX } },
4557 },
4558
4559 /* PREFIX_VEX_3837 */
4560 {
4561 { "(bad)", { XX } },
4562 { "(bad)", { XX } },
4563 { VEX_LEN_TABLE (VEX_LEN_3837_P_2) },
4564 { "(bad)", { XX } },
4565 },
4566
4567 /* PREFIX_VEX_3838 */
4568 {
4569 { "(bad)", { XX } },
4570 { "(bad)", { XX } },
4571 { VEX_LEN_TABLE (VEX_LEN_3838_P_2) },
4572 { "(bad)", { XX } },
4573 },
4574
4575 /* PREFIX_VEX_3839 */
4576 {
4577 { "(bad)", { XX } },
4578 { "(bad)", { XX } },
4579 { VEX_LEN_TABLE (VEX_LEN_3839_P_2) },
4580 { "(bad)", { XX } },
4581 },
4582
4583 /* PREFIX_VEX_383A */
4584 {
4585 { "(bad)", { XX } },
4586 { "(bad)", { XX } },
4587 { VEX_LEN_TABLE (VEX_LEN_383A_P_2) },
4588 { "(bad)", { XX } },
4589 },
4590
4591 /* PREFIX_VEX_383B */
4592 {
4593 { "(bad)", { XX } },
4594 { "(bad)", { XX } },
4595 { VEX_LEN_TABLE (VEX_LEN_383B_P_2) },
4596 { "(bad)", { XX } },
4597 },
4598
4599 /* PREFIX_VEX_383C */
4600 {
4601 { "(bad)", { XX } },
4602 { "(bad)", { XX } },
4603 { VEX_LEN_TABLE (VEX_LEN_383C_P_2) },
4604 { "(bad)", { XX } },
4605 },
4606
4607 /* PREFIX_VEX_383D */
4608 {
4609 { "(bad)", { XX } },
4610 { "(bad)", { XX } },
4611 { VEX_LEN_TABLE (VEX_LEN_383D_P_2) },
4612 { "(bad)", { XX } },
4613 },
4614
4615 /* PREFIX_VEX_383E */
4616 {
4617 { "(bad)", { XX } },
4618 { "(bad)", { XX } },
4619 { VEX_LEN_TABLE (VEX_LEN_383E_P_2) },
4620 { "(bad)", { XX } },
4621 },
4622
4623 /* PREFIX_VEX_383F */
4624 {
4625 { "(bad)", { XX } },
4626 { "(bad)", { XX } },
4627 { VEX_LEN_TABLE (VEX_LEN_383F_P_2) },
4628 { "(bad)", { XX } },
4629 },
4630
4631 /* PREFIX_VEX_3840 */
4632 {
4633 { "(bad)", { XX } },
4634 { "(bad)", { XX } },
4635 { VEX_LEN_TABLE (VEX_LEN_3840_P_2) },
4636 { "(bad)", { XX } },
4637 },
4638
4639 /* PREFIX_VEX_3841 */
4640 {
4641 { "(bad)", { XX } },
4642 { "(bad)", { XX } },
4643 { VEX_LEN_TABLE (VEX_LEN_3841_P_2) },
4644 { "(bad)", { XX } },
4645 },
4646
0bfee649 4647 /* PREFIX_VEX_3896 */
a5ff0eb2
L
4648 {
4649 { "(bad)", { XX } },
4650 { "(bad)", { XX } },
0bfee649 4651 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4652 { "(bad)", { XX } },
4653 },
4654
0bfee649 4655 /* PREFIX_VEX_3897 */
a5ff0eb2
L
4656 {
4657 { "(bad)", { XX } },
4658 { "(bad)", { XX } },
0bfee649 4659 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4660 { "(bad)", { XX } },
4661 },
4662
0bfee649 4663 /* PREFIX_VEX_3898 */
a5ff0eb2
L
4664 {
4665 { "(bad)", { XX } },
4666 { "(bad)", { XX } },
0bfee649 4667 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4668 { "(bad)", { XX } },
4669 },
4670
0bfee649 4671 /* PREFIX_VEX_3899 */
a5ff0eb2
L
4672 {
4673 { "(bad)", { XX } },
4674 { "(bad)", { XX } },
0bfee649 4675 { "vfmadd132s%XW", { XM, Vex, EXVexWdq } },
a5ff0eb2
L
4676 { "(bad)", { XX } },
4677 },
4678
0bfee649 4679 /* PREFIX_VEX_389A */
a5ff0eb2
L
4680 {
4681 { "(bad)", { XX } },
4682 { "(bad)", { XX } },
0bfee649 4683 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4684 { "(bad)", { XX } },
4685 },
4686
0bfee649 4687 /* PREFIX_VEX_389B */
c0f3af97
L
4688 {
4689 { "(bad)", { XX } },
4690 { "(bad)", { XX } },
0bfee649 4691 { "vfmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4692 { "(bad)", { XX } },
4693 },
4694
0bfee649 4695 /* PREFIX_VEX_389C */
c0f3af97
L
4696 {
4697 { "(bad)", { XX } },
4698 { "(bad)", { XX } },
0bfee649 4699 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4700 { "(bad)", { XX } },
4701 },
4702
0bfee649 4703 /* PREFIX_VEX_389D */
c0f3af97
L
4704 {
4705 { "(bad)", { XX } },
4706 { "(bad)", { XX } },
0bfee649 4707 { "vfnmadd132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4708 { "(bad)", { XX } },
4709 },
4710
0bfee649 4711 /* PREFIX_VEX_389E */
c0f3af97
L
4712 {
4713 { "(bad)", { XX } },
4714 { "(bad)", { XX } },
0bfee649 4715 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4716 { "(bad)", { XX } },
4717 },
4718
0bfee649 4719 /* PREFIX_VEX_389F */
c0f3af97
L
4720 {
4721 { "(bad)", { XX } },
4722 { "(bad)", { XX } },
0bfee649 4723 { "vfnmsub132s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4724 { "(bad)", { XX } },
4725 },
4726
0bfee649 4727 /* PREFIX_VEX_38A6 */
c0f3af97
L
4728 {
4729 { "(bad)", { XX } },
4730 { "(bad)", { XX } },
0bfee649 4731 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4732 { "(bad)", { XX } },
4733 },
4734
0bfee649 4735 /* PREFIX_VEX_38A7 */
c0f3af97
L
4736 {
4737 { "(bad)", { XX } },
4738 { "(bad)", { XX } },
0bfee649 4739 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4740 { "(bad)", { XX } },
4741 },
4742
0bfee649 4743 /* PREFIX_VEX_38A8 */
c0f3af97
L
4744 {
4745 { "(bad)", { XX } },
4746 { "(bad)", { XX } },
0bfee649 4747 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4748 { "(bad)", { XX } },
4749 },
4750
0bfee649 4751 /* PREFIX_VEX_38A9 */
c0f3af97
L
4752 {
4753 { "(bad)", { XX } },
4754 { "(bad)", { XX } },
0bfee649 4755 { "vfmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4756 { "(bad)", { XX } },
4757 },
4758
0bfee649 4759 /* PREFIX_VEX_38AA */
c0f3af97
L
4760 {
4761 { "(bad)", { XX } },
4762 { "(bad)", { XX } },
0bfee649 4763 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4764 { "(bad)", { XX } },
4765 },
4766
0bfee649 4767 /* PREFIX_VEX_38AB */
c0f3af97
L
4768 {
4769 { "(bad)", { XX } },
4770 { "(bad)", { XX } },
0bfee649 4771 { "vfmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4772 { "(bad)", { XX } },
4773 },
4774
0bfee649 4775 /* PREFIX_VEX_38AC */
c0f3af97
L
4776 {
4777 { "(bad)", { XX } },
4778 { "(bad)", { XX } },
0bfee649 4779 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4780 { "(bad)", { XX } },
4781 },
4782
0bfee649 4783 /* PREFIX_VEX_38AD */
c0f3af97
L
4784 {
4785 { "(bad)", { XX } },
4786 { "(bad)", { XX } },
0bfee649 4787 { "vfnmadd213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4788 { "(bad)", { XX } },
4789 },
4790
0bfee649 4791 /* PREFIX_VEX_38AE */
c0f3af97
L
4792 {
4793 { "(bad)", { XX } },
4794 { "(bad)", { XX } },
0bfee649 4795 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4796 { "(bad)", { XX } },
4797 },
4798
0bfee649 4799 /* PREFIX_VEX_38AF */
c0f3af97
L
4800 {
4801 { "(bad)", { XX } },
4802 { "(bad)", { XX } },
0bfee649 4803 { "vfnmsub213s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4804 { "(bad)", { XX } },
4805 },
4806
0bfee649 4807 /* PREFIX_VEX_38B6 */
c0f3af97
L
4808 {
4809 { "(bad)", { XX } },
4810 { "(bad)", { XX } },
0bfee649 4811 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4812 { "(bad)", { XX } },
4813 },
4814
0bfee649 4815 /* PREFIX_VEX_38B7 */
c0f3af97
L
4816 {
4817 { "(bad)", { XX } },
4818 { "(bad)", { XX } },
0bfee649 4819 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4820 { "(bad)", { XX } },
4821 },
4822
0bfee649 4823 /* PREFIX_VEX_38B8 */
c0f3af97
L
4824 {
4825 { "(bad)", { XX } },
4826 { "(bad)", { XX } },
0bfee649 4827 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4828 { "(bad)", { XX } },
4829 },
4830
0bfee649 4831 /* PREFIX_VEX_38B9 */
c0f3af97
L
4832 {
4833 { "(bad)", { XX } },
4834 { "(bad)", { XX } },
0bfee649 4835 { "vfmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4836 { "(bad)", { XX } },
4837 },
4838
0bfee649 4839 /* PREFIX_VEX_38BA */
c0f3af97
L
4840 {
4841 { "(bad)", { XX } },
4842 { "(bad)", { XX } },
0bfee649 4843 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4844 { "(bad)", { XX } },
4845 },
4846
0bfee649 4847 /* PREFIX_VEX_38BB */
c0f3af97
L
4848 {
4849 { "(bad)", { XX } },
4850 { "(bad)", { XX } },
0bfee649 4851 { "vfmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4852 { "(bad)", { XX } },
4853 },
4854
0bfee649 4855 /* PREFIX_VEX_38BC */
c0f3af97
L
4856 {
4857 { "(bad)", { XX } },
4858 { "(bad)", { XX } },
0bfee649 4859 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4860 { "(bad)", { XX } },
4861 },
4862
0bfee649 4863 /* PREFIX_VEX_38BD */
c0f3af97
L
4864 {
4865 { "(bad)", { XX } },
4866 { "(bad)", { XX } },
0bfee649 4867 { "vfnmadd231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4868 { "(bad)", { XX } },
4869 },
4870
0bfee649 4871 /* PREFIX_VEX_38BE */
c0f3af97
L
4872 {
4873 { "(bad)", { XX } },
4874 { "(bad)", { XX } },
0bfee649 4875 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4876 { "(bad)", { XX } },
4877 },
4878
0bfee649 4879 /* PREFIX_VEX_38BF */
c0f3af97
L
4880 {
4881 { "(bad)", { XX } },
4882 { "(bad)", { XX } },
0bfee649 4883 { "vfnmsub231s%XW", { XM, Vex, EXVexWdq } },
c0f3af97
L
4884 { "(bad)", { XX } },
4885 },
4886
0bfee649 4887 /* PREFIX_VEX_38DB */
c0f3af97
L
4888 {
4889 { "(bad)", { XX } },
4890 { "(bad)", { XX } },
0bfee649 4891 { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
c0f3af97
L
4892 { "(bad)", { XX } },
4893 },
4894
0bfee649 4895 /* PREFIX_VEX_38DC */
c0f3af97
L
4896 {
4897 { "(bad)", { XX } },
4898 { "(bad)", { XX } },
0bfee649 4899 { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
c0f3af97
L
4900 { "(bad)", { XX } },
4901 },
4902
0bfee649 4903 /* PREFIX_VEX_38DD */
c0f3af97
L
4904 {
4905 { "(bad)", { XX } },
4906 { "(bad)", { XX } },
0bfee649 4907 { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
c0f3af97
L
4908 { "(bad)", { XX } },
4909 },
4910
0bfee649 4911 /* PREFIX_VEX_38DE */
c0f3af97
L
4912 {
4913 { "(bad)", { XX } },
4914 { "(bad)", { XX } },
0bfee649 4915 { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
c0f3af97
L
4916 { "(bad)", { XX } },
4917 },
4918
0bfee649 4919 /* PREFIX_VEX_38DF */
c0f3af97
L
4920 {
4921 { "(bad)", { XX } },
4922 { "(bad)", { XX } },
0bfee649 4923 { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
c0f3af97
L
4924 { "(bad)", { XX } },
4925 },
4926
0bfee649 4927 /* PREFIX_VEX_3A04 */
c0f3af97
L
4928 {
4929 { "(bad)", { XX } },
4930 { "(bad)", { XX } },
0bfee649 4931 { "vpermilps", { XM, EXx, Ib } },
c0f3af97
L
4932 { "(bad)", { XX } },
4933 },
4934
0bfee649 4935 /* PREFIX_VEX_3A05 */
c0f3af97
L
4936 {
4937 { "(bad)", { XX } },
4938 { "(bad)", { XX } },
0bfee649 4939 { "vpermilpd", { XM, EXx, Ib } },
c0f3af97
L
4940 { "(bad)", { XX } },
4941 },
4942
0bfee649 4943 /* PREFIX_VEX_3A06 */
c0f3af97
L
4944 {
4945 { "(bad)", { XX } },
4946 { "(bad)", { XX } },
0bfee649 4947 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) },
c0f3af97
L
4948 { "(bad)", { XX } },
4949 },
4950
0bfee649 4951 /* PREFIX_VEX_3A08 */
c0f3af97
L
4952 {
4953 { "(bad)", { XX } },
4954 { "(bad)", { XX } },
0bfee649 4955 { "vroundps", { XM, EXx, Ib } },
c0f3af97
L
4956 { "(bad)", { XX } },
4957 },
4958
0bfee649 4959 /* PREFIX_VEX_3A09 */
c0f3af97
L
4960 {
4961 { "(bad)", { XX } },
4962 { "(bad)", { XX } },
0bfee649 4963 { "vroundpd", { XM, EXx, Ib } },
c0f3af97
L
4964 { "(bad)", { XX } },
4965 },
4966
0bfee649 4967 /* PREFIX_VEX_3A0A */
c0f3af97
L
4968 {
4969 { "(bad)", { XX } },
4970 { "(bad)", { XX } },
0bfee649
L
4971 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) },
4972 { "(bad)", { XX } },
4973 },
4974
4975 /* PREFIX_VEX_3A0B */
4976 {
4977 { "(bad)", { XX } },
4978 { "(bad)", { XX } },
4979 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) },
4980 { "(bad)", { XX } },
4981 },
4982
4983 /* PREFIX_VEX_3A0C */
4984 {
4985 { "(bad)", { XX } },
4986 { "(bad)", { XX } },
4987 { "vblendps", { XM, Vex, EXx, Ib } },
4988 { "(bad)", { XX } },
4989 },
4990
4991 /* PREFIX_VEX_3A0D */
4992 {
4993 { "(bad)", { XX } },
4994 { "(bad)", { XX } },
4995 { "vblendpd", { XM, Vex, EXx, Ib } },
c0f3af97
L
4996 { "(bad)", { XX } },
4997 },
4998
0bfee649
L
4999 /* PREFIX_VEX_3A0E */
5000 {
5001 { "(bad)", { XX } },
5002 { "(bad)", { XX } },
5003 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) },
5004 { "(bad)", { XX } },
5005 },
5006
5007 /* PREFIX_VEX_3A0F */
5008 {
5009 { "(bad)", { XX } },
5010 { "(bad)", { XX } },
5011 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) },
5012 { "(bad)", { XX } },
5013 },
5014
5015 /* PREFIX_VEX_3A14 */
5016 {
5017 { "(bad)", { XX } },
5018 { "(bad)", { XX } },
5019 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) },
5020 { "(bad)", { XX } },
5021 },
5022
5023 /* PREFIX_VEX_3A15 */
5024 {
5025 { "(bad)", { XX } },
5026 { "(bad)", { XX } },
5027 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) },
5028 { "(bad)", { XX } },
5029 },
5030
5031 /* PREFIX_VEX_3A16 */
c0f3af97
L
5032 {
5033 { "(bad)", { XX } },
5034 { "(bad)", { XX } },
0bfee649 5035 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) },
c0f3af97
L
5036 { "(bad)", { XX } },
5037 },
5038
0bfee649 5039 /* PREFIX_VEX_3A17 */
c0f3af97
L
5040 {
5041 { "(bad)", { XX } },
5042 { "(bad)", { XX } },
0bfee649 5043 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) },
c0f3af97
L
5044 { "(bad)", { XX } },
5045 },
5046
0bfee649 5047 /* PREFIX_VEX_3A18 */
c0f3af97
L
5048 {
5049 { "(bad)", { XX } },
5050 { "(bad)", { XX } },
0bfee649 5051 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) },
c0f3af97
L
5052 { "(bad)", { XX } },
5053 },
5054
0bfee649 5055 /* PREFIX_VEX_3A19 */
c0f3af97
L
5056 {
5057 { "(bad)", { XX } },
5058 { "(bad)", { XX } },
0bfee649 5059 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) },
c0f3af97
L
5060 { "(bad)", { XX } },
5061 },
5062
0bfee649 5063 /* PREFIX_VEX_3A20 */
c0f3af97
L
5064 {
5065 { "(bad)", { XX } },
5066 { "(bad)", { XX } },
0bfee649 5067 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) },
c0f3af97
L
5068 { "(bad)", { XX } },
5069 },
5070
0bfee649 5071 /* PREFIX_VEX_3A21 */
c0f3af97
L
5072 {
5073 { "(bad)", { XX } },
5074 { "(bad)", { XX } },
0bfee649 5075 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) },
c0f3af97
L
5076 { "(bad)", { XX } },
5077 },
5078
0bfee649
L
5079 /* PREFIX_VEX_3A22 */
5080 {
5081 { "(bad)", { XX } },
5082 { "(bad)", { XX } },
5083 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) },
5084 { "(bad)", { XX } },
5085 },
5086
5087 /* PREFIX_VEX_3A40 */
c0f3af97
L
5088 {
5089 { "(bad)", { XX } },
5090 { "(bad)", { XX } },
0bfee649 5091 { "vdpps", { XM, Vex, EXx, Ib } },
c0f3af97
L
5092 { "(bad)", { XX } },
5093 },
5094
0bfee649 5095 /* PREFIX_VEX_3A41 */
c0f3af97
L
5096 {
5097 { "(bad)", { XX } },
5098 { "(bad)", { XX } },
0bfee649 5099 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) },
c0f3af97
L
5100 { "(bad)", { XX } },
5101 },
5102
0bfee649 5103 /* PREFIX_VEX_3A42 */
c0f3af97
L
5104 {
5105 { "(bad)", { XX } },
5106 { "(bad)", { XX } },
0bfee649 5107 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) },
c0f3af97
L
5108 { "(bad)", { XX } },
5109 },
5110
ce2f5b3c
L
5111 /* PREFIX_VEX_3A44 */
5112 {
5113 { "(bad)", { XX } },
5114 { "(bad)", { XX } },
5115 { VEX_LEN_TABLE (VEX_LEN_3A44_P_2) },
5116 { "(bad)", { XX } },
5117 },
5118
0bfee649 5119 /* PREFIX_VEX_3A4A */
c0f3af97
L
5120 {
5121 { "(bad)", { XX } },
5122 { "(bad)", { XX } },
0bfee649 5123 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5124 { "(bad)", { XX } },
5125 },
5126
0bfee649 5127 /* PREFIX_VEX_3A4B */
c0f3af97
L
5128 {
5129 { "(bad)", { XX } },
5130 { "(bad)", { XX } },
0bfee649 5131 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
c0f3af97
L
5132 { "(bad)", { XX } },
5133 },
5134
0bfee649 5135 /* PREFIX_VEX_3A4C */
c0f3af97
L
5136 {
5137 { "(bad)", { XX } },
5138 { "(bad)", { XX } },
0bfee649 5139 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) },
c0f3af97
L
5140 { "(bad)", { XX } },
5141 },
5142
922d8de8
DR
5143 /* PREFIX_VEX_3A5C */
5144 {
5145 { "(bad)", { XX } },
5146 { "(bad)", { XX } },
206c2556 5147 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5148 { "(bad)", { XX } },
5149 },
5150
5151 /* PREFIX_VEX_3A5D */
5152 {
5153 { "(bad)", { XX } },
5154 { "(bad)", { XX } },
206c2556 5155 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5156 { "(bad)", { XX } },
5157 },
5158
5159 /* PREFIX_VEX_3A5E */
5160 {
5161 { "(bad)", { XX } },
5162 { "(bad)", { XX } },
206c2556 5163 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5164 { "(bad)", { XX } },
5165 },
5166
5167 /* PREFIX_VEX_3A5F */
5168 {
5169 { "(bad)", { XX } },
5170 { "(bad)", { XX } },
206c2556 5171 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5172 { "(bad)", { XX } },
5173 },
5174
0bfee649 5175 /* PREFIX_VEX_3A60 */
c0f3af97
L
5176 {
5177 { "(bad)", { XX } },
5178 { "(bad)", { XX } },
0bfee649 5179 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) },
c0f3af97
L
5180 { "(bad)", { XX } },
5181 },
5182
0bfee649 5183 /* PREFIX_VEX_3A61 */
c0f3af97
L
5184 {
5185 { "(bad)", { XX } },
5186 { "(bad)", { XX } },
0bfee649 5187 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) },
c0f3af97
L
5188 { "(bad)", { XX } },
5189 },
5190
0bfee649 5191 /* PREFIX_VEX_3A62 */
c0f3af97
L
5192 {
5193 { "(bad)", { XX } },
5194 { "(bad)", { XX } },
0bfee649 5195 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) },
c0f3af97
L
5196 { "(bad)", { XX } },
5197 },
5198
0bfee649 5199 /* PREFIX_VEX_3A63 */
c0f3af97
L
5200 {
5201 { "(bad)", { XX } },
5202 { "(bad)", { XX } },
0bfee649 5203 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) },
c0f3af97
L
5204 { "(bad)", { XX } },
5205 },
a5ff0eb2 5206
922d8de8
DR
5207 /* PREFIX_VEX_3A68 */
5208 {
5209 { "(bad)", { XX } },
5210 { "(bad)", { XX } },
206c2556 5211 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5212 { "(bad)", { XX } },
5213 },
5214
5215 /* PREFIX_VEX_3A69 */
5216 {
5217 { "(bad)", { XX } },
5218 { "(bad)", { XX } },
206c2556 5219 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5220 { "(bad)", { XX } },
5221 },
5222
5223 /* PREFIX_VEX_3A6A */
5224 {
5225 { "(bad)", { XX } },
5226 { "(bad)", { XX } },
5227 { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2) },
5228 { "(bad)", { XX } },
5229 },
5230
5231 /* PREFIX_VEX_3A6B */
5232 {
5233 { "(bad)", { XX } },
5234 { "(bad)", { XX } },
5235 { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2) },
5236 { "(bad)", { XX } },
5237 },
5238
5239 /* PREFIX_VEX_3A6C */
5240 {
5241 { "(bad)", { XX } },
5242 { "(bad)", { XX } },
206c2556 5243 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5244 { "(bad)", { XX } },
5245 },
5246
5247 /* PREFIX_VEX_3A6D */
5248 {
5249 { "(bad)", { XX } },
5250 { "(bad)", { XX } },
206c2556 5251 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5252 { "(bad)", { XX } },
5253 },
5254
5255 /* PREFIX_VEX_3A6E */
5256 {
5257 { "(bad)", { XX } },
5258 { "(bad)", { XX } },
5259 { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2) },
5260 { "(bad)", { XX } },
5261 },
5262
5263 /* PREFIX_VEX_3A6F */
5264 {
5265 { "(bad)", { XX } },
5266 { "(bad)", { XX } },
5267 { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2) },
5268 { "(bad)", { XX } },
5269 },
5270
5271 /* PREFIX_VEX_3A78 */
5272 {
5273 { "(bad)", { XX } },
5274 { "(bad)", { XX } },
206c2556 5275 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5276 { "(bad)", { XX } },
5277 },
5278
5279 /* PREFIX_VEX_3A79 */
5280 {
5281 { "(bad)", { XX } },
5282 { "(bad)", { XX } },
206c2556 5283 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5284 { "(bad)", { XX } },
5285 },
5286
5287 /* PREFIX_VEX_3A7A */
5288 {
5289 { "(bad)", { XX } },
5290 { "(bad)", { XX } },
5291 { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2) },
5292 { "(bad)", { XX } },
5293 },
5294
5295 /* PREFIX_VEX_3A7B */
5296 {
5297 { "(bad)", { XX } },
5298 { "(bad)", { XX } },
5299 { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2) },
5300 { "(bad)", { XX } },
5301 },
5302
5303 /* PREFIX_VEX_3A7C */
5304 {
5305 { "(bad)", { XX } },
5306 { "(bad)", { XX } },
206c2556 5307 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5308 { "(bad)", { XX } },
5309 },
5310
5311 /* PREFIX_VEX_3A7D */
5312 {
5313 { "(bad)", { XX } },
5314 { "(bad)", { XX } },
206c2556 5315 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5316 { "(bad)", { XX } },
5317 },
5318
5319 /* PREFIX_VEX_3A7E */
5320 {
5321 { "(bad)", { XX } },
5322 { "(bad)", { XX } },
5323 { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2) },
5324 { "(bad)", { XX } },
5325 },
5326
5327 /* PREFIX_VEX_3A7F */
5328 {
5329 { "(bad)", { XX } },
5330 { "(bad)", { XX } },
5331 { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) },
5332 { "(bad)", { XX } },
5333 },
5334
a5ff0eb2
L
5335 /* PREFIX_VEX_3ADF */
5336 {
5337 { "(bad)", { XX } },
5338 { "(bad)", { XX } },
5339 { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
5340 { "(bad)", { XX } },
5341 },
c0f3af97
L
5342};
5343
5344static const struct dis386 x86_64_table[][2] = {
5345 /* X86_64_06 */
5346 {
5347 { "push{T|}", { es } },
5348 { "(bad)", { XX } },
5349 },
5350
5351 /* X86_64_07 */
5352 {
5353 { "pop{T|}", { es } },
5354 { "(bad)", { XX } },
5355 },
5356
5357 /* X86_64_0D */
5358 {
5359 { "push{T|}", { cs } },
5360 { "(bad)", { XX } },
5361 },
5362
5363 /* X86_64_16 */
5364 {
5365 { "push{T|}", { ss } },
5366 { "(bad)", { XX } },
5367 },
5368
5369 /* X86_64_17 */
5370 {
5371 { "pop{T|}", { ss } },
5372 { "(bad)", { XX } },
5373 },
5374
5375 /* X86_64_1E */
5376 {
5377 { "push{T|}", { ds } },
5378 { "(bad)", { XX } },
5379 },
5380
5381 /* X86_64_1F */
5382 {
5383 { "pop{T|}", { ds } },
5384 { "(bad)", { XX } },
5385 },
5386
5387 /* X86_64_27 */
5388 {
5389 { "daa", { XX } },
5390 { "(bad)", { XX } },
5391 },
5392
5393 /* X86_64_2F */
5394 {
5395 { "das", { XX } },
5396 { "(bad)", { XX } },
5397 },
5398
5399 /* X86_64_37 */
5400 {
5401 { "aaa", { XX } },
5402 { "(bad)", { XX } },
5403 },
5404
5405 /* X86_64_3F */
5406 {
5407 { "aas", { XX } },
5408 { "(bad)", { XX } },
5409 },
5410
5411 /* X86_64_60 */
5412 {
5413 { "pusha{P|}", { XX } },
5414 { "(bad)", { XX } },
5415 },
5416
5417 /* X86_64_61 */
5418 {
5419 { "popa{P|}", { XX } },
5420 { "(bad)", { XX } },
5421 },
5422
5423 /* X86_64_62 */
5424 {
5425 { MOD_TABLE (MOD_62_32BIT) },
5426 { "(bad)", { XX } },
5427 },
5428
5429 /* X86_64_63 */
5430 {
5431 { "arpl", { Ew, Gw } },
5432 { "movs{lq|xd}", { Gv, Ed } },
5433 },
5434
5435 /* X86_64_6D */
5436 {
5437 { "ins{R|}", { Yzr, indirDX } },
5438 { "ins{G|}", { Yzr, indirDX } },
5439 },
5440
5441 /* X86_64_6F */
5442 {
5443 { "outs{R|}", { indirDXr, Xz } },
5444 { "outs{G|}", { indirDXr, Xz } },
5445 },
5446
5447 /* X86_64_9A */
5448 {
5449 { "Jcall{T|}", { Ap } },
5450 { "(bad)", { XX } },
5451 },
5452
5453 /* X86_64_C4 */
5454 {
5455 { MOD_TABLE (MOD_C4_32BIT) },
5456 { VEX_C4_TABLE (VEX_0F) },
5457 },
5458
5459 /* X86_64_C5 */
5460 {
5461 { MOD_TABLE (MOD_C5_32BIT) },
5462 { VEX_C5_TABLE (VEX_0F) },
5463 },
5464
5465 /* X86_64_CE */
5466 {
5467 { "into", { XX } },
5468 { "(bad)", { XX } },
5469 },
5470
5471 /* X86_64_D4 */
5472 {
5473 { "aam", { sIb } },
5474 { "(bad)", { XX } },
5475 },
5476
5477 /* X86_64_D5 */
5478 {
5479 { "aad", { sIb } },
5480 { "(bad)", { XX } },
5481 },
5482
5483 /* X86_64_EA */
5484 {
5485 { "Jjmp{T|}", { Ap } },
5486 { "(bad)", { XX } },
5487 },
5488
5489 /* X86_64_0F01_REG_0 */
5490 {
5491 { "sgdt{Q|IQ}", { M } },
5492 { "sgdt", { M } },
5493 },
5494
5495 /* X86_64_0F01_REG_1 */
5496 {
5497 { "sidt{Q|IQ}", { M } },
5498 { "sidt", { M } },
5499 },
5500
5501 /* X86_64_0F01_REG_2 */
5502 {
5503 { "lgdt{Q|Q}", { M } },
5504 { "lgdt", { M } },
5505 },
5506
5507 /* X86_64_0F01_REG_3 */
5508 {
5509 { "lidt{Q|Q}", { M } },
5510 { "lidt", { M } },
5511 },
5512};
5513
5514static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5515
5516 /* THREE_BYTE_0F38 */
c0f3af97
L
5517 {
5518 /* 00 */
c1e679ec
DR
5519 { "pshufb", { MX, EM } },
5520 { "phaddw", { MX, EM } },
5521 { "phaddd", { MX, EM } },
5522 { "phaddsw", { MX, EM } },
5523 { "pmaddubsw", { MX, EM } },
5524 { "phsubw", { MX, EM } },
5525 { "phsubd", { MX, EM } },
5526 { "phsubsw", { MX, EM } },
c0f3af97 5527 /* 08 */
c1e679ec
DR
5528 { "psignb", { MX, EM } },
5529 { "psignw", { MX, EM } },
5530 { "psignd", { MX, EM } },
5531 { "pmulhrsw", { MX, EM } },
c0f3af97
L
5532 { "(bad)", { XX } },
5533 { "(bad)", { XX } },
5534 { "(bad)", { XX } },
5535 { "(bad)", { XX } },
f88c9eb0
SP
5536 /* 10 */
5537 { PREFIX_TABLE (PREFIX_0F3810) },
5538 { "(bad)", { XX } },
5539 { "(bad)", { XX } },
5540 { "(bad)", { XX } },
5541 { PREFIX_TABLE (PREFIX_0F3814) },
5542 { PREFIX_TABLE (PREFIX_0F3815) },
5543 { "(bad)", { XX } },
5544 { PREFIX_TABLE (PREFIX_0F3817) },
5545 /* 18 */
5546 { "(bad)", { XX } },
5547 { "(bad)", { XX } },
5548 { "(bad)", { XX } },
5549 { "(bad)", { XX } },
5550 { "pabsb", { MX, EM } },
5551 { "pabsw", { MX, EM } },
5552 { "pabsd", { MX, EM } },
5553 { "(bad)", { XX } },
5554 /* 20 */
5555 { PREFIX_TABLE (PREFIX_0F3820) },
5556 { PREFIX_TABLE (PREFIX_0F3821) },
5557 { PREFIX_TABLE (PREFIX_0F3822) },
5558 { PREFIX_TABLE (PREFIX_0F3823) },
5559 { PREFIX_TABLE (PREFIX_0F3824) },
5560 { PREFIX_TABLE (PREFIX_0F3825) },
5561 { "(bad)", { XX } },
5562 { "(bad)", { XX } },
5563 /* 28 */
5564 { PREFIX_TABLE (PREFIX_0F3828) },
5565 { PREFIX_TABLE (PREFIX_0F3829) },
5566 { PREFIX_TABLE (PREFIX_0F382A) },
5567 { PREFIX_TABLE (PREFIX_0F382B) },
5568 { "(bad)", { XX } },
5569 { "(bad)", { XX } },
5570 { "(bad)", { XX } },
5571 { "(bad)", { XX } },
5572 /* 30 */
5573 { PREFIX_TABLE (PREFIX_0F3830) },
5574 { PREFIX_TABLE (PREFIX_0F3831) },
5575 { PREFIX_TABLE (PREFIX_0F3832) },
5576 { PREFIX_TABLE (PREFIX_0F3833) },
5577 { PREFIX_TABLE (PREFIX_0F3834) },
5578 { PREFIX_TABLE (PREFIX_0F3835) },
5579 { "(bad)", { XX } },
5580 { PREFIX_TABLE (PREFIX_0F3837) },
5581 /* 38 */
5582 { PREFIX_TABLE (PREFIX_0F3838) },
5583 { PREFIX_TABLE (PREFIX_0F3839) },
5584 { PREFIX_TABLE (PREFIX_0F383A) },
5585 { PREFIX_TABLE (PREFIX_0F383B) },
5586 { PREFIX_TABLE (PREFIX_0F383C) },
5587 { PREFIX_TABLE (PREFIX_0F383D) },
5588 { PREFIX_TABLE (PREFIX_0F383E) },
5589 { PREFIX_TABLE (PREFIX_0F383F) },
5590 /* 40 */
5591 { PREFIX_TABLE (PREFIX_0F3840) },
5592 { PREFIX_TABLE (PREFIX_0F3841) },
5593 { "(bad)", { XX } },
5594 { "(bad)", { XX } },
5595 { "(bad)", { XX } },
5596 { "(bad)", { XX } },
5597 { "(bad)", { XX } },
5598 { "(bad)", { XX } },
5599 /* 48 */
5600 { "(bad)", { XX } },
5601 { "(bad)", { XX } },
5602 { "(bad)", { XX } },
5603 { "(bad)", { XX } },
5604 { "(bad)", { XX } },
5605 { "(bad)", { XX } },
5606 { "(bad)", { XX } },
5607 { "(bad)", { XX } },
5608 /* 50 */
5609 { "(bad)", { XX } },
5610 { "(bad)", { XX } },
5611 { "(bad)", { XX } },
5612 { "(bad)", { XX } },
5613 { "(bad)", { XX } },
5614 { "(bad)", { XX } },
5615 { "(bad)", { XX } },
5616 { "(bad)", { XX } },
5617 /* 58 */
5618 { "(bad)", { XX } },
5619 { "(bad)", { XX } },
5620 { "(bad)", { XX } },
5621 { "(bad)", { XX } },
5622 { "(bad)", { XX } },
5623 { "(bad)", { XX } },
5624 { "(bad)", { XX } },
5625 { "(bad)", { XX } },
5626 /* 60 */
5627 { "(bad)", { XX } },
5628 { "(bad)", { XX } },
5629 { "(bad)", { XX } },
5630 { "(bad)", { XX } },
5631 { "(bad)", { XX } },
5632 { "(bad)", { XX } },
5633 { "(bad)", { XX } },
5634 { "(bad)", { XX } },
5635 /* 68 */
5636 { "(bad)", { XX } },
5637 { "(bad)", { XX } },
5638 { "(bad)", { XX } },
5639 { "(bad)", { XX } },
5640 { "(bad)", { XX } },
5641 { "(bad)", { XX } },
5642 { "(bad)", { XX } },
5643 { "(bad)", { XX } },
5644 /* 70 */
5645 { "(bad)", { XX } },
5646 { "(bad)", { XX } },
5647 { "(bad)", { XX } },
5648 { "(bad)", { XX } },
5649 { "(bad)", { XX } },
5650 { "(bad)", { XX } },
5651 { "(bad)", { XX } },
5652 { "(bad)", { XX } },
5653 /* 78 */
5654 { "(bad)", { XX } },
5655 { "(bad)", { XX } },
5656 { "(bad)", { XX } },
5657 { "(bad)", { XX } },
5658 { "(bad)", { XX } },
5659 { "(bad)", { XX } },
5660 { "(bad)", { XX } },
5661 { "(bad)", { XX } },
5662 /* 80 */
5663 { PREFIX_TABLE (PREFIX_0F3880) },
5664 { PREFIX_TABLE (PREFIX_0F3881) },
5665 { "(bad)", { XX } },
5666 { "(bad)", { XX } },
5667 { "(bad)", { XX } },
5668 { "(bad)", { XX } },
5669 { "(bad)", { XX } },
5670 { "(bad)", { XX } },
5671 /* 88 */
5672 { "(bad)", { XX } },
5673 { "(bad)", { XX } },
5674 { "(bad)", { XX } },
5675 { "(bad)", { XX } },
5676 { "(bad)", { XX } },
5677 { "(bad)", { XX } },
5678 { "(bad)", { XX } },
5679 { "(bad)", { XX } },
5680 /* 90 */
5681 { "(bad)", { XX } },
5682 { "(bad)", { XX } },
5683 { "(bad)", { XX } },
5684 { "(bad)", { XX } },
5685 { "(bad)", { XX } },
5686 { "(bad)", { XX } },
5687 { "(bad)", { XX } },
5688 { "(bad)", { XX } },
5689 /* 98 */
5690 { "(bad)", { XX } },
5691 { "(bad)", { XX } },
5692 { "(bad)", { XX } },
5693 { "(bad)", { XX } },
5694 { "(bad)", { XX } },
5695 { "(bad)", { XX } },
5696 { "(bad)", { XX } },
5697 { "(bad)", { XX } },
5698 /* a0 */
5699 { "(bad)", { XX } },
5700 { "(bad)", { XX } },
5701 { "(bad)", { XX } },
5702 { "(bad)", { XX } },
5703 { "(bad)", { XX } },
5704 { "(bad)", { XX } },
5705 { "(bad)", { XX } },
5706 { "(bad)", { XX } },
5707 /* a8 */
5708 { "(bad)", { XX } },
5709 { "(bad)", { XX } },
5710 { "(bad)", { XX } },
5711 { "(bad)", { XX } },
5712 { "(bad)", { XX } },
5713 { "(bad)", { XX } },
5714 { "(bad)", { XX } },
5715 { "(bad)", { XX } },
5716 /* b0 */
5717 { "(bad)", { XX } },
5718 { "(bad)", { XX } },
5719 { "(bad)", { XX } },
5720 { "(bad)", { XX } },
5721 { "(bad)", { XX } },
5722 { "(bad)", { XX } },
5723 { "(bad)", { XX } },
5724 { "(bad)", { XX } },
5725 /* b8 */
5726 { "(bad)", { XX } },
5727 { "(bad)", { XX } },
5728 { "(bad)", { XX } },
5729 { "(bad)", { XX } },
5730 { "(bad)", { XX } },
5731 { "(bad)", { XX } },
5732 { "(bad)", { XX } },
5733 { "(bad)", { XX } },
5734 /* c0 */
5735 { "(bad)", { XX } },
5736 { "(bad)", { XX } },
5737 { "(bad)", { XX } },
5738 { "(bad)", { XX } },
5739 { "(bad)", { XX } },
5740 { "(bad)", { XX } },
5741 { "(bad)", { XX } },
5742 { "(bad)", { XX } },
5743 /* c8 */
5744 { "(bad)", { XX } },
5745 { "(bad)", { XX } },
5746 { "(bad)", { XX } },
5747 { "(bad)", { XX } },
5748 { "(bad)", { XX } },
5749 { "(bad)", { XX } },
5750 { "(bad)", { XX } },
5751 { "(bad)", { XX } },
5752 /* d0 */
5753 { "(bad)", { XX } },
5754 { "(bad)", { XX } },
5755 { "(bad)", { XX } },
5756 { "(bad)", { XX } },
5757 { "(bad)", { XX } },
5758 { "(bad)", { XX } },
5759 { "(bad)", { XX } },
5760 { "(bad)", { XX } },
5761 /* d8 */
5762 { "(bad)", { XX } },
5763 { "(bad)", { XX } },
5764 { "(bad)", { XX } },
5765 { PREFIX_TABLE (PREFIX_0F38DB) },
5766 { PREFIX_TABLE (PREFIX_0F38DC) },
5767 { PREFIX_TABLE (PREFIX_0F38DD) },
5768 { PREFIX_TABLE (PREFIX_0F38DE) },
5769 { PREFIX_TABLE (PREFIX_0F38DF) },
5770 /* e0 */
5771 { "(bad)", { XX } },
5772 { "(bad)", { XX } },
5773 { "(bad)", { XX } },
5774 { "(bad)", { XX } },
5775 { "(bad)", { XX } },
5776 { "(bad)", { XX } },
5777 { "(bad)", { XX } },
5778 { "(bad)", { XX } },
5779 /* e8 */
5780 { "(bad)", { XX } },
5781 { "(bad)", { XX } },
5782 { "(bad)", { XX } },
5783 { "(bad)", { XX } },
5784 { "(bad)", { XX } },
5785 { "(bad)", { XX } },
5786 { "(bad)", { XX } },
5787 { "(bad)", { XX } },
5788 /* f0 */
5789 { PREFIX_TABLE (PREFIX_0F38F0) },
5790 { PREFIX_TABLE (PREFIX_0F38F1) },
5791 { "(bad)", { XX } },
5792 { "(bad)", { XX } },
5793 { "(bad)", { XX } },
5794 { "(bad)", { XX } },
5795 { "(bad)", { XX } },
5796 { "(bad)", { XX } },
5797 /* f8 */
5798 { "(bad)", { XX } },
5799 { "(bad)", { XX } },
5800 { "(bad)", { XX } },
5801 { "(bad)", { XX } },
5802 { "(bad)", { XX } },
5803 { "(bad)", { XX } },
5804 { "(bad)", { XX } },
5805 { "(bad)", { XX } },
5806 },
5807 /* THREE_BYTE_0F3A */
5808 {
5809 /* 00 */
5810 { "(bad)", { XX } },
5811 { "(bad)", { XX } },
5812 { "(bad)", { XX } },
5813 { "(bad)", { XX } },
5814 { "(bad)", { XX } },
5815 { "(bad)", { XX } },
5816 { "(bad)", { XX } },
5817 { "(bad)", { XX } },
5818 /* 08 */
5819 { PREFIX_TABLE (PREFIX_0F3A08) },
5820 { PREFIX_TABLE (PREFIX_0F3A09) },
5821 { PREFIX_TABLE (PREFIX_0F3A0A) },
5822 { PREFIX_TABLE (PREFIX_0F3A0B) },
5823 { PREFIX_TABLE (PREFIX_0F3A0C) },
5824 { PREFIX_TABLE (PREFIX_0F3A0D) },
5825 { PREFIX_TABLE (PREFIX_0F3A0E) },
5826 { "palignr", { MX, EM, Ib } },
5827 /* 10 */
5828 { "(bad)", { XX } },
5829 { "(bad)", { XX } },
5830 { "(bad)", { XX } },
5831 { "(bad)", { XX } },
5832 { PREFIX_TABLE (PREFIX_0F3A14) },
5833 { PREFIX_TABLE (PREFIX_0F3A15) },
5834 { PREFIX_TABLE (PREFIX_0F3A16) },
5835 { PREFIX_TABLE (PREFIX_0F3A17) },
5836 /* 18 */
5837 { "(bad)", { XX } },
5838 { "(bad)", { XX } },
5839 { "(bad)", { XX } },
5840 { "(bad)", { XX } },
5841 { "(bad)", { XX } },
5842 { "(bad)", { XX } },
5843 { "(bad)", { XX } },
5844 { "(bad)", { XX } },
5845 /* 20 */
5846 { PREFIX_TABLE (PREFIX_0F3A20) },
5847 { PREFIX_TABLE (PREFIX_0F3A21) },
5848 { PREFIX_TABLE (PREFIX_0F3A22) },
5849 { "(bad)", { XX } },
5850 { "(bad)", { XX } },
5851 { "(bad)", { XX } },
5852 { "(bad)", { XX } },
5853 { "(bad)", { XX } },
5854 /* 28 */
5855 { "(bad)", { XX } },
5856 { "(bad)", { XX } },
5857 { "(bad)", { XX } },
5858 { "(bad)", { XX } },
5859 { "(bad)", { XX } },
5860 { "(bad)", { XX } },
5861 { "(bad)", { XX } },
5862 { "(bad)", { XX } },
5863 /* 30 */
5864 { "(bad)", { XX } },
5865 { "(bad)", { XX } },
5866 { "(bad)", { XX } },
5867 { "(bad)", { XX } },
5868 { "(bad)", { XX } },
5869 { "(bad)", { XX } },
5870 { "(bad)", { XX } },
5871 { "(bad)", { XX } },
5872 /* 38 */
5873 { "(bad)", { XX } },
5874 { "(bad)", { XX } },
5875 { "(bad)", { XX } },
5876 { "(bad)", { XX } },
5877 { "(bad)", { XX } },
5878 { "(bad)", { XX } },
5879 { "(bad)", { XX } },
5880 { "(bad)", { XX } },
5881 /* 40 */
5882 { PREFIX_TABLE (PREFIX_0F3A40) },
5883 { PREFIX_TABLE (PREFIX_0F3A41) },
5884 { PREFIX_TABLE (PREFIX_0F3A42) },
5885 { "(bad)", { XX } },
5886 { PREFIX_TABLE (PREFIX_0F3A44) },
5887 { "(bad)", { XX } },
5888 { "(bad)", { XX } },
5889 { "(bad)", { XX } },
5890 /* 48 */
5891 { "(bad)", { XX } },
5892 { "(bad)", { XX } },
5893 { "(bad)", { XX } },
5894 { "(bad)", { XX } },
5895 { "(bad)", { XX } },
5896 { "(bad)", { XX } },
5897 { "(bad)", { XX } },
5898 { "(bad)", { XX } },
5899 /* 50 */
5900 { "(bad)", { XX } },
5901 { "(bad)", { XX } },
5902 { "(bad)", { XX } },
5903 { "(bad)", { XX } },
5904 { "(bad)", { XX } },
5905 { "(bad)", { XX } },
5906 { "(bad)", { XX } },
5907 { "(bad)", { XX } },
5908 /* 58 */
5909 { "(bad)", { XX } },
5910 { "(bad)", { XX } },
5911 { "(bad)", { XX } },
5912 { "(bad)", { XX } },
5913 { "(bad)", { XX } },
5914 { "(bad)", { XX } },
5915 { "(bad)", { XX } },
5916 { "(bad)", { XX } },
5917 /* 60 */
5918 { PREFIX_TABLE (PREFIX_0F3A60) },
5919 { PREFIX_TABLE (PREFIX_0F3A61) },
5920 { PREFIX_TABLE (PREFIX_0F3A62) },
5921 { PREFIX_TABLE (PREFIX_0F3A63) },
5922 { "(bad)", { XX } },
5923 { "(bad)", { XX } },
5924 { "(bad)", { XX } },
5925 { "(bad)", { XX } },
5926 /* 68 */
5927 { "(bad)", { XX } },
5928 { "(bad)", { XX } },
5929 { "(bad)", { XX } },
5930 { "(bad)", { XX } },
5931 { "(bad)", { XX } },
5932 { "(bad)", { XX } },
5933 { "(bad)", { XX } },
5934 { "(bad)", { XX } },
5935 /* 70 */
5936 { "(bad)", { XX } },
5937 { "(bad)", { XX } },
5938 { "(bad)", { XX } },
5939 { "(bad)", { XX } },
5940 { "(bad)", { XX } },
5941 { "(bad)", { XX } },
5942 { "(bad)", { XX } },
5943 { "(bad)", { XX } },
5944 /* 78 */
5945 { "(bad)", { XX } },
5946 { "(bad)", { XX } },
5947 { "(bad)", { XX } },
5948 { "(bad)", { XX } },
5949 { "(bad)", { XX } },
5950 { "(bad)", { XX } },
5951 { "(bad)", { XX } },
5952 { "(bad)", { XX } },
5953 /* 80 */
5954 { "(bad)", { XX } },
5955 { "(bad)", { XX } },
5956 { "(bad)", { XX } },
5957 { "(bad)", { XX } },
5958 { "(bad)", { XX } },
5959 { "(bad)", { XX } },
5960 { "(bad)", { XX } },
5961 { "(bad)", { XX } },
5962 /* 88 */
5963 { "(bad)", { XX } },
5964 { "(bad)", { XX } },
5965 { "(bad)", { XX } },
5966 { "(bad)", { XX } },
5967 { "(bad)", { XX } },
5968 { "(bad)", { XX } },
5969 { "(bad)", { XX } },
5970 { "(bad)", { XX } },
5971 /* 90 */
5972 { "(bad)", { XX } },
5973 { "(bad)", { XX } },
5974 { "(bad)", { XX } },
5975 { "(bad)", { XX } },
5976 { "(bad)", { XX } },
5977 { "(bad)", { XX } },
5978 { "(bad)", { XX } },
5979 { "(bad)", { XX } },
5980 /* 98 */
5981 { "(bad)", { XX } },
5982 { "(bad)", { XX } },
5983 { "(bad)", { XX } },
5984 { "(bad)", { XX } },
5985 { "(bad)", { XX } },
5986 { "(bad)", { XX } },
5987 { "(bad)", { XX } },
5988 { "(bad)", { XX } },
5989 /* a0 */
5990 { "(bad)", { XX } },
5991 { "(bad)", { XX } },
5992 { "(bad)", { XX } },
5993 { "(bad)", { XX } },
5994 { "(bad)", { XX } },
5995 { "(bad)", { XX } },
5996 { "(bad)", { XX } },
5997 { "(bad)", { XX } },
5998 /* a8 */
5999 { "(bad)", { XX } },
6000 { "(bad)", { XX } },
6001 { "(bad)", { XX } },
6002 { "(bad)", { XX } },
6003 { "(bad)", { XX } },
6004 { "(bad)", { XX } },
6005 { "(bad)", { XX } },
6006 { "(bad)", { XX } },
6007 /* b0 */
6008 { "(bad)", { XX } },
6009 { "(bad)", { XX } },
6010 { "(bad)", { XX } },
6011 { "(bad)", { XX } },
6012 { "(bad)", { XX } },
6013 { "(bad)", { XX } },
6014 { "(bad)", { XX } },
6015 { "(bad)", { XX } },
6016 /* b8 */
6017 { "(bad)", { XX } },
6018 { "(bad)", { XX } },
6019 { "(bad)", { XX } },
6020 { "(bad)", { XX } },
6021 { "(bad)", { XX } },
6022 { "(bad)", { XX } },
6023 { "(bad)", { XX } },
6024 { "(bad)", { XX } },
6025 /* c0 */
6026 { "(bad)", { XX } },
6027 { "(bad)", { XX } },
6028 { "(bad)", { XX } },
6029 { "(bad)", { XX } },
6030 { "(bad)", { XX } },
6031 { "(bad)", { XX } },
6032 { "(bad)", { XX } },
6033 { "(bad)", { XX } },
6034 /* c8 */
6035 { "(bad)", { XX } },
6036 { "(bad)", { XX } },
6037 { "(bad)", { XX } },
6038 { "(bad)", { XX } },
6039 { "(bad)", { XX } },
6040 { "(bad)", { XX } },
6041 { "(bad)", { XX } },
6042 { "(bad)", { XX } },
6043 /* d0 */
6044 { "(bad)", { XX } },
6045 { "(bad)", { XX } },
6046 { "(bad)", { XX } },
6047 { "(bad)", { XX } },
6048 { "(bad)", { XX } },
6049 { "(bad)", { XX } },
6050 { "(bad)", { XX } },
6051 { "(bad)", { XX } },
6052 /* d8 */
6053 { "(bad)", { XX } },
6054 { "(bad)", { XX } },
6055 { "(bad)", { XX } },
6056 { "(bad)", { XX } },
6057 { "(bad)", { XX } },
6058 { "(bad)", { XX } },
6059 { "(bad)", { XX } },
6060 { PREFIX_TABLE (PREFIX_0F3ADF) },
6061 /* e0 */
6062 { "(bad)", { XX } },
6063 { "(bad)", { XX } },
6064 { "(bad)", { XX } },
6065 { "(bad)", { XX } },
6066 { "(bad)", { XX } },
6067 { "(bad)", { XX } },
6068 { "(bad)", { XX } },
6069 { "(bad)", { XX } },
6070 /* e8 */
6071 { "(bad)", { XX } },
6072 { "(bad)", { XX } },
6073 { "(bad)", { XX } },
6074 { "(bad)", { XX } },
6075 { "(bad)", { XX } },
6076 { "(bad)", { XX } },
6077 { "(bad)", { XX } },
6078 { "(bad)", { XX } },
6079 /* f0 */
6080 { "(bad)", { XX } },
6081 { "(bad)", { XX } },
6082 { "(bad)", { XX } },
6083 { "(bad)", { XX } },
6084 { "(bad)", { XX } },
6085 { "(bad)", { XX } },
6086 { "(bad)", { XX } },
6087 { "(bad)", { XX } },
6088 /* f8 */
6089 { "(bad)", { XX } },
6090 { "(bad)", { XX } },
6091 { "(bad)", { XX } },
6092 { "(bad)", { XX } },
6093 { "(bad)", { XX } },
6094 { "(bad)", { XX } },
6095 { "(bad)", { XX } },
6096 { "(bad)", { XX } },
6097 },
6098
6099 /* THREE_BYTE_0F7A */
6100 {
6101 /* 00 */
6102 { "(bad)", { XX } },
6103 { "(bad)", { XX } },
6104 { "(bad)", { XX } },
6105 { "(bad)", { XX } },
6106 { "(bad)", { XX } },
6107 { "(bad)", { XX } },
6108 { "(bad)", { XX } },
6109 { "(bad)", { XX } },
6110 /* 08 */
6111 { "(bad)", { XX } },
6112 { "(bad)", { XX } },
6113 { "(bad)", { XX } },
6114 { "(bad)", { XX } },
6115 { "(bad)", { XX } },
6116 { "(bad)", { XX } },
6117 { "(bad)", { XX } },
6118 { "(bad)", { XX } },
6119 /* 10 */
6120 { "(bad)", { XX } },
6121 { "(bad)", { XX } },
6122 { "(bad)", { XX } },
6123 { "(bad)", { XX } },
6124 { "(bad)", { XX } },
6125 { "(bad)", { XX } },
6126 { "(bad)", { XX } },
6127 { "(bad)", { XX } },
6128 /* 18 */
6129 { "(bad)", { XX } },
6130 { "(bad)", { XX } },
6131 { "(bad)", { XX } },
6132 { "(bad)", { XX } },
6133 { "(bad)", { XX } },
6134 { "(bad)", { XX } },
6135 { "(bad)", { XX } },
6136 { "(bad)", { XX } },
6137 /* 20 */
6138 { "ptest", { XX } },
6139 { "(bad)", { XX } },
6140 { "(bad)", { XX } },
c0f3af97
L
6141 { "(bad)", { XX } },
6142 { "(bad)", { XX } },
6143 { "(bad)", { XX } },
6144 { "(bad)", { XX } },
6145 { "(bad)", { XX } },
f88c9eb0 6146 /* 28 */
c0f3af97
L
6147 { "(bad)", { XX } },
6148 { "(bad)", { XX } },
6149 { "(bad)", { XX } },
c0f3af97
L
6150 { "(bad)", { XX } },
6151 { "(bad)", { XX } },
6152 { "(bad)", { XX } },
6153 { "(bad)", { XX } },
6154 { "(bad)", { XX } },
f88c9eb0 6155 /* 30 */
c0f3af97
L
6156 { "(bad)", { XX } },
6157 { "(bad)", { XX } },
6158 { "(bad)", { XX } },
4e7d34a6
L
6159 { "(bad)", { XX } },
6160 { "(bad)", { XX } },
c0f3af97 6161 { "(bad)", { XX } },
c0f3af97
L
6162 { "(bad)", { XX } },
6163 { "(bad)", { XX } },
f88c9eb0 6164 /* 38 */
c0f3af97 6165 { "(bad)", { XX } },
4e7d34a6
L
6166 { "(bad)", { XX } },
6167 { "(bad)", { XX } },
6168 { "(bad)", { XX } },
6169 { "(bad)", { XX } },
4e7d34a6
L
6170 { "(bad)", { XX } },
6171 { "(bad)", { XX } },
6172 { "(bad)", { XX } },
f88c9eb0 6173 /* 40 */
4e7d34a6 6174 { "(bad)", { XX } },
f88c9eb0
SP
6175 { "phaddbw", { XM, EXq } },
6176 { "phaddbd", { XM, EXq } },
6177 { "phaddbq", { XM, EXq } },
4e7d34a6
L
6178 { "(bad)", { XX } },
6179 { "(bad)", { XX } },
f88c9eb0
SP
6180 { "phaddwd", { XM, EXq } },
6181 { "phaddwq", { XM, EXq } },
6182 /* 48 */
4e7d34a6
L
6183 { "(bad)", { XX } },
6184 { "(bad)", { XX } },
4e7d34a6 6185 { "(bad)", { XX } },
f88c9eb0 6186 { "phadddq", { XM, EXq } },
4e7d34a6
L
6187 { "(bad)", { XX } },
6188 { "(bad)", { XX } },
6189 { "(bad)", { XX } },
6190 { "(bad)", { XX } },
f88c9eb0 6191 /* 50 */
4e7d34a6 6192 { "(bad)", { XX } },
f88c9eb0
SP
6193 { "phaddubw", { XM, EXq } },
6194 { "phaddubd", { XM, EXq } },
6195 { "phaddubq", { XM, EXq } },
4e7d34a6
L
6196 { "(bad)", { XX } },
6197 { "(bad)", { XX } },
f88c9eb0
SP
6198 { "phadduwd", { XM, EXq } },
6199 { "phadduwq", { XM, EXq } },
6200 /* 58 */
4e7d34a6
L
6201 { "(bad)", { XX } },
6202 { "(bad)", { XX } },
6203 { "(bad)", { XX } },
f88c9eb0 6204 { "phaddudq", { XM, EXq } },
4e7d34a6 6205 { "(bad)", { XX } },
c1e679ec
DR
6206 { "(bad)", { XX } },
6207 { "(bad)", { XX } },
6208 { "(bad)", { XX } },
f88c9eb0 6209 /* 60 */
c1e679ec 6210 { "(bad)", { XX } },
f88c9eb0
SP
6211 { "phsubbw", { XM, EXq } },
6212 { "phsubbd", { XM, EXq } },
6213 { "phsubbq", { XM, EXq } },
4e7d34a6
L
6214 { "(bad)", { XX } },
6215 { "(bad)", { XX } },
6216 { "(bad)", { XX } },
6217 { "(bad)", { XX } },
6218 /* 68 */
6219 { "(bad)", { XX } },
6220 { "(bad)", { XX } },
6221 { "(bad)", { XX } },
6222 { "(bad)", { XX } },
6223 { "(bad)", { XX } },
6224 { "(bad)", { XX } },
6225 { "(bad)", { XX } },
6226 { "(bad)", { XX } },
85f10a01 6227 /* 70 */
4e7d34a6
L
6228 { "(bad)", { XX } },
6229 { "(bad)", { XX } },
6230 { "(bad)", { XX } },
6231 { "(bad)", { XX } },
6232 { "(bad)", { XX } },
6233 { "(bad)", { XX } },
6234 { "(bad)", { XX } },
6235 { "(bad)", { XX } },
85f10a01 6236 /* 78 */
4e7d34a6
L
6237 { "(bad)", { XX } },
6238 { "(bad)", { XX } },
6239 { "(bad)", { XX } },
6240 { "(bad)", { XX } },
6241 { "(bad)", { XX } },
6242 { "(bad)", { XX } },
6243 { "(bad)", { XX } },
6244 { "(bad)", { XX } },
85f10a01 6245 /* 80 */
f88c9eb0
SP
6246 { "(bad)", { XX } },
6247 { "(bad)", { XX } },
4e7d34a6
L
6248 { "(bad)", { XX } },
6249 { "(bad)", { XX } },
6250 { "(bad)", { XX } },
c0f3af97
L
6251 { "(bad)", { XX } },
6252 { "(bad)", { XX } },
6253 { "(bad)", { XX } },
85f10a01 6254 /* 88 */
4e7d34a6
L
6255 { "(bad)", { XX } },
6256 { "(bad)", { XX } },
6257 { "(bad)", { XX } },
6258 { "(bad)", { XX } },
6259 { "(bad)", { XX } },
6260 { "(bad)", { XX } },
c0f3af97
L
6261 { "(bad)", { XX } },
6262 { "(bad)", { XX } },
85f10a01 6263 /* 90 */
4e7d34a6
L
6264 { "(bad)", { XX } },
6265 { "(bad)", { XX } },
6266 { "(bad)", { XX } },
6267 { "(bad)", { XX } },
6268 { "(bad)", { XX } },
c0f3af97
L
6269 { "(bad)", { XX } },
6270 { "(bad)", { XX } },
6271 { "(bad)", { XX } },
85f10a01 6272 /* 98 */
4e7d34a6
L
6273 { "(bad)", { XX } },
6274 { "(bad)", { XX } },
6275 { "(bad)", { XX } },
6276 { "(bad)", { XX } },
6277 { "(bad)", { XX } },
6278 { "(bad)", { XX } },
c0f3af97
L
6279 { "(bad)", { XX } },
6280 { "(bad)", { XX } },
85f10a01 6281 /* a0 */
4e7d34a6
L
6282 { "(bad)", { XX } },
6283 { "(bad)", { XX } },
6284 { "(bad)", { XX } },
6285 { "(bad)", { XX } },
6286 { "(bad)", { XX } },
6287 { "(bad)", { XX } },
c0f3af97 6288 { "(bad)", { XX } },
4e7d34a6 6289 { "(bad)", { XX } },
85f10a01 6290 /* a8 */
4e7d34a6
L
6291 { "(bad)", { XX } },
6292 { "(bad)", { XX } },
6293 { "(bad)", { XX } },
6294 { "(bad)", { XX } },
6295 { "(bad)", { XX } },
6296 { "(bad)", { XX } },
6297 { "(bad)", { XX } },
6298 { "(bad)", { XX } },
85f10a01 6299 /* b0 */
4e7d34a6
L
6300 { "(bad)", { XX } },
6301 { "(bad)", { XX } },
6302 { "(bad)", { XX } },
6303 { "(bad)", { XX } },
6304 { "(bad)", { XX } },
6305 { "(bad)", { XX } },
c0f3af97 6306 { "(bad)", { XX } },
4e7d34a6 6307 { "(bad)", { XX } },
85f10a01 6308 /* b8 */
4e7d34a6
L
6309 { "(bad)", { XX } },
6310 { "(bad)", { XX } },
6311 { "(bad)", { XX } },
6312 { "(bad)", { XX } },
6313 { "(bad)", { XX } },
6314 { "(bad)", { XX } },
6315 { "(bad)", { XX } },
6316 { "(bad)", { XX } },
85f10a01 6317 /* c0 */
4e7d34a6
L
6318 { "(bad)", { XX } },
6319 { "(bad)", { XX } },
6320 { "(bad)", { XX } },
6321 { "(bad)", { XX } },
6322 { "(bad)", { XX } },
6323 { "(bad)", { XX } },
6324 { "(bad)", { XX } },
6325 { "(bad)", { XX } },
85f10a01 6326 /* c8 */
4e7d34a6
L
6327 { "(bad)", { XX } },
6328 { "(bad)", { XX } },
6329 { "(bad)", { XX } },
6330 { "(bad)", { XX } },
6331 { "(bad)", { XX } },
6332 { "(bad)", { XX } },
6333 { "(bad)", { XX } },
6334 { "(bad)", { XX } },
85f10a01 6335 /* d0 */
4e7d34a6
L
6336 { "(bad)", { XX } },
6337 { "(bad)", { XX } },
6338 { "(bad)", { XX } },
6339 { "(bad)", { XX } },
6340 { "(bad)", { XX } },
6341 { "(bad)", { XX } },
6342 { "(bad)", { XX } },
6343 { "(bad)", { XX } },
85f10a01 6344 /* d8 */
4e7d34a6
L
6345 { "(bad)", { XX } },
6346 { "(bad)", { XX } },
6347 { "(bad)", { XX } },
f88c9eb0
SP
6348 { "(bad)", { XX } },
6349 { "(bad)", { XX } },
6350 { "(bad)", { XX } },
6351 { "(bad)", { XX } },
6352 { "(bad)", { XX } },
85f10a01 6353 /* e0 */
4e7d34a6
L
6354 { "(bad)", { XX } },
6355 { "(bad)", { XX } },
6356 { "(bad)", { XX } },
6357 { "(bad)", { XX } },
6358 { "(bad)", { XX } },
6359 { "(bad)", { XX } },
6360 { "(bad)", { XX } },
6361 { "(bad)", { XX } },
85f10a01 6362 /* e8 */
4e7d34a6
L
6363 { "(bad)", { XX } },
6364 { "(bad)", { XX } },
6365 { "(bad)", { XX } },
6366 { "(bad)", { XX } },
6367 { "(bad)", { XX } },
6368 { "(bad)", { XX } },
6369 { "(bad)", { XX } },
6370 { "(bad)", { XX } },
85f10a01 6371 /* f0 */
f88c9eb0
SP
6372 { "(bad)", { XX } },
6373 { "(bad)", { XX } },
4e7d34a6
L
6374 { "(bad)", { XX } },
6375 { "(bad)", { XX } },
6376 { "(bad)", { XX } },
6377 { "(bad)", { XX } },
6378 { "(bad)", { XX } },
6379 { "(bad)", { XX } },
85f10a01 6380 /* f8 */
4e7d34a6
L
6381 { "(bad)", { XX } },
6382 { "(bad)", { XX } },
6383 { "(bad)", { XX } },
6384 { "(bad)", { XX } },
6385 { "(bad)", { XX } },
6386 { "(bad)", { XX } },
6387 { "(bad)", { XX } },
6388 { "(bad)", { XX } },
85f10a01 6389 },
f88c9eb0
SP
6390};
6391
6392static const struct dis386 xop_table[][256] = {
5dd85c99 6393 /* XOP_08 */
85f10a01
MM
6394 {
6395 /* 00 */
4e7d34a6
L
6396 { "(bad)", { XX } },
6397 { "(bad)", { XX } },
6398 { "(bad)", { XX } },
6399 { "(bad)", { XX } },
6400 { "(bad)", { XX } },
6401 { "(bad)", { XX } },
6402 { "(bad)", { XX } },
6403 { "(bad)", { XX } },
85f10a01 6404 /* 08 */
f88c9eb0
SP
6405 { "(bad)", { XX } },
6406 { "(bad)", { XX } },
6407 { "(bad)", { XX } },
6408 { "(bad)", { XX } },
6409 { "(bad)", { XX } },
6410 { "(bad)", { XX } },
6411 { "(bad)", { XX } },
6412 { "(bad)", { XX } },
85f10a01 6413 /* 10 */
4e7d34a6
L
6414 { "(bad)", { XX } },
6415 { "(bad)", { XX } },
5dd85c99 6416 { "(bad)", { XX } },
f88c9eb0
SP
6417 { "(bad)", { XX } },
6418 { "(bad)", { XX } },
6419 { "(bad)", { XX } },
4e7d34a6
L
6420 { "(bad)", { XX } },
6421 { "(bad)", { XX } },
85f10a01 6422 /* 18 */
4e7d34a6
L
6423 { "(bad)", { XX } },
6424 { "(bad)", { XX } },
6425 { "(bad)", { XX } },
6426 { "(bad)", { XX } },
6427 { "(bad)", { XX } },
6428 { "(bad)", { XX } },
6429 { "(bad)", { XX } },
6430 { "(bad)", { XX } },
85f10a01 6431 /* 20 */
f88c9eb0
SP
6432 { "(bad)", { XX } },
6433 { "(bad)", { XX } },
6434 { "(bad)", { XX } },
4e7d34a6
L
6435 { "(bad)", { XX } },
6436 { "(bad)", { XX } },
6437 { "(bad)", { XX } },
6438 { "(bad)", { XX } },
6439 { "(bad)", { XX } },
85f10a01 6440 /* 28 */
4e7d34a6
L
6441 { "(bad)", { XX } },
6442 { "(bad)", { XX } },
6443 { "(bad)", { XX } },
6444 { "(bad)", { XX } },
4e7d34a6
L
6445 { "(bad)", { XX } },
6446 { "(bad)", { XX } },
6447 { "(bad)", { XX } },
6448 { "(bad)", { XX } },
c0f3af97 6449 /* 30 */
c1e679ec
DR
6450 { "(bad)", { XX } },
6451 { "(bad)", { XX } },
4e7d34a6 6452 { "(bad)", { XX } },
4e7d34a6
L
6453 { "(bad)", { XX } },
6454 { "(bad)", { XX } },
6455 { "(bad)", { XX } },
6456 { "(bad)", { XX } },
6457 { "(bad)", { XX } },
c0f3af97 6458 /* 38 */
4e7d34a6
L
6459 { "(bad)", { XX } },
6460 { "(bad)", { XX } },
6461 { "(bad)", { XX } },
4e7d34a6
L
6462 { "(bad)", { XX } },
6463 { "(bad)", { XX } },
6464 { "(bad)", { XX } },
6465 { "(bad)", { XX } },
6466 { "(bad)", { XX } },
c0f3af97 6467 /* 40 */
c1e679ec 6468 { "(bad)", { XX } },
f88c9eb0
SP
6469 { "(bad)", { XX } },
6470 { "(bad)", { XX } },
6471 { "(bad)", { XX } },
6472 { "(bad)", { XX } },
4e7d34a6
L
6473 { "(bad)", { XX } },
6474 { "(bad)", { XX } },
6475 { "(bad)", { XX } },
85f10a01 6476 /* 48 */
4e7d34a6
L
6477 { "(bad)", { XX } },
6478 { "(bad)", { XX } },
6479 { "(bad)", { XX } },
c1e679ec 6480 { "(bad)", { XX } },
4e7d34a6
L
6481 { "(bad)", { XX } },
6482 { "(bad)", { XX } },
6483 { "(bad)", { XX } },
6484 { "(bad)", { XX } },
c0f3af97 6485 /* 50 */
4e7d34a6
L
6486 { "(bad)", { XX } },
6487 { "(bad)", { XX } },
6488 { "(bad)", { XX } },
c1e679ec
DR
6489 { "(bad)", { XX } },
6490 { "(bad)", { XX } },
6491 { "(bad)", { XX } },
6492 { "(bad)", { XX } },
6493 { "(bad)", { XX } },
85f10a01 6494 /* 58 */
4e7d34a6
L
6495 { "(bad)", { XX } },
6496 { "(bad)", { XX } },
6497 { "(bad)", { XX } },
4e7d34a6
L
6498 { "(bad)", { XX } },
6499 { "(bad)", { XX } },
6500 { "(bad)", { XX } },
6501 { "(bad)", { XX } },
4e7d34a6 6502 { "(bad)", { XX } },
c1e679ec 6503 /* 60 */
f88c9eb0
SP
6504 { "(bad)", { XX } },
6505 { "(bad)", { XX } },
6506 { "(bad)", { XX } },
6507 { "(bad)", { XX } },
4e7d34a6
L
6508 { "(bad)", { XX } },
6509 { "(bad)", { XX } },
6510 { "(bad)", { XX } },
6511 { "(bad)", { XX } },
c0f3af97
L
6512 /* 68 */
6513 { "(bad)", { XX } },
4e7d34a6
L
6514 { "(bad)", { XX } },
6515 { "(bad)", { XX } },
6516 { "(bad)", { XX } },
4e7d34a6
L
6517 { "(bad)", { XX } },
6518 { "(bad)", { XX } },
6519 { "(bad)", { XX } },
6520 { "(bad)", { XX } },
85f10a01 6521 /* 70 */
4e7d34a6
L
6522 { "(bad)", { XX } },
6523 { "(bad)", { XX } },
6524 { "(bad)", { XX } },
6525 { "(bad)", { XX } },
6526 { "(bad)", { XX } },
6527 { "(bad)", { XX } },
6528 { "(bad)", { XX } },
6529 { "(bad)", { XX } },
85f10a01 6530 /* 78 */
4e7d34a6
L
6531 { "(bad)", { XX } },
6532 { "(bad)", { XX } },
6533 { "(bad)", { XX } },
6534 { "(bad)", { XX } },
6535 { "(bad)", { XX } },
6536 { "(bad)", { XX } },
6537 { "(bad)", { XX } },
6538 { "(bad)", { XX } },
85f10a01 6539 /* 80 */
4e7d34a6
L
6540 { "(bad)", { XX } },
6541 { "(bad)", { XX } },
6542 { "(bad)", { XX } },
6543 { "(bad)", { XX } },
6544 { "(bad)", { XX } },
5dd85c99
SP
6545 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6546 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6547 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6548 /* 88 */
4e7d34a6
L
6549 { "(bad)", { XX } },
6550 { "(bad)", { XX } },
6551 { "(bad)", { XX } },
4e7d34a6
L
6552 { "(bad)", { XX } },
6553 { "(bad)", { XX } },
6554 { "(bad)", { XX } },
5dd85c99
SP
6555 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6556 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6557 /* 90 */
4e7d34a6
L
6558 { "(bad)", { XX } },
6559 { "(bad)", { XX } },
6560 { "(bad)", { XX } },
6561 { "(bad)", { XX } },
6562 { "(bad)", { XX } },
5dd85c99
SP
6563 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6564 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6565 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6566 /* 98 */
4e7d34a6
L
6567 { "(bad)", { XX } },
6568 { "(bad)", { XX } },
6569 { "(bad)", { XX } },
6570 { "(bad)", { XX } },
6571 { "(bad)", { XX } },
6572 { "(bad)", { XX } },
5dd85c99
SP
6573 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6574 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6575 /* a0 */
6576 { VEX_LEN_TABLE (VEX_LEN_XOP_08_A0) },
6577 { VEX_LEN_TABLE (VEX_LEN_XOP_08_A1) },
6578 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6579 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
4e7d34a6
L
6580 { "(bad)", { XX } },
6581 { "(bad)", { XX } },
5dd85c99 6582 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
4e7d34a6 6583 { "(bad)", { XX } },
5dd85c99 6584 /* a8 */
4e7d34a6
L
6585 { "(bad)", { XX } },
6586 { "(bad)", { XX } },
6587 { "(bad)", { XX } },
6588 { "(bad)", { XX } },
6589 { "(bad)", { XX } },
6590 { "(bad)", { XX } },
6591 { "(bad)", { XX } },
4e7d34a6 6592 { "(bad)", { XX } },
5dd85c99 6593 /* b0 */
4e7d34a6
L
6594 { "(bad)", { XX } },
6595 { "(bad)", { XX } },
6596 { "(bad)", { XX } },
6597 { "(bad)", { XX } },
6598 { "(bad)", { XX } },
6599 { "(bad)", { XX } },
5dd85c99 6600 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
4e7d34a6 6601 { "(bad)", { XX } },
5dd85c99 6602 /* b8 */
4e7d34a6
L
6603 { "(bad)", { XX } },
6604 { "(bad)", { XX } },
6605 { "(bad)", { XX } },
6606 { "(bad)", { XX } },
6607 { "(bad)", { XX } },
6608 { "(bad)", { XX } },
6609 { "(bad)", { XX } },
6610 { "(bad)", { XX } },
5dd85c99
SP
6611 /* c0 */
6612 { "vprotb", { XM, Vex_2src_1, Ib } },
6613 { "vprotw", { XM, Vex_2src_1, Ib } },
6614 { "vprotd", { XM, Vex_2src_1, Ib } },
6615 { "vprotq", { XM, Vex_2src_1, Ib } },
4e7d34a6
L
6616 { "(bad)", { XX } },
6617 { "(bad)", { XX } },
6618 { "(bad)", { XX } },
6619 { "(bad)", { XX } },
5dd85c99 6620 /* c8 */
4e7d34a6
L
6621 { "(bad)", { XX } },
6622 { "(bad)", { XX } },
6623 { "(bad)", { XX } },
6624 { "(bad)", { XX } },
5dd85c99
SP
6625 { "vpcomb", { XM, Vex128, EXx, Ib } },
6626 { "vpcomw", { XM, Vex128, EXx, Ib } },
6627 { "vpcomd", { XM, Vex128, EXx, Ib } },
6628 { "vpcomq", { XM, Vex128, EXx, Ib } },
6629 /* d0 */
4e7d34a6
L
6630 { "(bad)", { XX } },
6631 { "(bad)", { XX } },
6632 { "(bad)", { XX } },
6633 { "(bad)", { XX } },
6634 { "(bad)", { XX } },
6635 { "(bad)", { XX } },
6636 { "(bad)", { XX } },
6637 { "(bad)", { XX } },
5dd85c99 6638 /* d8 */
4e7d34a6
L
6639 { "(bad)", { XX } },
6640 { "(bad)", { XX } },
6641 { "(bad)", { XX } },
6642 { "(bad)", { XX } },
6643 { "(bad)", { XX } },
6644 { "(bad)", { XX } },
6645 { "(bad)", { XX } },
6646 { "(bad)", { XX } },
5dd85c99 6647 /* e0 */
4e7d34a6
L
6648 { "(bad)", { XX } },
6649 { "(bad)", { XX } },
6650 { "(bad)", { XX } },
6651 { "(bad)", { XX } },
6652 { "(bad)", { XX } },
6653 { "(bad)", { XX } },
6654 { "(bad)", { XX } },
6655 { "(bad)", { XX } },
5dd85c99 6656 /* e8 */
4e7d34a6
L
6657 { "(bad)", { XX } },
6658 { "(bad)", { XX } },
6659 { "(bad)", { XX } },
6660 { "(bad)", { XX } },
5dd85c99
SP
6661 { "vpcomub", { XM, Vex128, EXx, Ib } },
6662 { "vpcomuw", { XM, Vex128, EXx, Ib } },
6663 { "vpcomud", { XM, Vex128, EXx, Ib } },
6664 { "vpcomuq", { XM, Vex128, EXx, Ib } },
6665 /* f0 */
4e7d34a6
L
6666 { "(bad)", { XX } },
6667 { "(bad)", { XX } },
6668 { "(bad)", { XX } },
6669 { "(bad)", { XX } },
4e7d34a6
L
6670 { "(bad)", { XX } },
6671 { "(bad)", { XX } },
6672 { "(bad)", { XX } },
6673 { "(bad)", { XX } },
5dd85c99
SP
6674 /* f8 */
6675 { "(bad)", { XX } },
6676 { "(bad)", { XX } },
6677 { "(bad)", { XX } },
6678 { "(bad)", { XX } },
6679 { "(bad)", { XX } },
6680 { "(bad)", { XX } },
6681 { "(bad)", { XX } },
6682 { "(bad)", { XX } },
6683 },
6684 /* XOP_09 */
6685 {
6686 /* 00 */
6687 { "(bad)", { XX } },
6688 { "(bad)", { XX } },
6689 { "(bad)", { XX } },
6690 { "(bad)", { XX } },
6691 { "(bad)", { XX } },
6692 { "(bad)", { XX } },
6693 { "(bad)", { XX } },
6694 { "(bad)", { XX } },
6695 /* 08 */
6696 { "(bad)", { XX } },
6697 { "(bad)", { XX } },
6698 { "(bad)", { XX } },
6699 { "(bad)", { XX } },
6700 { "(bad)", { XX } },
6701 { "(bad)", { XX } },
6702 { "(bad)", { XX } },
6703 { "(bad)", { XX } },
6704 /* 10 */
6705 { "(bad)", { XX } },
6706 { "(bad)", { XX } },
6707 { REG_TABLE (REG_XOP_LWPCB) },
6708 { "(bad)", { XX } },
6709 { "(bad)", { XX } },
6710 { "(bad)", { XX } },
6711 { "(bad)", { XX } },
6712 { "(bad)", { XX } },
6713 /* 18 */
6714 { "(bad)", { XX } },
6715 { "(bad)", { XX } },
6716 { "(bad)", { XX } },
6717 { "(bad)", { XX } },
6718 { "(bad)", { XX } },
6719 { "(bad)", { XX } },
6720 { "(bad)", { XX } },
6721 { "(bad)", { XX } },
6722 /* 20 */
4e7d34a6
L
6723 { "(bad)", { XX } },
6724 { "(bad)", { XX } },
6725 { "(bad)", { XX } },
f88c9eb0 6726 { "(bad)", { XX } },
4e7d34a6
L
6727 { "(bad)", { XX } },
6728 { "(bad)", { XX } },
6729 { "(bad)", { XX } },
6730 { "(bad)", { XX } },
5dd85c99
SP
6731 /* 28 */
6732 { "(bad)", { XX } },
6733 { "(bad)", { XX } },
6734 { "(bad)", { XX } },
6735 { "(bad)", { XX } },
6736 { "(bad)", { XX } },
6737 { "(bad)", { XX } },
6738 { "(bad)", { XX } },
6739 { "(bad)", { XX } },
6740 /* 30 */
6741 { "(bad)", { XX } },
6742 { "(bad)", { XX } },
6743 { "(bad)", { XX } },
6744 { "(bad)", { XX } },
6745 { "(bad)", { XX } },
6746 { "(bad)", { XX } },
6747 { "(bad)", { XX } },
6748 { "(bad)", { XX } },
6749 /* 38 */
6750 { "(bad)", { XX } },
6751 { "(bad)", { XX } },
6752 { "(bad)", { XX } },
6753 { "(bad)", { XX } },
6754 { "(bad)", { XX } },
6755 { "(bad)", { XX } },
6756 { "(bad)", { XX } },
6757 { "(bad)", { XX } },
6758 /* 40 */
6759 { "(bad)", { XX } },
6760 { "(bad)", { XX } },
6761 { "(bad)", { XX } },
6762 { "(bad)", { XX } },
6763 { "(bad)", { XX } },
6764 { "(bad)", { XX } },
6765 { "(bad)", { XX } },
6766 { "(bad)", { XX } },
6767 /* 48 */
6768 { "(bad)", { XX } },
6769 { "(bad)", { XX } },
6770 { "(bad)", { XX } },
6771 { "(bad)", { XX } },
6772 { "(bad)", { XX } },
6773 { "(bad)", { XX } },
6774 { "(bad)", { XX } },
6775 { "(bad)", { XX } },
6776 /* 50 */
6777 { "(bad)", { XX } },
6778 { "(bad)", { XX } },
6779 { "(bad)", { XX } },
6780 { "(bad)", { XX } },
6781 { "(bad)", { XX } },
6782 { "(bad)", { XX } },
6783 { "(bad)", { XX } },
6784 { "(bad)", { XX } },
6785 /* 58 */
6786 { "(bad)", { XX } },
6787 { "(bad)", { XX } },
6788 { "(bad)", { XX } },
6789 { "(bad)", { XX } },
6790 { "(bad)", { XX } },
6791 { "(bad)", { XX } },
6792 { "(bad)", { XX } },
6793 { "(bad)", { XX } },
6794 /* 60 */
6795 { "(bad)", { XX } },
6796 { "(bad)", { XX } },
6797 { "(bad)", { XX } },
6798 { "(bad)", { XX } },
6799 { "(bad)", { XX } },
6800 { "(bad)", { XX } },
6801 { "(bad)", { XX } },
6802 { "(bad)", { XX } },
6803 /* 68 */
6804 { "(bad)", { XX } },
6805 { "(bad)", { XX } },
6806 { "(bad)", { XX } },
6807 { "(bad)", { XX } },
6808 { "(bad)", { XX } },
6809 { "(bad)", { XX } },
6810 { "(bad)", { XX } },
6811 { "(bad)", { XX } },
6812 /* 70 */
6813 { "(bad)", { XX } },
6814 { "(bad)", { XX } },
6815 { "(bad)", { XX } },
6816 { "(bad)", { XX } },
6817 { "(bad)", { XX } },
6818 { "(bad)", { XX } },
6819 { "(bad)", { XX } },
6820 { "(bad)", { XX } },
6821 /* 78 */
6822 { "(bad)", { XX } },
6823 { "(bad)", { XX } },
6824 { "(bad)", { XX } },
6825 { "(bad)", { XX } },
6826 { "(bad)", { XX } },
6827 { "(bad)", { XX } },
6828 { "(bad)", { XX } },
6829 { "(bad)", { XX } },
6830 /* 80 */
6831 { VEX_LEN_TABLE (VEX_LEN_XOP_09_80) },
6832 { VEX_LEN_TABLE (VEX_LEN_XOP_09_81) },
6833 { "vfrczss", { XM, EXd } },
6834 { "vfrczsd", { XM, EXq } },
6835 { "(bad)", { XX } },
6836 { "(bad)", { XX } },
6837 { "(bad)", { XX } },
6838 { "(bad)", { XX } },
6839 /* 88 */
6840 { "(bad)", { XX } },
6841 { "(bad)", { XX } },
6842 { "(bad)", { XX } },
6843 { "(bad)", { XX } },
6844 { "(bad)", { XX } },
6845 { "(bad)", { XX } },
6846 { "(bad)", { XX } },
6847 { "(bad)", { XX } },
6848 /* 90 */
6849 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
6850 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
6851 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
6852 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
6853 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
6854 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
6855 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
6856 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
6857 /* 98 */
6858 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
6859 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
6860 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
6861 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
6862 { "(bad)", { XX } },
6863 { "(bad)", { XX } },
6864 { "(bad)", { XX } },
6865 { "(bad)", { XX } },
6866 /* a0 */
6867 { "(bad)", { XX } },
6868 { "(bad)", { XX } },
6869 { "(bad)", { XX } },
6870 { "(bad)", { XX } },
6871 { "(bad)", { XX } },
6872 { "(bad)", { XX } },
6873 { "(bad)", { XX } },
6874 { "(bad)", { XX } },
6875 /* a8 */
6876 { "(bad)", { XX } },
6877 { "(bad)", { XX } },
6878 { "(bad)", { XX } },
6879 { "(bad)", { XX } },
6880 { "(bad)", { XX } },
6881 { "(bad)", { XX } },
6882 { "(bad)", { XX } },
6883 { "(bad)", { XX } },
6884 /* b0 */
6885 { "(bad)", { XX } },
6886 { "(bad)", { XX } },
6887 { "(bad)", { XX } },
6888 { "(bad)", { XX } },
6889 { "(bad)", { XX } },
6890 { "(bad)", { XX } },
6891 { "(bad)", { XX } },
6892 { "(bad)", { XX } },
6893 /* b8 */
6894 { "(bad)", { XX } },
6895 { "(bad)", { XX } },
6896 { "(bad)", { XX } },
6897 { "(bad)", { XX } },
6898 { "(bad)", { XX } },
6899 { "(bad)", { XX } },
6900 { "(bad)", { XX } },
6901 { "(bad)", { XX } },
6902 /* c0 */
6903 { "(bad)", { XX } },
6904 { "vphaddbw", { XM, EXxmm } },
6905 { "vphaddbd", { XM, EXxmm } },
6906 { "vphaddbq", { XM, EXxmm } },
6907 { "(bad)", { XX } },
6908 { "(bad)", { XX } },
6909 { "vphaddwd", { XM, EXxmm } },
6910 { "vphaddwq", { XM, EXxmm } },
6911 /* c8 */
6912 { "(bad)", { XX } },
6913 { "(bad)", { XX } },
6914 { "(bad)", { XX } },
6915 { "vphadddq", { XM, EXxmm } },
6916 { "(bad)", { XX } },
6917 { "(bad)", { XX } },
6918 { "(bad)", { XX } },
6919 { "(bad)", { XX } },
6920 /* d0 */
6921 { "(bad)", { XX } },
6922 { "vphaddubw", { XM, EXxmm } },
6923 { "vphaddubd", { XM, EXxmm } },
6924 { "vphaddubq", { XM, EXxmm } },
6925 { "(bad)", { XX } },
6926 { "(bad)", { XX } },
6927 { "vphadduwd", { XM, EXxmm } },
6928 { "vphadduwq", { XM, EXxmm } },
6929 /* d8 */
6930 { "(bad)", { XX } },
6931 { "(bad)", { XX } },
6932 { "(bad)", { XX } },
6933 { "vphaddudq", { XM, EXxmm } },
6934 { "(bad)", { XX } },
6935 { "(bad)", { XX } },
6936 { "(bad)", { XX } },
6937 { "(bad)", { XX } },
6938 /* e0 */
6939 { "(bad)", { XX } },
6940 { "vphsubbw", { XM, EXxmm } },
6941 { "vphsubwd", { XM, EXxmm } },
6942 { "vphsubdq", { XM, EXxmm } },
4e7d34a6
L
6943 { "(bad)", { XX } },
6944 { "(bad)", { XX } },
6945 { "(bad)", { XX } },
6946 { "(bad)", { XX } },
6947 /* e8 */
6948 { "(bad)", { XX } },
6949 { "(bad)", { XX } },
6950 { "(bad)", { XX } },
6951 { "(bad)", { XX } },
6952 { "(bad)", { XX } },
6953 { "(bad)", { XX } },
6954 { "(bad)", { XX } },
6955 { "(bad)", { XX } },
6956 /* f0 */
6957 { "(bad)", { XX } },
6958 { "(bad)", { XX } },
6959 { "(bad)", { XX } },
6960 { "(bad)", { XX } },
6961 { "(bad)", { XX } },
6962 { "(bad)", { XX } },
6963 { "(bad)", { XX } },
6964 { "(bad)", { XX } },
6965 /* f8 */
6966 { "(bad)", { XX } },
6967 { "(bad)", { XX } },
6968 { "(bad)", { XX } },
6969 { "(bad)", { XX } },
6970 { "(bad)", { XX } },
6971 { "(bad)", { XX } },
6972 { "(bad)", { XX } },
6973 { "(bad)", { XX } },
6974 },
f88c9eb0 6975 /* XOP_0A */
4e7d34a6
L
6976 {
6977 /* 00 */
c0f3af97
L
6978 { "(bad)", { XX } },
6979 { "(bad)", { XX } },
6980 { "(bad)", { XX } },
6981 { "(bad)", { XX } },
6982 { "(bad)", { XX } },
6983 { "(bad)", { XX } },
6984 { "(bad)", { XX } },
6985 { "(bad)", { XX } },
4e7d34a6 6986 /* 08 */
c0f3af97
L
6987 { "(bad)", { XX } },
6988 { "(bad)", { XX } },
6989 { "(bad)", { XX } },
6990 { "(bad)", { XX } },
d5d7db8e
L
6991 { "(bad)", { XX } },
6992 { "(bad)", { XX } },
6993 { "(bad)", { XX } },
6994 { "(bad)", { XX } },
4e7d34a6 6995 /* 10 */
d5d7db8e
L
6996 { "(bad)", { XX } },
6997 { "(bad)", { XX } },
f88c9eb0 6998 { REG_TABLE (REG_XOP_LWP) },
d5d7db8e 6999 { "(bad)", { XX } },
c0f3af97
L
7000 { "(bad)", { XX } },
7001 { "(bad)", { XX } },
7002 { "(bad)", { XX } },
7003 { "(bad)", { XX } },
4e7d34a6 7004 /* 18 */
d5d7db8e
L
7005 { "(bad)", { XX } },
7006 { "(bad)", { XX } },
7007 { "(bad)", { XX } },
7008 { "(bad)", { XX } },
c0f3af97
L
7009 { "(bad)", { XX } },
7010 { "(bad)", { XX } },
7011 { "(bad)", { XX } },
d5d7db8e 7012 { "(bad)", { XX } },
4e7d34a6 7013 /* 20 */
f88c9eb0 7014 { "(bad)", { XX } },
c0f3af97
L
7015 { "(bad)", { XX } },
7016 { "(bad)", { XX } },
7017 { "(bad)", { XX } },
7018 { "(bad)", { XX } },
7019 { "(bad)", { XX } },
d5d7db8e
L
7020 { "(bad)", { XX } },
7021 { "(bad)", { XX } },
4e7d34a6 7022 /* 28 */
c0f3af97
L
7023 { "(bad)", { XX } },
7024 { "(bad)", { XX } },
7025 { "(bad)", { XX } },
7026 { "(bad)", { XX } },
d5d7db8e
L
7027 { "(bad)", { XX } },
7028 { "(bad)", { XX } },
7029 { "(bad)", { XX } },
7030 { "(bad)", { XX } },
4e7d34a6 7031 /* 30 */
d5d7db8e 7032 { "(bad)", { XX } },
d5d7db8e
L
7033 { "(bad)", { XX } },
7034 { "(bad)", { XX } },
7035 { "(bad)", { XX } },
7036 { "(bad)", { XX } },
7037 { "(bad)", { XX } },
7038 { "(bad)", { XX } },
c0f3af97
L
7039 { "(bad)", { XX } },
7040 /* 38 */
7041 { "(bad)", { XX } },
7042 { "(bad)", { XX } },
7043 { "(bad)", { XX } },
7044 { "(bad)", { XX } },
d5d7db8e
L
7045 { "(bad)", { XX } },
7046 { "(bad)", { XX } },
7047 { "(bad)", { XX } },
7048 { "(bad)", { XX } },
c0f3af97 7049 /* 40 */
c1e679ec 7050 { "(bad)", { XX } },
d5d7db8e
L
7051 { "(bad)", { XX } },
7052 { "(bad)", { XX } },
f88c9eb0
SP
7053 { "(bad)", { XX } },
7054 { "(bad)", { XX } },
7055 { "(bad)", { XX } },
7056 { "(bad)", { XX } },
7057 { "(bad)", { XX } },
c1e679ec 7058 /* 48 */
d5d7db8e
L
7059 { "(bad)", { XX } },
7060 { "(bad)", { XX } },
d5d7db8e 7061 { "(bad)", { XX } },
f88c9eb0 7062 { "(bad)", { XX } },
d5d7db8e
L
7063 { "(bad)", { XX } },
7064 { "(bad)", { XX } },
7065 { "(bad)", { XX } },
7066 { "(bad)", { XX } },
c1e679ec 7067 /* 50 */
d5d7db8e
L
7068 { "(bad)", { XX } },
7069 { "(bad)", { XX } },
7070 { "(bad)", { XX } },
f88c9eb0
SP
7071 { "(bad)", { XX } },
7072 { "(bad)", { XX } },
7073 { "(bad)", { XX } },
7074 { "(bad)", { XX } },
7075 { "(bad)", { XX } },
4e7d34a6 7076 /* 58 */
d5d7db8e
L
7077 { "(bad)", { XX } },
7078 { "(bad)", { XX } },
7079 { "(bad)", { XX } },
f88c9eb0 7080 { "(bad)", { XX } },
d5d7db8e
L
7081 { "(bad)", { XX } },
7082 { "(bad)", { XX } },
7083 { "(bad)", { XX } },
7084 { "(bad)", { XX } },
4e7d34a6 7085 /* 60 */
d5d7db8e 7086 { "(bad)", { XX } },
f88c9eb0
SP
7087 { "(bad)", { XX } },
7088 { "(bad)", { XX } },
7089 { "(bad)", { XX } },
d5d7db8e
L
7090 { "(bad)", { XX } },
7091 { "(bad)", { XX } },
7092 { "(bad)", { XX } },
7093 { "(bad)", { XX } },
4e7d34a6 7094 /* 68 */
d5d7db8e
L
7095 { "(bad)", { XX } },
7096 { "(bad)", { XX } },
7097 { "(bad)", { XX } },
7098 { "(bad)", { XX } },
7099 { "(bad)", { XX } },
7100 { "(bad)", { XX } },
7101 { "(bad)", { XX } },
7102 { "(bad)", { XX } },
4e7d34a6 7103 /* 70 */
d5d7db8e
L
7104 { "(bad)", { XX } },
7105 { "(bad)", { XX } },
7106 { "(bad)", { XX } },
7107 { "(bad)", { XX } },
7108 { "(bad)", { XX } },
7109 { "(bad)", { XX } },
7110 { "(bad)", { XX } },
7111 { "(bad)", { XX } },
4e7d34a6 7112 /* 78 */
d5d7db8e
L
7113 { "(bad)", { XX } },
7114 { "(bad)", { XX } },
7115 { "(bad)", { XX } },
7116 { "(bad)", { XX } },
7117 { "(bad)", { XX } },
7118 { "(bad)", { XX } },
7119 { "(bad)", { XX } },
7120 { "(bad)", { XX } },
4e7d34a6 7121 /* 80 */
d5d7db8e
L
7122 { "(bad)", { XX } },
7123 { "(bad)", { XX } },
7124 { "(bad)", { XX } },
7125 { "(bad)", { XX } },
7126 { "(bad)", { XX } },
7127 { "(bad)", { XX } },
7128 { "(bad)", { XX } },
7129 { "(bad)", { XX } },
4e7d34a6 7130 /* 88 */
d5d7db8e
L
7131 { "(bad)", { XX } },
7132 { "(bad)", { XX } },
7133 { "(bad)", { XX } },
7134 { "(bad)", { XX } },
7135 { "(bad)", { XX } },
7136 { "(bad)", { XX } },
7137 { "(bad)", { XX } },
7138 { "(bad)", { XX } },
4e7d34a6 7139 /* 90 */
d5d7db8e
L
7140 { "(bad)", { XX } },
7141 { "(bad)", { XX } },
7142 { "(bad)", { XX } },
7143 { "(bad)", { XX } },
7144 { "(bad)", { XX } },
7145 { "(bad)", { XX } },
7146 { "(bad)", { XX } },
7147 { "(bad)", { XX } },
4e7d34a6 7148 /* 98 */
d5d7db8e
L
7149 { "(bad)", { XX } },
7150 { "(bad)", { XX } },
7151 { "(bad)", { XX } },
7152 { "(bad)", { XX } },
7153 { "(bad)", { XX } },
7154 { "(bad)", { XX } },
7155 { "(bad)", { XX } },
7156 { "(bad)", { XX } },
4e7d34a6 7157 /* a0 */
d5d7db8e
L
7158 { "(bad)", { XX } },
7159 { "(bad)", { XX } },
7160 { "(bad)", { XX } },
7161 { "(bad)", { XX } },
7162 { "(bad)", { XX } },
7163 { "(bad)", { XX } },
7164 { "(bad)", { XX } },
7165 { "(bad)", { XX } },
4e7d34a6 7166 /* a8 */
d5d7db8e
L
7167 { "(bad)", { XX } },
7168 { "(bad)", { XX } },
7169 { "(bad)", { XX } },
7170 { "(bad)", { XX } },
7171 { "(bad)", { XX } },
7172 { "(bad)", { XX } },
7173 { "(bad)", { XX } },
7174 { "(bad)", { XX } },
7175 /* b0 */
7176 { "(bad)", { XX } },
7177 { "(bad)", { XX } },
7178 { "(bad)", { XX } },
7179 { "(bad)", { XX } },
7180 { "(bad)", { XX } },
7181 { "(bad)", { XX } },
7182 { "(bad)", { XX } },
7183 { "(bad)", { XX } },
85f10a01 7184 /* b8 */
d5d7db8e
L
7185 { "(bad)", { XX } },
7186 { "(bad)", { XX } },
7187 { "(bad)", { XX } },
7188 { "(bad)", { XX } },
7189 { "(bad)", { XX } },
7190 { "(bad)", { XX } },
7191 { "(bad)", { XX } },
7192 { "(bad)", { XX } },
85f10a01 7193 /* c0 */
d5d7db8e
L
7194 { "(bad)", { XX } },
7195 { "(bad)", { XX } },
7196 { "(bad)", { XX } },
7197 { "(bad)", { XX } },
7198 { "(bad)", { XX } },
7199 { "(bad)", { XX } },
7200 { "(bad)", { XX } },
7201 { "(bad)", { XX } },
85f10a01 7202 /* c8 */
d5d7db8e
L
7203 { "(bad)", { XX } },
7204 { "(bad)", { XX } },
7205 { "(bad)", { XX } },
7206 { "(bad)", { XX } },
7207 { "(bad)", { XX } },
7208 { "(bad)", { XX } },
7209 { "(bad)", { XX } },
7210 { "(bad)", { XX } },
85f10a01 7211 /* d0 */
d5d7db8e
L
7212 { "(bad)", { XX } },
7213 { "(bad)", { XX } },
7214 { "(bad)", { XX } },
7215 { "(bad)", { XX } },
7216 { "(bad)", { XX } },
7217 { "(bad)", { XX } },
7218 { "(bad)", { XX } },
7219 { "(bad)", { XX } },
85f10a01 7220 /* d8 */
d5d7db8e
L
7221 { "(bad)", { XX } },
7222 { "(bad)", { XX } },
7223 { "(bad)", { XX } },
7224 { "(bad)", { XX } },
7225 { "(bad)", { XX } },
7226 { "(bad)", { XX } },
7227 { "(bad)", { XX } },
7228 { "(bad)", { XX } },
85f10a01 7229 /* e0 */
d5d7db8e
L
7230 { "(bad)", { XX } },
7231 { "(bad)", { XX } },
7232 { "(bad)", { XX } },
7233 { "(bad)", { XX } },
7234 { "(bad)", { XX } },
7235 { "(bad)", { XX } },
7236 { "(bad)", { XX } },
7237 { "(bad)", { XX } },
85f10a01 7238 /* e8 */
d5d7db8e
L
7239 { "(bad)", { XX } },
7240 { "(bad)", { XX } },
7241 { "(bad)", { XX } },
7242 { "(bad)", { XX } },
7243 { "(bad)", { XX } },
7244 { "(bad)", { XX } },
7245 { "(bad)", { XX } },
7246 { "(bad)", { XX } },
85f10a01 7247 /* f0 */
c0f3af97
L
7248 { "(bad)", { XX } },
7249 { "(bad)", { XX } },
d5d7db8e
L
7250 { "(bad)", { XX } },
7251 { "(bad)", { XX } },
7252 { "(bad)", { XX } },
7253 { "(bad)", { XX } },
7254 { "(bad)", { XX } },
7255 { "(bad)", { XX } },
85f10a01 7256 /* f8 */
d5d7db8e
L
7257 { "(bad)", { XX } },
7258 { "(bad)", { XX } },
7259 { "(bad)", { XX } },
7260 { "(bad)", { XX } },
7261 { "(bad)", { XX } },
7262 { "(bad)", { XX } },
7263 { "(bad)", { XX } },
7264 { "(bad)", { XX } },
85f10a01 7265 },
c0f3af97
L
7266};
7267
7268static const struct dis386 vex_table[][256] = {
7269 /* VEX_0F */
85f10a01
MM
7270 {
7271 /* 00 */
d5d7db8e
L
7272 { "(bad)", { XX } },
7273 { "(bad)", { XX } },
7274 { "(bad)", { XX } },
7275 { "(bad)", { XX } },
7276 { "(bad)", { XX } },
7277 { "(bad)", { XX } },
7278 { "(bad)", { XX } },
7279 { "(bad)", { XX } },
85f10a01 7280 /* 08 */
d5d7db8e
L
7281 { "(bad)", { XX } },
7282 { "(bad)", { XX } },
7283 { "(bad)", { XX } },
7284 { "(bad)", { XX } },
d5d7db8e
L
7285 { "(bad)", { XX } },
7286 { "(bad)", { XX } },
7287 { "(bad)", { XX } },
7288 { "(bad)", { XX } },
c0f3af97
L
7289 /* 10 */
7290 { PREFIX_TABLE (PREFIX_VEX_10) },
7291 { PREFIX_TABLE (PREFIX_VEX_11) },
7292 { PREFIX_TABLE (PREFIX_VEX_12) },
7293 { MOD_TABLE (MOD_VEX_13) },
7294 { "vunpcklpX", { XM, Vex, EXx } },
7295 { "vunpckhpX", { XM, Vex, EXx } },
7296 { PREFIX_TABLE (PREFIX_VEX_16) },
7297 { MOD_TABLE (MOD_VEX_17) },
7298 /* 18 */
d5d7db8e
L
7299 { "(bad)", { XX } },
7300 { "(bad)", { XX } },
7301 { "(bad)", { XX } },
d5d7db8e
L
7302 { "(bad)", { XX } },
7303 { "(bad)", { XX } },
7304 { "(bad)", { XX } },
7305 { "(bad)", { XX } },
7306 { "(bad)", { XX } },
c0f3af97 7307 /* 20 */
d5d7db8e
L
7308 { "(bad)", { XX } },
7309 { "(bad)", { XX } },
7310 { "(bad)", { XX } },
7311 { "(bad)", { XX } },
7312 { "(bad)", { XX } },
7313 { "(bad)", { XX } },
7314 { "(bad)", { XX } },
7315 { "(bad)", { XX } },
c0f3af97
L
7316 /* 28 */
7317 { "vmovapX", { XM, EXx } },
b6169b20 7318 { "vmovapX", { EXxS, XM } },
c0f3af97
L
7319 { PREFIX_TABLE (PREFIX_VEX_2A) },
7320 { MOD_TABLE (MOD_VEX_2B) },
7321 { PREFIX_TABLE (PREFIX_VEX_2C) },
7322 { PREFIX_TABLE (PREFIX_VEX_2D) },
7323 { PREFIX_TABLE (PREFIX_VEX_2E) },
7324 { PREFIX_TABLE (PREFIX_VEX_2F) },
85f10a01 7325 /* 30 */
d5d7db8e
L
7326 { "(bad)", { XX } },
7327 { "(bad)", { XX } },
7328 { "(bad)", { XX } },
7329 { "(bad)", { XX } },
7330 { "(bad)", { XX } },
7331 { "(bad)", { XX } },
7332 { "(bad)", { XX } },
7333 { "(bad)", { XX } },
4e7d34a6 7334 /* 38 */
d5d7db8e
L
7335 { "(bad)", { XX } },
7336 { "(bad)", { XX } },
7337 { "(bad)", { XX } },
7338 { "(bad)", { XX } },
7339 { "(bad)", { XX } },
7340 { "(bad)", { XX } },
7341 { "(bad)", { XX } },
7342 { "(bad)", { XX } },
7343 /* 40 */
c0f3af97
L
7344 { "(bad)", { XX } },
7345 { "(bad)", { XX } },
7346 { "(bad)", { XX } },
d5d7db8e
L
7347 { "(bad)", { XX } },
7348 { "(bad)", { XX } },
7349 { "(bad)", { XX } },
7350 { "(bad)", { XX } },
7351 { "(bad)", { XX } },
85f10a01 7352 /* 48 */
85f10a01
MM
7353 { "(bad)", { XX } },
7354 { "(bad)", { XX } },
7355 { "(bad)", { XX } },
7356 { "(bad)", { XX } },
7357 { "(bad)", { XX } },
7358 { "(bad)", { XX } },
7359 { "(bad)", { XX } },
7360 { "(bad)", { XX } },
d5d7db8e 7361 /* 50 */
c0f3af97
L
7362 { MOD_TABLE (MOD_VEX_51) },
7363 { PREFIX_TABLE (PREFIX_VEX_51) },
7364 { PREFIX_TABLE (PREFIX_VEX_52) },
7365 { PREFIX_TABLE (PREFIX_VEX_53) },
7366 { "vandpX", { XM, Vex, EXx } },
7367 { "vandnpX", { XM, Vex, EXx } },
7368 { "vorpX", { XM, Vex, EXx } },
7369 { "vxorpX", { XM, Vex, EXx } },
7370 /* 58 */
7371 { PREFIX_TABLE (PREFIX_VEX_58) },
7372 { PREFIX_TABLE (PREFIX_VEX_59) },
7373 { PREFIX_TABLE (PREFIX_VEX_5A) },
7374 { PREFIX_TABLE (PREFIX_VEX_5B) },
7375 { PREFIX_TABLE (PREFIX_VEX_5C) },
7376 { PREFIX_TABLE (PREFIX_VEX_5D) },
7377 { PREFIX_TABLE (PREFIX_VEX_5E) },
7378 { PREFIX_TABLE (PREFIX_VEX_5F) },
7379 /* 60 */
7380 { PREFIX_TABLE (PREFIX_VEX_60) },
7381 { PREFIX_TABLE (PREFIX_VEX_61) },
7382 { PREFIX_TABLE (PREFIX_VEX_62) },
7383 { PREFIX_TABLE (PREFIX_VEX_63) },
7384 { PREFIX_TABLE (PREFIX_VEX_64) },
7385 { PREFIX_TABLE (PREFIX_VEX_65) },
7386 { PREFIX_TABLE (PREFIX_VEX_66) },
7387 { PREFIX_TABLE (PREFIX_VEX_67) },
7388 /* 68 */
7389 { PREFIX_TABLE (PREFIX_VEX_68) },
7390 { PREFIX_TABLE (PREFIX_VEX_69) },
7391 { PREFIX_TABLE (PREFIX_VEX_6A) },
7392 { PREFIX_TABLE (PREFIX_VEX_6B) },
7393 { PREFIX_TABLE (PREFIX_VEX_6C) },
7394 { PREFIX_TABLE (PREFIX_VEX_6D) },
7395 { PREFIX_TABLE (PREFIX_VEX_6E) },
7396 { PREFIX_TABLE (PREFIX_VEX_6F) },
7397 /* 70 */
7398 { PREFIX_TABLE (PREFIX_VEX_70) },
7399 { REG_TABLE (REG_VEX_71) },
7400 { REG_TABLE (REG_VEX_72) },
7401 { REG_TABLE (REG_VEX_73) },
7402 { PREFIX_TABLE (PREFIX_VEX_74) },
7403 { PREFIX_TABLE (PREFIX_VEX_75) },
7404 { PREFIX_TABLE (PREFIX_VEX_76) },
7405 { PREFIX_TABLE (PREFIX_VEX_77) },
7406 /* 78 */
85f10a01
MM
7407 { "(bad)", { XX } },
7408 { "(bad)", { XX } },
7409 { "(bad)", { XX } },
7410 { "(bad)", { XX } },
c0f3af97
L
7411 { PREFIX_TABLE (PREFIX_VEX_7C) },
7412 { PREFIX_TABLE (PREFIX_VEX_7D) },
7413 { PREFIX_TABLE (PREFIX_VEX_7E) },
7414 { PREFIX_TABLE (PREFIX_VEX_7F) },
7415 /* 80 */
85f10a01
MM
7416 { "(bad)", { XX } },
7417 { "(bad)", { XX } },
7418 { "(bad)", { XX } },
7419 { "(bad)", { XX } },
85f10a01
MM
7420 { "(bad)", { XX } },
7421 { "(bad)", { XX } },
7422 { "(bad)", { XX } },
7423 { "(bad)", { XX } },
c0f3af97 7424 /* 88 */
85f10a01
MM
7425 { "(bad)", { XX } },
7426 { "(bad)", { XX } },
7427 { "(bad)", { XX } },
7428 { "(bad)", { XX } },
7429 { "(bad)", { XX } },
7430 { "(bad)", { XX } },
7431 { "(bad)", { XX } },
7432 { "(bad)", { XX } },
c0f3af97 7433 /* 90 */
85f10a01
MM
7434 { "(bad)", { XX } },
7435 { "(bad)", { XX } },
7436 { "(bad)", { XX } },
7437 { "(bad)", { XX } },
7438 { "(bad)", { XX } },
7439 { "(bad)", { XX } },
7440 { "(bad)", { XX } },
85f10a01 7441 { "(bad)", { XX } },
c0f3af97 7442 /* 98 */
85f10a01
MM
7443 { "(bad)", { XX } },
7444 { "(bad)", { XX } },
7445 { "(bad)", { XX } },
d5d7db8e
L
7446 { "(bad)", { XX } },
7447 { "(bad)", { XX } },
7448 { "(bad)", { XX } },
7449 { "(bad)", { XX } },
7450 { "(bad)", { XX } },
c0f3af97 7451 /* a0 */
d5d7db8e
L
7452 { "(bad)", { XX } },
7453 { "(bad)", { XX } },
7454 { "(bad)", { XX } },
7455 { "(bad)", { XX } },
7456 { "(bad)", { XX } },
7457 { "(bad)", { XX } },
7458 { "(bad)", { XX } },
7459 { "(bad)", { XX } },
c0f3af97 7460 /* a8 */
d5d7db8e
L
7461 { "(bad)", { XX } },
7462 { "(bad)", { XX } },
7463 { "(bad)", { XX } },
7464 { "(bad)", { XX } },
7465 { "(bad)", { XX } },
7466 { "(bad)", { XX } },
c0f3af97 7467 { REG_TABLE (REG_VEX_AE) },
d5d7db8e 7468 { "(bad)", { XX } },
c0f3af97 7469 /* b0 */
d5d7db8e 7470 { "(bad)", { XX } },
d5d7db8e
L
7471 { "(bad)", { XX } },
7472 { "(bad)", { XX } },
7473 { "(bad)", { XX } },
7474 { "(bad)", { XX } },
7475 { "(bad)", { XX } },
7476 { "(bad)", { XX } },
7477 { "(bad)", { XX } },
c0f3af97 7478 /* b8 */
d5d7db8e 7479 { "(bad)", { XX } },
d5d7db8e
L
7480 { "(bad)", { XX } },
7481 { "(bad)", { XX } },
7482 { "(bad)", { XX } },
7483 { "(bad)", { XX } },
7484 { "(bad)", { XX } },
7485 { "(bad)", { XX } },
7486 { "(bad)", { XX } },
c0f3af97 7487 /* c0 */
d5d7db8e 7488 { "(bad)", { XX } },
d5d7db8e 7489 { "(bad)", { XX } },
c0f3af97 7490 { PREFIX_TABLE (PREFIX_VEX_C2) },
d5d7db8e 7491 { "(bad)", { XX } },
c0f3af97
L
7492 { PREFIX_TABLE (PREFIX_VEX_C4) },
7493 { PREFIX_TABLE (PREFIX_VEX_C5) },
7494 { "vshufpX", { XM, Vex, EXx, Ib } },
d5d7db8e 7495 { "(bad)", { XX } },
c0f3af97 7496 /* c8 */
d5d7db8e
L
7497 { "(bad)", { XX } },
7498 { "(bad)", { XX } },
7499 { "(bad)", { XX } },
7500 { "(bad)", { XX } },
7501 { "(bad)", { XX } },
d5d7db8e
L
7502 { "(bad)", { XX } },
7503 { "(bad)", { XX } },
7504 { "(bad)", { XX } },
c0f3af97
L
7505 /* d0 */
7506 { PREFIX_TABLE (PREFIX_VEX_D0) },
7507 { PREFIX_TABLE (PREFIX_VEX_D1) },
7508 { PREFIX_TABLE (PREFIX_VEX_D2) },
7509 { PREFIX_TABLE (PREFIX_VEX_D3) },
7510 { PREFIX_TABLE (PREFIX_VEX_D4) },
7511 { PREFIX_TABLE (PREFIX_VEX_D5) },
7512 { PREFIX_TABLE (PREFIX_VEX_D6) },
7513 { PREFIX_TABLE (PREFIX_VEX_D7) },
7514 /* d8 */
7515 { PREFIX_TABLE (PREFIX_VEX_D8) },
7516 { PREFIX_TABLE (PREFIX_VEX_D9) },
7517 { PREFIX_TABLE (PREFIX_VEX_DA) },
7518 { PREFIX_TABLE (PREFIX_VEX_DB) },
7519 { PREFIX_TABLE (PREFIX_VEX_DC) },
7520 { PREFIX_TABLE (PREFIX_VEX_DD) },
7521 { PREFIX_TABLE (PREFIX_VEX_DE) },
7522 { PREFIX_TABLE (PREFIX_VEX_DF) },
7523 /* e0 */
7524 { PREFIX_TABLE (PREFIX_VEX_E0) },
7525 { PREFIX_TABLE (PREFIX_VEX_E1) },
7526 { PREFIX_TABLE (PREFIX_VEX_E2) },
7527 { PREFIX_TABLE (PREFIX_VEX_E3) },
7528 { PREFIX_TABLE (PREFIX_VEX_E4) },
7529 { PREFIX_TABLE (PREFIX_VEX_E5) },
7530 { PREFIX_TABLE (PREFIX_VEX_E6) },
7531 { PREFIX_TABLE (PREFIX_VEX_E7) },
7532 /* e8 */
7533 { PREFIX_TABLE (PREFIX_VEX_E8) },
7534 { PREFIX_TABLE (PREFIX_VEX_E9) },
7535 { PREFIX_TABLE (PREFIX_VEX_EA) },
7536 { PREFIX_TABLE (PREFIX_VEX_EB) },
7537 { PREFIX_TABLE (PREFIX_VEX_EC) },
7538 { PREFIX_TABLE (PREFIX_VEX_ED) },
7539 { PREFIX_TABLE (PREFIX_VEX_EE) },
7540 { PREFIX_TABLE (PREFIX_VEX_EF) },
7541 /* f0 */
7542 { PREFIX_TABLE (PREFIX_VEX_F0) },
7543 { PREFIX_TABLE (PREFIX_VEX_F1) },
7544 { PREFIX_TABLE (PREFIX_VEX_F2) },
7545 { PREFIX_TABLE (PREFIX_VEX_F3) },
7546 { PREFIX_TABLE (PREFIX_VEX_F4) },
7547 { PREFIX_TABLE (PREFIX_VEX_F5) },
7548 { PREFIX_TABLE (PREFIX_VEX_F6) },
7549 { PREFIX_TABLE (PREFIX_VEX_F7) },
7550 /* f8 */
7551 { PREFIX_TABLE (PREFIX_VEX_F8) },
7552 { PREFIX_TABLE (PREFIX_VEX_F9) },
7553 { PREFIX_TABLE (PREFIX_VEX_FA) },
7554 { PREFIX_TABLE (PREFIX_VEX_FB) },
7555 { PREFIX_TABLE (PREFIX_VEX_FC) },
7556 { PREFIX_TABLE (PREFIX_VEX_FD) },
7557 { PREFIX_TABLE (PREFIX_VEX_FE) },
d5d7db8e 7558 { "(bad)", { XX } },
c0f3af97
L
7559 },
7560 /* VEX_0F38 */
7561 {
7562 /* 00 */
7563 { PREFIX_TABLE (PREFIX_VEX_3800) },
7564 { PREFIX_TABLE (PREFIX_VEX_3801) },
7565 { PREFIX_TABLE (PREFIX_VEX_3802) },
7566 { PREFIX_TABLE (PREFIX_VEX_3803) },
7567 { PREFIX_TABLE (PREFIX_VEX_3804) },
7568 { PREFIX_TABLE (PREFIX_VEX_3805) },
7569 { PREFIX_TABLE (PREFIX_VEX_3806) },
7570 { PREFIX_TABLE (PREFIX_VEX_3807) },
7571 /* 08 */
7572 { PREFIX_TABLE (PREFIX_VEX_3808) },
7573 { PREFIX_TABLE (PREFIX_VEX_3809) },
7574 { PREFIX_TABLE (PREFIX_VEX_380A) },
7575 { PREFIX_TABLE (PREFIX_VEX_380B) },
7576 { PREFIX_TABLE (PREFIX_VEX_380C) },
7577 { PREFIX_TABLE (PREFIX_VEX_380D) },
7578 { PREFIX_TABLE (PREFIX_VEX_380E) },
7579 { PREFIX_TABLE (PREFIX_VEX_380F) },
7580 /* 10 */
d5d7db8e
L
7581 { "(bad)", { XX } },
7582 { "(bad)", { XX } },
7583 { "(bad)", { XX } },
7584 { "(bad)", { XX } },
d5d7db8e
L
7585 { "(bad)", { XX } },
7586 { "(bad)", { XX } },
7587 { "(bad)", { XX } },
c0f3af97
L
7588 { PREFIX_TABLE (PREFIX_VEX_3817) },
7589 /* 18 */
7590 { PREFIX_TABLE (PREFIX_VEX_3818) },
7591 { PREFIX_TABLE (PREFIX_VEX_3819) },
7592 { PREFIX_TABLE (PREFIX_VEX_381A) },
d5d7db8e 7593 { "(bad)", { XX } },
c0f3af97
L
7594 { PREFIX_TABLE (PREFIX_VEX_381C) },
7595 { PREFIX_TABLE (PREFIX_VEX_381D) },
7596 { PREFIX_TABLE (PREFIX_VEX_381E) },
d5d7db8e 7597 { "(bad)", { XX } },
c0f3af97
L
7598 /* 20 */
7599 { PREFIX_TABLE (PREFIX_VEX_3820) },
7600 { PREFIX_TABLE (PREFIX_VEX_3821) },
7601 { PREFIX_TABLE (PREFIX_VEX_3822) },
7602 { PREFIX_TABLE (PREFIX_VEX_3823) },
7603 { PREFIX_TABLE (PREFIX_VEX_3824) },
7604 { PREFIX_TABLE (PREFIX_VEX_3825) },
d5d7db8e
L
7605 { "(bad)", { XX } },
7606 { "(bad)", { XX } },
c0f3af97
L
7607 /* 28 */
7608 { PREFIX_TABLE (PREFIX_VEX_3828) },
7609 { PREFIX_TABLE (PREFIX_VEX_3829) },
7610 { PREFIX_TABLE (PREFIX_VEX_382A) },
7611 { PREFIX_TABLE (PREFIX_VEX_382B) },
7612 { PREFIX_TABLE (PREFIX_VEX_382C) },
7613 { PREFIX_TABLE (PREFIX_VEX_382D) },
7614 { PREFIX_TABLE (PREFIX_VEX_382E) },
7615 { PREFIX_TABLE (PREFIX_VEX_382F) },
7616 /* 30 */
7617 { PREFIX_TABLE (PREFIX_VEX_3830) },
7618 { PREFIX_TABLE (PREFIX_VEX_3831) },
7619 { PREFIX_TABLE (PREFIX_VEX_3832) },
7620 { PREFIX_TABLE (PREFIX_VEX_3833) },
7621 { PREFIX_TABLE (PREFIX_VEX_3834) },
7622 { PREFIX_TABLE (PREFIX_VEX_3835) },
7623 { "(bad)", { XX } },
7624 { PREFIX_TABLE (PREFIX_VEX_3837) },
7625 /* 38 */
7626 { PREFIX_TABLE (PREFIX_VEX_3838) },
7627 { PREFIX_TABLE (PREFIX_VEX_3839) },
7628 { PREFIX_TABLE (PREFIX_VEX_383A) },
7629 { PREFIX_TABLE (PREFIX_VEX_383B) },
7630 { PREFIX_TABLE (PREFIX_VEX_383C) },
7631 { PREFIX_TABLE (PREFIX_VEX_383D) },
7632 { PREFIX_TABLE (PREFIX_VEX_383E) },
7633 { PREFIX_TABLE (PREFIX_VEX_383F) },
7634 /* 40 */
7635 { PREFIX_TABLE (PREFIX_VEX_3840) },
7636 { PREFIX_TABLE (PREFIX_VEX_3841) },
d5d7db8e 7637 { "(bad)", { XX } },
d5d7db8e
L
7638 { "(bad)", { XX } },
7639 { "(bad)", { XX } },
7640 { "(bad)", { XX } },
7641 { "(bad)", { XX } },
7642 { "(bad)", { XX } },
c0f3af97 7643 /* 48 */
d5d7db8e
L
7644 { "(bad)", { XX } },
7645 { "(bad)", { XX } },
7646 { "(bad)", { XX } },
d5d7db8e
L
7647 { "(bad)", { XX } },
7648 { "(bad)", { XX } },
7649 { "(bad)", { XX } },
7650 { "(bad)", { XX } },
7651 { "(bad)", { XX } },
c0f3af97 7652 /* 50 */
d5d7db8e
L
7653 { "(bad)", { XX } },
7654 { "(bad)", { XX } },
7655 { "(bad)", { XX } },
d5d7db8e
L
7656 { "(bad)", { XX } },
7657 { "(bad)", { XX } },
7658 { "(bad)", { XX } },
7659 { "(bad)", { XX } },
7660 { "(bad)", { XX } },
c0f3af97 7661 /* 58 */
d5d7db8e
L
7662 { "(bad)", { XX } },
7663 { "(bad)", { XX } },
7664 { "(bad)", { XX } },
d5d7db8e
L
7665 { "(bad)", { XX } },
7666 { "(bad)", { XX } },
7667 { "(bad)", { XX } },
7668 { "(bad)", { XX } },
7669 { "(bad)", { XX } },
c0f3af97 7670 /* 60 */
d5d7db8e
L
7671 { "(bad)", { XX } },
7672 { "(bad)", { XX } },
7673 { "(bad)", { XX } },
d5d7db8e
L
7674 { "(bad)", { XX } },
7675 { "(bad)", { XX } },
7676 { "(bad)", { XX } },
7677 { "(bad)", { XX } },
7678 { "(bad)", { XX } },
c0f3af97 7679 /* 68 */
d5d7db8e
L
7680 { "(bad)", { XX } },
7681 { "(bad)", { XX } },
7682 { "(bad)", { XX } },
d5d7db8e
L
7683 { "(bad)", { XX } },
7684 { "(bad)", { XX } },
7685 { "(bad)", { XX } },
7686 { "(bad)", { XX } },
7687 { "(bad)", { XX } },
c0f3af97 7688 /* 70 */
d5d7db8e
L
7689 { "(bad)", { XX } },
7690 { "(bad)", { XX } },
7691 { "(bad)", { XX } },
d5d7db8e
L
7692 { "(bad)", { XX } },
7693 { "(bad)", { XX } },
7694 { "(bad)", { XX } },
7695 { "(bad)", { XX } },
7696 { "(bad)", { XX } },
c0f3af97 7697 /* 78 */
d5d7db8e
L
7698 { "(bad)", { XX } },
7699 { "(bad)", { XX } },
7700 { "(bad)", { XX } },
d5d7db8e
L
7701 { "(bad)", { XX } },
7702 { "(bad)", { XX } },
7703 { "(bad)", { XX } },
7704 { "(bad)", { XX } },
7705 { "(bad)", { XX } },
c0f3af97 7706 /* 80 */
d5d7db8e
L
7707 { "(bad)", { XX } },
7708 { "(bad)", { XX } },
7709 { "(bad)", { XX } },
d5d7db8e
L
7710 { "(bad)", { XX } },
7711 { "(bad)", { XX } },
7712 { "(bad)", { XX } },
7713 { "(bad)", { XX } },
7714 { "(bad)", { XX } },
c0f3af97 7715 /* 88 */
d5d7db8e
L
7716 { "(bad)", { XX } },
7717 { "(bad)", { XX } },
7718 { "(bad)", { XX } },
d5d7db8e
L
7719 { "(bad)", { XX } },
7720 { "(bad)", { XX } },
7721 { "(bad)", { XX } },
7722 { "(bad)", { XX } },
7723 { "(bad)", { XX } },
c0f3af97 7724 /* 90 */
d5d7db8e
L
7725 { "(bad)", { XX } },
7726 { "(bad)", { XX } },
7727 { "(bad)", { XX } },
d5d7db8e
L
7728 { "(bad)", { XX } },
7729 { "(bad)", { XX } },
7730 { "(bad)", { XX } },
0bfee649
L
7731 { PREFIX_TABLE (PREFIX_VEX_3896) },
7732 { PREFIX_TABLE (PREFIX_VEX_3897) },
c0f3af97 7733 /* 98 */
0bfee649
L
7734 { PREFIX_TABLE (PREFIX_VEX_3898) },
7735 { PREFIX_TABLE (PREFIX_VEX_3899) },
7736 { PREFIX_TABLE (PREFIX_VEX_389A) },
7737 { PREFIX_TABLE (PREFIX_VEX_389B) },
7738 { PREFIX_TABLE (PREFIX_VEX_389C) },
7739 { PREFIX_TABLE (PREFIX_VEX_389D) },
7740 { PREFIX_TABLE (PREFIX_VEX_389E) },
7741 { PREFIX_TABLE (PREFIX_VEX_389F) },
c0f3af97 7742 /* a0 */
d5d7db8e
L
7743 { "(bad)", { XX } },
7744 { "(bad)", { XX } },
7745 { "(bad)", { XX } },
d5d7db8e
L
7746 { "(bad)", { XX } },
7747 { "(bad)", { XX } },
7748 { "(bad)", { XX } },
0bfee649
L
7749 { PREFIX_TABLE (PREFIX_VEX_38A6) },
7750 { PREFIX_TABLE (PREFIX_VEX_38A7) },
c0f3af97 7751 /* a8 */
0bfee649
L
7752 { PREFIX_TABLE (PREFIX_VEX_38A8) },
7753 { PREFIX_TABLE (PREFIX_VEX_38A9) },
7754 { PREFIX_TABLE (PREFIX_VEX_38AA) },
7755 { PREFIX_TABLE (PREFIX_VEX_38AB) },
7756 { PREFIX_TABLE (PREFIX_VEX_38AC) },
7757 { PREFIX_TABLE (PREFIX_VEX_38AD) },
7758 { PREFIX_TABLE (PREFIX_VEX_38AE) },
7759 { PREFIX_TABLE (PREFIX_VEX_38AF) },
c0f3af97 7760 /* b0 */
d5d7db8e
L
7761 { "(bad)", { XX } },
7762 { "(bad)", { XX } },
7763 { "(bad)", { XX } },
7764 { "(bad)", { XX } },
7765 { "(bad)", { XX } },
7766 { "(bad)", { XX } },
0bfee649
L
7767 { PREFIX_TABLE (PREFIX_VEX_38B6) },
7768 { PREFIX_TABLE (PREFIX_VEX_38B7) },
c0f3af97 7769 /* b8 */
0bfee649
L
7770 { PREFIX_TABLE (PREFIX_VEX_38B8) },
7771 { PREFIX_TABLE (PREFIX_VEX_38B9) },
7772 { PREFIX_TABLE (PREFIX_VEX_38BA) },
7773 { PREFIX_TABLE (PREFIX_VEX_38BB) },
7774 { PREFIX_TABLE (PREFIX_VEX_38BC) },
7775 { PREFIX_TABLE (PREFIX_VEX_38BD) },
7776 { PREFIX_TABLE (PREFIX_VEX_38BE) },
7777 { PREFIX_TABLE (PREFIX_VEX_38BF) },
c0f3af97 7778 /* c0 */
d5d7db8e
L
7779 { "(bad)", { XX } },
7780 { "(bad)", { XX } },
7781 { "(bad)", { XX } },
7782 { "(bad)", { XX } },
d5d7db8e
L
7783 { "(bad)", { XX } },
7784 { "(bad)", { XX } },
7785 { "(bad)", { XX } },
7786 { "(bad)", { XX } },
c0f3af97 7787 /* c8 */
d5d7db8e
L
7788 { "(bad)", { XX } },
7789 { "(bad)", { XX } },
7790 { "(bad)", { XX } },
7791 { "(bad)", { XX } },
d5d7db8e 7792 { "(bad)", { XX } },
d5d7db8e
L
7793 { "(bad)", { XX } },
7794 { "(bad)", { XX } },
d5d7db8e 7795 { "(bad)", { XX } },
c0f3af97 7796 /* d0 */
d5d7db8e
L
7797 { "(bad)", { XX } },
7798 { "(bad)", { XX } },
d5d7db8e
L
7799 { "(bad)", { XX } },
7800 { "(bad)", { XX } },
7801 { "(bad)", { XX } },
7802 { "(bad)", { XX } },
d5d7db8e 7803 { "(bad)", { XX } },
d5d7db8e 7804 { "(bad)", { XX } },
c0f3af97 7805 /* d8 */
d5d7db8e 7806 { "(bad)", { XX } },
d5d7db8e
L
7807 { "(bad)", { XX } },
7808 { "(bad)", { XX } },
a5ff0eb2
L
7809 { PREFIX_TABLE (PREFIX_VEX_38DB) },
7810 { PREFIX_TABLE (PREFIX_VEX_38DC) },
7811 { PREFIX_TABLE (PREFIX_VEX_38DD) },
7812 { PREFIX_TABLE (PREFIX_VEX_38DE) },
7813 { PREFIX_TABLE (PREFIX_VEX_38DF) },
c0f3af97 7814 /* e0 */
d5d7db8e 7815 { "(bad)", { XX } },
d5d7db8e
L
7816 { "(bad)", { XX } },
7817 { "(bad)", { XX } },
7818 { "(bad)", { XX } },
7819 { "(bad)", { XX } },
d5d7db8e
L
7820 { "(bad)", { XX } },
7821 { "(bad)", { XX } },
7822 { "(bad)", { XX } },
c0f3af97 7823 /* e8 */
d5d7db8e
L
7824 { "(bad)", { XX } },
7825 { "(bad)", { XX } },
7826 { "(bad)", { XX } },
7827 { "(bad)", { XX } },
7828 { "(bad)", { XX } },
d5d7db8e
L
7829 { "(bad)", { XX } },
7830 { "(bad)", { XX } },
7831 { "(bad)", { XX } },
c0f3af97 7832 /* f0 */
d5d7db8e
L
7833 { "(bad)", { XX } },
7834 { "(bad)", { XX } },
7835 { "(bad)", { XX } },
7836 { "(bad)", { XX } },
7837 { "(bad)", { XX } },
d5d7db8e
L
7838 { "(bad)", { XX } },
7839 { "(bad)", { XX } },
7840 { "(bad)", { XX } },
c0f3af97 7841 /* f8 */
d5d7db8e
L
7842 { "(bad)", { XX } },
7843 { "(bad)", { XX } },
7844 { "(bad)", { XX } },
7845 { "(bad)", { XX } },
7846 { "(bad)", { XX } },
d5d7db8e
L
7847 { "(bad)", { XX } },
7848 { "(bad)", { XX } },
7849 { "(bad)", { XX } },
c0f3af97
L
7850 },
7851 /* VEX_0F3A */
7852 {
7853 /* 00 */
d5d7db8e
L
7854 { "(bad)", { XX } },
7855 { "(bad)", { XX } },
7856 { "(bad)", { XX } },
7857 { "(bad)", { XX } },
c0f3af97
L
7858 { PREFIX_TABLE (PREFIX_VEX_3A04) },
7859 { PREFIX_TABLE (PREFIX_VEX_3A05) },
7860 { PREFIX_TABLE (PREFIX_VEX_3A06) },
d5d7db8e 7861 { "(bad)", { XX } },
c0f3af97
L
7862 /* 08 */
7863 { PREFIX_TABLE (PREFIX_VEX_3A08) },
7864 { PREFIX_TABLE (PREFIX_VEX_3A09) },
7865 { PREFIX_TABLE (PREFIX_VEX_3A0A) },
7866 { PREFIX_TABLE (PREFIX_VEX_3A0B) },
7867 { PREFIX_TABLE (PREFIX_VEX_3A0C) },
7868 { PREFIX_TABLE (PREFIX_VEX_3A0D) },
7869 { PREFIX_TABLE (PREFIX_VEX_3A0E) },
7870 { PREFIX_TABLE (PREFIX_VEX_3A0F) },
7871 /* 10 */
d5d7db8e
L
7872 { "(bad)", { XX } },
7873 { "(bad)", { XX } },
7874 { "(bad)", { XX } },
7875 { "(bad)", { XX } },
c0f3af97
L
7876 { PREFIX_TABLE (PREFIX_VEX_3A14) },
7877 { PREFIX_TABLE (PREFIX_VEX_3A15) },
7878 { PREFIX_TABLE (PREFIX_VEX_3A16) },
7879 { PREFIX_TABLE (PREFIX_VEX_3A17) },
7880 /* 18 */
7881 { PREFIX_TABLE (PREFIX_VEX_3A18) },
7882 { PREFIX_TABLE (PREFIX_VEX_3A19) },
d5d7db8e
L
7883 { "(bad)", { XX } },
7884 { "(bad)", { XX } },
7885 { "(bad)", { XX } },
7886 { "(bad)", { XX } },
d5d7db8e
L
7887 { "(bad)", { XX } },
7888 { "(bad)", { XX } },
c0f3af97
L
7889 /* 20 */
7890 { PREFIX_TABLE (PREFIX_VEX_3A20) },
7891 { PREFIX_TABLE (PREFIX_VEX_3A21) },
7892 { PREFIX_TABLE (PREFIX_VEX_3A22) },
d5d7db8e
L
7893 { "(bad)", { XX } },
7894 { "(bad)", { XX } },
7895 { "(bad)", { XX } },
7896 { "(bad)", { XX } },
7897 { "(bad)", { XX } },
c0f3af97 7898 /* 28 */
d5d7db8e 7899 { "(bad)", { XX } },
d5d7db8e
L
7900 { "(bad)", { XX } },
7901 { "(bad)", { XX } },
7902 { "(bad)", { XX } },
7903 { "(bad)", { XX } },
7904 { "(bad)", { XX } },
7905 { "(bad)", { XX } },
7906 { "(bad)", { XX } },
c0f3af97 7907 /* 30 */
d5d7db8e 7908 { "(bad)", { XX } },
d5d7db8e
L
7909 { "(bad)", { XX } },
7910 { "(bad)", { XX } },
7911 { "(bad)", { XX } },
7912 { "(bad)", { XX } },
7913 { "(bad)", { XX } },
7914 { "(bad)", { XX } },
7915 { "(bad)", { XX } },
c0f3af97 7916 /* 38 */
d5d7db8e 7917 { "(bad)", { XX } },
d5d7db8e
L
7918 { "(bad)", { XX } },
7919 { "(bad)", { XX } },
7920 { "(bad)", { XX } },
7921 { "(bad)", { XX } },
7922 { "(bad)", { XX } },
7923 { "(bad)", { XX } },
7924 { "(bad)", { XX } },
c0f3af97
L
7925 /* 40 */
7926 { PREFIX_TABLE (PREFIX_VEX_3A40) },
7927 { PREFIX_TABLE (PREFIX_VEX_3A41) },
7928 { PREFIX_TABLE (PREFIX_VEX_3A42) },
d5d7db8e 7929 { "(bad)", { XX } },
ce2f5b3c 7930 { PREFIX_TABLE (PREFIX_VEX_3A44) },
d5d7db8e
L
7931 { "(bad)", { XX } },
7932 { "(bad)", { XX } },
7933 { "(bad)", { XX } },
c0f3af97 7934 /* 48 */
0bfee649
L
7935 { "(bad)", { XX } },
7936 { "(bad)", { XX } },
c0f3af97
L
7937 { PREFIX_TABLE (PREFIX_VEX_3A4A) },
7938 { PREFIX_TABLE (PREFIX_VEX_3A4B) },
7939 { PREFIX_TABLE (PREFIX_VEX_3A4C) },
d5d7db8e
L
7940 { "(bad)", { XX } },
7941 { "(bad)", { XX } },
7942 { "(bad)", { XX } },
c0f3af97 7943 /* 50 */
d5d7db8e 7944 { "(bad)", { XX } },
d5d7db8e
L
7945 { "(bad)", { XX } },
7946 { "(bad)", { XX } },
7947 { "(bad)", { XX } },
7948 { "(bad)", { XX } },
7949 { "(bad)", { XX } },
7950 { "(bad)", { XX } },
7951 { "(bad)", { XX } },
c0f3af97 7952 /* 58 */
d5d7db8e 7953 { "(bad)", { XX } },
d5d7db8e
L
7954 { "(bad)", { XX } },
7955 { "(bad)", { XX } },
7956 { "(bad)", { XX } },
922d8de8
DR
7957 { PREFIX_TABLE (PREFIX_VEX_3A5C) },
7958 { PREFIX_TABLE (PREFIX_VEX_3A5D) },
7959 { PREFIX_TABLE (PREFIX_VEX_3A5E) },
7960 { PREFIX_TABLE (PREFIX_VEX_3A5F) },
c0f3af97
L
7961 /* 60 */
7962 { PREFIX_TABLE (PREFIX_VEX_3A60) },
7963 { PREFIX_TABLE (PREFIX_VEX_3A61) },
7964 { PREFIX_TABLE (PREFIX_VEX_3A62) },
7965 { PREFIX_TABLE (PREFIX_VEX_3A63) },
d5d7db8e
L
7966 { "(bad)", { XX } },
7967 { "(bad)", { XX } },
7968 { "(bad)", { XX } },
7969 { "(bad)", { XX } },
c0f3af97 7970 /* 68 */
922d8de8
DR
7971 { PREFIX_TABLE (PREFIX_VEX_3A68) },
7972 { PREFIX_TABLE (PREFIX_VEX_3A69) },
7973 { PREFIX_TABLE (PREFIX_VEX_3A6A) },
7974 { PREFIX_TABLE (PREFIX_VEX_3A6B) },
7975 { PREFIX_TABLE (PREFIX_VEX_3A6C) },
7976 { PREFIX_TABLE (PREFIX_VEX_3A6D) },
7977 { PREFIX_TABLE (PREFIX_VEX_3A6E) },
7978 { PREFIX_TABLE (PREFIX_VEX_3A6F) },
c0f3af97 7979 /* 70 */
d5d7db8e 7980 { "(bad)", { XX } },
d5d7db8e
L
7981 { "(bad)", { XX } },
7982 { "(bad)", { XX } },
7983 { "(bad)", { XX } },
7984 { "(bad)", { XX } },
7985 { "(bad)", { XX } },
7986 { "(bad)", { XX } },
7987 { "(bad)", { XX } },
c0f3af97 7988 /* 78 */
922d8de8
DR
7989 { PREFIX_TABLE (PREFIX_VEX_3A78) },
7990 { PREFIX_TABLE (PREFIX_VEX_3A79) },
7991 { PREFIX_TABLE (PREFIX_VEX_3A7A) },
7992 { PREFIX_TABLE (PREFIX_VEX_3A7B) },
7993 { PREFIX_TABLE (PREFIX_VEX_3A7C) },
7994 { PREFIX_TABLE (PREFIX_VEX_3A7D) },
7995 { PREFIX_TABLE (PREFIX_VEX_3A7E) },
7996 { PREFIX_TABLE (PREFIX_VEX_3A7F) },
c0f3af97 7997 /* 80 */
d5d7db8e 7998 { "(bad)", { XX } },
d5d7db8e
L
7999 { "(bad)", { XX } },
8000 { "(bad)", { XX } },
8001 { "(bad)", { XX } },
8002 { "(bad)", { XX } },
8003 { "(bad)", { XX } },
8004 { "(bad)", { XX } },
8005 { "(bad)", { XX } },
c0f3af97 8006 /* 88 */
d5d7db8e 8007 { "(bad)", { XX } },
d5d7db8e
L
8008 { "(bad)", { XX } },
8009 { "(bad)", { XX } },
8010 { "(bad)", { XX } },
8011 { "(bad)", { XX } },
8012 { "(bad)", { XX } },
8013 { "(bad)", { XX } },
8014 { "(bad)", { XX } },
c0f3af97 8015 /* 90 */
d5d7db8e 8016 { "(bad)", { XX } },
d5d7db8e
L
8017 { "(bad)", { XX } },
8018 { "(bad)", { XX } },
8019 { "(bad)", { XX } },
8020 { "(bad)", { XX } },
8021 { "(bad)", { XX } },
8022 { "(bad)", { XX } },
8023 { "(bad)", { XX } },
c0f3af97 8024 /* 98 */
d5d7db8e 8025 { "(bad)", { XX } },
d5d7db8e
L
8026 { "(bad)", { XX } },
8027 { "(bad)", { XX } },
8028 { "(bad)", { XX } },
8029 { "(bad)", { XX } },
8030 { "(bad)", { XX } },
8031 { "(bad)", { XX } },
8032 { "(bad)", { XX } },
c0f3af97 8033 /* a0 */
d5d7db8e 8034 { "(bad)", { XX } },
85f10a01
MM
8035 { "(bad)", { XX } },
8036 { "(bad)", { XX } },
d5d7db8e
L
8037 { "(bad)", { XX } },
8038 { "(bad)", { XX } },
8039 { "(bad)", { XX } },
8040 { "(bad)", { XX } },
8041 { "(bad)", { XX } },
c0f3af97 8042 /* a8 */
d5d7db8e 8043 { "(bad)", { XX } },
d5d7db8e
L
8044 { "(bad)", { XX } },
8045 { "(bad)", { XX } },
8046 { "(bad)", { XX } },
8047 { "(bad)", { XX } },
8048 { "(bad)", { XX } },
8049 { "(bad)", { XX } },
8050 { "(bad)", { XX } },
c0f3af97
L
8051 /* b0 */
8052 { "(bad)", { XX } },
8053 { "(bad)", { XX } },
8054 { "(bad)", { XX } },
8055 { "(bad)", { XX } },
8056 { "(bad)", { XX } },
8057 { "(bad)", { XX } },
8058 { "(bad)", { XX } },
8059 { "(bad)", { XX } },
8060 /* b8 */
8061 { "(bad)", { XX } },
8062 { "(bad)", { XX } },
8063 { "(bad)", { XX } },
8064 { "(bad)", { XX } },
8065 { "(bad)", { XX } },
8066 { "(bad)", { XX } },
8067 { "(bad)", { XX } },
8068 { "(bad)", { XX } },
8069 /* c0 */
8070 { "(bad)", { XX } },
8071 { "(bad)", { XX } },
8072 { "(bad)", { XX } },
8073 { "(bad)", { XX } },
8074 { "(bad)", { XX } },
8075 { "(bad)", { XX } },
8076 { "(bad)", { XX } },
8077 { "(bad)", { XX } },
8078 /* c8 */
8079 { "(bad)", { XX } },
8080 { "(bad)", { XX } },
d5d7db8e 8081 { "(bad)", { XX } },
d5d7db8e
L
8082 { "(bad)", { XX } },
8083 { "(bad)", { XX } },
8084 { "(bad)", { XX } },
8085 { "(bad)", { XX } },
8086 { "(bad)", { XX } },
c0f3af97
L
8087 /* d0 */
8088 { "(bad)", { XX } },
8089 { "(bad)", { XX } },
8090 { "(bad)", { XX } },
d5d7db8e
L
8091 { "(bad)", { XX } },
8092 { "(bad)", { XX } },
8093 { "(bad)", { XX } },
c0f3af97
L
8094 { "(bad)", { XX } },
8095 { "(bad)", { XX } },
8096 /* d8 */
8097 { "(bad)", { XX } },
d5d7db8e
L
8098 { "(bad)", { XX } },
8099 { "(bad)", { XX } },
8100 { "(bad)", { XX } },
8101 { "(bad)", { XX } },
8102 { "(bad)", { XX } },
8103 { "(bad)", { XX } },
a5ff0eb2 8104 { PREFIX_TABLE (PREFIX_VEX_3ADF) },
c0f3af97 8105 /* e0 */
d5d7db8e 8106 { "(bad)", { XX } },
d5d7db8e
L
8107 { "(bad)", { XX } },
8108 { "(bad)", { XX } },
8109 { "(bad)", { XX } },
8110 { "(bad)", { XX } },
8111 { "(bad)", { XX } },
8112 { "(bad)", { XX } },
8113 { "(bad)", { XX } },
c0f3af97 8114 /* e8 */
d5d7db8e 8115 { "(bad)", { XX } },
d5d7db8e
L
8116 { "(bad)", { XX } },
8117 { "(bad)", { XX } },
8118 { "(bad)", { XX } },
8119 { "(bad)", { XX } },
8120 { "(bad)", { XX } },
8121 { "(bad)", { XX } },
8122 { "(bad)", { XX } },
c0f3af97 8123 /* f0 */
d5d7db8e 8124 { "(bad)", { XX } },
d5d7db8e
L
8125 { "(bad)", { XX } },
8126 { "(bad)", { XX } },
8127 { "(bad)", { XX } },
8128 { "(bad)", { XX } },
8129 { "(bad)", { XX } },
8130 { "(bad)", { XX } },
8131 { "(bad)", { XX } },
c0f3af97 8132 /* f8 */
d5d7db8e 8133 { "(bad)", { XX } },
d5d7db8e
L
8134 { "(bad)", { XX } },
8135 { "(bad)", { XX } },
8136 { "(bad)", { XX } },
8137 { "(bad)", { XX } },
8138 { "(bad)", { XX } },
8139 { "(bad)", { XX } },
8140 { "(bad)", { XX } },
c0f3af97
L
8141 },
8142};
8143
8144static const struct dis386 vex_len_table[][2] = {
8145 /* VEX_LEN_10_P_1 */
8146 {
8147 { "vmovss", { XMVex, Vex128, EXd } },
d5d7db8e 8148 { "(bad)", { XX } },
c0f3af97
L
8149 },
8150
8151 /* VEX_LEN_10_P_3 */
8152 {
8153 { "vmovsd", { XMVex, Vex128, EXq } },
d5d7db8e 8154 { "(bad)", { XX } },
c0f3af97
L
8155 },
8156
8157 /* VEX_LEN_11_P_1 */
8158 {
fa99fab2 8159 { "vmovss", { EXdVexS, Vex128, XM } },
d5d7db8e 8160 { "(bad)", { XX } },
c0f3af97
L
8161 },
8162
8163 /* VEX_LEN_11_P_3 */
8164 {
fa99fab2 8165 { "vmovsd", { EXqVexS, Vex128, XM } },
d5d7db8e 8166 { "(bad)", { XX } },
c0f3af97
L
8167 },
8168
8169 /* VEX_LEN_12_P_0_M_0 */
8170 {
8171 { "vmovlps", { XM, Vex128, EXq } },
d5d7db8e 8172 { "(bad)", { XX } },
c0f3af97
L
8173 },
8174
8175 /* VEX_LEN_12_P_0_M_1 */
8176 {
8177 { "vmovhlps", { XM, Vex128, EXq } },
d5d7db8e 8178 { "(bad)", { XX } },
c0f3af97
L
8179 },
8180
8181 /* VEX_LEN_12_P_2 */
8182 {
8183 { "vmovlpd", { XM, Vex128, EXq } },
d5d7db8e 8184 { "(bad)", { XX } },
c0f3af97
L
8185 },
8186
8187 /* VEX_LEN_13_M_0 */
8188 {
8189 { "vmovlpX", { EXq, XM } },
85f10a01 8190 { "(bad)", { XX } },
c0f3af97
L
8191 },
8192
8193 /* VEX_LEN_16_P_0_M_0 */
8194 {
8195 { "vmovhps", { XM, Vex128, EXq } },
85f10a01 8196 { "(bad)", { XX } },
c0f3af97
L
8197 },
8198
8199 /* VEX_LEN_16_P_0_M_1 */
8200 {
8201 { "vmovlhps", { XM, Vex128, EXq } },
85f10a01 8202 { "(bad)", { XX } },
c0f3af97
L
8203 },
8204
8205 /* VEX_LEN_16_P_2 */
8206 {
8207 { "vmovhpd", { XM, Vex128, EXq } },
85f10a01 8208 { "(bad)", { XX } },
c0f3af97
L
8209 },
8210
8211 /* VEX_LEN_17_M_0 */
8212 {
8213 { "vmovhpX", { EXq, XM } },
85f10a01 8214 { "(bad)", { XX } },
c0f3af97
L
8215 },
8216
8217 /* VEX_LEN_2A_P_1 */
8218 {
8219 { "vcvtsi2ss%LQ", { XM, Vex128, Ev } },
d5d7db8e 8220 { "(bad)", { XX } },
c0f3af97
L
8221 },
8222
8223 /* VEX_LEN_2A_P_3 */
8224 {
8225 { "vcvtsi2sd%LQ", { XM, Vex128, Ev } },
d5d7db8e 8226 { "(bad)", { XX } },
c0f3af97
L
8227 },
8228
c0f3af97
L
8229 /* VEX_LEN_2C_P_1 */
8230 {
8231 { "vcvttss2siY", { Gv, EXd } },
d5d7db8e 8232 { "(bad)", { XX } },
c0f3af97
L
8233 },
8234
8235 /* VEX_LEN_2C_P_3 */
8236 {
8237 { "vcvttsd2siY", { Gv, EXq } },
d5d7db8e 8238 { "(bad)", { XX } },
c0f3af97
L
8239 },
8240
8241 /* VEX_LEN_2D_P_1 */
8242 {
8243 { "vcvtss2siY", { Gv, EXd } },
85f10a01 8244 { "(bad)", { XX } },
c0f3af97
L
8245 },
8246
8247 /* VEX_LEN_2D_P_3 */
8248 {
8249 { "vcvtsd2siY", { Gv, EXq } },
d5d7db8e 8250 { "(bad)", { XX } },
c0f3af97
L
8251 },
8252
8253 /* VEX_LEN_2E_P_0 */
8254 {
8255 { "vucomiss", { XM, EXd } },
d5d7db8e 8256 { "(bad)", { XX } },
c0f3af97
L
8257 },
8258
8259 /* VEX_LEN_2E_P_2 */
8260 {
8261 { "vucomisd", { XM, EXq } },
d5d7db8e 8262 { "(bad)", { XX } },
c0f3af97
L
8263 },
8264
8265 /* VEX_LEN_2F_P_0 */
8266 {
8267 { "vcomiss", { XM, EXd } },
d5d7db8e 8268 { "(bad)", { XX } },
c0f3af97
L
8269 },
8270
8271 /* VEX_LEN_2F_P_2 */
8272 {
8273 { "vcomisd", { XM, EXq } },
d5d7db8e 8274 { "(bad)", { XX } },
c0f3af97
L
8275 },
8276
8277 /* VEX_LEN_51_P_1 */
8278 {
8279 { "vsqrtss", { XM, Vex128, EXd } },
d5d7db8e 8280 { "(bad)", { XX } },
c0f3af97
L
8281 },
8282
8283 /* VEX_LEN_51_P_3 */
8284 {
8285 { "vsqrtsd", { XM, Vex128, EXq } },
d5d7db8e 8286 { "(bad)", { XX } },
c0f3af97
L
8287 },
8288
8289 /* VEX_LEN_52_P_1 */
8290 {
8291 { "vrsqrtss", { XM, Vex128, EXd } },
d5d7db8e 8292 { "(bad)", { XX } },
c0f3af97
L
8293 },
8294
8295 /* VEX_LEN_53_P_1 */
8296 {
8297 { "vrcpss", { XM, Vex128, EXd } },
d5d7db8e 8298 { "(bad)", { XX } },
c0f3af97
L
8299 },
8300
8301 /* VEX_LEN_58_P_1 */
8302 {
8303 { "vaddss", { XM, Vex128, EXd } },
d5d7db8e 8304 { "(bad)", { XX } },
c0f3af97
L
8305 },
8306
8307 /* VEX_LEN_58_P_3 */
8308 {
8309 { "vaddsd", { XM, Vex128, EXq } },
d5d7db8e 8310 { "(bad)", { XX } },
c0f3af97
L
8311 },
8312
8313 /* VEX_LEN_59_P_1 */
8314 {
8315 { "vmulss", { XM, Vex128, EXd } },
d5d7db8e 8316 { "(bad)", { XX } },
c0f3af97
L
8317 },
8318
8319 /* VEX_LEN_59_P_3 */
8320 {
8321 { "vmulsd", { XM, Vex128, EXq } },
d5d7db8e 8322 { "(bad)", { XX } },
c0f3af97
L
8323 },
8324
8325 /* VEX_LEN_5A_P_1 */
8326 {
8327 { "vcvtss2sd", { XM, Vex128, EXd } },
d5d7db8e 8328 { "(bad)", { XX } },
c0f3af97
L
8329 },
8330
8331 /* VEX_LEN_5A_P_3 */
8332 {
8333 { "vcvtsd2ss", { XM, Vex128, EXq } },
d5d7db8e 8334 { "(bad)", { XX } },
c0f3af97
L
8335 },
8336
8337 /* VEX_LEN_5C_P_1 */
8338 {
8339 { "vsubss", { XM, Vex128, EXd } },
d5d7db8e 8340 { "(bad)", { XX } },
c0f3af97
L
8341 },
8342
8343 /* VEX_LEN_5C_P_3 */
8344 {
8345 { "vsubsd", { XM, Vex128, EXq } },
d5d7db8e 8346 { "(bad)", { XX } },
c0f3af97
L
8347 },
8348
8349 /* VEX_LEN_5D_P_1 */
8350 {
8351 { "vminss", { XM, Vex128, EXd } },
d5d7db8e 8352 { "(bad)", { XX } },
c0f3af97
L
8353 },
8354
8355 /* VEX_LEN_5D_P_3 */
8356 {
8357 { "vminsd", { XM, Vex128, EXq } },
d5d7db8e 8358 { "(bad)", { XX } },
c0f3af97
L
8359 },
8360
8361 /* VEX_LEN_5E_P_1 */
8362 {
8363 { "vdivss", { XM, Vex128, EXd } },
85f10a01 8364 { "(bad)", { XX } },
c0f3af97
L
8365 },
8366
8367 /* VEX_LEN_5E_P_3 */
8368 {
8369 { "vdivsd", { XM, Vex128, EXq } },
85f10a01 8370 { "(bad)", { XX } },
c0f3af97
L
8371 },
8372
8373 /* VEX_LEN_5F_P_1 */
8374 {
8375 { "vmaxss", { XM, Vex128, EXd } },
85f10a01 8376 { "(bad)", { XX } },
c0f3af97
L
8377 },
8378
8379 /* VEX_LEN_5F_P_3 */
8380 {
8381 { "vmaxsd", { XM, Vex128, EXq } },
85f10a01 8382 { "(bad)", { XX } },
c0f3af97
L
8383 },
8384
8385 /* VEX_LEN_60_P_2 */
8386 {
8387 { "vpunpcklbw", { XM, Vex128, EXx } },
d5d7db8e 8388 { "(bad)", { XX } },
c0f3af97
L
8389 },
8390
8391 /* VEX_LEN_61_P_2 */
8392 {
8393 { "vpunpcklwd", { XM, Vex128, EXx } },
d5d7db8e 8394 { "(bad)", { XX } },
c0f3af97
L
8395 },
8396
8397 /* VEX_LEN_62_P_2 */
8398 {
8399 { "vpunpckldq", { XM, Vex128, EXx } },
d5d7db8e 8400 { "(bad)", { XX } },
c0f3af97
L
8401 },
8402
8403 /* VEX_LEN_63_P_2 */
8404 {
8405 { "vpacksswb", { XM, Vex128, EXx } },
d5d7db8e 8406 { "(bad)", { XX } },
c0f3af97
L
8407 },
8408
8409 /* VEX_LEN_64_P_2 */
8410 {
8411 { "vpcmpgtb", { XM, Vex128, EXx } },
d5d7db8e 8412 { "(bad)", { XX } },
c0f3af97
L
8413 },
8414
8415 /* VEX_LEN_65_P_2 */
8416 {
8417 { "vpcmpgtw", { XM, Vex128, EXx } },
d5d7db8e 8418 { "(bad)", { XX } },
c0f3af97
L
8419 },
8420
8421 /* VEX_LEN_66_P_2 */
8422 {
8423 { "vpcmpgtd", { XM, Vex128, EXx } },
d5d7db8e 8424 { "(bad)", { XX } },
c0f3af97
L
8425 },
8426
8427 /* VEX_LEN_67_P_2 */
8428 {
8429 { "vpackuswb", { XM, Vex128, EXx } },
d5d7db8e 8430 { "(bad)", { XX } },
c0f3af97
L
8431 },
8432
8433 /* VEX_LEN_68_P_2 */
8434 {
8435 { "vpunpckhbw", { XM, Vex128, EXx } },
d5d7db8e 8436 { "(bad)", { XX } },
c0f3af97
L
8437 },
8438
8439 /* VEX_LEN_69_P_2 */
8440 {
8441 { "vpunpckhwd", { XM, Vex128, EXx } },
d5d7db8e 8442 { "(bad)", { XX } },
c0f3af97
L
8443 },
8444
8445 /* VEX_LEN_6A_P_2 */
8446 {
8447 { "vpunpckhdq", { XM, Vex128, EXx } },
d5d7db8e 8448 { "(bad)", { XX } },
c0f3af97
L
8449 },
8450
8451 /* VEX_LEN_6B_P_2 */
8452 {
8453 { "vpackssdw", { XM, Vex128, EXx } },
d5d7db8e 8454 { "(bad)", { XX } },
c0f3af97
L
8455 },
8456
8457 /* VEX_LEN_6C_P_2 */
8458 {
8459 { "vpunpcklqdq", { XM, Vex128, EXx } },
d5d7db8e 8460 { "(bad)", { XX } },
c0f3af97
L
8461 },
8462
8463 /* VEX_LEN_6D_P_2 */
8464 {
8465 { "vpunpckhqdq", { XM, Vex128, EXx } },
d5d7db8e 8466 { "(bad)", { XX } },
c0f3af97
L
8467 },
8468
8469 /* VEX_LEN_6E_P_2 */
8470 {
8471 { "vmovK", { XM, Edq } },
d5d7db8e 8472 { "(bad)", { XX } },
c0f3af97
L
8473 },
8474
8475 /* VEX_LEN_70_P_1 */
8476 {
8477 { "vpshufhw", { XM, EXx, Ib } },
d5d7db8e 8478 { "(bad)", { XX } },
c0f3af97
L
8479 },
8480
8481 /* VEX_LEN_70_P_2 */
8482 {
8483 { "vpshufd", { XM, EXx, Ib } },
d5d7db8e 8484 { "(bad)", { XX } },
c0f3af97
L
8485 },
8486
8487 /* VEX_LEN_70_P_3 */
8488 {
8489 { "vpshuflw", { XM, EXx, Ib } },
d5d7db8e 8490 { "(bad)", { XX } },
c0f3af97
L
8491 },
8492
8493 /* VEX_LEN_71_R_2_P_2 */
8494 {
8495 { "vpsrlw", { Vex128, XS, Ib } },
d5d7db8e 8496 { "(bad)", { XX } },
c0f3af97
L
8497 },
8498
8499 /* VEX_LEN_71_R_4_P_2 */
8500 {
8501 { "vpsraw", { Vex128, XS, Ib } },
d5d7db8e 8502 { "(bad)", { XX } },
c0f3af97
L
8503 },
8504
8505 /* VEX_LEN_71_R_6_P_2 */
8506 {
8507 { "vpsllw", { Vex128, XS, Ib } },
d5d7db8e 8508 { "(bad)", { XX } },
c0f3af97
L
8509 },
8510
8511 /* VEX_LEN_72_R_2_P_2 */
8512 {
8513 { "vpsrld", { Vex128, XS, Ib } },
d5d7db8e 8514 { "(bad)", { XX } },
c0f3af97
L
8515 },
8516
8517 /* VEX_LEN_72_R_4_P_2 */
8518 {
8519 { "vpsrad", { Vex128, XS, Ib } },
d5d7db8e 8520 { "(bad)", { XX } },
c0f3af97
L
8521 },
8522
8523 /* VEX_LEN_72_R_6_P_2 */
8524 {
8525 { "vpslld", { Vex128, XS, Ib } },
d5d7db8e 8526 { "(bad)", { XX } },
c0f3af97
L
8527 },
8528
8529 /* VEX_LEN_73_R_2_P_2 */
8530 {
8531 { "vpsrlq", { Vex128, XS, Ib } },
d5d7db8e 8532 { "(bad)", { XX } },
c0f3af97
L
8533 },
8534
8535 /* VEX_LEN_73_R_3_P_2 */
8536 {
8537 { "vpsrldq", { Vex128, XS, Ib } },
d5d7db8e 8538 { "(bad)", { XX } },
c0f3af97
L
8539 },
8540
8541 /* VEX_LEN_73_R_6_P_2 */
8542 {
8543 { "vpsllq", { Vex128, XS, Ib } },
d5d7db8e 8544 { "(bad)", { XX } },
c0f3af97
L
8545 },
8546
8547 /* VEX_LEN_73_R_7_P_2 */
8548 {
8549 { "vpslldq", { Vex128, XS, Ib } },
d5d7db8e 8550 { "(bad)", { XX } },
c0f3af97
L
8551 },
8552
8553 /* VEX_LEN_74_P_2 */
8554 {
8555 { "vpcmpeqb", { XM, Vex128, EXx } },
d5d7db8e 8556 { "(bad)", { XX } },
c0f3af97
L
8557 },
8558
8559 /* VEX_LEN_75_P_2 */
8560 {
8561 { "vpcmpeqw", { XM, Vex128, EXx } },
d5d7db8e 8562 { "(bad)", { XX } },
c0f3af97
L
8563 },
8564
8565 /* VEX_LEN_76_P_2 */
8566 {
8567 { "vpcmpeqd", { XM, Vex128, EXx } },
d5d7db8e 8568 { "(bad)", { XX } },
c0f3af97
L
8569 },
8570
8571 /* VEX_LEN_7E_P_1 */
8572 {
8573 { "vmovq", { XM, EXq } },
d5d7db8e 8574 { "(bad)", { XX } },
c0f3af97
L
8575 },
8576
8577 /* VEX_LEN_7E_P_2 */
8578 {
8579 { "vmovK", { Edq, XM } },
d5d7db8e 8580 { "(bad)", { XX } },
c0f3af97
L
8581 },
8582
9daa0d29 8583 /* VEX_LEN_AE_R_2_M_0 */
c0f3af97
L
8584 {
8585 { "vldmxcsr", { Md } },
d5d7db8e 8586 { "(bad)", { XX } },
c0f3af97
L
8587 },
8588
9daa0d29 8589 /* VEX_LEN_AE_R_3_M_0 */
c0f3af97
L
8590 {
8591 { "vstmxcsr", { Md } },
d5d7db8e 8592 { "(bad)", { XX } },
c0f3af97
L
8593 },
8594
8595 /* VEX_LEN_C2_P_1 */
8596 {
8597 { "vcmpss", { XM, Vex128, EXd, VCMP } },
d5d7db8e 8598 { "(bad)", { XX } },
c0f3af97
L
8599 },
8600
8601 /* VEX_LEN_C2_P_3 */
8602 {
8603 { "vcmpsd", { XM, Vex128, EXq, VCMP } },
d5d7db8e 8604 { "(bad)", { XX } },
c0f3af97
L
8605 },
8606
8607 /* VEX_LEN_C4_P_2 */
8608 {
8609 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
d5d7db8e 8610 { "(bad)", { XX } },
c0f3af97
L
8611 },
8612
8613 /* VEX_LEN_C5_P_2 */
8614 {
8615 { "vpextrw", { Gdq, XS, Ib } },
d5d7db8e 8616 { "(bad)", { XX } },
c0f3af97
L
8617 },
8618
8619 /* VEX_LEN_D1_P_2 */
8620 {
8621 { "vpsrlw", { XM, Vex128, EXx } },
d5d7db8e 8622 { "(bad)", { XX } },
c0f3af97
L
8623 },
8624
8625 /* VEX_LEN_D2_P_2 */
8626 {
8627 { "vpsrld", { XM, Vex128, EXx } },
d5d7db8e 8628 { "(bad)", { XX } },
c0f3af97
L
8629 },
8630
8631 /* VEX_LEN_D3_P_2 */
8632 {
8633 { "vpsrlq", { XM, Vex128, EXx } },
d5d7db8e 8634 { "(bad)", { XX } },
c0f3af97
L
8635 },
8636
8637 /* VEX_LEN_D4_P_2 */
8638 {
8639 { "vpaddq", { XM, Vex128, EXx } },
d5d7db8e 8640 { "(bad)", { XX } },
c0f3af97
L
8641 },
8642
8643 /* VEX_LEN_D5_P_2 */
8644 {
8645 { "vpmullw", { XM, Vex128, EXx } },
d5d7db8e 8646 { "(bad)", { XX } },
c0f3af97
L
8647 },
8648
8649 /* VEX_LEN_D6_P_2 */
8650 {
b6169b20 8651 { "vmovq", { EXqS, XM } },
d5d7db8e 8652 { "(bad)", { XX } },
c0f3af97
L
8653 },
8654
8655 /* VEX_LEN_D7_P_2_M_1 */
8656 {
8657 { "vpmovmskb", { Gdq, XS } },
d5d7db8e 8658 { "(bad)", { XX } },
c0f3af97
L
8659 },
8660
8661 /* VEX_LEN_D8_P_2 */
8662 {
8663 { "vpsubusb", { XM, Vex128, EXx } },
d5d7db8e 8664 { "(bad)", { XX } },
c0f3af97
L
8665 },
8666
8667 /* VEX_LEN_D9_P_2 */
8668 {
8669 { "vpsubusw", { XM, Vex128, EXx } },
d5d7db8e 8670 { "(bad)", { XX } },
c0f3af97
L
8671 },
8672
8673 /* VEX_LEN_DA_P_2 */
8674 {
8675 { "vpminub", { XM, Vex128, EXx } },
d5d7db8e 8676 { "(bad)", { XX } },
c0f3af97
L
8677 },
8678
8679 /* VEX_LEN_DB_P_2 */
8680 {
8681 { "vpand", { XM, Vex128, EXx } },
d5d7db8e 8682 { "(bad)", { XX } },
c0f3af97
L
8683 },
8684
8685 /* VEX_LEN_DC_P_2 */
8686 {
8687 { "vpaddusb", { XM, Vex128, EXx } },
d5d7db8e 8688 { "(bad)", { XX } },
c0f3af97
L
8689 },
8690
8691 /* VEX_LEN_DD_P_2 */
8692 {
8693 { "vpaddusw", { XM, Vex128, EXx } },
d5d7db8e 8694 { "(bad)", { XX } },
c0f3af97
L
8695 },
8696
8697 /* VEX_LEN_DE_P_2 */
8698 {
8699 { "vpmaxub", { XM, Vex128, EXx } },
d5d7db8e 8700 { "(bad)", { XX } },
c0f3af97
L
8701 },
8702
8703 /* VEX_LEN_DF_P_2 */
8704 {
8705 { "vpandn", { XM, Vex128, EXx } },
d5d7db8e 8706 { "(bad)", { XX } },
c0f3af97
L
8707 },
8708
8709 /* VEX_LEN_E0_P_2 */
8710 {
8711 { "vpavgb", { XM, Vex128, EXx } },
d5d7db8e 8712 { "(bad)", { XX } },
c0f3af97
L
8713 },
8714
8715 /* VEX_LEN_E1_P_2 */
8716 {
8717 { "vpsraw", { XM, Vex128, EXx } },
d5d7db8e 8718 { "(bad)", { XX } },
c0f3af97
L
8719 },
8720
8721 /* VEX_LEN_E2_P_2 */
8722 {
8723 { "vpsrad", { XM, Vex128, EXx } },
d5d7db8e 8724 { "(bad)", { XX } },
c0f3af97
L
8725 },
8726
8727 /* VEX_LEN_E3_P_2 */
8728 {
8729 { "vpavgw", { XM, Vex128, EXx } },
d5d7db8e 8730 { "(bad)", { XX } },
c0f3af97
L
8731 },
8732
8733 /* VEX_LEN_E4_P_2 */
8734 {
8735 { "vpmulhuw", { XM, Vex128, EXx } },
d5d7db8e 8736 { "(bad)", { XX } },
c0f3af97
L
8737 },
8738
8739 /* VEX_LEN_E5_P_2 */
8740 {
8741 { "vpmulhw", { XM, Vex128, EXx } },
d5d7db8e 8742 { "(bad)", { XX } },
c0f3af97
L
8743 },
8744
c0f3af97
L
8745 /* VEX_LEN_E8_P_2 */
8746 {
8747 { "vpsubsb", { XM, Vex128, EXx } },
d5d7db8e 8748 { "(bad)", { XX } },
c0f3af97
L
8749 },
8750
8751 /* VEX_LEN_E9_P_2 */
8752 {
8753 { "vpsubsw", { XM, Vex128, EXx } },
d5d7db8e 8754 { "(bad)", { XX } },
c0f3af97
L
8755 },
8756
8757 /* VEX_LEN_EA_P_2 */
8758 {
8759 { "vpminsw", { XM, Vex128, EXx } },
d5d7db8e 8760 { "(bad)", { XX } },
c0f3af97
L
8761 },
8762
8763 /* VEX_LEN_EB_P_2 */
8764 {
8765 { "vpor", { XM, Vex128, EXx } },
d5d7db8e 8766 { "(bad)", { XX } },
c0f3af97
L
8767 },
8768
8769 /* VEX_LEN_EC_P_2 */
8770 {
8771 { "vpaddsb", { XM, Vex128, EXx } },
d5d7db8e 8772 { "(bad)", { XX } },
c0f3af97
L
8773 },
8774
8775 /* VEX_LEN_ED_P_2 */
8776 {
8777 { "vpaddsw", { XM, Vex128, EXx } },
d5d7db8e 8778 { "(bad)", { XX } },
c0f3af97
L
8779 },
8780
8781 /* VEX_LEN_EE_P_2 */
8782 {
8783 { "vpmaxsw", { XM, Vex128, EXx } },
d5d7db8e 8784 { "(bad)", { XX } },
c0f3af97
L
8785 },
8786
8787 /* VEX_LEN_EF_P_2 */
8788 {
8789 { "vpxor", { XM, Vex128, EXx } },
d5d7db8e 8790 { "(bad)", { XX } },
c0f3af97
L
8791 },
8792
8793 /* VEX_LEN_F1_P_2 */
8794 {
8795 { "vpsllw", { XM, Vex128, EXx } },
d5d7db8e 8796 { "(bad)", { XX } },
c0f3af97
L
8797 },
8798
8799 /* VEX_LEN_F2_P_2 */
8800 {
8801 { "vpslld", { XM, Vex128, EXx } },
d5d7db8e 8802 { "(bad)", { XX } },
c0f3af97
L
8803 },
8804
8805 /* VEX_LEN_F3_P_2 */
8806 {
8807 { "vpsllq", { XM, Vex128, EXx } },
d5d7db8e 8808 { "(bad)", { XX } },
c0f3af97
L
8809 },
8810
8811 /* VEX_LEN_F4_P_2 */
8812 {
8813 { "vpmuludq", { XM, Vex128, EXx } },
d5d7db8e 8814 { "(bad)", { XX } },
c0f3af97
L
8815 },
8816
8817 /* VEX_LEN_F5_P_2 */
8818 {
8819 { "vpmaddwd", { XM, Vex128, EXx } },
d5d7db8e 8820 { "(bad)", { XX } },
c0f3af97
L
8821 },
8822
8823 /* VEX_LEN_F6_P_2 */
8824 {
8825 { "vpsadbw", { XM, Vex128, EXx } },
d5d7db8e 8826 { "(bad)", { XX } },
c0f3af97
L
8827 },
8828
8829 /* VEX_LEN_F7_P_2 */
8830 {
8831 { "vmaskmovdqu", { XM, XS } },
d5d7db8e 8832 { "(bad)", { XX } },
c0f3af97
L
8833 },
8834
8835 /* VEX_LEN_F8_P_2 */
8836 {
8837 { "vpsubb", { XM, Vex128, EXx } },
d5d7db8e 8838 { "(bad)", { XX } },
c0f3af97
L
8839 },
8840
8841 /* VEX_LEN_F9_P_2 */
8842 {
8843 { "vpsubw", { XM, Vex128, EXx } },
d5d7db8e 8844 { "(bad)", { XX } },
c0f3af97
L
8845 },
8846
8847 /* VEX_LEN_FA_P_2 */
8848 {
8849 { "vpsubd", { XM, Vex128, EXx } },
d5d7db8e 8850 { "(bad)", { XX } },
c0f3af97
L
8851 },
8852
8853 /* VEX_LEN_FB_P_2 */
8854 {
8855 { "vpsubq", { XM, Vex128, EXx } },
d5d7db8e 8856 { "(bad)", { XX } },
c0f3af97
L
8857 },
8858
8859 /* VEX_LEN_FC_P_2 */
8860 {
8861 { "vpaddb", { XM, Vex128, EXx } },
d5d7db8e 8862 { "(bad)", { XX } },
c0f3af97
L
8863 },
8864
8865 /* VEX_LEN_FD_P_2 */
8866 {
8867 { "vpaddw", { XM, Vex128, EXx } },
d5d7db8e 8868 { "(bad)", { XX } },
c0f3af97
L
8869 },
8870
8871 /* VEX_LEN_FE_P_2 */
8872 {
8873 { "vpaddd", { XM, Vex128, EXx } },
d5d7db8e 8874 { "(bad)", { XX } },
c0f3af97
L
8875 },
8876
8877 /* VEX_LEN_3800_P_2 */
8878 {
8879 { "vpshufb", { XM, Vex128, EXx } },
d5d7db8e 8880 { "(bad)", { XX } },
c0f3af97
L
8881 },
8882
8883 /* VEX_LEN_3801_P_2 */
8884 {
8885 { "vphaddw", { XM, Vex128, EXx } },
d5d7db8e 8886 { "(bad)", { XX } },
c0f3af97
L
8887 },
8888
8889 /* VEX_LEN_3802_P_2 */
8890 {
8891 { "vphaddd", { XM, Vex128, EXx } },
d5d7db8e 8892 { "(bad)", { XX } },
c0f3af97
L
8893 },
8894
8895 /* VEX_LEN_3803_P_2 */
8896 {
8897 { "vphaddsw", { XM, Vex128, EXx } },
d5d7db8e 8898 { "(bad)", { XX } },
c0f3af97
L
8899 },
8900
8901 /* VEX_LEN_3804_P_2 */
8902 {
8903 { "vpmaddubsw", { XM, Vex128, EXx } },
d5d7db8e 8904 { "(bad)", { XX } },
c0f3af97
L
8905 },
8906
8907 /* VEX_LEN_3805_P_2 */
8908 {
8909 { "vphsubw", { XM, Vex128, EXx } },
d5d7db8e 8910 { "(bad)", { XX } },
c0f3af97
L
8911 },
8912
8913 /* VEX_LEN_3806_P_2 */
8914 {
8915 { "vphsubd", { XM, Vex128, EXx } },
d5d7db8e 8916 { "(bad)", { XX } },
c0f3af97
L
8917 },
8918
8919 /* VEX_LEN_3807_P_2 */
8920 {
8921 { "vphsubsw", { XM, Vex128, EXx } },
d5d7db8e 8922 { "(bad)", { XX } },
c0f3af97
L
8923 },
8924
8925 /* VEX_LEN_3808_P_2 */
8926 {
8927 { "vpsignb", { XM, Vex128, EXx } },
d5d7db8e 8928 { "(bad)", { XX } },
c0f3af97
L
8929 },
8930
8931 /* VEX_LEN_3809_P_2 */
8932 {
8933 { "vpsignw", { XM, Vex128, EXx } },
d5d7db8e 8934 { "(bad)", { XX } },
c0f3af97
L
8935 },
8936
8937 /* VEX_LEN_380A_P_2 */
8938 {
8939 { "vpsignd", { XM, Vex128, EXx } },
d5d7db8e 8940 { "(bad)", { XX } },
c0f3af97
L
8941 },
8942
8943 /* VEX_LEN_380B_P_2 */
8944 {
8945 { "vpmulhrsw", { XM, Vex128, EXx } },
d5d7db8e 8946 { "(bad)", { XX } },
c0f3af97
L
8947 },
8948
8949 /* VEX_LEN_3819_P_2_M_0 */
8950 {
d5d7db8e 8951 { "(bad)", { XX } },
c0f3af97
L
8952 { "vbroadcastsd", { XM, Mq } },
8953 },
8954
8955 /* VEX_LEN_381A_P_2_M_0 */
8956 {
d5d7db8e 8957 { "(bad)", { XX } },
c0f3af97
L
8958 { "vbroadcastf128", { XM, Mxmm } },
8959 },
8960
8961 /* VEX_LEN_381C_P_2 */
8962 {
8963 { "vpabsb", { XM, EXx } },
d5d7db8e 8964 { "(bad)", { XX } },
c0f3af97
L
8965 },
8966
8967 /* VEX_LEN_381D_P_2 */
8968 {
8969 { "vpabsw", { XM, EXx } },
d5d7db8e 8970 { "(bad)", { XX } },
c0f3af97
L
8971 },
8972
8973 /* VEX_LEN_381E_P_2 */
8974 {
8975 { "vpabsd", { XM, EXx } },
d5d7db8e 8976 { "(bad)", { XX } },
c0f3af97
L
8977 },
8978
8979 /* VEX_LEN_3820_P_2 */
8980 {
8981 { "vpmovsxbw", { XM, EXq } },
d5d7db8e 8982 { "(bad)", { XX } },
c0f3af97
L
8983 },
8984
8985 /* VEX_LEN_3821_P_2 */
8986 {
8987 { "vpmovsxbd", { XM, EXd } },
d5d7db8e 8988 { "(bad)", { XX } },
c0f3af97
L
8989 },
8990
8991 /* VEX_LEN_3822_P_2 */
8992 {
8993 { "vpmovsxbq", { XM, EXw } },
d5d7db8e 8994 { "(bad)", { XX } },
c0f3af97
L
8995 },
8996
8997 /* VEX_LEN_3823_P_2 */
8998 {
8999 { "vpmovsxwd", { XM, EXq } },
d5d7db8e 9000 { "(bad)", { XX } },
c0f3af97
L
9001 },
9002
9003 /* VEX_LEN_3824_P_2 */
9004 {
9005 { "vpmovsxwq", { XM, EXd } },
d5d7db8e 9006 { "(bad)", { XX } },
c0f3af97
L
9007 },
9008
9009 /* VEX_LEN_3825_P_2 */
9010 {
9011 { "vpmovsxdq", { XM, EXq } },
d5d7db8e 9012 { "(bad)", { XX } },
c0f3af97
L
9013 },
9014
9015 /* VEX_LEN_3828_P_2 */
9016 {
9017 { "vpmuldq", { XM, Vex128, EXx } },
d5d7db8e 9018 { "(bad)", { XX } },
c0f3af97
L
9019 },
9020
9021 /* VEX_LEN_3829_P_2 */
9022 {
9023 { "vpcmpeqq", { XM, Vex128, EXx } },
d5d7db8e 9024 { "(bad)", { XX } },
c0f3af97
L
9025 },
9026
9027 /* VEX_LEN_382A_P_2_M_0 */
9028 {
9029 { "vmovntdqa", { XM, Mx } },
d5d7db8e 9030 { "(bad)", { XX } },
c0f3af97
L
9031 },
9032
9033 /* VEX_LEN_382B_P_2 */
9034 {
9035 { "vpackusdw", { XM, Vex128, EXx } },
d5d7db8e 9036 { "(bad)", { XX } },
c0f3af97
L
9037 },
9038
9039 /* VEX_LEN_3830_P_2 */
9040 {
9041 { "vpmovzxbw", { XM, EXq } },
d5d7db8e 9042 { "(bad)", { XX } },
c0f3af97
L
9043 },
9044
9045 /* VEX_LEN_3831_P_2 */
9046 {
9047 { "vpmovzxbd", { XM, EXd } },
d5d7db8e 9048 { "(bad)", { XX } },
c0f3af97
L
9049 },
9050
9051 /* VEX_LEN_3832_P_2 */
9052 {
9053 { "vpmovzxbq", { XM, EXw } },
d5d7db8e 9054 { "(bad)", { XX } },
c0f3af97
L
9055 },
9056
9057 /* VEX_LEN_3833_P_2 */
9058 {
9059 { "vpmovzxwd", { XM, EXq } },
d5d7db8e 9060 { "(bad)", { XX } },
c0f3af97
L
9061 },
9062
9063 /* VEX_LEN_3834_P_2 */
9064 {
9065 { "vpmovzxwq", { XM, EXd } },
d5d7db8e 9066 { "(bad)", { XX } },
c0f3af97
L
9067 },
9068
9069 /* VEX_LEN_3835_P_2 */
9070 {
9071 { "vpmovzxdq", { XM, EXq } },
d5d7db8e 9072 { "(bad)", { XX } },
c0f3af97
L
9073 },
9074
9075 /* VEX_LEN_3837_P_2 */
9076 {
9077 { "vpcmpgtq", { XM, Vex128, EXx } },
d5d7db8e 9078 { "(bad)", { XX } },
c0f3af97
L
9079 },
9080
9081 /* VEX_LEN_3838_P_2 */
9082 {
9083 { "vpminsb", { XM, Vex128, EXx } },
d5d7db8e 9084 { "(bad)", { XX } },
c0f3af97
L
9085 },
9086
9087 /* VEX_LEN_3839_P_2 */
9088 {
9089 { "vpminsd", { XM, Vex128, EXx } },
d5d7db8e 9090 { "(bad)", { XX } },
c0f3af97
L
9091 },
9092
9093 /* VEX_LEN_383A_P_2 */
9094 {
9095 { "vpminuw", { XM, Vex128, EXx } },
d5d7db8e 9096 { "(bad)", { XX } },
c0f3af97
L
9097 },
9098
9099 /* VEX_LEN_383B_P_2 */
9100 {
9101 { "vpminud", { XM, Vex128, EXx } },
d5d7db8e 9102 { "(bad)", { XX } },
c0f3af97
L
9103 },
9104
9105 /* VEX_LEN_383C_P_2 */
9106 {
9107 { "vpmaxsb", { XM, Vex128, EXx } },
d5d7db8e 9108 { "(bad)", { XX } },
c0f3af97
L
9109 },
9110
9111 /* VEX_LEN_383D_P_2 */
9112 {
9113 { "vpmaxsd", { XM, Vex128, EXx } },
d5d7db8e 9114 { "(bad)", { XX } },
c0f3af97
L
9115 },
9116
9117 /* VEX_LEN_383E_P_2 */
9118 {
9119 { "vpmaxuw", { XM, Vex128, EXx } },
d5d7db8e 9120 { "(bad)", { XX } },
c0f3af97
L
9121 },
9122
9123 /* VEX_LEN_383F_P_2 */
9124 {
9125 { "vpmaxud", { XM, Vex128, EXx } },
d5d7db8e 9126 { "(bad)", { XX } },
c0f3af97
L
9127 },
9128
9129 /* VEX_LEN_3840_P_2 */
9130 {
9131 { "vpmulld", { XM, Vex128, EXx } },
d5d7db8e 9132 { "(bad)", { XX } },
c0f3af97
L
9133 },
9134
9135 /* VEX_LEN_3841_P_2 */
9136 {
9137 { "vphminposuw", { XM, EXx } },
d5d7db8e 9138 { "(bad)", { XX } },
c0f3af97
L
9139 },
9140
a5ff0eb2
L
9141 /* VEX_LEN_38DB_P_2 */
9142 {
9143 { "vaesimc", { XM, EXx } },
9144 { "(bad)", { XX } },
9145 },
9146
9147 /* VEX_LEN_38DC_P_2 */
9148 {
9149 { "vaesenc", { XM, Vex128, EXx } },
9150 { "(bad)", { XX } },
9151 },
9152
9153 /* VEX_LEN_38DD_P_2 */
9154 {
9155 { "vaesenclast", { XM, Vex128, EXx } },
9156 { "(bad)", { XX } },
9157 },
9158
9159 /* VEX_LEN_38DE_P_2 */
9160 {
9161 { "vaesdec", { XM, Vex128, EXx } },
9162 { "(bad)", { XX } },
9163 },
9164
9165 /* VEX_LEN_38DF_P_2 */
9166 {
9167 { "vaesdeclast", { XM, Vex128, EXx } },
9168 { "(bad)", { XX } },
9169 },
9170
c0f3af97
L
9171 /* VEX_LEN_3A06_P_2 */
9172 {
d5d7db8e 9173 { "(bad)", { XX } },
c0f3af97
L
9174 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9175 },
9176
9177 /* VEX_LEN_3A0A_P_2 */
9178 {
9179 { "vroundss", { XM, Vex128, EXd, Ib } },
d5d7db8e 9180 { "(bad)", { XX } },
c0f3af97
L
9181 },
9182
9183 /* VEX_LEN_3A0B_P_2 */
9184 {
9185 { "vroundsd", { XM, Vex128, EXq, Ib } },
d5d7db8e 9186 { "(bad)", { XX } },
c0f3af97
L
9187 },
9188
9189 /* VEX_LEN_3A0E_P_2 */
9190 {
9191 { "vpblendw", { XM, Vex128, EXx, Ib } },
d5d7db8e 9192 { "(bad)", { XX } },
c0f3af97
L
9193 },
9194
9195 /* VEX_LEN_3A0F_P_2 */
9196 {
9197 { "vpalignr", { XM, Vex128, EXx, Ib } },
d5d7db8e 9198 { "(bad)", { XX } },
c0f3af97
L
9199 },
9200
9201 /* VEX_LEN_3A14_P_2 */
9202 {
9203 { "vpextrb", { Edqb, XM, Ib } },
d5d7db8e 9204 { "(bad)", { XX } },
c0f3af97
L
9205 },
9206
9207 /* VEX_LEN_3A15_P_2 */
9208 {
9209 { "vpextrw", { Edqw, XM, Ib } },
d5d7db8e 9210 { "(bad)", { XX } },
c0f3af97
L
9211 },
9212
9213 /* VEX_LEN_3A16_P_2 */
9214 {
9215 { "vpextrK", { Edq, XM, Ib } },
d5d7db8e 9216 { "(bad)", { XX } },
c0f3af97
L
9217 },
9218
9219 /* VEX_LEN_3A17_P_2 */
9220 {
9221 { "vextractps", { Edqd, XM, Ib } },
d5d7db8e 9222 { "(bad)", { XX } },
c0f3af97
L
9223 },
9224
9225 /* VEX_LEN_3A18_P_2 */
9226 {
d5d7db8e 9227 { "(bad)", { XX } },
c0f3af97
L
9228 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9229 },
9230
9231 /* VEX_LEN_3A19_P_2 */
9232 {
d5d7db8e 9233 { "(bad)", { XX } },
c0f3af97
L
9234 { "vextractf128", { EXxmm, XM, Ib } },
9235 },
9236
9237 /* VEX_LEN_3A20_P_2 */
9238 {
9239 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
d5d7db8e 9240 { "(bad)", { XX } },
c0f3af97
L
9241 },
9242
9243 /* VEX_LEN_3A21_P_2 */
9244 {
9245 { "vinsertps", { XM, Vex128, EXd, Ib } },
d5d7db8e 9246 { "(bad)", { XX } },
c0f3af97
L
9247 },
9248
9249 /* VEX_LEN_3A22_P_2 */
9250 {
9251 { "vpinsrK", { XM, Vex128, Edq, Ib } },
d5d7db8e 9252 { "(bad)", { XX } },
c0f3af97
L
9253 },
9254
9255 /* VEX_LEN_3A41_P_2 */
9256 {
9257 { "vdppd", { XM, Vex128, EXx, Ib } },
d5d7db8e 9258 { "(bad)", { XX } },
c0f3af97
L
9259 },
9260
9261 /* VEX_LEN_3A42_P_2 */
9262 {
9263 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
d5d7db8e 9264 { "(bad)", { XX } },
c0f3af97
L
9265 },
9266
ce2f5b3c
L
9267 /* VEX_LEN_3A44_P_2 */
9268 {
9269 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9270 { "(bad)", { XX } },
9271 },
9272
c0f3af97
L
9273 /* VEX_LEN_3A4C_P_2 */
9274 {
9275 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
d5d7db8e 9276 { "(bad)", { XX } },
c0f3af97
L
9277 },
9278
9279 /* VEX_LEN_3A60_P_2 */
9280 {
9281 { "vpcmpestrm", { XM, EXx, Ib } },
d5d7db8e 9282 { "(bad)", { XX } },
c0f3af97
L
9283 },
9284
9285 /* VEX_LEN_3A61_P_2 */
9286 {
9287 { "vpcmpestri", { XM, EXx, Ib } },
d5d7db8e 9288 { "(bad)", { XX } },
c0f3af97
L
9289 },
9290
9291 /* VEX_LEN_3A62_P_2 */
9292 {
9293 { "vpcmpistrm", { XM, EXx, Ib } },
d5d7db8e 9294 { "(bad)", { XX } },
c0f3af97
L
9295 },
9296
9297 /* VEX_LEN_3A63_P_2 */
9298 {
9299 { "vpcmpistri", { XM, EXx, Ib } },
d5d7db8e 9300 { "(bad)", { XX } },
c0f3af97
L
9301 },
9302
922d8de8
DR
9303 /* VEX_LEN_3A6A_P_2 */
9304 {
206c2556 9305 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9306 { "(bad)", { XX } },
9307 },
9308
9309 /* VEX_LEN_3A6B_P_2 */
9310 {
206c2556 9311 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9312 { "(bad)", { XX } },
9313 },
9314
9315 /* VEX_LEN_3A6E_P_2 */
9316 {
206c2556 9317 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9318 { "(bad)", { XX } },
9319 },
9320
9321 /* VEX_LEN_3A6F_P_2 */
9322 {
206c2556 9323 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9324 { "(bad)", { XX } },
9325 },
9326
9327 /* VEX_LEN_3A7A_P_2 */
9328 {
206c2556 9329 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9330 { "(bad)", { XX } },
9331 },
9332
9333 /* VEX_LEN_3A7B_P_2 */
9334 {
206c2556 9335 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9336 { "(bad)", { XX } },
9337 },
9338
9339 /* VEX_LEN_3A7E_P_2 */
9340 {
206c2556 9341 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9342 { "(bad)", { XX } },
9343 },
9344
9345 /* VEX_LEN_3A7F_P_2 */
9346 {
206c2556 9347 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9348 { "(bad)", { XX } },
9349 },
9350
a5ff0eb2
L
9351 /* VEX_LEN_3ADF_P_2 */
9352 {
9353 { "vaeskeygenassist", { XM, EXx, Ib } },
9354 { "(bad)", { XX } },
9355 },
5dd85c99
SP
9356 /* VEX_LEN_XOP_08_A0 */
9357 {
9358 { "vcvtph2ps", { XM, EXq, Ib } },
9359 { "vcvtph2ps", { XM, EXxmm, Ib } },
9360 },
9361 /* VEX_LEN_XOP_08_A1 */
9362 {
9363 { "vcvtps2ph", { EXq, XM, Ib } },
9364 { "vcvtps2ph", { EXxmm, XM, Ib } },
9365 },
9366 /* VEX_LEN_XOP_09_80 */
9367 {
9368 { "vfrczps", { XM, EXxmm } },
9369 { "vfrczps", { XM, EXymmq } },
9370 },
9371 /* VEX_LEN_XOP_09_81 */
9372 {
9373 { "vfrczpd", { XM, EXxmm } },
9374 { "vfrczpd", { XM, EXymmq } },
9375 },
331d2d0d
L
9376};
9377
1ceb70f8 9378static const struct dis386 mod_table[][2] = {
b844680a 9379 {
1ceb70f8 9380 /* MOD_8D */
d8faab4e
L
9381 { "leaS", { Gv, M } },
9382 { "(bad)", { XX } },
9383 },
9384 {
92fddf8e
L
9385 /* MOD_0F01_REG_0 */
9386 { X86_64_TABLE (X86_64_0F01_REG_0) },
9387 { RM_TABLE (RM_0F01_REG_0) },
d8faab4e
L
9388 },
9389 {
92fddf8e
L
9390 /* MOD_0F01_REG_1 */
9391 { X86_64_TABLE (X86_64_0F01_REG_1) },
9392 { RM_TABLE (RM_0F01_REG_1) },
d8faab4e
L
9393 },
9394 {
92fddf8e
L
9395 /* MOD_0F01_REG_2 */
9396 { X86_64_TABLE (X86_64_0F01_REG_2) },
475a2301 9397 { RM_TABLE (RM_0F01_REG_2) },
d8faab4e
L
9398 },
9399 {
92fddf8e
L
9400 /* MOD_0F01_REG_3 */
9401 { X86_64_TABLE (X86_64_0F01_REG_3) },
9402 { RM_TABLE (RM_0F01_REG_3) },
d8faab4e
L
9403 },
9404 {
92fddf8e
L
9405 /* MOD_0F01_REG_7 */
9406 { "invlpg", { Mb } },
9407 { RM_TABLE (RM_0F01_REG_7) },
b844680a
L
9408 },
9409 {
92fddf8e
L
9410 /* MOD_0F12_PREFIX_0 */
9411 { "movlps", { XM, EXq } },
9412 { "movhlps", { XM, EXq } },
b844680a
L
9413 },
9414 {
92fddf8e
L
9415 /* MOD_0F13 */
9416 { "movlpX", { EXq, XM } },
d8faab4e
L
9417 { "(bad)", { XX } },
9418 },
9419 {
92fddf8e
L
9420 /* MOD_0F16_PREFIX_0 */
9421 { "movhps", { XM, EXq } },
9422 { "movlhps", { XM, EXq } },
b844680a
L
9423 },
9424 {
92fddf8e
L
9425 /* MOD_0F17 */
9426 { "movhpX", { EXq, XM } },
b844680a
L
9427 { "(bad)", { XX } },
9428 },
9429 {
92fddf8e
L
9430 /* MOD_0F18_REG_0 */
9431 { "prefetchnta", { Mb } },
b844680a 9432 { "(bad)", { XX } },
b844680a
L
9433 },
9434 {
92fddf8e
L
9435 /* MOD_0F18_REG_1 */
9436 { "prefetcht0", { Mb } },
9437 { "(bad)", { XX } },
b844680a
L
9438 },
9439 {
92fddf8e
L
9440 /* MOD_0F18_REG_2 */
9441 { "prefetcht1", { Mb } },
9442 { "(bad)", { XX } },
b844680a
L
9443 },
9444 {
92fddf8e
L
9445 /* MOD_0F18_REG_3 */
9446 { "prefetcht2", { Mb } },
b844680a 9447 { "(bad)", { XX } },
b844680a
L
9448 },
9449 {
92fddf8e
L
9450 /* MOD_0F20 */
9451 { "(bad)", { XX } },
9452 { "movZ", { Rm, Cm } },
b844680a
L
9453 },
9454 {
92fddf8e
L
9455 /* MOD_0F21 */
9456 { "(bad)", { XX } },
9457 { "movZ", { Rm, Dm } },
b844680a
L
9458 },
9459 {
92fddf8e 9460 /* MOD_0F22 */
b844680a 9461 { "(bad)", { XX } },
92fddf8e 9462 { "movZ", { Cm, Rm } },
b844680a
L
9463 },
9464 {
92fddf8e 9465 /* MOD_0F23 */
b844680a 9466 { "(bad)", { XX } },
92fddf8e 9467 { "movZ", { Dm, Rm } },
b844680a
L
9468 },
9469 {
92fddf8e 9470 /* MOD_0F24 */
c1e679ec 9471 { "(bad)", { XX } },
92fddf8e 9472 { "movL", { Rd, Td } },
b844680a
L
9473 },
9474 {
92fddf8e 9475 /* MOD_0F26 */
b844680a 9476 { "(bad)", { XX } },
92fddf8e 9477 { "movL", { Td, Rd } },
b844680a 9478 },
75c135a8
L
9479 {
9480 /* MOD_0F2B_PREFIX_0 */
4ee52178 9481 {"movntps", { Mx, XM } },
75c135a8
L
9482 { "(bad)", { XX } },
9483 },
9484 {
9485 /* MOD_0F2B_PREFIX_1 */
4ee52178 9486 {"movntss", { Md, XM } },
75c135a8
L
9487 { "(bad)", { XX } },
9488 },
9489 {
9490 /* MOD_0F2B_PREFIX_2 */
4ee52178 9491 {"movntpd", { Mx, XM } },
75c135a8
L
9492 { "(bad)", { XX } },
9493 },
9494 {
9495 /* MOD_0F2B_PREFIX_3 */
4ee52178 9496 {"movntsd", { Mq, XM } },
75c135a8
L
9497 { "(bad)", { XX } },
9498 },
9499 {
9500 /* MOD_0F51 */
9501 { "(bad)", { XX } },
9502 { "movmskpX", { Gdq, XS } },
9503 },
b844680a 9504 {
1ceb70f8 9505 /* MOD_0F71_REG_2 */
b844680a 9506 { "(bad)", { XX } },
4e7d34a6 9507 { "psrlw", { MS, Ib } },
b844680a
L
9508 },
9509 {
1ceb70f8 9510 /* MOD_0F71_REG_4 */
b844680a 9511 { "(bad)", { XX } },
4e7d34a6 9512 { "psraw", { MS, Ib } },
b844680a
L
9513 },
9514 {
1ceb70f8 9515 /* MOD_0F71_REG_6 */
b844680a 9516 { "(bad)", { XX } },
4e7d34a6 9517 { "psllw", { MS, Ib } },
b844680a
L
9518 },
9519 {
1ceb70f8 9520 /* MOD_0F72_REG_2 */
b844680a 9521 { "(bad)", { XX } },
4e7d34a6 9522 { "psrld", { MS, Ib } },
b844680a
L
9523 },
9524 {
1ceb70f8 9525 /* MOD_0F72_REG_4 */
b844680a 9526 { "(bad)", { XX } },
4e7d34a6 9527 { "psrad", { MS, Ib } },
b844680a
L
9528 },
9529 {
1ceb70f8 9530 /* MOD_0F72_REG_6 */
b844680a 9531 { "(bad)", { XX } },
4e7d34a6 9532 { "pslld", { MS, Ib } },
b844680a
L
9533 },
9534 {
1ceb70f8 9535 /* MOD_0F73_REG_2 */
4e7d34a6
L
9536 { "(bad)", { XX } },
9537 { "psrlq", { MS, Ib } },
b844680a
L
9538 },
9539 {
1ceb70f8 9540 /* MOD_0F73_REG_3 */
b844680a 9541 { "(bad)", { XX } },
c0f3af97
L
9542 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
9543 },
9544 {
9545 /* MOD_0F73_REG_6 */
9546 { "(bad)", { XX } },
9547 { "psllq", { MS, Ib } },
9548 },
9549 {
9550 /* MOD_0F73_REG_7 */
9551 { "(bad)", { XX } },
9552 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
9553 },
9554 {
9555 /* MOD_0FAE_REG_0 */
9556 { "fxsave", { M } },
9557 { "(bad)", { XX } },
9558 },
9559 {
9560 /* MOD_0FAE_REG_1 */
9561 { "fxrstor", { M } },
9562 { "(bad)", { XX } },
9563 },
9564 {
9565 /* MOD_0FAE_REG_2 */
9566 { "ldmxcsr", { Md } },
9567 { "(bad)", { XX } },
9568 },
9569 {
9570 /* MOD_0FAE_REG_3 */
9571 { "stmxcsr", { Md } },
9572 { "(bad)", { XX } },
9573 },
9574 {
9575 /* MOD_0FAE_REG_4 */
9576 { "xsave", { M } },
9577 { "(bad)", { XX } },
9578 },
9579 {
9580 /* MOD_0FAE_REG_5 */
9581 { "xrstor", { M } },
9582 { RM_TABLE (RM_0FAE_REG_5) },
9583 },
9584 {
9585 /* MOD_0FAE_REG_6 */
9586 { "xsaveopt", { M } },
9587 { RM_TABLE (RM_0FAE_REG_6) },
9588 },
9589 {
9590 /* MOD_0FAE_REG_7 */
9591 { "clflush", { Mb } },
9592 { RM_TABLE (RM_0FAE_REG_7) },
9593 },
9594 {
9595 /* MOD_0FB2 */
9596 { "lssS", { Gv, Mp } },
9597 { "(bad)", { XX } },
9598 },
9599 {
9600 /* MOD_0FB4 */
9601 { "lfsS", { Gv, Mp } },
9602 { "(bad)", { XX } },
9603 },
9604 {
9605 /* MOD_0FB5 */
9606 { "lgsS", { Gv, Mp } },
9607 { "(bad)", { XX } },
9608 },
9609 {
9610 /* MOD_0FC7_REG_6 */
9611 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
9612 { "(bad)", { XX } },
9613 },
9614 {
9615 /* MOD_0FC7_REG_7 */
9616 { "vmptrst", { Mq } },
9617 { "(bad)", { XX } },
9618 },
9619 {
9620 /* MOD_0FD7 */
9621 { "(bad)", { XX } },
9622 { "pmovmskb", { Gdq, MS } },
9623 },
9624 {
9625 /* MOD_0FE7_PREFIX_2 */
9626 { "movntdq", { Mx, XM } },
9627 { "(bad)", { XX } },
9628 },
9629 {
9630 /* MOD_0FF0_PREFIX_3 */
9631 { "lddqu", { XM, M } },
9632 { "(bad)", { XX } },
9633 },
9634 {
9635 /* MOD_0F382A_PREFIX_2 */
9636 { "movntdqa", { XM, Mx } },
9637 { "(bad)", { XX } },
9638 },
9639 {
9640 /* MOD_62_32BIT */
9641 { "bound{S|}", { Gv, Ma } },
9642 { "(bad)", { XX } },
9643 },
9644 {
9645 /* MOD_C4_32BIT */
9646 { "lesS", { Gv, Mp } },
9647 { VEX_C4_TABLE (VEX_0F) },
9648 },
9649 {
9650 /* MOD_C5_32BIT */
9651 { "ldsS", { Gv, Mp } },
9652 { VEX_C5_TABLE (VEX_0F) },
9653 },
9654 {
9655 /* MOD_VEX_12_PREFIX_0 */
9656 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) },
9657 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) },
9658 },
9659 {
9660 /* MOD_VEX_13 */
9661 { VEX_LEN_TABLE (VEX_LEN_13_M_0) },
9662 { "(bad)", { XX } },
9663 },
9664 {
9665 /* MOD_VEX_16_PREFIX_0 */
9666 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) },
9667 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) },
9668 },
9669 {
9670 /* MOD_VEX_17 */
9671 { VEX_LEN_TABLE (VEX_LEN_17_M_0) },
9672 { "(bad)", { XX } },
9673 },
9674 {
9675 /* MOD_VEX_2B */
168e3097 9676 { "vmovntpX", { Mx, XM } },
c0f3af97
L
9677 { "(bad)", { XX } },
9678 },
9679 {
9680 /* MOD_VEX_51 */
9681 { "(bad)", { XX } },
9682 { "vmovmskpX", { Gdq, XS } },
9683 },
9684 {
9685 /* MOD_VEX_71_REG_2 */
9686 { "(bad)", { XX } },
9687 { PREFIX_TABLE (PREFIX_VEX_71_REG_2) },
b844680a
L
9688 },
9689 {
c0f3af97 9690 /* MOD_VEX_71_REG_4 */
b844680a 9691 { "(bad)", { XX } },
c0f3af97 9692 { PREFIX_TABLE (PREFIX_VEX_71_REG_4) },
b844680a
L
9693 },
9694 {
c0f3af97 9695 /* MOD_VEX_71_REG_6 */
b844680a 9696 { "(bad)", { XX } },
c0f3af97 9697 { PREFIX_TABLE (PREFIX_VEX_71_REG_6) },
b844680a
L
9698 },
9699 {
c0f3af97 9700 /* MOD_VEX_72_REG_2 */
b844680a 9701 { "(bad)", { XX } },
c0f3af97 9702 { PREFIX_TABLE (PREFIX_VEX_72_REG_2) },
b844680a 9703 },
d8faab4e 9704 {
c0f3af97 9705 /* MOD_VEX_72_REG_4 */
d8faab4e 9706 { "(bad)", { XX } },
c0f3af97 9707 { PREFIX_TABLE (PREFIX_VEX_72_REG_4) },
d8faab4e
L
9708 },
9709 {
c0f3af97 9710 /* MOD_VEX_72_REG_6 */
d8faab4e 9711 { "(bad)", { XX } },
c0f3af97 9712 { PREFIX_TABLE (PREFIX_VEX_72_REG_6) },
d8faab4e 9713 },
876d4bfa 9714 {
c0f3af97 9715 /* MOD_VEX_73_REG_2 */
876d4bfa 9716 { "(bad)", { XX } },
c0f3af97 9717 { PREFIX_TABLE (PREFIX_VEX_73_REG_2) },
876d4bfa
L
9718 },
9719 {
c0f3af97 9720 /* MOD_VEX_73_REG_3 */
876d4bfa 9721 { "(bad)", { XX } },
c0f3af97 9722 { PREFIX_TABLE (PREFIX_VEX_73_REG_3) },
475a2301
L
9723 },
9724 {
c0f3af97
L
9725 /* MOD_VEX_73_REG_6 */
9726 { "(bad)", { XX } },
9727 { PREFIX_TABLE (PREFIX_VEX_73_REG_6) },
876d4bfa
L
9728 },
9729 {
c0f3af97 9730 /* MOD_VEX_73_REG_7 */
4e7d34a6 9731 { "(bad)", { XX } },
c0f3af97 9732 { PREFIX_TABLE (PREFIX_VEX_73_REG_7) },
876d4bfa
L
9733 },
9734 {
c0f3af97
L
9735 /* MOD_VEX_AE_REG_2 */
9736 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) },
9737 { "(bad)", { XX } },
876d4bfa 9738 },
bbedc832 9739 {
c0f3af97
L
9740 /* MOD_VEX_AE_REG_3 */
9741 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) },
4e7d34a6 9742 { "(bad)", { XX } },
bbedc832 9743 },
144c41d9 9744 {
c0f3af97 9745 /* MOD_VEX_D7_PREFIX_2 */
4e7d34a6 9746 { "(bad)", { XX } },
c0f3af97 9747 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) },
144c41d9 9748 },
1afd85e3 9749 {
c0f3af97 9750 /* MOD_VEX_E7_PREFIX_2 */
168e3097 9751 { "vmovntdq", { Mx, XM } },
92fddf8e 9752 { "(bad)", { XX } },
1afd85e3
L
9753 },
9754 {
c0f3af97
L
9755 /* MOD_VEX_F0_PREFIX_3 */
9756 { "vlddqu", { XM, M } },
92fddf8e
L
9757 { "(bad)", { XX } },
9758 },
9759 {
c0f3af97
L
9760 /* MOD_VEX_3818_PREFIX_2 */
9761 { "vbroadcastss", { XM, Md } },
92fddf8e 9762 { "(bad)", { XX } },
1afd85e3 9763 },
75c135a8 9764 {
c0f3af97
L
9765 /* MOD_VEX_3819_PREFIX_2 */
9766 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) },
75c135a8 9767 { "(bad)", { XX } },
75c135a8
L
9768 },
9769 {
c0f3af97
L
9770 /* MOD_VEX_381A_PREFIX_2 */
9771 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) },
75c135a8
L
9772 { "(bad)", { XX } },
9773 },
1afd85e3 9774 {
c0f3af97
L
9775 /* MOD_VEX_382A_PREFIX_2 */
9776 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) },
1afd85e3 9777 { "(bad)", { XX } },
1afd85e3 9778 },
75c135a8 9779 {
c0f3af97
L
9780 /* MOD_VEX_382C_PREFIX_2 */
9781 { "vmaskmovps", { XM, Vex, Mx } },
75c135a8
L
9782 { "(bad)", { XX } },
9783 },
1afd85e3 9784 {
c0f3af97
L
9785 /* MOD_VEX_382D_PREFIX_2 */
9786 { "vmaskmovpd", { XM, Vex, Mx } },
1afd85e3 9787 { "(bad)", { XX } },
1afd85e3
L
9788 },
9789 {
c0f3af97
L
9790 /* MOD_VEX_382E_PREFIX_2 */
9791 { "vmaskmovps", { Mx, Vex, XM } },
4e7d34a6 9792 { "(bad)", { XX } },
1afd85e3
L
9793 },
9794 {
c0f3af97
L
9795 /* MOD_VEX_382F_PREFIX_2 */
9796 { "vmaskmovpd", { Mx, Vex, XM } },
1afd85e3 9797 { "(bad)", { XX } },
1afd85e3 9798 },
b844680a
L
9799};
9800
1ceb70f8 9801static const struct dis386 rm_table[][8] = {
b844680a 9802 {
1ceb70f8 9803 /* RM_0F01_REG_0 */
b844680a
L
9804 { "(bad)", { XX } },
9805 { "vmcall", { Skip_MODRM } },
9806 { "vmlaunch", { Skip_MODRM } },
9807 { "vmresume", { Skip_MODRM } },
9808 { "vmxoff", { Skip_MODRM } },
9809 { "(bad)", { XX } },
9810 { "(bad)", { XX } },
9811 { "(bad)", { XX } },
9812 },
9813 {
1ceb70f8 9814 /* RM_0F01_REG_1 */
b844680a
L
9815 { "monitor", { { OP_Monitor, 0 } } },
9816 { "mwait", { { OP_Mwait, 0 } } },
9817 { "(bad)", { XX } },
9818 { "(bad)", { XX } },
9819 { "(bad)", { XX } },
9820 { "(bad)", { XX } },
9821 { "(bad)", { XX } },
9822 { "(bad)", { XX } },
9823 },
475a2301
L
9824 {
9825 /* RM_0F01_REG_2 */
9826 { "xgetbv", { Skip_MODRM } },
9827 { "xsetbv", { Skip_MODRM } },
9828 { "(bad)", { XX } },
9829 { "(bad)", { XX } },
9830 { "(bad)", { XX } },
9831 { "(bad)", { XX } },
9832 { "(bad)", { XX } },
9833 { "(bad)", { XX } },
9834 },
b844680a 9835 {
1ceb70f8 9836 /* RM_0F01_REG_3 */
4e7d34a6
L
9837 { "vmrun", { Skip_MODRM } },
9838 { "vmmcall", { Skip_MODRM } },
9839 { "vmload", { Skip_MODRM } },
9840 { "vmsave", { Skip_MODRM } },
9841 { "stgi", { Skip_MODRM } },
9842 { "clgi", { Skip_MODRM } },
9843 { "skinit", { Skip_MODRM } },
9844 { "invlpga", { Skip_MODRM } },
9845 },
9846 {
1ceb70f8 9847 /* RM_0F01_REG_7 */
4e7d34a6
L
9848 { "swapgs", { Skip_MODRM } },
9849 { "rdtscp", { Skip_MODRM } },
b844680a
L
9850 { "(bad)", { XX } },
9851 { "(bad)", { XX } },
9852 { "(bad)", { XX } },
9853 { "(bad)", { XX } },
9854 { "(bad)", { XX } },
9855 { "(bad)", { XX } },
9856 },
9857 {
1ceb70f8 9858 /* RM_0FAE_REG_5 */
4e7d34a6 9859 { "lfence", { Skip_MODRM } },
b844680a
L
9860 { "(bad)", { XX } },
9861 { "(bad)", { XX } },
9862 { "(bad)", { XX } },
9863 { "(bad)", { XX } },
9864 { "(bad)", { XX } },
9865 { "(bad)", { XX } },
9866 { "(bad)", { XX } },
9867 },
9868 {
1ceb70f8 9869 /* RM_0FAE_REG_6 */
4e7d34a6 9870 { "mfence", { Skip_MODRM } },
b844680a
L
9871 { "(bad)", { XX } },
9872 { "(bad)", { XX } },
9873 { "(bad)", { XX } },
9874 { "(bad)", { XX } },
9875 { "(bad)", { XX } },
9876 { "(bad)", { XX } },
9877 { "(bad)", { XX } },
9878 },
bbedc832 9879 {
1ceb70f8 9880 /* RM_0FAE_REG_7 */
4e7d34a6
L
9881 { "sfence", { Skip_MODRM } },
9882 { "(bad)", { XX } },
bbedc832
L
9883 { "(bad)", { XX } },
9884 { "(bad)", { XX } },
9885 { "(bad)", { XX } },
9886 { "(bad)", { XX } },
9887 { "(bad)", { XX } },
9888 { "(bad)", { XX } },
144c41d9 9889 },
b844680a
L
9890};
9891
c608c12e
AM
9892#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
9893
f16cd0d5
L
9894/* We use the high bit to indicate different name for the same
9895 prefix. */
9896#define ADDR16_PREFIX (0x67 | 0x100)
9897#define ADDR32_PREFIX (0x67 | 0x200)
9898#define DATA16_PREFIX (0x66 | 0x100)
9899#define DATA32_PREFIX (0x66 | 0x200)
9900#define REP_PREFIX (0xf3 | 0x100)
9901
9902static int
26ca5450 9903ckprefix (void)
252b5132 9904{
f16cd0d5 9905 int newrex, i, length;
52b15da3 9906 rex = 0;
c0f3af97
L
9907 rex_original = 0;
9908 rex_ignored = 0;
252b5132 9909 prefixes = 0;
7d421014 9910 used_prefixes = 0;
52b15da3 9911 rex_used = 0;
f16cd0d5
L
9912 last_lock_prefix = -1;
9913 last_repz_prefix = -1;
9914 last_repnz_prefix = -1;
9915 last_data_prefix = -1;
9916 last_addr_prefix = -1;
9917 last_rex_prefix = -1;
9918 last_seg_prefix = -1;
f310f33d
L
9919 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
9920 all_prefixes[i] = 0;
9921 i = 0;
f16cd0d5
L
9922 length = 0;
9923 /* The maximum instruction length is 15bytes. */
9924 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
9925 {
9926 FETCH_DATA (the_info, codep + 1);
52b15da3 9927 newrex = 0;
252b5132
RH
9928 switch (*codep)
9929 {
52b15da3
JH
9930 /* REX prefixes family. */
9931 case 0x40:
9932 case 0x41:
9933 case 0x42:
9934 case 0x43:
9935 case 0x44:
9936 case 0x45:
9937 case 0x46:
9938 case 0x47:
9939 case 0x48:
9940 case 0x49:
9941 case 0x4a:
9942 case 0x4b:
9943 case 0x4c:
9944 case 0x4d:
9945 case 0x4e:
9946 case 0x4f:
f16cd0d5
L
9947 if (address_mode == mode_64bit)
9948 newrex = *codep;
9949 else
9950 return 1;
9951 last_rex_prefix = i;
52b15da3 9952 break;
252b5132
RH
9953 case 0xf3:
9954 prefixes |= PREFIX_REPZ;
f16cd0d5 9955 last_repz_prefix = i;
252b5132
RH
9956 break;
9957 case 0xf2:
9958 prefixes |= PREFIX_REPNZ;
f16cd0d5 9959 last_repnz_prefix = i;
252b5132
RH
9960 break;
9961 case 0xf0:
9962 prefixes |= PREFIX_LOCK;
f16cd0d5 9963 last_lock_prefix = i;
252b5132
RH
9964 break;
9965 case 0x2e:
9966 prefixes |= PREFIX_CS;
f16cd0d5 9967 last_seg_prefix = i;
252b5132
RH
9968 break;
9969 case 0x36:
9970 prefixes |= PREFIX_SS;
f16cd0d5 9971 last_seg_prefix = i;
252b5132
RH
9972 break;
9973 case 0x3e:
9974 prefixes |= PREFIX_DS;
f16cd0d5 9975 last_seg_prefix = i;
252b5132
RH
9976 break;
9977 case 0x26:
9978 prefixes |= PREFIX_ES;
f16cd0d5 9979 last_seg_prefix = i;
252b5132
RH
9980 break;
9981 case 0x64:
9982 prefixes |= PREFIX_FS;
f16cd0d5 9983 last_seg_prefix = i;
252b5132
RH
9984 break;
9985 case 0x65:
9986 prefixes |= PREFIX_GS;
f16cd0d5 9987 last_seg_prefix = i;
252b5132
RH
9988 break;
9989 case 0x66:
9990 prefixes |= PREFIX_DATA;
f16cd0d5 9991 last_data_prefix = i;
252b5132
RH
9992 break;
9993 case 0x67:
9994 prefixes |= PREFIX_ADDR;
f16cd0d5 9995 last_addr_prefix = i;
252b5132 9996 break;
5076851f 9997 case FWAIT_OPCODE:
252b5132
RH
9998 /* fwait is really an instruction. If there are prefixes
9999 before the fwait, they belong to the fwait, *not* to the
10000 following instruction. */
3e7d61b2 10001 if (prefixes || rex)
252b5132
RH
10002 {
10003 prefixes |= PREFIX_FWAIT;
10004 codep++;
f16cd0d5 10005 return 1;
252b5132
RH
10006 }
10007 prefixes = PREFIX_FWAIT;
10008 break;
10009 default:
f16cd0d5 10010 return 1;
252b5132 10011 }
52b15da3
JH
10012 /* Rex is ignored when followed by another prefix. */
10013 if (rex)
10014 {
3e7d61b2 10015 rex_used = rex;
f16cd0d5 10016 return 1;
52b15da3 10017 }
f16cd0d5
L
10018 if (*codep != FWAIT_OPCODE)
10019 all_prefixes[i++] = *codep;
52b15da3 10020 rex = newrex;
c0f3af97 10021 rex_original = rex;
252b5132 10022 codep++;
f16cd0d5
L
10023 length++;
10024 }
10025 return 0;
10026}
10027
10028static int
10029seg_prefix (int pref)
10030{
10031 switch (pref)
10032 {
10033 case 0x2e:
10034 return PREFIX_CS;
10035 case 0x36:
10036 return PREFIX_SS;
10037 case 0x3e:
10038 return PREFIX_DS;
10039 case 0x26:
10040 return PREFIX_ES;
10041 case 0x64:
10042 return PREFIX_FS;
10043 case 0x65:
10044 return PREFIX_GS;
10045 default:
10046 return 0;
252b5132
RH
10047 }
10048}
10049
7d421014
ILT
10050/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10051 prefix byte. */
10052
10053static const char *
26ca5450 10054prefix_name (int pref, int sizeflag)
7d421014 10055{
0003779b
L
10056 static const char *rexes [16] =
10057 {
10058 "rex", /* 0x40 */
10059 "rex.B", /* 0x41 */
10060 "rex.X", /* 0x42 */
10061 "rex.XB", /* 0x43 */
10062 "rex.R", /* 0x44 */
10063 "rex.RB", /* 0x45 */
10064 "rex.RX", /* 0x46 */
10065 "rex.RXB", /* 0x47 */
10066 "rex.W", /* 0x48 */
10067 "rex.WB", /* 0x49 */
10068 "rex.WX", /* 0x4a */
10069 "rex.WXB", /* 0x4b */
10070 "rex.WR", /* 0x4c */
10071 "rex.WRB", /* 0x4d */
10072 "rex.WRX", /* 0x4e */
10073 "rex.WRXB", /* 0x4f */
10074 };
10075
7d421014
ILT
10076 switch (pref)
10077 {
52b15da3
JH
10078 /* REX prefixes family. */
10079 case 0x40:
52b15da3 10080 case 0x41:
52b15da3 10081 case 0x42:
52b15da3 10082 case 0x43:
52b15da3 10083 case 0x44:
52b15da3 10084 case 0x45:
52b15da3 10085 case 0x46:
52b15da3 10086 case 0x47:
52b15da3 10087 case 0x48:
52b15da3 10088 case 0x49:
52b15da3 10089 case 0x4a:
52b15da3 10090 case 0x4b:
52b15da3 10091 case 0x4c:
52b15da3 10092 case 0x4d:
52b15da3 10093 case 0x4e:
52b15da3 10094 case 0x4f:
0003779b 10095 return rexes [pref - 0x40];
7d421014
ILT
10096 case 0xf3:
10097 return "repz";
10098 case 0xf2:
10099 return "repnz";
10100 case 0xf0:
10101 return "lock";
10102 case 0x2e:
10103 return "cs";
10104 case 0x36:
10105 return "ss";
10106 case 0x3e:
10107 return "ds";
10108 case 0x26:
10109 return "es";
10110 case 0x64:
10111 return "fs";
10112 case 0x65:
10113 return "gs";
10114 case 0x66:
10115 return (sizeflag & DFLAG) ? "data16" : "data32";
10116 case 0x67:
cb712a9e 10117 if (address_mode == mode_64bit)
db6eb5be 10118 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10119 else
2888cb7a 10120 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10121 case FWAIT_OPCODE:
10122 return "fwait";
f16cd0d5
L
10123 case ADDR16_PREFIX:
10124 return "addr16";
10125 case ADDR32_PREFIX:
10126 return "addr32";
10127 case DATA16_PREFIX:
10128 return "data16";
10129 case DATA32_PREFIX:
10130 return "data32";
10131 case REP_PREFIX:
10132 return "rep";
7d421014
ILT
10133 default:
10134 return NULL;
10135 }
10136}
10137
ce518a5f
L
10138static char op_out[MAX_OPERANDS][100];
10139static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10140static int two_source_ops;
ce518a5f
L
10141static bfd_vma op_address[MAX_OPERANDS];
10142static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10143static bfd_vma start_pc;
ce518a5f 10144
252b5132
RH
10145/*
10146 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10147 * (see topic "Redundant prefixes" in the "Differences from 8086"
10148 * section of the "Virtual 8086 Mode" chapter.)
10149 * 'pc' should be the address of this instruction, it will
10150 * be used to print the target address if this is a relative jump or call
10151 * The function returns the length of this instruction in bytes.
10152 */
10153
252b5132 10154static char intel_syntax;
9d141669 10155static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10156static char open_char;
10157static char close_char;
10158static char separator_char;
10159static char scale_char;
10160
e396998b
AM
10161/* Here for backwards compatibility. When gdb stops using
10162 print_insn_i386_att and print_insn_i386_intel these functions can
10163 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10164int
26ca5450 10165print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10166{
10167 intel_syntax = 0;
e396998b
AM
10168
10169 return print_insn (pc, info);
252b5132
RH
10170}
10171
10172int
26ca5450 10173print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10174{
10175 intel_syntax = 1;
e396998b
AM
10176
10177 return print_insn (pc, info);
252b5132
RH
10178}
10179
e396998b 10180int
26ca5450 10181print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10182{
10183 intel_syntax = -1;
10184
10185 return print_insn (pc, info);
10186}
10187
f59a29b9
L
10188void
10189print_i386_disassembler_options (FILE *stream)
10190{
10191 fprintf (stream, _("\n\
10192The following i386/x86-64 specific disassembler options are supported for use\n\
10193with the -M switch (multiple options should be separated by commas):\n"));
10194
10195 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10196 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10197 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10198 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10199 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10200 fprintf (stream, _(" att-mnemonic\n"
10201 " Display instruction in AT&T mnemonic\n"));
10202 fprintf (stream, _(" intel-mnemonic\n"
10203 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10204 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10205 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10206 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10207 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10208 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10209 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10210}
10211
b844680a
L
10212/* Get a pointer to struct dis386 with a valid name. */
10213
10214static const struct dis386 *
8bb15339 10215get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10216{
c0f3af97 10217 int index, vex_table_index;
b844680a
L
10218
10219 if (dp->name != NULL)
10220 return dp;
10221
10222 switch (dp->op[0].bytemode)
10223 {
1ceb70f8
L
10224 case USE_REG_TABLE:
10225 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10226 break;
10227
10228 case USE_MOD_TABLE:
10229 index = modrm.mod == 0x3 ? 1 : 0;
10230 dp = &mod_table[dp->op[1].bytemode][index];
10231 break;
10232
10233 case USE_RM_TABLE:
10234 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
10235 break;
10236
4e7d34a6 10237 case USE_PREFIX_TABLE:
c0f3af97 10238 if (need_vex)
b844680a 10239 {
c0f3af97
L
10240 /* The prefix in VEX is implicit. */
10241 switch (vex.prefix)
10242 {
10243 case 0:
10244 index = 0;
10245 break;
10246 case REPE_PREFIX_OPCODE:
10247 index = 1;
10248 break;
10249 case DATA_PREFIX_OPCODE:
10250 index = 2;
10251 break;
10252 case REPNE_PREFIX_OPCODE:
10253 index = 3;
10254 break;
10255 default:
10256 abort ();
10257 break;
10258 }
b844680a 10259 }
c0f3af97 10260 else
b844680a 10261 {
c0f3af97
L
10262 index = 0;
10263 used_prefixes |= (prefixes & PREFIX_REPZ);
10264 if (prefixes & PREFIX_REPZ)
b844680a 10265 {
c0f3af97 10266 index = 1;
f16cd0d5 10267 all_prefixes[last_repz_prefix] = 0;
b844680a
L
10268 }
10269 else
10270 {
c0f3af97
L
10271 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
10272 PREFIX_DATA. */
10273 used_prefixes |= (prefixes & PREFIX_REPNZ);
10274 if (prefixes & PREFIX_REPNZ)
10275 {
10276 index = 3;
f16cd0d5 10277 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
10278 }
10279 else
b844680a 10280 {
c0f3af97
L
10281 used_prefixes |= (prefixes & PREFIX_DATA);
10282 if (prefixes & PREFIX_DATA)
10283 {
10284 index = 2;
f16cd0d5 10285 all_prefixes[last_data_prefix] = 0;
c0f3af97 10286 }
b844680a
L
10287 }
10288 }
10289 }
1ceb70f8 10290 dp = &prefix_table[dp->op[1].bytemode][index];
b844680a
L
10291 break;
10292
4e7d34a6 10293 case USE_X86_64_TABLE:
b844680a
L
10294 index = address_mode == mode_64bit ? 1 : 0;
10295 dp = &x86_64_table[dp->op[1].bytemode][index];
10296 break;
10297
4e7d34a6 10298 case USE_3BYTE_TABLE:
8bb15339
L
10299 FETCH_DATA (info, codep + 2);
10300 index = *codep++;
10301 dp = &three_byte_table[dp->op[1].bytemode][index];
10302 modrm.mod = (*codep >> 6) & 3;
10303 modrm.reg = (*codep >> 3) & 7;
10304 modrm.rm = *codep & 7;
10305 break;
10306
c0f3af97
L
10307 case USE_VEX_LEN_TABLE:
10308 if (!need_vex)
10309 abort ();
10310
10311 switch (vex.length)
10312 {
10313 case 128:
10314 index = 0;
10315 break;
10316 case 256:
10317 index = 1;
10318 break;
10319 default:
10320 abort ();
10321 break;
10322 }
10323
10324 dp = &vex_len_table[dp->op[1].bytemode][index];
10325 break;
10326
f88c9eb0
SP
10327 case USE_XOP_8F_TABLE:
10328 FETCH_DATA (info, codep + 3);
10329 /* All bits in the REX prefix are ignored. */
10330 rex_ignored = rex;
10331 rex = ~(*codep >> 5) & 0x7;
10332
10333 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
10334 switch ((*codep & 0x1f))
10335 {
10336 default:
10337 BadOp ();
5dd85c99
SP
10338 case 0x8:
10339 vex_table_index = XOP_08;
10340 break;
f88c9eb0
SP
10341 case 0x9:
10342 vex_table_index = XOP_09;
10343 break;
10344 case 0xa:
10345 vex_table_index = XOP_0A;
10346 break;
10347 }
10348 codep++;
10349 vex.w = *codep & 0x80;
10350 if (vex.w && address_mode == mode_64bit)
10351 rex |= REX_W;
10352
10353 vex.register_specifier = (~(*codep >> 3)) & 0xf;
10354 if (address_mode != mode_64bit
10355 && vex.register_specifier > 0x7)
10356 BadOp ();
10357
10358 vex.length = (*codep & 0x4) ? 256 : 128;
10359 switch ((*codep & 0x3))
10360 {
10361 case 0:
10362 vex.prefix = 0;
10363 break;
10364 case 1:
10365 vex.prefix = DATA_PREFIX_OPCODE;
10366 break;
10367 case 2:
10368 vex.prefix = REPE_PREFIX_OPCODE;
10369 break;
10370 case 3:
10371 vex.prefix = REPNE_PREFIX_OPCODE;
10372 break;
10373 }
10374 need_vex = 1;
10375 need_vex_reg = 1;
10376 codep++;
10377 index = *codep++;
10378 dp = &xop_table[vex_table_index][index];
c48244a5
SP
10379
10380 FETCH_DATA (info, codep + 1);
10381 modrm.mod = (*codep >> 6) & 3;
10382 modrm.reg = (*codep >> 3) & 7;
10383 modrm.rm = *codep & 7;
f88c9eb0
SP
10384 break;
10385
c0f3af97
L
10386 case USE_VEX_C4_TABLE:
10387 FETCH_DATA (info, codep + 3);
10388 /* All bits in the REX prefix are ignored. */
10389 rex_ignored = rex;
10390 rex = ~(*codep >> 5) & 0x7;
10391 switch ((*codep & 0x1f))
10392 {
10393 default:
10394 BadOp ();
10395 case 0x1:
f88c9eb0 10396 vex_table_index = VEX_0F;
c0f3af97
L
10397 break;
10398 case 0x2:
f88c9eb0 10399 vex_table_index = VEX_0F38;
c0f3af97
L
10400 break;
10401 case 0x3:
f88c9eb0 10402 vex_table_index = VEX_0F3A;
c0f3af97
L
10403 break;
10404 }
10405 codep++;
10406 vex.w = *codep & 0x80;
10407 if (vex.w && address_mode == mode_64bit)
10408 rex |= REX_W;
10409
10410 vex.register_specifier = (~(*codep >> 3)) & 0xf;
10411 if (address_mode != mode_64bit
10412 && vex.register_specifier > 0x7)
10413 BadOp ();
10414
10415 vex.length = (*codep & 0x4) ? 256 : 128;
10416 switch ((*codep & 0x3))
10417 {
10418 case 0:
10419 vex.prefix = 0;
10420 break;
10421 case 1:
10422 vex.prefix = DATA_PREFIX_OPCODE;
10423 break;
10424 case 2:
10425 vex.prefix = REPE_PREFIX_OPCODE;
10426 break;
10427 case 3:
10428 vex.prefix = REPNE_PREFIX_OPCODE;
10429 break;
10430 }
10431 need_vex = 1;
10432 need_vex_reg = 1;
10433 codep++;
10434 index = *codep++;
10435 dp = &vex_table[vex_table_index][index];
10436 /* There is no MODRM byte for VEX [82|77]. */
10437 if (index != 0x77 && index != 0x82)
10438 {
10439 FETCH_DATA (info, codep + 1);
10440 modrm.mod = (*codep >> 6) & 3;
10441 modrm.reg = (*codep >> 3) & 7;
10442 modrm.rm = *codep & 7;
10443 }
10444 break;
10445
10446 case USE_VEX_C5_TABLE:
10447 FETCH_DATA (info, codep + 2);
10448 /* All bits in the REX prefix are ignored. */
10449 rex_ignored = rex;
10450 rex = (*codep & 0x80) ? 0 : REX_R;
10451
10452 vex.register_specifier = (~(*codep >> 3)) & 0xf;
10453 if (address_mode != mode_64bit
10454 && vex.register_specifier > 0x7)
10455 BadOp ();
10456
10457 vex.length = (*codep & 0x4) ? 256 : 128;
10458 switch ((*codep & 0x3))
10459 {
10460 case 0:
10461 vex.prefix = 0;
10462 break;
10463 case 1:
10464 vex.prefix = DATA_PREFIX_OPCODE;
10465 break;
10466 case 2:
10467 vex.prefix = REPE_PREFIX_OPCODE;
10468 break;
10469 case 3:
10470 vex.prefix = REPNE_PREFIX_OPCODE;
10471 break;
10472 }
10473 need_vex = 1;
10474 need_vex_reg = 1;
10475 codep++;
10476 index = *codep++;
10477 dp = &vex_table[dp->op[1].bytemode][index];
10478 /* There is no MODRM byte for VEX [82|77]. */
10479 if (index != 0x77 && index != 0x82)
10480 {
10481 FETCH_DATA (info, codep + 1);
10482 modrm.mod = (*codep >> 6) & 3;
10483 modrm.reg = (*codep >> 3) & 7;
10484 modrm.rm = *codep & 7;
10485 }
10486 break;
10487
b844680a 10488 default:
d34b5006 10489 abort ();
b844680a
L
10490 }
10491
10492 if (dp->name != NULL)
10493 return dp;
10494 else
8bb15339 10495 return get_valid_dis386 (dp, info);
b844680a
L
10496}
10497
e396998b 10498static int
26ca5450 10499print_insn (bfd_vma pc, disassemble_info *info)
252b5132 10500{
2da11e11 10501 const struct dis386 *dp;
252b5132 10502 int i;
ce518a5f 10503 char *op_txt[MAX_OPERANDS];
252b5132 10504 int needcomma;
e396998b
AM
10505 int sizeflag;
10506 const char *p;
252b5132 10507 struct dis_private priv;
eec0f4ca 10508 unsigned char op;
f16cd0d5
L
10509 int prefix_length;
10510 int default_prefixes;
252b5132 10511
cb712a9e 10512 if (info->mach == bfd_mach_x86_64_intel_syntax
8a9036a4
L
10513 || info->mach == bfd_mach_x86_64
10514 || info->mach == bfd_mach_l1om
10515 || info->mach == bfd_mach_l1om_intel_syntax)
cb712a9e
L
10516 address_mode = mode_64bit;
10517 else
10518 address_mode = mode_32bit;
52b15da3 10519
8373f971 10520 if (intel_syntax == (char) -1)
e396998b 10521 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
10522 || info->mach == bfd_mach_x86_64_intel_syntax
10523 || info->mach == bfd_mach_l1om_intel_syntax);
e396998b 10524
2da11e11 10525 if (info->mach == bfd_mach_i386_i386
52b15da3 10526 || info->mach == bfd_mach_x86_64
8a9036a4 10527 || info->mach == bfd_mach_l1om
52b15da3 10528 || info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
10529 || info->mach == bfd_mach_x86_64_intel_syntax
10530 || info->mach == bfd_mach_l1om_intel_syntax)
e396998b 10531 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 10532 else if (info->mach == bfd_mach_i386_i8086)
e396998b 10533 priv.orig_sizeflag = 0;
2da11e11
AM
10534 else
10535 abort ();
e396998b
AM
10536
10537 for (p = info->disassembler_options; p != NULL; )
10538 {
0112cd26 10539 if (CONST_STRNEQ (p, "x86-64"))
e396998b 10540 {
cb712a9e 10541 address_mode = mode_64bit;
e396998b
AM
10542 priv.orig_sizeflag = AFLAG | DFLAG;
10543 }
0112cd26 10544 else if (CONST_STRNEQ (p, "i386"))
e396998b 10545 {
cb712a9e 10546 address_mode = mode_32bit;
e396998b
AM
10547 priv.orig_sizeflag = AFLAG | DFLAG;
10548 }
0112cd26 10549 else if (CONST_STRNEQ (p, "i8086"))
e396998b 10550 {
cb712a9e 10551 address_mode = mode_16bit;
e396998b
AM
10552 priv.orig_sizeflag = 0;
10553 }
0112cd26 10554 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
10555 {
10556 intel_syntax = 1;
9d141669
L
10557 if (CONST_STRNEQ (p + 5, "-mnemonic"))
10558 intel_mnemonic = 1;
e396998b 10559 }
0112cd26 10560 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
10561 {
10562 intel_syntax = 0;
9d141669
L
10563 if (CONST_STRNEQ (p + 3, "-mnemonic"))
10564 intel_mnemonic = 0;
e396998b 10565 }
0112cd26 10566 else if (CONST_STRNEQ (p, "addr"))
e396998b 10567 {
f59a29b9
L
10568 if (address_mode == mode_64bit)
10569 {
10570 if (p[4] == '3' && p[5] == '2')
10571 priv.orig_sizeflag &= ~AFLAG;
10572 else if (p[4] == '6' && p[5] == '4')
10573 priv.orig_sizeflag |= AFLAG;
10574 }
10575 else
10576 {
10577 if (p[4] == '1' && p[5] == '6')
10578 priv.orig_sizeflag &= ~AFLAG;
10579 else if (p[4] == '3' && p[5] == '2')
10580 priv.orig_sizeflag |= AFLAG;
10581 }
e396998b 10582 }
0112cd26 10583 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
10584 {
10585 if (p[4] == '1' && p[5] == '6')
10586 priv.orig_sizeflag &= ~DFLAG;
10587 else if (p[4] == '3' && p[5] == '2')
10588 priv.orig_sizeflag |= DFLAG;
10589 }
0112cd26 10590 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
10591 priv.orig_sizeflag |= SUFFIX_ALWAYS;
10592
10593 p = strchr (p, ',');
10594 if (p != NULL)
10595 p++;
10596 }
10597
10598 if (intel_syntax)
10599 {
10600 names64 = intel_names64;
10601 names32 = intel_names32;
10602 names16 = intel_names16;
10603 names8 = intel_names8;
10604 names8rex = intel_names8rex;
10605 names_seg = intel_names_seg;
db51cc60
L
10606 index64 = intel_index64;
10607 index32 = intel_index32;
e396998b
AM
10608 index16 = intel_index16;
10609 open_char = '[';
10610 close_char = ']';
10611 separator_char = '+';
10612 scale_char = '*';
10613 }
10614 else
10615 {
10616 names64 = att_names64;
10617 names32 = att_names32;
10618 names16 = att_names16;
10619 names8 = att_names8;
10620 names8rex = att_names8rex;
10621 names_seg = att_names_seg;
db51cc60
L
10622 index64 = att_index64;
10623 index32 = att_index32;
e396998b
AM
10624 index16 = att_index16;
10625 open_char = '(';
10626 close_char = ')';
10627 separator_char = ',';
10628 scale_char = ',';
10629 }
2da11e11 10630
4fe53c98 10631 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
10632 puts most long word instructions on a single line. Use 8 bytes
10633 for Intel L1OM. */
10634 if (info->mach == bfd_mach_l1om
10635 || info->mach == bfd_mach_l1om_intel_syntax)
10636 info->bytes_per_line = 8;
10637 else
10638 info->bytes_per_line = 7;
252b5132 10639
26ca5450 10640 info->private_data = &priv;
252b5132
RH
10641 priv.max_fetched = priv.the_buffer;
10642 priv.insn_start = pc;
252b5132
RH
10643
10644 obuf[0] = 0;
ce518a5f
L
10645 for (i = 0; i < MAX_OPERANDS; ++i)
10646 {
10647 op_out[i][0] = 0;
10648 op_index[i] = -1;
10649 }
252b5132
RH
10650
10651 the_info = info;
10652 start_pc = pc;
e396998b
AM
10653 start_codep = priv.the_buffer;
10654 codep = priv.the_buffer;
252b5132 10655
5076851f
ILT
10656 if (setjmp (priv.bailout) != 0)
10657 {
7d421014
ILT
10658 const char *name;
10659
5076851f 10660 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
10661 means we have an incomplete instruction of some sort. Just
10662 print the first byte as a prefix or a .byte pseudo-op. */
10663 if (codep > priv.the_buffer)
5076851f 10664 {
e396998b 10665 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
10666 if (name != NULL)
10667 (*info->fprintf_func) (info->stream, "%s", name);
10668 else
5076851f 10669 {
7d421014
ILT
10670 /* Just print the first byte as a .byte instruction. */
10671 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 10672 (unsigned int) priv.the_buffer[0]);
5076851f 10673 }
5076851f 10674
7d421014 10675 return 1;
5076851f
ILT
10676 }
10677
10678 return -1;
10679 }
10680
52b15da3 10681 obufp = obuf;
f16cd0d5
L
10682 sizeflag = priv.orig_sizeflag;
10683
10684 if (!ckprefix () || rex_used)
10685 {
10686 /* Too many prefixes or unused REX prefixes. */
10687 for (i = 0;
10688 all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes);
10689 i++)
10690 (*info->fprintf_func) (info->stream, "%s",
10691 prefix_name (all_prefixes[i], sizeflag));
10692 return 1;
10693 }
252b5132
RH
10694
10695 insn_codep = codep;
10696
10697 FETCH_DATA (info, codep + 1);
10698 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
10699
3e7d61b2 10700 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 10701 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 10702 {
f16cd0d5 10703 (*info->fprintf_func) (info->stream, "fwait");
7d421014 10704 return 1;
252b5132
RH
10705 }
10706
eec0f4ca 10707 op = 0;
c1e679ec 10708
252b5132
RH
10709 if (*codep == 0x0f)
10710 {
eec0f4ca 10711 unsigned char threebyte;
252b5132 10712 FETCH_DATA (info, codep + 2);
eec0f4ca
L
10713 threebyte = *++codep;
10714 dp = &dis386_twobyte[threebyte];
252b5132 10715 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 10716 codep++;
252b5132
RH
10717 }
10718 else
10719 {
6439fc28 10720 dp = &dis386[*codep];
252b5132 10721 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 10722 codep++;
252b5132 10723 }
246c51aa 10724
b844680a 10725 if ((prefixes & PREFIX_REPZ))
f16cd0d5 10726 used_prefixes |= PREFIX_REPZ;
b844680a 10727 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 10728 used_prefixes |= PREFIX_REPNZ;
b844680a 10729 if ((prefixes & PREFIX_LOCK))
f16cd0d5 10730 used_prefixes |= PREFIX_LOCK;
c608c12e 10731
f16cd0d5 10732 default_prefixes = 0;
c608c12e
AM
10733 if (prefixes & PREFIX_ADDR)
10734 {
10735 sizeflag ^= AFLAG;
ce518a5f 10736 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 10737 {
cb712a9e 10738 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 10739 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 10740 else
f16cd0d5
L
10741 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
10742 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
10743 }
10744 }
10745
b844680a 10746 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
10747 {
10748 sizeflag ^= DFLAG;
ce518a5f
L
10749 if (dp->op[2].bytemode == cond_jump_mode
10750 && dp->op[0].bytemode == v_mode
6439fc28 10751 && !intel_syntax)
3ffd33cf
AM
10752 {
10753 if (sizeflag & DFLAG)
f16cd0d5 10754 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 10755 else
f16cd0d5
L
10756 all_prefixes[last_data_prefix] = DATA16_PREFIX;
10757 default_prefixes |= PREFIX_DATA;
10758 }
10759 else if (rex & REX_W)
10760 {
10761 /* REX_W will override PREFIX_DATA. */
10762 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
10763 }
10764 }
10765
8bb15339 10766 if (need_modrm)
252b5132
RH
10767 {
10768 FETCH_DATA (info, codep + 1);
7967e09e
L
10769 modrm.mod = (*codep >> 6) & 3;
10770 modrm.reg = (*codep >> 3) & 7;
10771 modrm.rm = *codep & 7;
252b5132
RH
10772 }
10773
55b126d4
L
10774 need_vex = 0;
10775 need_vex_reg = 0;
10776 vex_w_done = 0;
10777
ce518a5f 10778 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132
RH
10779 {
10780 dofloat (sizeflag);
10781 }
10782 else
10783 {
8bb15339 10784 dp = get_valid_dis386 (dp, info);
b844680a 10785 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f
L
10786 {
10787 for (i = 0; i < MAX_OPERANDS; ++i)
10788 {
246c51aa 10789 obufp = op_out[i];
ce518a5f
L
10790 op_ad = MAX_OPERANDS - 1 - i;
10791 if (dp->op[i].rtn)
10792 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
10793 }
6439fc28 10794 }
252b5132
RH
10795 }
10796
7d421014
ILT
10797 /* See if any prefixes were not used. If so, print the first one
10798 separately. If we don't do this, we'll wind up printing an
10799 instruction stream which does not precisely correspond to the
10800 bytes we are disassembling. */
f16cd0d5 10801 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 10802 {
f16cd0d5
L
10803 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10804 if (all_prefixes[i])
10805 {
10806 const char *name;
10807 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
10808 if (name == NULL)
10809 name = INTERNAL_DISASSEMBLER_ERROR;
10810 (*info->fprintf_func) (info->stream, "%s", name);
10811 return 1;
10812 }
52b15da3 10813 }
7d421014 10814
f16cd0d5 10815 /* Check if the REX prefix used. */
2a70cca4 10816 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
10817 all_prefixes[last_rex_prefix] = 0;
10818
10819 /* Check if the SEG prefix used. */
10820 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
10821 | PREFIX_FS | PREFIX_GS)) != 0
10822 && (used_prefixes
10823 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
10824 all_prefixes[last_seg_prefix] = 0;
10825
10826 /* Check if the ADDR prefix used. */
10827 if ((prefixes & PREFIX_ADDR) != 0
10828 && (used_prefixes & PREFIX_ADDR) != 0)
10829 all_prefixes[last_addr_prefix] = 0;
10830
10831 /* Check if the DATA prefix used. */
10832 if ((prefixes & PREFIX_DATA) != 0
10833 && (used_prefixes & PREFIX_DATA) != 0)
10834 all_prefixes[last_data_prefix] = 0;
10835
10836 prefix_length = 0;
f310f33d 10837 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
10838 if (all_prefixes[i])
10839 {
10840 const char *name;
10841 name = prefix_name (all_prefixes[i], sizeflag);
10842 if (name == NULL)
10843 abort ();
10844 prefix_length += strlen (name) + 1;
10845 (*info->fprintf_func) (info->stream, "%s ", name);
10846 }
b844680a 10847
f16cd0d5
L
10848 /* Check maximum code length. */
10849 if ((codep - start_codep) > MAX_CODE_LENGTH)
10850 {
10851 (*info->fprintf_func) (info->stream, "(bad)");
10852 return MAX_CODE_LENGTH;
10853 }
b844680a 10854
ea397f5b 10855 obufp = mnemonicendp;
f16cd0d5 10856 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
10857 oappend (" ");
10858 oappend (" ");
10859 (*info->fprintf_func) (info->stream, "%s", obuf);
10860
10861 /* The enter and bound instructions are printed with operands in the same
10862 order as the intel book; everything else is printed in reverse order. */
2da11e11 10863 if (intel_syntax || two_source_ops)
252b5132 10864 {
185b1163
L
10865 bfd_vma riprel;
10866
ce518a5f
L
10867 for (i = 0; i < MAX_OPERANDS; ++i)
10868 op_txt[i] = op_out[i];
246c51aa 10869
ce518a5f
L
10870 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
10871 {
10872 op_ad = op_index[i];
10873 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
10874 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
10875 riprel = op_riprel[i];
10876 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
10877 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 10878 }
252b5132
RH
10879 }
10880 else
10881 {
ce518a5f
L
10882 for (i = 0; i < MAX_OPERANDS; ++i)
10883 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
10884 }
10885
ce518a5f
L
10886 needcomma = 0;
10887 for (i = 0; i < MAX_OPERANDS; ++i)
10888 if (*op_txt[i])
10889 {
10890 if (needcomma)
10891 (*info->fprintf_func) (info->stream, ",");
10892 if (op_index[i] != -1 && !op_riprel[i])
10893 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
10894 else
10895 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
10896 needcomma = 1;
10897 }
050dfa73 10898
ce518a5f 10899 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
10900 if (op_index[i] != -1 && op_riprel[i])
10901 {
10902 (*info->fprintf_func) (info->stream, " # ");
10903 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
10904 + op_address[op_index[i]]), info);
185b1163 10905 break;
52b15da3 10906 }
e396998b 10907 return codep - priv.the_buffer;
252b5132
RH
10908}
10909
6439fc28 10910static const char *float_mem[] = {
252b5132 10911 /* d8 */
7c52e0e8
L
10912 "fadd{s|}",
10913 "fmul{s|}",
10914 "fcom{s|}",
10915 "fcomp{s|}",
10916 "fsub{s|}",
10917 "fsubr{s|}",
10918 "fdiv{s|}",
10919 "fdivr{s|}",
db6eb5be 10920 /* d9 */
7c52e0e8 10921 "fld{s|}",
252b5132 10922 "(bad)",
7c52e0e8
L
10923 "fst{s|}",
10924 "fstp{s|}",
9306ca4a 10925 "fldenvIC",
252b5132 10926 "fldcw",
9306ca4a 10927 "fNstenvIC",
252b5132
RH
10928 "fNstcw",
10929 /* da */
7c52e0e8
L
10930 "fiadd{l|}",
10931 "fimul{l|}",
10932 "ficom{l|}",
10933 "ficomp{l|}",
10934 "fisub{l|}",
10935 "fisubr{l|}",
10936 "fidiv{l|}",
10937 "fidivr{l|}",
252b5132 10938 /* db */
7c52e0e8
L
10939 "fild{l|}",
10940 "fisttp{l|}",
10941 "fist{l|}",
10942 "fistp{l|}",
252b5132 10943 "(bad)",
6439fc28 10944 "fld{t||t|}",
252b5132 10945 "(bad)",
6439fc28 10946 "fstp{t||t|}",
252b5132 10947 /* dc */
7c52e0e8
L
10948 "fadd{l|}",
10949 "fmul{l|}",
10950 "fcom{l|}",
10951 "fcomp{l|}",
10952 "fsub{l|}",
10953 "fsubr{l|}",
10954 "fdiv{l|}",
10955 "fdivr{l|}",
252b5132 10956 /* dd */
7c52e0e8
L
10957 "fld{l|}",
10958 "fisttp{ll|}",
10959 "fst{l||}",
10960 "fstp{l|}",
9306ca4a 10961 "frstorIC",
252b5132 10962 "(bad)",
9306ca4a 10963 "fNsaveIC",
252b5132
RH
10964 "fNstsw",
10965 /* de */
10966 "fiadd",
10967 "fimul",
10968 "ficom",
10969 "ficomp",
10970 "fisub",
10971 "fisubr",
10972 "fidiv",
10973 "fidivr",
10974 /* df */
10975 "fild",
ca164297 10976 "fisttp",
252b5132
RH
10977 "fist",
10978 "fistp",
10979 "fbld",
7c52e0e8 10980 "fild{ll|}",
252b5132 10981 "fbstp",
7c52e0e8 10982 "fistp{ll|}",
1d9f512f
AM
10983};
10984
10985static const unsigned char float_mem_mode[] = {
10986 /* d8 */
10987 d_mode,
10988 d_mode,
10989 d_mode,
10990 d_mode,
10991 d_mode,
10992 d_mode,
10993 d_mode,
10994 d_mode,
10995 /* d9 */
10996 d_mode,
10997 0,
10998 d_mode,
10999 d_mode,
11000 0,
11001 w_mode,
11002 0,
11003 w_mode,
11004 /* da */
11005 d_mode,
11006 d_mode,
11007 d_mode,
11008 d_mode,
11009 d_mode,
11010 d_mode,
11011 d_mode,
11012 d_mode,
11013 /* db */
11014 d_mode,
11015 d_mode,
11016 d_mode,
11017 d_mode,
11018 0,
9306ca4a 11019 t_mode,
1d9f512f 11020 0,
9306ca4a 11021 t_mode,
1d9f512f
AM
11022 /* dc */
11023 q_mode,
11024 q_mode,
11025 q_mode,
11026 q_mode,
11027 q_mode,
11028 q_mode,
11029 q_mode,
11030 q_mode,
11031 /* dd */
11032 q_mode,
11033 q_mode,
11034 q_mode,
11035 q_mode,
11036 0,
11037 0,
11038 0,
11039 w_mode,
11040 /* de */
11041 w_mode,
11042 w_mode,
11043 w_mode,
11044 w_mode,
11045 w_mode,
11046 w_mode,
11047 w_mode,
11048 w_mode,
11049 /* df */
11050 w_mode,
11051 w_mode,
11052 w_mode,
11053 w_mode,
9306ca4a 11054 t_mode,
1d9f512f 11055 q_mode,
9306ca4a 11056 t_mode,
1d9f512f 11057 q_mode
252b5132
RH
11058};
11059
ce518a5f
L
11060#define ST { OP_ST, 0 }
11061#define STi { OP_STi, 0 }
252b5132 11062
4efba78c
L
11063#define FGRPd9_2 NULL, { { NULL, 0 } }
11064#define FGRPd9_4 NULL, { { NULL, 1 } }
11065#define FGRPd9_5 NULL, { { NULL, 2 } }
11066#define FGRPd9_6 NULL, { { NULL, 3 } }
11067#define FGRPd9_7 NULL, { { NULL, 4 } }
11068#define FGRPda_5 NULL, { { NULL, 5 } }
11069#define FGRPdb_4 NULL, { { NULL, 6 } }
11070#define FGRPde_3 NULL, { { NULL, 7 } }
11071#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11072
2da11e11 11073static const struct dis386 float_reg[][8] = {
252b5132
RH
11074 /* d8 */
11075 {
ce518a5f
L
11076 { "fadd", { ST, STi } },
11077 { "fmul", { ST, STi } },
11078 { "fcom", { STi } },
11079 { "fcomp", { STi } },
11080 { "fsub", { ST, STi } },
11081 { "fsubr", { ST, STi } },
11082 { "fdiv", { ST, STi } },
11083 { "fdivr", { ST, STi } },
252b5132
RH
11084 },
11085 /* d9 */
11086 {
ce518a5f
L
11087 { "fld", { STi } },
11088 { "fxch", { STi } },
252b5132 11089 { FGRPd9_2 },
ce518a5f 11090 { "(bad)", { XX } },
252b5132
RH
11091 { FGRPd9_4 },
11092 { FGRPd9_5 },
11093 { FGRPd9_6 },
11094 { FGRPd9_7 },
11095 },
11096 /* da */
11097 {
ce518a5f
L
11098 { "fcmovb", { ST, STi } },
11099 { "fcmove", { ST, STi } },
11100 { "fcmovbe",{ ST, STi } },
11101 { "fcmovu", { ST, STi } },
11102 { "(bad)", { XX } },
252b5132 11103 { FGRPda_5 },
ce518a5f
L
11104 { "(bad)", { XX } },
11105 { "(bad)", { XX } },
252b5132
RH
11106 },
11107 /* db */
11108 {
ce518a5f
L
11109 { "fcmovnb",{ ST, STi } },
11110 { "fcmovne",{ ST, STi } },
11111 { "fcmovnbe",{ ST, STi } },
11112 { "fcmovnu",{ ST, STi } },
252b5132 11113 { FGRPdb_4 },
ce518a5f
L
11114 { "fucomi", { ST, STi } },
11115 { "fcomi", { ST, STi } },
11116 { "(bad)", { XX } },
252b5132
RH
11117 },
11118 /* dc */
11119 {
ce518a5f
L
11120 { "fadd", { STi, ST } },
11121 { "fmul", { STi, ST } },
11122 { "(bad)", { XX } },
11123 { "(bad)", { XX } },
9d141669
L
11124 { "fsub!M", { STi, ST } },
11125 { "fsubM", { STi, ST } },
11126 { "fdiv!M", { STi, ST } },
11127 { "fdivM", { STi, ST } },
252b5132
RH
11128 },
11129 /* dd */
11130 {
ce518a5f
L
11131 { "ffree", { STi } },
11132 { "(bad)", { XX } },
11133 { "fst", { STi } },
11134 { "fstp", { STi } },
11135 { "fucom", { STi } },
11136 { "fucomp", { STi } },
11137 { "(bad)", { XX } },
11138 { "(bad)", { XX } },
252b5132
RH
11139 },
11140 /* de */
11141 {
ce518a5f
L
11142 { "faddp", { STi, ST } },
11143 { "fmulp", { STi, ST } },
11144 { "(bad)", { XX } },
252b5132 11145 { FGRPde_3 },
9d141669
L
11146 { "fsub!Mp", { STi, ST } },
11147 { "fsubMp", { STi, ST } },
11148 { "fdiv!Mp", { STi, ST } },
11149 { "fdivMp", { STi, ST } },
252b5132
RH
11150 },
11151 /* df */
11152 {
ce518a5f
L
11153 { "ffreep", { STi } },
11154 { "(bad)", { XX } },
11155 { "(bad)", { XX } },
11156 { "(bad)", { XX } },
252b5132 11157 { FGRPdf_4 },
ce518a5f
L
11158 { "fucomip", { ST, STi } },
11159 { "fcomip", { ST, STi } },
11160 { "(bad)", { XX } },
252b5132
RH
11161 },
11162};
11163
252b5132
RH
11164static char *fgrps[][8] = {
11165 /* d9_2 0 */
11166 {
11167 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11168 },
11169
11170 /* d9_4 1 */
11171 {
11172 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11173 },
11174
11175 /* d9_5 2 */
11176 {
11177 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11178 },
11179
11180 /* d9_6 3 */
11181 {
11182 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11183 },
11184
11185 /* d9_7 4 */
11186 {
11187 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11188 },
11189
11190 /* da_5 5 */
11191 {
11192 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11193 },
11194
11195 /* db_4 6 */
11196 {
309d3373
JB
11197 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11198 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11199 },
11200
11201 /* de_3 7 */
11202 {
11203 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11204 },
11205
11206 /* df_4 8 */
11207 {
11208 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11209 },
11210};
11211
b6169b20
L
11212static void
11213swap_operand (void)
11214{
11215 mnemonicendp[0] = '.';
11216 mnemonicendp[1] = 's';
11217 mnemonicendp += 2;
11218}
11219
b844680a
L
11220static void
11221OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
11222 int sizeflag ATTRIBUTE_UNUSED)
11223{
11224 /* Skip mod/rm byte. */
11225 MODRM_CHECK;
11226 codep++;
11227}
11228
252b5132 11229static void
26ca5450 11230dofloat (int sizeflag)
252b5132 11231{
2da11e11 11232 const struct dis386 *dp;
252b5132
RH
11233 unsigned char floatop;
11234
11235 floatop = codep[-1];
11236
7967e09e 11237 if (modrm.mod != 3)
252b5132 11238 {
7967e09e 11239 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
11240
11241 putop (float_mem[fp_indx], sizeflag);
ce518a5f 11242 obufp = op_out[0];
6e50d963 11243 op_ad = 2;
1d9f512f 11244 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
11245 return;
11246 }
6608db57 11247 /* Skip mod/rm byte. */
4bba6815 11248 MODRM_CHECK;
252b5132
RH
11249 codep++;
11250
7967e09e 11251 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
11252 if (dp->name == NULL)
11253 {
7967e09e 11254 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 11255
6608db57 11256 /* Instruction fnstsw is only one with strange arg. */
252b5132 11257 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 11258 strcpy (op_out[0], names16[0]);
252b5132
RH
11259 }
11260 else
11261 {
11262 putop (dp->name, sizeflag);
11263
ce518a5f 11264 obufp = op_out[0];
6e50d963 11265 op_ad = 2;
ce518a5f
L
11266 if (dp->op[0].rtn)
11267 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 11268
ce518a5f 11269 obufp = op_out[1];
6e50d963 11270 op_ad = 1;
ce518a5f
L
11271 if (dp->op[1].rtn)
11272 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
11273 }
11274}
11275
252b5132 11276static void
26ca5450 11277OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11278{
422673a9 11279 oappend ("%st" + intel_syntax);
252b5132
RH
11280}
11281
252b5132 11282static void
26ca5450 11283OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 11284{
7967e09e 11285 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 11286 oappend (scratchbuf + intel_syntax);
252b5132
RH
11287}
11288
6608db57 11289/* Capital letters in template are macros. */
6439fc28 11290static int
d3ce72d0 11291putop (const char *in_template, int sizeflag)
252b5132 11292{
2da11e11 11293 const char *p;
9306ca4a 11294 int alt = 0;
9d141669 11295 int cond = 1;
98b528ac
L
11296 unsigned int l = 0, len = 1;
11297 char last[4];
11298
11299#define SAVE_LAST(c) \
11300 if (l < len && l < sizeof (last)) \
11301 last[l++] = c; \
11302 else \
11303 abort ();
252b5132 11304
d3ce72d0 11305 for (p = in_template; *p; p++)
252b5132
RH
11306 {
11307 switch (*p)
11308 {
11309 default:
11310 *obufp++ = *p;
11311 break;
98b528ac
L
11312 case '%':
11313 len++;
11314 break;
9d141669
L
11315 case '!':
11316 cond = 0;
11317 break;
6439fc28
AM
11318 case '{':
11319 alt = 0;
11320 if (intel_syntax)
6439fc28
AM
11321 {
11322 while (*++p != '|')
7c52e0e8
L
11323 if (*p == '}' || *p == '\0')
11324 abort ();
6439fc28 11325 }
9306ca4a
JB
11326 /* Fall through. */
11327 case 'I':
11328 alt = 1;
11329 continue;
6439fc28
AM
11330 case '|':
11331 while (*++p != '}')
11332 {
11333 if (*p == '\0')
11334 abort ();
11335 }
11336 break;
11337 case '}':
11338 break;
252b5132 11339 case 'A':
db6eb5be
AM
11340 if (intel_syntax)
11341 break;
7967e09e 11342 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
11343 *obufp++ = 'b';
11344 break;
11345 case 'B':
4b06377f
L
11346 if (l == 0 && len == 1)
11347 {
11348case_B:
11349 if (intel_syntax)
11350 break;
11351 if (sizeflag & SUFFIX_ALWAYS)
11352 *obufp++ = 'b';
11353 }
11354 else
11355 {
11356 if (l != 1
11357 || len != 2
11358 || last[0] != 'L')
11359 {
11360 SAVE_LAST (*p);
11361 break;
11362 }
11363
11364 if (address_mode == mode_64bit
11365 && !(prefixes & PREFIX_ADDR))
11366 {
11367 *obufp++ = 'a';
11368 *obufp++ = 'b';
11369 *obufp++ = 's';
11370 }
11371
11372 goto case_B;
11373 }
252b5132 11374 break;
9306ca4a
JB
11375 case 'C':
11376 if (intel_syntax && !alt)
11377 break;
11378 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
11379 {
11380 if (sizeflag & DFLAG)
11381 *obufp++ = intel_syntax ? 'd' : 'l';
11382 else
11383 *obufp++ = intel_syntax ? 'w' : 's';
11384 used_prefixes |= (prefixes & PREFIX_DATA);
11385 }
11386 break;
ed7841b3
JB
11387 case 'D':
11388 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
11389 break;
161a04f6 11390 USED_REX (REX_W);
7967e09e 11391 if (modrm.mod == 3)
ed7841b3 11392 {
161a04f6 11393 if (rex & REX_W)
ed7841b3 11394 *obufp++ = 'q';
ed7841b3 11395 else
f16cd0d5
L
11396 {
11397 if (sizeflag & DFLAG)
11398 *obufp++ = intel_syntax ? 'd' : 'l';
11399 else
11400 *obufp++ = 'w';
11401 used_prefixes |= (prefixes & PREFIX_DATA);
11402 }
ed7841b3
JB
11403 }
11404 else
11405 *obufp++ = 'w';
11406 break;
252b5132 11407 case 'E': /* For jcxz/jecxz */
cb712a9e 11408 if (address_mode == mode_64bit)
c1a64871
JH
11409 {
11410 if (sizeflag & AFLAG)
11411 *obufp++ = 'r';
11412 else
11413 *obufp++ = 'e';
11414 }
11415 else
11416 if (sizeflag & AFLAG)
11417 *obufp++ = 'e';
3ffd33cf
AM
11418 used_prefixes |= (prefixes & PREFIX_ADDR);
11419 break;
11420 case 'F':
db6eb5be
AM
11421 if (intel_syntax)
11422 break;
e396998b 11423 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
11424 {
11425 if (sizeflag & AFLAG)
cb712a9e 11426 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 11427 else
cb712a9e 11428 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
11429 used_prefixes |= (prefixes & PREFIX_ADDR);
11430 }
252b5132 11431 break;
52fd6d94
JB
11432 case 'G':
11433 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
11434 break;
161a04f6 11435 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
11436 *obufp++ = 'l';
11437 else
11438 *obufp++ = 'w';
161a04f6 11439 if (!(rex & REX_W))
52fd6d94
JB
11440 used_prefixes |= (prefixes & PREFIX_DATA);
11441 break;
5dd0794d 11442 case 'H':
db6eb5be
AM
11443 if (intel_syntax)
11444 break;
5dd0794d
AM
11445 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
11446 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
11447 {
11448 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
11449 *obufp++ = ',';
11450 *obufp++ = 'p';
11451 if (prefixes & PREFIX_DS)
11452 *obufp++ = 't';
11453 else
11454 *obufp++ = 'n';
11455 }
11456 break;
9306ca4a
JB
11457 case 'J':
11458 if (intel_syntax)
11459 break;
11460 *obufp++ = 'l';
11461 break;
42903f7f
L
11462 case 'K':
11463 USED_REX (REX_W);
11464 if (rex & REX_W)
11465 *obufp++ = 'q';
11466 else
11467 *obufp++ = 'd';
11468 break;
6dd5059a
L
11469 case 'Z':
11470 if (intel_syntax)
11471 break;
11472 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
11473 {
11474 *obufp++ = 'q';
11475 break;
11476 }
11477 /* Fall through. */
98b528ac 11478 goto case_L;
252b5132 11479 case 'L':
98b528ac
L
11480 if (l != 0 || len != 1)
11481 {
11482 SAVE_LAST (*p);
11483 break;
11484 }
11485case_L:
db6eb5be
AM
11486 if (intel_syntax)
11487 break;
252b5132
RH
11488 if (sizeflag & SUFFIX_ALWAYS)
11489 *obufp++ = 'l';
252b5132 11490 break;
9d141669
L
11491 case 'M':
11492 if (intel_mnemonic != cond)
11493 *obufp++ = 'r';
11494 break;
252b5132
RH
11495 case 'N':
11496 if ((prefixes & PREFIX_FWAIT) == 0)
11497 *obufp++ = 'n';
7d421014
ILT
11498 else
11499 used_prefixes |= PREFIX_FWAIT;
252b5132 11500 break;
52b15da3 11501 case 'O':
161a04f6
L
11502 USED_REX (REX_W);
11503 if (rex & REX_W)
6439fc28 11504 *obufp++ = 'o';
a35ca55a
JB
11505 else if (intel_syntax && (sizeflag & DFLAG))
11506 *obufp++ = 'q';
52b15da3
JH
11507 else
11508 *obufp++ = 'd';
161a04f6 11509 if (!(rex & REX_W))
a35ca55a 11510 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 11511 break;
6439fc28 11512 case 'T':
db6eb5be
AM
11513 if (intel_syntax)
11514 break;
cb712a9e 11515 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
11516 {
11517 *obufp++ = 'q';
11518 break;
11519 }
6608db57 11520 /* Fall through. */
252b5132 11521 case 'P':
db6eb5be
AM
11522 if (intel_syntax)
11523 break;
252b5132 11524 if ((prefixes & PREFIX_DATA)
161a04f6 11525 || (rex & REX_W)
e396998b 11526 || (sizeflag & SUFFIX_ALWAYS))
252b5132 11527 {
161a04f6
L
11528 USED_REX (REX_W);
11529 if (rex & REX_W)
52b15da3 11530 *obufp++ = 'q';
c2419411 11531 else
52b15da3
JH
11532 {
11533 if (sizeflag & DFLAG)
11534 *obufp++ = 'l';
11535 else
11536 *obufp++ = 'w';
f16cd0d5 11537 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 11538 }
252b5132
RH
11539 }
11540 break;
6439fc28 11541 case 'U':
db6eb5be
AM
11542 if (intel_syntax)
11543 break;
cb712a9e 11544 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 11545 {
7967e09e 11546 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 11547 *obufp++ = 'q';
6439fc28
AM
11548 break;
11549 }
6608db57 11550 /* Fall through. */
98b528ac 11551 goto case_Q;
252b5132 11552 case 'Q':
98b528ac 11553 if (l == 0 && len == 1)
252b5132 11554 {
98b528ac
L
11555case_Q:
11556 if (intel_syntax && !alt)
11557 break;
11558 USED_REX (REX_W);
11559 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 11560 {
98b528ac
L
11561 if (rex & REX_W)
11562 *obufp++ = 'q';
52b15da3 11563 else
98b528ac
L
11564 {
11565 if (sizeflag & DFLAG)
11566 *obufp++ = intel_syntax ? 'd' : 'l';
11567 else
11568 *obufp++ = 'w';
f16cd0d5 11569 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 11570 }
52b15da3 11571 }
98b528ac
L
11572 }
11573 else
11574 {
11575 if (l != 1 || len != 2 || last[0] != 'L')
11576 {
11577 SAVE_LAST (*p);
11578 break;
11579 }
11580 if (intel_syntax
11581 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
11582 break;
11583 if ((rex & REX_W))
11584 {
11585 USED_REX (REX_W);
11586 *obufp++ = 'q';
11587 }
11588 else
11589 *obufp++ = 'l';
252b5132
RH
11590 }
11591 break;
11592 case 'R':
161a04f6
L
11593 USED_REX (REX_W);
11594 if (rex & REX_W)
a35ca55a
JB
11595 *obufp++ = 'q';
11596 else if (sizeflag & DFLAG)
c608c12e 11597 {
a35ca55a 11598 if (intel_syntax)
c608c12e 11599 *obufp++ = 'd';
c608c12e 11600 else
a35ca55a 11601 *obufp++ = 'l';
c608c12e 11602 }
252b5132 11603 else
a35ca55a
JB
11604 *obufp++ = 'w';
11605 if (intel_syntax && !p[1]
161a04f6 11606 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 11607 *obufp++ = 'e';
161a04f6 11608 if (!(rex & REX_W))
52b15da3 11609 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 11610 break;
1a114b12 11611 case 'V':
4b06377f 11612 if (l == 0 && len == 1)
1a114b12 11613 {
4b06377f
L
11614 if (intel_syntax)
11615 break;
11616 if (address_mode == mode_64bit && (sizeflag & DFLAG))
11617 {
11618 if (sizeflag & SUFFIX_ALWAYS)
11619 *obufp++ = 'q';
11620 break;
11621 }
11622 }
11623 else
11624 {
11625 if (l != 1
11626 || len != 2
11627 || last[0] != 'L')
11628 {
11629 SAVE_LAST (*p);
11630 break;
11631 }
11632
11633 if (rex & REX_W)
11634 {
11635 *obufp++ = 'a';
11636 *obufp++ = 'b';
11637 *obufp++ = 's';
11638 }
1a114b12
JB
11639 }
11640 /* Fall through. */
4b06377f 11641 goto case_S;
252b5132 11642 case 'S':
4b06377f 11643 if (l == 0 && len == 1)
252b5132 11644 {
4b06377f
L
11645case_S:
11646 if (intel_syntax)
11647 break;
11648 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 11649 {
4b06377f
L
11650 if (rex & REX_W)
11651 *obufp++ = 'q';
52b15da3 11652 else
4b06377f
L
11653 {
11654 if (sizeflag & DFLAG)
11655 *obufp++ = 'l';
11656 else
11657 *obufp++ = 'w';
11658 used_prefixes |= (prefixes & PREFIX_DATA);
11659 }
11660 }
11661 }
11662 else
11663 {
11664 if (l != 1
11665 || len != 2
11666 || last[0] != 'L')
11667 {
11668 SAVE_LAST (*p);
11669 break;
52b15da3 11670 }
4b06377f
L
11671
11672 if (address_mode == mode_64bit
11673 && !(prefixes & PREFIX_ADDR))
11674 {
11675 *obufp++ = 'a';
11676 *obufp++ = 'b';
11677 *obufp++ = 's';
11678 }
11679
11680 goto case_S;
252b5132 11681 }
252b5132 11682 break;
041bd2e0 11683 case 'X':
c0f3af97
L
11684 if (l != 0 || len != 1)
11685 {
11686 SAVE_LAST (*p);
11687 break;
11688 }
11689 if (need_vex && vex.prefix)
11690 {
11691 if (vex.prefix == DATA_PREFIX_OPCODE)
11692 *obufp++ = 'd';
11693 else
11694 *obufp++ = 's';
11695 }
041bd2e0 11696 else
f16cd0d5
L
11697 {
11698 if (prefixes & PREFIX_DATA)
11699 *obufp++ = 'd';
11700 else
11701 *obufp++ = 's';
11702 used_prefixes |= (prefixes & PREFIX_DATA);
11703 }
041bd2e0 11704 break;
76f227a5 11705 case 'Y':
c0f3af97 11706 if (l == 0 && len == 1)
76f227a5 11707 {
c0f3af97
L
11708 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
11709 break;
11710 if (rex & REX_W)
11711 {
11712 USED_REX (REX_W);
11713 *obufp++ = 'q';
11714 }
11715 break;
11716 }
11717 else
11718 {
11719 if (l != 1 || len != 2 || last[0] != 'X')
11720 {
11721 SAVE_LAST (*p);
11722 break;
11723 }
11724 if (!need_vex)
11725 abort ();
11726 if (intel_syntax
11727 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
11728 break;
11729 switch (vex.length)
11730 {
11731 case 128:
11732 *obufp++ = 'x';
11733 break;
11734 case 256:
11735 *obufp++ = 'y';
11736 break;
11737 default:
11738 abort ();
11739 }
76f227a5
JH
11740 }
11741 break;
252b5132 11742 case 'W':
0bfee649 11743 if (l == 0 && len == 1)
a35ca55a 11744 {
0bfee649
L
11745 /* operand size flag for cwtl, cbtw */
11746 USED_REX (REX_W);
11747 if (rex & REX_W)
11748 {
11749 if (intel_syntax)
11750 *obufp++ = 'd';
11751 else
11752 *obufp++ = 'l';
11753 }
11754 else if (sizeflag & DFLAG)
11755 *obufp++ = 'w';
a35ca55a 11756 else
0bfee649
L
11757 *obufp++ = 'b';
11758 if (!(rex & REX_W))
11759 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 11760 }
252b5132 11761 else
0bfee649
L
11762 {
11763 if (l != 1 || len != 2 || last[0] != 'X')
11764 {
11765 SAVE_LAST (*p);
11766 break;
11767 }
11768 if (!need_vex)
11769 abort ();
11770 *obufp++ = vex.w ? 'd': 's';
11771 }
252b5132
RH
11772 break;
11773 }
9306ca4a 11774 alt = 0;
252b5132
RH
11775 }
11776 *obufp = 0;
ea397f5b 11777 mnemonicendp = obufp;
6439fc28 11778 return 0;
252b5132
RH
11779}
11780
11781static void
26ca5450 11782oappend (const char *s)
252b5132 11783{
ea397f5b 11784 obufp = stpcpy (obufp, s);
252b5132
RH
11785}
11786
11787static void
26ca5450 11788append_seg (void)
252b5132
RH
11789{
11790 if (prefixes & PREFIX_CS)
7d421014 11791 {
7d421014 11792 used_prefixes |= PREFIX_CS;
d708bcba 11793 oappend ("%cs:" + intel_syntax);
7d421014 11794 }
252b5132 11795 if (prefixes & PREFIX_DS)
7d421014 11796 {
7d421014 11797 used_prefixes |= PREFIX_DS;
d708bcba 11798 oappend ("%ds:" + intel_syntax);
7d421014 11799 }
252b5132 11800 if (prefixes & PREFIX_SS)
7d421014 11801 {
7d421014 11802 used_prefixes |= PREFIX_SS;
d708bcba 11803 oappend ("%ss:" + intel_syntax);
7d421014 11804 }
252b5132 11805 if (prefixes & PREFIX_ES)
7d421014 11806 {
7d421014 11807 used_prefixes |= PREFIX_ES;
d708bcba 11808 oappend ("%es:" + intel_syntax);
7d421014 11809 }
252b5132 11810 if (prefixes & PREFIX_FS)
7d421014 11811 {
7d421014 11812 used_prefixes |= PREFIX_FS;
d708bcba 11813 oappend ("%fs:" + intel_syntax);
7d421014 11814 }
252b5132 11815 if (prefixes & PREFIX_GS)
7d421014 11816 {
7d421014 11817 used_prefixes |= PREFIX_GS;
d708bcba 11818 oappend ("%gs:" + intel_syntax);
7d421014 11819 }
252b5132
RH
11820}
11821
11822static void
26ca5450 11823OP_indirE (int bytemode, int sizeflag)
252b5132
RH
11824{
11825 if (!intel_syntax)
11826 oappend ("*");
11827 OP_E (bytemode, sizeflag);
11828}
11829
52b15da3 11830static void
26ca5450 11831print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 11832{
cb712a9e 11833 if (address_mode == mode_64bit)
52b15da3
JH
11834 {
11835 if (hex)
11836 {
11837 char tmp[30];
11838 int i;
11839 buf[0] = '0';
11840 buf[1] = 'x';
11841 sprintf_vma (tmp, disp);
6608db57 11842 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
11843 strcpy (buf + 2, tmp + i);
11844 }
11845 else
11846 {
11847 bfd_signed_vma v = disp;
11848 char tmp[30];
11849 int i;
11850 if (v < 0)
11851 {
11852 *(buf++) = '-';
11853 v = -disp;
6608db57 11854 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
11855 if (v < 0)
11856 {
11857 strcpy (buf, "9223372036854775808");
11858 return;
11859 }
11860 }
11861 if (!v)
11862 {
11863 strcpy (buf, "0");
11864 return;
11865 }
11866
11867 i = 0;
11868 tmp[29] = 0;
11869 while (v)
11870 {
6608db57 11871 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
11872 v /= 10;
11873 i++;
11874 }
11875 strcpy (buf, tmp + 29 - i);
11876 }
11877 }
11878 else
11879 {
11880 if (hex)
11881 sprintf (buf, "0x%x", (unsigned int) disp);
11882 else
11883 sprintf (buf, "%d", (int) disp);
11884 }
11885}
11886
5d669648
L
11887/* Put DISP in BUF as signed hex number. */
11888
11889static void
11890print_displacement (char *buf, bfd_vma disp)
11891{
11892 bfd_signed_vma val = disp;
11893 char tmp[30];
11894 int i, j = 0;
11895
11896 if (val < 0)
11897 {
11898 buf[j++] = '-';
11899 val = -disp;
11900
11901 /* Check for possible overflow. */
11902 if (val < 0)
11903 {
11904 switch (address_mode)
11905 {
11906 case mode_64bit:
11907 strcpy (buf + j, "0x8000000000000000");
11908 break;
11909 case mode_32bit:
11910 strcpy (buf + j, "0x80000000");
11911 break;
11912 case mode_16bit:
11913 strcpy (buf + j, "0x8000");
11914 break;
11915 }
11916 return;
11917 }
11918 }
11919
11920 buf[j++] = '0';
11921 buf[j++] = 'x';
11922
0af1713e 11923 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
11924 for (i = 0; tmp[i] == '0'; i++)
11925 continue;
11926 if (tmp[i] == '\0')
11927 i--;
11928 strcpy (buf + j, tmp + i);
11929}
11930
3f31e633
JB
11931static void
11932intel_operand_size (int bytemode, int sizeflag)
11933{
11934 switch (bytemode)
11935 {
11936 case b_mode:
b6169b20 11937 case b_swap_mode:
42903f7f 11938 case dqb_mode:
3f31e633
JB
11939 oappend ("BYTE PTR ");
11940 break;
11941 case w_mode:
11942 case dqw_mode:
11943 oappend ("WORD PTR ");
11944 break;
1a114b12 11945 case stack_v_mode:
cb712a9e 11946 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
11947 {
11948 oappend ("QWORD PTR ");
3f31e633
JB
11949 break;
11950 }
11951 /* FALLTHRU */
11952 case v_mode:
b6169b20 11953 case v_swap_mode:
3f31e633 11954 case dq_mode:
161a04f6
L
11955 USED_REX (REX_W);
11956 if (rex & REX_W)
3f31e633 11957 oappend ("QWORD PTR ");
3f31e633 11958 else
f16cd0d5
L
11959 {
11960 if ((sizeflag & DFLAG) || bytemode == dq_mode)
11961 oappend ("DWORD PTR ");
11962 else
11963 oappend ("WORD PTR ");
11964 used_prefixes |= (prefixes & PREFIX_DATA);
11965 }
3f31e633 11966 break;
52fd6d94 11967 case z_mode:
161a04f6 11968 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
11969 *obufp++ = 'D';
11970 oappend ("WORD PTR ");
161a04f6 11971 if (!(rex & REX_W))
52fd6d94
JB
11972 used_prefixes |= (prefixes & PREFIX_DATA);
11973 break;
34b772a6
JB
11974 case a_mode:
11975 if (sizeflag & DFLAG)
11976 oappend ("QWORD PTR ");
11977 else
11978 oappend ("DWORD PTR ");
11979 used_prefixes |= (prefixes & PREFIX_DATA);
11980 break;
3f31e633 11981 case d_mode:
fa99fab2 11982 case d_swap_mode:
42903f7f 11983 case dqd_mode:
3f31e633
JB
11984 oappend ("DWORD PTR ");
11985 break;
11986 case q_mode:
b6169b20 11987 case q_swap_mode:
3f31e633
JB
11988 oappend ("QWORD PTR ");
11989 break;
11990 case m_mode:
cb712a9e 11991 if (address_mode == mode_64bit)
3f31e633
JB
11992 oappend ("QWORD PTR ");
11993 else
11994 oappend ("DWORD PTR ");
11995 break;
11996 case f_mode:
11997 if (sizeflag & DFLAG)
11998 oappend ("FWORD PTR ");
11999 else
12000 oappend ("DWORD PTR ");
12001 used_prefixes |= (prefixes & PREFIX_DATA);
12002 break;
12003 case t_mode:
12004 oappend ("TBYTE PTR ");
12005 break;
12006 case x_mode:
b6169b20 12007 case x_swap_mode:
c0f3af97
L
12008 if (need_vex)
12009 {
12010 switch (vex.length)
12011 {
12012 case 128:
12013 oappend ("XMMWORD PTR ");
12014 break;
12015 case 256:
12016 oappend ("YMMWORD PTR ");
12017 break;
12018 default:
12019 abort ();
12020 }
12021 }
12022 else
12023 oappend ("XMMWORD PTR ");
12024 break;
12025 case xmm_mode:
3f31e633
JB
12026 oappend ("XMMWORD PTR ");
12027 break;
c0f3af97
L
12028 case xmmq_mode:
12029 if (!need_vex)
12030 abort ();
12031
12032 switch (vex.length)
12033 {
12034 case 128:
12035 oappend ("QWORD PTR ");
12036 break;
12037 case 256:
12038 oappend ("XMMWORD PTR ");
12039 break;
12040 default:
12041 abort ();
12042 }
12043 break;
12044 case ymmq_mode:
12045 if (!need_vex)
12046 abort ();
12047
12048 switch (vex.length)
12049 {
12050 case 128:
12051 oappend ("QWORD PTR ");
12052 break;
12053 case 256:
12054 oappend ("YMMWORD PTR ");
12055 break;
12056 default:
12057 abort ();
12058 }
12059 break;
fb9c77c7
L
12060 case o_mode:
12061 oappend ("OWORD PTR ");
12062 break;
0bfee649
L
12063 case vex_w_dq_mode:
12064 if (!need_vex)
12065 abort ();
12066
12067 if (vex.w)
12068 oappend ("QWORD PTR ");
12069 else
12070 oappend ("DWORD PTR ");
12071 break;
3f31e633
JB
12072 default:
12073 break;
12074 }
12075}
12076
252b5132 12077static void
c0f3af97 12078OP_E_register (int bytemode, int sizeflag)
252b5132 12079{
c0f3af97
L
12080 int reg = modrm.rm;
12081 const char **names;
252b5132 12082
c0f3af97
L
12083 USED_REX (REX_B);
12084 if ((rex & REX_B))
12085 reg += 8;
252b5132 12086
b6169b20
L
12087 if ((sizeflag & SUFFIX_ALWAYS)
12088 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
12089 swap_operand ();
12090
c0f3af97 12091 switch (bytemode)
252b5132 12092 {
c0f3af97 12093 case b_mode:
b6169b20 12094 case b_swap_mode:
c0f3af97
L
12095 USED_REX (0);
12096 if (rex)
12097 names = names8rex;
12098 else
12099 names = names8;
12100 break;
12101 case w_mode:
12102 names = names16;
12103 break;
12104 case d_mode:
12105 names = names32;
12106 break;
12107 case q_mode:
12108 names = names64;
12109 break;
12110 case m_mode:
12111 names = address_mode == mode_64bit ? names64 : names32;
12112 break;
12113 case stack_v_mode:
12114 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 12115 {
c0f3af97 12116 names = names64;
252b5132 12117 break;
252b5132 12118 }
c0f3af97
L
12119 bytemode = v_mode;
12120 /* FALLTHRU */
12121 case v_mode:
b6169b20 12122 case v_swap_mode:
c0f3af97
L
12123 case dq_mode:
12124 case dqb_mode:
12125 case dqd_mode:
12126 case dqw_mode:
12127 USED_REX (REX_W);
12128 if (rex & REX_W)
12129 names = names64;
c0f3af97 12130 else
f16cd0d5
L
12131 {
12132 if ((sizeflag & DFLAG)
12133 || (bytemode != v_mode
12134 && bytemode != v_swap_mode))
12135 names = names32;
12136 else
12137 names = names16;
12138 used_prefixes |= (prefixes & PREFIX_DATA);
12139 }
c0f3af97
L
12140 break;
12141 case 0:
12142 return;
12143 default:
12144 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
12145 return;
12146 }
c0f3af97
L
12147 oappend (names[reg]);
12148}
12149
12150static void
c1e679ec 12151OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
12152{
12153 bfd_vma disp = 0;
12154 int add = (rex & REX_B) ? 8 : 0;
12155 int riprel = 0;
252b5132 12156
c0f3af97 12157 USED_REX (REX_B);
3f31e633
JB
12158 if (intel_syntax)
12159 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12160 append_seg ();
12161
5d669648 12162 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 12163 {
5d669648
L
12164 /* 32/64 bit address mode */
12165 int havedisp;
252b5132
RH
12166 int havesib;
12167 int havebase;
0f7da397 12168 int haveindex;
20afcfb7 12169 int needindex;
82c18208 12170 int base, rbase;
252b5132
RH
12171 int index = 0;
12172 int scale = 0;
12173
12174 havesib = 0;
12175 havebase = 1;
0f7da397 12176 haveindex = 0;
7967e09e 12177 base = modrm.rm;
252b5132
RH
12178
12179 if (base == 4)
12180 {
12181 havesib = 1;
12182 FETCH_DATA (the_info, codep + 1);
252b5132 12183 index = (*codep >> 3) & 7;
db51cc60 12184 scale = (*codep >> 6) & 3;
252b5132 12185 base = *codep & 7;
161a04f6
L
12186 USED_REX (REX_X);
12187 if (rex & REX_X)
52b15da3 12188 index += 8;
0f7da397 12189 haveindex = index != 4;
252b5132
RH
12190 codep++;
12191 }
82c18208 12192 rbase = base + add;
252b5132 12193
7967e09e 12194 switch (modrm.mod)
252b5132
RH
12195 {
12196 case 0:
82c18208 12197 if (base == 5)
252b5132
RH
12198 {
12199 havebase = 0;
cb712a9e 12200 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
12201 riprel = 1;
12202 disp = get32s ();
252b5132
RH
12203 }
12204 break;
12205 case 1:
12206 FETCH_DATA (the_info, codep + 1);
12207 disp = *codep++;
12208 if ((disp & 0x80) != 0)
12209 disp -= 0x100;
12210 break;
12211 case 2:
52b15da3 12212 disp = get32s ();
252b5132
RH
12213 break;
12214 }
12215
20afcfb7
L
12216 /* In 32bit mode, we need index register to tell [offset] from
12217 [eiz*1 + offset]. */
12218 needindex = (havesib
12219 && !havebase
12220 && !haveindex
12221 && address_mode == mode_32bit);
12222 havedisp = (havebase
12223 || needindex
12224 || (havesib && (haveindex || scale != 0)));
5d669648 12225
252b5132 12226 if (!intel_syntax)
82c18208 12227 if (modrm.mod != 0 || base == 5)
db6eb5be 12228 {
5d669648
L
12229 if (havedisp || riprel)
12230 print_displacement (scratchbuf, disp);
12231 else
12232 print_operand_value (scratchbuf, 1, disp);
db6eb5be 12233 oappend (scratchbuf);
52b15da3
JH
12234 if (riprel)
12235 {
12236 set_op (disp, 1);
87767711 12237 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 12238 }
db6eb5be 12239 }
2da11e11 12240
87767711
JB
12241 if (havebase || haveindex || riprel)
12242 used_prefixes |= PREFIX_ADDR;
12243
5d669648 12244 if (havedisp || (intel_syntax && riprel))
252b5132 12245 {
252b5132 12246 *obufp++ = open_char;
52b15da3 12247 if (intel_syntax && riprel)
185b1163
L
12248 {
12249 set_op (disp, 1);
87767711 12250 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 12251 }
db6eb5be 12252 *obufp = '\0';
252b5132 12253 if (havebase)
cb712a9e 12254 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 12255 ? names64[rbase] : names32[rbase]);
252b5132
RH
12256 if (havesib)
12257 {
db51cc60
L
12258 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
12259 print index to tell base + index from base. */
12260 if (scale != 0
20afcfb7 12261 || needindex
db51cc60
L
12262 || haveindex
12263 || (havebase && base != ESP_REG_NUM))
252b5132 12264 {
9306ca4a 12265 if (!intel_syntax || havebase)
db6eb5be 12266 {
9306ca4a
JB
12267 *obufp++ = separator_char;
12268 *obufp = '\0';
db6eb5be 12269 }
db51cc60
L
12270 if (haveindex)
12271 oappend (address_mode == mode_64bit
12272 && (sizeflag & AFLAG)
12273 ? names64[index] : names32[index]);
12274 else
12275 oappend (address_mode == mode_64bit
12276 && (sizeflag & AFLAG)
12277 ? index64 : index32);
12278
db6eb5be
AM
12279 *obufp++ = scale_char;
12280 *obufp = '\0';
12281 sprintf (scratchbuf, "%d", 1 << scale);
12282 oappend (scratchbuf);
12283 }
252b5132 12284 }
185b1163 12285 if (intel_syntax
82c18208 12286 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 12287 {
db51cc60 12288 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
12289 {
12290 *obufp++ = '+';
12291 *obufp = '\0';
12292 }
05203043 12293 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
12294 {
12295 *obufp++ = '-';
12296 *obufp = '\0';
12297 disp = - (bfd_signed_vma) disp;
12298 }
12299
db51cc60
L
12300 if (havedisp)
12301 print_displacement (scratchbuf, disp);
12302 else
12303 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
12304 oappend (scratchbuf);
12305 }
252b5132
RH
12306
12307 *obufp++ = close_char;
db6eb5be 12308 *obufp = '\0';
252b5132
RH
12309 }
12310 else if (intel_syntax)
db6eb5be 12311 {
82c18208 12312 if (modrm.mod != 0 || base == 5)
db6eb5be 12313 {
252b5132
RH
12314 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
12315 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
12316 ;
12317 else
12318 {
d708bcba 12319 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
12320 oappend (":");
12321 }
52b15da3 12322 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
12323 oappend (scratchbuf);
12324 }
12325 }
252b5132
RH
12326 }
12327 else
f16cd0d5
L
12328 {
12329 /* 16 bit address mode */
12330 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 12331 switch (modrm.mod)
252b5132
RH
12332 {
12333 case 0:
7967e09e 12334 if (modrm.rm == 6)
252b5132
RH
12335 {
12336 disp = get16 ();
12337 if ((disp & 0x8000) != 0)
12338 disp -= 0x10000;
12339 }
12340 break;
12341 case 1:
12342 FETCH_DATA (the_info, codep + 1);
12343 disp = *codep++;
12344 if ((disp & 0x80) != 0)
12345 disp -= 0x100;
12346 break;
12347 case 2:
12348 disp = get16 ();
12349 if ((disp & 0x8000) != 0)
12350 disp -= 0x10000;
12351 break;
12352 }
12353
12354 if (!intel_syntax)
7967e09e 12355 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 12356 {
5d669648 12357 print_displacement (scratchbuf, disp);
db6eb5be
AM
12358 oappend (scratchbuf);
12359 }
252b5132 12360
7967e09e 12361 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
12362 {
12363 *obufp++ = open_char;
db6eb5be 12364 *obufp = '\0';
7967e09e 12365 oappend (index16[modrm.rm]);
5d669648
L
12366 if (intel_syntax
12367 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 12368 {
5d669648 12369 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
12370 {
12371 *obufp++ = '+';
12372 *obufp = '\0';
12373 }
7967e09e 12374 else if (modrm.mod != 1)
3d456fa1
JB
12375 {
12376 *obufp++ = '-';
12377 *obufp = '\0';
12378 disp = - (bfd_signed_vma) disp;
12379 }
12380
5d669648 12381 print_displacement (scratchbuf, disp);
3d456fa1
JB
12382 oappend (scratchbuf);
12383 }
12384
db6eb5be
AM
12385 *obufp++ = close_char;
12386 *obufp = '\0';
252b5132 12387 }
3d456fa1
JB
12388 else if (intel_syntax)
12389 {
12390 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
12391 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
12392 ;
12393 else
12394 {
12395 oappend (names_seg[ds_reg - es_reg]);
12396 oappend (":");
12397 }
12398 print_operand_value (scratchbuf, 1, disp & 0xffff);
12399 oappend (scratchbuf);
12400 }
252b5132
RH
12401 }
12402}
12403
c0f3af97 12404static void
8b3f93e7 12405OP_E (int bytemode, int sizeflag)
c0f3af97
L
12406{
12407 /* Skip mod/rm byte. */
12408 MODRM_CHECK;
12409 codep++;
12410
12411 if (modrm.mod == 3)
12412 OP_E_register (bytemode, sizeflag);
12413 else
c1e679ec 12414 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
12415}
12416
252b5132 12417static void
26ca5450 12418OP_G (int bytemode, int sizeflag)
252b5132 12419{
52b15da3 12420 int add = 0;
161a04f6
L
12421 USED_REX (REX_R);
12422 if (rex & REX_R)
52b15da3 12423 add += 8;
252b5132
RH
12424 switch (bytemode)
12425 {
12426 case b_mode:
52b15da3
JH
12427 USED_REX (0);
12428 if (rex)
7967e09e 12429 oappend (names8rex[modrm.reg + add]);
52b15da3 12430 else
7967e09e 12431 oappend (names8[modrm.reg + add]);
252b5132
RH
12432 break;
12433 case w_mode:
7967e09e 12434 oappend (names16[modrm.reg + add]);
252b5132
RH
12435 break;
12436 case d_mode:
7967e09e 12437 oappend (names32[modrm.reg + add]);
52b15da3
JH
12438 break;
12439 case q_mode:
7967e09e 12440 oappend (names64[modrm.reg + add]);
252b5132
RH
12441 break;
12442 case v_mode:
9306ca4a 12443 case dq_mode:
42903f7f
L
12444 case dqb_mode:
12445 case dqd_mode:
9306ca4a 12446 case dqw_mode:
161a04f6
L
12447 USED_REX (REX_W);
12448 if (rex & REX_W)
7967e09e 12449 oappend (names64[modrm.reg + add]);
252b5132 12450 else
f16cd0d5
L
12451 {
12452 if ((sizeflag & DFLAG) || bytemode != v_mode)
12453 oappend (names32[modrm.reg + add]);
12454 else
12455 oappend (names16[modrm.reg + add]);
12456 used_prefixes |= (prefixes & PREFIX_DATA);
12457 }
252b5132 12458 break;
90700ea2 12459 case m_mode:
cb712a9e 12460 if (address_mode == mode_64bit)
7967e09e 12461 oappend (names64[modrm.reg + add]);
90700ea2 12462 else
7967e09e 12463 oappend (names32[modrm.reg + add]);
90700ea2 12464 break;
252b5132
RH
12465 default:
12466 oappend (INTERNAL_DISASSEMBLER_ERROR);
12467 break;
12468 }
12469}
12470
52b15da3 12471static bfd_vma
26ca5450 12472get64 (void)
52b15da3 12473{
5dd0794d 12474 bfd_vma x;
52b15da3 12475#ifdef BFD64
5dd0794d
AM
12476 unsigned int a;
12477 unsigned int b;
12478
52b15da3
JH
12479 FETCH_DATA (the_info, codep + 8);
12480 a = *codep++ & 0xff;
12481 a |= (*codep++ & 0xff) << 8;
12482 a |= (*codep++ & 0xff) << 16;
12483 a |= (*codep++ & 0xff) << 24;
5dd0794d 12484 b = *codep++ & 0xff;
52b15da3
JH
12485 b |= (*codep++ & 0xff) << 8;
12486 b |= (*codep++ & 0xff) << 16;
12487 b |= (*codep++ & 0xff) << 24;
12488 x = a + ((bfd_vma) b << 32);
12489#else
6608db57 12490 abort ();
5dd0794d 12491 x = 0;
52b15da3
JH
12492#endif
12493 return x;
12494}
12495
12496static bfd_signed_vma
26ca5450 12497get32 (void)
252b5132 12498{
52b15da3 12499 bfd_signed_vma x = 0;
252b5132
RH
12500
12501 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
12502 x = *codep++ & (bfd_signed_vma) 0xff;
12503 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
12504 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
12505 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
12506 return x;
12507}
12508
12509static bfd_signed_vma
26ca5450 12510get32s (void)
52b15da3
JH
12511{
12512 bfd_signed_vma x = 0;
12513
12514 FETCH_DATA (the_info, codep + 4);
12515 x = *codep++ & (bfd_signed_vma) 0xff;
12516 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
12517 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
12518 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
12519
12520 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
12521
252b5132
RH
12522 return x;
12523}
12524
12525static int
26ca5450 12526get16 (void)
252b5132
RH
12527{
12528 int x = 0;
12529
12530 FETCH_DATA (the_info, codep + 2);
12531 x = *codep++ & 0xff;
12532 x |= (*codep++ & 0xff) << 8;
12533 return x;
12534}
12535
12536static void
26ca5450 12537set_op (bfd_vma op, int riprel)
252b5132
RH
12538{
12539 op_index[op_ad] = op_ad;
cb712a9e 12540 if (address_mode == mode_64bit)
7081ff04
AJ
12541 {
12542 op_address[op_ad] = op;
12543 op_riprel[op_ad] = riprel;
12544 }
12545 else
12546 {
12547 /* Mask to get a 32-bit address. */
12548 op_address[op_ad] = op & 0xffffffff;
12549 op_riprel[op_ad] = riprel & 0xffffffff;
12550 }
252b5132
RH
12551}
12552
12553static void
26ca5450 12554OP_REG (int code, int sizeflag)
252b5132 12555{
2da11e11 12556 const char *s;
9b60702d 12557 int add;
161a04f6
L
12558 USED_REX (REX_B);
12559 if (rex & REX_B)
52b15da3 12560 add = 8;
9b60702d
L
12561 else
12562 add = 0;
52b15da3
JH
12563
12564 switch (code)
12565 {
52b15da3
JH
12566 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
12567 case sp_reg: case bp_reg: case si_reg: case di_reg:
12568 s = names16[code - ax_reg + add];
12569 break;
12570 case es_reg: case ss_reg: case cs_reg:
12571 case ds_reg: case fs_reg: case gs_reg:
12572 s = names_seg[code - es_reg + add];
12573 break;
12574 case al_reg: case ah_reg: case cl_reg: case ch_reg:
12575 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
12576 USED_REX (0);
12577 if (rex)
12578 s = names8rex[code - al_reg + add];
12579 else
12580 s = names8[code - al_reg];
12581 break;
6439fc28
AM
12582 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
12583 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 12584 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
12585 {
12586 s = names64[code - rAX_reg + add];
12587 break;
12588 }
12589 code += eAX_reg - rAX_reg;
6608db57 12590 /* Fall through. */
52b15da3
JH
12591 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
12592 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
12593 USED_REX (REX_W);
12594 if (rex & REX_W)
52b15da3 12595 s = names64[code - eAX_reg + add];
52b15da3 12596 else
f16cd0d5
L
12597 {
12598 if (sizeflag & DFLAG)
12599 s = names32[code - eAX_reg + add];
12600 else
12601 s = names16[code - eAX_reg + add];
12602 used_prefixes |= (prefixes & PREFIX_DATA);
12603 }
52b15da3 12604 break;
52b15da3
JH
12605 default:
12606 s = INTERNAL_DISASSEMBLER_ERROR;
12607 break;
12608 }
12609 oappend (s);
12610}
12611
12612static void
26ca5450 12613OP_IMREG (int code, int sizeflag)
52b15da3
JH
12614{
12615 const char *s;
252b5132
RH
12616
12617 switch (code)
12618 {
12619 case indir_dx_reg:
d708bcba 12620 if (intel_syntax)
52fd6d94 12621 s = "dx";
d708bcba 12622 else
db6eb5be 12623 s = "(%dx)";
252b5132
RH
12624 break;
12625 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
12626 case sp_reg: case bp_reg: case si_reg: case di_reg:
12627 s = names16[code - ax_reg];
12628 break;
12629 case es_reg: case ss_reg: case cs_reg:
12630 case ds_reg: case fs_reg: case gs_reg:
12631 s = names_seg[code - es_reg];
12632 break;
12633 case al_reg: case ah_reg: case cl_reg: case ch_reg:
12634 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
12635 USED_REX (0);
12636 if (rex)
12637 s = names8rex[code - al_reg];
12638 else
12639 s = names8[code - al_reg];
252b5132
RH
12640 break;
12641 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
12642 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
12643 USED_REX (REX_W);
12644 if (rex & REX_W)
52b15da3 12645 s = names64[code - eAX_reg];
252b5132 12646 else
f16cd0d5
L
12647 {
12648 if (sizeflag & DFLAG)
12649 s = names32[code - eAX_reg];
12650 else
12651 s = names16[code - eAX_reg];
12652 used_prefixes |= (prefixes & PREFIX_DATA);
12653 }
252b5132 12654 break;
52fd6d94 12655 case z_mode_ax_reg:
161a04f6 12656 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12657 s = *names32;
12658 else
12659 s = *names16;
161a04f6 12660 if (!(rex & REX_W))
52fd6d94
JB
12661 used_prefixes |= (prefixes & PREFIX_DATA);
12662 break;
252b5132
RH
12663 default:
12664 s = INTERNAL_DISASSEMBLER_ERROR;
12665 break;
12666 }
12667 oappend (s);
12668}
12669
12670static void
26ca5450 12671OP_I (int bytemode, int sizeflag)
252b5132 12672{
52b15da3
JH
12673 bfd_signed_vma op;
12674 bfd_signed_vma mask = -1;
252b5132
RH
12675
12676 switch (bytemode)
12677 {
12678 case b_mode:
12679 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
12680 op = *codep++;
12681 mask = 0xff;
12682 break;
12683 case q_mode:
cb712a9e 12684 if (address_mode == mode_64bit)
6439fc28
AM
12685 {
12686 op = get32s ();
12687 break;
12688 }
6608db57 12689 /* Fall through. */
252b5132 12690 case v_mode:
161a04f6
L
12691 USED_REX (REX_W);
12692 if (rex & REX_W)
52b15da3 12693 op = get32s ();
252b5132 12694 else
52b15da3 12695 {
f16cd0d5
L
12696 if (sizeflag & DFLAG)
12697 {
12698 op = get32 ();
12699 mask = 0xffffffff;
12700 }
12701 else
12702 {
12703 op = get16 ();
12704 mask = 0xfffff;
12705 }
12706 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12707 }
252b5132
RH
12708 break;
12709 case w_mode:
52b15da3 12710 mask = 0xfffff;
252b5132
RH
12711 op = get16 ();
12712 break;
9306ca4a
JB
12713 case const_1_mode:
12714 if (intel_syntax)
12715 oappend ("1");
12716 return;
252b5132
RH
12717 default:
12718 oappend (INTERNAL_DISASSEMBLER_ERROR);
12719 return;
12720 }
12721
52b15da3
JH
12722 op &= mask;
12723 scratchbuf[0] = '$';
d708bcba
AM
12724 print_operand_value (scratchbuf + 1, 1, op);
12725 oappend (scratchbuf + intel_syntax);
52b15da3
JH
12726 scratchbuf[0] = '\0';
12727}
12728
12729static void
26ca5450 12730OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
12731{
12732 bfd_signed_vma op;
12733 bfd_signed_vma mask = -1;
12734
cb712a9e 12735 if (address_mode != mode_64bit)
6439fc28
AM
12736 {
12737 OP_I (bytemode, sizeflag);
12738 return;
12739 }
12740
52b15da3
JH
12741 switch (bytemode)
12742 {
12743 case b_mode:
12744 FETCH_DATA (the_info, codep + 1);
12745 op = *codep++;
12746 mask = 0xff;
12747 break;
12748 case v_mode:
161a04f6
L
12749 USED_REX (REX_W);
12750 if (rex & REX_W)
52b15da3 12751 op = get64 ();
52b15da3
JH
12752 else
12753 {
f16cd0d5
L
12754 if (sizeflag & DFLAG)
12755 {
12756 op = get32 ();
12757 mask = 0xffffffff;
12758 }
12759 else
12760 {
12761 op = get16 ();
12762 mask = 0xfffff;
12763 }
12764 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12765 }
52b15da3
JH
12766 break;
12767 case w_mode:
12768 mask = 0xfffff;
12769 op = get16 ();
12770 break;
12771 default:
12772 oappend (INTERNAL_DISASSEMBLER_ERROR);
12773 return;
12774 }
12775
12776 op &= mask;
12777 scratchbuf[0] = '$';
d708bcba
AM
12778 print_operand_value (scratchbuf + 1, 1, op);
12779 oappend (scratchbuf + intel_syntax);
252b5132
RH
12780 scratchbuf[0] = '\0';
12781}
12782
12783static void
26ca5450 12784OP_sI (int bytemode, int sizeflag)
252b5132 12785{
52b15da3
JH
12786 bfd_signed_vma op;
12787 bfd_signed_vma mask = -1;
252b5132
RH
12788
12789 switch (bytemode)
12790 {
12791 case b_mode:
12792 FETCH_DATA (the_info, codep + 1);
12793 op = *codep++;
12794 if ((op & 0x80) != 0)
12795 op -= 0x100;
52b15da3 12796 mask = 0xffffffff;
252b5132
RH
12797 break;
12798 case v_mode:
161a04f6
L
12799 USED_REX (REX_W);
12800 if (rex & REX_W)
52b15da3 12801 op = get32s ();
252b5132
RH
12802 else
12803 {
f16cd0d5
L
12804 if (sizeflag & DFLAG)
12805 {
12806 op = get32s ();
12807 mask = 0xffffffff;
12808 }
12809 else
12810 {
12811 mask = 0xffffffff;
12812 op = get16 ();
12813 if ((op & 0x8000) != 0)
12814 op -= 0x10000;
12815 }
12816 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
12817 }
12818 break;
12819 case w_mode:
12820 op = get16 ();
52b15da3 12821 mask = 0xffffffff;
252b5132
RH
12822 if ((op & 0x8000) != 0)
12823 op -= 0x10000;
12824 break;
12825 default:
12826 oappend (INTERNAL_DISASSEMBLER_ERROR);
12827 return;
12828 }
52b15da3
JH
12829
12830 scratchbuf[0] = '$';
12831 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 12832 oappend (scratchbuf + intel_syntax);
252b5132
RH
12833}
12834
12835static void
26ca5450 12836OP_J (int bytemode, int sizeflag)
252b5132 12837{
52b15da3 12838 bfd_vma disp;
7081ff04 12839 bfd_vma mask = -1;
65ca155d 12840 bfd_vma segment = 0;
252b5132
RH
12841
12842 switch (bytemode)
12843 {
12844 case b_mode:
12845 FETCH_DATA (the_info, codep + 1);
12846 disp = *codep++;
12847 if ((disp & 0x80) != 0)
12848 disp -= 0x100;
12849 break;
12850 case v_mode:
f16cd0d5 12851 USED_REX (REX_W);
161a04f6 12852 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 12853 disp = get32s ();
252b5132
RH
12854 else
12855 {
12856 disp = get16 ();
206717e8
L
12857 if ((disp & 0x8000) != 0)
12858 disp -= 0x10000;
65ca155d
L
12859 /* In 16bit mode, address is wrapped around at 64k within
12860 the same segment. Otherwise, a data16 prefix on a jump
12861 instruction means that the pc is masked to 16 bits after
12862 the displacement is added! */
12863 mask = 0xffff;
12864 if ((prefixes & PREFIX_DATA) == 0)
12865 segment = ((start_pc + codep - start_codep)
12866 & ~((bfd_vma) 0xffff));
252b5132 12867 }
f16cd0d5
L
12868 if (!(rex & REX_W))
12869 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
12870 break;
12871 default:
12872 oappend (INTERNAL_DISASSEMBLER_ERROR);
12873 return;
12874 }
65ca155d 12875 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
12876 set_op (disp, 0);
12877 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
12878 oappend (scratchbuf);
12879}
12880
252b5132 12881static void
ed7841b3 12882OP_SEG (int bytemode, int sizeflag)
252b5132 12883{
ed7841b3 12884 if (bytemode == w_mode)
7967e09e 12885 oappend (names_seg[modrm.reg]);
ed7841b3 12886 else
7967e09e 12887 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
12888}
12889
12890static void
26ca5450 12891OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
12892{
12893 int seg, offset;
12894
c608c12e 12895 if (sizeflag & DFLAG)
252b5132 12896 {
c608c12e
AM
12897 offset = get32 ();
12898 seg = get16 ();
252b5132 12899 }
c608c12e
AM
12900 else
12901 {
12902 offset = get16 ();
12903 seg = get16 ();
12904 }
7d421014 12905 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 12906 if (intel_syntax)
3f31e633 12907 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
12908 else
12909 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 12910 oappend (scratchbuf);
252b5132
RH
12911}
12912
252b5132 12913static void
3f31e633 12914OP_OFF (int bytemode, int sizeflag)
252b5132 12915{
52b15da3 12916 bfd_vma off;
252b5132 12917
3f31e633
JB
12918 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
12919 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12920 append_seg ();
12921
cb712a9e 12922 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
12923 off = get32 ();
12924 else
12925 off = get16 ();
12926
12927 if (intel_syntax)
12928 {
12929 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 12930 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 12931 {
d708bcba 12932 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
12933 oappend (":");
12934 }
12935 }
52b15da3
JH
12936 print_operand_value (scratchbuf, 1, off);
12937 oappend (scratchbuf);
12938}
6439fc28 12939
52b15da3 12940static void
3f31e633 12941OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
12942{
12943 bfd_vma off;
12944
539e75ad
L
12945 if (address_mode != mode_64bit
12946 || (prefixes & PREFIX_ADDR))
6439fc28
AM
12947 {
12948 OP_OFF (bytemode, sizeflag);
12949 return;
12950 }
12951
3f31e633
JB
12952 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
12953 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
12954 append_seg ();
12955
6608db57 12956 off = get64 ();
52b15da3
JH
12957
12958 if (intel_syntax)
12959 {
12960 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 12961 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 12962 {
d708bcba 12963 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
12964 oappend (":");
12965 }
12966 }
12967 print_operand_value (scratchbuf, 1, off);
252b5132
RH
12968 oappend (scratchbuf);
12969}
12970
12971static void
26ca5450 12972ptr_reg (int code, int sizeflag)
252b5132 12973{
2da11e11 12974 const char *s;
d708bcba 12975
1d9f512f 12976 *obufp++ = open_char;
20f0a1fc 12977 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 12978 if (address_mode == mode_64bit)
c1a64871
JH
12979 {
12980 if (!(sizeflag & AFLAG))
db6eb5be 12981 s = names32[code - eAX_reg];
c1a64871 12982 else
db6eb5be 12983 s = names64[code - eAX_reg];
c1a64871 12984 }
52b15da3 12985 else if (sizeflag & AFLAG)
252b5132
RH
12986 s = names32[code - eAX_reg];
12987 else
12988 s = names16[code - eAX_reg];
12989 oappend (s);
1d9f512f
AM
12990 *obufp++ = close_char;
12991 *obufp = 0;
252b5132
RH
12992}
12993
12994static void
26ca5450 12995OP_ESreg (int code, int sizeflag)
252b5132 12996{
9306ca4a 12997 if (intel_syntax)
52fd6d94
JB
12998 {
12999 switch (codep[-1])
13000 {
13001 case 0x6d: /* insw/insl */
13002 intel_operand_size (z_mode, sizeflag);
13003 break;
13004 case 0xa5: /* movsw/movsl/movsq */
13005 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13006 case 0xab: /* stosw/stosl */
13007 case 0xaf: /* scasw/scasl */
13008 intel_operand_size (v_mode, sizeflag);
13009 break;
13010 default:
13011 intel_operand_size (b_mode, sizeflag);
13012 }
13013 }
d708bcba 13014 oappend ("%es:" + intel_syntax);
252b5132
RH
13015 ptr_reg (code, sizeflag);
13016}
13017
13018static void
26ca5450 13019OP_DSreg (int code, int sizeflag)
252b5132 13020{
9306ca4a 13021 if (intel_syntax)
52fd6d94
JB
13022 {
13023 switch (codep[-1])
13024 {
13025 case 0x6f: /* outsw/outsl */
13026 intel_operand_size (z_mode, sizeflag);
13027 break;
13028 case 0xa5: /* movsw/movsl/movsq */
13029 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13030 case 0xad: /* lodsw/lodsl/lodsq */
13031 intel_operand_size (v_mode, sizeflag);
13032 break;
13033 default:
13034 intel_operand_size (b_mode, sizeflag);
13035 }
13036 }
252b5132
RH
13037 if ((prefixes
13038 & (PREFIX_CS
13039 | PREFIX_DS
13040 | PREFIX_SS
13041 | PREFIX_ES
13042 | PREFIX_FS
13043 | PREFIX_GS)) == 0)
13044 prefixes |= PREFIX_DS;
6608db57 13045 append_seg ();
252b5132
RH
13046 ptr_reg (code, sizeflag);
13047}
13048
252b5132 13049static void
26ca5450 13050OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13051{
9b60702d 13052 int add;
161a04f6 13053 if (rex & REX_R)
c4a530c5 13054 {
161a04f6 13055 USED_REX (REX_R);
c4a530c5
JB
13056 add = 8;
13057 }
cb712a9e 13058 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 13059 {
f16cd0d5 13060 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
13061 used_prefixes |= PREFIX_LOCK;
13062 add = 8;
13063 }
9b60702d
L
13064 else
13065 add = 0;
7967e09e 13066 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 13067 oappend (scratchbuf + intel_syntax);
252b5132
RH
13068}
13069
252b5132 13070static void
26ca5450 13071OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13072{
9b60702d 13073 int add;
161a04f6
L
13074 USED_REX (REX_R);
13075 if (rex & REX_R)
52b15da3 13076 add = 8;
9b60702d
L
13077 else
13078 add = 0;
d708bcba 13079 if (intel_syntax)
7967e09e 13080 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 13081 else
7967e09e 13082 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
13083 oappend (scratchbuf);
13084}
13085
252b5132 13086static void
26ca5450 13087OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13088{
7967e09e 13089 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 13090 oappend (scratchbuf + intel_syntax);
252b5132
RH
13091}
13092
13093static void
6f74c397 13094OP_R (int bytemode, int sizeflag)
252b5132 13095{
7967e09e 13096 if (modrm.mod == 3)
2da11e11
AM
13097 OP_E (bytemode, sizeflag);
13098 else
6608db57 13099 BadOp ();
252b5132
RH
13100}
13101
13102static void
26ca5450 13103OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13104{
041bd2e0
JH
13105 used_prefixes |= (prefixes & PREFIX_DATA);
13106 if (prefixes & PREFIX_DATA)
20f0a1fc 13107 {
9b60702d 13108 int add;
161a04f6
L
13109 USED_REX (REX_R);
13110 if (rex & REX_R)
20f0a1fc 13111 add = 8;
9b60702d
L
13112 else
13113 add = 0;
7967e09e 13114 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
20f0a1fc 13115 }
041bd2e0 13116 else
7967e09e 13117 sprintf (scratchbuf, "%%mm%d", modrm.reg);
d708bcba 13118 oappend (scratchbuf + intel_syntax);
252b5132
RH
13119}
13120
c608c12e 13121static void
c0f3af97 13122OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 13123{
9b60702d 13124 int add;
161a04f6
L
13125 USED_REX (REX_R);
13126 if (rex & REX_R)
041bd2e0 13127 add = 8;
9b60702d
L
13128 else
13129 add = 0;
c0f3af97
L
13130 if (need_vex && bytemode != xmm_mode)
13131 {
13132 switch (vex.length)
13133 {
13134 case 128:
13135 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
13136 break;
13137 case 256:
13138 sprintf (scratchbuf, "%%ymm%d", modrm.reg + add);
13139 break;
13140 default:
13141 abort ();
13142 }
13143 }
13144 else
13145 sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
d708bcba 13146 oappend (scratchbuf + intel_syntax);
c608c12e
AM
13147}
13148
252b5132 13149static void
26ca5450 13150OP_EM (int bytemode, int sizeflag)
252b5132 13151{
7967e09e 13152 if (modrm.mod != 3)
252b5132 13153 {
b6169b20
L
13154 if (intel_syntax
13155 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
13156 {
13157 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13158 used_prefixes |= (prefixes & PREFIX_DATA);
13159 }
252b5132
RH
13160 OP_E (bytemode, sizeflag);
13161 return;
13162 }
13163
b6169b20
L
13164 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
13165 swap_operand ();
13166
6608db57 13167 /* Skip mod/rm byte. */
4bba6815 13168 MODRM_CHECK;
252b5132 13169 codep++;
041bd2e0
JH
13170 used_prefixes |= (prefixes & PREFIX_DATA);
13171 if (prefixes & PREFIX_DATA)
20f0a1fc 13172 {
9b60702d 13173 int add;
20f0a1fc 13174
161a04f6
L
13175 USED_REX (REX_B);
13176 if (rex & REX_B)
20f0a1fc 13177 add = 8;
9b60702d
L
13178 else
13179 add = 0;
7967e09e 13180 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
20f0a1fc 13181 }
041bd2e0 13182 else
7967e09e 13183 sprintf (scratchbuf, "%%mm%d", modrm.rm);
d708bcba 13184 oappend (scratchbuf + intel_syntax);
252b5132
RH
13185}
13186
246c51aa
L
13187/* cvt* are the only instructions in sse2 which have
13188 both SSE and MMX operands and also have 0x66 prefix
13189 in their opcode. 0x66 was originally used to differentiate
13190 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
13191 cvt* separately using OP_EMC and OP_MXC */
13192static void
13193OP_EMC (int bytemode, int sizeflag)
13194{
7967e09e 13195 if (modrm.mod != 3)
4d9567e0
MM
13196 {
13197 if (intel_syntax && bytemode == v_mode)
13198 {
13199 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13200 used_prefixes |= (prefixes & PREFIX_DATA);
13201 }
13202 OP_E (bytemode, sizeflag);
13203 return;
13204 }
246c51aa 13205
4d9567e0
MM
13206 /* Skip mod/rm byte. */
13207 MODRM_CHECK;
13208 codep++;
13209 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 13210 sprintf (scratchbuf, "%%mm%d", modrm.rm);
4d9567e0
MM
13211 oappend (scratchbuf + intel_syntax);
13212}
13213
13214static void
13215OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13216{
13217 used_prefixes |= (prefixes & PREFIX_DATA);
7967e09e 13218 sprintf (scratchbuf, "%%mm%d", modrm.reg);
4d9567e0
MM
13219 oappend (scratchbuf + intel_syntax);
13220}
13221
c608c12e 13222static void
26ca5450 13223OP_EX (int bytemode, int sizeflag)
c608c12e 13224{
9b60702d 13225 int add;
d6f574e0
L
13226
13227 /* Skip mod/rm byte. */
13228 MODRM_CHECK;
13229 codep++;
13230
7967e09e 13231 if (modrm.mod != 3)
c608c12e 13232 {
c1e679ec 13233 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
13234 return;
13235 }
d6f574e0 13236
161a04f6
L
13237 USED_REX (REX_B);
13238 if (rex & REX_B)
041bd2e0 13239 add = 8;
9b60702d
L
13240 else
13241 add = 0;
c608c12e 13242
b6169b20 13243 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
13244 && (bytemode == x_swap_mode
13245 || bytemode == d_swap_mode
13246 || bytemode == q_swap_mode))
b6169b20
L
13247 swap_operand ();
13248
c0f3af97
L
13249 if (need_vex
13250 && bytemode != xmm_mode
13251 && bytemode != xmmq_mode)
13252 {
13253 switch (vex.length)
13254 {
13255 case 128:
13256 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
13257 break;
13258 case 256:
13259 sprintf (scratchbuf, "%%ymm%d", modrm.rm + add);
13260 break;
13261 default:
13262 abort ();
13263 }
13264 }
13265 else
13266 sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
d708bcba 13267 oappend (scratchbuf + intel_syntax);
c608c12e
AM
13268}
13269
252b5132 13270static void
26ca5450 13271OP_MS (int bytemode, int sizeflag)
252b5132 13272{
7967e09e 13273 if (modrm.mod == 3)
2da11e11
AM
13274 OP_EM (bytemode, sizeflag);
13275 else
6608db57 13276 BadOp ();
252b5132
RH
13277}
13278
992aaec9 13279static void
26ca5450 13280OP_XS (int bytemode, int sizeflag)
992aaec9 13281{
7967e09e 13282 if (modrm.mod == 3)
992aaec9
AM
13283 OP_EX (bytemode, sizeflag);
13284 else
6608db57 13285 BadOp ();
992aaec9
AM
13286}
13287
cc0ec051
AM
13288static void
13289OP_M (int bytemode, int sizeflag)
13290{
7967e09e 13291 if (modrm.mod == 3)
75413a22
L
13292 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
13293 BadOp ();
cc0ec051
AM
13294 else
13295 OP_E (bytemode, sizeflag);
13296}
13297
13298static void
13299OP_0f07 (int bytemode, int sizeflag)
13300{
7967e09e 13301 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
13302 BadOp ();
13303 else
13304 OP_E (bytemode, sizeflag);
13305}
13306
46e883c5 13307/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 13308 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 13309
cc0ec051 13310static void
46e883c5 13311NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 13312{
8b38ad71
L
13313 if ((prefixes & PREFIX_DATA) != 0
13314 || (rex != 0
13315 && rex != 0x48
13316 && address_mode == mode_64bit))
46e883c5
L
13317 OP_REG (bytemode, sizeflag);
13318 else
13319 strcpy (obuf, "nop");
13320}
13321
13322static void
13323NOP_Fixup2 (int bytemode, int sizeflag)
13324{
8b38ad71
L
13325 if ((prefixes & PREFIX_DATA) != 0
13326 || (rex != 0
13327 && rex != 0x48
13328 && address_mode == mode_64bit))
46e883c5 13329 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
13330}
13331
84037f8c 13332static const char *const Suffix3DNow[] = {
252b5132
RH
13333/* 00 */ NULL, NULL, NULL, NULL,
13334/* 04 */ NULL, NULL, NULL, NULL,
13335/* 08 */ NULL, NULL, NULL, NULL,
9e525108 13336/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
13337/* 10 */ NULL, NULL, NULL, NULL,
13338/* 14 */ NULL, NULL, NULL, NULL,
13339/* 18 */ NULL, NULL, NULL, NULL,
9e525108 13340/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
13341/* 20 */ NULL, NULL, NULL, NULL,
13342/* 24 */ NULL, NULL, NULL, NULL,
13343/* 28 */ NULL, NULL, NULL, NULL,
13344/* 2C */ NULL, NULL, NULL, NULL,
13345/* 30 */ NULL, NULL, NULL, NULL,
13346/* 34 */ NULL, NULL, NULL, NULL,
13347/* 38 */ NULL, NULL, NULL, NULL,
13348/* 3C */ NULL, NULL, NULL, NULL,
13349/* 40 */ NULL, NULL, NULL, NULL,
13350/* 44 */ NULL, NULL, NULL, NULL,
13351/* 48 */ NULL, NULL, NULL, NULL,
13352/* 4C */ NULL, NULL, NULL, NULL,
13353/* 50 */ NULL, NULL, NULL, NULL,
13354/* 54 */ NULL, NULL, NULL, NULL,
13355/* 58 */ NULL, NULL, NULL, NULL,
13356/* 5C */ NULL, NULL, NULL, NULL,
13357/* 60 */ NULL, NULL, NULL, NULL,
13358/* 64 */ NULL, NULL, NULL, NULL,
13359/* 68 */ NULL, NULL, NULL, NULL,
13360/* 6C */ NULL, NULL, NULL, NULL,
13361/* 70 */ NULL, NULL, NULL, NULL,
13362/* 74 */ NULL, NULL, NULL, NULL,
13363/* 78 */ NULL, NULL, NULL, NULL,
13364/* 7C */ NULL, NULL, NULL, NULL,
13365/* 80 */ NULL, NULL, NULL, NULL,
13366/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
13367/* 88 */ NULL, NULL, "pfnacc", NULL,
13368/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
13369/* 90 */ "pfcmpge", NULL, NULL, NULL,
13370/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
13371/* 98 */ NULL, NULL, "pfsub", NULL,
13372/* 9C */ NULL, NULL, "pfadd", NULL,
13373/* A0 */ "pfcmpgt", NULL, NULL, NULL,
13374/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
13375/* A8 */ NULL, NULL, "pfsubr", NULL,
13376/* AC */ NULL, NULL, "pfacc", NULL,
13377/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 13378/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 13379/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
13380/* BC */ NULL, NULL, NULL, "pavgusb",
13381/* C0 */ NULL, NULL, NULL, NULL,
13382/* C4 */ NULL, NULL, NULL, NULL,
13383/* C8 */ NULL, NULL, NULL, NULL,
13384/* CC */ NULL, NULL, NULL, NULL,
13385/* D0 */ NULL, NULL, NULL, NULL,
13386/* D4 */ NULL, NULL, NULL, NULL,
13387/* D8 */ NULL, NULL, NULL, NULL,
13388/* DC */ NULL, NULL, NULL, NULL,
13389/* E0 */ NULL, NULL, NULL, NULL,
13390/* E4 */ NULL, NULL, NULL, NULL,
13391/* E8 */ NULL, NULL, NULL, NULL,
13392/* EC */ NULL, NULL, NULL, NULL,
13393/* F0 */ NULL, NULL, NULL, NULL,
13394/* F4 */ NULL, NULL, NULL, NULL,
13395/* F8 */ NULL, NULL, NULL, NULL,
13396/* FC */ NULL, NULL, NULL, NULL,
13397};
13398
13399static void
26ca5450 13400OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
13401{
13402 const char *mnemonic;
13403
13404 FETCH_DATA (the_info, codep + 1);
13405 /* AMD 3DNow! instructions are specified by an opcode suffix in the
13406 place where an 8-bit immediate would normally go. ie. the last
13407 byte of the instruction. */
ea397f5b 13408 obufp = mnemonicendp;
c608c12e 13409 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 13410 if (mnemonic)
2da11e11 13411 oappend (mnemonic);
252b5132
RH
13412 else
13413 {
13414 /* Since a variable sized modrm/sib chunk is between the start
13415 of the opcode (0x0f0f) and the opcode suffix, we need to do
13416 all the modrm processing first, and don't know until now that
13417 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
13418 op_out[0][0] = '\0';
13419 op_out[1][0] = '\0';
6608db57 13420 BadOp ();
252b5132 13421 }
ea397f5b 13422 mnemonicendp = obufp;
252b5132 13423}
c608c12e 13424
ea397f5b
L
13425static struct op simd_cmp_op[] =
13426{
13427 { STRING_COMMA_LEN ("eq") },
13428 { STRING_COMMA_LEN ("lt") },
13429 { STRING_COMMA_LEN ("le") },
13430 { STRING_COMMA_LEN ("unord") },
13431 { STRING_COMMA_LEN ("neq") },
13432 { STRING_COMMA_LEN ("nlt") },
13433 { STRING_COMMA_LEN ("nle") },
13434 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
13435};
13436
13437static void
ad19981d 13438CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
13439{
13440 unsigned int cmp_type;
13441
13442 FETCH_DATA (the_info, codep + 1);
13443 cmp_type = *codep++ & 0xff;
c0f3af97 13444 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 13445 {
ad19981d 13446 char suffix [3];
ea397f5b 13447 char *p = mnemonicendp - 2;
ad19981d
L
13448 suffix[0] = p[0];
13449 suffix[1] = p[1];
13450 suffix[2] = '\0';
ea397f5b
L
13451 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
13452 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
13453 }
13454 else
13455 {
ad19981d
L
13456 /* We have a reserved extension byte. Output it directly. */
13457 scratchbuf[0] = '$';
13458 print_operand_value (scratchbuf + 1, 1, cmp_type);
13459 oappend (scratchbuf + intel_syntax);
13460 scratchbuf[0] = '\0';
c608c12e
AM
13461 }
13462}
13463
ca164297 13464static void
b844680a
L
13465OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
13466 int sizeflag ATTRIBUTE_UNUSED)
13467{
13468 /* mwait %eax,%ecx */
13469 if (!intel_syntax)
13470 {
13471 const char **names = (address_mode == mode_64bit
13472 ? names64 : names32);
13473 strcpy (op_out[0], names[0]);
13474 strcpy (op_out[1], names[1]);
13475 two_source_ops = 1;
13476 }
13477 /* Skip mod/rm byte. */
13478 MODRM_CHECK;
13479 codep++;
13480}
13481
13482static void
13483OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
13484 int sizeflag ATTRIBUTE_UNUSED)
ca164297 13485{
b844680a
L
13486 /* monitor %eax,%ecx,%edx" */
13487 if (!intel_syntax)
ca164297 13488 {
b844680a 13489 const char **op1_names;
cb712a9e
L
13490 const char **names = (address_mode == mode_64bit
13491 ? names64 : names32);
1d9f512f 13492
b844680a
L
13493 if (!(prefixes & PREFIX_ADDR))
13494 op1_names = (address_mode == mode_16bit
13495 ? names16 : names);
ca164297
L
13496 else
13497 {
b844680a 13498 /* Remove "addr16/addr32". */
f16cd0d5 13499 all_prefixes[last_addr_prefix] = 0;
b844680a
L
13500 op1_names = (address_mode != mode_32bit
13501 ? names32 : names16);
13502 used_prefixes |= PREFIX_ADDR;
ca164297 13503 }
b844680a
L
13504 strcpy (op_out[0], op1_names[0]);
13505 strcpy (op_out[1], names[1]);
13506 strcpy (op_out[2], names[2]);
13507 two_source_ops = 1;
ca164297 13508 }
b844680a
L
13509 /* Skip mod/rm byte. */
13510 MODRM_CHECK;
13511 codep++;
30123838
JB
13512}
13513
6608db57
KH
13514static void
13515BadOp (void)
2da11e11 13516{
6608db57
KH
13517 /* Throw away prefixes and 1st. opcode byte. */
13518 codep = insn_codep + 1;
2da11e11
AM
13519 oappend ("(bad)");
13520}
4cc91dba 13521
35c52694
L
13522static void
13523REP_Fixup (int bytemode, int sizeflag)
13524{
13525 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
13526 lods and stos. */
35c52694 13527 if (prefixes & PREFIX_REPZ)
f16cd0d5 13528 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
13529
13530 switch (bytemode)
13531 {
13532 case al_reg:
13533 case eAX_reg:
13534 case indir_dx_reg:
13535 OP_IMREG (bytemode, sizeflag);
13536 break;
13537 case eDI_reg:
13538 OP_ESreg (bytemode, sizeflag);
13539 break;
13540 case eSI_reg:
13541 OP_DSreg (bytemode, sizeflag);
13542 break;
13543 default:
13544 abort ();
13545 break;
13546 }
13547}
f5804c90
L
13548
13549static void
13550CMPXCHG8B_Fixup (int bytemode, int sizeflag)
13551{
161a04f6
L
13552 USED_REX (REX_W);
13553 if (rex & REX_W)
f5804c90
L
13554 {
13555 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
13556 char *p = mnemonicendp - 2;
13557 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 13558 bytemode = o_mode;
f5804c90
L
13559 }
13560 OP_M (bytemode, sizeflag);
13561}
42903f7f
L
13562
13563static void
13564XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
13565{
c0f3af97
L
13566 if (need_vex)
13567 {
13568 switch (vex.length)
13569 {
13570 case 128:
13571 sprintf (scratchbuf, "%%xmm%d", reg);
13572 break;
13573 case 256:
13574 sprintf (scratchbuf, "%%ymm%d", reg);
13575 break;
13576 default:
13577 abort ();
13578 }
13579 }
13580 else
13581 sprintf (scratchbuf, "%%xmm%d", reg);
42903f7f
L
13582 oappend (scratchbuf + intel_syntax);
13583}
381d071f
L
13584
13585static void
13586CRC32_Fixup (int bytemode, int sizeflag)
13587{
13588 /* Add proper suffix to "crc32". */
ea397f5b 13589 char *p = mnemonicendp;
381d071f
L
13590
13591 switch (bytemode)
13592 {
13593 case b_mode:
20592a94 13594 if (intel_syntax)
ea397f5b 13595 goto skip;
20592a94 13596
381d071f
L
13597 *p++ = 'b';
13598 break;
13599 case v_mode:
20592a94 13600 if (intel_syntax)
ea397f5b 13601 goto skip;
20592a94 13602
381d071f
L
13603 USED_REX (REX_W);
13604 if (rex & REX_W)
13605 *p++ = 'q';
f16cd0d5
L
13606 else
13607 {
13608 if (sizeflag & DFLAG)
13609 *p++ = 'l';
13610 else
13611 *p++ = 'w';
13612 used_prefixes |= (prefixes & PREFIX_DATA);
13613 }
381d071f
L
13614 break;
13615 default:
13616 oappend (INTERNAL_DISASSEMBLER_ERROR);
13617 break;
13618 }
ea397f5b 13619 mnemonicendp = p;
381d071f
L
13620 *p = '\0';
13621
ea397f5b 13622skip:
381d071f
L
13623 if (modrm.mod == 3)
13624 {
13625 int add;
13626
13627 /* Skip mod/rm byte. */
13628 MODRM_CHECK;
13629 codep++;
13630
13631 USED_REX (REX_B);
13632 add = (rex & REX_B) ? 8 : 0;
13633 if (bytemode == b_mode)
13634 {
13635 USED_REX (0);
13636 if (rex)
13637 oappend (names8rex[modrm.rm + add]);
13638 else
13639 oappend (names8[modrm.rm + add]);
13640 }
13641 else
13642 {
13643 USED_REX (REX_W);
13644 if (rex & REX_W)
13645 oappend (names64[modrm.rm + add]);
13646 else if ((prefixes & PREFIX_DATA))
13647 oappend (names16[modrm.rm + add]);
13648 else
13649 oappend (names32[modrm.rm + add]);
13650 }
13651 }
13652 else
9344ff29 13653 OP_E (bytemode, sizeflag);
381d071f 13654}
85f10a01 13655
c0f3af97
L
13656/* Display the destination register operand for instructions with
13657 VEX. */
13658
13659static void
13660OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
13661{
13662 if (!need_vex)
13663 abort ();
13664
13665 if (!need_vex_reg)
13666 return;
13667
13668 switch (vex.length)
13669 {
13670 case 128:
13671 switch (bytemode)
13672 {
13673 case vex_mode:
13674 case vex128_mode:
13675 break;
13676 default:
13677 abort ();
13678 return;
13679 }
13680
13681 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
13682 break;
13683 case 256:
13684 switch (bytemode)
13685 {
13686 case vex_mode:
13687 case vex256_mode:
13688 break;
13689 default:
13690 abort ();
13691 return;
13692 }
13693
13694 sprintf (scratchbuf, "%%ymm%d", vex.register_specifier);
13695 break;
13696 default:
13697 abort ();
13698 break;
13699 }
13700 oappend (scratchbuf + intel_syntax);
13701}
13702
922d8de8
DR
13703/* Get the VEX immediate byte without moving codep. */
13704
13705static unsigned char
13706get_vex_imm8 (int sizeflag)
13707{
13708 int bytes_before_imm = 0;
13709
13710 /* Skip mod/rm byte. */
13711 MODRM_CHECK;
13712 codep++;
13713
13714 if (modrm.mod != 3)
13715 {
13716 /* There are SIB/displacement bytes. */
13717 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
13718 {
13719 /* 32/64 bit address mode */
13720 int base = modrm.rm;
13721
13722 /* Check SIB byte. */
13723 if (base == 4)
13724 {
13725 FETCH_DATA (the_info, codep + 1);
13726 base = *codep & 7;
13727 bytes_before_imm++;
13728 }
13729
13730 switch (modrm.mod)
13731 {
13732 case 0:
13733 /* When modrm.rm == 5 or modrm.rm == 4 and base in
13734 SIB == 5, there is a 4 byte displacement. */
13735 if (base != 5)
13736 /* No displacement. */
13737 break;
13738 case 2:
13739 /* 4 byte displacement. */
13740 bytes_before_imm += 4;
13741 break;
13742 case 1:
13743 /* 1 byte displacement. */
13744 bytes_before_imm++;
13745 break;
13746 }
13747 }
13748 else
13749 { /* 16 bit address mode */
13750 switch (modrm.mod)
13751 {
13752 case 0:
13753 /* When modrm.rm == 6, there is a 2 byte displacement. */
13754 if (modrm.rm != 6)
13755 /* No displacement. */
13756 break;
13757 case 2:
13758 /* 2 byte displacement. */
13759 bytes_before_imm += 2;
13760 break;
13761 case 1:
13762 /* 1 byte displacement. */
13763 bytes_before_imm++;
13764 break;
13765 }
13766 }
13767 }
13768
13769 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
13770 return codep [bytes_before_imm];
13771}
13772
13773static void
13774OP_EX_VexReg (int bytemode, int sizeflag, int reg)
13775{
13776 if (reg == -1 && modrm.mod != 3)
13777 {
13778 OP_E_memory (bytemode, sizeflag);
13779 return;
13780 }
13781 else
13782 {
13783 if (reg == -1)
13784 {
13785 reg = modrm.rm;
13786 USED_REX (REX_B);
13787 if (rex & REX_B)
13788 reg += 8;
13789 }
13790 else if (reg > 7 && address_mode != mode_64bit)
13791 BadOp ();
13792 }
13793
13794 switch (vex.length)
13795 {
13796 case 128:
13797 sprintf (scratchbuf, "%%xmm%d", reg);
13798 break;
13799 case 256:
13800 sprintf (scratchbuf, "%%ymm%d", reg);
13801 break;
13802 default:
13803 abort ();
13804 }
13805 oappend (scratchbuf + intel_syntax);
13806}
13807
5dd85c99
SP
13808static void
13809OP_Vex_2src (int bytemode, int sizeflag)
13810{
13811 if (modrm.mod == 3)
13812 {
13813 USED_REX (REX_B);
13814 sprintf (scratchbuf, "%%xmm%d", rex & REX_B ? modrm.rm + 8 : modrm.rm);
13815 oappend (scratchbuf + intel_syntax);
13816 }
13817 else
13818 {
13819 if (intel_syntax
13820 && (bytemode == v_mode || bytemode == v_swap_mode))
13821 {
13822 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13823 used_prefixes |= (prefixes & PREFIX_DATA);
13824 }
13825 OP_E (bytemode, sizeflag);
13826 }
13827}
13828
13829static void
13830OP_Vex_2src_1 (int bytemode, int sizeflag)
13831{
13832 if (modrm.mod == 3)
13833 {
13834 /* Skip mod/rm byte. */
13835 MODRM_CHECK;
13836 codep++;
13837 }
13838
13839 if (vex.w)
13840 {
13841 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
13842 oappend (scratchbuf + intel_syntax);
13843 }
13844 else
13845 OP_Vex_2src (bytemode, sizeflag);
13846}
13847
13848static void
13849OP_Vex_2src_2 (int bytemode, int sizeflag)
13850{
13851 if (vex.w)
13852 OP_Vex_2src (bytemode, sizeflag);
13853 else
13854 {
13855 sprintf (scratchbuf, "%%xmm%d", vex.register_specifier);
13856 oappend (scratchbuf + intel_syntax);
13857 }
13858}
13859
922d8de8
DR
13860static void
13861OP_EX_VexW (int bytemode, int sizeflag)
13862{
13863 int reg = -1;
13864
13865 if (!vex_w_done)
13866 {
13867 vex_w_done = 1;
13868 if (vex.w)
206c2556 13869 reg = get_vex_imm8 (sizeflag) >> 4;
922d8de8
DR
13870 }
13871 else
13872 {
13873 if (!vex.w)
206c2556 13874 reg = get_vex_imm8 (sizeflag) >> 4;
922d8de8
DR
13875 }
13876
13877 OP_EX_VexReg (bytemode, sizeflag, reg);
13878}
13879
922d8de8
DR
13880static void
13881VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
13882 int sizeflag ATTRIBUTE_UNUSED)
13883{
13884 /* Skip the immediate byte and check for invalid bits. */
13885 FETCH_DATA (the_info, codep + 1);
13886 if (*codep++ & 0xf)
13887 BadOp ();
13888}
13889
c0f3af97
L
13890static void
13891OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
13892{
13893 int reg;
13894 FETCH_DATA (the_info, codep + 1);
13895 reg = *codep++;
13896
13897 if (bytemode != x_mode)
13898 abort ();
13899
13900 if (reg & 0xf)
13901 BadOp ();
13902
13903 reg >>= 4;
dae39acc
L
13904 if (reg > 7 && address_mode != mode_64bit)
13905 BadOp ();
13906
c0f3af97
L
13907 switch (vex.length)
13908 {
13909 case 128:
13910 sprintf (scratchbuf, "%%xmm%d", reg);
13911 break;
13912 case 256:
13913 sprintf (scratchbuf, "%%ymm%d", reg);
13914 break;
13915 default:
13916 abort ();
13917 }
13918 oappend (scratchbuf + intel_syntax);
13919}
13920
922d8de8
DR
13921static void
13922OP_XMM_VexW (int bytemode, int sizeflag)
13923{
13924 /* Turn off the REX.W bit since it is used for swapping operands
13925 now. */
13926 rex &= ~REX_W;
13927 OP_XMM (bytemode, sizeflag);
13928}
13929
c0f3af97
L
13930static void
13931OP_EX_Vex (int bytemode, int sizeflag)
13932{
13933 if (modrm.mod != 3)
13934 {
13935 if (vex.register_specifier != 0)
13936 BadOp ();
13937 need_vex_reg = 0;
13938 }
13939 OP_EX (bytemode, sizeflag);
13940}
13941
13942static void
13943OP_XMM_Vex (int bytemode, int sizeflag)
13944{
13945 if (modrm.mod != 3)
13946 {
13947 if (vex.register_specifier != 0)
13948 BadOp ();
13949 need_vex_reg = 0;
13950 }
13951 OP_XMM (bytemode, sizeflag);
13952}
13953
13954static void
13955VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13956{
13957 switch (vex.length)
13958 {
13959 case 128:
ea397f5b 13960 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
13961 break;
13962 case 256:
ea397f5b 13963 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
13964 break;
13965 default:
13966 abort ();
13967 }
13968}
13969
ea397f5b
L
13970static struct op vex_cmp_op[] =
13971{
13972 { STRING_COMMA_LEN ("eq") },
13973 { STRING_COMMA_LEN ("lt") },
13974 { STRING_COMMA_LEN ("le") },
13975 { STRING_COMMA_LEN ("unord") },
13976 { STRING_COMMA_LEN ("neq") },
13977 { STRING_COMMA_LEN ("nlt") },
13978 { STRING_COMMA_LEN ("nle") },
13979 { STRING_COMMA_LEN ("ord") },
13980 { STRING_COMMA_LEN ("eq_uq") },
13981 { STRING_COMMA_LEN ("nge") },
13982 { STRING_COMMA_LEN ("ngt") },
13983 { STRING_COMMA_LEN ("false") },
13984 { STRING_COMMA_LEN ("neq_oq") },
13985 { STRING_COMMA_LEN ("ge") },
13986 { STRING_COMMA_LEN ("gt") },
13987 { STRING_COMMA_LEN ("true") },
13988 { STRING_COMMA_LEN ("eq_os") },
13989 { STRING_COMMA_LEN ("lt_oq") },
13990 { STRING_COMMA_LEN ("le_oq") },
13991 { STRING_COMMA_LEN ("unord_s") },
13992 { STRING_COMMA_LEN ("neq_us") },
13993 { STRING_COMMA_LEN ("nlt_uq") },
13994 { STRING_COMMA_LEN ("nle_uq") },
13995 { STRING_COMMA_LEN ("ord_s") },
13996 { STRING_COMMA_LEN ("eq_us") },
13997 { STRING_COMMA_LEN ("nge_uq") },
13998 { STRING_COMMA_LEN ("ngt_uq") },
13999 { STRING_COMMA_LEN ("false_os") },
14000 { STRING_COMMA_LEN ("neq_os") },
14001 { STRING_COMMA_LEN ("ge_oq") },
14002 { STRING_COMMA_LEN ("gt_oq") },
14003 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
14004};
14005
14006static void
14007VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14008{
14009 unsigned int cmp_type;
14010
14011 FETCH_DATA (the_info, codep + 1);
14012 cmp_type = *codep++ & 0xff;
14013 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
14014 {
14015 char suffix [3];
ea397f5b 14016 char *p = mnemonicendp - 2;
c0f3af97
L
14017 suffix[0] = p[0];
14018 suffix[1] = p[1];
14019 suffix[2] = '\0';
ea397f5b
L
14020 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
14021 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
14022 }
14023 else
14024 {
14025 /* We have a reserved extension byte. Output it directly. */
14026 scratchbuf[0] = '$';
14027 print_operand_value (scratchbuf + 1, 1, cmp_type);
14028 oappend (scratchbuf + intel_syntax);
14029 scratchbuf[0] = '\0';
14030 }
14031}
14032
ea397f5b
L
14033static const struct op pclmul_op[] =
14034{
14035 { STRING_COMMA_LEN ("lql") },
14036 { STRING_COMMA_LEN ("hql") },
14037 { STRING_COMMA_LEN ("lqh") },
14038 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
14039};
14040
14041static void
14042PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
14043 int sizeflag ATTRIBUTE_UNUSED)
14044{
14045 unsigned int pclmul_type;
14046
14047 FETCH_DATA (the_info, codep + 1);
14048 pclmul_type = *codep++ & 0xff;
14049 switch (pclmul_type)
14050 {
14051 case 0x10:
14052 pclmul_type = 2;
14053 break;
14054 case 0x11:
14055 pclmul_type = 3;
14056 break;
14057 default:
14058 break;
14059 }
14060 if (pclmul_type < ARRAY_SIZE (pclmul_op))
14061 {
14062 char suffix [4];
ea397f5b 14063 char *p = mnemonicendp - 3;
c0f3af97
L
14064 suffix[0] = p[0];
14065 suffix[1] = p[1];
14066 suffix[2] = p[2];
14067 suffix[3] = '\0';
ea397f5b
L
14068 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
14069 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
14070 }
14071 else
14072 {
14073 /* We have a reserved extension byte. Output it directly. */
14074 scratchbuf[0] = '$';
14075 print_operand_value (scratchbuf + 1, 1, pclmul_type);
14076 oappend (scratchbuf + intel_syntax);
14077 scratchbuf[0] = '\0';
14078 }
14079}
14080
f1f8f695
L
14081static void
14082MOVBE_Fixup (int bytemode, int sizeflag)
14083{
14084 /* Add proper suffix to "movbe". */
ea397f5b 14085 char *p = mnemonicendp;
f1f8f695
L
14086
14087 switch (bytemode)
14088 {
14089 case v_mode:
14090 if (intel_syntax)
ea397f5b 14091 goto skip;
f1f8f695
L
14092
14093 USED_REX (REX_W);
14094 if (sizeflag & SUFFIX_ALWAYS)
14095 {
14096 if (rex & REX_W)
14097 *p++ = 'q';
f1f8f695 14098 else
f16cd0d5
L
14099 {
14100 if (sizeflag & DFLAG)
14101 *p++ = 'l';
14102 else
14103 *p++ = 'w';
14104 used_prefixes |= (prefixes & PREFIX_DATA);
14105 }
f1f8f695 14106 }
f1f8f695
L
14107 break;
14108 default:
14109 oappend (INTERNAL_DISASSEMBLER_ERROR);
14110 break;
14111 }
ea397f5b 14112 mnemonicendp = p;
f1f8f695
L
14113 *p = '\0';
14114
ea397f5b 14115skip:
f1f8f695
L
14116 OP_M (bytemode, sizeflag);
14117}
f88c9eb0
SP
14118
14119static void
14120OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14121{
14122 int reg;
14123 const char **names;
14124
14125 /* Skip mod/rm byte. */
14126 MODRM_CHECK;
14127 codep++;
14128
14129 if (vex.w)
14130 names = names64;
14131 else if (vex.length == 256)
14132 names = names32;
14133 else
14134 names = names16;
14135
14136 reg = modrm.rm;
14137 USED_REX (REX_B);
14138 if (rex & REX_B)
14139 reg += 8;
14140
14141 oappend (names[reg]);
14142}
14143
14144static void
14145OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14146{
14147 const char **names;
14148
14149 if (vex.w)
14150 names = names64;
14151 else if (vex.length == 256)
14152 names = names32;
14153 else
14154 names = names16;
14155
14156 oappend (names[vex.register_specifier]);
14157}
14158
14159static void
14160OP_LWP_I (int bytemode ATTRIBUTE_UNUSED, int sizeflag)
14161{
14162 if (vex.w || vex.length == 256)
14163 OP_I (q_mode, sizeflag);
14164 else
14165 OP_I (w_mode, sizeflag);
14166}
14167
This page took 1.244945 seconds and 4 git commands to generate.