Add tbm flag and TBM instruction pattern.
[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,
c75ef631 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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);
a683cc34 94static void OP_EX_VexImmW (int, int);
c0f3af97 95static void OP_XMM_Vex (int, int);
922d8de8 96static void OP_XMM_VexW (int, int);
c0f3af97
L
97static void OP_REG_VexI4 (int, int);
98static void PCLMUL_Fixup (int, int);
922d8de8 99static void VEXI4_Fixup (int, int);
c0f3af97
L
100static void VZERO_Fixup (int, int);
101static void VCMP_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
f5804c90 111static void CMPXCHG8B_Fixup (int, int);
42903f7f 112static void XMM_Fixup (int, int);
381d071f 113static void CRC32_Fixup (int, int);
eacc9c89 114static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
115static void OP_LWPCB_E (int, int);
116static void OP_LWP_E (int, int);
5dd85c99
SP
117static void OP_Vex_2src_1 (int, int);
118static void OP_Vex_2src_2 (int, int);
c1e679ec 119
f1f8f695 120static void MOVBE_Fixup (int, int);
252b5132 121
6608db57 122struct dis_private {
252b5132
RH
123 /* Points to first byte not fetched. */
124 bfd_byte *max_fetched;
0b1cf022 125 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 126 bfd_vma insn_start;
e396998b 127 int orig_sizeflag;
252b5132
RH
128 jmp_buf bailout;
129};
130
cb712a9e
L
131enum address_mode
132{
133 mode_16bit,
134 mode_32bit,
135 mode_64bit
136};
137
138enum address_mode address_mode;
52b15da3 139
5076851f
ILT
140/* Flags for the prefixes for the current instruction. See below. */
141static int prefixes;
142
52b15da3
JH
143/* REX prefix the current instruction. See below. */
144static int rex;
145/* Bits of REX we've already used. */
146static int rex_used;
d869730d 147/* REX bits in original REX prefix ignored. */
c0f3af97 148static int rex_ignored;
52b15da3
JH
149/* Mark parts used in the REX prefix. When we are testing for
150 empty prefix (for 8bit register REX extension), just mask it
151 out. Otherwise test for REX bit is excuse for existence of REX
152 only in case value is nonzero. */
153#define USED_REX(value) \
154 { \
155 if (value) \
161a04f6
L
156 { \
157 if ((rex & value)) \
158 rex_used |= (value) | REX_OPCODE; \
159 } \
52b15da3 160 else \
161a04f6 161 rex_used |= REX_OPCODE; \
52b15da3
JH
162 }
163
7d421014
ILT
164/* Flags for prefixes which we somehow handled when printing the
165 current instruction. */
166static int used_prefixes;
167
5076851f
ILT
168/* Flags stored in PREFIXES. */
169#define PREFIX_REPZ 1
170#define PREFIX_REPNZ 2
171#define PREFIX_LOCK 4
172#define PREFIX_CS 8
173#define PREFIX_SS 0x10
174#define PREFIX_DS 0x20
175#define PREFIX_ES 0x40
176#define PREFIX_FS 0x80
177#define PREFIX_GS 0x100
178#define PREFIX_DATA 0x200
179#define PREFIX_ADDR 0x400
180#define PREFIX_FWAIT 0x800
181
252b5132
RH
182/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
183 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
184 on error. */
185#define FETCH_DATA(info, addr) \
6608db57 186 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
187 ? 1 : fetch_data ((info), (addr)))
188
189static int
26ca5450 190fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
191{
192 int status;
6608db57 193 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
194 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
195
0b1cf022 196 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
197 status = (*info->read_memory_func) (start,
198 priv->max_fetched,
199 addr - priv->max_fetched,
200 info);
201 else
202 status = -1;
252b5132
RH
203 if (status != 0)
204 {
7d421014 205 /* If we did manage to read at least one byte, then
db6eb5be
AM
206 print_insn_i386 will do something sensible. Otherwise, print
207 an error. We do that here because this is where we know
208 STATUS. */
7d421014 209 if (priv->max_fetched == priv->the_buffer)
5076851f 210 (*info->memory_error_func) (status, start, info);
252b5132
RH
211 longjmp (priv->bailout, 1);
212 }
213 else
214 priv->max_fetched = addr;
215 return 1;
216}
217
ce518a5f 218#define XX { NULL, 0 }
592d1631 219#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
220
221#define Eb { OP_E, b_mode }
b6169b20 222#define EbS { OP_E, b_swap_mode }
ce518a5f 223#define Ev { OP_E, v_mode }
b6169b20 224#define EvS { OP_E, v_swap_mode }
ce518a5f
L
225#define Ed { OP_E, d_mode }
226#define Edq { OP_E, dq_mode }
227#define Edqw { OP_E, dqw_mode }
42903f7f
L
228#define Edqb { OP_E, dqb_mode }
229#define Edqd { OP_E, dqd_mode }
09335d05 230#define Eq { OP_E, q_mode }
ce518a5f
L
231#define indirEv { OP_indirE, stack_v_mode }
232#define indirEp { OP_indirE, f_mode }
233#define stackEv { OP_E, stack_v_mode }
234#define Em { OP_E, m_mode }
235#define Ew { OP_E, w_mode }
236#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 237#define Ma { OP_M, a_mode }
b844680a 238#define Mb { OP_M, b_mode }
d9a5e5e5 239#define Md { OP_M, d_mode }
f1f8f695 240#define Mo { OP_M, o_mode }
ce518a5f
L
241#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
242#define Mq { OP_M, q_mode }
4ee52178 243#define Mx { OP_M, x_mode }
c0f3af97 244#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
245#define Gb { OP_G, b_mode }
246#define Gv { OP_G, v_mode }
247#define Gd { OP_G, d_mode }
248#define Gdq { OP_G, dq_mode }
249#define Gm { OP_G, m_mode }
250#define Gw { OP_G, w_mode }
6f74c397
L
251#define Rd { OP_R, d_mode }
252#define Rm { OP_R, m_mode }
ce518a5f
L
253#define Ib { OP_I, b_mode }
254#define sIb { OP_sI, b_mode } /* sign extened byte */
255#define Iv { OP_I, v_mode }
d9e3625e 256#define sIv { OP_sI, v_mode }
ce518a5f
L
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 }
ce518a5f
L
285#define RMCL { OP_REG, cl_reg }
286#define RMDL { OP_REG, dl_reg }
287#define RMBL { OP_REG, bl_reg }
288#define RMAH { OP_REG, ah_reg }
289#define RMCH { OP_REG, ch_reg }
290#define RMDH { OP_REG, dh_reg }
291#define RMBH { OP_REG, bh_reg }
292#define RMAX { OP_REG, ax_reg }
293#define RMDX { OP_REG, dx_reg }
294
295#define eAX { OP_IMREG, eAX_reg }
296#define eBX { OP_IMREG, eBX_reg }
297#define eCX { OP_IMREG, eCX_reg }
298#define eDX { OP_IMREG, eDX_reg }
299#define eSP { OP_IMREG, eSP_reg }
300#define eBP { OP_IMREG, eBP_reg }
301#define eSI { OP_IMREG, eSI_reg }
302#define eDI { OP_IMREG, eDI_reg }
303#define AL { OP_IMREG, al_reg }
304#define CL { OP_IMREG, cl_reg }
305#define DL { OP_IMREG, dl_reg }
306#define BL { OP_IMREG, bl_reg }
307#define AH { OP_IMREG, ah_reg }
308#define CH { OP_IMREG, ch_reg }
309#define DH { OP_IMREG, dh_reg }
310#define BH { OP_IMREG, bh_reg }
311#define AX { OP_IMREG, ax_reg }
312#define DX { OP_IMREG, dx_reg }
313#define zAX { OP_IMREG, z_mode_ax_reg }
314#define indirDX { OP_IMREG, indir_dx_reg }
315
316#define Sw { OP_SEG, w_mode }
317#define Sv { OP_SEG, v_mode }
318#define Ap { OP_DIR, 0 }
319#define Ob { OP_OFF64, b_mode }
320#define Ov { OP_OFF64, v_mode }
321#define Xb { OP_DSreg, eSI_reg }
322#define Xv { OP_DSreg, eSI_reg }
323#define Xz { OP_DSreg, eSI_reg }
324#define Yb { OP_ESreg, eDI_reg }
325#define Yv { OP_ESreg, eDI_reg }
326#define DSBX { OP_DSreg, eBX_reg }
327
328#define es { OP_REG, es_reg }
329#define ss { OP_REG, ss_reg }
330#define cs { OP_REG, cs_reg }
331#define ds { OP_REG, ds_reg }
332#define fs { OP_REG, fs_reg }
333#define gs { OP_REG, gs_reg }
334
335#define MX { OP_MMX, 0 }
336#define XM { OP_XMM, 0 }
539f890d 337#define XMScalar { OP_XMM, scalar_mode }
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 }
539f890d 345#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 346#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 347#define EXq { OP_EX, q_mode }
539f890d
L
348#define EXqScalar { OP_EX, q_scalar_mode }
349#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 350#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 351#define EXx { OP_EX, x_mode }
b6169b20 352#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
353#define EXxmm { OP_EX, xmm_mode }
354#define EXxmmq { OP_EX, xmmq_mode }
355#define EXymmq { OP_EX, ymmq_mode }
0bfee649 356#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 357#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
ce518a5f
L
358#define MS { OP_MS, v_mode }
359#define XS { OP_XS, v_mode }
09335d05 360#define EMCq { OP_EMC, q_mode }
ce518a5f 361#define MXC { OP_MXC, 0 }
ce518a5f 362#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 363#define CMP { CMP_Fixup, 0 }
42903f7f 364#define XMM0 { XMM_Fixup, 0 }
eacc9c89 365#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
366#define Vex_2src_1 { OP_Vex_2src_1, 0 }
367#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 368
c0f3af97 369#define Vex { OP_VEX, vex_mode }
539f890d 370#define VexScalar { OP_VEX, vex_scalar_mode }
c0f3af97
L
371#define Vex128 { OP_VEX, vex128_mode }
372#define Vex256 { OP_VEX, vex256_mode }
cb21baef 373#define VexGdq { OP_VEX, dq_mode }
922d8de8 374#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 375#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 376#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 377#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 378#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 379#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 380#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
381#define EXVexW { OP_EX_VexW, x_mode }
382#define EXdVexW { OP_EX_VexW, d_mode }
383#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 384#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 385#define XMVex { OP_XMM_Vex, 0 }
539f890d 386#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 387#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
388#define XMVexI4 { OP_REG_VexI4, x_mode }
389#define PCLMUL { PCLMUL_Fixup, 0 }
390#define VZERO { VZERO_Fixup, 0 }
391#define VCMP { VCMP_Fixup, 0 }
c0f3af97 392
35c52694 393/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
394#define Xbr { REP_Fixup, eSI_reg }
395#define Xvr { REP_Fixup, eSI_reg }
396#define Ybr { REP_Fixup, eDI_reg }
397#define Yvr { REP_Fixup, eDI_reg }
398#define Yzr { REP_Fixup, eDI_reg }
399#define indirDXr { REP_Fixup, indir_dx_reg }
400#define ALr { REP_Fixup, al_reg }
401#define eAXr { REP_Fixup, eAX_reg }
402
403#define cond_jump_flag { NULL, cond_jump_mode }
404#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 405
252b5132 406/* bits in sizeflag */
252b5132 407#define SUFFIX_ALWAYS 4
252b5132
RH
408#define AFLAG 2
409#define DFLAG 1
410
51e7da1b
L
411enum
412{
413 /* byte operand */
414 b_mode = 1,
415 /* byte operand with operand swapped */
3873ba12 416 b_swap_mode,
51e7da1b 417 /* operand size depends on prefixes */
3873ba12 418 v_mode,
51e7da1b 419 /* operand size depends on prefixes with operand swapped */
3873ba12 420 v_swap_mode,
51e7da1b 421 /* word operand */
3873ba12 422 w_mode,
51e7da1b 423 /* double word operand */
3873ba12 424 d_mode,
51e7da1b 425 /* double word operand with operand swapped */
3873ba12 426 d_swap_mode,
51e7da1b 427 /* quad word operand */
3873ba12 428 q_mode,
51e7da1b 429 /* quad word operand with operand swapped */
3873ba12 430 q_swap_mode,
51e7da1b 431 /* ten-byte operand */
3873ba12 432 t_mode,
51e7da1b 433 /* 16-byte XMM or 32-byte YMM operand */
3873ba12 434 x_mode,
51e7da1b 435 /* 16-byte XMM or 32-byte YMM operand with operand swapped */
3873ba12 436 x_swap_mode,
51e7da1b 437 /* 16-byte XMM operand */
3873ba12 438 xmm_mode,
51e7da1b 439 /* 16-byte XMM or quad word operand */
3873ba12 440 xmmq_mode,
51e7da1b 441 /* 32-byte YMM or quad word operand */
3873ba12 442 ymmq_mode,
51e7da1b 443 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 444 m_mode,
51e7da1b 445 /* pair of v_mode operands */
3873ba12
L
446 a_mode,
447 cond_jump_mode,
448 loop_jcxz_mode,
51e7da1b 449 /* operand size depends on REX prefixes. */
3873ba12 450 dq_mode,
51e7da1b 451 /* registers like dq_mode, memory like w_mode. */
3873ba12 452 dqw_mode,
51e7da1b 453 /* 4- or 6-byte pointer operand */
3873ba12
L
454 f_mode,
455 const_1_mode,
51e7da1b 456 /* v_mode for stack-related opcodes. */
3873ba12 457 stack_v_mode,
51e7da1b 458 /* non-quad operand size depends on prefixes */
3873ba12 459 z_mode,
51e7da1b 460 /* 16-byte operand */
3873ba12 461 o_mode,
51e7da1b 462 /* registers like dq_mode, memory like b_mode. */
3873ba12 463 dqb_mode,
51e7da1b 464 /* registers like dq_mode, memory like d_mode. */
3873ba12 465 dqd_mode,
51e7da1b 466 /* normal vex mode */
3873ba12 467 vex_mode,
51e7da1b 468 /* 128bit vex mode */
3873ba12 469 vex128_mode,
51e7da1b 470 /* 256bit vex mode */
3873ba12 471 vex256_mode,
51e7da1b 472 /* operand size depends on the VEX.W bit. */
3873ba12 473 vex_w_dq_mode,
d55ee72f 474
539f890d
L
475 /* scalar, ignore vector length. */
476 scalar_mode,
477 /* like d_mode, ignore vector length. */
478 d_scalar_mode,
479 /* like d_swap_mode, ignore vector length. */
480 d_scalar_swap_mode,
481 /* like q_mode, ignore vector length. */
482 q_scalar_mode,
483 /* like q_swap_mode, ignore vector length. */
484 q_scalar_swap_mode,
485 /* like vex_mode, ignore vector length. */
486 vex_scalar_mode,
1c480963
L
487 /* like vex_w_dq_mode, ignore vector length. */
488 vex_scalar_w_dq_mode,
539f890d 489
3873ba12
L
490 es_reg,
491 cs_reg,
492 ss_reg,
493 ds_reg,
494 fs_reg,
495 gs_reg,
d55ee72f 496
3873ba12
L
497 eAX_reg,
498 eCX_reg,
499 eDX_reg,
500 eBX_reg,
501 eSP_reg,
502 eBP_reg,
503 eSI_reg,
504 eDI_reg,
d55ee72f 505
3873ba12
L
506 al_reg,
507 cl_reg,
508 dl_reg,
509 bl_reg,
510 ah_reg,
511 ch_reg,
512 dh_reg,
513 bh_reg,
d55ee72f 514
3873ba12
L
515 ax_reg,
516 cx_reg,
517 dx_reg,
518 bx_reg,
519 sp_reg,
520 bp_reg,
521 si_reg,
522 di_reg,
d55ee72f 523
3873ba12
L
524 rAX_reg,
525 rCX_reg,
526 rDX_reg,
527 rBX_reg,
528 rSP_reg,
529 rBP_reg,
530 rSI_reg,
531 rDI_reg,
d55ee72f 532
3873ba12
L
533 z_mode_ax_reg,
534 indir_dx_reg
51e7da1b 535};
252b5132 536
51e7da1b
L
537enum
538{
539 FLOATCODE = 1,
3873ba12
L
540 USE_REG_TABLE,
541 USE_MOD_TABLE,
542 USE_RM_TABLE,
543 USE_PREFIX_TABLE,
544 USE_X86_64_TABLE,
545 USE_3BYTE_TABLE,
f88c9eb0 546 USE_XOP_8F_TABLE,
3873ba12
L
547 USE_VEX_C4_TABLE,
548 USE_VEX_C5_TABLE,
9e30b8e0
L
549 USE_VEX_LEN_TABLE,
550 USE_VEX_W_TABLE
51e7da1b 551};
6439fc28 552
1ceb70f8 553#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 554
4e7d34a6 555#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
556#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
557#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
558#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
559#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
560#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
561#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 562#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
563#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
564#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
565#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 566#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
1ceb70f8 567
51e7da1b
L
568enum
569{
570 REG_80 = 0,
3873ba12
L
571 REG_81,
572 REG_82,
573 REG_8F,
574 REG_C0,
575 REG_C1,
576 REG_C6,
577 REG_C7,
578 REG_D0,
579 REG_D1,
580 REG_D2,
581 REG_D3,
582 REG_F6,
583 REG_F7,
584 REG_FE,
585 REG_FF,
586 REG_0F00,
587 REG_0F01,
588 REG_0F0D,
589 REG_0F18,
590 REG_0F71,
591 REG_0F72,
592 REG_0F73,
593 REG_0FA6,
594 REG_0FA7,
595 REG_0FAE,
596 REG_0FBA,
597 REG_0FC7,
592a252b
L
598 REG_VEX_0F71,
599 REG_VEX_0F72,
600 REG_VEX_0F73,
601 REG_VEX_0FAE,
f12dc422 602 REG_VEX_0F38F3,
f88c9eb0 603 REG_XOP_LWPCB,
2a2a0f38
QN
604 REG_XOP_LWP,
605 REG_XOP_TBM_01,
606 REG_XOP_TBM_02
51e7da1b 607};
1ceb70f8 608
51e7da1b
L
609enum
610{
611 MOD_8D = 0,
3873ba12
L
612 MOD_0F01_REG_0,
613 MOD_0F01_REG_1,
614 MOD_0F01_REG_2,
615 MOD_0F01_REG_3,
616 MOD_0F01_REG_7,
617 MOD_0F12_PREFIX_0,
618 MOD_0F13,
619 MOD_0F16_PREFIX_0,
620 MOD_0F17,
621 MOD_0F18_REG_0,
622 MOD_0F18_REG_1,
623 MOD_0F18_REG_2,
624 MOD_0F18_REG_3,
625 MOD_0F20,
626 MOD_0F21,
627 MOD_0F22,
628 MOD_0F23,
629 MOD_0F24,
630 MOD_0F26,
631 MOD_0F2B_PREFIX_0,
632 MOD_0F2B_PREFIX_1,
633 MOD_0F2B_PREFIX_2,
634 MOD_0F2B_PREFIX_3,
635 MOD_0F51,
636 MOD_0F71_REG_2,
637 MOD_0F71_REG_4,
638 MOD_0F71_REG_6,
639 MOD_0F72_REG_2,
640 MOD_0F72_REG_4,
641 MOD_0F72_REG_6,
642 MOD_0F73_REG_2,
643 MOD_0F73_REG_3,
644 MOD_0F73_REG_6,
645 MOD_0F73_REG_7,
646 MOD_0FAE_REG_0,
647 MOD_0FAE_REG_1,
648 MOD_0FAE_REG_2,
649 MOD_0FAE_REG_3,
650 MOD_0FAE_REG_4,
651 MOD_0FAE_REG_5,
652 MOD_0FAE_REG_6,
653 MOD_0FAE_REG_7,
654 MOD_0FB2,
655 MOD_0FB4,
656 MOD_0FB5,
657 MOD_0FC7_REG_6,
658 MOD_0FC7_REG_7,
659 MOD_0FD7,
660 MOD_0FE7_PREFIX_2,
661 MOD_0FF0_PREFIX_3,
662 MOD_0F382A_PREFIX_2,
663 MOD_62_32BIT,
664 MOD_C4_32BIT,
665 MOD_C5_32BIT,
592a252b
L
666 MOD_VEX_0F12_PREFIX_0,
667 MOD_VEX_0F13,
668 MOD_VEX_0F16_PREFIX_0,
669 MOD_VEX_0F17,
670 MOD_VEX_0F2B,
671 MOD_VEX_0F50,
672 MOD_VEX_0F71_REG_2,
673 MOD_VEX_0F71_REG_4,
674 MOD_VEX_0F71_REG_6,
675 MOD_VEX_0F72_REG_2,
676 MOD_VEX_0F72_REG_4,
677 MOD_VEX_0F72_REG_6,
678 MOD_VEX_0F73_REG_2,
679 MOD_VEX_0F73_REG_3,
680 MOD_VEX_0F73_REG_6,
681 MOD_VEX_0F73_REG_7,
682 MOD_VEX_0FAE_REG_2,
683 MOD_VEX_0FAE_REG_3,
684 MOD_VEX_0FD7_PREFIX_2,
685 MOD_VEX_0FE7_PREFIX_2,
686 MOD_VEX_0FF0_PREFIX_3,
687 MOD_VEX_0F3818_PREFIX_2,
688 MOD_VEX_0F3819_PREFIX_2,
689 MOD_VEX_0F381A_PREFIX_2,
690 MOD_VEX_0F382A_PREFIX_2,
691 MOD_VEX_0F382C_PREFIX_2,
692 MOD_VEX_0F382D_PREFIX_2,
693 MOD_VEX_0F382E_PREFIX_2,
694 MOD_VEX_0F382F_PREFIX_2
51e7da1b 695};
1ceb70f8 696
51e7da1b
L
697enum
698{
699 RM_0F01_REG_0 = 0,
3873ba12
L
700 RM_0F01_REG_1,
701 RM_0F01_REG_2,
702 RM_0F01_REG_3,
703 RM_0F01_REG_7,
704 RM_0FAE_REG_5,
705 RM_0FAE_REG_6,
706 RM_0FAE_REG_7
51e7da1b 707};
1ceb70f8 708
51e7da1b
L
709enum
710{
711 PREFIX_90 = 0,
3873ba12
L
712 PREFIX_0F10,
713 PREFIX_0F11,
714 PREFIX_0F12,
715 PREFIX_0F16,
716 PREFIX_0F2A,
717 PREFIX_0F2B,
718 PREFIX_0F2C,
719 PREFIX_0F2D,
720 PREFIX_0F2E,
721 PREFIX_0F2F,
722 PREFIX_0F51,
723 PREFIX_0F52,
724 PREFIX_0F53,
725 PREFIX_0F58,
726 PREFIX_0F59,
727 PREFIX_0F5A,
728 PREFIX_0F5B,
729 PREFIX_0F5C,
730 PREFIX_0F5D,
731 PREFIX_0F5E,
732 PREFIX_0F5F,
733 PREFIX_0F60,
734 PREFIX_0F61,
735 PREFIX_0F62,
736 PREFIX_0F6C,
737 PREFIX_0F6D,
738 PREFIX_0F6F,
739 PREFIX_0F70,
740 PREFIX_0F73_REG_3,
741 PREFIX_0F73_REG_7,
742 PREFIX_0F78,
743 PREFIX_0F79,
744 PREFIX_0F7C,
745 PREFIX_0F7D,
746 PREFIX_0F7E,
747 PREFIX_0F7F,
c7b8aa3a
L
748 PREFIX_0FAE_REG_0,
749 PREFIX_0FAE_REG_1,
750 PREFIX_0FAE_REG_2,
751 PREFIX_0FAE_REG_3,
3873ba12 752 PREFIX_0FB8,
f12dc422 753 PREFIX_0FBC,
3873ba12
L
754 PREFIX_0FBD,
755 PREFIX_0FC2,
756 PREFIX_0FC3,
757 PREFIX_0FC7_REG_6,
758 PREFIX_0FD0,
759 PREFIX_0FD6,
760 PREFIX_0FE6,
761 PREFIX_0FE7,
762 PREFIX_0FF0,
763 PREFIX_0FF7,
764 PREFIX_0F3810,
765 PREFIX_0F3814,
766 PREFIX_0F3815,
767 PREFIX_0F3817,
768 PREFIX_0F3820,
769 PREFIX_0F3821,
770 PREFIX_0F3822,
771 PREFIX_0F3823,
772 PREFIX_0F3824,
773 PREFIX_0F3825,
774 PREFIX_0F3828,
775 PREFIX_0F3829,
776 PREFIX_0F382A,
777 PREFIX_0F382B,
778 PREFIX_0F3830,
779 PREFIX_0F3831,
780 PREFIX_0F3832,
781 PREFIX_0F3833,
782 PREFIX_0F3834,
783 PREFIX_0F3835,
784 PREFIX_0F3837,
785 PREFIX_0F3838,
786 PREFIX_0F3839,
787 PREFIX_0F383A,
788 PREFIX_0F383B,
789 PREFIX_0F383C,
790 PREFIX_0F383D,
791 PREFIX_0F383E,
792 PREFIX_0F383F,
793 PREFIX_0F3840,
794 PREFIX_0F3841,
795 PREFIX_0F3880,
796 PREFIX_0F3881,
797 PREFIX_0F38DB,
798 PREFIX_0F38DC,
799 PREFIX_0F38DD,
800 PREFIX_0F38DE,
801 PREFIX_0F38DF,
802 PREFIX_0F38F0,
803 PREFIX_0F38F1,
804 PREFIX_0F3A08,
805 PREFIX_0F3A09,
806 PREFIX_0F3A0A,
807 PREFIX_0F3A0B,
808 PREFIX_0F3A0C,
809 PREFIX_0F3A0D,
810 PREFIX_0F3A0E,
811 PREFIX_0F3A14,
812 PREFIX_0F3A15,
813 PREFIX_0F3A16,
814 PREFIX_0F3A17,
815 PREFIX_0F3A20,
816 PREFIX_0F3A21,
817 PREFIX_0F3A22,
818 PREFIX_0F3A40,
819 PREFIX_0F3A41,
820 PREFIX_0F3A42,
821 PREFIX_0F3A44,
822 PREFIX_0F3A60,
823 PREFIX_0F3A61,
824 PREFIX_0F3A62,
825 PREFIX_0F3A63,
826 PREFIX_0F3ADF,
592a252b
L
827 PREFIX_VEX_0F10,
828 PREFIX_VEX_0F11,
829 PREFIX_VEX_0F12,
830 PREFIX_VEX_0F16,
831 PREFIX_VEX_0F2A,
832 PREFIX_VEX_0F2C,
833 PREFIX_VEX_0F2D,
834 PREFIX_VEX_0F2E,
835 PREFIX_VEX_0F2F,
836 PREFIX_VEX_0F51,
837 PREFIX_VEX_0F52,
838 PREFIX_VEX_0F53,
839 PREFIX_VEX_0F58,
840 PREFIX_VEX_0F59,
841 PREFIX_VEX_0F5A,
842 PREFIX_VEX_0F5B,
843 PREFIX_VEX_0F5C,
844 PREFIX_VEX_0F5D,
845 PREFIX_VEX_0F5E,
846 PREFIX_VEX_0F5F,
847 PREFIX_VEX_0F60,
848 PREFIX_VEX_0F61,
849 PREFIX_VEX_0F62,
850 PREFIX_VEX_0F63,
851 PREFIX_VEX_0F64,
852 PREFIX_VEX_0F65,
853 PREFIX_VEX_0F66,
854 PREFIX_VEX_0F67,
855 PREFIX_VEX_0F68,
856 PREFIX_VEX_0F69,
857 PREFIX_VEX_0F6A,
858 PREFIX_VEX_0F6B,
859 PREFIX_VEX_0F6C,
860 PREFIX_VEX_0F6D,
861 PREFIX_VEX_0F6E,
862 PREFIX_VEX_0F6F,
863 PREFIX_VEX_0F70,
864 PREFIX_VEX_0F71_REG_2,
865 PREFIX_VEX_0F71_REG_4,
866 PREFIX_VEX_0F71_REG_6,
867 PREFIX_VEX_0F72_REG_2,
868 PREFIX_VEX_0F72_REG_4,
869 PREFIX_VEX_0F72_REG_6,
870 PREFIX_VEX_0F73_REG_2,
871 PREFIX_VEX_0F73_REG_3,
872 PREFIX_VEX_0F73_REG_6,
873 PREFIX_VEX_0F73_REG_7,
874 PREFIX_VEX_0F74,
875 PREFIX_VEX_0F75,
876 PREFIX_VEX_0F76,
877 PREFIX_VEX_0F77,
878 PREFIX_VEX_0F7C,
879 PREFIX_VEX_0F7D,
880 PREFIX_VEX_0F7E,
881 PREFIX_VEX_0F7F,
882 PREFIX_VEX_0FC2,
883 PREFIX_VEX_0FC4,
884 PREFIX_VEX_0FC5,
885 PREFIX_VEX_0FD0,
886 PREFIX_VEX_0FD1,
887 PREFIX_VEX_0FD2,
888 PREFIX_VEX_0FD3,
889 PREFIX_VEX_0FD4,
890 PREFIX_VEX_0FD5,
891 PREFIX_VEX_0FD6,
892 PREFIX_VEX_0FD7,
893 PREFIX_VEX_0FD8,
894 PREFIX_VEX_0FD9,
895 PREFIX_VEX_0FDA,
896 PREFIX_VEX_0FDB,
897 PREFIX_VEX_0FDC,
898 PREFIX_VEX_0FDD,
899 PREFIX_VEX_0FDE,
900 PREFIX_VEX_0FDF,
901 PREFIX_VEX_0FE0,
902 PREFIX_VEX_0FE1,
903 PREFIX_VEX_0FE2,
904 PREFIX_VEX_0FE3,
905 PREFIX_VEX_0FE4,
906 PREFIX_VEX_0FE5,
907 PREFIX_VEX_0FE6,
908 PREFIX_VEX_0FE7,
909 PREFIX_VEX_0FE8,
910 PREFIX_VEX_0FE9,
911 PREFIX_VEX_0FEA,
912 PREFIX_VEX_0FEB,
913 PREFIX_VEX_0FEC,
914 PREFIX_VEX_0FED,
915 PREFIX_VEX_0FEE,
916 PREFIX_VEX_0FEF,
917 PREFIX_VEX_0FF0,
918 PREFIX_VEX_0FF1,
919 PREFIX_VEX_0FF2,
920 PREFIX_VEX_0FF3,
921 PREFIX_VEX_0FF4,
922 PREFIX_VEX_0FF5,
923 PREFIX_VEX_0FF6,
924 PREFIX_VEX_0FF7,
925 PREFIX_VEX_0FF8,
926 PREFIX_VEX_0FF9,
927 PREFIX_VEX_0FFA,
928 PREFIX_VEX_0FFB,
929 PREFIX_VEX_0FFC,
930 PREFIX_VEX_0FFD,
931 PREFIX_VEX_0FFE,
932 PREFIX_VEX_0F3800,
933 PREFIX_VEX_0F3801,
934 PREFIX_VEX_0F3802,
935 PREFIX_VEX_0F3803,
936 PREFIX_VEX_0F3804,
937 PREFIX_VEX_0F3805,
938 PREFIX_VEX_0F3806,
939 PREFIX_VEX_0F3807,
940 PREFIX_VEX_0F3808,
941 PREFIX_VEX_0F3809,
942 PREFIX_VEX_0F380A,
943 PREFIX_VEX_0F380B,
944 PREFIX_VEX_0F380C,
945 PREFIX_VEX_0F380D,
946 PREFIX_VEX_0F380E,
947 PREFIX_VEX_0F380F,
948 PREFIX_VEX_0F3813,
949 PREFIX_VEX_0F3817,
950 PREFIX_VEX_0F3818,
951 PREFIX_VEX_0F3819,
952 PREFIX_VEX_0F381A,
953 PREFIX_VEX_0F381C,
954 PREFIX_VEX_0F381D,
955 PREFIX_VEX_0F381E,
956 PREFIX_VEX_0F3820,
957 PREFIX_VEX_0F3821,
958 PREFIX_VEX_0F3822,
959 PREFIX_VEX_0F3823,
960 PREFIX_VEX_0F3824,
961 PREFIX_VEX_0F3825,
962 PREFIX_VEX_0F3828,
963 PREFIX_VEX_0F3829,
964 PREFIX_VEX_0F382A,
965 PREFIX_VEX_0F382B,
966 PREFIX_VEX_0F382C,
967 PREFIX_VEX_0F382D,
968 PREFIX_VEX_0F382E,
969 PREFIX_VEX_0F382F,
970 PREFIX_VEX_0F3830,
971 PREFIX_VEX_0F3831,
972 PREFIX_VEX_0F3832,
973 PREFIX_VEX_0F3833,
974 PREFIX_VEX_0F3834,
975 PREFIX_VEX_0F3835,
976 PREFIX_VEX_0F3837,
977 PREFIX_VEX_0F3838,
978 PREFIX_VEX_0F3839,
979 PREFIX_VEX_0F383A,
980 PREFIX_VEX_0F383B,
981 PREFIX_VEX_0F383C,
982 PREFIX_VEX_0F383D,
983 PREFIX_VEX_0F383E,
984 PREFIX_VEX_0F383F,
985 PREFIX_VEX_0F3840,
986 PREFIX_VEX_0F3841,
987 PREFIX_VEX_0F3896,
988 PREFIX_VEX_0F3897,
989 PREFIX_VEX_0F3898,
990 PREFIX_VEX_0F3899,
991 PREFIX_VEX_0F389A,
992 PREFIX_VEX_0F389B,
993 PREFIX_VEX_0F389C,
994 PREFIX_VEX_0F389D,
995 PREFIX_VEX_0F389E,
996 PREFIX_VEX_0F389F,
997 PREFIX_VEX_0F38A6,
998 PREFIX_VEX_0F38A7,
999 PREFIX_VEX_0F38A8,
1000 PREFIX_VEX_0F38A9,
1001 PREFIX_VEX_0F38AA,
1002 PREFIX_VEX_0F38AB,
1003 PREFIX_VEX_0F38AC,
1004 PREFIX_VEX_0F38AD,
1005 PREFIX_VEX_0F38AE,
1006 PREFIX_VEX_0F38AF,
1007 PREFIX_VEX_0F38B6,
1008 PREFIX_VEX_0F38B7,
1009 PREFIX_VEX_0F38B8,
1010 PREFIX_VEX_0F38B9,
1011 PREFIX_VEX_0F38BA,
1012 PREFIX_VEX_0F38BB,
1013 PREFIX_VEX_0F38BC,
1014 PREFIX_VEX_0F38BD,
1015 PREFIX_VEX_0F38BE,
1016 PREFIX_VEX_0F38BF,
1017 PREFIX_VEX_0F38DB,
1018 PREFIX_VEX_0F38DC,
1019 PREFIX_VEX_0F38DD,
1020 PREFIX_VEX_0F38DE,
1021 PREFIX_VEX_0F38DF,
f12dc422
L
1022 PREFIX_VEX_0F38F2,
1023 PREFIX_VEX_0F38F3_REG_1,
1024 PREFIX_VEX_0F38F3_REG_2,
1025 PREFIX_VEX_0F38F3_REG_3,
1026 PREFIX_VEX_0F38F7,
592a252b
L
1027 PREFIX_VEX_0F3A04,
1028 PREFIX_VEX_0F3A05,
1029 PREFIX_VEX_0F3A06,
1030 PREFIX_VEX_0F3A08,
1031 PREFIX_VEX_0F3A09,
1032 PREFIX_VEX_0F3A0A,
1033 PREFIX_VEX_0F3A0B,
1034 PREFIX_VEX_0F3A0C,
1035 PREFIX_VEX_0F3A0D,
1036 PREFIX_VEX_0F3A0E,
1037 PREFIX_VEX_0F3A0F,
1038 PREFIX_VEX_0F3A14,
1039 PREFIX_VEX_0F3A15,
1040 PREFIX_VEX_0F3A16,
1041 PREFIX_VEX_0F3A17,
1042 PREFIX_VEX_0F3A18,
1043 PREFIX_VEX_0F3A19,
1044 PREFIX_VEX_0F3A1D,
1045 PREFIX_VEX_0F3A20,
1046 PREFIX_VEX_0F3A21,
1047 PREFIX_VEX_0F3A22,
1048 PREFIX_VEX_0F3A40,
1049 PREFIX_VEX_0F3A41,
1050 PREFIX_VEX_0F3A42,
1051 PREFIX_VEX_0F3A44,
1052 PREFIX_VEX_0F3A48,
1053 PREFIX_VEX_0F3A49,
1054 PREFIX_VEX_0F3A4A,
1055 PREFIX_VEX_0F3A4B,
1056 PREFIX_VEX_0F3A4C,
1057 PREFIX_VEX_0F3A5C,
1058 PREFIX_VEX_0F3A5D,
1059 PREFIX_VEX_0F3A5E,
1060 PREFIX_VEX_0F3A5F,
1061 PREFIX_VEX_0F3A60,
1062 PREFIX_VEX_0F3A61,
1063 PREFIX_VEX_0F3A62,
1064 PREFIX_VEX_0F3A63,
1065 PREFIX_VEX_0F3A68,
1066 PREFIX_VEX_0F3A69,
1067 PREFIX_VEX_0F3A6A,
1068 PREFIX_VEX_0F3A6B,
1069 PREFIX_VEX_0F3A6C,
1070 PREFIX_VEX_0F3A6D,
1071 PREFIX_VEX_0F3A6E,
1072 PREFIX_VEX_0F3A6F,
1073 PREFIX_VEX_0F3A78,
1074 PREFIX_VEX_0F3A79,
1075 PREFIX_VEX_0F3A7A,
1076 PREFIX_VEX_0F3A7B,
1077 PREFIX_VEX_0F3A7C,
1078 PREFIX_VEX_0F3A7D,
1079 PREFIX_VEX_0F3A7E,
1080 PREFIX_VEX_0F3A7F,
1081 PREFIX_VEX_0F3ADF
51e7da1b 1082};
4e7d34a6 1083
51e7da1b
L
1084enum
1085{
1086 X86_64_06 = 0,
3873ba12
L
1087 X86_64_07,
1088 X86_64_0D,
1089 X86_64_16,
1090 X86_64_17,
1091 X86_64_1E,
1092 X86_64_1F,
1093 X86_64_27,
1094 X86_64_2F,
1095 X86_64_37,
1096 X86_64_3F,
1097 X86_64_60,
1098 X86_64_61,
1099 X86_64_62,
1100 X86_64_63,
1101 X86_64_6D,
1102 X86_64_6F,
1103 X86_64_9A,
1104 X86_64_C4,
1105 X86_64_C5,
1106 X86_64_CE,
1107 X86_64_D4,
1108 X86_64_D5,
1109 X86_64_EA,
1110 X86_64_0F01_REG_0,
1111 X86_64_0F01_REG_1,
1112 X86_64_0F01_REG_2,
1113 X86_64_0F01_REG_3
51e7da1b 1114};
4e7d34a6 1115
51e7da1b
L
1116enum
1117{
1118 THREE_BYTE_0F38 = 0,
3873ba12
L
1119 THREE_BYTE_0F3A,
1120 THREE_BYTE_0F7A
51e7da1b 1121};
4e7d34a6 1122
f88c9eb0
SP
1123enum
1124{
5dd85c99
SP
1125 XOP_08 = 0,
1126 XOP_09,
f88c9eb0
SP
1127 XOP_0A
1128};
1129
51e7da1b
L
1130enum
1131{
1132 VEX_0F = 0,
3873ba12
L
1133 VEX_0F38,
1134 VEX_0F3A
51e7da1b 1135};
c0f3af97 1136
51e7da1b
L
1137enum
1138{
592a252b
L
1139 VEX_LEN_0F10_P_1 = 0,
1140 VEX_LEN_0F10_P_3,
1141 VEX_LEN_0F11_P_1,
1142 VEX_LEN_0F11_P_3,
1143 VEX_LEN_0F12_P_0_M_0,
1144 VEX_LEN_0F12_P_0_M_1,
1145 VEX_LEN_0F12_P_2,
1146 VEX_LEN_0F13_M_0,
1147 VEX_LEN_0F16_P_0_M_0,
1148 VEX_LEN_0F16_P_0_M_1,
1149 VEX_LEN_0F16_P_2,
1150 VEX_LEN_0F17_M_0,
1151 VEX_LEN_0F2A_P_1,
1152 VEX_LEN_0F2A_P_3,
1153 VEX_LEN_0F2C_P_1,
1154 VEX_LEN_0F2C_P_3,
1155 VEX_LEN_0F2D_P_1,
1156 VEX_LEN_0F2D_P_3,
1157 VEX_LEN_0F2E_P_0,
1158 VEX_LEN_0F2E_P_2,
1159 VEX_LEN_0F2F_P_0,
1160 VEX_LEN_0F2F_P_2,
1161 VEX_LEN_0F51_P_1,
1162 VEX_LEN_0F51_P_3,
1163 VEX_LEN_0F52_P_1,
1164 VEX_LEN_0F53_P_1,
1165 VEX_LEN_0F58_P_1,
1166 VEX_LEN_0F58_P_3,
1167 VEX_LEN_0F59_P_1,
1168 VEX_LEN_0F59_P_3,
1169 VEX_LEN_0F5A_P_1,
1170 VEX_LEN_0F5A_P_3,
1171 VEX_LEN_0F5C_P_1,
1172 VEX_LEN_0F5C_P_3,
1173 VEX_LEN_0F5D_P_1,
1174 VEX_LEN_0F5D_P_3,
1175 VEX_LEN_0F5E_P_1,
1176 VEX_LEN_0F5E_P_3,
1177 VEX_LEN_0F5F_P_1,
1178 VEX_LEN_0F5F_P_3,
1179 VEX_LEN_0F60_P_2,
1180 VEX_LEN_0F61_P_2,
1181 VEX_LEN_0F62_P_2,
1182 VEX_LEN_0F63_P_2,
1183 VEX_LEN_0F64_P_2,
1184 VEX_LEN_0F65_P_2,
1185 VEX_LEN_0F66_P_2,
1186 VEX_LEN_0F67_P_2,
1187 VEX_LEN_0F68_P_2,
1188 VEX_LEN_0F69_P_2,
1189 VEX_LEN_0F6A_P_2,
1190 VEX_LEN_0F6B_P_2,
1191 VEX_LEN_0F6C_P_2,
1192 VEX_LEN_0F6D_P_2,
1193 VEX_LEN_0F6E_P_2,
1194 VEX_LEN_0F70_P_1,
1195 VEX_LEN_0F70_P_2,
1196 VEX_LEN_0F70_P_3,
1197 VEX_LEN_0F71_R_2_P_2,
1198 VEX_LEN_0F71_R_4_P_2,
1199 VEX_LEN_0F71_R_6_P_2,
1200 VEX_LEN_0F72_R_2_P_2,
1201 VEX_LEN_0F72_R_4_P_2,
1202 VEX_LEN_0F72_R_6_P_2,
1203 VEX_LEN_0F73_R_2_P_2,
1204 VEX_LEN_0F73_R_3_P_2,
1205 VEX_LEN_0F73_R_6_P_2,
1206 VEX_LEN_0F73_R_7_P_2,
1207 VEX_LEN_0F74_P_2,
1208 VEX_LEN_0F75_P_2,
1209 VEX_LEN_0F76_P_2,
1210 VEX_LEN_0F7E_P_1,
1211 VEX_LEN_0F7E_P_2,
1212 VEX_LEN_0FAE_R_2_M_0,
1213 VEX_LEN_0FAE_R_3_M_0,
1214 VEX_LEN_0FC2_P_1,
1215 VEX_LEN_0FC2_P_3,
1216 VEX_LEN_0FC4_P_2,
1217 VEX_LEN_0FC5_P_2,
1218 VEX_LEN_0FD1_P_2,
1219 VEX_LEN_0FD2_P_2,
1220 VEX_LEN_0FD3_P_2,
1221 VEX_LEN_0FD4_P_2,
1222 VEX_LEN_0FD5_P_2,
1223 VEX_LEN_0FD6_P_2,
1224 VEX_LEN_0FD7_P_2_M_1,
1225 VEX_LEN_0FD8_P_2,
1226 VEX_LEN_0FD9_P_2,
1227 VEX_LEN_0FDA_P_2,
1228 VEX_LEN_0FDB_P_2,
1229 VEX_LEN_0FDC_P_2,
1230 VEX_LEN_0FDD_P_2,
1231 VEX_LEN_0FDE_P_2,
1232 VEX_LEN_0FDF_P_2,
1233 VEX_LEN_0FE0_P_2,
1234 VEX_LEN_0FE1_P_2,
1235 VEX_LEN_0FE2_P_2,
1236 VEX_LEN_0FE3_P_2,
1237 VEX_LEN_0FE4_P_2,
1238 VEX_LEN_0FE5_P_2,
1239 VEX_LEN_0FE8_P_2,
1240 VEX_LEN_0FE9_P_2,
1241 VEX_LEN_0FEA_P_2,
1242 VEX_LEN_0FEB_P_2,
1243 VEX_LEN_0FEC_P_2,
1244 VEX_LEN_0FED_P_2,
1245 VEX_LEN_0FEE_P_2,
1246 VEX_LEN_0FEF_P_2,
1247 VEX_LEN_0FF1_P_2,
1248 VEX_LEN_0FF2_P_2,
1249 VEX_LEN_0FF3_P_2,
1250 VEX_LEN_0FF4_P_2,
1251 VEX_LEN_0FF5_P_2,
1252 VEX_LEN_0FF6_P_2,
1253 VEX_LEN_0FF7_P_2,
1254 VEX_LEN_0FF8_P_2,
1255 VEX_LEN_0FF9_P_2,
1256 VEX_LEN_0FFA_P_2,
1257 VEX_LEN_0FFB_P_2,
1258 VEX_LEN_0FFC_P_2,
1259 VEX_LEN_0FFD_P_2,
1260 VEX_LEN_0FFE_P_2,
1261 VEX_LEN_0F3800_P_2,
1262 VEX_LEN_0F3801_P_2,
1263 VEX_LEN_0F3802_P_2,
1264 VEX_LEN_0F3803_P_2,
1265 VEX_LEN_0F3804_P_2,
1266 VEX_LEN_0F3805_P_2,
1267 VEX_LEN_0F3806_P_2,
1268 VEX_LEN_0F3807_P_2,
1269 VEX_LEN_0F3808_P_2,
1270 VEX_LEN_0F3809_P_2,
1271 VEX_LEN_0F380A_P_2,
1272 VEX_LEN_0F380B_P_2,
1273 VEX_LEN_0F3819_P_2_M_0,
1274 VEX_LEN_0F381A_P_2_M_0,
1275 VEX_LEN_0F381C_P_2,
1276 VEX_LEN_0F381D_P_2,
1277 VEX_LEN_0F381E_P_2,
1278 VEX_LEN_0F3820_P_2,
1279 VEX_LEN_0F3821_P_2,
1280 VEX_LEN_0F3822_P_2,
1281 VEX_LEN_0F3823_P_2,
1282 VEX_LEN_0F3824_P_2,
1283 VEX_LEN_0F3825_P_2,
1284 VEX_LEN_0F3828_P_2,
1285 VEX_LEN_0F3829_P_2,
1286 VEX_LEN_0F382A_P_2_M_0,
1287 VEX_LEN_0F382B_P_2,
1288 VEX_LEN_0F3830_P_2,
1289 VEX_LEN_0F3831_P_2,
1290 VEX_LEN_0F3832_P_2,
1291 VEX_LEN_0F3833_P_2,
1292 VEX_LEN_0F3834_P_2,
1293 VEX_LEN_0F3835_P_2,
1294 VEX_LEN_0F3837_P_2,
1295 VEX_LEN_0F3838_P_2,
1296 VEX_LEN_0F3839_P_2,
1297 VEX_LEN_0F383A_P_2,
1298 VEX_LEN_0F383B_P_2,
1299 VEX_LEN_0F383C_P_2,
1300 VEX_LEN_0F383D_P_2,
1301 VEX_LEN_0F383E_P_2,
1302 VEX_LEN_0F383F_P_2,
1303 VEX_LEN_0F3840_P_2,
1304 VEX_LEN_0F3841_P_2,
1305 VEX_LEN_0F38DB_P_2,
1306 VEX_LEN_0F38DC_P_2,
1307 VEX_LEN_0F38DD_P_2,
1308 VEX_LEN_0F38DE_P_2,
1309 VEX_LEN_0F38DF_P_2,
f12dc422
L
1310 VEX_LEN_0F38F2_P_0,
1311 VEX_LEN_0F38F3_R_1_P_0,
1312 VEX_LEN_0F38F3_R_2_P_0,
1313 VEX_LEN_0F38F3_R_3_P_0,
1314 VEX_LEN_0F38F7_P_0,
592a252b
L
1315 VEX_LEN_0F3A06_P_2,
1316 VEX_LEN_0F3A0A_P_2,
1317 VEX_LEN_0F3A0B_P_2,
1318 VEX_LEN_0F3A0E_P_2,
1319 VEX_LEN_0F3A0F_P_2,
1320 VEX_LEN_0F3A14_P_2,
1321 VEX_LEN_0F3A15_P_2,
1322 VEX_LEN_0F3A16_P_2,
1323 VEX_LEN_0F3A17_P_2,
1324 VEX_LEN_0F3A18_P_2,
1325 VEX_LEN_0F3A19_P_2,
1326 VEX_LEN_0F3A20_P_2,
1327 VEX_LEN_0F3A21_P_2,
1328 VEX_LEN_0F3A22_P_2,
1329 VEX_LEN_0F3A41_P_2,
1330 VEX_LEN_0F3A42_P_2,
1331 VEX_LEN_0F3A44_P_2,
1332 VEX_LEN_0F3A4C_P_2,
1333 VEX_LEN_0F3A60_P_2,
1334 VEX_LEN_0F3A61_P_2,
1335 VEX_LEN_0F3A62_P_2,
1336 VEX_LEN_0F3A63_P_2,
1337 VEX_LEN_0F3A6A_P_2,
1338 VEX_LEN_0F3A6B_P_2,
1339 VEX_LEN_0F3A6E_P_2,
1340 VEX_LEN_0F3A6F_P_2,
1341 VEX_LEN_0F3A7A_P_2,
1342 VEX_LEN_0F3A7B_P_2,
1343 VEX_LEN_0F3A7E_P_2,
1344 VEX_LEN_0F3A7F_P_2,
1345 VEX_LEN_0F3ADF_P_2,
1346 VEX_LEN_0FXOP_09_80,
1347 VEX_LEN_0FXOP_09_81
51e7da1b 1348};
c0f3af97 1349
9e30b8e0
L
1350enum
1351{
592a252b
L
1352 VEX_W_0F10_P_0 = 0,
1353 VEX_W_0F10_P_1,
1354 VEX_W_0F10_P_2,
1355 VEX_W_0F10_P_3,
1356 VEX_W_0F11_P_0,
1357 VEX_W_0F11_P_1,
1358 VEX_W_0F11_P_2,
1359 VEX_W_0F11_P_3,
1360 VEX_W_0F12_P_0_M_0,
1361 VEX_W_0F12_P_0_M_1,
1362 VEX_W_0F12_P_1,
1363 VEX_W_0F12_P_2,
1364 VEX_W_0F12_P_3,
1365 VEX_W_0F13_M_0,
1366 VEX_W_0F14,
1367 VEX_W_0F15,
1368 VEX_W_0F16_P_0_M_0,
1369 VEX_W_0F16_P_0_M_1,
1370 VEX_W_0F16_P_1,
1371 VEX_W_0F16_P_2,
1372 VEX_W_0F17_M_0,
1373 VEX_W_0F28,
1374 VEX_W_0F29,
1375 VEX_W_0F2B_M_0,
1376 VEX_W_0F2E_P_0,
1377 VEX_W_0F2E_P_2,
1378 VEX_W_0F2F_P_0,
1379 VEX_W_0F2F_P_2,
1380 VEX_W_0F50_M_0,
1381 VEX_W_0F51_P_0,
1382 VEX_W_0F51_P_1,
1383 VEX_W_0F51_P_2,
1384 VEX_W_0F51_P_3,
1385 VEX_W_0F52_P_0,
1386 VEX_W_0F52_P_1,
1387 VEX_W_0F53_P_0,
1388 VEX_W_0F53_P_1,
1389 VEX_W_0F58_P_0,
1390 VEX_W_0F58_P_1,
1391 VEX_W_0F58_P_2,
1392 VEX_W_0F58_P_3,
1393 VEX_W_0F59_P_0,
1394 VEX_W_0F59_P_1,
1395 VEX_W_0F59_P_2,
1396 VEX_W_0F59_P_3,
1397 VEX_W_0F5A_P_0,
1398 VEX_W_0F5A_P_1,
1399 VEX_W_0F5A_P_3,
1400 VEX_W_0F5B_P_0,
1401 VEX_W_0F5B_P_1,
1402 VEX_W_0F5B_P_2,
1403 VEX_W_0F5C_P_0,
1404 VEX_W_0F5C_P_1,
1405 VEX_W_0F5C_P_2,
1406 VEX_W_0F5C_P_3,
1407 VEX_W_0F5D_P_0,
1408 VEX_W_0F5D_P_1,
1409 VEX_W_0F5D_P_2,
1410 VEX_W_0F5D_P_3,
1411 VEX_W_0F5E_P_0,
1412 VEX_W_0F5E_P_1,
1413 VEX_W_0F5E_P_2,
1414 VEX_W_0F5E_P_3,
1415 VEX_W_0F5F_P_0,
1416 VEX_W_0F5F_P_1,
1417 VEX_W_0F5F_P_2,
1418 VEX_W_0F5F_P_3,
1419 VEX_W_0F60_P_2,
1420 VEX_W_0F61_P_2,
1421 VEX_W_0F62_P_2,
1422 VEX_W_0F63_P_2,
1423 VEX_W_0F64_P_2,
1424 VEX_W_0F65_P_2,
1425 VEX_W_0F66_P_2,
1426 VEX_W_0F67_P_2,
1427 VEX_W_0F68_P_2,
1428 VEX_W_0F69_P_2,
1429 VEX_W_0F6A_P_2,
1430 VEX_W_0F6B_P_2,
1431 VEX_W_0F6C_P_2,
1432 VEX_W_0F6D_P_2,
1433 VEX_W_0F6F_P_1,
1434 VEX_W_0F6F_P_2,
1435 VEX_W_0F70_P_1,
1436 VEX_W_0F70_P_2,
1437 VEX_W_0F70_P_3,
1438 VEX_W_0F71_R_2_P_2,
1439 VEX_W_0F71_R_4_P_2,
1440 VEX_W_0F71_R_6_P_2,
1441 VEX_W_0F72_R_2_P_2,
1442 VEX_W_0F72_R_4_P_2,
1443 VEX_W_0F72_R_6_P_2,
1444 VEX_W_0F73_R_2_P_2,
1445 VEX_W_0F73_R_3_P_2,
1446 VEX_W_0F73_R_6_P_2,
1447 VEX_W_0F73_R_7_P_2,
1448 VEX_W_0F74_P_2,
1449 VEX_W_0F75_P_2,
1450 VEX_W_0F76_P_2,
1451 VEX_W_0F77_P_0,
1452 VEX_W_0F7C_P_2,
1453 VEX_W_0F7C_P_3,
1454 VEX_W_0F7D_P_2,
1455 VEX_W_0F7D_P_3,
1456 VEX_W_0F7E_P_1,
1457 VEX_W_0F7F_P_1,
1458 VEX_W_0F7F_P_2,
1459 VEX_W_0FAE_R_2_M_0,
1460 VEX_W_0FAE_R_3_M_0,
1461 VEX_W_0FC2_P_0,
1462 VEX_W_0FC2_P_1,
1463 VEX_W_0FC2_P_2,
1464 VEX_W_0FC2_P_3,
1465 VEX_W_0FC4_P_2,
1466 VEX_W_0FC5_P_2,
1467 VEX_W_0FD0_P_2,
1468 VEX_W_0FD0_P_3,
1469 VEX_W_0FD1_P_2,
1470 VEX_W_0FD2_P_2,
1471 VEX_W_0FD3_P_2,
1472 VEX_W_0FD4_P_2,
1473 VEX_W_0FD5_P_2,
1474 VEX_W_0FD6_P_2,
1475 VEX_W_0FD7_P_2_M_1,
1476 VEX_W_0FD8_P_2,
1477 VEX_W_0FD9_P_2,
1478 VEX_W_0FDA_P_2,
1479 VEX_W_0FDB_P_2,
1480 VEX_W_0FDC_P_2,
1481 VEX_W_0FDD_P_2,
1482 VEX_W_0FDE_P_2,
1483 VEX_W_0FDF_P_2,
1484 VEX_W_0FE0_P_2,
1485 VEX_W_0FE1_P_2,
1486 VEX_W_0FE2_P_2,
1487 VEX_W_0FE3_P_2,
1488 VEX_W_0FE4_P_2,
1489 VEX_W_0FE5_P_2,
1490 VEX_W_0FE6_P_1,
1491 VEX_W_0FE6_P_2,
1492 VEX_W_0FE6_P_3,
1493 VEX_W_0FE7_P_2_M_0,
1494 VEX_W_0FE8_P_2,
1495 VEX_W_0FE9_P_2,
1496 VEX_W_0FEA_P_2,
1497 VEX_W_0FEB_P_2,
1498 VEX_W_0FEC_P_2,
1499 VEX_W_0FED_P_2,
1500 VEX_W_0FEE_P_2,
1501 VEX_W_0FEF_P_2,
1502 VEX_W_0FF0_P_3_M_0,
1503 VEX_W_0FF1_P_2,
1504 VEX_W_0FF2_P_2,
1505 VEX_W_0FF3_P_2,
1506 VEX_W_0FF4_P_2,
1507 VEX_W_0FF5_P_2,
1508 VEX_W_0FF6_P_2,
1509 VEX_W_0FF7_P_2,
1510 VEX_W_0FF8_P_2,
1511 VEX_W_0FF9_P_2,
1512 VEX_W_0FFA_P_2,
1513 VEX_W_0FFB_P_2,
1514 VEX_W_0FFC_P_2,
1515 VEX_W_0FFD_P_2,
1516 VEX_W_0FFE_P_2,
1517 VEX_W_0F3800_P_2,
1518 VEX_W_0F3801_P_2,
1519 VEX_W_0F3802_P_2,
1520 VEX_W_0F3803_P_2,
1521 VEX_W_0F3804_P_2,
1522 VEX_W_0F3805_P_2,
1523 VEX_W_0F3806_P_2,
1524 VEX_W_0F3807_P_2,
1525 VEX_W_0F3808_P_2,
1526 VEX_W_0F3809_P_2,
1527 VEX_W_0F380A_P_2,
1528 VEX_W_0F380B_P_2,
1529 VEX_W_0F380C_P_2,
1530 VEX_W_0F380D_P_2,
1531 VEX_W_0F380E_P_2,
1532 VEX_W_0F380F_P_2,
1533 VEX_W_0F3817_P_2,
1534 VEX_W_0F3818_P_2_M_0,
1535 VEX_W_0F3819_P_2_M_0,
1536 VEX_W_0F381A_P_2_M_0,
1537 VEX_W_0F381C_P_2,
1538 VEX_W_0F381D_P_2,
1539 VEX_W_0F381E_P_2,
1540 VEX_W_0F3820_P_2,
1541 VEX_W_0F3821_P_2,
1542 VEX_W_0F3822_P_2,
1543 VEX_W_0F3823_P_2,
1544 VEX_W_0F3824_P_2,
1545 VEX_W_0F3825_P_2,
1546 VEX_W_0F3828_P_2,
1547 VEX_W_0F3829_P_2,
1548 VEX_W_0F382A_P_2_M_0,
1549 VEX_W_0F382B_P_2,
1550 VEX_W_0F382C_P_2_M_0,
1551 VEX_W_0F382D_P_2_M_0,
1552 VEX_W_0F382E_P_2_M_0,
1553 VEX_W_0F382F_P_2_M_0,
1554 VEX_W_0F3830_P_2,
1555 VEX_W_0F3831_P_2,
1556 VEX_W_0F3832_P_2,
1557 VEX_W_0F3833_P_2,
1558 VEX_W_0F3834_P_2,
1559 VEX_W_0F3835_P_2,
1560 VEX_W_0F3837_P_2,
1561 VEX_W_0F3838_P_2,
1562 VEX_W_0F3839_P_2,
1563 VEX_W_0F383A_P_2,
1564 VEX_W_0F383B_P_2,
1565 VEX_W_0F383C_P_2,
1566 VEX_W_0F383D_P_2,
1567 VEX_W_0F383E_P_2,
1568 VEX_W_0F383F_P_2,
1569 VEX_W_0F3840_P_2,
1570 VEX_W_0F3841_P_2,
1571 VEX_W_0F38DB_P_2,
1572 VEX_W_0F38DC_P_2,
1573 VEX_W_0F38DD_P_2,
1574 VEX_W_0F38DE_P_2,
1575 VEX_W_0F38DF_P_2,
1576 VEX_W_0F3A04_P_2,
1577 VEX_W_0F3A05_P_2,
1578 VEX_W_0F3A06_P_2,
1579 VEX_W_0F3A08_P_2,
1580 VEX_W_0F3A09_P_2,
1581 VEX_W_0F3A0A_P_2,
1582 VEX_W_0F3A0B_P_2,
1583 VEX_W_0F3A0C_P_2,
1584 VEX_W_0F3A0D_P_2,
1585 VEX_W_0F3A0E_P_2,
1586 VEX_W_0F3A0F_P_2,
1587 VEX_W_0F3A14_P_2,
1588 VEX_W_0F3A15_P_2,
1589 VEX_W_0F3A18_P_2,
1590 VEX_W_0F3A19_P_2,
1591 VEX_W_0F3A20_P_2,
1592 VEX_W_0F3A21_P_2,
1593 VEX_W_0F3A40_P_2,
1594 VEX_W_0F3A41_P_2,
1595 VEX_W_0F3A42_P_2,
1596 VEX_W_0F3A44_P_2,
1597 VEX_W_0F3A48_P_2,
1598 VEX_W_0F3A49_P_2,
1599 VEX_W_0F3A4A_P_2,
1600 VEX_W_0F3A4B_P_2,
1601 VEX_W_0F3A4C_P_2,
1602 VEX_W_0F3A60_P_2,
1603 VEX_W_0F3A61_P_2,
1604 VEX_W_0F3A62_P_2,
1605 VEX_W_0F3A63_P_2,
1606 VEX_W_0F3ADF_P_2
9e30b8e0
L
1607};
1608
26ca5450 1609typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1610
1611struct dis386 {
2da11e11 1612 const char *name;
ce518a5f
L
1613 struct
1614 {
1615 op_rtn rtn;
1616 int bytemode;
1617 } op[MAX_OPERANDS];
252b5132
RH
1618};
1619
1620/* Upper case letters in the instruction names here are macros.
1621 'A' => print 'b' if no register operands or suffix_always is true
1622 'B' => print 'b' if suffix_always is true
9306ca4a 1623 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1624 size prefix
ed7841b3 1625 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1626 suffix_always is true
252b5132 1627 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1628 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1629 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1630 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1631 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1632 for some of the macro letters)
9306ca4a 1633 'J' => print 'l'
42903f7f 1634 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1635 'L' => print 'l' if suffix_always is true
9d141669 1636 'M' => print 'r' if intel_mnemonic is false.
252b5132 1637 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1638 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1639 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1640 or suffix_always is true. print 'q' if rex prefix is present.
1641 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1642 is true
a35ca55a 1643 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1644 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1645 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1646 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1647 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1648 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1649 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1650 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1651 suffix_always is true.
6dd5059a 1652 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1653 '!' => change condition from true to false or from false to true.
98b528ac
L
1654 '%' => add 1 upper case letter to the macro.
1655
1656 2 upper case letter macros:
c0f3af97
L
1657 "XY" => print 'x' or 'y' if no register operands or suffix_always
1658 is true.
4b06377f
L
1659 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1660 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1661 or suffix_always is true
4b06377f
L
1662 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1663 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1664 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
52b15da3 1665
6439fc28
AM
1666 Many of the above letters print nothing in Intel mode. See "putop"
1667 for the details.
52b15da3 1668
6439fc28 1669 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1670 mnemonic strings for AT&T and Intel. */
252b5132 1671
6439fc28 1672static const struct dis386 dis386[] = {
252b5132 1673 /* 00 */
ce518a5f
L
1674 { "addB", { Eb, Gb } },
1675 { "addS", { Ev, Gv } },
c7532693
L
1676 { "addB", { Gb, EbS } },
1677 { "addS", { Gv, EvS } },
ce518a5f
L
1678 { "addB", { AL, Ib } },
1679 { "addS", { eAX, Iv } },
4e7d34a6
L
1680 { X86_64_TABLE (X86_64_06) },
1681 { X86_64_TABLE (X86_64_07) },
252b5132 1682 /* 08 */
ce518a5f
L
1683 { "orB", { Eb, Gb } },
1684 { "orS", { Ev, Gv } },
c7532693
L
1685 { "orB", { Gb, EbS } },
1686 { "orS", { Gv, EvS } },
ce518a5f
L
1687 { "orB", { AL, Ib } },
1688 { "orS", { eAX, Iv } },
4e7d34a6 1689 { X86_64_TABLE (X86_64_0D) },
592d1631 1690 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 1691 /* 10 */
ce518a5f
L
1692 { "adcB", { Eb, Gb } },
1693 { "adcS", { Ev, Gv } },
c7532693
L
1694 { "adcB", { Gb, EbS } },
1695 { "adcS", { Gv, EvS } },
ce518a5f
L
1696 { "adcB", { AL, Ib } },
1697 { "adcS", { eAX, Iv } },
4e7d34a6
L
1698 { X86_64_TABLE (X86_64_16) },
1699 { X86_64_TABLE (X86_64_17) },
252b5132 1700 /* 18 */
ce518a5f
L
1701 { "sbbB", { Eb, Gb } },
1702 { "sbbS", { Ev, Gv } },
c7532693
L
1703 { "sbbB", { Gb, EbS } },
1704 { "sbbS", { Gv, EvS } },
ce518a5f
L
1705 { "sbbB", { AL, Ib } },
1706 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1707 { X86_64_TABLE (X86_64_1E) },
1708 { X86_64_TABLE (X86_64_1F) },
252b5132 1709 /* 20 */
ce518a5f
L
1710 { "andB", { Eb, Gb } },
1711 { "andS", { Ev, Gv } },
c7532693
L
1712 { "andB", { Gb, EbS } },
1713 { "andS", { Gv, EvS } },
ce518a5f
L
1714 { "andB", { AL, Ib } },
1715 { "andS", { eAX, Iv } },
592d1631 1716 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 1717 { X86_64_TABLE (X86_64_27) },
252b5132 1718 /* 28 */
ce518a5f
L
1719 { "subB", { Eb, Gb } },
1720 { "subS", { Ev, Gv } },
c7532693
L
1721 { "subB", { Gb, EbS } },
1722 { "subS", { Gv, EvS } },
ce518a5f
L
1723 { "subB", { AL, Ib } },
1724 { "subS", { eAX, Iv } },
592d1631 1725 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 1726 { X86_64_TABLE (X86_64_2F) },
252b5132 1727 /* 30 */
ce518a5f
L
1728 { "xorB", { Eb, Gb } },
1729 { "xorS", { Ev, Gv } },
c7532693
L
1730 { "xorB", { Gb, EbS } },
1731 { "xorS", { Gv, EvS } },
ce518a5f
L
1732 { "xorB", { AL, Ib } },
1733 { "xorS", { eAX, Iv } },
592d1631 1734 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 1735 { X86_64_TABLE (X86_64_37) },
252b5132 1736 /* 38 */
ce518a5f
L
1737 { "cmpB", { Eb, Gb } },
1738 { "cmpS", { Ev, Gv } },
c7532693
L
1739 { "cmpB", { Gb, EbS } },
1740 { "cmpS", { Gv, EvS } },
ce518a5f
L
1741 { "cmpB", { AL, Ib } },
1742 { "cmpS", { eAX, Iv } },
592d1631 1743 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 1744 { X86_64_TABLE (X86_64_3F) },
252b5132 1745 /* 40 */
ce518a5f
L
1746 { "inc{S|}", { RMeAX } },
1747 { "inc{S|}", { RMeCX } },
1748 { "inc{S|}", { RMeDX } },
1749 { "inc{S|}", { RMeBX } },
1750 { "inc{S|}", { RMeSP } },
1751 { "inc{S|}", { RMeBP } },
1752 { "inc{S|}", { RMeSI } },
1753 { "inc{S|}", { RMeDI } },
252b5132 1754 /* 48 */
ce518a5f
L
1755 { "dec{S|}", { RMeAX } },
1756 { "dec{S|}", { RMeCX } },
1757 { "dec{S|}", { RMeDX } },
1758 { "dec{S|}", { RMeBX } },
1759 { "dec{S|}", { RMeSP } },
1760 { "dec{S|}", { RMeBP } },
1761 { "dec{S|}", { RMeSI } },
1762 { "dec{S|}", { RMeDI } },
252b5132 1763 /* 50 */
ce518a5f
L
1764 { "pushV", { RMrAX } },
1765 { "pushV", { RMrCX } },
1766 { "pushV", { RMrDX } },
1767 { "pushV", { RMrBX } },
1768 { "pushV", { RMrSP } },
1769 { "pushV", { RMrBP } },
1770 { "pushV", { RMrSI } },
1771 { "pushV", { RMrDI } },
252b5132 1772 /* 58 */
ce518a5f
L
1773 { "popV", { RMrAX } },
1774 { "popV", { RMrCX } },
1775 { "popV", { RMrDX } },
1776 { "popV", { RMrBX } },
1777 { "popV", { RMrSP } },
1778 { "popV", { RMrBP } },
1779 { "popV", { RMrSI } },
1780 { "popV", { RMrDI } },
252b5132 1781 /* 60 */
4e7d34a6
L
1782 { X86_64_TABLE (X86_64_60) },
1783 { X86_64_TABLE (X86_64_61) },
1784 { X86_64_TABLE (X86_64_62) },
1785 { X86_64_TABLE (X86_64_63) },
592d1631
L
1786 { Bad_Opcode }, /* seg fs */
1787 { Bad_Opcode }, /* seg gs */
1788 { Bad_Opcode }, /* op size prefix */
1789 { Bad_Opcode }, /* adr size prefix */
252b5132 1790 /* 68 */
d9e3625e 1791 { "pushT", { sIv } },
ce518a5f
L
1792 { "imulS", { Gv, Ev, Iv } },
1793 { "pushT", { sIb } },
1794 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1795 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1796 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1797 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1798 { X86_64_TABLE (X86_64_6F) },
252b5132 1799 /* 70 */
ce518a5f
L
1800 { "joH", { Jb, XX, cond_jump_flag } },
1801 { "jnoH", { Jb, XX, cond_jump_flag } },
1802 { "jbH", { Jb, XX, cond_jump_flag } },
1803 { "jaeH", { Jb, XX, cond_jump_flag } },
1804 { "jeH", { Jb, XX, cond_jump_flag } },
1805 { "jneH", { Jb, XX, cond_jump_flag } },
1806 { "jbeH", { Jb, XX, cond_jump_flag } },
1807 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1808 /* 78 */
ce518a5f
L
1809 { "jsH", { Jb, XX, cond_jump_flag } },
1810 { "jnsH", { Jb, XX, cond_jump_flag } },
1811 { "jpH", { Jb, XX, cond_jump_flag } },
1812 { "jnpH", { Jb, XX, cond_jump_flag } },
1813 { "jlH", { Jb, XX, cond_jump_flag } },
1814 { "jgeH", { Jb, XX, cond_jump_flag } },
1815 { "jleH", { Jb, XX, cond_jump_flag } },
1816 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1817 /* 80 */
1ceb70f8
L
1818 { REG_TABLE (REG_80) },
1819 { REG_TABLE (REG_81) },
592d1631 1820 { Bad_Opcode },
1ceb70f8 1821 { REG_TABLE (REG_82) },
ce518a5f
L
1822 { "testB", { Eb, Gb } },
1823 { "testS", { Ev, Gv } },
1824 { "xchgB", { Eb, Gb } },
1825 { "xchgS", { Ev, Gv } },
252b5132 1826 /* 88 */
ce518a5f
L
1827 { "movB", { Eb, Gb } },
1828 { "movS", { Ev, Gv } },
b6169b20
L
1829 { "movB", { Gb, EbS } },
1830 { "movS", { Gv, EvS } },
ce518a5f 1831 { "movD", { Sv, Sw } },
1ceb70f8 1832 { MOD_TABLE (MOD_8D) },
ce518a5f 1833 { "movD", { Sw, Sv } },
1ceb70f8 1834 { REG_TABLE (REG_8F) },
252b5132 1835 /* 90 */
1ceb70f8 1836 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1837 { "xchgS", { RMeCX, eAX } },
1838 { "xchgS", { RMeDX, eAX } },
1839 { "xchgS", { RMeBX, eAX } },
1840 { "xchgS", { RMeSP, eAX } },
1841 { "xchgS", { RMeBP, eAX } },
1842 { "xchgS", { RMeSI, eAX } },
1843 { "xchgS", { RMeDI, eAX } },
252b5132 1844 /* 98 */
7c52e0e8
L
1845 { "cW{t|}R", { XX } },
1846 { "cR{t|}O", { XX } },
4e7d34a6 1847 { X86_64_TABLE (X86_64_9A) },
592d1631 1848 { Bad_Opcode }, /* fwait */
ce518a5f
L
1849 { "pushfT", { XX } },
1850 { "popfT", { XX } },
7c52e0e8
L
1851 { "sahf", { XX } },
1852 { "lahf", { XX } },
252b5132 1853 /* a0 */
4b06377f
L
1854 { "mov%LB", { AL, Ob } },
1855 { "mov%LS", { eAX, Ov } },
1856 { "mov%LB", { Ob, AL } },
1857 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1858 { "movs{b|}", { Ybr, Xb } },
1859 { "movs{R|}", { Yvr, Xv } },
1860 { "cmps{b|}", { Xb, Yb } },
1861 { "cmps{R|}", { Xv, Yv } },
252b5132 1862 /* a8 */
ce518a5f
L
1863 { "testB", { AL, Ib } },
1864 { "testS", { eAX, Iv } },
1865 { "stosB", { Ybr, AL } },
1866 { "stosS", { Yvr, eAX } },
1867 { "lodsB", { ALr, Xb } },
1868 { "lodsS", { eAXr, Xv } },
1869 { "scasB", { AL, Yb } },
1870 { "scasS", { eAX, Yv } },
252b5132 1871 /* b0 */
ce518a5f
L
1872 { "movB", { RMAL, Ib } },
1873 { "movB", { RMCL, Ib } },
1874 { "movB", { RMDL, Ib } },
1875 { "movB", { RMBL, Ib } },
1876 { "movB", { RMAH, Ib } },
1877 { "movB", { RMCH, Ib } },
1878 { "movB", { RMDH, Ib } },
1879 { "movB", { RMBH, Ib } },
252b5132 1880 /* b8 */
4b06377f
L
1881 { "mov%LV", { RMeAX, Iv64 } },
1882 { "mov%LV", { RMeCX, Iv64 } },
1883 { "mov%LV", { RMeDX, Iv64 } },
1884 { "mov%LV", { RMeBX, Iv64 } },
1885 { "mov%LV", { RMeSP, Iv64 } },
1886 { "mov%LV", { RMeBP, Iv64 } },
1887 { "mov%LV", { RMeSI, Iv64 } },
1888 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1889 /* c0 */
1ceb70f8
L
1890 { REG_TABLE (REG_C0) },
1891 { REG_TABLE (REG_C1) },
ce518a5f
L
1892 { "retT", { Iw } },
1893 { "retT", { XX } },
4e7d34a6
L
1894 { X86_64_TABLE (X86_64_C4) },
1895 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1896 { REG_TABLE (REG_C6) },
1897 { REG_TABLE (REG_C7) },
252b5132 1898 /* c8 */
ce518a5f
L
1899 { "enterT", { Iw, Ib } },
1900 { "leaveT", { XX } },
ddab3d59
JB
1901 { "Jret{|f}P", { Iw } },
1902 { "Jret{|f}P", { XX } },
ce518a5f
L
1903 { "int3", { XX } },
1904 { "int", { Ib } },
4e7d34a6 1905 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1906 { "iretP", { XX } },
252b5132 1907 /* d0 */
1ceb70f8
L
1908 { REG_TABLE (REG_D0) },
1909 { REG_TABLE (REG_D1) },
1910 { REG_TABLE (REG_D2) },
1911 { REG_TABLE (REG_D3) },
4e7d34a6
L
1912 { X86_64_TABLE (X86_64_D4) },
1913 { X86_64_TABLE (X86_64_D5) },
592d1631 1914 { Bad_Opcode },
ce518a5f 1915 { "xlat", { DSBX } },
252b5132
RH
1916 /* d8 */
1917 { FLOAT },
1918 { FLOAT },
1919 { FLOAT },
1920 { FLOAT },
1921 { FLOAT },
1922 { FLOAT },
1923 { FLOAT },
1924 { FLOAT },
1925 /* e0 */
ce518a5f
L
1926 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1927 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1928 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1929 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1930 { "inB", { AL, Ib } },
1931 { "inG", { zAX, Ib } },
1932 { "outB", { Ib, AL } },
1933 { "outG", { Ib, zAX } },
252b5132 1934 /* e8 */
ce518a5f
L
1935 { "callT", { Jv } },
1936 { "jmpT", { Jv } },
4e7d34a6 1937 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1938 { "jmp", { Jb } },
1939 { "inB", { AL, indirDX } },
1940 { "inG", { zAX, indirDX } },
1941 { "outB", { indirDX, AL } },
1942 { "outG", { indirDX, zAX } },
252b5132 1943 /* f0 */
592d1631 1944 { Bad_Opcode }, /* lock prefix */
ce518a5f 1945 { "icebp", { XX } },
592d1631
L
1946 { Bad_Opcode }, /* repne */
1947 { Bad_Opcode }, /* repz */
ce518a5f
L
1948 { "hlt", { XX } },
1949 { "cmc", { XX } },
1ceb70f8
L
1950 { REG_TABLE (REG_F6) },
1951 { REG_TABLE (REG_F7) },
252b5132 1952 /* f8 */
ce518a5f
L
1953 { "clc", { XX } },
1954 { "stc", { XX } },
1955 { "cli", { XX } },
1956 { "sti", { XX } },
1957 { "cld", { XX } },
1958 { "std", { XX } },
1ceb70f8
L
1959 { REG_TABLE (REG_FE) },
1960 { REG_TABLE (REG_FF) },
252b5132
RH
1961};
1962
6439fc28 1963static const struct dis386 dis386_twobyte[] = {
252b5132 1964 /* 00 */
1ceb70f8
L
1965 { REG_TABLE (REG_0F00 ) },
1966 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1967 { "larS", { Gv, Ew } },
1968 { "lslS", { Gv, Ew } },
592d1631 1969 { Bad_Opcode },
ce518a5f
L
1970 { "syscall", { XX } },
1971 { "clts", { XX } },
1972 { "sysretP", { XX } },
252b5132 1973 /* 08 */
ce518a5f
L
1974 { "invd", { XX } },
1975 { "wbinvd", { XX } },
592d1631 1976 { Bad_Opcode },
b414985b 1977 { "ud2", { XX } },
592d1631 1978 { Bad_Opcode },
b5b1fc4f 1979 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1980 { "femms", { XX } },
1981 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1982 /* 10 */
1ceb70f8
L
1983 { PREFIX_TABLE (PREFIX_0F10) },
1984 { PREFIX_TABLE (PREFIX_0F11) },
1985 { PREFIX_TABLE (PREFIX_0F12) },
1986 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1987 { "unpcklpX", { XM, EXx } },
1988 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1989 { PREFIX_TABLE (PREFIX_0F16) },
1990 { MOD_TABLE (MOD_0F17) },
252b5132 1991 /* 18 */
1ceb70f8 1992 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1993 { "nopQ", { Ev } },
1994 { "nopQ", { Ev } },
1995 { "nopQ", { Ev } },
1996 { "nopQ", { Ev } },
1997 { "nopQ", { Ev } },
1998 { "nopQ", { Ev } },
ce518a5f 1999 { "nopQ", { Ev } },
252b5132 2000 /* 20 */
1ceb70f8
L
2001 { MOD_TABLE (MOD_0F20) },
2002 { MOD_TABLE (MOD_0F21) },
2003 { MOD_TABLE (MOD_0F22) },
2004 { MOD_TABLE (MOD_0F23) },
2005 { MOD_TABLE (MOD_0F24) },
592d1631 2006 { Bad_Opcode },
1ceb70f8 2007 { MOD_TABLE (MOD_0F26) },
592d1631 2008 { Bad_Opcode },
252b5132 2009 /* 28 */
09a2c6cf 2010 { "movapX", { XM, EXx } },
b6169b20 2011 { "movapX", { EXxS, XM } },
1ceb70f8
L
2012 { PREFIX_TABLE (PREFIX_0F2A) },
2013 { PREFIX_TABLE (PREFIX_0F2B) },
2014 { PREFIX_TABLE (PREFIX_0F2C) },
2015 { PREFIX_TABLE (PREFIX_0F2D) },
2016 { PREFIX_TABLE (PREFIX_0F2E) },
2017 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2018 /* 30 */
ce518a5f
L
2019 { "wrmsr", { XX } },
2020 { "rdtsc", { XX } },
2021 { "rdmsr", { XX } },
2022 { "rdpmc", { XX } },
2023 { "sysenter", { XX } },
2024 { "sysexit", { XX } },
592d1631 2025 { Bad_Opcode },
47dd174c 2026 { "getsec", { XX } },
252b5132 2027 /* 38 */
4e7d34a6 2028 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2029 { Bad_Opcode },
4e7d34a6 2030 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2031 { Bad_Opcode },
2032 { Bad_Opcode },
2033 { Bad_Opcode },
2034 { Bad_Opcode },
2035 { Bad_Opcode },
252b5132 2036 /* 40 */
b19d5385
JB
2037 { "cmovoS", { Gv, Ev } },
2038 { "cmovnoS", { Gv, Ev } },
2039 { "cmovbS", { Gv, Ev } },
2040 { "cmovaeS", { Gv, Ev } },
2041 { "cmoveS", { Gv, Ev } },
2042 { "cmovneS", { Gv, Ev } },
2043 { "cmovbeS", { Gv, Ev } },
2044 { "cmovaS", { Gv, Ev } },
252b5132 2045 /* 48 */
b19d5385
JB
2046 { "cmovsS", { Gv, Ev } },
2047 { "cmovnsS", { Gv, Ev } },
2048 { "cmovpS", { Gv, Ev } },
2049 { "cmovnpS", { Gv, Ev } },
2050 { "cmovlS", { Gv, Ev } },
2051 { "cmovgeS", { Gv, Ev } },
2052 { "cmovleS", { Gv, Ev } },
2053 { "cmovgS", { Gv, Ev } },
252b5132 2054 /* 50 */
75c135a8 2055 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2056 { PREFIX_TABLE (PREFIX_0F51) },
2057 { PREFIX_TABLE (PREFIX_0F52) },
2058 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2059 { "andpX", { XM, EXx } },
2060 { "andnpX", { XM, EXx } },
2061 { "orpX", { XM, EXx } },
2062 { "xorpX", { XM, EXx } },
252b5132 2063 /* 58 */
1ceb70f8
L
2064 { PREFIX_TABLE (PREFIX_0F58) },
2065 { PREFIX_TABLE (PREFIX_0F59) },
2066 { PREFIX_TABLE (PREFIX_0F5A) },
2067 { PREFIX_TABLE (PREFIX_0F5B) },
2068 { PREFIX_TABLE (PREFIX_0F5C) },
2069 { PREFIX_TABLE (PREFIX_0F5D) },
2070 { PREFIX_TABLE (PREFIX_0F5E) },
2071 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2072 /* 60 */
1ceb70f8
L
2073 { PREFIX_TABLE (PREFIX_0F60) },
2074 { PREFIX_TABLE (PREFIX_0F61) },
2075 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2076 { "packsswb", { MX, EM } },
2077 { "pcmpgtb", { MX, EM } },
2078 { "pcmpgtw", { MX, EM } },
2079 { "pcmpgtd", { MX, EM } },
2080 { "packuswb", { MX, EM } },
252b5132 2081 /* 68 */
ce518a5f
L
2082 { "punpckhbw", { MX, EM } },
2083 { "punpckhwd", { MX, EM } },
2084 { "punpckhdq", { MX, EM } },
2085 { "packssdw", { MX, EM } },
1ceb70f8
L
2086 { PREFIX_TABLE (PREFIX_0F6C) },
2087 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2088 { "movK", { MX, Edq } },
1ceb70f8 2089 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2090 /* 70 */
1ceb70f8
L
2091 { PREFIX_TABLE (PREFIX_0F70) },
2092 { REG_TABLE (REG_0F71) },
2093 { REG_TABLE (REG_0F72) },
2094 { REG_TABLE (REG_0F73) },
ce518a5f
L
2095 { "pcmpeqb", { MX, EM } },
2096 { "pcmpeqw", { MX, EM } },
2097 { "pcmpeqd", { MX, EM } },
2098 { "emms", { XX } },
252b5132 2099 /* 78 */
1ceb70f8
L
2100 { PREFIX_TABLE (PREFIX_0F78) },
2101 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2102 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2103 { Bad_Opcode },
1ceb70f8
L
2104 { PREFIX_TABLE (PREFIX_0F7C) },
2105 { PREFIX_TABLE (PREFIX_0F7D) },
2106 { PREFIX_TABLE (PREFIX_0F7E) },
2107 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2108 /* 80 */
ce518a5f
L
2109 { "joH", { Jv, XX, cond_jump_flag } },
2110 { "jnoH", { Jv, XX, cond_jump_flag } },
2111 { "jbH", { Jv, XX, cond_jump_flag } },
2112 { "jaeH", { Jv, XX, cond_jump_flag } },
2113 { "jeH", { Jv, XX, cond_jump_flag } },
2114 { "jneH", { Jv, XX, cond_jump_flag } },
2115 { "jbeH", { Jv, XX, cond_jump_flag } },
2116 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 2117 /* 88 */
ce518a5f
L
2118 { "jsH", { Jv, XX, cond_jump_flag } },
2119 { "jnsH", { Jv, XX, cond_jump_flag } },
2120 { "jpH", { Jv, XX, cond_jump_flag } },
2121 { "jnpH", { Jv, XX, cond_jump_flag } },
2122 { "jlH", { Jv, XX, cond_jump_flag } },
2123 { "jgeH", { Jv, XX, cond_jump_flag } },
2124 { "jleH", { Jv, XX, cond_jump_flag } },
2125 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 2126 /* 90 */
ce518a5f
L
2127 { "seto", { Eb } },
2128 { "setno", { Eb } },
2129 { "setb", { Eb } },
2130 { "setae", { Eb } },
2131 { "sete", { Eb } },
2132 { "setne", { Eb } },
2133 { "setbe", { Eb } },
2134 { "seta", { Eb } },
252b5132 2135 /* 98 */
ce518a5f
L
2136 { "sets", { Eb } },
2137 { "setns", { Eb } },
2138 { "setp", { Eb } },
2139 { "setnp", { Eb } },
2140 { "setl", { Eb } },
2141 { "setge", { Eb } },
2142 { "setle", { Eb } },
2143 { "setg", { Eb } },
252b5132 2144 /* a0 */
ce518a5f
L
2145 { "pushT", { fs } },
2146 { "popT", { fs } },
2147 { "cpuid", { XX } },
2148 { "btS", { Ev, Gv } },
2149 { "shldS", { Ev, Gv, Ib } },
2150 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2151 { REG_TABLE (REG_0FA6) },
2152 { REG_TABLE (REG_0FA7) },
252b5132 2153 /* a8 */
ce518a5f
L
2154 { "pushT", { gs } },
2155 { "popT", { gs } },
2156 { "rsm", { XX } },
2157 { "btsS", { Ev, Gv } },
2158 { "shrdS", { Ev, Gv, Ib } },
2159 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2160 { REG_TABLE (REG_0FAE) },
ce518a5f 2161 { "imulS", { Gv, Ev } },
252b5132 2162 /* b0 */
ce518a5f
L
2163 { "cmpxchgB", { Eb, Gb } },
2164 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 2165 { MOD_TABLE (MOD_0FB2) },
ce518a5f 2166 { "btrS", { Ev, Gv } },
1ceb70f8
L
2167 { MOD_TABLE (MOD_0FB4) },
2168 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2169 { "movz{bR|x}", { Gv, Eb } },
2170 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2171 /* b8 */
1ceb70f8 2172 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2173 { "ud1", { XX } },
1ceb70f8 2174 { REG_TABLE (REG_0FBA) },
ce518a5f 2175 { "btcS", { Ev, Gv } },
f12dc422 2176 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2177 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2178 { "movs{bR|x}", { Gv, Eb } },
2179 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2180 /* c0 */
ce518a5f
L
2181 { "xaddB", { Eb, Gb } },
2182 { "xaddS", { Ev, Gv } },
1ceb70f8 2183 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2184 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2185 { "pinsrw", { MX, Edqw, Ib } },
2186 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2187 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2188 { REG_TABLE (REG_0FC7) },
252b5132 2189 /* c8 */
ce518a5f
L
2190 { "bswap", { RMeAX } },
2191 { "bswap", { RMeCX } },
2192 { "bswap", { RMeDX } },
2193 { "bswap", { RMeBX } },
2194 { "bswap", { RMeSP } },
2195 { "bswap", { RMeBP } },
2196 { "bswap", { RMeSI } },
2197 { "bswap", { RMeDI } },
252b5132 2198 /* d0 */
1ceb70f8 2199 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2200 { "psrlw", { MX, EM } },
2201 { "psrld", { MX, EM } },
2202 { "psrlq", { MX, EM } },
2203 { "paddq", { MX, EM } },
2204 { "pmullw", { MX, EM } },
1ceb70f8 2205 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2206 { MOD_TABLE (MOD_0FD7) },
252b5132 2207 /* d8 */
ce518a5f
L
2208 { "psubusb", { MX, EM } },
2209 { "psubusw", { MX, EM } },
2210 { "pminub", { MX, EM } },
2211 { "pand", { MX, EM } },
2212 { "paddusb", { MX, EM } },
2213 { "paddusw", { MX, EM } },
2214 { "pmaxub", { MX, EM } },
2215 { "pandn", { MX, EM } },
252b5132 2216 /* e0 */
ce518a5f
L
2217 { "pavgb", { MX, EM } },
2218 { "psraw", { MX, EM } },
2219 { "psrad", { MX, EM } },
2220 { "pavgw", { MX, EM } },
2221 { "pmulhuw", { MX, EM } },
2222 { "pmulhw", { MX, EM } },
1ceb70f8
L
2223 { PREFIX_TABLE (PREFIX_0FE6) },
2224 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2225 /* e8 */
ce518a5f
L
2226 { "psubsb", { MX, EM } },
2227 { "psubsw", { MX, EM } },
2228 { "pminsw", { MX, EM } },
2229 { "por", { MX, EM } },
2230 { "paddsb", { MX, EM } },
2231 { "paddsw", { MX, EM } },
2232 { "pmaxsw", { MX, EM } },
2233 { "pxor", { MX, EM } },
252b5132 2234 /* f0 */
1ceb70f8 2235 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2236 { "psllw", { MX, EM } },
2237 { "pslld", { MX, EM } },
2238 { "psllq", { MX, EM } },
2239 { "pmuludq", { MX, EM } },
2240 { "pmaddwd", { MX, EM } },
2241 { "psadbw", { MX, EM } },
1ceb70f8 2242 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2243 /* f8 */
ce518a5f
L
2244 { "psubb", { MX, EM } },
2245 { "psubw", { MX, EM } },
2246 { "psubd", { MX, EM } },
2247 { "psubq", { MX, EM } },
2248 { "paddb", { MX, EM } },
2249 { "paddw", { MX, EM } },
2250 { "paddd", { MX, EM } },
592d1631 2251 { Bad_Opcode },
252b5132
RH
2252};
2253
2254static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2255 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2256 /* ------------------------------- */
2257 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2258 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2259 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2260 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2261 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2262 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2263 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2264 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2265 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2266 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2267 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2268 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2269 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2270 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2271 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2272 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2273 /* ------------------------------- */
2274 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2275};
2276
2277static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2278 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2279 /* ------------------------------- */
252b5132 2280 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2281 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2282 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2283 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2284 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2285 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2286 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2287 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2288 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2289 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2290 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2291 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2292 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2293 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2294 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2295 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2296 /* ------------------------------- */
2297 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2298};
2299
252b5132
RH
2300static char obuf[100];
2301static char *obufp;
ea397f5b 2302static char *mnemonicendp;
252b5132
RH
2303static char scratchbuf[100];
2304static unsigned char *start_codep;
2305static unsigned char *insn_codep;
2306static unsigned char *codep;
f16cd0d5
L
2307static int last_lock_prefix;
2308static int last_repz_prefix;
2309static int last_repnz_prefix;
2310static int last_data_prefix;
2311static int last_addr_prefix;
2312static int last_rex_prefix;
2313static int last_seg_prefix;
2314#define MAX_CODE_LENGTH 15
2315/* We can up to 14 prefixes since the maximum instruction length is
2316 15bytes. */
2317static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2318static disassemble_info *the_info;
7967e09e
L
2319static struct
2320 {
2321 int mod;
7967e09e 2322 int reg;
484c222e 2323 int rm;
7967e09e
L
2324 }
2325modrm;
4bba6815 2326static unsigned char need_modrm;
dfc8cf43
L
2327static struct
2328 {
2329 int scale;
2330 int index;
2331 int base;
2332 }
2333sib;
c0f3af97
L
2334static struct
2335 {
2336 int register_specifier;
2337 int length;
2338 int prefix;
2339 int w;
2340 }
2341vex;
2342static unsigned char need_vex;
2343static unsigned char need_vex_reg;
dae39acc 2344static unsigned char vex_w_done;
252b5132 2345
ea397f5b
L
2346struct op
2347 {
2348 const char *name;
2349 unsigned int len;
2350 };
2351
4bba6815
AM
2352/* If we are accessing mod/rm/reg without need_modrm set, then the
2353 values are stale. Hitting this abort likely indicates that you
2354 need to update onebyte_has_modrm or twobyte_has_modrm. */
2355#define MODRM_CHECK if (!need_modrm) abort ()
2356
d708bcba
AM
2357static const char **names64;
2358static const char **names32;
2359static const char **names16;
2360static const char **names8;
2361static const char **names8rex;
2362static const char **names_seg;
db51cc60
L
2363static const char *index64;
2364static const char *index32;
d708bcba
AM
2365static const char **index16;
2366
2367static const char *intel_names64[] = {
2368 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2369 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2370};
2371static const char *intel_names32[] = {
2372 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2373 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2374};
2375static const char *intel_names16[] = {
2376 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2377 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2378};
2379static const char *intel_names8[] = {
2380 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2381};
2382static const char *intel_names8rex[] = {
2383 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2384 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2385};
2386static const char *intel_names_seg[] = {
2387 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2388};
db51cc60
L
2389static const char *intel_index64 = "riz";
2390static const char *intel_index32 = "eiz";
d708bcba
AM
2391static const char *intel_index16[] = {
2392 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2393};
2394
2395static const char *att_names64[] = {
2396 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2397 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2398};
d708bcba
AM
2399static const char *att_names32[] = {
2400 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2401 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2402};
d708bcba
AM
2403static const char *att_names16[] = {
2404 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2405 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2406};
d708bcba
AM
2407static const char *att_names8[] = {
2408 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2409};
d708bcba
AM
2410static const char *att_names8rex[] = {
2411 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2412 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2413};
d708bcba
AM
2414static const char *att_names_seg[] = {
2415 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2416};
db51cc60
L
2417static const char *att_index64 = "%riz";
2418static const char *att_index32 = "%eiz";
d708bcba
AM
2419static const char *att_index16[] = {
2420 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2421};
2422
b9733481
L
2423static const char **names_mm;
2424static const char *intel_names_mm[] = {
2425 "mm0", "mm1", "mm2", "mm3",
2426 "mm4", "mm5", "mm6", "mm7"
2427};
2428static const char *att_names_mm[] = {
2429 "%mm0", "%mm1", "%mm2", "%mm3",
2430 "%mm4", "%mm5", "%mm6", "%mm7"
2431};
2432
2433static const char **names_xmm;
2434static const char *intel_names_xmm[] = {
2435 "xmm0", "xmm1", "xmm2", "xmm3",
2436 "xmm4", "xmm5", "xmm6", "xmm7",
2437 "xmm8", "xmm9", "xmm10", "xmm11",
2438 "xmm12", "xmm13", "xmm14", "xmm15"
2439};
2440static const char *att_names_xmm[] = {
2441 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2442 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2443 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2444 "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2445};
2446
2447static const char **names_ymm;
2448static const char *intel_names_ymm[] = {
2449 "ymm0", "ymm1", "ymm2", "ymm3",
2450 "ymm4", "ymm5", "ymm6", "ymm7",
2451 "ymm8", "ymm9", "ymm10", "ymm11",
2452 "ymm12", "ymm13", "ymm14", "ymm15"
2453};
2454static const char *att_names_ymm[] = {
2455 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2456 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2457 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2458 "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2459};
2460
1ceb70f8
L
2461static const struct dis386 reg_table[][8] = {
2462 /* REG_80 */
252b5132 2463 {
ce518a5f
L
2464 { "addA", { Eb, Ib } },
2465 { "orA", { Eb, Ib } },
2466 { "adcA", { Eb, Ib } },
2467 { "sbbA", { Eb, Ib } },
2468 { "andA", { Eb, Ib } },
2469 { "subA", { Eb, Ib } },
2470 { "xorA", { Eb, Ib } },
2471 { "cmpA", { Eb, Ib } },
252b5132 2472 },
1ceb70f8 2473 /* REG_81 */
252b5132 2474 {
ce518a5f
L
2475 { "addQ", { Ev, Iv } },
2476 { "orQ", { Ev, Iv } },
2477 { "adcQ", { Ev, Iv } },
2478 { "sbbQ", { Ev, Iv } },
2479 { "andQ", { Ev, Iv } },
2480 { "subQ", { Ev, Iv } },
2481 { "xorQ", { Ev, Iv } },
2482 { "cmpQ", { Ev, Iv } },
252b5132 2483 },
1ceb70f8 2484 /* REG_82 */
252b5132 2485 {
ce518a5f
L
2486 { "addQ", { Ev, sIb } },
2487 { "orQ", { Ev, sIb } },
2488 { "adcQ", { Ev, sIb } },
2489 { "sbbQ", { Ev, sIb } },
2490 { "andQ", { Ev, sIb } },
2491 { "subQ", { Ev, sIb } },
2492 { "xorQ", { Ev, sIb } },
2493 { "cmpQ", { Ev, sIb } },
252b5132 2494 },
1ceb70f8 2495 /* REG_8F */
4e7d34a6
L
2496 {
2497 { "popU", { stackEv } },
c48244a5 2498 { XOP_8F_TABLE (XOP_09) },
592d1631
L
2499 { Bad_Opcode },
2500 { Bad_Opcode },
2501 { Bad_Opcode },
f88c9eb0 2502 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 2503 },
1ceb70f8 2504 /* REG_C0 */
252b5132 2505 {
ce518a5f
L
2506 { "rolA", { Eb, Ib } },
2507 { "rorA", { Eb, Ib } },
2508 { "rclA", { Eb, Ib } },
2509 { "rcrA", { Eb, Ib } },
2510 { "shlA", { Eb, Ib } },
2511 { "shrA", { Eb, Ib } },
592d1631 2512 { Bad_Opcode },
ce518a5f 2513 { "sarA", { Eb, Ib } },
252b5132 2514 },
1ceb70f8 2515 /* REG_C1 */
252b5132 2516 {
ce518a5f
L
2517 { "rolQ", { Ev, Ib } },
2518 { "rorQ", { Ev, Ib } },
2519 { "rclQ", { Ev, Ib } },
2520 { "rcrQ", { Ev, Ib } },
2521 { "shlQ", { Ev, Ib } },
2522 { "shrQ", { Ev, Ib } },
592d1631 2523 { Bad_Opcode },
ce518a5f 2524 { "sarQ", { Ev, Ib } },
252b5132 2525 },
1ceb70f8 2526 /* REG_C6 */
4e7d34a6
L
2527 {
2528 { "movA", { Eb, Ib } },
4e7d34a6 2529 },
1ceb70f8 2530 /* REG_C7 */
4e7d34a6
L
2531 {
2532 { "movQ", { Ev, Iv } },
4e7d34a6 2533 },
1ceb70f8 2534 /* REG_D0 */
252b5132 2535 {
ce518a5f
L
2536 { "rolA", { Eb, I1 } },
2537 { "rorA", { Eb, I1 } },
2538 { "rclA", { Eb, I1 } },
2539 { "rcrA", { Eb, I1 } },
2540 { "shlA", { Eb, I1 } },
2541 { "shrA", { Eb, I1 } },
592d1631 2542 { Bad_Opcode },
ce518a5f 2543 { "sarA", { Eb, I1 } },
252b5132 2544 },
1ceb70f8 2545 /* REG_D1 */
252b5132 2546 {
ce518a5f
L
2547 { "rolQ", { Ev, I1 } },
2548 { "rorQ", { Ev, I1 } },
2549 { "rclQ", { Ev, I1 } },
2550 { "rcrQ", { Ev, I1 } },
2551 { "shlQ", { Ev, I1 } },
2552 { "shrQ", { Ev, I1 } },
592d1631 2553 { Bad_Opcode },
ce518a5f 2554 { "sarQ", { Ev, I1 } },
252b5132 2555 },
1ceb70f8 2556 /* REG_D2 */
252b5132 2557 {
ce518a5f
L
2558 { "rolA", { Eb, CL } },
2559 { "rorA", { Eb, CL } },
2560 { "rclA", { Eb, CL } },
2561 { "rcrA", { Eb, CL } },
2562 { "shlA", { Eb, CL } },
2563 { "shrA", { Eb, CL } },
592d1631 2564 { Bad_Opcode },
ce518a5f 2565 { "sarA", { Eb, CL } },
252b5132 2566 },
1ceb70f8 2567 /* REG_D3 */
252b5132 2568 {
ce518a5f
L
2569 { "rolQ", { Ev, CL } },
2570 { "rorQ", { Ev, CL } },
2571 { "rclQ", { Ev, CL } },
2572 { "rcrQ", { Ev, CL } },
2573 { "shlQ", { Ev, CL } },
2574 { "shrQ", { Ev, CL } },
592d1631 2575 { Bad_Opcode },
ce518a5f 2576 { "sarQ", { Ev, CL } },
252b5132 2577 },
1ceb70f8 2578 /* REG_F6 */
252b5132 2579 {
ce518a5f 2580 { "testA", { Eb, Ib } },
592d1631 2581 { Bad_Opcode },
ce518a5f
L
2582 { "notA", { Eb } },
2583 { "negA", { Eb } },
2584 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2585 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2586 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2587 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2588 },
1ceb70f8 2589 /* REG_F7 */
252b5132 2590 {
ce518a5f 2591 { "testQ", { Ev, Iv } },
592d1631 2592 { Bad_Opcode },
ce518a5f
L
2593 { "notQ", { Ev } },
2594 { "negQ", { Ev } },
2595 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2596 { "imulQ", { Ev } },
2597 { "divQ", { Ev } },
2598 { "idivQ", { Ev } },
252b5132 2599 },
1ceb70f8 2600 /* REG_FE */
252b5132 2601 {
ce518a5f
L
2602 { "incA", { Eb } },
2603 { "decA", { Eb } },
252b5132 2604 },
1ceb70f8 2605 /* REG_FF */
252b5132 2606 {
ce518a5f
L
2607 { "incQ", { Ev } },
2608 { "decQ", { Ev } },
d9e3625e
L
2609 { "call{T|}", { indirEv } },
2610 { "Jcall{T|}", { indirEp } },
2611 { "jmp{T|}", { indirEv } },
2612 { "Jjmp{T|}", { indirEp } },
ce518a5f 2613 { "pushU", { stackEv } },
592d1631 2614 { Bad_Opcode },
252b5132 2615 },
1ceb70f8 2616 /* REG_0F00 */
252b5132 2617 {
ce518a5f
L
2618 { "sldtD", { Sv } },
2619 { "strD", { Sv } },
2620 { "lldt", { Ew } },
2621 { "ltr", { Ew } },
2622 { "verr", { Ew } },
2623 { "verw", { Ew } },
592d1631
L
2624 { Bad_Opcode },
2625 { Bad_Opcode },
252b5132 2626 },
1ceb70f8 2627 /* REG_0F01 */
252b5132 2628 {
1ceb70f8
L
2629 { MOD_TABLE (MOD_0F01_REG_0) },
2630 { MOD_TABLE (MOD_0F01_REG_1) },
2631 { MOD_TABLE (MOD_0F01_REG_2) },
2632 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 2633 { "smswD", { Sv } },
592d1631 2634 { Bad_Opcode },
ce518a5f 2635 { "lmsw", { Ew } },
1ceb70f8 2636 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2637 },
b5b1fc4f 2638 /* REG_0F0D */
252b5132 2639 {
1ab03f4b
L
2640 { "prefetch", { Mb } },
2641 { "prefetchw", { Mb } },
252b5132 2642 },
1ceb70f8 2643 /* REG_0F18 */
252b5132 2644 {
1ceb70f8
L
2645 { MOD_TABLE (MOD_0F18_REG_0) },
2646 { MOD_TABLE (MOD_0F18_REG_1) },
2647 { MOD_TABLE (MOD_0F18_REG_2) },
2648 { MOD_TABLE (MOD_0F18_REG_3) },
252b5132 2649 },
1ceb70f8 2650 /* REG_0F71 */
a6bd098c 2651 {
592d1631
L
2652 { Bad_Opcode },
2653 { Bad_Opcode },
1ceb70f8 2654 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 2655 { Bad_Opcode },
1ceb70f8 2656 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 2657 { Bad_Opcode },
1ceb70f8 2658 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 2659 },
1ceb70f8 2660 /* REG_0F72 */
a6bd098c 2661 {
592d1631
L
2662 { Bad_Opcode },
2663 { Bad_Opcode },
1ceb70f8 2664 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 2665 { Bad_Opcode },
1ceb70f8 2666 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 2667 { Bad_Opcode },
1ceb70f8 2668 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 2669 },
1ceb70f8 2670 /* REG_0F73 */
252b5132 2671 {
592d1631
L
2672 { Bad_Opcode },
2673 { Bad_Opcode },
1ceb70f8
L
2674 { MOD_TABLE (MOD_0F73_REG_2) },
2675 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
2676 { Bad_Opcode },
2677 { Bad_Opcode },
1ceb70f8
L
2678 { MOD_TABLE (MOD_0F73_REG_6) },
2679 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2680 },
1ceb70f8 2681 /* REG_0FA6 */
252b5132 2682 {
4e7d34a6
L
2683 { "montmul", { { OP_0f07, 0 } } },
2684 { "xsha1", { { OP_0f07, 0 } } },
2685 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 2686 },
1ceb70f8 2687 /* REG_0FA7 */
4e7d34a6
L
2688 {
2689 { "xstore-rng", { { OP_0f07, 0 } } },
2690 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2691 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2692 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2693 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2694 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 2695 },
1ceb70f8 2696 /* REG_0FAE */
4e7d34a6 2697 {
1ceb70f8
L
2698 { MOD_TABLE (MOD_0FAE_REG_0) },
2699 { MOD_TABLE (MOD_0FAE_REG_1) },
2700 { MOD_TABLE (MOD_0FAE_REG_2) },
2701 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2702 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2703 { MOD_TABLE (MOD_0FAE_REG_5) },
2704 { MOD_TABLE (MOD_0FAE_REG_6) },
2705 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2706 },
1ceb70f8 2707 /* REG_0FBA */
252b5132 2708 {
592d1631
L
2709 { Bad_Opcode },
2710 { Bad_Opcode },
2711 { Bad_Opcode },
2712 { Bad_Opcode },
4e7d34a6
L
2713 { "btQ", { Ev, Ib } },
2714 { "btsQ", { Ev, Ib } },
2715 { "btrQ", { Ev, Ib } },
2716 { "btcQ", { Ev, Ib } },
c608c12e 2717 },
1ceb70f8 2718 /* REG_0FC7 */
c608c12e 2719 {
592d1631 2720 { Bad_Opcode },
4e7d34a6 2721 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
2722 { Bad_Opcode },
2723 { Bad_Opcode },
2724 { Bad_Opcode },
2725 { Bad_Opcode },
1ceb70f8
L
2726 { MOD_TABLE (MOD_0FC7_REG_6) },
2727 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2728 },
592a252b 2729 /* REG_VEX_0F71 */
c0f3af97 2730 {
592d1631
L
2731 { Bad_Opcode },
2732 { Bad_Opcode },
592a252b 2733 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 2734 { Bad_Opcode },
592a252b 2735 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 2736 { Bad_Opcode },
592a252b 2737 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 2738 },
592a252b 2739 /* REG_VEX_0F72 */
c0f3af97 2740 {
592d1631
L
2741 { Bad_Opcode },
2742 { Bad_Opcode },
592a252b 2743 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 2744 { Bad_Opcode },
592a252b 2745 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 2746 { Bad_Opcode },
592a252b 2747 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 2748 },
592a252b 2749 /* REG_VEX_0F73 */
c0f3af97 2750 {
592d1631
L
2751 { Bad_Opcode },
2752 { Bad_Opcode },
592a252b
L
2753 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
2754 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
2755 { Bad_Opcode },
2756 { Bad_Opcode },
592a252b
L
2757 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
2758 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 2759 },
592a252b 2760 /* REG_VEX_0FAE */
c0f3af97 2761 {
592d1631
L
2762 { Bad_Opcode },
2763 { Bad_Opcode },
592a252b
L
2764 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
2765 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 2766 },
f12dc422
L
2767 /* REG_VEX_0F38F3 */
2768 {
2769 { Bad_Opcode },
2770 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
2771 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
2772 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
2773 },
f88c9eb0
SP
2774 /* REG_XOP_LWPCB */
2775 {
2776 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2777 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
2778 },
2779 /* REG_XOP_LWP */
2780 {
ce7d077e
SP
2781 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
2782 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 2783 },
2a2a0f38
QN
2784 /* REG_XOP_TBM_01 */
2785 {
2786 { Bad_Opcode },
2787 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
2788 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
2789 { "blcs", { { OP_LWP_E, 0 }, Ev } },
2790 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
2791 { "blcic", { { OP_LWP_E, 0 }, Ev } },
2792 { "blsic", { { OP_LWP_E, 0 }, Ev } },
2793 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
2794 },
2795 /* REG_XOP_TBM_02 */
2796 {
2797 { Bad_Opcode },
2798 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
2799 { Bad_Opcode },
2800 { Bad_Opcode },
2801 { Bad_Opcode },
2802 { Bad_Opcode },
2803 { "blci", { { OP_LWP_E, 0 }, Ev } },
2804 },
4e7d34a6
L
2805};
2806
1ceb70f8
L
2807static const struct dis386 prefix_table[][4] = {
2808 /* PREFIX_90 */
252b5132 2809 {
4e7d34a6
L
2810 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2811 { "pause", { XX } },
2812 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 2813 },
4e7d34a6 2814
1ceb70f8 2815 /* PREFIX_0F10 */
cc0ec051 2816 {
4e7d34a6
L
2817 { "movups", { XM, EXx } },
2818 { "movss", { XM, EXd } },
2819 { "movupd", { XM, EXx } },
2820 { "movsd", { XM, EXq } },
30d1c836 2821 },
4e7d34a6 2822
1ceb70f8 2823 /* PREFIX_0F11 */
30d1c836 2824 {
b6169b20 2825 { "movups", { EXxS, XM } },
fa99fab2 2826 { "movss", { EXdS, XM } },
b6169b20 2827 { "movupd", { EXxS, XM } },
fa99fab2 2828 { "movsd", { EXqS, XM } },
4e7d34a6 2829 },
252b5132 2830
1ceb70f8 2831 /* PREFIX_0F12 */
c608c12e 2832 {
1ceb70f8 2833 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2834 { "movsldup", { XM, EXx } },
2835 { "movlpd", { XM, EXq } },
2836 { "movddup", { XM, EXq } },
c608c12e 2837 },
4e7d34a6 2838
1ceb70f8 2839 /* PREFIX_0F16 */
c608c12e 2840 {
1ceb70f8 2841 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2842 { "movshdup", { XM, EXx } },
2843 { "movhpd", { XM, EXq } },
c608c12e 2844 },
4e7d34a6 2845
1ceb70f8 2846 /* PREFIX_0F2A */
c608c12e 2847 {
09335d05 2848 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2849 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2850 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2851 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2852 },
4e7d34a6 2853
1ceb70f8 2854 /* PREFIX_0F2B */
c608c12e 2855 {
75c135a8
L
2856 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2857 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2858 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2859 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2860 },
4e7d34a6 2861
1ceb70f8 2862 /* PREFIX_0F2C */
c608c12e 2863 {
09335d05
L
2864 { "cvttps2pi", { MXC, EXq } },
2865 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2866 { "cvttpd2pi", { MXC, EXx } },
09335d05 2867 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2868 },
4e7d34a6 2869
1ceb70f8 2870 /* PREFIX_0F2D */
c608c12e 2871 {
4e7d34a6
L
2872 { "cvtps2pi", { MXC, EXq } },
2873 { "cvtss2siY", { Gv, EXd } },
2874 { "cvtpd2pi", { MXC, EXx } },
2875 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2876 },
4e7d34a6 2877
1ceb70f8 2878 /* PREFIX_0F2E */
c608c12e 2879 {
4e7d34a6 2880 { "ucomiss",{ XM, EXd } },
592d1631 2881 { Bad_Opcode },
4e7d34a6 2882 { "ucomisd",{ XM, EXq } },
c608c12e 2883 },
4e7d34a6 2884
1ceb70f8 2885 /* PREFIX_0F2F */
c608c12e 2886 {
4e7d34a6 2887 { "comiss", { XM, EXd } },
592d1631 2888 { Bad_Opcode },
4e7d34a6 2889 { "comisd", { XM, EXq } },
c608c12e 2890 },
4e7d34a6 2891
1ceb70f8 2892 /* PREFIX_0F51 */
c608c12e 2893 {
4e7d34a6
L
2894 { "sqrtps", { XM, EXx } },
2895 { "sqrtss", { XM, EXd } },
2896 { "sqrtpd", { XM, EXx } },
2897 { "sqrtsd", { XM, EXq } },
c608c12e 2898 },
4e7d34a6 2899
1ceb70f8 2900 /* PREFIX_0F52 */
c608c12e 2901 {
4e7d34a6
L
2902 { "rsqrtps",{ XM, EXx } },
2903 { "rsqrtss",{ XM, EXd } },
c608c12e 2904 },
4e7d34a6 2905
1ceb70f8 2906 /* PREFIX_0F53 */
c608c12e 2907 {
4e7d34a6
L
2908 { "rcpps", { XM, EXx } },
2909 { "rcpss", { XM, EXd } },
c608c12e 2910 },
4e7d34a6 2911
1ceb70f8 2912 /* PREFIX_0F58 */
c608c12e 2913 {
4e7d34a6
L
2914 { "addps", { XM, EXx } },
2915 { "addss", { XM, EXd } },
2916 { "addpd", { XM, EXx } },
2917 { "addsd", { XM, EXq } },
c608c12e 2918 },
4e7d34a6 2919
1ceb70f8 2920 /* PREFIX_0F59 */
c608c12e 2921 {
4e7d34a6
L
2922 { "mulps", { XM, EXx } },
2923 { "mulss", { XM, EXd } },
2924 { "mulpd", { XM, EXx } },
2925 { "mulsd", { XM, EXq } },
041bd2e0 2926 },
4e7d34a6 2927
1ceb70f8 2928 /* PREFIX_0F5A */
041bd2e0 2929 {
4e7d34a6
L
2930 { "cvtps2pd", { XM, EXq } },
2931 { "cvtss2sd", { XM, EXd } },
2932 { "cvtpd2ps", { XM, EXx } },
2933 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2934 },
4e7d34a6 2935
1ceb70f8 2936 /* PREFIX_0F5B */
041bd2e0 2937 {
09a2c6cf
L
2938 { "cvtdq2ps", { XM, EXx } },
2939 { "cvttps2dq", { XM, EXx } },
2940 { "cvtps2dq", { XM, EXx } },
041bd2e0 2941 },
4e7d34a6 2942
1ceb70f8 2943 /* PREFIX_0F5C */
041bd2e0 2944 {
4e7d34a6
L
2945 { "subps", { XM, EXx } },
2946 { "subss", { XM, EXd } },
2947 { "subpd", { XM, EXx } },
2948 { "subsd", { XM, EXq } },
041bd2e0 2949 },
4e7d34a6 2950
1ceb70f8 2951 /* PREFIX_0F5D */
041bd2e0 2952 {
4e7d34a6
L
2953 { "minps", { XM, EXx } },
2954 { "minss", { XM, EXd } },
2955 { "minpd", { XM, EXx } },
2956 { "minsd", { XM, EXq } },
041bd2e0 2957 },
4e7d34a6 2958
1ceb70f8 2959 /* PREFIX_0F5E */
041bd2e0 2960 {
4e7d34a6
L
2961 { "divps", { XM, EXx } },
2962 { "divss", { XM, EXd } },
2963 { "divpd", { XM, EXx } },
2964 { "divsd", { XM, EXq } },
041bd2e0 2965 },
4e7d34a6 2966
1ceb70f8 2967 /* PREFIX_0F5F */
041bd2e0 2968 {
4e7d34a6
L
2969 { "maxps", { XM, EXx } },
2970 { "maxss", { XM, EXd } },
2971 { "maxpd", { XM, EXx } },
2972 { "maxsd", { XM, EXq } },
041bd2e0 2973 },
4e7d34a6 2974
1ceb70f8 2975 /* PREFIX_0F60 */
041bd2e0 2976 {
4e7d34a6 2977 { "punpcklbw",{ MX, EMd } },
592d1631 2978 { Bad_Opcode },
4e7d34a6 2979 { "punpcklbw",{ MX, EMx } },
041bd2e0 2980 },
4e7d34a6 2981
1ceb70f8 2982 /* PREFIX_0F61 */
041bd2e0 2983 {
4e7d34a6 2984 { "punpcklwd",{ MX, EMd } },
592d1631 2985 { Bad_Opcode },
4e7d34a6 2986 { "punpcklwd",{ MX, EMx } },
041bd2e0 2987 },
4e7d34a6 2988
1ceb70f8 2989 /* PREFIX_0F62 */
041bd2e0 2990 {
4e7d34a6 2991 { "punpckldq",{ MX, EMd } },
592d1631 2992 { Bad_Opcode },
4e7d34a6 2993 { "punpckldq",{ MX, EMx } },
041bd2e0 2994 },
4e7d34a6 2995
1ceb70f8 2996 /* PREFIX_0F6C */
041bd2e0 2997 {
592d1631
L
2998 { Bad_Opcode },
2999 { Bad_Opcode },
4e7d34a6 3000 { "punpcklqdq", { XM, EXx } },
0f17484f 3001 },
4e7d34a6 3002
1ceb70f8 3003 /* PREFIX_0F6D */
0f17484f 3004 {
592d1631
L
3005 { Bad_Opcode },
3006 { Bad_Opcode },
4e7d34a6 3007 { "punpckhqdq", { XM, EXx } },
041bd2e0 3008 },
4e7d34a6 3009
1ceb70f8 3010 /* PREFIX_0F6F */
ca164297 3011 {
4e7d34a6
L
3012 { "movq", { MX, EM } },
3013 { "movdqu", { XM, EXx } },
3014 { "movdqa", { XM, EXx } },
ca164297 3015 },
4e7d34a6 3016
1ceb70f8 3017 /* PREFIX_0F70 */
4e7d34a6
L
3018 {
3019 { "pshufw", { MX, EM, Ib } },
3020 { "pshufhw",{ XM, EXx, Ib } },
3021 { "pshufd", { XM, EXx, Ib } },
3022 { "pshuflw",{ XM, EXx, Ib } },
3023 },
3024
92fddf8e
L
3025 /* PREFIX_0F73_REG_3 */
3026 {
592d1631
L
3027 { Bad_Opcode },
3028 { Bad_Opcode },
92fddf8e 3029 { "psrldq", { XS, Ib } },
92fddf8e
L
3030 },
3031
3032 /* PREFIX_0F73_REG_7 */
3033 {
592d1631
L
3034 { Bad_Opcode },
3035 { Bad_Opcode },
92fddf8e 3036 { "pslldq", { XS, Ib } },
92fddf8e
L
3037 },
3038
1ceb70f8 3039 /* PREFIX_0F78 */
4e7d34a6
L
3040 {
3041 {"vmread", { Em, Gm } },
592d1631 3042 { Bad_Opcode },
4e7d34a6
L
3043 {"extrq", { XS, Ib, Ib } },
3044 {"insertq", { XM, XS, Ib, Ib } },
3045 },
3046
1ceb70f8 3047 /* PREFIX_0F79 */
4e7d34a6
L
3048 {
3049 {"vmwrite", { Gm, Em } },
592d1631 3050 { Bad_Opcode },
4e7d34a6
L
3051 {"extrq", { XM, XS } },
3052 {"insertq", { XM, XS } },
3053 },
3054
1ceb70f8 3055 /* PREFIX_0F7C */
ca164297 3056 {
592d1631
L
3057 { Bad_Opcode },
3058 { Bad_Opcode },
09a2c6cf
L
3059 { "haddpd", { XM, EXx } },
3060 { "haddps", { XM, EXx } },
ca164297 3061 },
4e7d34a6 3062
1ceb70f8 3063 /* PREFIX_0F7D */
ca164297 3064 {
592d1631
L
3065 { Bad_Opcode },
3066 { Bad_Opcode },
09a2c6cf
L
3067 { "hsubpd", { XM, EXx } },
3068 { "hsubps", { XM, EXx } },
ca164297 3069 },
4e7d34a6 3070
1ceb70f8 3071 /* PREFIX_0F7E */
ca164297 3072 {
4e7d34a6
L
3073 { "movK", { Edq, MX } },
3074 { "movq", { XM, EXq } },
3075 { "movK", { Edq, XM } },
ca164297 3076 },
4e7d34a6 3077
1ceb70f8 3078 /* PREFIX_0F7F */
ca164297 3079 {
b6169b20
L
3080 { "movq", { EMS, MX } },
3081 { "movdqu", { EXxS, XM } },
3082 { "movdqa", { EXxS, XM } },
ca164297 3083 },
4e7d34a6 3084
c7b8aa3a
L
3085 /* PREFIX_0FAE_REG_0 */
3086 {
3087 { Bad_Opcode },
3088 { "rdfsbase", { Ev } },
3089 },
3090
3091 /* PREFIX_0FAE_REG_1 */
3092 {
3093 { Bad_Opcode },
3094 { "rdgsbase", { Ev } },
3095 },
3096
3097 /* PREFIX_0FAE_REG_2 */
3098 {
3099 { Bad_Opcode },
3100 { "wrfsbase", { Ev } },
3101 },
3102
3103 /* PREFIX_0FAE_REG_3 */
3104 {
3105 { Bad_Opcode },
3106 { "wrgsbase", { Ev } },
3107 },
3108
1ceb70f8 3109 /* PREFIX_0FB8 */
ca164297 3110 {
592d1631 3111 { Bad_Opcode },
4e7d34a6 3112 { "popcntS", { Gv, Ev } },
ca164297 3113 },
4e7d34a6 3114
f12dc422
L
3115 /* PREFIX_0FBC */
3116 {
3117 { "bsfS", { Gv, Ev } },
3118 { "tzcntS", { Gv, Ev } },
3119 { "bsfS", { Gv, Ev } },
3120 },
3121
1ceb70f8 3122 /* PREFIX_0FBD */
050dfa73 3123 {
4e7d34a6
L
3124 { "bsrS", { Gv, Ev } },
3125 { "lzcntS", { Gv, Ev } },
3126 { "bsrS", { Gv, Ev } },
050dfa73
MM
3127 },
3128
1ceb70f8 3129 /* PREFIX_0FC2 */
050dfa73 3130 {
ad19981d
L
3131 { "cmpps", { XM, EXx, CMP } },
3132 { "cmpss", { XM, EXd, CMP } },
3133 { "cmppd", { XM, EXx, CMP } },
3134 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3135 },
246c51aa 3136
4ee52178
L
3137 /* PREFIX_0FC3 */
3138 {
3139 { "movntiS", { Ma, Gv } },
4ee52178
L
3140 },
3141
92fddf8e
L
3142 /* PREFIX_0FC7_REG_6 */
3143 {
3144 { "vmptrld",{ Mq } },
3145 { "vmxon", { Mq } },
3146 { "vmclear",{ Mq } },
92fddf8e
L
3147 },
3148
1ceb70f8 3149 /* PREFIX_0FD0 */
050dfa73 3150 {
592d1631
L
3151 { Bad_Opcode },
3152 { Bad_Opcode },
4e7d34a6
L
3153 { "addsubpd", { XM, EXx } },
3154 { "addsubps", { XM, EXx } },
246c51aa 3155 },
050dfa73 3156
1ceb70f8 3157 /* PREFIX_0FD6 */
050dfa73 3158 {
592d1631 3159 { Bad_Opcode },
4e7d34a6 3160 { "movq2dq",{ XM, MS } },
b6169b20 3161 { "movq", { EXqS, XM } },
4e7d34a6 3162 { "movdq2q",{ MX, XS } },
050dfa73
MM
3163 },
3164
1ceb70f8 3165 /* PREFIX_0FE6 */
7918206c 3166 {
592d1631 3167 { Bad_Opcode },
4e7d34a6
L
3168 { "cvtdq2pd", { XM, EXq } },
3169 { "cvttpd2dq", { XM, EXx } },
3170 { "cvtpd2dq", { XM, EXx } },
7918206c 3171 },
8b38ad71 3172
1ceb70f8 3173 /* PREFIX_0FE7 */
8b38ad71 3174 {
4ee52178 3175 { "movntq", { Mq, MX } },
592d1631 3176 { Bad_Opcode },
75c135a8 3177 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3178 },
3179
1ceb70f8 3180 /* PREFIX_0FF0 */
4e7d34a6 3181 {
592d1631
L
3182 { Bad_Opcode },
3183 { Bad_Opcode },
3184 { Bad_Opcode },
1ceb70f8 3185 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3186 },
3187
1ceb70f8 3188 /* PREFIX_0FF7 */
4e7d34a6
L
3189 {
3190 { "maskmovq", { MX, MS } },
592d1631 3191 { Bad_Opcode },
4e7d34a6 3192 { "maskmovdqu", { XM, XS } },
8b38ad71 3193 },
42903f7f 3194
1ceb70f8 3195 /* PREFIX_0F3810 */
42903f7f 3196 {
592d1631
L
3197 { Bad_Opcode },
3198 { Bad_Opcode },
88a94849 3199 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3200 },
3201
1ceb70f8 3202 /* PREFIX_0F3814 */
42903f7f 3203 {
592d1631
L
3204 { Bad_Opcode },
3205 { Bad_Opcode },
88a94849 3206 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3207 },
3208
1ceb70f8 3209 /* PREFIX_0F3815 */
42903f7f 3210 {
592d1631
L
3211 { Bad_Opcode },
3212 { Bad_Opcode },
09a2c6cf 3213 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3214 },
3215
1ceb70f8 3216 /* PREFIX_0F3817 */
42903f7f 3217 {
592d1631
L
3218 { Bad_Opcode },
3219 { Bad_Opcode },
09a2c6cf 3220 { "ptest", { XM, EXx } },
42903f7f
L
3221 },
3222
1ceb70f8 3223 /* PREFIX_0F3820 */
42903f7f 3224 {
592d1631
L
3225 { Bad_Opcode },
3226 { Bad_Opcode },
8976381e 3227 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3228 },
3229
1ceb70f8 3230 /* PREFIX_0F3821 */
42903f7f 3231 {
592d1631
L
3232 { Bad_Opcode },
3233 { Bad_Opcode },
8976381e 3234 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3235 },
3236
1ceb70f8 3237 /* PREFIX_0F3822 */
42903f7f 3238 {
592d1631
L
3239 { Bad_Opcode },
3240 { Bad_Opcode },
8976381e 3241 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3242 },
3243
1ceb70f8 3244 /* PREFIX_0F3823 */
42903f7f 3245 {
592d1631
L
3246 { Bad_Opcode },
3247 { Bad_Opcode },
8976381e 3248 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3249 },
3250
1ceb70f8 3251 /* PREFIX_0F3824 */
42903f7f 3252 {
592d1631
L
3253 { Bad_Opcode },
3254 { Bad_Opcode },
8976381e 3255 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3256 },
3257
1ceb70f8 3258 /* PREFIX_0F3825 */
42903f7f 3259 {
592d1631
L
3260 { Bad_Opcode },
3261 { Bad_Opcode },
8976381e 3262 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3263 },
3264
1ceb70f8 3265 /* PREFIX_0F3828 */
42903f7f 3266 {
592d1631
L
3267 { Bad_Opcode },
3268 { Bad_Opcode },
09a2c6cf 3269 { "pmuldq", { XM, EXx } },
42903f7f
L
3270 },
3271
1ceb70f8 3272 /* PREFIX_0F3829 */
42903f7f 3273 {
592d1631
L
3274 { Bad_Opcode },
3275 { Bad_Opcode },
09a2c6cf 3276 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3277 },
3278
1ceb70f8 3279 /* PREFIX_0F382A */
42903f7f 3280 {
592d1631
L
3281 { Bad_Opcode },
3282 { Bad_Opcode },
75c135a8 3283 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3284 },
3285
1ceb70f8 3286 /* PREFIX_0F382B */
42903f7f 3287 {
592d1631
L
3288 { Bad_Opcode },
3289 { Bad_Opcode },
09a2c6cf 3290 { "packusdw", { XM, EXx } },
42903f7f
L
3291 },
3292
1ceb70f8 3293 /* PREFIX_0F3830 */
42903f7f 3294 {
592d1631
L
3295 { Bad_Opcode },
3296 { Bad_Opcode },
8976381e 3297 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3298 },
3299
1ceb70f8 3300 /* PREFIX_0F3831 */
42903f7f 3301 {
592d1631
L
3302 { Bad_Opcode },
3303 { Bad_Opcode },
8976381e 3304 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3305 },
3306
1ceb70f8 3307 /* PREFIX_0F3832 */
42903f7f 3308 {
592d1631
L
3309 { Bad_Opcode },
3310 { Bad_Opcode },
8976381e 3311 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3312 },
3313
1ceb70f8 3314 /* PREFIX_0F3833 */
42903f7f 3315 {
592d1631
L
3316 { Bad_Opcode },
3317 { Bad_Opcode },
8976381e 3318 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3319 },
3320
1ceb70f8 3321 /* PREFIX_0F3834 */
42903f7f 3322 {
592d1631
L
3323 { Bad_Opcode },
3324 { Bad_Opcode },
8976381e 3325 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3326 },
3327
1ceb70f8 3328 /* PREFIX_0F3835 */
42903f7f 3329 {
592d1631
L
3330 { Bad_Opcode },
3331 { Bad_Opcode },
8976381e 3332 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3333 },
3334
1ceb70f8 3335 /* PREFIX_0F3837 */
4e7d34a6 3336 {
592d1631
L
3337 { Bad_Opcode },
3338 { Bad_Opcode },
4e7d34a6 3339 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3340 },
3341
1ceb70f8 3342 /* PREFIX_0F3838 */
42903f7f 3343 {
592d1631
L
3344 { Bad_Opcode },
3345 { Bad_Opcode },
09a2c6cf 3346 { "pminsb", { XM, EXx } },
42903f7f
L
3347 },
3348
1ceb70f8 3349 /* PREFIX_0F3839 */
42903f7f 3350 {
592d1631
L
3351 { Bad_Opcode },
3352 { Bad_Opcode },
09a2c6cf 3353 { "pminsd", { XM, EXx } },
42903f7f
L
3354 },
3355
1ceb70f8 3356 /* PREFIX_0F383A */
42903f7f 3357 {
592d1631
L
3358 { Bad_Opcode },
3359 { Bad_Opcode },
09a2c6cf 3360 { "pminuw", { XM, EXx } },
42903f7f
L
3361 },
3362
1ceb70f8 3363 /* PREFIX_0F383B */
42903f7f 3364 {
592d1631
L
3365 { Bad_Opcode },
3366 { Bad_Opcode },
09a2c6cf 3367 { "pminud", { XM, EXx } },
42903f7f
L
3368 },
3369
1ceb70f8 3370 /* PREFIX_0F383C */
42903f7f 3371 {
592d1631
L
3372 { Bad_Opcode },
3373 { Bad_Opcode },
09a2c6cf 3374 { "pmaxsb", { XM, EXx } },
42903f7f
L
3375 },
3376
1ceb70f8 3377 /* PREFIX_0F383D */
42903f7f 3378 {
592d1631
L
3379 { Bad_Opcode },
3380 { Bad_Opcode },
09a2c6cf 3381 { "pmaxsd", { XM, EXx } },
42903f7f
L
3382 },
3383
1ceb70f8 3384 /* PREFIX_0F383E */
42903f7f 3385 {
592d1631
L
3386 { Bad_Opcode },
3387 { Bad_Opcode },
09a2c6cf 3388 { "pmaxuw", { XM, EXx } },
42903f7f
L
3389 },
3390
1ceb70f8 3391 /* PREFIX_0F383F */
42903f7f 3392 {
592d1631
L
3393 { Bad_Opcode },
3394 { Bad_Opcode },
09a2c6cf 3395 { "pmaxud", { XM, EXx } },
42903f7f
L
3396 },
3397
1ceb70f8 3398 /* PREFIX_0F3840 */
42903f7f 3399 {
592d1631
L
3400 { Bad_Opcode },
3401 { Bad_Opcode },
09a2c6cf 3402 { "pmulld", { XM, EXx } },
42903f7f
L
3403 },
3404
1ceb70f8 3405 /* PREFIX_0F3841 */
42903f7f 3406 {
592d1631
L
3407 { Bad_Opcode },
3408 { Bad_Opcode },
09a2c6cf 3409 { "phminposuw", { XM, EXx } },
42903f7f
L
3410 },
3411
f1f8f695
L
3412 /* PREFIX_0F3880 */
3413 {
592d1631
L
3414 { Bad_Opcode },
3415 { Bad_Opcode },
f1f8f695 3416 { "invept", { Gm, Mo } },
f1f8f695
L
3417 },
3418
3419 /* PREFIX_0F3881 */
3420 {
592d1631
L
3421 { Bad_Opcode },
3422 { Bad_Opcode },
f1f8f695 3423 { "invvpid", { Gm, Mo } },
f1f8f695
L
3424 },
3425
c0f3af97
L
3426 /* PREFIX_0F38DB */
3427 {
592d1631
L
3428 { Bad_Opcode },
3429 { Bad_Opcode },
c0f3af97 3430 { "aesimc", { XM, EXx } },
c0f3af97
L
3431 },
3432
3433 /* PREFIX_0F38DC */
3434 {
592d1631
L
3435 { Bad_Opcode },
3436 { Bad_Opcode },
c0f3af97 3437 { "aesenc", { XM, EXx } },
c0f3af97
L
3438 },
3439
3440 /* PREFIX_0F38DD */
3441 {
592d1631
L
3442 { Bad_Opcode },
3443 { Bad_Opcode },
c0f3af97 3444 { "aesenclast", { XM, EXx } },
c0f3af97
L
3445 },
3446
3447 /* PREFIX_0F38DE */
3448 {
592d1631
L
3449 { Bad_Opcode },
3450 { Bad_Opcode },
c0f3af97 3451 { "aesdec", { XM, EXx } },
c0f3af97
L
3452 },
3453
3454 /* PREFIX_0F38DF */
3455 {
592d1631
L
3456 { Bad_Opcode },
3457 { Bad_Opcode },
c0f3af97 3458 { "aesdeclast", { XM, EXx } },
c0f3af97
L
3459 },
3460
1ceb70f8 3461 /* PREFIX_0F38F0 */
4e7d34a6 3462 {
f1f8f695 3463 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 3464 { Bad_Opcode },
f1f8f695 3465 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3466 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3467 },
3468
1ceb70f8 3469 /* PREFIX_0F38F1 */
4e7d34a6 3470 {
f1f8f695 3471 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 3472 { Bad_Opcode },
f1f8f695 3473 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3474 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3475 },
3476
1ceb70f8 3477 /* PREFIX_0F3A08 */
42903f7f 3478 {
592d1631
L
3479 { Bad_Opcode },
3480 { Bad_Opcode },
09a2c6cf 3481 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3482 },
3483
1ceb70f8 3484 /* PREFIX_0F3A09 */
42903f7f 3485 {
592d1631
L
3486 { Bad_Opcode },
3487 { Bad_Opcode },
09a2c6cf 3488 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3489 },
3490
1ceb70f8 3491 /* PREFIX_0F3A0A */
42903f7f 3492 {
592d1631
L
3493 { Bad_Opcode },
3494 { Bad_Opcode },
09335d05 3495 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3496 },
3497
1ceb70f8 3498 /* PREFIX_0F3A0B */
42903f7f 3499 {
592d1631
L
3500 { Bad_Opcode },
3501 { Bad_Opcode },
09335d05 3502 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3503 },
3504
1ceb70f8 3505 /* PREFIX_0F3A0C */
42903f7f 3506 {
592d1631
L
3507 { Bad_Opcode },
3508 { Bad_Opcode },
09a2c6cf 3509 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3510 },
3511
1ceb70f8 3512 /* PREFIX_0F3A0D */
42903f7f 3513 {
592d1631
L
3514 { Bad_Opcode },
3515 { Bad_Opcode },
09a2c6cf 3516 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3517 },
3518
1ceb70f8 3519 /* PREFIX_0F3A0E */
42903f7f 3520 {
592d1631
L
3521 { Bad_Opcode },
3522 { Bad_Opcode },
09a2c6cf 3523 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3524 },
3525
1ceb70f8 3526 /* PREFIX_0F3A14 */
42903f7f 3527 {
592d1631
L
3528 { Bad_Opcode },
3529 { Bad_Opcode },
42903f7f 3530 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
3531 },
3532
1ceb70f8 3533 /* PREFIX_0F3A15 */
42903f7f 3534 {
592d1631
L
3535 { Bad_Opcode },
3536 { Bad_Opcode },
42903f7f 3537 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
3538 },
3539
1ceb70f8 3540 /* PREFIX_0F3A16 */
42903f7f 3541 {
592d1631
L
3542 { Bad_Opcode },
3543 { Bad_Opcode },
42903f7f 3544 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
3545 },
3546
1ceb70f8 3547 /* PREFIX_0F3A17 */
42903f7f 3548 {
592d1631
L
3549 { Bad_Opcode },
3550 { Bad_Opcode },
42903f7f 3551 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
3552 },
3553
1ceb70f8 3554 /* PREFIX_0F3A20 */
42903f7f 3555 {
592d1631
L
3556 { Bad_Opcode },
3557 { Bad_Opcode },
42903f7f 3558 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
3559 },
3560
1ceb70f8 3561 /* PREFIX_0F3A21 */
42903f7f 3562 {
592d1631
L
3563 { Bad_Opcode },
3564 { Bad_Opcode },
8976381e 3565 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3566 },
3567
1ceb70f8 3568 /* PREFIX_0F3A22 */
42903f7f 3569 {
592d1631
L
3570 { Bad_Opcode },
3571 { Bad_Opcode },
42903f7f 3572 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
3573 },
3574
1ceb70f8 3575 /* PREFIX_0F3A40 */
42903f7f 3576 {
592d1631
L
3577 { Bad_Opcode },
3578 { Bad_Opcode },
09a2c6cf 3579 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3580 },
3581
1ceb70f8 3582 /* PREFIX_0F3A41 */
42903f7f 3583 {
592d1631
L
3584 { Bad_Opcode },
3585 { Bad_Opcode },
09a2c6cf 3586 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3587 },
3588
1ceb70f8 3589 /* PREFIX_0F3A42 */
42903f7f 3590 {
592d1631
L
3591 { Bad_Opcode },
3592 { Bad_Opcode },
09a2c6cf 3593 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 3594 },
381d071f 3595
c0f3af97
L
3596 /* PREFIX_0F3A44 */
3597 {
592d1631
L
3598 { Bad_Opcode },
3599 { Bad_Opcode },
c0f3af97 3600 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
3601 },
3602
1ceb70f8 3603 /* PREFIX_0F3A60 */
381d071f 3604 {
592d1631
L
3605 { Bad_Opcode },
3606 { Bad_Opcode },
4e7d34a6 3607 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3608 },
3609
1ceb70f8 3610 /* PREFIX_0F3A61 */
381d071f 3611 {
592d1631
L
3612 { Bad_Opcode },
3613 { Bad_Opcode },
4e7d34a6 3614 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
3615 },
3616
1ceb70f8 3617 /* PREFIX_0F3A62 */
381d071f 3618 {
592d1631
L
3619 { Bad_Opcode },
3620 { Bad_Opcode },
4e7d34a6 3621 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
3622 },
3623
1ceb70f8 3624 /* PREFIX_0F3A63 */
381d071f 3625 {
592d1631
L
3626 { Bad_Opcode },
3627 { Bad_Opcode },
4e7d34a6 3628 { "pcmpistri", { XM, EXx, Ib } },
381d071f 3629 },
09a2c6cf 3630
c0f3af97 3631 /* PREFIX_0F3ADF */
09a2c6cf 3632 {
592d1631
L
3633 { Bad_Opcode },
3634 { Bad_Opcode },
c0f3af97 3635 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
3636 },
3637
592a252b 3638 /* PREFIX_VEX_0F10 */
09a2c6cf 3639 {
592a252b
L
3640 { VEX_W_TABLE (VEX_W_0F10_P_0) },
3641 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
3642 { VEX_W_TABLE (VEX_W_0F10_P_2) },
3643 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
3644 },
3645
592a252b 3646 /* PREFIX_VEX_0F11 */
09a2c6cf 3647 {
592a252b
L
3648 { VEX_W_TABLE (VEX_W_0F11_P_0) },
3649 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
3650 { VEX_W_TABLE (VEX_W_0F11_P_2) },
3651 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
3652 },
3653
592a252b 3654 /* PREFIX_VEX_0F12 */
09a2c6cf 3655 {
592a252b
L
3656 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
3657 { VEX_W_TABLE (VEX_W_0F12_P_1) },
3658 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
3659 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
3660 },
3661
592a252b 3662 /* PREFIX_VEX_0F16 */
09a2c6cf 3663 {
592a252b
L
3664 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
3665 { VEX_W_TABLE (VEX_W_0F16_P_1) },
3666 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 3667 },
7c52e0e8 3668
592a252b 3669 /* PREFIX_VEX_0F2A */
5f754f58 3670 {
592d1631 3671 { Bad_Opcode },
592a252b 3672 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 3673 { Bad_Opcode },
592a252b 3674 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 3675 },
7c52e0e8 3676
592a252b 3677 /* PREFIX_VEX_0F2C */
5f754f58 3678 {
592d1631 3679 { Bad_Opcode },
592a252b 3680 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 3681 { Bad_Opcode },
592a252b 3682 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 3683 },
7c52e0e8 3684
592a252b 3685 /* PREFIX_VEX_0F2D */
7c52e0e8 3686 {
592d1631 3687 { Bad_Opcode },
592a252b 3688 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 3689 { Bad_Opcode },
592a252b 3690 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
3691 },
3692
592a252b 3693 /* PREFIX_VEX_0F2E */
7c52e0e8 3694 {
592a252b 3695 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 3696 { Bad_Opcode },
592a252b 3697 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
3698 },
3699
592a252b 3700 /* PREFIX_VEX_0F2F */
7c52e0e8 3701 {
592a252b 3702 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 3703 { Bad_Opcode },
592a252b 3704 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
3705 },
3706
592a252b 3707 /* PREFIX_VEX_0F51 */
7c52e0e8 3708 {
592a252b
L
3709 { VEX_W_TABLE (VEX_W_0F51_P_0) },
3710 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
3711 { VEX_W_TABLE (VEX_W_0F51_P_2) },
3712 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
3713 },
3714
592a252b 3715 /* PREFIX_VEX_0F52 */
7c52e0e8 3716 {
592a252b
L
3717 { VEX_W_TABLE (VEX_W_0F52_P_0) },
3718 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
3719 },
3720
592a252b 3721 /* PREFIX_VEX_0F53 */
7c52e0e8 3722 {
592a252b
L
3723 { VEX_W_TABLE (VEX_W_0F53_P_0) },
3724 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
3725 },
3726
592a252b 3727 /* PREFIX_VEX_0F58 */
7c52e0e8 3728 {
592a252b
L
3729 { VEX_W_TABLE (VEX_W_0F58_P_0) },
3730 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
3731 { VEX_W_TABLE (VEX_W_0F58_P_2) },
3732 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
3733 },
3734
592a252b 3735 /* PREFIX_VEX_0F59 */
7c52e0e8 3736 {
592a252b
L
3737 { VEX_W_TABLE (VEX_W_0F59_P_0) },
3738 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
3739 { VEX_W_TABLE (VEX_W_0F59_P_2) },
3740 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
3741 },
3742
592a252b 3743 /* PREFIX_VEX_0F5A */
7c52e0e8 3744 {
592a252b
L
3745 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
3746 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 3747 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 3748 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
3749 },
3750
592a252b 3751 /* PREFIX_VEX_0F5B */
7c52e0e8 3752 {
592a252b
L
3753 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
3754 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
3755 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
3756 },
3757
592a252b 3758 /* PREFIX_VEX_0F5C */
7c52e0e8 3759 {
592a252b
L
3760 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
3761 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
3762 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
3763 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
3764 },
3765
592a252b 3766 /* PREFIX_VEX_0F5D */
7c52e0e8 3767 {
592a252b
L
3768 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
3769 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
3770 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
3771 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
3772 },
3773
592a252b 3774 /* PREFIX_VEX_0F5E */
7c52e0e8 3775 {
592a252b
L
3776 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
3777 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
3778 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
3779 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
3780 },
3781
592a252b 3782 /* PREFIX_VEX_0F5F */
7c52e0e8 3783 {
592a252b
L
3784 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
3785 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
3786 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
3787 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
3788 },
3789
592a252b 3790 /* PREFIX_VEX_0F60 */
7c52e0e8 3791 {
592d1631
L
3792 { Bad_Opcode },
3793 { Bad_Opcode },
592a252b 3794 { VEX_LEN_TABLE (VEX_LEN_0F60_P_2) },
7c52e0e8
L
3795 },
3796
592a252b 3797 /* PREFIX_VEX_0F61 */
7c52e0e8 3798 {
592d1631
L
3799 { Bad_Opcode },
3800 { Bad_Opcode },
592a252b 3801 { VEX_LEN_TABLE (VEX_LEN_0F61_P_2) },
7c52e0e8
L
3802 },
3803
592a252b 3804 /* PREFIX_VEX_0F62 */
7c52e0e8 3805 {
592d1631
L
3806 { Bad_Opcode },
3807 { Bad_Opcode },
592a252b 3808 { VEX_LEN_TABLE (VEX_LEN_0F62_P_2) },
7c52e0e8
L
3809 },
3810
592a252b 3811 /* PREFIX_VEX_0F63 */
7c52e0e8 3812 {
592d1631
L
3813 { Bad_Opcode },
3814 { Bad_Opcode },
592a252b 3815 { VEX_LEN_TABLE (VEX_LEN_0F63_P_2) },
7c52e0e8
L
3816 },
3817
592a252b 3818 /* PREFIX_VEX_0F64 */
7c52e0e8 3819 {
592d1631
L
3820 { Bad_Opcode },
3821 { Bad_Opcode },
592a252b 3822 { VEX_LEN_TABLE (VEX_LEN_0F64_P_2) },
7c52e0e8
L
3823 },
3824
592a252b 3825 /* PREFIX_VEX_0F65 */
7c52e0e8 3826 {
592d1631
L
3827 { Bad_Opcode },
3828 { Bad_Opcode },
592a252b 3829 { VEX_LEN_TABLE (VEX_LEN_0F65_P_2) },
7c52e0e8
L
3830 },
3831
592a252b 3832 /* PREFIX_VEX_0F66 */
7c52e0e8 3833 {
592d1631
L
3834 { Bad_Opcode },
3835 { Bad_Opcode },
592a252b 3836 { VEX_LEN_TABLE (VEX_LEN_0F66_P_2) },
7c52e0e8 3837 },
6439fc28 3838
592a252b 3839 /* PREFIX_VEX_0F67 */
331d2d0d 3840 {
592d1631
L
3841 { Bad_Opcode },
3842 { Bad_Opcode },
592a252b 3843 { VEX_LEN_TABLE (VEX_LEN_0F67_P_2) },
c0f3af97
L
3844 },
3845
592a252b 3846 /* PREFIX_VEX_0F68 */
c0f3af97 3847 {
592d1631
L
3848 { Bad_Opcode },
3849 { Bad_Opcode },
592a252b 3850 { VEX_LEN_TABLE (VEX_LEN_0F68_P_2) },
c0f3af97
L
3851 },
3852
592a252b 3853 /* PREFIX_VEX_0F69 */
c0f3af97 3854 {
592d1631
L
3855 { Bad_Opcode },
3856 { Bad_Opcode },
592a252b 3857 { VEX_LEN_TABLE (VEX_LEN_0F69_P_2) },
c0f3af97
L
3858 },
3859
592a252b 3860 /* PREFIX_VEX_0F6A */
c0f3af97 3861 {
592d1631
L
3862 { Bad_Opcode },
3863 { Bad_Opcode },
592a252b 3864 { VEX_LEN_TABLE (VEX_LEN_0F6A_P_2) },
c0f3af97
L
3865 },
3866
592a252b 3867 /* PREFIX_VEX_0F6B */
c0f3af97 3868 {
592d1631
L
3869 { Bad_Opcode },
3870 { Bad_Opcode },
592a252b 3871 { VEX_LEN_TABLE (VEX_LEN_0F6B_P_2) },
c0f3af97
L
3872 },
3873
592a252b 3874 /* PREFIX_VEX_0F6C */
c0f3af97 3875 {
592d1631
L
3876 { Bad_Opcode },
3877 { Bad_Opcode },
592a252b 3878 { VEX_LEN_TABLE (VEX_LEN_0F6C_P_2) },
c0f3af97
L
3879 },
3880
592a252b 3881 /* PREFIX_VEX_0F6D */
c0f3af97 3882 {
592d1631
L
3883 { Bad_Opcode },
3884 { Bad_Opcode },
592a252b 3885 { VEX_LEN_TABLE (VEX_LEN_0F6D_P_2) },
c0f3af97
L
3886 },
3887
592a252b 3888 /* PREFIX_VEX_0F6E */
c0f3af97 3889 {
592d1631
L
3890 { Bad_Opcode },
3891 { Bad_Opcode },
592a252b 3892 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
3893 },
3894
592a252b 3895 /* PREFIX_VEX_0F6F */
c0f3af97 3896 {
592d1631 3897 { Bad_Opcode },
592a252b
L
3898 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
3899 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
3900 },
3901
592a252b 3902 /* PREFIX_VEX_0F70 */
c0f3af97 3903 {
592d1631 3904 { Bad_Opcode },
592a252b
L
3905 { VEX_LEN_TABLE (VEX_LEN_0F70_P_1) },
3906 { VEX_LEN_TABLE (VEX_LEN_0F70_P_2) },
3907 { VEX_LEN_TABLE (VEX_LEN_0F70_P_3) },
c0f3af97
L
3908 },
3909
592a252b 3910 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 3911 {
592d1631
L
3912 { Bad_Opcode },
3913 { Bad_Opcode },
592a252b 3914 { VEX_LEN_TABLE (VEX_LEN_0F71_R_2_P_2) },
c0f3af97
L
3915 },
3916
592a252b 3917 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 3918 {
592d1631
L
3919 { Bad_Opcode },
3920 { Bad_Opcode },
592a252b 3921 { VEX_LEN_TABLE (VEX_LEN_0F71_R_4_P_2) },
c0f3af97
L
3922 },
3923
592a252b 3924 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 3925 {
592d1631
L
3926 { Bad_Opcode },
3927 { Bad_Opcode },
592a252b 3928 { VEX_LEN_TABLE (VEX_LEN_0F71_R_6_P_2) },
c0f3af97
L
3929 },
3930
592a252b 3931 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 3932 {
592d1631
L
3933 { Bad_Opcode },
3934 { Bad_Opcode },
592a252b 3935 { VEX_LEN_TABLE (VEX_LEN_0F72_R_2_P_2) },
c0f3af97
L
3936 },
3937
592a252b 3938 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 3939 {
592d1631
L
3940 { Bad_Opcode },
3941 { Bad_Opcode },
592a252b 3942 { VEX_LEN_TABLE (VEX_LEN_0F72_R_4_P_2) },
c0f3af97
L
3943 },
3944
592a252b 3945 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 3946 {
592d1631
L
3947 { Bad_Opcode },
3948 { Bad_Opcode },
592a252b 3949 { VEX_LEN_TABLE (VEX_LEN_0F72_R_6_P_2) },
c0f3af97
L
3950 },
3951
592a252b 3952 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 3953 {
592d1631
L
3954 { Bad_Opcode },
3955 { Bad_Opcode },
592a252b 3956 { VEX_LEN_TABLE (VEX_LEN_0F73_R_2_P_2) },
c0f3af97
L
3957 },
3958
592a252b 3959 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 3960 {
592d1631
L
3961 { Bad_Opcode },
3962 { Bad_Opcode },
592a252b 3963 { VEX_LEN_TABLE (VEX_LEN_0F73_R_3_P_2) },
c0f3af97
L
3964 },
3965
592a252b 3966 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 3967 {
592d1631
L
3968 { Bad_Opcode },
3969 { Bad_Opcode },
592a252b 3970 { VEX_LEN_TABLE (VEX_LEN_0F73_R_6_P_2) },
c0f3af97
L
3971 },
3972
592a252b 3973 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 3974 {
592d1631
L
3975 { Bad_Opcode },
3976 { Bad_Opcode },
592a252b 3977 { VEX_LEN_TABLE (VEX_LEN_0F73_R_7_P_2) },
c0f3af97
L
3978 },
3979
592a252b 3980 /* PREFIX_VEX_0F74 */
c0f3af97 3981 {
592d1631
L
3982 { Bad_Opcode },
3983 { Bad_Opcode },
592a252b 3984 { VEX_LEN_TABLE (VEX_LEN_0F74_P_2) },
c0f3af97
L
3985 },
3986
592a252b 3987 /* PREFIX_VEX_0F75 */
c0f3af97 3988 {
592d1631
L
3989 { Bad_Opcode },
3990 { Bad_Opcode },
592a252b 3991 { VEX_LEN_TABLE (VEX_LEN_0F75_P_2) },
c0f3af97
L
3992 },
3993
592a252b 3994 /* PREFIX_VEX_0F76 */
c0f3af97 3995 {
592d1631
L
3996 { Bad_Opcode },
3997 { Bad_Opcode },
592a252b 3998 { VEX_LEN_TABLE (VEX_LEN_0F76_P_2) },
c0f3af97
L
3999 },
4000
592a252b 4001 /* PREFIX_VEX_0F77 */
c0f3af97 4002 {
592a252b 4003 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4004 },
4005
592a252b 4006 /* PREFIX_VEX_0F7C */
c0f3af97 4007 {
592d1631
L
4008 { Bad_Opcode },
4009 { Bad_Opcode },
592a252b
L
4010 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4011 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4012 },
4013
592a252b 4014 /* PREFIX_VEX_0F7D */
c0f3af97 4015 {
592d1631
L
4016 { Bad_Opcode },
4017 { Bad_Opcode },
592a252b
L
4018 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4019 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4020 },
4021
592a252b 4022 /* PREFIX_VEX_0F7E */
c0f3af97 4023 {
592d1631 4024 { Bad_Opcode },
592a252b
L
4025 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4026 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4027 },
4028
592a252b 4029 /* PREFIX_VEX_0F7F */
c0f3af97 4030 {
592d1631 4031 { Bad_Opcode },
592a252b
L
4032 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4033 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4034 },
4035
592a252b 4036 /* PREFIX_VEX_0FC2 */
c0f3af97 4037 {
592a252b
L
4038 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4039 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4040 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4041 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
4042 },
4043
592a252b 4044 /* PREFIX_VEX_0FC4 */
c0f3af97 4045 {
592d1631
L
4046 { Bad_Opcode },
4047 { Bad_Opcode },
592a252b 4048 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
4049 },
4050
592a252b 4051 /* PREFIX_VEX_0FC5 */
c0f3af97 4052 {
592d1631
L
4053 { Bad_Opcode },
4054 { Bad_Opcode },
592a252b 4055 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
4056 },
4057
592a252b 4058 /* PREFIX_VEX_0FD0 */
c0f3af97 4059 {
592d1631
L
4060 { Bad_Opcode },
4061 { Bad_Opcode },
592a252b
L
4062 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4063 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
4064 },
4065
592a252b 4066 /* PREFIX_VEX_0FD1 */
c0f3af97 4067 {
592d1631
L
4068 { Bad_Opcode },
4069 { Bad_Opcode },
592a252b 4070 { VEX_LEN_TABLE (VEX_LEN_0FD1_P_2) },
c0f3af97
L
4071 },
4072
592a252b 4073 /* PREFIX_VEX_0FD2 */
c0f3af97 4074 {
592d1631
L
4075 { Bad_Opcode },
4076 { Bad_Opcode },
592a252b 4077 { VEX_LEN_TABLE (VEX_LEN_0FD2_P_2) },
c0f3af97
L
4078 },
4079
592a252b 4080 /* PREFIX_VEX_0FD3 */
c0f3af97 4081 {
592d1631
L
4082 { Bad_Opcode },
4083 { Bad_Opcode },
592a252b 4084 { VEX_LEN_TABLE (VEX_LEN_0FD3_P_2) },
c0f3af97
L
4085 },
4086
592a252b 4087 /* PREFIX_VEX_0FD4 */
c0f3af97 4088 {
592d1631
L
4089 { Bad_Opcode },
4090 { Bad_Opcode },
592a252b 4091 { VEX_LEN_TABLE (VEX_LEN_0FD4_P_2) },
c0f3af97
L
4092 },
4093
592a252b 4094 /* PREFIX_VEX_0FD5 */
c0f3af97 4095 {
592d1631
L
4096 { Bad_Opcode },
4097 { Bad_Opcode },
592a252b 4098 { VEX_LEN_TABLE (VEX_LEN_0FD5_P_2) },
c0f3af97
L
4099 },
4100
592a252b 4101 /* PREFIX_VEX_0FD6 */
c0f3af97 4102 {
592d1631
L
4103 { Bad_Opcode },
4104 { Bad_Opcode },
592a252b 4105 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
4106 },
4107
592a252b 4108 /* PREFIX_VEX_0FD7 */
c0f3af97 4109 {
592d1631
L
4110 { Bad_Opcode },
4111 { Bad_Opcode },
592a252b 4112 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
4113 },
4114
592a252b 4115 /* PREFIX_VEX_0FD8 */
c0f3af97 4116 {
592d1631
L
4117 { Bad_Opcode },
4118 { Bad_Opcode },
592a252b 4119 { VEX_LEN_TABLE (VEX_LEN_0FD8_P_2) },
c0f3af97
L
4120 },
4121
592a252b 4122 /* PREFIX_VEX_0FD9 */
c0f3af97 4123 {
592d1631
L
4124 { Bad_Opcode },
4125 { Bad_Opcode },
592a252b 4126 { VEX_LEN_TABLE (VEX_LEN_0FD9_P_2) },
c0f3af97
L
4127 },
4128
592a252b 4129 /* PREFIX_VEX_0FDA */
c0f3af97 4130 {
592d1631
L
4131 { Bad_Opcode },
4132 { Bad_Opcode },
592a252b 4133 { VEX_LEN_TABLE (VEX_LEN_0FDA_P_2) },
c0f3af97
L
4134 },
4135
592a252b 4136 /* PREFIX_VEX_0FDB */
c0f3af97 4137 {
592d1631
L
4138 { Bad_Opcode },
4139 { Bad_Opcode },
592a252b 4140 { VEX_LEN_TABLE (VEX_LEN_0FDB_P_2) },
c0f3af97
L
4141 },
4142
592a252b 4143 /* PREFIX_VEX_0FDC */
c0f3af97 4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
592a252b 4147 { VEX_LEN_TABLE (VEX_LEN_0FDC_P_2) },
c0f3af97
L
4148 },
4149
592a252b 4150 /* PREFIX_VEX_0FDD */
c0f3af97 4151 {
592d1631
L
4152 { Bad_Opcode },
4153 { Bad_Opcode },
592a252b 4154 { VEX_LEN_TABLE (VEX_LEN_0FDD_P_2) },
c0f3af97
L
4155 },
4156
592a252b 4157 /* PREFIX_VEX_0FDE */
c0f3af97 4158 {
592d1631
L
4159 { Bad_Opcode },
4160 { Bad_Opcode },
592a252b 4161 { VEX_LEN_TABLE (VEX_LEN_0FDE_P_2) },
c0f3af97
L
4162 },
4163
592a252b 4164 /* PREFIX_VEX_0FDF */
c0f3af97 4165 {
592d1631
L
4166 { Bad_Opcode },
4167 { Bad_Opcode },
592a252b 4168 { VEX_LEN_TABLE (VEX_LEN_0FDF_P_2) },
c0f3af97
L
4169 },
4170
592a252b 4171 /* PREFIX_VEX_0FE0 */
c0f3af97 4172 {
592d1631
L
4173 { Bad_Opcode },
4174 { Bad_Opcode },
592a252b 4175 { VEX_LEN_TABLE (VEX_LEN_0FE0_P_2) },
c0f3af97
L
4176 },
4177
592a252b 4178 /* PREFIX_VEX_0FE1 */
c0f3af97 4179 {
592d1631
L
4180 { Bad_Opcode },
4181 { Bad_Opcode },
592a252b 4182 { VEX_LEN_TABLE (VEX_LEN_0FE1_P_2) },
c0f3af97
L
4183 },
4184
592a252b 4185 /* PREFIX_VEX_0FE2 */
c0f3af97 4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
592a252b 4189 { VEX_LEN_TABLE (VEX_LEN_0FE2_P_2) },
c0f3af97
L
4190 },
4191
592a252b 4192 /* PREFIX_VEX_0FE3 */
c0f3af97 4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
592a252b 4196 { VEX_LEN_TABLE (VEX_LEN_0FE3_P_2) },
c0f3af97
L
4197 },
4198
592a252b 4199 /* PREFIX_VEX_0FE4 */
c0f3af97 4200 {
592d1631
L
4201 { Bad_Opcode },
4202 { Bad_Opcode },
592a252b 4203 { VEX_LEN_TABLE (VEX_LEN_0FE4_P_2) },
c0f3af97
L
4204 },
4205
592a252b 4206 /* PREFIX_VEX_0FE5 */
c0f3af97 4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
592a252b 4210 { VEX_LEN_TABLE (VEX_LEN_0FE5_P_2) },
c0f3af97
L
4211 },
4212
592a252b 4213 /* PREFIX_VEX_0FE6 */
c0f3af97 4214 {
592d1631 4215 { Bad_Opcode },
592a252b
L
4216 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4217 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4218 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
4219 },
4220
592a252b 4221 /* PREFIX_VEX_0FE7 */
c0f3af97 4222 {
592d1631
L
4223 { Bad_Opcode },
4224 { Bad_Opcode },
592a252b 4225 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
4226 },
4227
592a252b 4228 /* PREFIX_VEX_0FE8 */
c0f3af97 4229 {
592d1631
L
4230 { Bad_Opcode },
4231 { Bad_Opcode },
592a252b 4232 { VEX_LEN_TABLE (VEX_LEN_0FE8_P_2) },
c0f3af97
L
4233 },
4234
592a252b 4235 /* PREFIX_VEX_0FE9 */
c0f3af97 4236 {
592d1631
L
4237 { Bad_Opcode },
4238 { Bad_Opcode },
592a252b 4239 { VEX_LEN_TABLE (VEX_LEN_0FE9_P_2) },
c0f3af97
L
4240 },
4241
592a252b 4242 /* PREFIX_VEX_0FEA */
c0f3af97 4243 {
592d1631
L
4244 { Bad_Opcode },
4245 { Bad_Opcode },
592a252b 4246 { VEX_LEN_TABLE (VEX_LEN_0FEA_P_2) },
c0f3af97
L
4247 },
4248
592a252b 4249 /* PREFIX_VEX_0FEB */
c0f3af97 4250 {
592d1631
L
4251 { Bad_Opcode },
4252 { Bad_Opcode },
592a252b 4253 { VEX_LEN_TABLE (VEX_LEN_0FEB_P_2) },
c0f3af97
L
4254 },
4255
592a252b 4256 /* PREFIX_VEX_0FEC */
c0f3af97 4257 {
592d1631
L
4258 { Bad_Opcode },
4259 { Bad_Opcode },
592a252b 4260 { VEX_LEN_TABLE (VEX_LEN_0FEC_P_2) },
c0f3af97
L
4261 },
4262
592a252b 4263 /* PREFIX_VEX_0FED */
c0f3af97 4264 {
592d1631
L
4265 { Bad_Opcode },
4266 { Bad_Opcode },
592a252b 4267 { VEX_LEN_TABLE (VEX_LEN_0FED_P_2) },
c0f3af97
L
4268 },
4269
592a252b 4270 /* PREFIX_VEX_0FEE */
c0f3af97 4271 {
592d1631
L
4272 { Bad_Opcode },
4273 { Bad_Opcode },
592a252b 4274 { VEX_LEN_TABLE (VEX_LEN_0FEE_P_2) },
c0f3af97
L
4275 },
4276
592a252b 4277 /* PREFIX_VEX_0FEF */
c0f3af97 4278 {
592d1631
L
4279 { Bad_Opcode },
4280 { Bad_Opcode },
592a252b 4281 { VEX_LEN_TABLE (VEX_LEN_0FEF_P_2) },
c0f3af97
L
4282 },
4283
592a252b 4284 /* PREFIX_VEX_0FF0 */
c0f3af97 4285 {
592d1631
L
4286 { Bad_Opcode },
4287 { Bad_Opcode },
4288 { Bad_Opcode },
592a252b 4289 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
4290 },
4291
592a252b 4292 /* PREFIX_VEX_0FF1 */
c0f3af97 4293 {
592d1631
L
4294 { Bad_Opcode },
4295 { Bad_Opcode },
592a252b 4296 { VEX_LEN_TABLE (VEX_LEN_0FF1_P_2) },
c0f3af97
L
4297 },
4298
592a252b 4299 /* PREFIX_VEX_0FF2 */
c0f3af97 4300 {
592d1631
L
4301 { Bad_Opcode },
4302 { Bad_Opcode },
592a252b 4303 { VEX_LEN_TABLE (VEX_LEN_0FF2_P_2) },
c0f3af97
L
4304 },
4305
592a252b 4306 /* PREFIX_VEX_0FF3 */
c0f3af97 4307 {
592d1631
L
4308 { Bad_Opcode },
4309 { Bad_Opcode },
592a252b 4310 { VEX_LEN_TABLE (VEX_LEN_0FF3_P_2) },
c0f3af97
L
4311 },
4312
592a252b 4313 /* PREFIX_VEX_0FF4 */
c0f3af97 4314 {
592d1631
L
4315 { Bad_Opcode },
4316 { Bad_Opcode },
592a252b 4317 { VEX_LEN_TABLE (VEX_LEN_0FF4_P_2) },
c0f3af97
L
4318 },
4319
592a252b 4320 /* PREFIX_VEX_0FF5 */
c0f3af97 4321 {
592d1631
L
4322 { Bad_Opcode },
4323 { Bad_Opcode },
592a252b 4324 { VEX_LEN_TABLE (VEX_LEN_0FF5_P_2) },
c0f3af97
L
4325 },
4326
592a252b 4327 /* PREFIX_VEX_0FF6 */
c0f3af97 4328 {
592d1631
L
4329 { Bad_Opcode },
4330 { Bad_Opcode },
592a252b 4331 { VEX_LEN_TABLE (VEX_LEN_0FF6_P_2) },
c0f3af97
L
4332 },
4333
592a252b 4334 /* PREFIX_VEX_0FF7 */
c0f3af97 4335 {
592d1631
L
4336 { Bad_Opcode },
4337 { Bad_Opcode },
592a252b 4338 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
4339 },
4340
592a252b 4341 /* PREFIX_VEX_0FF8 */
c0f3af97 4342 {
592d1631
L
4343 { Bad_Opcode },
4344 { Bad_Opcode },
592a252b 4345 { VEX_LEN_TABLE (VEX_LEN_0FF8_P_2) },
c0f3af97
L
4346 },
4347
592a252b 4348 /* PREFIX_VEX_0FF9 */
c0f3af97 4349 {
592d1631
L
4350 { Bad_Opcode },
4351 { Bad_Opcode },
592a252b 4352 { VEX_LEN_TABLE (VEX_LEN_0FF9_P_2) },
c0f3af97
L
4353 },
4354
592a252b 4355 /* PREFIX_VEX_0FFA */
c0f3af97 4356 {
592d1631
L
4357 { Bad_Opcode },
4358 { Bad_Opcode },
592a252b 4359 { VEX_LEN_TABLE (VEX_LEN_0FFA_P_2) },
c0f3af97
L
4360 },
4361
592a252b 4362 /* PREFIX_VEX_0FFB */
c0f3af97 4363 {
592d1631
L
4364 { Bad_Opcode },
4365 { Bad_Opcode },
592a252b 4366 { VEX_LEN_TABLE (VEX_LEN_0FFB_P_2) },
c0f3af97
L
4367 },
4368
592a252b 4369 /* PREFIX_VEX_0FFC */
c0f3af97 4370 {
592d1631
L
4371 { Bad_Opcode },
4372 { Bad_Opcode },
592a252b 4373 { VEX_LEN_TABLE (VEX_LEN_0FFC_P_2) },
c0f3af97
L
4374 },
4375
592a252b 4376 /* PREFIX_VEX_0FFD */
c0f3af97 4377 {
592d1631
L
4378 { Bad_Opcode },
4379 { Bad_Opcode },
592a252b 4380 { VEX_LEN_TABLE (VEX_LEN_0FFD_P_2) },
c0f3af97
L
4381 },
4382
592a252b 4383 /* PREFIX_VEX_0FFE */
c0f3af97 4384 {
592d1631
L
4385 { Bad_Opcode },
4386 { Bad_Opcode },
592a252b 4387 { VEX_LEN_TABLE (VEX_LEN_0FFE_P_2) },
c0f3af97
L
4388 },
4389
592a252b 4390 /* PREFIX_VEX_0F3800 */
c0f3af97 4391 {
592d1631
L
4392 { Bad_Opcode },
4393 { Bad_Opcode },
592a252b 4394 { VEX_LEN_TABLE (VEX_LEN_0F3800_P_2) },
c0f3af97
L
4395 },
4396
592a252b 4397 /* PREFIX_VEX_0F3801 */
c0f3af97 4398 {
592d1631
L
4399 { Bad_Opcode },
4400 { Bad_Opcode },
592a252b 4401 { VEX_LEN_TABLE (VEX_LEN_0F3801_P_2) },
c0f3af97
L
4402 },
4403
592a252b 4404 /* PREFIX_VEX_0F3802 */
c0f3af97 4405 {
592d1631
L
4406 { Bad_Opcode },
4407 { Bad_Opcode },
592a252b 4408 { VEX_LEN_TABLE (VEX_LEN_0F3802_P_2) },
c0f3af97
L
4409 },
4410
592a252b 4411 /* PREFIX_VEX_0F3803 */
c0f3af97 4412 {
592d1631
L
4413 { Bad_Opcode },
4414 { Bad_Opcode },
592a252b 4415 { VEX_LEN_TABLE (VEX_LEN_0F3803_P_2) },
c0f3af97
L
4416 },
4417
592a252b 4418 /* PREFIX_VEX_0F3804 */
c0f3af97 4419 {
592d1631
L
4420 { Bad_Opcode },
4421 { Bad_Opcode },
592a252b 4422 { VEX_LEN_TABLE (VEX_LEN_0F3804_P_2) },
c0f3af97
L
4423 },
4424
592a252b 4425 /* PREFIX_VEX_0F3805 */
c0f3af97 4426 {
592d1631
L
4427 { Bad_Opcode },
4428 { Bad_Opcode },
592a252b 4429 { VEX_LEN_TABLE (VEX_LEN_0F3805_P_2) },
c0f3af97
L
4430 },
4431
592a252b 4432 /* PREFIX_VEX_0F3806 */
c0f3af97 4433 {
592d1631
L
4434 { Bad_Opcode },
4435 { Bad_Opcode },
592a252b 4436 { VEX_LEN_TABLE (VEX_LEN_0F3806_P_2) },
c0f3af97
L
4437 },
4438
592a252b 4439 /* PREFIX_VEX_0F3807 */
c0f3af97 4440 {
592d1631
L
4441 { Bad_Opcode },
4442 { Bad_Opcode },
592a252b 4443 { VEX_LEN_TABLE (VEX_LEN_0F3807_P_2) },
c0f3af97
L
4444 },
4445
592a252b 4446 /* PREFIX_VEX_0F3808 */
c0f3af97 4447 {
592d1631
L
4448 { Bad_Opcode },
4449 { Bad_Opcode },
592a252b 4450 { VEX_LEN_TABLE (VEX_LEN_0F3808_P_2) },
c0f3af97
L
4451 },
4452
592a252b 4453 /* PREFIX_VEX_0F3809 */
c0f3af97 4454 {
592d1631
L
4455 { Bad_Opcode },
4456 { Bad_Opcode },
592a252b 4457 { VEX_LEN_TABLE (VEX_LEN_0F3809_P_2) },
c0f3af97
L
4458 },
4459
592a252b 4460 /* PREFIX_VEX_0F380A */
c0f3af97 4461 {
592d1631
L
4462 { Bad_Opcode },
4463 { Bad_Opcode },
592a252b 4464 { VEX_LEN_TABLE (VEX_LEN_0F380A_P_2) },
c0f3af97
L
4465 },
4466
592a252b 4467 /* PREFIX_VEX_0F380B */
c0f3af97 4468 {
592d1631
L
4469 { Bad_Opcode },
4470 { Bad_Opcode },
592a252b 4471 { VEX_LEN_TABLE (VEX_LEN_0F380B_P_2) },
c0f3af97
L
4472 },
4473
592a252b 4474 /* PREFIX_VEX_0F380C */
c0f3af97 4475 {
592d1631
L
4476 { Bad_Opcode },
4477 { Bad_Opcode },
592a252b 4478 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
4479 },
4480
592a252b 4481 /* PREFIX_VEX_0F380D */
c0f3af97 4482 {
592d1631
L
4483 { Bad_Opcode },
4484 { Bad_Opcode },
592a252b 4485 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
4486 },
4487
592a252b 4488 /* PREFIX_VEX_0F380E */
c0f3af97 4489 {
592d1631
L
4490 { Bad_Opcode },
4491 { Bad_Opcode },
592a252b 4492 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
4493 },
4494
592a252b 4495 /* PREFIX_VEX_0F380F */
c0f3af97 4496 {
592d1631
L
4497 { Bad_Opcode },
4498 { Bad_Opcode },
592a252b 4499 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
4500 },
4501
592a252b 4502 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
4503 {
4504 { Bad_Opcode },
4505 { Bad_Opcode },
4506 { "vcvtph2ps", { XM, EXxmmq } },
4507 },
4508
592a252b 4509 /* PREFIX_VEX_0F3817 */
c0f3af97 4510 {
592d1631
L
4511 { Bad_Opcode },
4512 { Bad_Opcode },
592a252b 4513 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
4514 },
4515
592a252b 4516 /* PREFIX_VEX_0F3818 */
c0f3af97 4517 {
592d1631
L
4518 { Bad_Opcode },
4519 { Bad_Opcode },
592a252b 4520 { MOD_TABLE (MOD_VEX_0F3818_PREFIX_2) },
c0f3af97
L
4521 },
4522
592a252b 4523 /* PREFIX_VEX_0F3819 */
c0f3af97 4524 {
592d1631
L
4525 { Bad_Opcode },
4526 { Bad_Opcode },
592a252b 4527 { MOD_TABLE (MOD_VEX_0F3819_PREFIX_2) },
c0f3af97
L
4528 },
4529
592a252b 4530 /* PREFIX_VEX_0F381A */
c0f3af97 4531 {
592d1631
L
4532 { Bad_Opcode },
4533 { Bad_Opcode },
592a252b 4534 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
4535 },
4536
592a252b 4537 /* PREFIX_VEX_0F381C */
c0f3af97 4538 {
592d1631
L
4539 { Bad_Opcode },
4540 { Bad_Opcode },
592a252b 4541 { VEX_LEN_TABLE (VEX_LEN_0F381C_P_2) },
c0f3af97
L
4542 },
4543
592a252b 4544 /* PREFIX_VEX_0F381D */
c0f3af97 4545 {
592d1631
L
4546 { Bad_Opcode },
4547 { Bad_Opcode },
592a252b 4548 { VEX_LEN_TABLE (VEX_LEN_0F381D_P_2) },
c0f3af97
L
4549 },
4550
592a252b 4551 /* PREFIX_VEX_0F381E */
c0f3af97 4552 {
592d1631
L
4553 { Bad_Opcode },
4554 { Bad_Opcode },
592a252b 4555 { VEX_LEN_TABLE (VEX_LEN_0F381E_P_2) },
c0f3af97
L
4556 },
4557
592a252b 4558 /* PREFIX_VEX_0F3820 */
c0f3af97 4559 {
592d1631
L
4560 { Bad_Opcode },
4561 { Bad_Opcode },
592a252b 4562 { VEX_LEN_TABLE (VEX_LEN_0F3820_P_2) },
c0f3af97
L
4563 },
4564
592a252b 4565 /* PREFIX_VEX_0F3821 */
c0f3af97 4566 {
592d1631
L
4567 { Bad_Opcode },
4568 { Bad_Opcode },
592a252b 4569 { VEX_LEN_TABLE (VEX_LEN_0F3821_P_2) },
c0f3af97
L
4570 },
4571
592a252b 4572 /* PREFIX_VEX_0F3822 */
c0f3af97 4573 {
592d1631
L
4574 { Bad_Opcode },
4575 { Bad_Opcode },
592a252b 4576 { VEX_LEN_TABLE (VEX_LEN_0F3822_P_2) },
c0f3af97
L
4577 },
4578
592a252b 4579 /* PREFIX_VEX_0F3823 */
c0f3af97 4580 {
592d1631
L
4581 { Bad_Opcode },
4582 { Bad_Opcode },
592a252b 4583 { VEX_LEN_TABLE (VEX_LEN_0F3823_P_2) },
c0f3af97
L
4584 },
4585
592a252b 4586 /* PREFIX_VEX_0F3824 */
c0f3af97 4587 {
592d1631
L
4588 { Bad_Opcode },
4589 { Bad_Opcode },
592a252b 4590 { VEX_LEN_TABLE (VEX_LEN_0F3824_P_2) },
c0f3af97
L
4591 },
4592
592a252b 4593 /* PREFIX_VEX_0F3825 */
c0f3af97 4594 {
592d1631
L
4595 { Bad_Opcode },
4596 { Bad_Opcode },
592a252b 4597 { VEX_LEN_TABLE (VEX_LEN_0F3825_P_2) },
c0f3af97
L
4598 },
4599
592a252b 4600 /* PREFIX_VEX_0F3828 */
c0f3af97 4601 {
592d1631
L
4602 { Bad_Opcode },
4603 { Bad_Opcode },
592a252b 4604 { VEX_LEN_TABLE (VEX_LEN_0F3828_P_2) },
c0f3af97
L
4605 },
4606
592a252b 4607 /* PREFIX_VEX_0F3829 */
c0f3af97 4608 {
592d1631
L
4609 { Bad_Opcode },
4610 { Bad_Opcode },
592a252b 4611 { VEX_LEN_TABLE (VEX_LEN_0F3829_P_2) },
c0f3af97
L
4612 },
4613
592a252b 4614 /* PREFIX_VEX_0F382A */
c0f3af97 4615 {
592d1631
L
4616 { Bad_Opcode },
4617 { Bad_Opcode },
592a252b 4618 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
4619 },
4620
592a252b 4621 /* PREFIX_VEX_0F382B */
c0f3af97 4622 {
592d1631
L
4623 { Bad_Opcode },
4624 { Bad_Opcode },
592a252b 4625 { VEX_LEN_TABLE (VEX_LEN_0F382B_P_2) },
c0f3af97
L
4626 },
4627
592a252b 4628 /* PREFIX_VEX_0F382C */
c0f3af97 4629 {
592d1631
L
4630 { Bad_Opcode },
4631 { Bad_Opcode },
592a252b 4632 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
4633 },
4634
592a252b 4635 /* PREFIX_VEX_0F382D */
c0f3af97 4636 {
592d1631
L
4637 { Bad_Opcode },
4638 { Bad_Opcode },
592a252b 4639 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
4640 },
4641
592a252b 4642 /* PREFIX_VEX_0F382E */
c0f3af97 4643 {
592d1631
L
4644 { Bad_Opcode },
4645 { Bad_Opcode },
592a252b 4646 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
4647 },
4648
592a252b 4649 /* PREFIX_VEX_0F382F */
c0f3af97 4650 {
592d1631
L
4651 { Bad_Opcode },
4652 { Bad_Opcode },
592a252b 4653 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
4654 },
4655
592a252b 4656 /* PREFIX_VEX_0F3830 */
c0f3af97 4657 {
592d1631
L
4658 { Bad_Opcode },
4659 { Bad_Opcode },
592a252b 4660 { VEX_LEN_TABLE (VEX_LEN_0F3830_P_2) },
c0f3af97
L
4661 },
4662
592a252b 4663 /* PREFIX_VEX_0F3831 */
c0f3af97 4664 {
592d1631
L
4665 { Bad_Opcode },
4666 { Bad_Opcode },
592a252b 4667 { VEX_LEN_TABLE (VEX_LEN_0F3831_P_2) },
c0f3af97
L
4668 },
4669
592a252b 4670 /* PREFIX_VEX_0F3832 */
c0f3af97 4671 {
592d1631
L
4672 { Bad_Opcode },
4673 { Bad_Opcode },
592a252b 4674 { VEX_LEN_TABLE (VEX_LEN_0F3832_P_2) },
c0f3af97
L
4675 },
4676
592a252b 4677 /* PREFIX_VEX_0F3833 */
c0f3af97 4678 {
592d1631
L
4679 { Bad_Opcode },
4680 { Bad_Opcode },
592a252b 4681 { VEX_LEN_TABLE (VEX_LEN_0F3833_P_2) },
c0f3af97
L
4682 },
4683
592a252b 4684 /* PREFIX_VEX_0F3834 */
c0f3af97 4685 {
592d1631
L
4686 { Bad_Opcode },
4687 { Bad_Opcode },
592a252b 4688 { VEX_LEN_TABLE (VEX_LEN_0F3834_P_2) },
c0f3af97
L
4689 },
4690
592a252b 4691 /* PREFIX_VEX_0F3835 */
c0f3af97 4692 {
592d1631
L
4693 { Bad_Opcode },
4694 { Bad_Opcode },
592a252b 4695 { VEX_LEN_TABLE (VEX_LEN_0F3835_P_2) },
c0f3af97
L
4696 },
4697
592a252b 4698 /* PREFIX_VEX_0F3837 */
c0f3af97 4699 {
592d1631
L
4700 { Bad_Opcode },
4701 { Bad_Opcode },
592a252b 4702 { VEX_LEN_TABLE (VEX_LEN_0F3837_P_2) },
c0f3af97
L
4703 },
4704
592a252b 4705 /* PREFIX_VEX_0F3838 */
c0f3af97 4706 {
592d1631
L
4707 { Bad_Opcode },
4708 { Bad_Opcode },
592a252b 4709 { VEX_LEN_TABLE (VEX_LEN_0F3838_P_2) },
c0f3af97
L
4710 },
4711
592a252b 4712 /* PREFIX_VEX_0F3839 */
c0f3af97 4713 {
592d1631
L
4714 { Bad_Opcode },
4715 { Bad_Opcode },
592a252b 4716 { VEX_LEN_TABLE (VEX_LEN_0F3839_P_2) },
c0f3af97
L
4717 },
4718
592a252b 4719 /* PREFIX_VEX_0F383A */
c0f3af97 4720 {
592d1631
L
4721 { Bad_Opcode },
4722 { Bad_Opcode },
592a252b 4723 { VEX_LEN_TABLE (VEX_LEN_0F383A_P_2) },
c0f3af97
L
4724 },
4725
592a252b 4726 /* PREFIX_VEX_0F383B */
c0f3af97 4727 {
592d1631
L
4728 { Bad_Opcode },
4729 { Bad_Opcode },
592a252b 4730 { VEX_LEN_TABLE (VEX_LEN_0F383B_P_2) },
c0f3af97
L
4731 },
4732
592a252b 4733 /* PREFIX_VEX_0F383C */
c0f3af97 4734 {
592d1631
L
4735 { Bad_Opcode },
4736 { Bad_Opcode },
592a252b 4737 { VEX_LEN_TABLE (VEX_LEN_0F383C_P_2) },
c0f3af97
L
4738 },
4739
592a252b 4740 /* PREFIX_VEX_0F383D */
c0f3af97 4741 {
592d1631
L
4742 { Bad_Opcode },
4743 { Bad_Opcode },
592a252b 4744 { VEX_LEN_TABLE (VEX_LEN_0F383D_P_2) },
c0f3af97
L
4745 },
4746
592a252b 4747 /* PREFIX_VEX_0F383E */
c0f3af97 4748 {
592d1631
L
4749 { Bad_Opcode },
4750 { Bad_Opcode },
592a252b 4751 { VEX_LEN_TABLE (VEX_LEN_0F383E_P_2) },
c0f3af97
L
4752 },
4753
592a252b 4754 /* PREFIX_VEX_0F383F */
c0f3af97 4755 {
592d1631
L
4756 { Bad_Opcode },
4757 { Bad_Opcode },
592a252b 4758 { VEX_LEN_TABLE (VEX_LEN_0F383F_P_2) },
c0f3af97
L
4759 },
4760
592a252b 4761 /* PREFIX_VEX_0F3840 */
c0f3af97 4762 {
592d1631
L
4763 { Bad_Opcode },
4764 { Bad_Opcode },
592a252b 4765 { VEX_LEN_TABLE (VEX_LEN_0F3840_P_2) },
c0f3af97
L
4766 },
4767
592a252b 4768 /* PREFIX_VEX_0F3841 */
c0f3af97 4769 {
592d1631
L
4770 { Bad_Opcode },
4771 { Bad_Opcode },
592a252b 4772 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
4773 },
4774
592a252b 4775 /* PREFIX_VEX_0F3896 */
a5ff0eb2 4776 {
592d1631
L
4777 { Bad_Opcode },
4778 { Bad_Opcode },
0bfee649 4779 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4780 },
4781
592a252b 4782 /* PREFIX_VEX_0F3897 */
a5ff0eb2 4783 {
592d1631
L
4784 { Bad_Opcode },
4785 { Bad_Opcode },
0bfee649 4786 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4787 },
4788
592a252b 4789 /* PREFIX_VEX_0F3898 */
a5ff0eb2 4790 {
592d1631
L
4791 { Bad_Opcode },
4792 { Bad_Opcode },
0bfee649 4793 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4794 },
4795
592a252b 4796 /* PREFIX_VEX_0F3899 */
a5ff0eb2 4797 {
592d1631
L
4798 { Bad_Opcode },
4799 { Bad_Opcode },
1c480963 4800 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
4801 },
4802
592a252b 4803 /* PREFIX_VEX_0F389A */
a5ff0eb2 4804 {
592d1631
L
4805 { Bad_Opcode },
4806 { Bad_Opcode },
0bfee649 4807 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0F389B */
c0f3af97 4811 {
592d1631
L
4812 { Bad_Opcode },
4813 { Bad_Opcode },
1c480963 4814 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4815 },
4816
592a252b 4817 /* PREFIX_VEX_0F389C */
c0f3af97 4818 {
592d1631
L
4819 { Bad_Opcode },
4820 { Bad_Opcode },
0bfee649 4821 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4822 },
4823
592a252b 4824 /* PREFIX_VEX_0F389D */
c0f3af97 4825 {
592d1631
L
4826 { Bad_Opcode },
4827 { Bad_Opcode },
1c480963 4828 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4829 },
4830
592a252b 4831 /* PREFIX_VEX_0F389E */
c0f3af97 4832 {
592d1631
L
4833 { Bad_Opcode },
4834 { Bad_Opcode },
0bfee649 4835 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4836 },
4837
592a252b 4838 /* PREFIX_VEX_0F389F */
c0f3af97 4839 {
592d1631
L
4840 { Bad_Opcode },
4841 { Bad_Opcode },
1c480963 4842 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4843 },
4844
592a252b 4845 /* PREFIX_VEX_0F38A6 */
c0f3af97 4846 {
592d1631
L
4847 { Bad_Opcode },
4848 { Bad_Opcode },
0bfee649 4849 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 4850 { Bad_Opcode },
c0f3af97
L
4851 },
4852
592a252b 4853 /* PREFIX_VEX_0F38A7 */
c0f3af97 4854 {
592d1631
L
4855 { Bad_Opcode },
4856 { Bad_Opcode },
0bfee649 4857 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4858 },
4859
592a252b 4860 /* PREFIX_VEX_0F38A8 */
c0f3af97 4861 {
592d1631
L
4862 { Bad_Opcode },
4863 { Bad_Opcode },
0bfee649 4864 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4865 },
4866
592a252b 4867 /* PREFIX_VEX_0F38A9 */
c0f3af97 4868 {
592d1631
L
4869 { Bad_Opcode },
4870 { Bad_Opcode },
1c480963 4871 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4872 },
4873
592a252b 4874 /* PREFIX_VEX_0F38AA */
c0f3af97 4875 {
592d1631
L
4876 { Bad_Opcode },
4877 { Bad_Opcode },
0bfee649 4878 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4879 },
4880
592a252b 4881 /* PREFIX_VEX_0F38AB */
c0f3af97 4882 {
592d1631
L
4883 { Bad_Opcode },
4884 { Bad_Opcode },
1c480963 4885 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4886 },
4887
592a252b 4888 /* PREFIX_VEX_0F38AC */
c0f3af97 4889 {
592d1631
L
4890 { Bad_Opcode },
4891 { Bad_Opcode },
0bfee649 4892 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4893 },
4894
592a252b 4895 /* PREFIX_VEX_0F38AD */
c0f3af97 4896 {
592d1631
L
4897 { Bad_Opcode },
4898 { Bad_Opcode },
1c480963 4899 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4900 },
4901
592a252b 4902 /* PREFIX_VEX_0F38AE */
c0f3af97 4903 {
592d1631
L
4904 { Bad_Opcode },
4905 { Bad_Opcode },
0bfee649 4906 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4907 },
4908
592a252b 4909 /* PREFIX_VEX_0F38AF */
c0f3af97 4910 {
592d1631
L
4911 { Bad_Opcode },
4912 { Bad_Opcode },
1c480963 4913 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4914 },
4915
592a252b 4916 /* PREFIX_VEX_0F38B6 */
c0f3af97 4917 {
592d1631
L
4918 { Bad_Opcode },
4919 { Bad_Opcode },
0bfee649 4920 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4921 },
4922
592a252b 4923 /* PREFIX_VEX_0F38B7 */
c0f3af97 4924 {
592d1631
L
4925 { Bad_Opcode },
4926 { Bad_Opcode },
0bfee649 4927 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4928 },
4929
592a252b 4930 /* PREFIX_VEX_0F38B8 */
c0f3af97 4931 {
592d1631
L
4932 { Bad_Opcode },
4933 { Bad_Opcode },
0bfee649 4934 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4935 },
4936
592a252b 4937 /* PREFIX_VEX_0F38B9 */
c0f3af97 4938 {
592d1631
L
4939 { Bad_Opcode },
4940 { Bad_Opcode },
1c480963 4941 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4942 },
4943
592a252b 4944 /* PREFIX_VEX_0F38BA */
c0f3af97 4945 {
592d1631
L
4946 { Bad_Opcode },
4947 { Bad_Opcode },
0bfee649 4948 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4949 },
4950
592a252b 4951 /* PREFIX_VEX_0F38BB */
c0f3af97 4952 {
592d1631
L
4953 { Bad_Opcode },
4954 { Bad_Opcode },
1c480963 4955 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4956 },
4957
592a252b 4958 /* PREFIX_VEX_0F38BC */
c0f3af97 4959 {
592d1631
L
4960 { Bad_Opcode },
4961 { Bad_Opcode },
0bfee649 4962 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4963 },
4964
592a252b 4965 /* PREFIX_VEX_0F38BD */
c0f3af97 4966 {
592d1631
L
4967 { Bad_Opcode },
4968 { Bad_Opcode },
1c480963 4969 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4970 },
4971
592a252b 4972 /* PREFIX_VEX_0F38BE */
c0f3af97 4973 {
592d1631
L
4974 { Bad_Opcode },
4975 { Bad_Opcode },
0bfee649 4976 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4977 },
4978
592a252b 4979 /* PREFIX_VEX_0F38BF */
c0f3af97 4980 {
592d1631
L
4981 { Bad_Opcode },
4982 { Bad_Opcode },
1c480963 4983 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4984 },
4985
592a252b 4986 /* PREFIX_VEX_0F38DB */
c0f3af97 4987 {
592d1631
L
4988 { Bad_Opcode },
4989 { Bad_Opcode },
592a252b 4990 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
4991 },
4992
592a252b 4993 /* PREFIX_VEX_0F38DC */
c0f3af97 4994 {
592d1631
L
4995 { Bad_Opcode },
4996 { Bad_Opcode },
592a252b 4997 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
4998 },
4999
592a252b 5000 /* PREFIX_VEX_0F38DD */
c0f3af97 5001 {
592d1631
L
5002 { Bad_Opcode },
5003 { Bad_Opcode },
592a252b 5004 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
5005 },
5006
592a252b 5007 /* PREFIX_VEX_0F38DE */
c0f3af97 5008 {
592d1631
L
5009 { Bad_Opcode },
5010 { Bad_Opcode },
592a252b 5011 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
5012 },
5013
592a252b 5014 /* PREFIX_VEX_0F38DF */
c0f3af97 5015 {
592d1631
L
5016 { Bad_Opcode },
5017 { Bad_Opcode },
592a252b 5018 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
5019 },
5020
f12dc422
L
5021 /* PREFIX_VEX_0F38F2 */
5022 {
5023 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5024 },
5025
5026 /* PREFIX_VEX_0F38F3_REG_1 */
5027 {
5028 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5029 },
5030
5031 /* PREFIX_VEX_0F38F3_REG_2 */
5032 {
5033 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5034 },
5035
5036 /* PREFIX_VEX_0F38F3_REG_3 */
5037 {
5038 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5039 },
5040
5041 /* PREFIX_VEX_0F38F7 */
5042 {
5043 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
5044 },
5045
592a252b 5046 /* PREFIX_VEX_0F3A04 */
c0f3af97 5047 {
592d1631
L
5048 { Bad_Opcode },
5049 { Bad_Opcode },
592a252b 5050 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
5051 },
5052
592a252b 5053 /* PREFIX_VEX_0F3A05 */
c0f3af97 5054 {
592d1631
L
5055 { Bad_Opcode },
5056 { Bad_Opcode },
592a252b 5057 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
5058 },
5059
592a252b 5060 /* PREFIX_VEX_0F3A06 */
c0f3af97 5061 {
592d1631
L
5062 { Bad_Opcode },
5063 { Bad_Opcode },
592a252b 5064 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
5065 },
5066
592a252b 5067 /* PREFIX_VEX_0F3A08 */
c0f3af97 5068 {
592d1631
L
5069 { Bad_Opcode },
5070 { Bad_Opcode },
592a252b 5071 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
5072 },
5073
592a252b 5074 /* PREFIX_VEX_0F3A09 */
c0f3af97 5075 {
592d1631
L
5076 { Bad_Opcode },
5077 { Bad_Opcode },
592a252b 5078 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
5079 },
5080
592a252b 5081 /* PREFIX_VEX_0F3A0A */
c0f3af97 5082 {
592d1631
L
5083 { Bad_Opcode },
5084 { Bad_Opcode },
592a252b 5085 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
5086 },
5087
592a252b 5088 /* PREFIX_VEX_0F3A0B */
0bfee649 5089 {
592d1631
L
5090 { Bad_Opcode },
5091 { Bad_Opcode },
592a252b 5092 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
5093 },
5094
592a252b 5095 /* PREFIX_VEX_0F3A0C */
0bfee649 5096 {
592d1631
L
5097 { Bad_Opcode },
5098 { Bad_Opcode },
592a252b 5099 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
5100 },
5101
592a252b 5102 /* PREFIX_VEX_0F3A0D */
0bfee649 5103 {
592d1631
L
5104 { Bad_Opcode },
5105 { Bad_Opcode },
592a252b 5106 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
5107 },
5108
592a252b 5109 /* PREFIX_VEX_0F3A0E */
0bfee649 5110 {
592d1631
L
5111 { Bad_Opcode },
5112 { Bad_Opcode },
592a252b 5113 { VEX_LEN_TABLE (VEX_LEN_0F3A0E_P_2) },
0bfee649
L
5114 },
5115
592a252b 5116 /* PREFIX_VEX_0F3A0F */
0bfee649 5117 {
592d1631
L
5118 { Bad_Opcode },
5119 { Bad_Opcode },
592a252b 5120 { VEX_LEN_TABLE (VEX_LEN_0F3A0F_P_2) },
0bfee649
L
5121 },
5122
592a252b 5123 /* PREFIX_VEX_0F3A14 */
0bfee649 5124 {
592d1631
L
5125 { Bad_Opcode },
5126 { Bad_Opcode },
592a252b 5127 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
5128 },
5129
592a252b 5130 /* PREFIX_VEX_0F3A15 */
0bfee649 5131 {
592d1631
L
5132 { Bad_Opcode },
5133 { Bad_Opcode },
592a252b 5134 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
5135 },
5136
592a252b 5137 /* PREFIX_VEX_0F3A16 */
c0f3af97 5138 {
592d1631
L
5139 { Bad_Opcode },
5140 { Bad_Opcode },
592a252b 5141 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
5142 },
5143
592a252b 5144 /* PREFIX_VEX_0F3A17 */
c0f3af97 5145 {
592d1631
L
5146 { Bad_Opcode },
5147 { Bad_Opcode },
592a252b 5148 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
5149 },
5150
592a252b 5151 /* PREFIX_VEX_0F3A18 */
c0f3af97 5152 {
592d1631
L
5153 { Bad_Opcode },
5154 { Bad_Opcode },
592a252b 5155 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
5156 },
5157
592a252b 5158 /* PREFIX_VEX_0F3A19 */
c0f3af97 5159 {
592d1631
L
5160 { Bad_Opcode },
5161 { Bad_Opcode },
592a252b 5162 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
5163 },
5164
592a252b 5165 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
5166 {
5167 { Bad_Opcode },
5168 { Bad_Opcode },
5169 { "vcvtps2ph", { EXxmmq, XM, Ib } },
5170 },
5171
592a252b 5172 /* PREFIX_VEX_0F3A20 */
c0f3af97 5173 {
592d1631
L
5174 { Bad_Opcode },
5175 { Bad_Opcode },
592a252b 5176 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
5177 },
5178
592a252b 5179 /* PREFIX_VEX_0F3A21 */
c0f3af97 5180 {
592d1631
L
5181 { Bad_Opcode },
5182 { Bad_Opcode },
592a252b 5183 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
5184 },
5185
592a252b 5186 /* PREFIX_VEX_0F3A22 */
0bfee649 5187 {
592d1631
L
5188 { Bad_Opcode },
5189 { Bad_Opcode },
592a252b 5190 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
5191 },
5192
592a252b 5193 /* PREFIX_VEX_0F3A40 */
c0f3af97 5194 {
592d1631
L
5195 { Bad_Opcode },
5196 { Bad_Opcode },
592a252b 5197 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
5198 },
5199
592a252b 5200 /* PREFIX_VEX_0F3A41 */
c0f3af97 5201 {
592d1631
L
5202 { Bad_Opcode },
5203 { Bad_Opcode },
592a252b 5204 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
5205 },
5206
592a252b 5207 /* PREFIX_VEX_0F3A42 */
c0f3af97 5208 {
592d1631
L
5209 { Bad_Opcode },
5210 { Bad_Opcode },
592a252b 5211 { VEX_LEN_TABLE (VEX_LEN_0F3A42_P_2) },
c0f3af97
L
5212 },
5213
592a252b 5214 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 5215 {
592d1631
L
5216 { Bad_Opcode },
5217 { Bad_Opcode },
592a252b 5218 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
5219 },
5220
592a252b 5221 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
5222 {
5223 { Bad_Opcode },
5224 { Bad_Opcode },
592a252b 5225 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
5226 },
5227
592a252b 5228 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
5229 {
5230 { Bad_Opcode },
5231 { Bad_Opcode },
592a252b 5232 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
5233 },
5234
592a252b 5235 /* PREFIX_VEX_0F3A4A */
c0f3af97 5236 {
592d1631
L
5237 { Bad_Opcode },
5238 { Bad_Opcode },
592a252b 5239 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
5240 },
5241
592a252b 5242 /* PREFIX_VEX_0F3A4B */
c0f3af97 5243 {
592d1631
L
5244 { Bad_Opcode },
5245 { Bad_Opcode },
592a252b 5246 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
5247 },
5248
592a252b 5249 /* PREFIX_VEX_0F3A4C */
c0f3af97 5250 {
592d1631
L
5251 { Bad_Opcode },
5252 { Bad_Opcode },
592a252b 5253 { VEX_LEN_TABLE (VEX_LEN_0F3A4C_P_2) },
c0f3af97
L
5254 },
5255
592a252b 5256 /* PREFIX_VEX_0F3A5C */
922d8de8 5257 {
592d1631
L
5258 { Bad_Opcode },
5259 { Bad_Opcode },
206c2556 5260 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5261 },
5262
592a252b 5263 /* PREFIX_VEX_0F3A5D */
922d8de8 5264 {
592d1631
L
5265 { Bad_Opcode },
5266 { Bad_Opcode },
206c2556 5267 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5268 },
5269
592a252b 5270 /* PREFIX_VEX_0F3A5E */
922d8de8 5271 {
592d1631
L
5272 { Bad_Opcode },
5273 { Bad_Opcode },
206c2556 5274 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5275 },
5276
592a252b 5277 /* PREFIX_VEX_0F3A5F */
922d8de8 5278 {
592d1631
L
5279 { Bad_Opcode },
5280 { Bad_Opcode },
206c2556 5281 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5282 },
5283
592a252b 5284 /* PREFIX_VEX_0F3A60 */
c0f3af97 5285 {
592d1631
L
5286 { Bad_Opcode },
5287 { Bad_Opcode },
592a252b 5288 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 5289 { Bad_Opcode },
c0f3af97
L
5290 },
5291
592a252b 5292 /* PREFIX_VEX_0F3A61 */
c0f3af97 5293 {
592d1631
L
5294 { Bad_Opcode },
5295 { Bad_Opcode },
592a252b 5296 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
5297 },
5298
592a252b 5299 /* PREFIX_VEX_0F3A62 */
c0f3af97 5300 {
592d1631
L
5301 { Bad_Opcode },
5302 { Bad_Opcode },
592a252b 5303 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
5304 },
5305
592a252b 5306 /* PREFIX_VEX_0F3A63 */
c0f3af97 5307 {
592d1631
L
5308 { Bad_Opcode },
5309 { Bad_Opcode },
592a252b 5310 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 5311 },
a5ff0eb2 5312
592a252b 5313 /* PREFIX_VEX_0F3A68 */
922d8de8 5314 {
592d1631
L
5315 { Bad_Opcode },
5316 { Bad_Opcode },
206c2556 5317 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5318 },
5319
592a252b 5320 /* PREFIX_VEX_0F3A69 */
922d8de8 5321 {
592d1631
L
5322 { Bad_Opcode },
5323 { Bad_Opcode },
206c2556 5324 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5325 },
5326
592a252b 5327 /* PREFIX_VEX_0F3A6A */
922d8de8 5328 {
592d1631
L
5329 { Bad_Opcode },
5330 { Bad_Opcode },
592a252b 5331 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
5332 },
5333
592a252b 5334 /* PREFIX_VEX_0F3A6B */
922d8de8 5335 {
592d1631
L
5336 { Bad_Opcode },
5337 { Bad_Opcode },
592a252b 5338 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
5339 },
5340
592a252b 5341 /* PREFIX_VEX_0F3A6C */
922d8de8 5342 {
592d1631
L
5343 { Bad_Opcode },
5344 { Bad_Opcode },
206c2556 5345 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5346 },
5347
592a252b 5348 /* PREFIX_VEX_0F3A6D */
922d8de8 5349 {
592d1631
L
5350 { Bad_Opcode },
5351 { Bad_Opcode },
206c2556 5352 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5353 },
5354
592a252b 5355 /* PREFIX_VEX_0F3A6E */
922d8de8 5356 {
592d1631
L
5357 { Bad_Opcode },
5358 { Bad_Opcode },
592a252b 5359 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
5360 },
5361
592a252b 5362 /* PREFIX_VEX_0F3A6F */
922d8de8 5363 {
592d1631
L
5364 { Bad_Opcode },
5365 { Bad_Opcode },
592a252b 5366 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
5367 },
5368
592a252b 5369 /* PREFIX_VEX_0F3A78 */
922d8de8 5370 {
592d1631
L
5371 { Bad_Opcode },
5372 { Bad_Opcode },
206c2556 5373 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5374 },
5375
592a252b 5376 /* PREFIX_VEX_0F3A79 */
922d8de8 5377 {
592d1631
L
5378 { Bad_Opcode },
5379 { Bad_Opcode },
206c2556 5380 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5381 },
5382
592a252b 5383 /* PREFIX_VEX_0F3A7A */
922d8de8 5384 {
592d1631
L
5385 { Bad_Opcode },
5386 { Bad_Opcode },
592a252b 5387 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
5388 },
5389
592a252b 5390 /* PREFIX_VEX_0F3A7B */
922d8de8 5391 {
592d1631
L
5392 { Bad_Opcode },
5393 { Bad_Opcode },
592a252b 5394 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
5395 },
5396
592a252b 5397 /* PREFIX_VEX_0F3A7C */
922d8de8 5398 {
592d1631
L
5399 { Bad_Opcode },
5400 { Bad_Opcode },
206c2556 5401 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 5402 { Bad_Opcode },
922d8de8
DR
5403 },
5404
592a252b 5405 /* PREFIX_VEX_0F3A7D */
922d8de8 5406 {
592d1631
L
5407 { Bad_Opcode },
5408 { Bad_Opcode },
206c2556 5409 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5410 },
5411
592a252b 5412 /* PREFIX_VEX_0F3A7E */
922d8de8 5413 {
592d1631
L
5414 { Bad_Opcode },
5415 { Bad_Opcode },
592a252b 5416 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
5417 },
5418
592a252b 5419 /* PREFIX_VEX_0F3A7F */
922d8de8 5420 {
592d1631
L
5421 { Bad_Opcode },
5422 { Bad_Opcode },
592a252b 5423 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
5424 },
5425
592a252b 5426 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 5427 {
592d1631
L
5428 { Bad_Opcode },
5429 { Bad_Opcode },
592a252b 5430 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 5431 },
c0f3af97
L
5432};
5433
5434static const struct dis386 x86_64_table[][2] = {
5435 /* X86_64_06 */
5436 {
d9e3625e 5437 { "pushP", { es } },
c0f3af97
L
5438 },
5439
5440 /* X86_64_07 */
5441 {
d9e3625e 5442 { "popP", { es } },
c0f3af97
L
5443 },
5444
5445 /* X86_64_0D */
5446 {
d9e3625e 5447 { "pushP", { cs } },
c0f3af97
L
5448 },
5449
5450 /* X86_64_16 */
5451 {
d9e3625e 5452 { "pushP", { ss } },
c0f3af97
L
5453 },
5454
5455 /* X86_64_17 */
5456 {
d9e3625e 5457 { "popP", { ss } },
c0f3af97
L
5458 },
5459
5460 /* X86_64_1E */
5461 {
d9e3625e 5462 { "pushP", { ds } },
c0f3af97
L
5463 },
5464
5465 /* X86_64_1F */
5466 {
d9e3625e 5467 { "popP", { ds } },
c0f3af97
L
5468 },
5469
5470 /* X86_64_27 */
5471 {
5472 { "daa", { XX } },
c0f3af97
L
5473 },
5474
5475 /* X86_64_2F */
5476 {
5477 { "das", { XX } },
c0f3af97
L
5478 },
5479
5480 /* X86_64_37 */
5481 {
5482 { "aaa", { XX } },
c0f3af97
L
5483 },
5484
5485 /* X86_64_3F */
5486 {
5487 { "aas", { XX } },
c0f3af97
L
5488 },
5489
5490 /* X86_64_60 */
5491 {
d9e3625e 5492 { "pushaP", { XX } },
c0f3af97
L
5493 },
5494
5495 /* X86_64_61 */
5496 {
d9e3625e 5497 { "popaP", { XX } },
c0f3af97
L
5498 },
5499
5500 /* X86_64_62 */
5501 {
5502 { MOD_TABLE (MOD_62_32BIT) },
c0f3af97
L
5503 },
5504
5505 /* X86_64_63 */
5506 {
5507 { "arpl", { Ew, Gw } },
5508 { "movs{lq|xd}", { Gv, Ed } },
5509 },
5510
5511 /* X86_64_6D */
5512 {
5513 { "ins{R|}", { Yzr, indirDX } },
5514 { "ins{G|}", { Yzr, indirDX } },
5515 },
5516
5517 /* X86_64_6F */
5518 {
5519 { "outs{R|}", { indirDXr, Xz } },
5520 { "outs{G|}", { indirDXr, Xz } },
5521 },
5522
5523 /* X86_64_9A */
5524 {
5525 { "Jcall{T|}", { Ap } },
c0f3af97
L
5526 },
5527
5528 /* X86_64_C4 */
5529 {
5530 { MOD_TABLE (MOD_C4_32BIT) },
5531 { VEX_C4_TABLE (VEX_0F) },
5532 },
5533
5534 /* X86_64_C5 */
5535 {
5536 { MOD_TABLE (MOD_C5_32BIT) },
5537 { VEX_C5_TABLE (VEX_0F) },
5538 },
5539
5540 /* X86_64_CE */
5541 {
5542 { "into", { XX } },
c0f3af97
L
5543 },
5544
5545 /* X86_64_D4 */
5546 {
5547 { "aam", { sIb } },
c0f3af97
L
5548 },
5549
5550 /* X86_64_D5 */
5551 {
5552 { "aad", { sIb } },
c0f3af97
L
5553 },
5554
5555 /* X86_64_EA */
5556 {
5557 { "Jjmp{T|}", { Ap } },
c0f3af97
L
5558 },
5559
5560 /* X86_64_0F01_REG_0 */
5561 {
5562 { "sgdt{Q|IQ}", { M } },
5563 { "sgdt", { M } },
5564 },
5565
5566 /* X86_64_0F01_REG_1 */
5567 {
5568 { "sidt{Q|IQ}", { M } },
5569 { "sidt", { M } },
5570 },
5571
5572 /* X86_64_0F01_REG_2 */
5573 {
5574 { "lgdt{Q|Q}", { M } },
5575 { "lgdt", { M } },
5576 },
5577
5578 /* X86_64_0F01_REG_3 */
5579 {
5580 { "lidt{Q|Q}", { M } },
5581 { "lidt", { M } },
5582 },
5583};
5584
5585static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5586
5587 /* THREE_BYTE_0F38 */
c0f3af97
L
5588 {
5589 /* 00 */
c1e679ec
DR
5590 { "pshufb", { MX, EM } },
5591 { "phaddw", { MX, EM } },
5592 { "phaddd", { MX, EM } },
5593 { "phaddsw", { MX, EM } },
5594 { "pmaddubsw", { MX, EM } },
5595 { "phsubw", { MX, EM } },
5596 { "phsubd", { MX, EM } },
5597 { "phsubsw", { MX, EM } },
c0f3af97 5598 /* 08 */
c1e679ec
DR
5599 { "psignb", { MX, EM } },
5600 { "psignw", { MX, EM } },
5601 { "psignd", { MX, EM } },
5602 { "pmulhrsw", { MX, EM } },
592d1631
L
5603 { Bad_Opcode },
5604 { Bad_Opcode },
5605 { Bad_Opcode },
5606 { Bad_Opcode },
f88c9eb0
SP
5607 /* 10 */
5608 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
5609 { Bad_Opcode },
5610 { Bad_Opcode },
5611 { Bad_Opcode },
f88c9eb0
SP
5612 { PREFIX_TABLE (PREFIX_0F3814) },
5613 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 5614 { Bad_Opcode },
f88c9eb0
SP
5615 { PREFIX_TABLE (PREFIX_0F3817) },
5616 /* 18 */
592d1631
L
5617 { Bad_Opcode },
5618 { Bad_Opcode },
5619 { Bad_Opcode },
5620 { Bad_Opcode },
f88c9eb0
SP
5621 { "pabsb", { MX, EM } },
5622 { "pabsw", { MX, EM } },
5623 { "pabsd", { MX, EM } },
592d1631 5624 { Bad_Opcode },
f88c9eb0
SP
5625 /* 20 */
5626 { PREFIX_TABLE (PREFIX_0F3820) },
5627 { PREFIX_TABLE (PREFIX_0F3821) },
5628 { PREFIX_TABLE (PREFIX_0F3822) },
5629 { PREFIX_TABLE (PREFIX_0F3823) },
5630 { PREFIX_TABLE (PREFIX_0F3824) },
5631 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
5632 { Bad_Opcode },
5633 { Bad_Opcode },
f88c9eb0
SP
5634 /* 28 */
5635 { PREFIX_TABLE (PREFIX_0F3828) },
5636 { PREFIX_TABLE (PREFIX_0F3829) },
5637 { PREFIX_TABLE (PREFIX_0F382A) },
5638 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
5639 { Bad_Opcode },
5640 { Bad_Opcode },
5641 { Bad_Opcode },
5642 { Bad_Opcode },
f88c9eb0
SP
5643 /* 30 */
5644 { PREFIX_TABLE (PREFIX_0F3830) },
5645 { PREFIX_TABLE (PREFIX_0F3831) },
5646 { PREFIX_TABLE (PREFIX_0F3832) },
5647 { PREFIX_TABLE (PREFIX_0F3833) },
5648 { PREFIX_TABLE (PREFIX_0F3834) },
5649 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 5650 { Bad_Opcode },
f88c9eb0
SP
5651 { PREFIX_TABLE (PREFIX_0F3837) },
5652 /* 38 */
5653 { PREFIX_TABLE (PREFIX_0F3838) },
5654 { PREFIX_TABLE (PREFIX_0F3839) },
5655 { PREFIX_TABLE (PREFIX_0F383A) },
5656 { PREFIX_TABLE (PREFIX_0F383B) },
5657 { PREFIX_TABLE (PREFIX_0F383C) },
5658 { PREFIX_TABLE (PREFIX_0F383D) },
5659 { PREFIX_TABLE (PREFIX_0F383E) },
5660 { PREFIX_TABLE (PREFIX_0F383F) },
5661 /* 40 */
5662 { PREFIX_TABLE (PREFIX_0F3840) },
5663 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
5664 { Bad_Opcode },
5665 { Bad_Opcode },
5666 { Bad_Opcode },
5667 { Bad_Opcode },
5668 { Bad_Opcode },
5669 { Bad_Opcode },
f88c9eb0 5670 /* 48 */
592d1631
L
5671 { Bad_Opcode },
5672 { Bad_Opcode },
5673 { Bad_Opcode },
5674 { Bad_Opcode },
5675 { Bad_Opcode },
5676 { Bad_Opcode },
5677 { Bad_Opcode },
5678 { Bad_Opcode },
f88c9eb0 5679 /* 50 */
592d1631
L
5680 { Bad_Opcode },
5681 { Bad_Opcode },
5682 { Bad_Opcode },
5683 { Bad_Opcode },
5684 { Bad_Opcode },
5685 { Bad_Opcode },
5686 { Bad_Opcode },
5687 { Bad_Opcode },
f88c9eb0 5688 /* 58 */
592d1631
L
5689 { Bad_Opcode },
5690 { Bad_Opcode },
5691 { Bad_Opcode },
5692 { Bad_Opcode },
5693 { Bad_Opcode },
5694 { Bad_Opcode },
5695 { Bad_Opcode },
5696 { Bad_Opcode },
f88c9eb0 5697 /* 60 */
592d1631
L
5698 { Bad_Opcode },
5699 { Bad_Opcode },
5700 { Bad_Opcode },
5701 { Bad_Opcode },
5702 { Bad_Opcode },
5703 { Bad_Opcode },
5704 { Bad_Opcode },
5705 { Bad_Opcode },
f88c9eb0 5706 /* 68 */
592d1631
L
5707 { Bad_Opcode },
5708 { Bad_Opcode },
5709 { Bad_Opcode },
5710 { Bad_Opcode },
5711 { Bad_Opcode },
5712 { Bad_Opcode },
5713 { Bad_Opcode },
5714 { Bad_Opcode },
f88c9eb0 5715 /* 70 */
592d1631
L
5716 { Bad_Opcode },
5717 { Bad_Opcode },
5718 { Bad_Opcode },
5719 { Bad_Opcode },
5720 { Bad_Opcode },
5721 { Bad_Opcode },
5722 { Bad_Opcode },
5723 { Bad_Opcode },
f88c9eb0 5724 /* 78 */
592d1631
L
5725 { Bad_Opcode },
5726 { Bad_Opcode },
5727 { Bad_Opcode },
5728 { Bad_Opcode },
5729 { Bad_Opcode },
5730 { Bad_Opcode },
5731 { Bad_Opcode },
5732 { Bad_Opcode },
f88c9eb0
SP
5733 /* 80 */
5734 { PREFIX_TABLE (PREFIX_0F3880) },
5735 { PREFIX_TABLE (PREFIX_0F3881) },
592d1631
L
5736 { Bad_Opcode },
5737 { Bad_Opcode },
5738 { Bad_Opcode },
5739 { Bad_Opcode },
5740 { Bad_Opcode },
5741 { Bad_Opcode },
f88c9eb0 5742 /* 88 */
592d1631
L
5743 { Bad_Opcode },
5744 { Bad_Opcode },
5745 { Bad_Opcode },
5746 { Bad_Opcode },
5747 { Bad_Opcode },
5748 { Bad_Opcode },
5749 { Bad_Opcode },
5750 { Bad_Opcode },
f88c9eb0 5751 /* 90 */
592d1631
L
5752 { Bad_Opcode },
5753 { Bad_Opcode },
5754 { Bad_Opcode },
5755 { Bad_Opcode },
5756 { Bad_Opcode },
5757 { Bad_Opcode },
5758 { Bad_Opcode },
5759 { Bad_Opcode },
f88c9eb0 5760 /* 98 */
592d1631
L
5761 { Bad_Opcode },
5762 { Bad_Opcode },
5763 { Bad_Opcode },
5764 { Bad_Opcode },
5765 { Bad_Opcode },
5766 { Bad_Opcode },
5767 { Bad_Opcode },
5768 { Bad_Opcode },
f88c9eb0 5769 /* a0 */
592d1631
L
5770 { Bad_Opcode },
5771 { Bad_Opcode },
5772 { Bad_Opcode },
5773 { Bad_Opcode },
5774 { Bad_Opcode },
5775 { Bad_Opcode },
5776 { Bad_Opcode },
5777 { Bad_Opcode },
f88c9eb0 5778 /* a8 */
592d1631
L
5779 { Bad_Opcode },
5780 { Bad_Opcode },
5781 { Bad_Opcode },
5782 { Bad_Opcode },
5783 { Bad_Opcode },
5784 { Bad_Opcode },
5785 { Bad_Opcode },
5786 { Bad_Opcode },
f88c9eb0 5787 /* b0 */
592d1631
L
5788 { Bad_Opcode },
5789 { Bad_Opcode },
5790 { Bad_Opcode },
5791 { Bad_Opcode },
5792 { Bad_Opcode },
5793 { Bad_Opcode },
5794 { Bad_Opcode },
5795 { Bad_Opcode },
f88c9eb0 5796 /* b8 */
592d1631
L
5797 { Bad_Opcode },
5798 { Bad_Opcode },
5799 { Bad_Opcode },
5800 { Bad_Opcode },
5801 { Bad_Opcode },
5802 { Bad_Opcode },
5803 { Bad_Opcode },
5804 { Bad_Opcode },
f88c9eb0 5805 /* c0 */
592d1631
L
5806 { Bad_Opcode },
5807 { Bad_Opcode },
5808 { Bad_Opcode },
5809 { Bad_Opcode },
5810 { Bad_Opcode },
5811 { Bad_Opcode },
5812 { Bad_Opcode },
5813 { Bad_Opcode },
f88c9eb0 5814 /* c8 */
592d1631
L
5815 { Bad_Opcode },
5816 { Bad_Opcode },
5817 { Bad_Opcode },
5818 { Bad_Opcode },
5819 { Bad_Opcode },
5820 { Bad_Opcode },
5821 { Bad_Opcode },
5822 { Bad_Opcode },
f88c9eb0 5823 /* d0 */
592d1631
L
5824 { Bad_Opcode },
5825 { Bad_Opcode },
5826 { Bad_Opcode },
5827 { Bad_Opcode },
5828 { Bad_Opcode },
5829 { Bad_Opcode },
5830 { Bad_Opcode },
5831 { Bad_Opcode },
f88c9eb0 5832 /* d8 */
592d1631
L
5833 { Bad_Opcode },
5834 { Bad_Opcode },
5835 { Bad_Opcode },
f88c9eb0
SP
5836 { PREFIX_TABLE (PREFIX_0F38DB) },
5837 { PREFIX_TABLE (PREFIX_0F38DC) },
5838 { PREFIX_TABLE (PREFIX_0F38DD) },
5839 { PREFIX_TABLE (PREFIX_0F38DE) },
5840 { PREFIX_TABLE (PREFIX_0F38DF) },
5841 /* e0 */
592d1631
L
5842 { Bad_Opcode },
5843 { Bad_Opcode },
5844 { Bad_Opcode },
5845 { Bad_Opcode },
5846 { Bad_Opcode },
5847 { Bad_Opcode },
5848 { Bad_Opcode },
5849 { Bad_Opcode },
f88c9eb0 5850 /* e8 */
592d1631
L
5851 { Bad_Opcode },
5852 { Bad_Opcode },
5853 { Bad_Opcode },
5854 { Bad_Opcode },
5855 { Bad_Opcode },
5856 { Bad_Opcode },
5857 { Bad_Opcode },
5858 { Bad_Opcode },
f88c9eb0
SP
5859 /* f0 */
5860 { PREFIX_TABLE (PREFIX_0F38F0) },
5861 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
5862 { Bad_Opcode },
5863 { Bad_Opcode },
5864 { Bad_Opcode },
5865 { Bad_Opcode },
5866 { Bad_Opcode },
5867 { Bad_Opcode },
f88c9eb0 5868 /* f8 */
592d1631
L
5869 { Bad_Opcode },
5870 { Bad_Opcode },
5871 { Bad_Opcode },
5872 { Bad_Opcode },
5873 { Bad_Opcode },
5874 { Bad_Opcode },
5875 { Bad_Opcode },
5876 { Bad_Opcode },
f88c9eb0
SP
5877 },
5878 /* THREE_BYTE_0F3A */
5879 {
5880 /* 00 */
592d1631
L
5881 { Bad_Opcode },
5882 { Bad_Opcode },
5883 { Bad_Opcode },
5884 { Bad_Opcode },
5885 { Bad_Opcode },
5886 { Bad_Opcode },
5887 { Bad_Opcode },
5888 { Bad_Opcode },
f88c9eb0
SP
5889 /* 08 */
5890 { PREFIX_TABLE (PREFIX_0F3A08) },
5891 { PREFIX_TABLE (PREFIX_0F3A09) },
5892 { PREFIX_TABLE (PREFIX_0F3A0A) },
5893 { PREFIX_TABLE (PREFIX_0F3A0B) },
5894 { PREFIX_TABLE (PREFIX_0F3A0C) },
5895 { PREFIX_TABLE (PREFIX_0F3A0D) },
5896 { PREFIX_TABLE (PREFIX_0F3A0E) },
5897 { "palignr", { MX, EM, Ib } },
5898 /* 10 */
592d1631
L
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { Bad_Opcode },
5902 { Bad_Opcode },
f88c9eb0
SP
5903 { PREFIX_TABLE (PREFIX_0F3A14) },
5904 { PREFIX_TABLE (PREFIX_0F3A15) },
5905 { PREFIX_TABLE (PREFIX_0F3A16) },
5906 { PREFIX_TABLE (PREFIX_0F3A17) },
5907 /* 18 */
592d1631
L
5908 { Bad_Opcode },
5909 { Bad_Opcode },
5910 { Bad_Opcode },
5911 { Bad_Opcode },
5912 { Bad_Opcode },
5913 { Bad_Opcode },
5914 { Bad_Opcode },
5915 { Bad_Opcode },
f88c9eb0
SP
5916 /* 20 */
5917 { PREFIX_TABLE (PREFIX_0F3A20) },
5918 { PREFIX_TABLE (PREFIX_0F3A21) },
5919 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
5920 { Bad_Opcode },
5921 { Bad_Opcode },
5922 { Bad_Opcode },
5923 { Bad_Opcode },
5924 { Bad_Opcode },
f88c9eb0 5925 /* 28 */
592d1631
L
5926 { Bad_Opcode },
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { Bad_Opcode },
5933 { Bad_Opcode },
f88c9eb0 5934 /* 30 */
592d1631
L
5935 { Bad_Opcode },
5936 { Bad_Opcode },
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { Bad_Opcode },
5942 { Bad_Opcode },
f88c9eb0 5943 /* 38 */
592d1631
L
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { Bad_Opcode },
5947 { Bad_Opcode },
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { Bad_Opcode },
5951 { Bad_Opcode },
f88c9eb0
SP
5952 /* 40 */
5953 { PREFIX_TABLE (PREFIX_0F3A40) },
5954 { PREFIX_TABLE (PREFIX_0F3A41) },
5955 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 5956 { Bad_Opcode },
f88c9eb0 5957 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
5958 { Bad_Opcode },
5959 { Bad_Opcode },
5960 { Bad_Opcode },
f88c9eb0 5961 /* 48 */
592d1631
L
5962 { Bad_Opcode },
5963 { Bad_Opcode },
5964 { Bad_Opcode },
5965 { Bad_Opcode },
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { Bad_Opcode },
f88c9eb0 5970 /* 50 */
592d1631
L
5971 { Bad_Opcode },
5972 { Bad_Opcode },
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { Bad_Opcode },
5976 { Bad_Opcode },
5977 { Bad_Opcode },
5978 { Bad_Opcode },
f88c9eb0 5979 /* 58 */
592d1631
L
5980 { Bad_Opcode },
5981 { Bad_Opcode },
5982 { Bad_Opcode },
5983 { Bad_Opcode },
5984 { Bad_Opcode },
5985 { Bad_Opcode },
5986 { Bad_Opcode },
5987 { Bad_Opcode },
f88c9eb0
SP
5988 /* 60 */
5989 { PREFIX_TABLE (PREFIX_0F3A60) },
5990 { PREFIX_TABLE (PREFIX_0F3A61) },
5991 { PREFIX_TABLE (PREFIX_0F3A62) },
5992 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
5993 { Bad_Opcode },
5994 { Bad_Opcode },
5995 { Bad_Opcode },
5996 { Bad_Opcode },
f88c9eb0 5997 /* 68 */
592d1631
L
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6000 { Bad_Opcode },
6001 { Bad_Opcode },
6002 { Bad_Opcode },
6003 { Bad_Opcode },
6004 { Bad_Opcode },
6005 { Bad_Opcode },
f88c9eb0 6006 /* 70 */
592d1631
L
6007 { Bad_Opcode },
6008 { Bad_Opcode },
6009 { Bad_Opcode },
6010 { Bad_Opcode },
6011 { Bad_Opcode },
6012 { Bad_Opcode },
6013 { Bad_Opcode },
6014 { Bad_Opcode },
f88c9eb0 6015 /* 78 */
592d1631
L
6016 { Bad_Opcode },
6017 { Bad_Opcode },
6018 { Bad_Opcode },
6019 { Bad_Opcode },
6020 { Bad_Opcode },
6021 { Bad_Opcode },
6022 { Bad_Opcode },
6023 { Bad_Opcode },
f88c9eb0 6024 /* 80 */
592d1631
L
6025 { Bad_Opcode },
6026 { Bad_Opcode },
6027 { Bad_Opcode },
6028 { Bad_Opcode },
6029 { Bad_Opcode },
6030 { Bad_Opcode },
6031 { Bad_Opcode },
6032 { Bad_Opcode },
f88c9eb0 6033 /* 88 */
592d1631
L
6034 { Bad_Opcode },
6035 { Bad_Opcode },
6036 { Bad_Opcode },
6037 { Bad_Opcode },
6038 { Bad_Opcode },
6039 { Bad_Opcode },
6040 { Bad_Opcode },
6041 { Bad_Opcode },
f88c9eb0 6042 /* 90 */
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
6045 { Bad_Opcode },
6046 { Bad_Opcode },
6047 { Bad_Opcode },
6048 { Bad_Opcode },
6049 { Bad_Opcode },
6050 { Bad_Opcode },
f88c9eb0 6051 /* 98 */
592d1631
L
6052 { Bad_Opcode },
6053 { Bad_Opcode },
6054 { Bad_Opcode },
6055 { Bad_Opcode },
6056 { Bad_Opcode },
6057 { Bad_Opcode },
6058 { Bad_Opcode },
6059 { Bad_Opcode },
f88c9eb0 6060 /* a0 */
592d1631
L
6061 { Bad_Opcode },
6062 { Bad_Opcode },
6063 { Bad_Opcode },
6064 { Bad_Opcode },
6065 { Bad_Opcode },
6066 { Bad_Opcode },
6067 { Bad_Opcode },
6068 { Bad_Opcode },
f88c9eb0 6069 /* a8 */
592d1631
L
6070 { Bad_Opcode },
6071 { Bad_Opcode },
6072 { Bad_Opcode },
6073 { Bad_Opcode },
6074 { Bad_Opcode },
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { Bad_Opcode },
f88c9eb0 6078 /* b0 */
592d1631
L
6079 { Bad_Opcode },
6080 { Bad_Opcode },
6081 { Bad_Opcode },
6082 { Bad_Opcode },
6083 { Bad_Opcode },
6084 { Bad_Opcode },
6085 { Bad_Opcode },
6086 { Bad_Opcode },
f88c9eb0 6087 /* b8 */
592d1631
L
6088 { Bad_Opcode },
6089 { Bad_Opcode },
6090 { Bad_Opcode },
6091 { Bad_Opcode },
6092 { Bad_Opcode },
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { Bad_Opcode },
f88c9eb0 6096 /* c0 */
592d1631
L
6097 { Bad_Opcode },
6098 { Bad_Opcode },
6099 { Bad_Opcode },
6100 { Bad_Opcode },
6101 { Bad_Opcode },
6102 { Bad_Opcode },
6103 { Bad_Opcode },
6104 { Bad_Opcode },
f88c9eb0 6105 /* c8 */
592d1631
L
6106 { Bad_Opcode },
6107 { Bad_Opcode },
6108 { Bad_Opcode },
6109 { Bad_Opcode },
6110 { Bad_Opcode },
6111 { Bad_Opcode },
6112 { Bad_Opcode },
6113 { Bad_Opcode },
f88c9eb0 6114 /* d0 */
592d1631
L
6115 { Bad_Opcode },
6116 { Bad_Opcode },
6117 { Bad_Opcode },
6118 { Bad_Opcode },
6119 { Bad_Opcode },
6120 { Bad_Opcode },
6121 { Bad_Opcode },
6122 { Bad_Opcode },
f88c9eb0 6123 /* d8 */
592d1631
L
6124 { Bad_Opcode },
6125 { Bad_Opcode },
6126 { Bad_Opcode },
6127 { Bad_Opcode },
6128 { Bad_Opcode },
6129 { Bad_Opcode },
6130 { Bad_Opcode },
f88c9eb0
SP
6131 { PREFIX_TABLE (PREFIX_0F3ADF) },
6132 /* e0 */
592d1631
L
6133 { Bad_Opcode },
6134 { Bad_Opcode },
6135 { Bad_Opcode },
6136 { Bad_Opcode },
6137 { Bad_Opcode },
6138 { Bad_Opcode },
6139 { Bad_Opcode },
6140 { Bad_Opcode },
f88c9eb0 6141 /* e8 */
592d1631
L
6142 { Bad_Opcode },
6143 { Bad_Opcode },
6144 { Bad_Opcode },
6145 { Bad_Opcode },
6146 { Bad_Opcode },
6147 { Bad_Opcode },
6148 { Bad_Opcode },
6149 { Bad_Opcode },
f88c9eb0 6150 /* f0 */
592d1631
L
6151 { Bad_Opcode },
6152 { Bad_Opcode },
6153 { Bad_Opcode },
6154 { Bad_Opcode },
6155 { Bad_Opcode },
6156 { Bad_Opcode },
6157 { Bad_Opcode },
6158 { Bad_Opcode },
f88c9eb0 6159 /* f8 */
592d1631
L
6160 { Bad_Opcode },
6161 { Bad_Opcode },
6162 { Bad_Opcode },
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6165 { Bad_Opcode },
6166 { Bad_Opcode },
6167 { Bad_Opcode },
f88c9eb0
SP
6168 },
6169
6170 /* THREE_BYTE_0F7A */
6171 {
6172 /* 00 */
592d1631
L
6173 { Bad_Opcode },
6174 { Bad_Opcode },
6175 { Bad_Opcode },
6176 { Bad_Opcode },
6177 { Bad_Opcode },
6178 { Bad_Opcode },
6179 { Bad_Opcode },
6180 { Bad_Opcode },
f88c9eb0 6181 /* 08 */
592d1631
L
6182 { Bad_Opcode },
6183 { Bad_Opcode },
6184 { Bad_Opcode },
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { Bad_Opcode },
6188 { Bad_Opcode },
6189 { Bad_Opcode },
f88c9eb0 6190 /* 10 */
592d1631
L
6191 { Bad_Opcode },
6192 { Bad_Opcode },
6193 { Bad_Opcode },
6194 { Bad_Opcode },
6195 { Bad_Opcode },
6196 { Bad_Opcode },
6197 { Bad_Opcode },
6198 { Bad_Opcode },
f88c9eb0 6199 /* 18 */
592d1631
L
6200 { Bad_Opcode },
6201 { Bad_Opcode },
6202 { Bad_Opcode },
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { Bad_Opcode },
6206 { Bad_Opcode },
6207 { Bad_Opcode },
f88c9eb0
SP
6208 /* 20 */
6209 { "ptest", { XX } },
592d1631
L
6210 { Bad_Opcode },
6211 { Bad_Opcode },
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6214 { Bad_Opcode },
6215 { Bad_Opcode },
6216 { Bad_Opcode },
f88c9eb0 6217 /* 28 */
592d1631
L
6218 { Bad_Opcode },
6219 { Bad_Opcode },
6220 { Bad_Opcode },
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { Bad_Opcode },
6224 { Bad_Opcode },
6225 { Bad_Opcode },
f88c9eb0 6226 /* 30 */
592d1631
L
6227 { Bad_Opcode },
6228 { Bad_Opcode },
6229 { Bad_Opcode },
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { Bad_Opcode },
6233 { Bad_Opcode },
6234 { Bad_Opcode },
f88c9eb0 6235 /* 38 */
592d1631
L
6236 { Bad_Opcode },
6237 { Bad_Opcode },
6238 { Bad_Opcode },
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { Bad_Opcode },
6243 { Bad_Opcode },
f88c9eb0 6244 /* 40 */
592d1631 6245 { Bad_Opcode },
f88c9eb0
SP
6246 { "phaddbw", { XM, EXq } },
6247 { "phaddbd", { XM, EXq } },
6248 { "phaddbq", { XM, EXq } },
592d1631
L
6249 { Bad_Opcode },
6250 { Bad_Opcode },
f88c9eb0
SP
6251 { "phaddwd", { XM, EXq } },
6252 { "phaddwq", { XM, EXq } },
6253 /* 48 */
592d1631
L
6254 { Bad_Opcode },
6255 { Bad_Opcode },
6256 { Bad_Opcode },
f88c9eb0 6257 { "phadddq", { XM, EXq } },
592d1631
L
6258 { Bad_Opcode },
6259 { Bad_Opcode },
6260 { Bad_Opcode },
6261 { Bad_Opcode },
f88c9eb0 6262 /* 50 */
592d1631 6263 { Bad_Opcode },
f88c9eb0
SP
6264 { "phaddubw", { XM, EXq } },
6265 { "phaddubd", { XM, EXq } },
6266 { "phaddubq", { XM, EXq } },
592d1631
L
6267 { Bad_Opcode },
6268 { Bad_Opcode },
f88c9eb0
SP
6269 { "phadduwd", { XM, EXq } },
6270 { "phadduwq", { XM, EXq } },
6271 /* 58 */
592d1631
L
6272 { Bad_Opcode },
6273 { Bad_Opcode },
6274 { Bad_Opcode },
f88c9eb0 6275 { "phaddudq", { XM, EXq } },
592d1631
L
6276 { Bad_Opcode },
6277 { Bad_Opcode },
6278 { Bad_Opcode },
6279 { Bad_Opcode },
f88c9eb0 6280 /* 60 */
592d1631 6281 { Bad_Opcode },
f88c9eb0
SP
6282 { "phsubbw", { XM, EXq } },
6283 { "phsubbd", { XM, EXq } },
6284 { "phsubbq", { XM, EXq } },
592d1631
L
6285 { Bad_Opcode },
6286 { Bad_Opcode },
6287 { Bad_Opcode },
6288 { Bad_Opcode },
4e7d34a6 6289 /* 68 */
592d1631
L
6290 { Bad_Opcode },
6291 { Bad_Opcode },
6292 { Bad_Opcode },
6293 { Bad_Opcode },
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { Bad_Opcode },
6297 { Bad_Opcode },
85f10a01 6298 /* 70 */
592d1631
L
6299 { Bad_Opcode },
6300 { Bad_Opcode },
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6306 { Bad_Opcode },
85f10a01 6307 /* 78 */
592d1631
L
6308 { Bad_Opcode },
6309 { Bad_Opcode },
6310 { Bad_Opcode },
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { Bad_Opcode },
6314 { Bad_Opcode },
6315 { Bad_Opcode },
85f10a01 6316 /* 80 */
592d1631
L
6317 { Bad_Opcode },
6318 { Bad_Opcode },
6319 { Bad_Opcode },
6320 { Bad_Opcode },
6321 { Bad_Opcode },
6322 { Bad_Opcode },
6323 { Bad_Opcode },
6324 { Bad_Opcode },
85f10a01 6325 /* 88 */
592d1631
L
6326 { Bad_Opcode },
6327 { Bad_Opcode },
6328 { Bad_Opcode },
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6331 { Bad_Opcode },
6332 { Bad_Opcode },
6333 { Bad_Opcode },
85f10a01 6334 /* 90 */
592d1631
L
6335 { Bad_Opcode },
6336 { Bad_Opcode },
6337 { Bad_Opcode },
6338 { Bad_Opcode },
6339 { Bad_Opcode },
6340 { Bad_Opcode },
6341 { Bad_Opcode },
6342 { Bad_Opcode },
85f10a01 6343 /* 98 */
592d1631
L
6344 { Bad_Opcode },
6345 { Bad_Opcode },
6346 { Bad_Opcode },
6347 { Bad_Opcode },
6348 { Bad_Opcode },
6349 { Bad_Opcode },
6350 { Bad_Opcode },
6351 { Bad_Opcode },
85f10a01 6352 /* a0 */
592d1631
L
6353 { Bad_Opcode },
6354 { Bad_Opcode },
6355 { Bad_Opcode },
6356 { Bad_Opcode },
6357 { Bad_Opcode },
6358 { Bad_Opcode },
6359 { Bad_Opcode },
6360 { Bad_Opcode },
85f10a01 6361 /* a8 */
592d1631
L
6362 { Bad_Opcode },
6363 { Bad_Opcode },
6364 { Bad_Opcode },
6365 { Bad_Opcode },
6366 { Bad_Opcode },
6367 { Bad_Opcode },
6368 { Bad_Opcode },
6369 { Bad_Opcode },
85f10a01 6370 /* b0 */
592d1631
L
6371 { Bad_Opcode },
6372 { Bad_Opcode },
6373 { Bad_Opcode },
6374 { Bad_Opcode },
6375 { Bad_Opcode },
6376 { Bad_Opcode },
6377 { Bad_Opcode },
6378 { Bad_Opcode },
85f10a01 6379 /* b8 */
592d1631
L
6380 { Bad_Opcode },
6381 { Bad_Opcode },
6382 { Bad_Opcode },
6383 { Bad_Opcode },
6384 { Bad_Opcode },
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { Bad_Opcode },
85f10a01 6388 /* c0 */
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
6391 { Bad_Opcode },
6392 { Bad_Opcode },
6393 { Bad_Opcode },
6394 { Bad_Opcode },
6395 { Bad_Opcode },
6396 { Bad_Opcode },
85f10a01 6397 /* c8 */
592d1631
L
6398 { Bad_Opcode },
6399 { Bad_Opcode },
6400 { Bad_Opcode },
6401 { Bad_Opcode },
6402 { Bad_Opcode },
6403 { Bad_Opcode },
6404 { Bad_Opcode },
6405 { Bad_Opcode },
85f10a01 6406 /* d0 */
592d1631
L
6407 { Bad_Opcode },
6408 { Bad_Opcode },
6409 { Bad_Opcode },
6410 { Bad_Opcode },
6411 { Bad_Opcode },
6412 { Bad_Opcode },
6413 { Bad_Opcode },
6414 { Bad_Opcode },
85f10a01 6415 /* d8 */
592d1631
L
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { Bad_Opcode },
6419 { Bad_Opcode },
6420 { Bad_Opcode },
6421 { Bad_Opcode },
6422 { Bad_Opcode },
6423 { Bad_Opcode },
85f10a01 6424 /* e0 */
592d1631
L
6425 { Bad_Opcode },
6426 { Bad_Opcode },
6427 { Bad_Opcode },
6428 { Bad_Opcode },
6429 { Bad_Opcode },
6430 { Bad_Opcode },
6431 { Bad_Opcode },
6432 { Bad_Opcode },
85f10a01 6433 /* e8 */
592d1631
L
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { Bad_Opcode },
6437 { Bad_Opcode },
6438 { Bad_Opcode },
6439 { Bad_Opcode },
6440 { Bad_Opcode },
6441 { Bad_Opcode },
85f10a01 6442 /* f0 */
592d1631
L
6443 { Bad_Opcode },
6444 { Bad_Opcode },
6445 { Bad_Opcode },
6446 { Bad_Opcode },
6447 { Bad_Opcode },
6448 { Bad_Opcode },
6449 { Bad_Opcode },
6450 { Bad_Opcode },
85f10a01 6451 /* f8 */
592d1631
L
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { Bad_Opcode },
6455 { Bad_Opcode },
6456 { Bad_Opcode },
6457 { Bad_Opcode },
6458 { Bad_Opcode },
6459 { Bad_Opcode },
85f10a01 6460 },
f88c9eb0
SP
6461};
6462
6463static const struct dis386 xop_table[][256] = {
5dd85c99 6464 /* XOP_08 */
85f10a01
MM
6465 {
6466 /* 00 */
592d1631
L
6467 { Bad_Opcode },
6468 { Bad_Opcode },
6469 { Bad_Opcode },
6470 { Bad_Opcode },
6471 { Bad_Opcode },
6472 { Bad_Opcode },
6473 { Bad_Opcode },
6474 { Bad_Opcode },
85f10a01 6475 /* 08 */
592d1631
L
6476 { Bad_Opcode },
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { Bad_Opcode },
6480 { Bad_Opcode },
6481 { Bad_Opcode },
6482 { Bad_Opcode },
6483 { Bad_Opcode },
85f10a01 6484 /* 10 */
2a2a0f38 6485 { "bextr", { Gv, Ev, Iq } },
592d1631
L
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { Bad_Opcode },
6490 { Bad_Opcode },
6491 { Bad_Opcode },
6492 { Bad_Opcode },
85f10a01 6493 /* 18 */
592d1631
L
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { Bad_Opcode },
6498 { Bad_Opcode },
6499 { Bad_Opcode },
6500 { Bad_Opcode },
6501 { Bad_Opcode },
85f10a01 6502 /* 20 */
592d1631
L
6503 { Bad_Opcode },
6504 { Bad_Opcode },
6505 { Bad_Opcode },
6506 { Bad_Opcode },
6507 { Bad_Opcode },
6508 { Bad_Opcode },
6509 { Bad_Opcode },
6510 { Bad_Opcode },
85f10a01 6511 /* 28 */
592d1631
L
6512 { Bad_Opcode },
6513 { Bad_Opcode },
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { Bad_Opcode },
6518 { Bad_Opcode },
6519 { Bad_Opcode },
c0f3af97 6520 /* 30 */
592d1631
L
6521 { Bad_Opcode },
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { Bad_Opcode },
6525 { Bad_Opcode },
6526 { Bad_Opcode },
6527 { Bad_Opcode },
6528 { Bad_Opcode },
c0f3af97 6529 /* 38 */
592d1631
L
6530 { Bad_Opcode },
6531 { Bad_Opcode },
6532 { Bad_Opcode },
6533 { Bad_Opcode },
6534 { Bad_Opcode },
6535 { Bad_Opcode },
6536 { Bad_Opcode },
6537 { Bad_Opcode },
c0f3af97 6538 /* 40 */
592d1631
L
6539 { Bad_Opcode },
6540 { Bad_Opcode },
6541 { Bad_Opcode },
6542 { Bad_Opcode },
6543 { Bad_Opcode },
6544 { Bad_Opcode },
6545 { Bad_Opcode },
6546 { Bad_Opcode },
85f10a01 6547 /* 48 */
592d1631
L
6548 { Bad_Opcode },
6549 { Bad_Opcode },
6550 { Bad_Opcode },
6551 { Bad_Opcode },
6552 { Bad_Opcode },
6553 { Bad_Opcode },
6554 { Bad_Opcode },
6555 { Bad_Opcode },
c0f3af97 6556 /* 50 */
592d1631
L
6557 { Bad_Opcode },
6558 { Bad_Opcode },
6559 { Bad_Opcode },
6560 { Bad_Opcode },
6561 { Bad_Opcode },
6562 { Bad_Opcode },
6563 { Bad_Opcode },
6564 { Bad_Opcode },
85f10a01 6565 /* 58 */
592d1631
L
6566 { Bad_Opcode },
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { Bad_Opcode },
6571 { Bad_Opcode },
6572 { Bad_Opcode },
6573 { Bad_Opcode },
c1e679ec 6574 /* 60 */
592d1631
L
6575 { Bad_Opcode },
6576 { Bad_Opcode },
6577 { Bad_Opcode },
6578 { Bad_Opcode },
6579 { Bad_Opcode },
6580 { Bad_Opcode },
6581 { Bad_Opcode },
6582 { Bad_Opcode },
c0f3af97 6583 /* 68 */
592d1631
L
6584 { Bad_Opcode },
6585 { Bad_Opcode },
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6588 { Bad_Opcode },
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6591 { Bad_Opcode },
85f10a01 6592 /* 70 */
592d1631
L
6593 { Bad_Opcode },
6594 { Bad_Opcode },
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { Bad_Opcode },
6599 { Bad_Opcode },
6600 { Bad_Opcode },
85f10a01 6601 /* 78 */
592d1631
L
6602 { Bad_Opcode },
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { Bad_Opcode },
6607 { Bad_Opcode },
6608 { Bad_Opcode },
6609 { Bad_Opcode },
85f10a01 6610 /* 80 */
592d1631
L
6611 { Bad_Opcode },
6612 { Bad_Opcode },
6613 { Bad_Opcode },
6614 { Bad_Opcode },
6615 { Bad_Opcode },
5dd85c99
SP
6616 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6617 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6618 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6619 /* 88 */
592d1631
L
6620 { Bad_Opcode },
6621 { Bad_Opcode },
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6624 { Bad_Opcode },
6625 { Bad_Opcode },
5dd85c99
SP
6626 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6627 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6628 /* 90 */
592d1631
L
6629 { Bad_Opcode },
6630 { Bad_Opcode },
6631 { Bad_Opcode },
6632 { Bad_Opcode },
6633 { Bad_Opcode },
5dd85c99
SP
6634 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6635 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6636 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6637 /* 98 */
592d1631
L
6638 { Bad_Opcode },
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { Bad_Opcode },
6642 { Bad_Opcode },
6643 { Bad_Opcode },
5dd85c99
SP
6644 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6645 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6646 /* a0 */
592d1631
L
6647 { Bad_Opcode },
6648 { Bad_Opcode },
5dd85c99
SP
6649 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6650 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
6651 { Bad_Opcode },
6652 { Bad_Opcode },
5dd85c99 6653 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6654 { Bad_Opcode },
5dd85c99 6655 /* a8 */
592d1631
L
6656 { Bad_Opcode },
6657 { Bad_Opcode },
6658 { Bad_Opcode },
6659 { Bad_Opcode },
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
5dd85c99 6664 /* b0 */
592d1631
L
6665 { Bad_Opcode },
6666 { Bad_Opcode },
6667 { Bad_Opcode },
6668 { Bad_Opcode },
6669 { Bad_Opcode },
6670 { Bad_Opcode },
5dd85c99 6671 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6672 { Bad_Opcode },
5dd85c99 6673 /* b8 */
592d1631
L
6674 { Bad_Opcode },
6675 { Bad_Opcode },
6676 { Bad_Opcode },
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
5dd85c99
SP
6682 /* c0 */
6683 { "vprotb", { XM, Vex_2src_1, Ib } },
6684 { "vprotw", { XM, Vex_2src_1, Ib } },
6685 { "vprotd", { XM, Vex_2src_1, Ib } },
6686 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
6687 { Bad_Opcode },
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6690 { Bad_Opcode },
5dd85c99 6691 /* c8 */
592d1631
L
6692 { Bad_Opcode },
6693 { Bad_Opcode },
6694 { Bad_Opcode },
6695 { Bad_Opcode },
5dd85c99
SP
6696 { "vpcomb", { XM, Vex128, EXx, Ib } },
6697 { "vpcomw", { XM, Vex128, EXx, Ib } },
6698 { "vpcomd", { XM, Vex128, EXx, Ib } },
6699 { "vpcomq", { XM, Vex128, EXx, Ib } },
6700 /* d0 */
592d1631
L
6701 { Bad_Opcode },
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { Bad_Opcode },
6705 { Bad_Opcode },
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { Bad_Opcode },
5dd85c99 6709 /* d8 */
592d1631
L
6710 { Bad_Opcode },
6711 { Bad_Opcode },
6712 { Bad_Opcode },
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
6716 { Bad_Opcode },
6717 { Bad_Opcode },
5dd85c99 6718 /* e0 */
592d1631
L
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { Bad_Opcode },
6722 { Bad_Opcode },
6723 { Bad_Opcode },
6724 { Bad_Opcode },
6725 { Bad_Opcode },
6726 { Bad_Opcode },
5dd85c99 6727 /* e8 */
592d1631
L
6728 { Bad_Opcode },
6729 { Bad_Opcode },
6730 { Bad_Opcode },
6731 { Bad_Opcode },
5dd85c99
SP
6732 { "vpcomub", { XM, Vex128, EXx, Ib } },
6733 { "vpcomuw", { XM, Vex128, EXx, Ib } },
6734 { "vpcomud", { XM, Vex128, EXx, Ib } },
6735 { "vpcomuq", { XM, Vex128, EXx, Ib } },
6736 /* f0 */
592d1631
L
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6739 { Bad_Opcode },
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { Bad_Opcode },
6743 { Bad_Opcode },
6744 { Bad_Opcode },
5dd85c99 6745 /* f8 */
592d1631
L
6746 { Bad_Opcode },
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { Bad_Opcode },
5dd85c99
SP
6754 },
6755 /* XOP_09 */
6756 {
6757 /* 00 */
592d1631 6758 { Bad_Opcode },
2a2a0f38
QN
6759 { REG_TABLE (REG_XOP_TBM_01) },
6760 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
5dd85c99 6766 /* 08 */
592d1631
L
6767 { Bad_Opcode },
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
5dd85c99 6775 /* 10 */
592d1631
L
6776 { Bad_Opcode },
6777 { Bad_Opcode },
5dd85c99 6778 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
6779 { Bad_Opcode },
6780 { Bad_Opcode },
6781 { Bad_Opcode },
6782 { Bad_Opcode },
6783 { Bad_Opcode },
5dd85c99 6784 /* 18 */
592d1631
L
6785 { Bad_Opcode },
6786 { Bad_Opcode },
6787 { Bad_Opcode },
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
5dd85c99 6793 /* 20 */
592d1631
L
6794 { Bad_Opcode },
6795 { Bad_Opcode },
6796 { Bad_Opcode },
6797 { Bad_Opcode },
6798 { Bad_Opcode },
6799 { Bad_Opcode },
6800 { Bad_Opcode },
6801 { Bad_Opcode },
5dd85c99 6802 /* 28 */
592d1631
L
6803 { Bad_Opcode },
6804 { Bad_Opcode },
6805 { Bad_Opcode },
6806 { Bad_Opcode },
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
6810 { Bad_Opcode },
5dd85c99 6811 /* 30 */
592d1631
L
6812 { Bad_Opcode },
6813 { Bad_Opcode },
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
6817 { Bad_Opcode },
6818 { Bad_Opcode },
6819 { Bad_Opcode },
5dd85c99 6820 /* 38 */
592d1631
L
6821 { Bad_Opcode },
6822 { Bad_Opcode },
6823 { Bad_Opcode },
6824 { Bad_Opcode },
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
6828 { Bad_Opcode },
5dd85c99 6829 /* 40 */
592d1631
L
6830 { Bad_Opcode },
6831 { Bad_Opcode },
6832 { Bad_Opcode },
6833 { Bad_Opcode },
6834 { Bad_Opcode },
6835 { Bad_Opcode },
6836 { Bad_Opcode },
6837 { Bad_Opcode },
5dd85c99 6838 /* 48 */
592d1631
L
6839 { Bad_Opcode },
6840 { Bad_Opcode },
6841 { Bad_Opcode },
6842 { Bad_Opcode },
6843 { Bad_Opcode },
6844 { Bad_Opcode },
6845 { Bad_Opcode },
6846 { Bad_Opcode },
5dd85c99 6847 /* 50 */
592d1631
L
6848 { Bad_Opcode },
6849 { Bad_Opcode },
6850 { Bad_Opcode },
6851 { Bad_Opcode },
6852 { Bad_Opcode },
6853 { Bad_Opcode },
6854 { Bad_Opcode },
6855 { Bad_Opcode },
5dd85c99 6856 /* 58 */
592d1631
L
6857 { Bad_Opcode },
6858 { Bad_Opcode },
6859 { Bad_Opcode },
6860 { Bad_Opcode },
6861 { Bad_Opcode },
6862 { Bad_Opcode },
6863 { Bad_Opcode },
6864 { Bad_Opcode },
5dd85c99 6865 /* 60 */
592d1631
L
6866 { Bad_Opcode },
6867 { Bad_Opcode },
6868 { Bad_Opcode },
6869 { Bad_Opcode },
6870 { Bad_Opcode },
6871 { Bad_Opcode },
6872 { Bad_Opcode },
6873 { Bad_Opcode },
5dd85c99 6874 /* 68 */
592d1631
L
6875 { Bad_Opcode },
6876 { Bad_Opcode },
6877 { Bad_Opcode },
6878 { Bad_Opcode },
6879 { Bad_Opcode },
6880 { Bad_Opcode },
6881 { Bad_Opcode },
6882 { Bad_Opcode },
5dd85c99 6883 /* 70 */
592d1631
L
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
6887 { Bad_Opcode },
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
5dd85c99 6892 /* 78 */
592d1631
L
6893 { Bad_Opcode },
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { Bad_Opcode },
6898 { Bad_Opcode },
6899 { Bad_Opcode },
6900 { Bad_Opcode },
5dd85c99 6901 /* 80 */
592a252b
L
6902 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
6903 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
6904 { "vfrczss", { XM, EXd } },
6905 { "vfrczsd", { XM, EXq } },
592d1631
L
6906 { Bad_Opcode },
6907 { Bad_Opcode },
6908 { Bad_Opcode },
6909 { Bad_Opcode },
5dd85c99 6910 /* 88 */
592d1631
L
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { Bad_Opcode },
5dd85c99
SP
6919 /* 90 */
6920 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
6921 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
6922 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
6923 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
6924 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
6925 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
6926 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
6927 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
6928 /* 98 */
6929 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
6930 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
6931 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
6932 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
6933 { Bad_Opcode },
6934 { Bad_Opcode },
6935 { Bad_Opcode },
6936 { Bad_Opcode },
5dd85c99 6937 /* a0 */
592d1631
L
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
5dd85c99 6946 /* a8 */
592d1631
L
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
6950 { Bad_Opcode },
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
5dd85c99 6955 /* b0 */
592d1631
L
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
5dd85c99 6964 /* b8 */
592d1631
L
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
5dd85c99 6973 /* c0 */
592d1631 6974 { Bad_Opcode },
5dd85c99
SP
6975 { "vphaddbw", { XM, EXxmm } },
6976 { "vphaddbd", { XM, EXxmm } },
6977 { "vphaddbq", { XM, EXxmm } },
592d1631
L
6978 { Bad_Opcode },
6979 { Bad_Opcode },
5dd85c99
SP
6980 { "vphaddwd", { XM, EXxmm } },
6981 { "vphaddwq", { XM, EXxmm } },
6982 /* c8 */
592d1631
L
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
5dd85c99 6986 { "vphadddq", { XM, EXxmm } },
592d1631
L
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
5dd85c99 6991 /* d0 */
592d1631 6992 { Bad_Opcode },
5dd85c99
SP
6993 { "vphaddubw", { XM, EXxmm } },
6994 { "vphaddubd", { XM, EXxmm } },
6995 { "vphaddubq", { XM, EXxmm } },
592d1631
L
6996 { Bad_Opcode },
6997 { Bad_Opcode },
5dd85c99
SP
6998 { "vphadduwd", { XM, EXxmm } },
6999 { "vphadduwq", { XM, EXxmm } },
7000 /* d8 */
592d1631
L
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
5dd85c99 7004 { "vphaddudq", { XM, EXxmm } },
592d1631
L
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
5dd85c99 7009 /* e0 */
592d1631 7010 { Bad_Opcode },
5dd85c99
SP
7011 { "vphsubbw", { XM, EXxmm } },
7012 { "vphsubwd", { XM, EXxmm } },
7013 { "vphsubdq", { XM, EXxmm } },
592d1631
L
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
4e7d34a6 7018 /* e8 */
592d1631
L
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
4e7d34a6 7027 /* f0 */
592d1631
L
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
4e7d34a6 7036 /* f8 */
592d1631
L
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
4e7d34a6 7045 },
f88c9eb0 7046 /* XOP_0A */
4e7d34a6
L
7047 {
7048 /* 00 */
592d1631
L
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
4e7d34a6 7057 /* 08 */
592d1631
L
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
4e7d34a6 7066 /* 10 */
2a2a0f38 7067 { "bextr", { Gv, Ev, Iq } },
592d1631 7068 { Bad_Opcode },
f88c9eb0 7069 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
4e7d34a6 7075 /* 18 */
592d1631
L
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
4e7d34a6 7084 /* 20 */
592d1631
L
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
4e7d34a6 7093 /* 28 */
592d1631
L
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
4e7d34a6 7102 /* 30 */
592d1631
L
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
c0f3af97 7111 /* 38 */
592d1631
L
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
c0f3af97 7120 /* 40 */
592d1631
L
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
c1e679ec 7129 /* 48 */
592d1631
L
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
c1e679ec 7138 /* 50 */
592d1631
L
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
4e7d34a6 7147 /* 58 */
592d1631
L
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
4e7d34a6 7156 /* 60 */
592d1631
L
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
4e7d34a6 7165 /* 68 */
592d1631
L
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
4e7d34a6 7174 /* 70 */
592d1631
L
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
4e7d34a6 7183 /* 78 */
592d1631
L
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
4e7d34a6 7192 /* 80 */
592d1631
L
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
4e7d34a6 7201 /* 88 */
592d1631
L
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
4e7d34a6 7210 /* 90 */
592d1631
L
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
4e7d34a6 7219 /* 98 */
592d1631
L
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
4e7d34a6 7228 /* a0 */
592d1631
L
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
4e7d34a6 7237 /* a8 */
592d1631
L
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
d5d7db8e 7246 /* b0 */
592d1631
L
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
85f10a01 7255 /* b8 */
592d1631
L
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
85f10a01 7264 /* c0 */
592d1631
L
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
85f10a01 7273 /* c8 */
592d1631
L
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
85f10a01 7282 /* d0 */
592d1631
L
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
85f10a01 7291 /* d8 */
592d1631
L
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
85f10a01 7300 /* e0 */
592d1631
L
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
85f10a01 7309 /* e8 */
592d1631
L
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
85f10a01 7318 /* f0 */
592d1631
L
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
85f10a01 7327 /* f8 */
592d1631
L
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
85f10a01 7336 },
c0f3af97
L
7337};
7338
7339static const struct dis386 vex_table[][256] = {
7340 /* VEX_0F */
85f10a01
MM
7341 {
7342 /* 00 */
592d1631
L
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
85f10a01 7351 /* 08 */
592d1631
L
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
c0f3af97 7360 /* 10 */
592a252b
L
7361 { PREFIX_TABLE (PREFIX_VEX_0F10) },
7362 { PREFIX_TABLE (PREFIX_VEX_0F11) },
7363 { PREFIX_TABLE (PREFIX_VEX_0F12) },
7364 { MOD_TABLE (MOD_VEX_0F13) },
7365 { VEX_W_TABLE (VEX_W_0F14) },
7366 { VEX_W_TABLE (VEX_W_0F15) },
7367 { PREFIX_TABLE (PREFIX_VEX_0F16) },
7368 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 7369 /* 18 */
592d1631
L
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
c0f3af97 7378 /* 20 */
592d1631
L
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
c0f3af97 7387 /* 28 */
592a252b
L
7388 { VEX_W_TABLE (VEX_W_0F28) },
7389 { VEX_W_TABLE (VEX_W_0F29) },
7390 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
7391 { MOD_TABLE (MOD_VEX_0F2B) },
7392 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
7393 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
7394 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
7395 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 7396 /* 30 */
592d1631
L
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
4e7d34a6 7405 /* 38 */
592d1631
L
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
d5d7db8e 7414 /* 40 */
592d1631
L
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
85f10a01 7423 /* 48 */
592d1631
L
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
d5d7db8e 7432 /* 50 */
592a252b
L
7433 { MOD_TABLE (MOD_VEX_0F50) },
7434 { PREFIX_TABLE (PREFIX_VEX_0F51) },
7435 { PREFIX_TABLE (PREFIX_VEX_0F52) },
7436 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
7437 { "vandpX", { XM, Vex, EXx } },
7438 { "vandnpX", { XM, Vex, EXx } },
7439 { "vorpX", { XM, Vex, EXx } },
7440 { "vxorpX", { XM, Vex, EXx } },
7441 /* 58 */
592a252b
L
7442 { PREFIX_TABLE (PREFIX_VEX_0F58) },
7443 { PREFIX_TABLE (PREFIX_VEX_0F59) },
7444 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
7445 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
7446 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
7447 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
7448 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
7449 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 7450 /* 60 */
592a252b
L
7451 { PREFIX_TABLE (PREFIX_VEX_0F60) },
7452 { PREFIX_TABLE (PREFIX_VEX_0F61) },
7453 { PREFIX_TABLE (PREFIX_VEX_0F62) },
7454 { PREFIX_TABLE (PREFIX_VEX_0F63) },
7455 { PREFIX_TABLE (PREFIX_VEX_0F64) },
7456 { PREFIX_TABLE (PREFIX_VEX_0F65) },
7457 { PREFIX_TABLE (PREFIX_VEX_0F66) },
7458 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 7459 /* 68 */
592a252b
L
7460 { PREFIX_TABLE (PREFIX_VEX_0F68) },
7461 { PREFIX_TABLE (PREFIX_VEX_0F69) },
7462 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
7463 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
7464 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
7465 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
7466 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
7467 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 7468 /* 70 */
592a252b
L
7469 { PREFIX_TABLE (PREFIX_VEX_0F70) },
7470 { REG_TABLE (REG_VEX_0F71) },
7471 { REG_TABLE (REG_VEX_0F72) },
7472 { REG_TABLE (REG_VEX_0F73) },
7473 { PREFIX_TABLE (PREFIX_VEX_0F74) },
7474 { PREFIX_TABLE (PREFIX_VEX_0F75) },
7475 { PREFIX_TABLE (PREFIX_VEX_0F76) },
7476 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 7477 /* 78 */
592d1631
L
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
592a252b
L
7482 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
7483 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
7484 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
7485 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 7486 /* 80 */
592d1631
L
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
c0f3af97 7495 /* 88 */
592d1631
L
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
c0f3af97 7504 /* 90 */
592d1631
L
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
c0f3af97 7513 /* 98 */
592d1631
L
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
c0f3af97 7522 /* a0 */
592d1631
L
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
c0f3af97 7531 /* a8 */
592d1631
L
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
592a252b 7538 { REG_TABLE (REG_VEX_0FAE) },
592d1631 7539 { Bad_Opcode },
c0f3af97 7540 /* b0 */
592d1631
L
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
c0f3af97 7549 /* b8 */
592d1631
L
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
c0f3af97 7558 /* c0 */
592d1631
L
7559 { Bad_Opcode },
7560 { Bad_Opcode },
592a252b 7561 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 7562 { Bad_Opcode },
592a252b
L
7563 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
7564 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 7565 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 7566 { Bad_Opcode },
c0f3af97 7567 /* c8 */
592d1631
L
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
c0f3af97 7576 /* d0 */
592a252b
L
7577 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
7578 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
7579 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
7580 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
7581 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
7582 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
7583 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
7584 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 7585 /* d8 */
592a252b
L
7586 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
7587 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
7588 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
7589 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
7590 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
7591 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
7592 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
7593 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 7594 /* e0 */
592a252b
L
7595 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
7596 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
7597 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
7598 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
7599 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
7600 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
7601 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
7602 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 7603 /* e8 */
592a252b
L
7604 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
7605 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
7606 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
7607 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
7608 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
7609 { PREFIX_TABLE (PREFIX_VEX_0FED) },
7610 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
7611 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 7612 /* f0 */
592a252b
L
7613 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
7614 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
7615 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
7616 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
7617 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
7618 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
7619 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
7620 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 7621 /* f8 */
592a252b
L
7622 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
7623 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
7624 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
7625 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
7626 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
7627 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
7628 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 7629 { Bad_Opcode },
c0f3af97
L
7630 },
7631 /* VEX_0F38 */
7632 {
7633 /* 00 */
592a252b
L
7634 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
7635 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
7636 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
7637 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
7638 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
7639 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
7640 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
7641 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 7642 /* 08 */
592a252b
L
7643 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
7644 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
7645 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
7646 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
7647 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
7648 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
7649 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
7650 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 7651 /* 10 */
592d1631
L
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
592a252b 7655 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
592a252b 7659 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 7660 /* 18 */
592a252b
L
7661 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
7662 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
7663 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 7664 { Bad_Opcode },
592a252b
L
7665 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
7666 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
7667 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 7668 { Bad_Opcode },
c0f3af97 7669 /* 20 */
592a252b
L
7670 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
7671 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
7672 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
7673 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
7674 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
7675 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
7676 { Bad_Opcode },
7677 { Bad_Opcode },
c0f3af97 7678 /* 28 */
592a252b
L
7679 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
7680 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
7681 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
7682 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
7683 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
7684 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
7685 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
7686 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 7687 /* 30 */
592a252b
L
7688 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
7689 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
7690 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
7691 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
7692 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
7693 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
7694 { Bad_Opcode },
7695 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 7696 /* 38 */
592a252b
L
7697 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
7698 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
7699 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
7700 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
7701 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
7702 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
7703 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
7704 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 7705 /* 40 */
592a252b
L
7706 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
7707 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
c0f3af97 7714 /* 48 */
592d1631
L
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
c0f3af97 7723 /* 50 */
592d1631
L
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
c0f3af97 7732 /* 58 */
592d1631
L
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
c0f3af97 7741 /* 60 */
592d1631
L
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
c0f3af97 7750 /* 68 */
592d1631
L
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
c0f3af97 7759 /* 70 */
592d1631
L
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
c0f3af97 7768 /* 78 */
592d1631
L
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
c0f3af97 7777 /* 80 */
592d1631
L
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
c0f3af97 7786 /* 88 */
592d1631
L
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
c0f3af97 7795 /* 90 */
592d1631
L
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
592a252b
L
7802 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
7803 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 7804 /* 98 */
592a252b
L
7805 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
7806 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
7807 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
7808 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
7809 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
7810 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
7811 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
7812 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 7813 /* a0 */
592d1631
L
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
592a252b
L
7820 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
7821 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 7822 /* a8 */
592a252b
L
7823 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
7824 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
7825 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
7826 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
7827 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
7828 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
7829 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
7830 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 7831 /* b0 */
592d1631
L
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
592a252b
L
7838 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
7839 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 7840 /* b8 */
592a252b
L
7841 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
7842 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
7843 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
7844 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
7845 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
7846 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
7847 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
7848 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 7849 /* c0 */
592d1631
L
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
c0f3af97 7858 /* c8 */
592d1631
L
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
c0f3af97 7867 /* d0 */
592d1631
L
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
c0f3af97 7876 /* d8 */
592d1631
L
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
592a252b
L
7880 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
7881 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
7882 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
7883 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
7884 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 7885 /* e0 */
592d1631
L
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
c0f3af97 7894 /* e8 */
592d1631
L
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
c0f3af97 7903 /* f0 */
592d1631
L
7904 { Bad_Opcode },
7905 { Bad_Opcode },
f12dc422
L
7906 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
7907 { REG_TABLE (REG_VEX_0F38F3) },
592d1631
L
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
f12dc422 7911 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 7912 /* f8 */
592d1631
L
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
c0f3af97
L
7921 },
7922 /* VEX_0F3A */
7923 {
7924 /* 00 */
592d1631
L
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
592a252b
L
7929 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
7930 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
7931 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 7932 { Bad_Opcode },
c0f3af97 7933 /* 08 */
592a252b
L
7934 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
7935 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
7936 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
7937 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
7938 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
7939 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
7940 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
7941 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 7942 /* 10 */
592d1631
L
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
592a252b
L
7947 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
7948 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
7949 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
7950 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 7951 /* 18 */
592a252b
L
7952 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
7953 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
592a252b 7957 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
7958 { Bad_Opcode },
7959 { Bad_Opcode },
c0f3af97 7960 /* 20 */
592a252b
L
7961 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
7962 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
7963 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
c0f3af97 7969 /* 28 */
592d1631
L
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
c0f3af97 7978 /* 30 */
592d1631
L
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
c0f3af97 7987 /* 38 */
592d1631
L
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
c0f3af97 7996 /* 40 */
592a252b
L
7997 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
7998 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
7999 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 8000 { Bad_Opcode },
592a252b 8001 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631
L
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
c0f3af97 8005 /* 48 */
592a252b
L
8006 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8007 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8008 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8009 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8010 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
c0f3af97 8014 /* 50 */
592d1631
L
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
c0f3af97 8023 /* 58 */
592d1631
L
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
592a252b
L
8028 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8029 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8030 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8031 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 8032 /* 60 */
592a252b
L
8033 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8034 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
8035 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
8036 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
c0f3af97 8041 /* 68 */
592a252b
L
8042 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
8043 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
8044 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
8045 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
8046 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
8047 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
8048 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
8049 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 8050 /* 70 */
592d1631
L
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
c0f3af97 8059 /* 78 */
592a252b
L
8060 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
8061 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
8062 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
8063 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
8064 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
8065 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
8066 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
8067 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 8068 /* 80 */
592d1631
L
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
c0f3af97 8077 /* 88 */
592d1631
L
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
c0f3af97 8086 /* 90 */
592d1631
L
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
c0f3af97 8095 /* 98 */
592d1631
L
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
c0f3af97 8104 /* a0 */
592d1631
L
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
c0f3af97 8113 /* a8 */
592d1631
L
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
c0f3af97 8122 /* b0 */
592d1631
L
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
c0f3af97 8131 /* b8 */
592d1631
L
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
c0f3af97 8140 /* c0 */
592d1631
L
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
c0f3af97 8149 /* c8 */
592d1631
L
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
c0f3af97 8158 /* d0 */
592d1631
L
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
c0f3af97 8167 /* d8 */
592d1631
L
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
592a252b 8175 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 8176 /* e0 */
592d1631
L
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
c0f3af97 8185 /* e8 */
592d1631
L
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
c0f3af97 8194 /* f0 */
592d1631
L
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
c0f3af97 8203 /* f8 */
592d1631
L
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
c0f3af97
L
8212 },
8213};
8214
8215static const struct dis386 vex_len_table[][2] = {
592a252b 8216 /* VEX_LEN_0F10_P_1 */
c0f3af97 8217 {
592a252b
L
8218 { VEX_W_TABLE (VEX_W_0F10_P_1) },
8219 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
8220 },
8221
592a252b 8222 /* VEX_LEN_0F10_P_3 */
c0f3af97 8223 {
592a252b
L
8224 { VEX_W_TABLE (VEX_W_0F10_P_3) },
8225 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
8226 },
8227
592a252b 8228 /* VEX_LEN_0F11_P_1 */
c0f3af97 8229 {
592a252b
L
8230 { VEX_W_TABLE (VEX_W_0F11_P_1) },
8231 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
8232 },
8233
592a252b 8234 /* VEX_LEN_0F11_P_3 */
c0f3af97 8235 {
592a252b
L
8236 { VEX_W_TABLE (VEX_W_0F11_P_3) },
8237 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
8238 },
8239
592a252b 8240 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 8241 {
592a252b 8242 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
8243 },
8244
592a252b 8245 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 8246 {
592a252b 8247 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
8248 },
8249
592a252b 8250 /* VEX_LEN_0F12_P_2 */
c0f3af97 8251 {
592a252b 8252 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
8253 },
8254
592a252b 8255 /* VEX_LEN_0F13_M_0 */
c0f3af97 8256 {
592a252b 8257 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
8258 },
8259
592a252b 8260 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 8261 {
592a252b 8262 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
8263 },
8264
592a252b 8265 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 8266 {
592a252b 8267 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
8268 },
8269
592a252b 8270 /* VEX_LEN_0F16_P_2 */
c0f3af97 8271 {
592a252b 8272 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
8273 },
8274
592a252b 8275 /* VEX_LEN_0F17_M_0 */
c0f3af97 8276 {
592a252b 8277 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
8278 },
8279
592a252b 8280 /* VEX_LEN_0F2A_P_1 */
c0f3af97 8281 {
539f890d
L
8282 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8283 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8284 },
8285
592a252b 8286 /* VEX_LEN_0F2A_P_3 */
c0f3af97 8287 {
539f890d
L
8288 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8289 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8290 },
8291
592a252b 8292 /* VEX_LEN_0F2C_P_1 */
c0f3af97 8293 {
539f890d
L
8294 { "vcvttss2siY", { Gv, EXdScalar } },
8295 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
8296 },
8297
592a252b 8298 /* VEX_LEN_0F2C_P_3 */
c0f3af97 8299 {
539f890d
L
8300 { "vcvttsd2siY", { Gv, EXqScalar } },
8301 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8302 },
8303
592a252b 8304 /* VEX_LEN_0F2D_P_1 */
c0f3af97 8305 {
539f890d
L
8306 { "vcvtss2siY", { Gv, EXdScalar } },
8307 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
8308 },
8309
592a252b 8310 /* VEX_LEN_0F2D_P_3 */
c0f3af97 8311 {
539f890d
L
8312 { "vcvtsd2siY", { Gv, EXqScalar } },
8313 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8314 },
8315
592a252b 8316 /* VEX_LEN_0F2E_P_0 */
c0f3af97 8317 {
592a252b
L
8318 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8319 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
8320 },
8321
592a252b 8322 /* VEX_LEN_0F2E_P_2 */
c0f3af97 8323 {
592a252b
L
8324 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8325 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
8326 },
8327
592a252b 8328 /* VEX_LEN_0F2F_P_0 */
c0f3af97 8329 {
592a252b
L
8330 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8331 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
8332 },
8333
592a252b 8334 /* VEX_LEN_0F2F_P_2 */
c0f3af97 8335 {
592a252b
L
8336 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8337 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
8338 },
8339
592a252b 8340 /* VEX_LEN_0F51_P_1 */
c0f3af97 8341 {
592a252b
L
8342 { VEX_W_TABLE (VEX_W_0F51_P_1) },
8343 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
8344 },
8345
592a252b 8346 /* VEX_LEN_0F51_P_3 */
c0f3af97 8347 {
592a252b
L
8348 { VEX_W_TABLE (VEX_W_0F51_P_3) },
8349 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
8350 },
8351
592a252b 8352 /* VEX_LEN_0F52_P_1 */
c0f3af97 8353 {
592a252b
L
8354 { VEX_W_TABLE (VEX_W_0F52_P_1) },
8355 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
8356 },
8357
592a252b 8358 /* VEX_LEN_0F53_P_1 */
c0f3af97 8359 {
592a252b
L
8360 { VEX_W_TABLE (VEX_W_0F53_P_1) },
8361 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
8362 },
8363
592a252b 8364 /* VEX_LEN_0F58_P_1 */
c0f3af97 8365 {
592a252b
L
8366 { VEX_W_TABLE (VEX_W_0F58_P_1) },
8367 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
8368 },
8369
592a252b 8370 /* VEX_LEN_0F58_P_3 */
c0f3af97 8371 {
592a252b
L
8372 { VEX_W_TABLE (VEX_W_0F58_P_3) },
8373 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
8374 },
8375
592a252b 8376 /* VEX_LEN_0F59_P_1 */
c0f3af97 8377 {
592a252b
L
8378 { VEX_W_TABLE (VEX_W_0F59_P_1) },
8379 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
8380 },
8381
592a252b 8382 /* VEX_LEN_0F59_P_3 */
c0f3af97 8383 {
592a252b
L
8384 { VEX_W_TABLE (VEX_W_0F59_P_3) },
8385 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
8386 },
8387
592a252b 8388 /* VEX_LEN_0F5A_P_1 */
c0f3af97 8389 {
592a252b
L
8390 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8391 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
8392 },
8393
592a252b 8394 /* VEX_LEN_0F5A_P_3 */
c0f3af97 8395 {
592a252b
L
8396 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8397 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
8398 },
8399
592a252b 8400 /* VEX_LEN_0F5C_P_1 */
c0f3af97 8401 {
592a252b
L
8402 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8403 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
8404 },
8405
592a252b 8406 /* VEX_LEN_0F5C_P_3 */
c0f3af97 8407 {
592a252b
L
8408 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8409 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
8410 },
8411
592a252b 8412 /* VEX_LEN_0F5D_P_1 */
c0f3af97 8413 {
592a252b
L
8414 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8415 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
8416 },
8417
592a252b 8418 /* VEX_LEN_0F5D_P_3 */
c0f3af97 8419 {
592a252b
L
8420 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8421 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
8422 },
8423
592a252b 8424 /* VEX_LEN_0F5E_P_1 */
c0f3af97 8425 {
592a252b
L
8426 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8427 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
8428 },
8429
592a252b 8430 /* VEX_LEN_0F5E_P_3 */
c0f3af97 8431 {
592a252b
L
8432 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8433 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
8434 },
8435
592a252b 8436 /* VEX_LEN_0F5F_P_1 */
c0f3af97 8437 {
592a252b
L
8438 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8439 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
8440 },
8441
592a252b 8442 /* VEX_LEN_0F5F_P_3 */
c0f3af97 8443 {
592a252b
L
8444 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8445 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
8446 },
8447
592a252b 8448 /* VEX_LEN_0F60_P_2 */
c0f3af97 8449 {
592a252b 8450 { VEX_W_TABLE (VEX_W_0F60_P_2) },
c0f3af97
L
8451 },
8452
592a252b 8453 /* VEX_LEN_0F61_P_2 */
c0f3af97 8454 {
592a252b 8455 { VEX_W_TABLE (VEX_W_0F61_P_2) },
c0f3af97
L
8456 },
8457
592a252b 8458 /* VEX_LEN_0F62_P_2 */
c0f3af97 8459 {
592a252b 8460 { VEX_W_TABLE (VEX_W_0F62_P_2) },
c0f3af97
L
8461 },
8462
592a252b 8463 /* VEX_LEN_0F63_P_2 */
c0f3af97 8464 {
592a252b 8465 { VEX_W_TABLE (VEX_W_0F63_P_2) },
c0f3af97
L
8466 },
8467
592a252b 8468 /* VEX_LEN_0F64_P_2 */
c0f3af97 8469 {
592a252b 8470 { VEX_W_TABLE (VEX_W_0F64_P_2) },
c0f3af97
L
8471 },
8472
592a252b 8473 /* VEX_LEN_0F65_P_2 */
c0f3af97 8474 {
592a252b 8475 { VEX_W_TABLE (VEX_W_0F65_P_2) },
c0f3af97
L
8476 },
8477
592a252b 8478 /* VEX_LEN_0F66_P_2 */
c0f3af97 8479 {
592a252b 8480 { VEX_W_TABLE (VEX_W_0F66_P_2) },
c0f3af97
L
8481 },
8482
592a252b 8483 /* VEX_LEN_0F67_P_2 */
c0f3af97 8484 {
592a252b 8485 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
8486 },
8487
592a252b 8488 /* VEX_LEN_0F68_P_2 */
c0f3af97 8489 {
592a252b 8490 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
8491 },
8492
592a252b 8493 /* VEX_LEN_0F69_P_2 */
c0f3af97 8494 {
592a252b 8495 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
8496 },
8497
592a252b 8498 /* VEX_LEN_0F6A_P_2 */
c0f3af97 8499 {
592a252b 8500 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
8501 },
8502
592a252b 8503 /* VEX_LEN_0F6B_P_2 */
c0f3af97 8504 {
592a252b 8505 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
8506 },
8507
592a252b 8508 /* VEX_LEN_0F6C_P_2 */
c0f3af97 8509 {
592a252b 8510 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
8511 },
8512
592a252b 8513 /* VEX_LEN_0F6D_P_2 */
c0f3af97 8514 {
592a252b 8515 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
8516 },
8517
592a252b 8518 /* VEX_LEN_0F6E_P_2 */
c0f3af97 8519 {
539f890d
L
8520 { "vmovK", { XMScalar, Edq } },
8521 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
8522 },
8523
592a252b 8524 /* VEX_LEN_0F70_P_1 */
c0f3af97 8525 {
592a252b 8526 { VEX_W_TABLE (VEX_W_0F70_P_1) },
c0f3af97
L
8527 },
8528
592a252b 8529 /* VEX_LEN_0F70_P_2 */
c0f3af97 8530 {
592a252b 8531 { VEX_W_TABLE (VEX_W_0F70_P_2) },
c0f3af97
L
8532 },
8533
592a252b 8534 /* VEX_LEN_0F70_P_3 */
c0f3af97 8535 {
592a252b 8536 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
8537 },
8538
592a252b 8539 /* VEX_LEN_0F71_R_2_P_2 */
c0f3af97 8540 {
592a252b 8541 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
8542 },
8543
592a252b 8544 /* VEX_LEN_0F71_R_4_P_2 */
c0f3af97 8545 {
592a252b 8546 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
8547 },
8548
592a252b 8549 /* VEX_LEN_0F71_R_6_P_2 */
c0f3af97 8550 {
592a252b 8551 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
8552 },
8553
592a252b 8554 /* VEX_LEN_0F72_R_2_P_2 */
c0f3af97 8555 {
592a252b 8556 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
8557 },
8558
592a252b 8559 /* VEX_LEN_0F72_R_4_P_2 */
c0f3af97 8560 {
592a252b 8561 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
8562 },
8563
592a252b 8564 /* VEX_LEN_0F72_R_6_P_2 */
c0f3af97 8565 {
592a252b 8566 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
8567 },
8568
592a252b 8569 /* VEX_LEN_0F73_R_2_P_2 */
c0f3af97 8570 {
592a252b 8571 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
8572 },
8573
592a252b 8574 /* VEX_LEN_0F73_R_3_P_2 */
c0f3af97 8575 {
592a252b 8576 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
8577 },
8578
592a252b 8579 /* VEX_LEN_0F73_R_6_P_2 */
c0f3af97 8580 {
592a252b 8581 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
8582 },
8583
592a252b 8584 /* VEX_LEN_0F73_R_7_P_2 */
c0f3af97 8585 {
592a252b 8586 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
8587 },
8588
592a252b 8589 /* VEX_LEN_0F74_P_2 */
c0f3af97 8590 {
592a252b 8591 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
8592 },
8593
592a252b 8594 /* VEX_LEN_0F75_P_2 */
c0f3af97 8595 {
592a252b 8596 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
8597 },
8598
592a252b 8599 /* VEX_LEN_0F76_P_2 */
c0f3af97 8600 {
592a252b 8601 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
8602 },
8603
592a252b 8604 /* VEX_LEN_0F7E_P_1 */
c0f3af97 8605 {
592a252b
L
8606 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8607 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
8608 },
8609
592a252b 8610 /* VEX_LEN_0F7E_P_2 */
c0f3af97 8611 {
539f890d
L
8612 { "vmovK", { Edq, XMScalar } },
8613 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
8614 },
8615
592a252b 8616 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 8617 {
592a252b 8618 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
8619 },
8620
592a252b 8621 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 8622 {
592a252b 8623 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
8624 },
8625
592a252b 8626 /* VEX_LEN_0FC2_P_1 */
c0f3af97 8627 {
592a252b
L
8628 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8629 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
8630 },
8631
592a252b 8632 /* VEX_LEN_0FC2_P_3 */
c0f3af97 8633 {
592a252b
L
8634 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8635 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
8636 },
8637
592a252b 8638 /* VEX_LEN_0FC4_P_2 */
c0f3af97 8639 {
592a252b 8640 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
8641 },
8642
592a252b 8643 /* VEX_LEN_0FC5_P_2 */
c0f3af97 8644 {
592a252b 8645 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
8646 },
8647
592a252b 8648 /* VEX_LEN_0FD1_P_2 */
c0f3af97 8649 {
592a252b 8650 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
8651 },
8652
592a252b 8653 /* VEX_LEN_0FD2_P_2 */
c0f3af97 8654 {
592a252b 8655 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
8656 },
8657
592a252b 8658 /* VEX_LEN_0FD3_P_2 */
c0f3af97 8659 {
592a252b 8660 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
8661 },
8662
592a252b 8663 /* VEX_LEN_0FD4_P_2 */
c0f3af97 8664 {
592a252b 8665 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
8666 },
8667
592a252b 8668 /* VEX_LEN_0FD5_P_2 */
c0f3af97 8669 {
592a252b 8670 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
8671 },
8672
592a252b 8673 /* VEX_LEN_0FD6_P_2 */
c0f3af97 8674 {
592a252b
L
8675 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8676 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
8677 },
8678
592a252b 8679 /* VEX_LEN_0FD7_P_2_M_1 */
c0f3af97 8680 {
592a252b 8681 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
c0f3af97
L
8682 },
8683
592a252b 8684 /* VEX_LEN_0FD8_P_2 */
c0f3af97 8685 {
592a252b 8686 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
8687 },
8688
592a252b 8689 /* VEX_LEN_0FD9_P_2 */
c0f3af97 8690 {
592a252b 8691 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
8692 },
8693
592a252b 8694 /* VEX_LEN_0FDA_P_2 */
c0f3af97 8695 {
592a252b 8696 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
8697 },
8698
592a252b 8699 /* VEX_LEN_0FDB_P_2 */
c0f3af97 8700 {
592a252b 8701 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
8702 },
8703
592a252b 8704 /* VEX_LEN_0FDC_P_2 */
c0f3af97 8705 {
592a252b 8706 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
8707 },
8708
592a252b 8709 /* VEX_LEN_0FDD_P_2 */
c0f3af97 8710 {
592a252b 8711 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
8712 },
8713
592a252b 8714 /* VEX_LEN_0FDE_P_2 */
c0f3af97 8715 {
592a252b 8716 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
8717 },
8718
592a252b 8719 /* VEX_LEN_0FDF_P_2 */
c0f3af97 8720 {
592a252b 8721 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
8722 },
8723
592a252b 8724 /* VEX_LEN_0FE0_P_2 */
c0f3af97 8725 {
592a252b 8726 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
8727 },
8728
592a252b 8729 /* VEX_LEN_0FE1_P_2 */
c0f3af97 8730 {
592a252b 8731 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
8732 },
8733
592a252b 8734 /* VEX_LEN_0FE2_P_2 */
c0f3af97 8735 {
592a252b 8736 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
8737 },
8738
592a252b 8739 /* VEX_LEN_0FE3_P_2 */
c0f3af97 8740 {
592a252b 8741 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
8742 },
8743
592a252b 8744 /* VEX_LEN_0FE4_P_2 */
c0f3af97 8745 {
592a252b 8746 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
8747 },
8748
592a252b 8749 /* VEX_LEN_0FE5_P_2 */
c0f3af97 8750 {
592a252b 8751 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
8752 },
8753
592a252b 8754 /* VEX_LEN_0FE8_P_2 */
c0f3af97 8755 {
592a252b 8756 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
8757 },
8758
592a252b 8759 /* VEX_LEN_0FE9_P_2 */
c0f3af97 8760 {
592a252b 8761 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
8762 },
8763
592a252b 8764 /* VEX_LEN_0FEA_P_2 */
c0f3af97 8765 {
592a252b 8766 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
8767 },
8768
592a252b 8769 /* VEX_LEN_0FEB_P_2 */
c0f3af97 8770 {
592a252b 8771 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
8772 },
8773
592a252b 8774 /* VEX_LEN_0FEC_P_2 */
c0f3af97 8775 {
592a252b 8776 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
8777 },
8778
592a252b 8779 /* VEX_LEN_0FED_P_2 */
c0f3af97 8780 {
592a252b 8781 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
8782 },
8783
592a252b 8784 /* VEX_LEN_0FEE_P_2 */
c0f3af97 8785 {
592a252b 8786 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
8787 },
8788
592a252b 8789 /* VEX_LEN_0FEF_P_2 */
c0f3af97 8790 {
592a252b 8791 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
8792 },
8793
592a252b 8794 /* VEX_LEN_0FF1_P_2 */
c0f3af97 8795 {
592a252b 8796 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
8797 },
8798
592a252b 8799 /* VEX_LEN_0FF2_P_2 */
c0f3af97 8800 {
592a252b 8801 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
8802 },
8803
592a252b 8804 /* VEX_LEN_0FF3_P_2 */
c0f3af97 8805 {
592a252b 8806 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
8807 },
8808
592a252b 8809 /* VEX_LEN_0FF4_P_2 */
c0f3af97 8810 {
592a252b 8811 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
8812 },
8813
592a252b 8814 /* VEX_LEN_0FF5_P_2 */
c0f3af97 8815 {
592a252b 8816 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
8817 },
8818
592a252b 8819 /* VEX_LEN_0FF6_P_2 */
c0f3af97 8820 {
592a252b 8821 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
8822 },
8823
592a252b 8824 /* VEX_LEN_0FF7_P_2 */
c0f3af97 8825 {
592a252b 8826 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
8827 },
8828
592a252b 8829 /* VEX_LEN_0FF8_P_2 */
c0f3af97 8830 {
592a252b 8831 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
8832 },
8833
592a252b 8834 /* VEX_LEN_0FF9_P_2 */
c0f3af97 8835 {
592a252b 8836 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
8837 },
8838
592a252b 8839 /* VEX_LEN_0FFA_P_2 */
c0f3af97 8840 {
592a252b 8841 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
8842 },
8843
592a252b 8844 /* VEX_LEN_0FFB_P_2 */
c0f3af97 8845 {
592a252b 8846 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
8847 },
8848
592a252b 8849 /* VEX_LEN_0FFC_P_2 */
c0f3af97 8850 {
592a252b 8851 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
8852 },
8853
592a252b 8854 /* VEX_LEN_0FFD_P_2 */
c0f3af97 8855 {
592a252b 8856 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
8857 },
8858
592a252b 8859 /* VEX_LEN_0FFE_P_2 */
c0f3af97 8860 {
592a252b 8861 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
8862 },
8863
592a252b 8864 /* VEX_LEN_0F3800_P_2 */
c0f3af97 8865 {
592a252b 8866 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
8867 },
8868
592a252b 8869 /* VEX_LEN_0F3801_P_2 */
c0f3af97 8870 {
592a252b 8871 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
8872 },
8873
592a252b 8874 /* VEX_LEN_0F3802_P_2 */
c0f3af97 8875 {
592a252b 8876 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
8877 },
8878
592a252b 8879 /* VEX_LEN_0F3803_P_2 */
c0f3af97 8880 {
592a252b 8881 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
8882 },
8883
592a252b 8884 /* VEX_LEN_0F3804_P_2 */
c0f3af97 8885 {
592a252b 8886 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
8887 },
8888
592a252b 8889 /* VEX_LEN_0F3805_P_2 */
c0f3af97 8890 {
592a252b 8891 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
8892 },
8893
592a252b 8894 /* VEX_LEN_0F3806_P_2 */
c0f3af97 8895 {
592a252b 8896 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
8897 },
8898
592a252b 8899 /* VEX_LEN_0F3807_P_2 */
c0f3af97 8900 {
592a252b 8901 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
8902 },
8903
592a252b 8904 /* VEX_LEN_0F3808_P_2 */
c0f3af97 8905 {
592a252b 8906 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
8907 },
8908
592a252b 8909 /* VEX_LEN_0F3809_P_2 */
c0f3af97 8910 {
592a252b 8911 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
8912 },
8913
592a252b 8914 /* VEX_LEN_0F380A_P_2 */
c0f3af97 8915 {
592a252b 8916 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
8917 },
8918
592a252b 8919 /* VEX_LEN_0F380B_P_2 */
c0f3af97 8920 {
592a252b 8921 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
8922 },
8923
592a252b 8924 /* VEX_LEN_0F3819_P_2_M_0 */
c0f3af97 8925 {
592d1631 8926 { Bad_Opcode },
592a252b 8927 { VEX_W_TABLE (VEX_W_0F3819_P_2_M_0) },
c0f3af97
L
8928 },
8929
592a252b 8930 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 8931 {
592d1631 8932 { Bad_Opcode },
592a252b 8933 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
8934 },
8935
592a252b 8936 /* VEX_LEN_0F381C_P_2 */
c0f3af97 8937 {
592a252b 8938 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
8939 },
8940
592a252b 8941 /* VEX_LEN_0F381D_P_2 */
c0f3af97 8942 {
592a252b 8943 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
8944 },
8945
592a252b 8946 /* VEX_LEN_0F381E_P_2 */
c0f3af97 8947 {
592a252b 8948 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
8949 },
8950
592a252b 8951 /* VEX_LEN_0F3820_P_2 */
c0f3af97 8952 {
592a252b 8953 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
8954 },
8955
592a252b 8956 /* VEX_LEN_0F3821_P_2 */
c0f3af97 8957 {
592a252b 8958 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
8959 },
8960
592a252b 8961 /* VEX_LEN_0F3822_P_2 */
c0f3af97 8962 {
592a252b 8963 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
8964 },
8965
592a252b 8966 /* VEX_LEN_0F3823_P_2 */
c0f3af97 8967 {
592a252b 8968 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
8969 },
8970
592a252b 8971 /* VEX_LEN_0F3824_P_2 */
c0f3af97 8972 {
592a252b 8973 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
8974 },
8975
592a252b 8976 /* VEX_LEN_0F3825_P_2 */
c0f3af97 8977 {
592a252b 8978 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
8979 },
8980
592a252b 8981 /* VEX_LEN_0F3828_P_2 */
c0f3af97 8982 {
592a252b 8983 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
8984 },
8985
592a252b 8986 /* VEX_LEN_0F3829_P_2 */
c0f3af97 8987 {
592a252b 8988 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
8989 },
8990
592a252b 8991 /* VEX_LEN_0F382A_P_2_M_0 */
c0f3af97 8992 {
592a252b 8993 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
c0f3af97
L
8994 },
8995
592a252b 8996 /* VEX_LEN_0F382B_P_2 */
c0f3af97 8997 {
592a252b 8998 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
8999 },
9000
592a252b 9001 /* VEX_LEN_0F3830_P_2 */
c0f3af97 9002 {
592a252b 9003 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
9004 },
9005
592a252b 9006 /* VEX_LEN_0F3831_P_2 */
c0f3af97 9007 {
592a252b 9008 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
9009 },
9010
592a252b 9011 /* VEX_LEN_0F3832_P_2 */
c0f3af97 9012 {
592a252b 9013 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
9014 },
9015
592a252b 9016 /* VEX_LEN_0F3833_P_2 */
c0f3af97 9017 {
592a252b 9018 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
9019 },
9020
592a252b 9021 /* VEX_LEN_0F3834_P_2 */
c0f3af97 9022 {
592a252b 9023 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
9024 },
9025
592a252b 9026 /* VEX_LEN_0F3835_P_2 */
c0f3af97 9027 {
592a252b 9028 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
c0f3af97
L
9029 },
9030
592a252b 9031 /* VEX_LEN_0F3837_P_2 */
c0f3af97 9032 {
592a252b 9033 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
9034 },
9035
592a252b 9036 /* VEX_LEN_0F3838_P_2 */
c0f3af97 9037 {
592a252b 9038 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
9039 },
9040
592a252b 9041 /* VEX_LEN_0F3839_P_2 */
c0f3af97 9042 {
592a252b 9043 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
9044 },
9045
592a252b 9046 /* VEX_LEN_0F383A_P_2 */
c0f3af97 9047 {
592a252b 9048 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
9049 },
9050
592a252b 9051 /* VEX_LEN_0F383B_P_2 */
c0f3af97 9052 {
592a252b 9053 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
9054 },
9055
592a252b 9056 /* VEX_LEN_0F383C_P_2 */
c0f3af97 9057 {
592a252b 9058 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
9059 },
9060
592a252b 9061 /* VEX_LEN_0F383D_P_2 */
c0f3af97 9062 {
592a252b 9063 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
9064 },
9065
592a252b 9066 /* VEX_LEN_0F383E_P_2 */
c0f3af97 9067 {
592a252b 9068 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
9069 },
9070
592a252b 9071 /* VEX_LEN_0F383F_P_2 */
c0f3af97 9072 {
592a252b 9073 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
9074 },
9075
592a252b 9076 /* VEX_LEN_0F3840_P_2 */
c0f3af97 9077 {
592a252b 9078 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
9079 },
9080
592a252b 9081 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9082 {
592a252b 9083 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9084 },
9085
592a252b 9086 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9087 {
592a252b 9088 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9089 },
9090
592a252b 9091 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9092 {
592a252b 9093 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9094 },
9095
592a252b 9096 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9097 {
592a252b 9098 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9099 },
9100
592a252b 9101 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9102 {
592a252b 9103 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9104 },
9105
592a252b 9106 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9107 {
592a252b 9108 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9109 },
9110
f12dc422
L
9111 /* VEX_LEN_0F38F2_P_0 */
9112 {
9113 { "andnS", { Gdq, VexGdq, Edq } },
9114 },
9115
9116 /* VEX_LEN_0F38F3_R_1_P_0 */
9117 {
9118 { "blsrS", { VexGdq, Edq } },
9119 },
9120
9121 /* VEX_LEN_0F38F3_R_2_P_0 */
9122 {
9123 { "blsmskS", { VexGdq, Edq } },
9124 },
9125
9126 /* VEX_LEN_0F38F3_R_3_P_0 */
9127 {
9128 { "blsiS", { VexGdq, Edq } },
9129 },
9130
9131 /* VEX_LEN_0F38F7_P_0 */
9132 {
9133 { "bextrS", { Gdq, Edq, VexGdq } },
9134 },
9135
592a252b 9136 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9137 {
592d1631 9138 { Bad_Opcode },
592a252b 9139 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9140 },
9141
592a252b 9142 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 9143 {
592a252b
L
9144 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9145 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
9146 },
9147
592a252b 9148 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 9149 {
592a252b
L
9150 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9151 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
9152 },
9153
592a252b 9154 /* VEX_LEN_0F3A0E_P_2 */
c0f3af97 9155 {
592a252b 9156 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
c0f3af97
L
9157 },
9158
592a252b 9159 /* VEX_LEN_0F3A0F_P_2 */
c0f3af97 9160 {
592a252b 9161 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
c0f3af97
L
9162 },
9163
592a252b 9164 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9165 {
592a252b 9166 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
9167 },
9168
592a252b 9169 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9170 {
592a252b 9171 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
9172 },
9173
592a252b 9174 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
9175 {
9176 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
9177 },
9178
592a252b 9179 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
9180 {
9181 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
9182 },
9183
592a252b 9184 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9185 {
592d1631 9186 { Bad_Opcode },
592a252b 9187 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9188 },
9189
592a252b 9190 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9191 {
592d1631 9192 { Bad_Opcode },
592a252b 9193 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9194 },
9195
592a252b 9196 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9197 {
592a252b 9198 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
9199 },
9200
592a252b 9201 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9202 {
592a252b 9203 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
9204 },
9205
592a252b 9206 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
9207 {
9208 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
9209 },
9210
592a252b 9211 /* VEX_LEN_0F3A41_P_2 */
c0f3af97 9212 {
592a252b 9213 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
9214 },
9215
592a252b 9216 /* VEX_LEN_0F3A42_P_2 */
c0f3af97 9217 {
592a252b 9218 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
9219 },
9220
592a252b 9221 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 9222 {
592a252b 9223 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
9224 },
9225
592a252b 9226 /* VEX_LEN_0F3A4C_P_2 */
c0f3af97 9227 {
592a252b 9228 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
9229 },
9230
592a252b 9231 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9232 {
592a252b 9233 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
9234 },
9235
592a252b 9236 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9237 {
592a252b 9238 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
9239 },
9240
592a252b 9241 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9242 {
592a252b 9243 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
9244 },
9245
592a252b 9246 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9247 {
592a252b 9248 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
9249 },
9250
592a252b 9251 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9252 {
206c2556 9253 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9254 },
9255
592a252b 9256 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9257 {
206c2556 9258 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9259 },
9260
592a252b 9261 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9262 {
206c2556 9263 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9264 },
9265
592a252b 9266 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9267 {
206c2556 9268 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9269 },
9270
592a252b 9271 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9272 {
206c2556 9273 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9274 },
9275
592a252b 9276 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9277 {
206c2556 9278 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9279 },
9280
592a252b 9281 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9282 {
206c2556 9283 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9284 },
9285
592a252b 9286 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9287 {
206c2556 9288 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9289 },
9290
592a252b 9291 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9292 {
592a252b 9293 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 9294 },
4c807e72 9295
592a252b 9296 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9297 {
4c807e72
L
9298 { "vfrczps", { XM, EXxmm } },
9299 { "vfrczps", { XM, EXymmq } },
5dd85c99 9300 },
4c807e72 9301
592a252b 9302 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9303 {
4c807e72
L
9304 { "vfrczpd", { XM, EXxmm } },
9305 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9306 },
331d2d0d
L
9307};
9308
9e30b8e0 9309static const struct dis386 vex_w_table[][2] = {
b844680a 9310 {
592a252b 9311 /* VEX_W_0F10_P_0 */
9e30b8e0 9312 { "vmovups", { XM, EXx } },
d8faab4e
L
9313 },
9314 {
592a252b 9315 /* VEX_W_0F10_P_1 */
539f890d 9316 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9317 },
9318 {
592a252b 9319 /* VEX_W_0F10_P_2 */
9e30b8e0 9320 { "vmovupd", { XM, EXx } },
d8faab4e
L
9321 },
9322 {
592a252b 9323 /* VEX_W_0F10_P_3 */
539f890d 9324 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9325 },
9326 {
592a252b 9327 /* VEX_W_0F11_P_0 */
9e30b8e0 9328 { "vmovups", { EXxS, XM } },
d8faab4e
L
9329 },
9330 {
592a252b 9331 /* VEX_W_0F11_P_1 */
539f890d 9332 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9333 },
9334 {
592a252b 9335 /* VEX_W_0F11_P_2 */
9e30b8e0 9336 { "vmovupd", { EXxS, XM } },
b844680a
L
9337 },
9338 {
592a252b 9339 /* VEX_W_0F11_P_3 */
539f890d 9340 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9341 },
9342 {
592a252b 9343 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 9344 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9345 },
9346 {
592a252b 9347 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 9348 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9349 },
9350 {
592a252b 9351 /* VEX_W_0F12_P_1 */
9e30b8e0 9352 { "vmovsldup", { XM, EXx } },
b844680a
L
9353 },
9354 {
592a252b 9355 /* VEX_W_0F12_P_2 */
9e30b8e0 9356 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9357 },
9358 {
592a252b 9359 /* VEX_W_0F12_P_3 */
9e30b8e0 9360 { "vmovddup", { XM, EXymmq } },
b844680a
L
9361 },
9362 {
592a252b 9363 /* VEX_W_0F13_M_0 */
9e30b8e0 9364 { "vmovlpX", { EXq, XM } },
b844680a
L
9365 },
9366 {
592a252b 9367 /* VEX_W_0F14 */
9e30b8e0 9368 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9369 },
9370 {
592a252b 9371 /* VEX_W_0F15 */
9e30b8e0 9372 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9373 },
9374 {
592a252b 9375 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 9376 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9377 },
9378 {
592a252b 9379 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 9380 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9381 },
9382 {
592a252b 9383 /* VEX_W_0F16_P_1 */
9e30b8e0 9384 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9385 },
9386 {
592a252b 9387 /* VEX_W_0F16_P_2 */
9e30b8e0 9388 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9389 },
9390 {
592a252b 9391 /* VEX_W_0F17_M_0 */
9e30b8e0 9392 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9393 },
9394 {
592a252b 9395 /* VEX_W_0F28 */
9e30b8e0 9396 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9397 },
9398 {
592a252b 9399 /* VEX_W_0F29 */
9e30b8e0 9400 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9401 },
9402 {
592a252b 9403 /* VEX_W_0F2B_M_0 */
9e30b8e0 9404 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9405 },
9406 {
592a252b 9407 /* VEX_W_0F2E_P_0 */
539f890d 9408 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9409 },
9410 {
592a252b 9411 /* VEX_W_0F2E_P_2 */
539f890d 9412 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9413 },
9414 {
592a252b 9415 /* VEX_W_0F2F_P_0 */
539f890d 9416 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9417 },
9418 {
592a252b 9419 /* VEX_W_0F2F_P_2 */
539f890d 9420 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9421 },
9422 {
592a252b 9423 /* VEX_W_0F50_M_0 */
9e30b8e0 9424 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
9425 },
9426 {
592a252b 9427 /* VEX_W_0F51_P_0 */
9e30b8e0 9428 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
9429 },
9430 {
592a252b 9431 /* VEX_W_0F51_P_1 */
539f890d 9432 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9433 },
9434 {
592a252b 9435 /* VEX_W_0F51_P_2 */
9e30b8e0 9436 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
9437 },
9438 {
592a252b 9439 /* VEX_W_0F51_P_3 */
539f890d 9440 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9441 },
9442 {
592a252b 9443 /* VEX_W_0F52_P_0 */
9e30b8e0 9444 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
9445 },
9446 {
592a252b 9447 /* VEX_W_0F52_P_1 */
539f890d 9448 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9449 },
9450 {
592a252b 9451 /* VEX_W_0F53_P_0 */
9e30b8e0 9452 { "vrcpps", { XM, EXx } },
9e30b8e0
L
9453 },
9454 {
592a252b 9455 /* VEX_W_0F53_P_1 */
539f890d 9456 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9457 },
9458 {
592a252b 9459 /* VEX_W_0F58_P_0 */
9e30b8e0 9460 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
9461 },
9462 {
592a252b 9463 /* VEX_W_0F58_P_1 */
539f890d 9464 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9465 },
9466 {
592a252b 9467 /* VEX_W_0F58_P_2 */
9e30b8e0 9468 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9469 },
9470 {
592a252b 9471 /* VEX_W_0F58_P_3 */
539f890d 9472 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9473 },
9474 {
592a252b 9475 /* VEX_W_0F59_P_0 */
9e30b8e0 9476 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
9477 },
9478 {
592a252b 9479 /* VEX_W_0F59_P_1 */
539f890d 9480 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9481 },
9482 {
592a252b 9483 /* VEX_W_0F59_P_2 */
9e30b8e0 9484 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
9485 },
9486 {
592a252b 9487 /* VEX_W_0F59_P_3 */
539f890d 9488 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9489 },
9490 {
592a252b 9491 /* VEX_W_0F5A_P_0 */
9e30b8e0 9492 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
9493 },
9494 {
592a252b 9495 /* VEX_W_0F5A_P_1 */
539f890d 9496 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9497 },
9498 {
592a252b 9499 /* VEX_W_0F5A_P_3 */
539f890d 9500 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9501 },
9502 {
592a252b 9503 /* VEX_W_0F5B_P_0 */
9e30b8e0 9504 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
9505 },
9506 {
592a252b 9507 /* VEX_W_0F5B_P_1 */
9e30b8e0 9508 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
9509 },
9510 {
592a252b 9511 /* VEX_W_0F5B_P_2 */
9e30b8e0 9512 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
9513 },
9514 {
592a252b 9515 /* VEX_W_0F5C_P_0 */
9e30b8e0 9516 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
9517 },
9518 {
592a252b 9519 /* VEX_W_0F5C_P_1 */
539f890d 9520 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9521 },
9522 {
592a252b 9523 /* VEX_W_0F5C_P_2 */
9e30b8e0 9524 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9525 },
9526 {
592a252b 9527 /* VEX_W_0F5C_P_3 */
539f890d 9528 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9529 },
9530 {
592a252b 9531 /* VEX_W_0F5D_P_0 */
9e30b8e0 9532 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
9533 },
9534 {
592a252b 9535 /* VEX_W_0F5D_P_1 */
539f890d 9536 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9537 },
9538 {
592a252b 9539 /* VEX_W_0F5D_P_2 */
9e30b8e0 9540 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
9541 },
9542 {
592a252b 9543 /* VEX_W_0F5D_P_3 */
539f890d 9544 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9545 },
9546 {
592a252b 9547 /* VEX_W_0F5E_P_0 */
9e30b8e0 9548 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
9549 },
9550 {
592a252b 9551 /* VEX_W_0F5E_P_1 */
539f890d 9552 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9553 },
9554 {
592a252b 9555 /* VEX_W_0F5E_P_2 */
9e30b8e0 9556 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
9557 },
9558 {
592a252b 9559 /* VEX_W_0F5E_P_3 */
539f890d 9560 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9561 },
9562 {
592a252b 9563 /* VEX_W_0F5F_P_0 */
9e30b8e0 9564 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
9565 },
9566 {
592a252b 9567 /* VEX_W_0F5F_P_1 */
539f890d 9568 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9569 },
9570 {
592a252b 9571 /* VEX_W_0F5F_P_2 */
9e30b8e0 9572 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
9573 },
9574 {
592a252b 9575 /* VEX_W_0F5F_P_3 */
539f890d 9576 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9577 },
9578 {
592a252b 9579 /* VEX_W_0F60_P_2 */
9e30b8e0 9580 { "vpunpcklbw", { XM, Vex128, EXx } },
9e30b8e0
L
9581 },
9582 {
592a252b 9583 /* VEX_W_0F61_P_2 */
9e30b8e0 9584 { "vpunpcklwd", { XM, Vex128, EXx } },
9e30b8e0
L
9585 },
9586 {
592a252b 9587 /* VEX_W_0F62_P_2 */
9e30b8e0 9588 { "vpunpckldq", { XM, Vex128, EXx } },
9e30b8e0
L
9589 },
9590 {
592a252b 9591 /* VEX_W_0F63_P_2 */
9e30b8e0 9592 { "vpacksswb", { XM, Vex128, EXx } },
9e30b8e0
L
9593 },
9594 {
592a252b 9595 /* VEX_W_0F64_P_2 */
9e30b8e0 9596 { "vpcmpgtb", { XM, Vex128, EXx } },
9e30b8e0
L
9597 },
9598 {
592a252b 9599 /* VEX_W_0F65_P_2 */
9e30b8e0 9600 { "vpcmpgtw", { XM, Vex128, EXx } },
9e30b8e0
L
9601 },
9602 {
592a252b 9603 /* VEX_W_0F66_P_2 */
9e30b8e0 9604 { "vpcmpgtd", { XM, Vex128, EXx } },
9e30b8e0
L
9605 },
9606 {
592a252b 9607 /* VEX_W_0F67_P_2 */
9e30b8e0 9608 { "vpackuswb", { XM, Vex128, EXx } },
9e30b8e0
L
9609 },
9610 {
592a252b 9611 /* VEX_W_0F68_P_2 */
9e30b8e0 9612 { "vpunpckhbw", { XM, Vex128, EXx } },
9e30b8e0
L
9613 },
9614 {
592a252b 9615 /* VEX_W_0F69_P_2 */
9e30b8e0 9616 { "vpunpckhwd", { XM, Vex128, EXx } },
9e30b8e0
L
9617 },
9618 {
592a252b 9619 /* VEX_W_0F6A_P_2 */
9e30b8e0 9620 { "vpunpckhdq", { XM, Vex128, EXx } },
9e30b8e0
L
9621 },
9622 {
592a252b 9623 /* VEX_W_0F6B_P_2 */
9e30b8e0 9624 { "vpackssdw", { XM, Vex128, EXx } },
9e30b8e0
L
9625 },
9626 {
592a252b 9627 /* VEX_W_0F6C_P_2 */
9e30b8e0 9628 { "vpunpcklqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9629 },
9630 {
592a252b 9631 /* VEX_W_0F6D_P_2 */
9e30b8e0 9632 { "vpunpckhqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9633 },
9634 {
592a252b 9635 /* VEX_W_0F6F_P_1 */
efdb52b7 9636 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
9637 },
9638 {
592a252b 9639 /* VEX_W_0F6F_P_2 */
efdb52b7 9640 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
9641 },
9642 {
592a252b 9643 /* VEX_W_0F70_P_1 */
9e30b8e0 9644 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
9645 },
9646 {
592a252b 9647 /* VEX_W_0F70_P_2 */
9e30b8e0 9648 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
9649 },
9650 {
592a252b 9651 /* VEX_W_0F70_P_3 */
9e30b8e0 9652 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
9653 },
9654 {
592a252b 9655 /* VEX_W_0F71_R_2_P_2 */
9e30b8e0 9656 { "vpsrlw", { Vex128, XS, Ib } },
9e30b8e0
L
9657 },
9658 {
592a252b 9659 /* VEX_W_0F71_R_4_P_2 */
9e30b8e0 9660 { "vpsraw", { Vex128, XS, Ib } },
9e30b8e0
L
9661 },
9662 {
592a252b 9663 /* VEX_W_0F71_R_6_P_2 */
9e30b8e0 9664 { "vpsllw", { Vex128, XS, Ib } },
9e30b8e0
L
9665 },
9666 {
592a252b 9667 /* VEX_W_0F72_R_2_P_2 */
9e30b8e0 9668 { "vpsrld", { Vex128, XS, Ib } },
9e30b8e0
L
9669 },
9670 {
592a252b 9671 /* VEX_W_0F72_R_4_P_2 */
9e30b8e0 9672 { "vpsrad", { Vex128, XS, Ib } },
9e30b8e0
L
9673 },
9674 {
592a252b 9675 /* VEX_W_0F72_R_6_P_2 */
9e30b8e0 9676 { "vpslld", { Vex128, XS, Ib } },
9e30b8e0
L
9677 },
9678 {
592a252b 9679 /* VEX_W_0F73_R_2_P_2 */
9e30b8e0 9680 { "vpsrlq", { Vex128, XS, Ib } },
9e30b8e0
L
9681 },
9682 {
592a252b 9683 /* VEX_W_0F73_R_3_P_2 */
9e30b8e0 9684 { "vpsrldq", { Vex128, XS, Ib } },
9e30b8e0
L
9685 },
9686 {
592a252b 9687 /* VEX_W_0F73_R_6_P_2 */
9e30b8e0 9688 { "vpsllq", { Vex128, XS, Ib } },
9e30b8e0
L
9689 },
9690 {
592a252b 9691 /* VEX_W_0F73_R_7_P_2 */
9e30b8e0 9692 { "vpslldq", { Vex128, XS, Ib } },
9e30b8e0
L
9693 },
9694 {
592a252b 9695 /* VEX_W_0F74_P_2 */
9e30b8e0 9696 { "vpcmpeqb", { XM, Vex128, EXx } },
9e30b8e0
L
9697 },
9698 {
592a252b 9699 /* VEX_W_0F75_P_2 */
9e30b8e0 9700 { "vpcmpeqw", { XM, Vex128, EXx } },
9e30b8e0
L
9701 },
9702 {
592a252b 9703 /* VEX_W_0F76_P_2 */
9e30b8e0 9704 { "vpcmpeqd", { XM, Vex128, EXx } },
9e30b8e0
L
9705 },
9706 {
592a252b 9707 /* VEX_W_0F77_P_0 */
9e30b8e0 9708 { "", { VZERO } },
9e30b8e0
L
9709 },
9710 {
592a252b 9711 /* VEX_W_0F7C_P_2 */
9e30b8e0 9712 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9713 },
9714 {
592a252b 9715 /* VEX_W_0F7C_P_3 */
9e30b8e0 9716 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
9717 },
9718 {
592a252b 9719 /* VEX_W_0F7D_P_2 */
9e30b8e0 9720 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9721 },
9722 {
592a252b 9723 /* VEX_W_0F7D_P_3 */
9e30b8e0 9724 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
9725 },
9726 {
592a252b 9727 /* VEX_W_0F7E_P_1 */
539f890d 9728 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
9729 },
9730 {
592a252b 9731 /* VEX_W_0F7F_P_1 */
9e30b8e0 9732 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
9733 },
9734 {
592a252b 9735 /* VEX_W_0F7F_P_2 */
9e30b8e0 9736 { "vmovdqa", { EXxS, XM } },
9e30b8e0
L
9737 },
9738 {
592a252b 9739 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 9740 { "vldmxcsr", { Md } },
9e30b8e0
L
9741 },
9742 {
592a252b 9743 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 9744 { "vstmxcsr", { Md } },
9e30b8e0
L
9745 },
9746 {
592a252b 9747 /* VEX_W_0FC2_P_0 */
9e30b8e0 9748 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9749 },
9750 {
592a252b 9751 /* VEX_W_0FC2_P_1 */
539f890d 9752 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
9753 },
9754 {
592a252b 9755 /* VEX_W_0FC2_P_2 */
9e30b8e0 9756 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9757 },
9758 {
592a252b 9759 /* VEX_W_0FC2_P_3 */
539f890d 9760 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
9761 },
9762 {
592a252b 9763 /* VEX_W_0FC4_P_2 */
9e30b8e0 9764 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
9765 },
9766 {
592a252b 9767 /* VEX_W_0FC5_P_2 */
9e30b8e0 9768 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
9769 },
9770 {
592a252b 9771 /* VEX_W_0FD0_P_2 */
9e30b8e0 9772 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9773 },
9774 {
592a252b 9775 /* VEX_W_0FD0_P_3 */
9e30b8e0 9776 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
9777 },
9778 {
592a252b 9779 /* VEX_W_0FD1_P_2 */
9e30b8e0 9780 { "vpsrlw", { XM, Vex128, EXx } },
9e30b8e0
L
9781 },
9782 {
592a252b 9783 /* VEX_W_0FD2_P_2 */
9e30b8e0 9784 { "vpsrld", { XM, Vex128, EXx } },
9e30b8e0
L
9785 },
9786 {
592a252b 9787 /* VEX_W_0FD3_P_2 */
9e30b8e0 9788 { "vpsrlq", { XM, Vex128, EXx } },
9e30b8e0
L
9789 },
9790 {
592a252b 9791 /* VEX_W_0FD4_P_2 */
9e30b8e0 9792 { "vpaddq", { XM, Vex128, EXx } },
9e30b8e0
L
9793 },
9794 {
592a252b 9795 /* VEX_W_0FD5_P_2 */
9e30b8e0 9796 { "vpmullw", { XM, Vex128, EXx } },
9e30b8e0
L
9797 },
9798 {
592a252b 9799 /* VEX_W_0FD6_P_2 */
539f890d 9800 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
9801 },
9802 {
592a252b 9803 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 9804 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
9805 },
9806 {
592a252b 9807 /* VEX_W_0FD8_P_2 */
9e30b8e0 9808 { "vpsubusb", { XM, Vex128, EXx } },
9e30b8e0
L
9809 },
9810 {
592a252b 9811 /* VEX_W_0FD9_P_2 */
9e30b8e0 9812 { "vpsubusw", { XM, Vex128, EXx } },
9e30b8e0
L
9813 },
9814 {
592a252b 9815 /* VEX_W_0FDA_P_2 */
9e30b8e0 9816 { "vpminub", { XM, Vex128, EXx } },
9e30b8e0
L
9817 },
9818 {
592a252b 9819 /* VEX_W_0FDB_P_2 */
9e30b8e0 9820 { "vpand", { XM, Vex128, EXx } },
9e30b8e0
L
9821 },
9822 {
592a252b 9823 /* VEX_W_0FDC_P_2 */
9e30b8e0 9824 { "vpaddusb", { XM, Vex128, EXx } },
9e30b8e0
L
9825 },
9826 {
592a252b 9827 /* VEX_W_0FDD_P_2 */
9e30b8e0 9828 { "vpaddusw", { XM, Vex128, EXx } },
9e30b8e0
L
9829 },
9830 {
592a252b 9831 /* VEX_W_0FDE_P_2 */
9e30b8e0 9832 { "vpmaxub", { XM, Vex128, EXx } },
9e30b8e0
L
9833 },
9834 {
592a252b 9835 /* VEX_W_0FDF_P_2 */
9e30b8e0 9836 { "vpandn", { XM, Vex128, EXx } },
9e30b8e0
L
9837 },
9838 {
592a252b 9839 /* VEX_W_0FE0_P_2 */
9e30b8e0 9840 { "vpavgb", { XM, Vex128, EXx } },
9e30b8e0
L
9841 },
9842 {
592a252b 9843 /* VEX_W_0FE1_P_2 */
9e30b8e0 9844 { "vpsraw", { XM, Vex128, EXx } },
9e30b8e0
L
9845 },
9846 {
592a252b 9847 /* VEX_W_0FE2_P_2 */
9e30b8e0 9848 { "vpsrad", { XM, Vex128, EXx } },
9e30b8e0
L
9849 },
9850 {
592a252b 9851 /* VEX_W_0FE3_P_2 */
9e30b8e0 9852 { "vpavgw", { XM, Vex128, EXx } },
9e30b8e0
L
9853 },
9854 {
592a252b 9855 /* VEX_W_0FE4_P_2 */
9e30b8e0 9856 { "vpmulhuw", { XM, Vex128, EXx } },
9e30b8e0
L
9857 },
9858 {
592a252b 9859 /* VEX_W_0FE5_P_2 */
9e30b8e0 9860 { "vpmulhw", { XM, Vex128, EXx } },
9e30b8e0
L
9861 },
9862 {
592a252b 9863 /* VEX_W_0FE6_P_1 */
efdb52b7 9864 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
9865 },
9866 {
592a252b 9867 /* VEX_W_0FE6_P_2 */
a179a9fd 9868 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9869 },
9870 {
592a252b 9871 /* VEX_W_0FE6_P_3 */
a179a9fd 9872 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9873 },
9874 {
592a252b 9875 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 9876 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
9877 },
9878 {
592a252b 9879 /* VEX_W_0FE8_P_2 */
9e30b8e0 9880 { "vpsubsb", { XM, Vex128, EXx } },
9e30b8e0
L
9881 },
9882 {
592a252b 9883 /* VEX_W_0FE9_P_2 */
9e30b8e0 9884 { "vpsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9885 },
9886 {
592a252b 9887 /* VEX_W_0FEA_P_2 */
9e30b8e0 9888 { "vpminsw", { XM, Vex128, EXx } },
9e30b8e0
L
9889 },
9890 {
592a252b 9891 /* VEX_W_0FEB_P_2 */
9e30b8e0 9892 { "vpor", { XM, Vex128, EXx } },
9e30b8e0
L
9893 },
9894 {
592a252b 9895 /* VEX_W_0FEC_P_2 */
9e30b8e0 9896 { "vpaddsb", { XM, Vex128, EXx } },
9e30b8e0
L
9897 },
9898 {
592a252b 9899 /* VEX_W_0FED_P_2 */
9e30b8e0 9900 { "vpaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9901 },
9902 {
592a252b 9903 /* VEX_W_0FEE_P_2 */
9e30b8e0 9904 { "vpmaxsw", { XM, Vex128, EXx } },
9e30b8e0
L
9905 },
9906 {
592a252b 9907 /* VEX_W_0FEF_P_2 */
9e30b8e0 9908 { "vpxor", { XM, Vex128, EXx } },
9e30b8e0
L
9909 },
9910 {
592a252b 9911 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 9912 { "vlddqu", { XM, M } },
9e30b8e0
L
9913 },
9914 {
592a252b 9915 /* VEX_W_0FF1_P_2 */
9e30b8e0 9916 { "vpsllw", { XM, Vex128, EXx } },
9e30b8e0
L
9917 },
9918 {
592a252b 9919 /* VEX_W_0FF2_P_2 */
9e30b8e0 9920 { "vpslld", { XM, Vex128, EXx } },
9e30b8e0
L
9921 },
9922 {
592a252b 9923 /* VEX_W_0FF3_P_2 */
9e30b8e0 9924 { "vpsllq", { XM, Vex128, EXx } },
9e30b8e0
L
9925 },
9926 {
592a252b 9927 /* VEX_W_0FF4_P_2 */
9e30b8e0 9928 { "vpmuludq", { XM, Vex128, EXx } },
9e30b8e0
L
9929 },
9930 {
592a252b 9931 /* VEX_W_0FF5_P_2 */
9e30b8e0 9932 { "vpmaddwd", { XM, Vex128, EXx } },
9e30b8e0
L
9933 },
9934 {
592a252b 9935 /* VEX_W_0FF6_P_2 */
9e30b8e0 9936 { "vpsadbw", { XM, Vex128, EXx } },
9e30b8e0
L
9937 },
9938 {
592a252b 9939 /* VEX_W_0FF7_P_2 */
9e30b8e0 9940 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
9941 },
9942 {
592a252b 9943 /* VEX_W_0FF8_P_2 */
9e30b8e0 9944 { "vpsubb", { XM, Vex128, EXx } },
9e30b8e0
L
9945 },
9946 {
592a252b 9947 /* VEX_W_0FF9_P_2 */
9e30b8e0 9948 { "vpsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9949 },
9950 {
592a252b 9951 /* VEX_W_0FFA_P_2 */
9e30b8e0 9952 { "vpsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9953 },
9954 {
592a252b 9955 /* VEX_W_0FFB_P_2 */
9e30b8e0 9956 { "vpsubq", { XM, Vex128, EXx } },
9e30b8e0
L
9957 },
9958 {
592a252b 9959 /* VEX_W_0FFC_P_2 */
9e30b8e0 9960 { "vpaddb", { XM, Vex128, EXx } },
9e30b8e0
L
9961 },
9962 {
592a252b 9963 /* VEX_W_0FFD_P_2 */
9e30b8e0 9964 { "vpaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9965 },
9966 {
592a252b 9967 /* VEX_W_0FFE_P_2 */
9e30b8e0 9968 { "vpaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9969 },
9970 {
592a252b 9971 /* VEX_W_0F3800_P_2 */
9e30b8e0 9972 { "vpshufb", { XM, Vex128, EXx } },
9e30b8e0
L
9973 },
9974 {
592a252b 9975 /* VEX_W_0F3801_P_2 */
9e30b8e0 9976 { "vphaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9977 },
9978 {
592a252b 9979 /* VEX_W_0F3802_P_2 */
9e30b8e0 9980 { "vphaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9981 },
9982 {
592a252b 9983 /* VEX_W_0F3803_P_2 */
9e30b8e0 9984 { "vphaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9985 },
9986 {
592a252b 9987 /* VEX_W_0F3804_P_2 */
9e30b8e0 9988 { "vpmaddubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9989 },
9990 {
592a252b 9991 /* VEX_W_0F3805_P_2 */
9e30b8e0 9992 { "vphsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9993 },
9994 {
592a252b 9995 /* VEX_W_0F3806_P_2 */
9e30b8e0 9996 { "vphsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9997 },
9998 {
592a252b 9999 /* VEX_W_0F3807_P_2 */
9e30b8e0 10000 { "vphsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
10001 },
10002 {
592a252b 10003 /* VEX_W_0F3808_P_2 */
9e30b8e0 10004 { "vpsignb", { XM, Vex128, EXx } },
9e30b8e0
L
10005 },
10006 {
592a252b 10007 /* VEX_W_0F3809_P_2 */
9e30b8e0 10008 { "vpsignw", { XM, Vex128, EXx } },
9e30b8e0
L
10009 },
10010 {
592a252b 10011 /* VEX_W_0F380A_P_2 */
9e30b8e0 10012 { "vpsignd", { XM, Vex128, EXx } },
9e30b8e0
L
10013 },
10014 {
592a252b 10015 /* VEX_W_0F380B_P_2 */
9e30b8e0 10016 { "vpmulhrsw", { XM, Vex128, EXx } },
9e30b8e0
L
10017 },
10018 {
592a252b 10019 /* VEX_W_0F380C_P_2 */
9e30b8e0 10020 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
10021 },
10022 {
592a252b 10023 /* VEX_W_0F380D_P_2 */
9e30b8e0 10024 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
10025 },
10026 {
592a252b 10027 /* VEX_W_0F380E_P_2 */
9e30b8e0 10028 { "vtestps", { XM, EXx } },
9e30b8e0
L
10029 },
10030 {
592a252b 10031 /* VEX_W_0F380F_P_2 */
9e30b8e0 10032 { "vtestpd", { XM, EXx } },
9e30b8e0
L
10033 },
10034 {
592a252b 10035 /* VEX_W_0F3817_P_2 */
9e30b8e0 10036 { "vptest", { XM, EXx } },
9e30b8e0 10037 },
bcf2684f 10038 {
592a252b 10039 /* VEX_W_0F3818_P_2_M_0 */
bcf2684f 10040 { "vbroadcastss", { XM, Md } },
bcf2684f 10041 },
9e30b8e0 10042 {
592a252b 10043 /* VEX_W_0F3819_P_2_M_0 */
9e30b8e0 10044 { "vbroadcastsd", { XM, Mq } },
9e30b8e0
L
10045 },
10046 {
592a252b 10047 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 10048 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
10049 },
10050 {
592a252b 10051 /* VEX_W_0F381C_P_2 */
9e30b8e0 10052 { "vpabsb", { XM, EXx } },
9e30b8e0
L
10053 },
10054 {
592a252b 10055 /* VEX_W_0F381D_P_2 */
9e30b8e0 10056 { "vpabsw", { XM, EXx } },
9e30b8e0
L
10057 },
10058 {
592a252b 10059 /* VEX_W_0F381E_P_2 */
9e30b8e0 10060 { "vpabsd", { XM, EXx } },
9e30b8e0
L
10061 },
10062 {
592a252b 10063 /* VEX_W_0F3820_P_2 */
9e30b8e0 10064 { "vpmovsxbw", { XM, EXq } },
9e30b8e0
L
10065 },
10066 {
592a252b 10067 /* VEX_W_0F3821_P_2 */
9e30b8e0 10068 { "vpmovsxbd", { XM, EXd } },
9e30b8e0
L
10069 },
10070 {
592a252b 10071 /* VEX_W_0F3822_P_2 */
9e30b8e0 10072 { "vpmovsxbq", { XM, EXw } },
9e30b8e0
L
10073 },
10074 {
592a252b 10075 /* VEX_W_0F3823_P_2 */
9e30b8e0 10076 { "vpmovsxwd", { XM, EXq } },
9e30b8e0
L
10077 },
10078 {
592a252b 10079 /* VEX_W_0F3824_P_2 */
9e30b8e0 10080 { "vpmovsxwq", { XM, EXd } },
9e30b8e0
L
10081 },
10082 {
592a252b 10083 /* VEX_W_0F3825_P_2 */
9e30b8e0 10084 { "vpmovsxdq", { XM, EXq } },
9e30b8e0
L
10085 },
10086 {
592a252b 10087 /* VEX_W_0F3828_P_2 */
9e30b8e0 10088 { "vpmuldq", { XM, Vex128, EXx } },
9e30b8e0
L
10089 },
10090 {
592a252b 10091 /* VEX_W_0F3829_P_2 */
9e30b8e0 10092 { "vpcmpeqq", { XM, Vex128, EXx } },
9e30b8e0
L
10093 },
10094 {
592a252b 10095 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 10096 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
10097 },
10098 {
592a252b 10099 /* VEX_W_0F382B_P_2 */
9e30b8e0 10100 { "vpackusdw", { XM, Vex128, EXx } },
9e30b8e0 10101 },
53aa04a0 10102 {
592a252b 10103 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 10104 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
10105 },
10106 {
592a252b 10107 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 10108 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
10109 },
10110 {
592a252b 10111 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 10112 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
10113 },
10114 {
592a252b 10115 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 10116 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 10117 },
9e30b8e0 10118 {
592a252b 10119 /* VEX_W_0F3830_P_2 */
9e30b8e0 10120 { "vpmovzxbw", { XM, EXq } },
9e30b8e0
L
10121 },
10122 {
592a252b 10123 /* VEX_W_0F3831_P_2 */
9e30b8e0 10124 { "vpmovzxbd", { XM, EXd } },
9e30b8e0
L
10125 },
10126 {
592a252b 10127 /* VEX_W_0F3832_P_2 */
9e30b8e0 10128 { "vpmovzxbq", { XM, EXw } },
9e30b8e0
L
10129 },
10130 {
592a252b 10131 /* VEX_W_0F3833_P_2 */
9e30b8e0 10132 { "vpmovzxwd", { XM, EXq } },
9e30b8e0
L
10133 },
10134 {
592a252b 10135 /* VEX_W_0F3834_P_2 */
9e30b8e0 10136 { "vpmovzxwq", { XM, EXd } },
9e30b8e0
L
10137 },
10138 {
592a252b 10139 /* VEX_W_0F3835_P_2 */
9e30b8e0 10140 { "vpmovzxdq", { XM, EXq } },
9e30b8e0
L
10141 },
10142 {
592a252b 10143 /* VEX_W_0F3837_P_2 */
9e30b8e0 10144 { "vpcmpgtq", { XM, Vex128, EXx } },
9e30b8e0
L
10145 },
10146 {
592a252b 10147 /* VEX_W_0F3838_P_2 */
9e30b8e0 10148 { "vpminsb", { XM, Vex128, EXx } },
9e30b8e0
L
10149 },
10150 {
592a252b 10151 /* VEX_W_0F3839_P_2 */
9e30b8e0 10152 { "vpminsd", { XM, Vex128, EXx } },
9e30b8e0
L
10153 },
10154 {
592a252b 10155 /* VEX_W_0F383A_P_2 */
9e30b8e0 10156 { "vpminuw", { XM, Vex128, EXx } },
9e30b8e0
L
10157 },
10158 {
592a252b 10159 /* VEX_W_0F383B_P_2 */
9e30b8e0 10160 { "vpminud", { XM, Vex128, EXx } },
9e30b8e0
L
10161 },
10162 {
592a252b 10163 /* VEX_W_0F383C_P_2 */
9e30b8e0 10164 { "vpmaxsb", { XM, Vex128, EXx } },
9e30b8e0
L
10165 },
10166 {
592a252b 10167 /* VEX_W_0F383D_P_2 */
9e30b8e0 10168 { "vpmaxsd", { XM, Vex128, EXx } },
9e30b8e0
L
10169 },
10170 {
592a252b 10171 /* VEX_W_0F383E_P_2 */
9e30b8e0 10172 { "vpmaxuw", { XM, Vex128, EXx } },
9e30b8e0
L
10173 },
10174 {
592a252b 10175 /* VEX_W_0F383F_P_2 */
9e30b8e0 10176 { "vpmaxud", { XM, Vex128, EXx } },
9e30b8e0
L
10177 },
10178 {
592a252b 10179 /* VEX_W_0F3840_P_2 */
9e30b8e0 10180 { "vpmulld", { XM, Vex128, EXx } },
9e30b8e0
L
10181 },
10182 {
592a252b 10183 /* VEX_W_0F3841_P_2 */
9e30b8e0 10184 { "vphminposuw", { XM, EXx } },
9e30b8e0
L
10185 },
10186 {
592a252b 10187 /* VEX_W_0F38DB_P_2 */
9e30b8e0 10188 { "vaesimc", { XM, EXx } },
9e30b8e0
L
10189 },
10190 {
592a252b 10191 /* VEX_W_0F38DC_P_2 */
9e30b8e0 10192 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
10193 },
10194 {
592a252b 10195 /* VEX_W_0F38DD_P_2 */
9e30b8e0 10196 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10197 },
10198 {
592a252b 10199 /* VEX_W_0F38DE_P_2 */
9e30b8e0 10200 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10201 },
10202 {
592a252b 10203 /* VEX_W_0F38DF_P_2 */
9e30b8e0 10204 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0
L
10205 },
10206 {
592a252b 10207 /* VEX_W_0F3A04_P_2 */
9e30b8e0 10208 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10209 },
10210 {
592a252b 10211 /* VEX_W_0F3A05_P_2 */
9e30b8e0 10212 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10213 },
10214 {
592a252b 10215 /* VEX_W_0F3A06_P_2 */
9e30b8e0 10216 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10217 },
10218 {
592a252b 10219 /* VEX_W_0F3A08_P_2 */
9e30b8e0 10220 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10221 },
10222 {
592a252b 10223 /* VEX_W_0F3A09_P_2 */
9e30b8e0 10224 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10225 },
10226 {
592a252b 10227 /* VEX_W_0F3A0A_P_2 */
539f890d 10228 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10229 },
10230 {
592a252b 10231 /* VEX_W_0F3A0B_P_2 */
539f890d 10232 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10233 },
10234 {
592a252b 10235 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 10236 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10237 },
10238 {
592a252b 10239 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 10240 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10241 },
10242 {
592a252b 10243 /* VEX_W_0F3A0E_P_2 */
9e30b8e0 10244 { "vpblendw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10245 },
10246 {
592a252b 10247 /* VEX_W_0F3A0F_P_2 */
9e30b8e0 10248 { "vpalignr", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10249 },
10250 {
592a252b 10251 /* VEX_W_0F3A14_P_2 */
9e30b8e0 10252 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10253 },
10254 {
592a252b 10255 /* VEX_W_0F3A15_P_2 */
9e30b8e0 10256 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10257 },
10258 {
592a252b 10259 /* VEX_W_0F3A18_P_2 */
9e30b8e0 10260 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10261 },
10262 {
592a252b 10263 /* VEX_W_0F3A19_P_2 */
9e30b8e0 10264 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10265 },
10266 {
592a252b 10267 /* VEX_W_0F3A20_P_2 */
9e30b8e0 10268 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10269 },
10270 {
592a252b 10271 /* VEX_W_0F3A21_P_2 */
9e30b8e0 10272 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0
L
10273 },
10274 {
592a252b 10275 /* VEX_W_0F3A40_P_2 */
9e30b8e0 10276 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10277 },
10278 {
592a252b 10279 /* VEX_W_0F3A41_P_2 */
9e30b8e0 10280 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10281 },
10282 {
592a252b 10283 /* VEX_W_0F3A42_P_2 */
9e30b8e0 10284 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10285 },
10286 {
592a252b 10287 /* VEX_W_0F3A44_P_2 */
9e30b8e0 10288 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10289 },
a683cc34 10290 {
592a252b 10291 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
10292 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10293 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10294 },
10295 {
592a252b 10296 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
10297 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10298 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10299 },
9e30b8e0 10300 {
592a252b 10301 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 10302 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10303 },
10304 {
592a252b 10305 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 10306 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10307 },
10308 {
592a252b 10309 /* VEX_W_0F3A4C_P_2 */
9e30b8e0 10310 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
9e30b8e0
L
10311 },
10312 {
592a252b 10313 /* VEX_W_0F3A60_P_2 */
9e30b8e0 10314 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
10315 },
10316 {
592a252b 10317 /* VEX_W_0F3A61_P_2 */
9e30b8e0 10318 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
10319 },
10320 {
592a252b 10321 /* VEX_W_0F3A62_P_2 */
9e30b8e0 10322 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
10323 },
10324 {
592a252b 10325 /* VEX_W_0F3A63_P_2 */
9e30b8e0 10326 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
10327 },
10328 {
592a252b 10329 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 10330 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0
L
10331 },
10332};
10333
10334static const struct dis386 mod_table[][2] = {
10335 {
10336 /* MOD_8D */
10337 { "leaS", { Gv, M } },
9e30b8e0
L
10338 },
10339 {
10340 /* MOD_0F01_REG_0 */
10341 { X86_64_TABLE (X86_64_0F01_REG_0) },
10342 { RM_TABLE (RM_0F01_REG_0) },
10343 },
10344 {
10345 /* MOD_0F01_REG_1 */
10346 { X86_64_TABLE (X86_64_0F01_REG_1) },
10347 { RM_TABLE (RM_0F01_REG_1) },
10348 },
10349 {
10350 /* MOD_0F01_REG_2 */
10351 { X86_64_TABLE (X86_64_0F01_REG_2) },
10352 { RM_TABLE (RM_0F01_REG_2) },
10353 },
10354 {
10355 /* MOD_0F01_REG_3 */
10356 { X86_64_TABLE (X86_64_0F01_REG_3) },
10357 { RM_TABLE (RM_0F01_REG_3) },
10358 },
10359 {
10360 /* MOD_0F01_REG_7 */
10361 { "invlpg", { Mb } },
10362 { RM_TABLE (RM_0F01_REG_7) },
10363 },
10364 {
10365 /* MOD_0F12_PREFIX_0 */
10366 { "movlps", { XM, EXq } },
10367 { "movhlps", { XM, EXq } },
10368 },
10369 {
10370 /* MOD_0F13 */
10371 { "movlpX", { EXq, XM } },
9e30b8e0
L
10372 },
10373 {
10374 /* MOD_0F16_PREFIX_0 */
10375 { "movhps", { XM, EXq } },
10376 { "movlhps", { XM, EXq } },
10377 },
10378 {
10379 /* MOD_0F17 */
10380 { "movhpX", { EXq, XM } },
9e30b8e0
L
10381 },
10382 {
10383 /* MOD_0F18_REG_0 */
10384 { "prefetchnta", { Mb } },
9e30b8e0
L
10385 },
10386 {
10387 /* MOD_0F18_REG_1 */
10388 { "prefetcht0", { Mb } },
9e30b8e0
L
10389 },
10390 {
10391 /* MOD_0F18_REG_2 */
10392 { "prefetcht1", { Mb } },
9e30b8e0
L
10393 },
10394 {
10395 /* MOD_0F18_REG_3 */
10396 { "prefetcht2", { Mb } },
9e30b8e0
L
10397 },
10398 {
10399 /* MOD_0F20 */
592d1631 10400 { Bad_Opcode },
9e30b8e0
L
10401 { "movZ", { Rm, Cm } },
10402 },
10403 {
10404 /* MOD_0F21 */
592d1631 10405 { Bad_Opcode },
9e30b8e0
L
10406 { "movZ", { Rm, Dm } },
10407 },
10408 {
10409 /* MOD_0F22 */
592d1631 10410 { Bad_Opcode },
9e30b8e0 10411 { "movZ", { Cm, Rm } },
b844680a
L
10412 },
10413 {
92fddf8e 10414 /* MOD_0F23 */
592d1631 10415 { Bad_Opcode },
92fddf8e 10416 { "movZ", { Dm, Rm } },
b844680a
L
10417 },
10418 {
92fddf8e 10419 /* MOD_0F24 */
592d1631 10420 { Bad_Opcode },
92fddf8e 10421 { "movL", { Rd, Td } },
b844680a
L
10422 },
10423 {
92fddf8e 10424 /* MOD_0F26 */
592d1631 10425 { Bad_Opcode },
92fddf8e 10426 { "movL", { Td, Rd } },
b844680a 10427 },
75c135a8
L
10428 {
10429 /* MOD_0F2B_PREFIX_0 */
4ee52178 10430 {"movntps", { Mx, XM } },
75c135a8
L
10431 },
10432 {
10433 /* MOD_0F2B_PREFIX_1 */
4ee52178 10434 {"movntss", { Md, XM } },
75c135a8
L
10435 },
10436 {
10437 /* MOD_0F2B_PREFIX_2 */
4ee52178 10438 {"movntpd", { Mx, XM } },
75c135a8
L
10439 },
10440 {
10441 /* MOD_0F2B_PREFIX_3 */
4ee52178 10442 {"movntsd", { Mq, XM } },
75c135a8
L
10443 },
10444 {
10445 /* MOD_0F51 */
592d1631 10446 { Bad_Opcode },
75c135a8
L
10447 { "movmskpX", { Gdq, XS } },
10448 },
b844680a 10449 {
1ceb70f8 10450 /* MOD_0F71_REG_2 */
592d1631 10451 { Bad_Opcode },
4e7d34a6 10452 { "psrlw", { MS, Ib } },
b844680a
L
10453 },
10454 {
1ceb70f8 10455 /* MOD_0F71_REG_4 */
592d1631 10456 { Bad_Opcode },
4e7d34a6 10457 { "psraw", { MS, Ib } },
b844680a
L
10458 },
10459 {
1ceb70f8 10460 /* MOD_0F71_REG_6 */
592d1631 10461 { Bad_Opcode },
4e7d34a6 10462 { "psllw", { MS, Ib } },
b844680a
L
10463 },
10464 {
1ceb70f8 10465 /* MOD_0F72_REG_2 */
592d1631 10466 { Bad_Opcode },
4e7d34a6 10467 { "psrld", { MS, Ib } },
b844680a
L
10468 },
10469 {
1ceb70f8 10470 /* MOD_0F72_REG_4 */
592d1631 10471 { Bad_Opcode },
4e7d34a6 10472 { "psrad", { MS, Ib } },
b844680a
L
10473 },
10474 {
1ceb70f8 10475 /* MOD_0F72_REG_6 */
592d1631 10476 { Bad_Opcode },
4e7d34a6 10477 { "pslld", { MS, Ib } },
b844680a
L
10478 },
10479 {
1ceb70f8 10480 /* MOD_0F73_REG_2 */
592d1631 10481 { Bad_Opcode },
4e7d34a6 10482 { "psrlq", { MS, Ib } },
b844680a
L
10483 },
10484 {
1ceb70f8 10485 /* MOD_0F73_REG_3 */
592d1631 10486 { Bad_Opcode },
c0f3af97
L
10487 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10488 },
10489 {
10490 /* MOD_0F73_REG_6 */
592d1631 10491 { Bad_Opcode },
c0f3af97
L
10492 { "psllq", { MS, Ib } },
10493 },
10494 {
10495 /* MOD_0F73_REG_7 */
592d1631 10496 { Bad_Opcode },
c0f3af97
L
10497 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10498 },
10499 {
10500 /* MOD_0FAE_REG_0 */
eacc9c89 10501 { "fxsave", { FXSAVE } },
c7b8aa3a 10502 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10503 },
10504 {
10505 /* MOD_0FAE_REG_1 */
eacc9c89 10506 { "fxrstor", { FXSAVE } },
c7b8aa3a 10507 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10508 },
10509 {
10510 /* MOD_0FAE_REG_2 */
10511 { "ldmxcsr", { Md } },
c7b8aa3a 10512 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10513 },
10514 {
10515 /* MOD_0FAE_REG_3 */
10516 { "stmxcsr", { Md } },
c7b8aa3a 10517 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10518 },
10519 {
10520 /* MOD_0FAE_REG_4 */
73bb6729 10521 { "xsave", { FXSAVE } },
c0f3af97
L
10522 },
10523 {
10524 /* MOD_0FAE_REG_5 */
73bb6729 10525 { "xrstor", { FXSAVE } },
c0f3af97
L
10526 { RM_TABLE (RM_0FAE_REG_5) },
10527 },
10528 {
10529 /* MOD_0FAE_REG_6 */
c7b8aa3a 10530 { "xsaveopt", { FXSAVE } },
c0f3af97
L
10531 { RM_TABLE (RM_0FAE_REG_6) },
10532 },
10533 {
10534 /* MOD_0FAE_REG_7 */
10535 { "clflush", { Mb } },
10536 { RM_TABLE (RM_0FAE_REG_7) },
10537 },
10538 {
10539 /* MOD_0FB2 */
10540 { "lssS", { Gv, Mp } },
c0f3af97
L
10541 },
10542 {
10543 /* MOD_0FB4 */
10544 { "lfsS", { Gv, Mp } },
c0f3af97
L
10545 },
10546 {
10547 /* MOD_0FB5 */
10548 { "lgsS", { Gv, Mp } },
c0f3af97
L
10549 },
10550 {
10551 /* MOD_0FC7_REG_6 */
10552 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 10553 { "rdrand", { Ev } },
c0f3af97
L
10554 },
10555 {
10556 /* MOD_0FC7_REG_7 */
10557 { "vmptrst", { Mq } },
c0f3af97
L
10558 },
10559 {
10560 /* MOD_0FD7 */
592d1631 10561 { Bad_Opcode },
c0f3af97
L
10562 { "pmovmskb", { Gdq, MS } },
10563 },
10564 {
10565 /* MOD_0FE7_PREFIX_2 */
10566 { "movntdq", { Mx, XM } },
c0f3af97
L
10567 },
10568 {
10569 /* MOD_0FF0_PREFIX_3 */
10570 { "lddqu", { XM, M } },
c0f3af97
L
10571 },
10572 {
10573 /* MOD_0F382A_PREFIX_2 */
10574 { "movntdqa", { XM, Mx } },
c0f3af97
L
10575 },
10576 {
10577 /* MOD_62_32BIT */
10578 { "bound{S|}", { Gv, Ma } },
c0f3af97
L
10579 },
10580 {
10581 /* MOD_C4_32BIT */
10582 { "lesS", { Gv, Mp } },
10583 { VEX_C4_TABLE (VEX_0F) },
10584 },
10585 {
10586 /* MOD_C5_32BIT */
10587 { "ldsS", { Gv, Mp } },
10588 { VEX_C5_TABLE (VEX_0F) },
10589 },
10590 {
592a252b
L
10591 /* MOD_VEX_0F12_PREFIX_0 */
10592 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10593 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10594 },
10595 {
592a252b
L
10596 /* MOD_VEX_0F13 */
10597 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10598 },
10599 {
592a252b
L
10600 /* MOD_VEX_0F16_PREFIX_0 */
10601 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10602 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10603 },
10604 {
592a252b
L
10605 /* MOD_VEX_0F17 */
10606 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10607 },
10608 {
592a252b
L
10609 /* MOD_VEX_0F2B */
10610 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
10611 },
10612 {
592a252b 10613 /* MOD_VEX_0F50 */
592d1631 10614 { Bad_Opcode },
592a252b 10615 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
10616 },
10617 {
592a252b 10618 /* MOD_VEX_0F71_REG_2 */
592d1631 10619 { Bad_Opcode },
592a252b 10620 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10621 },
10622 {
592a252b 10623 /* MOD_VEX_0F71_REG_4 */
592d1631 10624 { Bad_Opcode },
592a252b 10625 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10626 },
10627 {
592a252b 10628 /* MOD_VEX_0F71_REG_6 */
592d1631 10629 { Bad_Opcode },
592a252b 10630 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10631 },
10632 {
592a252b 10633 /* MOD_VEX_0F72_REG_2 */
592d1631 10634 { Bad_Opcode },
592a252b 10635 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10636 },
d8faab4e 10637 {
592a252b 10638 /* MOD_VEX_0F72_REG_4 */
592d1631 10639 { Bad_Opcode },
592a252b 10640 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10641 },
10642 {
592a252b 10643 /* MOD_VEX_0F72_REG_6 */
592d1631 10644 { Bad_Opcode },
592a252b 10645 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10646 },
876d4bfa 10647 {
592a252b 10648 /* MOD_VEX_0F73_REG_2 */
592d1631 10649 { Bad_Opcode },
592a252b 10650 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10651 },
10652 {
592a252b 10653 /* MOD_VEX_0F73_REG_3 */
592d1631 10654 { Bad_Opcode },
592a252b 10655 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10656 },
10657 {
592a252b 10658 /* MOD_VEX_0F73_REG_6 */
592d1631 10659 { Bad_Opcode },
592a252b 10660 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10661 },
10662 {
592a252b 10663 /* MOD_VEX_0F73_REG_7 */
592d1631 10664 { Bad_Opcode },
592a252b 10665 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
10666 },
10667 {
592a252b
L
10668 /* MOD_VEX_0FAE_REG_2 */
10669 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10670 },
bbedc832 10671 {
592a252b
L
10672 /* MOD_VEX_0FAE_REG_3 */
10673 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10674 },
144c41d9 10675 {
592a252b 10676 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10677 { Bad_Opcode },
592a252b 10678 { VEX_LEN_TABLE (VEX_LEN_0FD7_P_2_M_1) },
144c41d9 10679 },
1afd85e3 10680 {
592a252b
L
10681 /* MOD_VEX_0FE7_PREFIX_2 */
10682 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
10683 },
10684 {
592a252b
L
10685 /* MOD_VEX_0FF0_PREFIX_3 */
10686 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e
L
10687 },
10688 {
592a252b
L
10689 /* MOD_VEX_0F3818_PREFIX_2 */
10690 { VEX_W_TABLE (VEX_W_0F3818_P_2_M_0) },
1afd85e3 10691 },
75c135a8 10692 {
592a252b
L
10693 /* MOD_VEX_0F3819_PREFIX_2 */
10694 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2_M_0) },
75c135a8
L
10695 },
10696 {
592a252b
L
10697 /* MOD_VEX_0F381A_PREFIX_2 */
10698 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10699 },
1afd85e3 10700 {
592a252b
L
10701 /* MOD_VEX_0F382A_PREFIX_2 */
10702 { VEX_LEN_TABLE (VEX_LEN_0F382A_P_2_M_0) },
1afd85e3 10703 },
75c135a8 10704 {
592a252b
L
10705 /* MOD_VEX_0F382C_PREFIX_2 */
10706 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10707 },
1afd85e3 10708 {
592a252b
L
10709 /* MOD_VEX_0F382D_PREFIX_2 */
10710 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10711 },
10712 {
592a252b
L
10713 /* MOD_VEX_0F382E_PREFIX_2 */
10714 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10715 },
10716 {
592a252b
L
10717 /* MOD_VEX_0F382F_PREFIX_2 */
10718 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10719 },
b844680a
L
10720};
10721
1ceb70f8 10722static const struct dis386 rm_table[][8] = {
b844680a 10723 {
1ceb70f8 10724 /* RM_0F01_REG_0 */
592d1631 10725 { Bad_Opcode },
b844680a
L
10726 { "vmcall", { Skip_MODRM } },
10727 { "vmlaunch", { Skip_MODRM } },
10728 { "vmresume", { Skip_MODRM } },
10729 { "vmxoff", { Skip_MODRM } },
b844680a
L
10730 },
10731 {
1ceb70f8 10732 /* RM_0F01_REG_1 */
b844680a
L
10733 { "monitor", { { OP_Monitor, 0 } } },
10734 { "mwait", { { OP_Mwait, 0 } } },
b844680a 10735 },
475a2301
L
10736 {
10737 /* RM_0F01_REG_2 */
10738 { "xgetbv", { Skip_MODRM } },
10739 { "xsetbv", { Skip_MODRM } },
475a2301 10740 },
b844680a 10741 {
1ceb70f8 10742 /* RM_0F01_REG_3 */
4e7d34a6
L
10743 { "vmrun", { Skip_MODRM } },
10744 { "vmmcall", { Skip_MODRM } },
10745 { "vmload", { Skip_MODRM } },
10746 { "vmsave", { Skip_MODRM } },
10747 { "stgi", { Skip_MODRM } },
10748 { "clgi", { Skip_MODRM } },
10749 { "skinit", { Skip_MODRM } },
10750 { "invlpga", { Skip_MODRM } },
10751 },
10752 {
1ceb70f8 10753 /* RM_0F01_REG_7 */
4e7d34a6
L
10754 { "swapgs", { Skip_MODRM } },
10755 { "rdtscp", { Skip_MODRM } },
b844680a
L
10756 },
10757 {
1ceb70f8 10758 /* RM_0FAE_REG_5 */
4e7d34a6 10759 { "lfence", { Skip_MODRM } },
b844680a
L
10760 },
10761 {
1ceb70f8 10762 /* RM_0FAE_REG_6 */
4e7d34a6 10763 { "mfence", { Skip_MODRM } },
b844680a 10764 },
bbedc832 10765 {
1ceb70f8 10766 /* RM_0FAE_REG_7 */
4e7d34a6 10767 { "sfence", { Skip_MODRM } },
144c41d9 10768 },
b844680a
L
10769};
10770
c608c12e
AM
10771#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10772
f16cd0d5
L
10773/* We use the high bit to indicate different name for the same
10774 prefix. */
10775#define ADDR16_PREFIX (0x67 | 0x100)
10776#define ADDR32_PREFIX (0x67 | 0x200)
10777#define DATA16_PREFIX (0x66 | 0x100)
10778#define DATA32_PREFIX (0x66 | 0x200)
10779#define REP_PREFIX (0xf3 | 0x100)
10780
10781static int
26ca5450 10782ckprefix (void)
252b5132 10783{
f16cd0d5 10784 int newrex, i, length;
52b15da3 10785 rex = 0;
c0f3af97 10786 rex_ignored = 0;
252b5132 10787 prefixes = 0;
7d421014 10788 used_prefixes = 0;
52b15da3 10789 rex_used = 0;
f16cd0d5
L
10790 last_lock_prefix = -1;
10791 last_repz_prefix = -1;
10792 last_repnz_prefix = -1;
10793 last_data_prefix = -1;
10794 last_addr_prefix = -1;
10795 last_rex_prefix = -1;
10796 last_seg_prefix = -1;
f310f33d
L
10797 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10798 all_prefixes[i] = 0;
10799 i = 0;
f16cd0d5
L
10800 length = 0;
10801 /* The maximum instruction length is 15bytes. */
10802 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
10803 {
10804 FETCH_DATA (the_info, codep + 1);
52b15da3 10805 newrex = 0;
252b5132
RH
10806 switch (*codep)
10807 {
52b15da3
JH
10808 /* REX prefixes family. */
10809 case 0x40:
10810 case 0x41:
10811 case 0x42:
10812 case 0x43:
10813 case 0x44:
10814 case 0x45:
10815 case 0x46:
10816 case 0x47:
10817 case 0x48:
10818 case 0x49:
10819 case 0x4a:
10820 case 0x4b:
10821 case 0x4c:
10822 case 0x4d:
10823 case 0x4e:
10824 case 0x4f:
f16cd0d5
L
10825 if (address_mode == mode_64bit)
10826 newrex = *codep;
10827 else
10828 return 1;
10829 last_rex_prefix = i;
52b15da3 10830 break;
252b5132
RH
10831 case 0xf3:
10832 prefixes |= PREFIX_REPZ;
f16cd0d5 10833 last_repz_prefix = i;
252b5132
RH
10834 break;
10835 case 0xf2:
10836 prefixes |= PREFIX_REPNZ;
f16cd0d5 10837 last_repnz_prefix = i;
252b5132
RH
10838 break;
10839 case 0xf0:
10840 prefixes |= PREFIX_LOCK;
f16cd0d5 10841 last_lock_prefix = i;
252b5132
RH
10842 break;
10843 case 0x2e:
10844 prefixes |= PREFIX_CS;
f16cd0d5 10845 last_seg_prefix = i;
252b5132
RH
10846 break;
10847 case 0x36:
10848 prefixes |= PREFIX_SS;
f16cd0d5 10849 last_seg_prefix = i;
252b5132
RH
10850 break;
10851 case 0x3e:
10852 prefixes |= PREFIX_DS;
f16cd0d5 10853 last_seg_prefix = i;
252b5132
RH
10854 break;
10855 case 0x26:
10856 prefixes |= PREFIX_ES;
f16cd0d5 10857 last_seg_prefix = i;
252b5132
RH
10858 break;
10859 case 0x64:
10860 prefixes |= PREFIX_FS;
f16cd0d5 10861 last_seg_prefix = i;
252b5132
RH
10862 break;
10863 case 0x65:
10864 prefixes |= PREFIX_GS;
f16cd0d5 10865 last_seg_prefix = i;
252b5132
RH
10866 break;
10867 case 0x66:
10868 prefixes |= PREFIX_DATA;
f16cd0d5 10869 last_data_prefix = i;
252b5132
RH
10870 break;
10871 case 0x67:
10872 prefixes |= PREFIX_ADDR;
f16cd0d5 10873 last_addr_prefix = i;
252b5132 10874 break;
5076851f 10875 case FWAIT_OPCODE:
252b5132
RH
10876 /* fwait is really an instruction. If there are prefixes
10877 before the fwait, they belong to the fwait, *not* to the
10878 following instruction. */
3e7d61b2 10879 if (prefixes || rex)
252b5132
RH
10880 {
10881 prefixes |= PREFIX_FWAIT;
10882 codep++;
f16cd0d5 10883 return 1;
252b5132
RH
10884 }
10885 prefixes = PREFIX_FWAIT;
10886 break;
10887 default:
f16cd0d5 10888 return 1;
252b5132 10889 }
52b15da3
JH
10890 /* Rex is ignored when followed by another prefix. */
10891 if (rex)
10892 {
3e7d61b2 10893 rex_used = rex;
f16cd0d5 10894 return 1;
52b15da3 10895 }
f16cd0d5
L
10896 if (*codep != FWAIT_OPCODE)
10897 all_prefixes[i++] = *codep;
52b15da3 10898 rex = newrex;
252b5132 10899 codep++;
f16cd0d5
L
10900 length++;
10901 }
10902 return 0;
10903}
10904
10905static int
10906seg_prefix (int pref)
10907{
10908 switch (pref)
10909 {
10910 case 0x2e:
10911 return PREFIX_CS;
10912 case 0x36:
10913 return PREFIX_SS;
10914 case 0x3e:
10915 return PREFIX_DS;
10916 case 0x26:
10917 return PREFIX_ES;
10918 case 0x64:
10919 return PREFIX_FS;
10920 case 0x65:
10921 return PREFIX_GS;
10922 default:
10923 return 0;
252b5132
RH
10924 }
10925}
10926
7d421014
ILT
10927/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10928 prefix byte. */
10929
10930static const char *
26ca5450 10931prefix_name (int pref, int sizeflag)
7d421014 10932{
0003779b
L
10933 static const char *rexes [16] =
10934 {
10935 "rex", /* 0x40 */
10936 "rex.B", /* 0x41 */
10937 "rex.X", /* 0x42 */
10938 "rex.XB", /* 0x43 */
10939 "rex.R", /* 0x44 */
10940 "rex.RB", /* 0x45 */
10941 "rex.RX", /* 0x46 */
10942 "rex.RXB", /* 0x47 */
10943 "rex.W", /* 0x48 */
10944 "rex.WB", /* 0x49 */
10945 "rex.WX", /* 0x4a */
10946 "rex.WXB", /* 0x4b */
10947 "rex.WR", /* 0x4c */
10948 "rex.WRB", /* 0x4d */
10949 "rex.WRX", /* 0x4e */
10950 "rex.WRXB", /* 0x4f */
10951 };
10952
7d421014
ILT
10953 switch (pref)
10954 {
52b15da3
JH
10955 /* REX prefixes family. */
10956 case 0x40:
52b15da3 10957 case 0x41:
52b15da3 10958 case 0x42:
52b15da3 10959 case 0x43:
52b15da3 10960 case 0x44:
52b15da3 10961 case 0x45:
52b15da3 10962 case 0x46:
52b15da3 10963 case 0x47:
52b15da3 10964 case 0x48:
52b15da3 10965 case 0x49:
52b15da3 10966 case 0x4a:
52b15da3 10967 case 0x4b:
52b15da3 10968 case 0x4c:
52b15da3 10969 case 0x4d:
52b15da3 10970 case 0x4e:
52b15da3 10971 case 0x4f:
0003779b 10972 return rexes [pref - 0x40];
7d421014
ILT
10973 case 0xf3:
10974 return "repz";
10975 case 0xf2:
10976 return "repnz";
10977 case 0xf0:
10978 return "lock";
10979 case 0x2e:
10980 return "cs";
10981 case 0x36:
10982 return "ss";
10983 case 0x3e:
10984 return "ds";
10985 case 0x26:
10986 return "es";
10987 case 0x64:
10988 return "fs";
10989 case 0x65:
10990 return "gs";
10991 case 0x66:
10992 return (sizeflag & DFLAG) ? "data16" : "data32";
10993 case 0x67:
cb712a9e 10994 if (address_mode == mode_64bit)
db6eb5be 10995 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10996 else
2888cb7a 10997 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10998 case FWAIT_OPCODE:
10999 return "fwait";
f16cd0d5
L
11000 case ADDR16_PREFIX:
11001 return "addr16";
11002 case ADDR32_PREFIX:
11003 return "addr32";
11004 case DATA16_PREFIX:
11005 return "data16";
11006 case DATA32_PREFIX:
11007 return "data32";
11008 case REP_PREFIX:
11009 return "rep";
7d421014
ILT
11010 default:
11011 return NULL;
11012 }
11013}
11014
ce518a5f
L
11015static char op_out[MAX_OPERANDS][100];
11016static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11017static int two_source_ops;
ce518a5f
L
11018static bfd_vma op_address[MAX_OPERANDS];
11019static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11020static bfd_vma start_pc;
ce518a5f 11021
252b5132
RH
11022/*
11023 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11024 * (see topic "Redundant prefixes" in the "Differences from 8086"
11025 * section of the "Virtual 8086 Mode" chapter.)
11026 * 'pc' should be the address of this instruction, it will
11027 * be used to print the target address if this is a relative jump or call
11028 * The function returns the length of this instruction in bytes.
11029 */
11030
252b5132 11031static char intel_syntax;
9d141669 11032static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11033static char open_char;
11034static char close_char;
11035static char separator_char;
11036static char scale_char;
11037
e396998b
AM
11038/* Here for backwards compatibility. When gdb stops using
11039 print_insn_i386_att and print_insn_i386_intel these functions can
11040 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11041int
26ca5450 11042print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11043{
11044 intel_syntax = 0;
e396998b
AM
11045
11046 return print_insn (pc, info);
252b5132
RH
11047}
11048
11049int
26ca5450 11050print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11051{
11052 intel_syntax = 1;
e396998b
AM
11053
11054 return print_insn (pc, info);
252b5132
RH
11055}
11056
e396998b 11057int
26ca5450 11058print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11059{
11060 intel_syntax = -1;
11061
11062 return print_insn (pc, info);
11063}
11064
f59a29b9
L
11065void
11066print_i386_disassembler_options (FILE *stream)
11067{
11068 fprintf (stream, _("\n\
11069The following i386/x86-64 specific disassembler options are supported for use\n\
11070with the -M switch (multiple options should be separated by commas):\n"));
11071
11072 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11073 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11074 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11075 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11076 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11077 fprintf (stream, _(" att-mnemonic\n"
11078 " Display instruction in AT&T mnemonic\n"));
11079 fprintf (stream, _(" intel-mnemonic\n"
11080 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11081 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11082 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11083 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11084 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11085 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11086 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
11087}
11088
592d1631
L
11089/* Bad opcode. */
11090static const struct dis386 bad_opcode = { "(bad)", { XX } };
11091
b844680a
L
11092/* Get a pointer to struct dis386 with a valid name. */
11093
11094static const struct dis386 *
8bb15339 11095get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11096{
91d6fa6a 11097 int vindex, vex_table_index;
b844680a
L
11098
11099 if (dp->name != NULL)
11100 return dp;
11101
11102 switch (dp->op[0].bytemode)
11103 {
1ceb70f8
L
11104 case USE_REG_TABLE:
11105 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11106 break;
11107
11108 case USE_MOD_TABLE:
91d6fa6a
NC
11109 vindex = modrm.mod == 0x3 ? 1 : 0;
11110 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11111 break;
11112
11113 case USE_RM_TABLE:
11114 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11115 break;
11116
4e7d34a6 11117 case USE_PREFIX_TABLE:
c0f3af97 11118 if (need_vex)
b844680a 11119 {
c0f3af97
L
11120 /* The prefix in VEX is implicit. */
11121 switch (vex.prefix)
11122 {
11123 case 0:
91d6fa6a 11124 vindex = 0;
c0f3af97
L
11125 break;
11126 case REPE_PREFIX_OPCODE:
91d6fa6a 11127 vindex = 1;
c0f3af97
L
11128 break;
11129 case DATA_PREFIX_OPCODE:
91d6fa6a 11130 vindex = 2;
c0f3af97
L
11131 break;
11132 case REPNE_PREFIX_OPCODE:
91d6fa6a 11133 vindex = 3;
c0f3af97
L
11134 break;
11135 default:
11136 abort ();
11137 break;
11138 }
b844680a 11139 }
c0f3af97 11140 else
b844680a 11141 {
91d6fa6a 11142 vindex = 0;
c0f3af97
L
11143 used_prefixes |= (prefixes & PREFIX_REPZ);
11144 if (prefixes & PREFIX_REPZ)
b844680a 11145 {
91d6fa6a 11146 vindex = 1;
f16cd0d5 11147 all_prefixes[last_repz_prefix] = 0;
b844680a
L
11148 }
11149 else
11150 {
c0f3af97
L
11151 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11152 PREFIX_DATA. */
11153 used_prefixes |= (prefixes & PREFIX_REPNZ);
11154 if (prefixes & PREFIX_REPNZ)
11155 {
91d6fa6a 11156 vindex = 3;
f16cd0d5 11157 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11158 }
11159 else
b844680a 11160 {
c0f3af97
L
11161 used_prefixes |= (prefixes & PREFIX_DATA);
11162 if (prefixes & PREFIX_DATA)
11163 {
91d6fa6a 11164 vindex = 2;
f16cd0d5 11165 all_prefixes[last_data_prefix] = 0;
c0f3af97 11166 }
b844680a
L
11167 }
11168 }
11169 }
91d6fa6a 11170 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11171 break;
11172
4e7d34a6 11173 case USE_X86_64_TABLE:
91d6fa6a
NC
11174 vindex = address_mode == mode_64bit ? 1 : 0;
11175 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11176 break;
11177
4e7d34a6 11178 case USE_3BYTE_TABLE:
8bb15339 11179 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11180 vindex = *codep++;
11181 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
11182 modrm.mod = (*codep >> 6) & 3;
11183 modrm.reg = (*codep >> 3) & 7;
11184 modrm.rm = *codep & 7;
11185 break;
11186
c0f3af97
L
11187 case USE_VEX_LEN_TABLE:
11188 if (!need_vex)
11189 abort ();
11190
11191 switch (vex.length)
11192 {
11193 case 128:
91d6fa6a 11194 vindex = 0;
c0f3af97
L
11195 break;
11196 case 256:
91d6fa6a 11197 vindex = 1;
c0f3af97
L
11198 break;
11199 default:
11200 abort ();
11201 break;
11202 }
11203
91d6fa6a 11204 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11205 break;
11206
f88c9eb0
SP
11207 case USE_XOP_8F_TABLE:
11208 FETCH_DATA (info, codep + 3);
11209 /* All bits in the REX prefix are ignored. */
11210 rex_ignored = rex;
11211 rex = ~(*codep >> 5) & 0x7;
11212
11213 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11214 switch ((*codep & 0x1f))
11215 {
11216 default:
f07af43e
L
11217 dp = &bad_opcode;
11218 return dp;
5dd85c99
SP
11219 case 0x8:
11220 vex_table_index = XOP_08;
11221 break;
f88c9eb0
SP
11222 case 0x9:
11223 vex_table_index = XOP_09;
11224 break;
11225 case 0xa:
11226 vex_table_index = XOP_0A;
11227 break;
11228 }
11229 codep++;
11230 vex.w = *codep & 0x80;
11231 if (vex.w && address_mode == mode_64bit)
11232 rex |= REX_W;
11233
11234 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11235 if (address_mode != mode_64bit
11236 && vex.register_specifier > 0x7)
f07af43e
L
11237 {
11238 dp = &bad_opcode;
11239 return dp;
11240 }
f88c9eb0
SP
11241
11242 vex.length = (*codep & 0x4) ? 256 : 128;
11243 switch ((*codep & 0x3))
11244 {
11245 case 0:
11246 vex.prefix = 0;
11247 break;
11248 case 1:
11249 vex.prefix = DATA_PREFIX_OPCODE;
11250 break;
11251 case 2:
11252 vex.prefix = REPE_PREFIX_OPCODE;
11253 break;
11254 case 3:
11255 vex.prefix = REPNE_PREFIX_OPCODE;
11256 break;
11257 }
11258 need_vex = 1;
11259 need_vex_reg = 1;
11260 codep++;
91d6fa6a
NC
11261 vindex = *codep++;
11262 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
11263
11264 FETCH_DATA (info, codep + 1);
11265 modrm.mod = (*codep >> 6) & 3;
11266 modrm.reg = (*codep >> 3) & 7;
11267 modrm.rm = *codep & 7;
f88c9eb0
SP
11268 break;
11269
c0f3af97
L
11270 case USE_VEX_C4_TABLE:
11271 FETCH_DATA (info, codep + 3);
11272 /* All bits in the REX prefix are ignored. */
11273 rex_ignored = rex;
11274 rex = ~(*codep >> 5) & 0x7;
11275 switch ((*codep & 0x1f))
11276 {
11277 default:
f07af43e
L
11278 dp = &bad_opcode;
11279 return dp;
c0f3af97 11280 case 0x1:
f88c9eb0 11281 vex_table_index = VEX_0F;
c0f3af97
L
11282 break;
11283 case 0x2:
f88c9eb0 11284 vex_table_index = VEX_0F38;
c0f3af97
L
11285 break;
11286 case 0x3:
f88c9eb0 11287 vex_table_index = VEX_0F3A;
c0f3af97
L
11288 break;
11289 }
11290 codep++;
11291 vex.w = *codep & 0x80;
11292 if (vex.w && address_mode == mode_64bit)
11293 rex |= REX_W;
11294
11295 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11296 if (address_mode != mode_64bit
11297 && vex.register_specifier > 0x7)
f07af43e
L
11298 {
11299 dp = &bad_opcode;
11300 return dp;
11301 }
c0f3af97
L
11302
11303 vex.length = (*codep & 0x4) ? 256 : 128;
11304 switch ((*codep & 0x3))
11305 {
11306 case 0:
11307 vex.prefix = 0;
11308 break;
11309 case 1:
11310 vex.prefix = DATA_PREFIX_OPCODE;
11311 break;
11312 case 2:
11313 vex.prefix = REPE_PREFIX_OPCODE;
11314 break;
11315 case 3:
11316 vex.prefix = REPNE_PREFIX_OPCODE;
11317 break;
11318 }
11319 need_vex = 1;
11320 need_vex_reg = 1;
11321 codep++;
91d6fa6a
NC
11322 vindex = *codep++;
11323 dp = &vex_table[vex_table_index][vindex];
c0f3af97 11324 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11325 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11326 {
11327 FETCH_DATA (info, codep + 1);
11328 modrm.mod = (*codep >> 6) & 3;
11329 modrm.reg = (*codep >> 3) & 7;
11330 modrm.rm = *codep & 7;
11331 }
11332 break;
11333
11334 case USE_VEX_C5_TABLE:
11335 FETCH_DATA (info, codep + 2);
11336 /* All bits in the REX prefix are ignored. */
11337 rex_ignored = rex;
11338 rex = (*codep & 0x80) ? 0 : REX_R;
11339
11340 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11341 if (address_mode != mode_64bit
11342 && vex.register_specifier > 0x7)
f07af43e
L
11343 {
11344 dp = &bad_opcode;
11345 return dp;
11346 }
c0f3af97 11347
759a05ce
L
11348 vex.w = 0;
11349
c0f3af97
L
11350 vex.length = (*codep & 0x4) ? 256 : 128;
11351 switch ((*codep & 0x3))
11352 {
11353 case 0:
11354 vex.prefix = 0;
11355 break;
11356 case 1:
11357 vex.prefix = DATA_PREFIX_OPCODE;
11358 break;
11359 case 2:
11360 vex.prefix = REPE_PREFIX_OPCODE;
11361 break;
11362 case 3:
11363 vex.prefix = REPNE_PREFIX_OPCODE;
11364 break;
11365 }
11366 need_vex = 1;
11367 need_vex_reg = 1;
11368 codep++;
91d6fa6a
NC
11369 vindex = *codep++;
11370 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 11371 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11372 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11373 {
11374 FETCH_DATA (info, codep + 1);
11375 modrm.mod = (*codep >> 6) & 3;
11376 modrm.reg = (*codep >> 3) & 7;
11377 modrm.rm = *codep & 7;
11378 }
11379 break;
11380
9e30b8e0
L
11381 case USE_VEX_W_TABLE:
11382 if (!need_vex)
11383 abort ();
11384
11385 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11386 break;
11387
592d1631
L
11388 case 0:
11389 dp = &bad_opcode;
11390 break;
11391
b844680a 11392 default:
d34b5006 11393 abort ();
b844680a
L
11394 }
11395
11396 if (dp->name != NULL)
11397 return dp;
11398 else
8bb15339 11399 return get_valid_dis386 (dp, info);
b844680a
L
11400}
11401
dfc8cf43
L
11402static void
11403get_sib (disassemble_info *info)
11404{
11405 /* If modrm.mod == 3, operand must be register. */
11406 if (need_modrm
11407 && address_mode != mode_16bit
11408 && modrm.mod != 3
11409 && modrm.rm == 4)
11410 {
11411 FETCH_DATA (info, codep + 2);
11412 sib.index = (codep [1] >> 3) & 7;
11413 sib.scale = (codep [1] >> 6) & 3;
11414 sib.base = codep [1] & 7;
11415 }
11416}
11417
e396998b 11418static int
26ca5450 11419print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11420{
2da11e11 11421 const struct dis386 *dp;
252b5132 11422 int i;
ce518a5f 11423 char *op_txt[MAX_OPERANDS];
252b5132 11424 int needcomma;
e396998b
AM
11425 int sizeflag;
11426 const char *p;
252b5132 11427 struct dis_private priv;
f16cd0d5
L
11428 int prefix_length;
11429 int default_prefixes;
252b5132 11430
cb712a9e 11431 if (info->mach == bfd_mach_x86_64_intel_syntax
8a9036a4 11432 || info->mach == bfd_mach_x86_64
351f65ca
L
11433 || info->mach == bfd_mach_x64_32_intel_syntax
11434 || info->mach == bfd_mach_x64_32
8a9036a4
L
11435 || info->mach == bfd_mach_l1om
11436 || info->mach == bfd_mach_l1om_intel_syntax)
cb712a9e
L
11437 address_mode = mode_64bit;
11438 else
11439 address_mode = mode_32bit;
52b15da3 11440
8373f971 11441 if (intel_syntax == (char) -1)
e396998b 11442 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4 11443 || info->mach == bfd_mach_x86_64_intel_syntax
351f65ca 11444 || info->mach == bfd_mach_x64_32_intel_syntax
8a9036a4 11445 || info->mach == bfd_mach_l1om_intel_syntax);
e396998b 11446
2da11e11 11447 if (info->mach == bfd_mach_i386_i386
52b15da3 11448 || info->mach == bfd_mach_x86_64
351f65ca 11449 || info->mach == bfd_mach_x64_32
8a9036a4 11450 || info->mach == bfd_mach_l1om
52b15da3 11451 || info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4 11452 || info->mach == bfd_mach_x86_64_intel_syntax
351f65ca 11453 || info->mach == bfd_mach_x64_32_intel_syntax
8a9036a4 11454 || info->mach == bfd_mach_l1om_intel_syntax)
e396998b 11455 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 11456 else if (info->mach == bfd_mach_i386_i8086)
e396998b 11457 priv.orig_sizeflag = 0;
2da11e11
AM
11458 else
11459 abort ();
e396998b
AM
11460
11461 for (p = info->disassembler_options; p != NULL; )
11462 {
0112cd26 11463 if (CONST_STRNEQ (p, "x86-64"))
e396998b 11464 {
cb712a9e 11465 address_mode = mode_64bit;
e396998b
AM
11466 priv.orig_sizeflag = AFLAG | DFLAG;
11467 }
0112cd26 11468 else if (CONST_STRNEQ (p, "i386"))
e396998b 11469 {
cb712a9e 11470 address_mode = mode_32bit;
e396998b
AM
11471 priv.orig_sizeflag = AFLAG | DFLAG;
11472 }
0112cd26 11473 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11474 {
cb712a9e 11475 address_mode = mode_16bit;
e396998b
AM
11476 priv.orig_sizeflag = 0;
11477 }
0112cd26 11478 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11479 {
11480 intel_syntax = 1;
9d141669
L
11481 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11482 intel_mnemonic = 1;
e396998b 11483 }
0112cd26 11484 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11485 {
11486 intel_syntax = 0;
9d141669
L
11487 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11488 intel_mnemonic = 0;
e396998b 11489 }
0112cd26 11490 else if (CONST_STRNEQ (p, "addr"))
e396998b 11491 {
f59a29b9
L
11492 if (address_mode == mode_64bit)
11493 {
11494 if (p[4] == '3' && p[5] == '2')
11495 priv.orig_sizeflag &= ~AFLAG;
11496 else if (p[4] == '6' && p[5] == '4')
11497 priv.orig_sizeflag |= AFLAG;
11498 }
11499 else
11500 {
11501 if (p[4] == '1' && p[5] == '6')
11502 priv.orig_sizeflag &= ~AFLAG;
11503 else if (p[4] == '3' && p[5] == '2')
11504 priv.orig_sizeflag |= AFLAG;
11505 }
e396998b 11506 }
0112cd26 11507 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11508 {
11509 if (p[4] == '1' && p[5] == '6')
11510 priv.orig_sizeflag &= ~DFLAG;
11511 else if (p[4] == '3' && p[5] == '2')
11512 priv.orig_sizeflag |= DFLAG;
11513 }
0112cd26 11514 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11515 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11516
11517 p = strchr (p, ',');
11518 if (p != NULL)
11519 p++;
11520 }
11521
11522 if (intel_syntax)
11523 {
11524 names64 = intel_names64;
11525 names32 = intel_names32;
11526 names16 = intel_names16;
11527 names8 = intel_names8;
11528 names8rex = intel_names8rex;
11529 names_seg = intel_names_seg;
b9733481
L
11530 names_mm = intel_names_mm;
11531 names_xmm = intel_names_xmm;
11532 names_ymm = intel_names_ymm;
db51cc60
L
11533 index64 = intel_index64;
11534 index32 = intel_index32;
e396998b
AM
11535 index16 = intel_index16;
11536 open_char = '[';
11537 close_char = ']';
11538 separator_char = '+';
11539 scale_char = '*';
11540 }
11541 else
11542 {
11543 names64 = att_names64;
11544 names32 = att_names32;
11545 names16 = att_names16;
11546 names8 = att_names8;
11547 names8rex = att_names8rex;
11548 names_seg = att_names_seg;
b9733481
L
11549 names_mm = att_names_mm;
11550 names_xmm = att_names_xmm;
11551 names_ymm = att_names_ymm;
db51cc60
L
11552 index64 = att_index64;
11553 index32 = att_index32;
e396998b
AM
11554 index16 = att_index16;
11555 open_char = '(';
11556 close_char = ')';
11557 separator_char = ',';
11558 scale_char = ',';
11559 }
2da11e11 11560
4fe53c98 11561 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11562 puts most long word instructions on a single line. Use 8 bytes
11563 for Intel L1OM. */
11564 if (info->mach == bfd_mach_l1om
11565 || info->mach == bfd_mach_l1om_intel_syntax)
11566 info->bytes_per_line = 8;
11567 else
11568 info->bytes_per_line = 7;
252b5132 11569
26ca5450 11570 info->private_data = &priv;
252b5132
RH
11571 priv.max_fetched = priv.the_buffer;
11572 priv.insn_start = pc;
252b5132
RH
11573
11574 obuf[0] = 0;
ce518a5f
L
11575 for (i = 0; i < MAX_OPERANDS; ++i)
11576 {
11577 op_out[i][0] = 0;
11578 op_index[i] = -1;
11579 }
252b5132
RH
11580
11581 the_info = info;
11582 start_pc = pc;
e396998b
AM
11583 start_codep = priv.the_buffer;
11584 codep = priv.the_buffer;
252b5132 11585
5076851f
ILT
11586 if (setjmp (priv.bailout) != 0)
11587 {
7d421014
ILT
11588 const char *name;
11589
5076851f 11590 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
11591 means we have an incomplete instruction of some sort. Just
11592 print the first byte as a prefix or a .byte pseudo-op. */
11593 if (codep > priv.the_buffer)
5076851f 11594 {
e396998b 11595 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
11596 if (name != NULL)
11597 (*info->fprintf_func) (info->stream, "%s", name);
11598 else
5076851f 11599 {
7d421014
ILT
11600 /* Just print the first byte as a .byte instruction. */
11601 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 11602 (unsigned int) priv.the_buffer[0]);
5076851f 11603 }
5076851f 11604
7d421014 11605 return 1;
5076851f
ILT
11606 }
11607
11608 return -1;
11609 }
11610
52b15da3 11611 obufp = obuf;
f16cd0d5
L
11612 sizeflag = priv.orig_sizeflag;
11613
11614 if (!ckprefix () || rex_used)
11615 {
11616 /* Too many prefixes or unused REX prefixes. */
11617 for (i = 0;
11618 all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes);
11619 i++)
11620 (*info->fprintf_func) (info->stream, "%s",
11621 prefix_name (all_prefixes[i], sizeflag));
11622 return 1;
11623 }
252b5132
RH
11624
11625 insn_codep = codep;
11626
11627 FETCH_DATA (info, codep + 1);
11628 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11629
3e7d61b2 11630 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 11631 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 11632 {
f16cd0d5 11633 (*info->fprintf_func) (info->stream, "fwait");
7d421014 11634 return 1;
252b5132
RH
11635 }
11636
252b5132
RH
11637 if (*codep == 0x0f)
11638 {
eec0f4ca 11639 unsigned char threebyte;
252b5132 11640 FETCH_DATA (info, codep + 2);
eec0f4ca
L
11641 threebyte = *++codep;
11642 dp = &dis386_twobyte[threebyte];
252b5132 11643 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 11644 codep++;
252b5132
RH
11645 }
11646 else
11647 {
6439fc28 11648 dp = &dis386[*codep];
252b5132 11649 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 11650 codep++;
252b5132 11651 }
246c51aa 11652
b844680a 11653 if ((prefixes & PREFIX_REPZ))
f16cd0d5 11654 used_prefixes |= PREFIX_REPZ;
b844680a 11655 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 11656 used_prefixes |= PREFIX_REPNZ;
b844680a 11657 if ((prefixes & PREFIX_LOCK))
f16cd0d5 11658 used_prefixes |= PREFIX_LOCK;
c608c12e 11659
f16cd0d5 11660 default_prefixes = 0;
c608c12e
AM
11661 if (prefixes & PREFIX_ADDR)
11662 {
11663 sizeflag ^= AFLAG;
ce518a5f 11664 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 11665 {
cb712a9e 11666 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 11667 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 11668 else
f16cd0d5
L
11669 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11670 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
11671 }
11672 }
11673
b844680a 11674 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
11675 {
11676 sizeflag ^= DFLAG;
ce518a5f
L
11677 if (dp->op[2].bytemode == cond_jump_mode
11678 && dp->op[0].bytemode == v_mode
6439fc28 11679 && !intel_syntax)
3ffd33cf
AM
11680 {
11681 if (sizeflag & DFLAG)
f16cd0d5 11682 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 11683 else
f16cd0d5
L
11684 all_prefixes[last_data_prefix] = DATA16_PREFIX;
11685 default_prefixes |= PREFIX_DATA;
11686 }
11687 else if (rex & REX_W)
11688 {
11689 /* REX_W will override PREFIX_DATA. */
11690 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
11691 }
11692 }
11693
8bb15339 11694 if (need_modrm)
252b5132
RH
11695 {
11696 FETCH_DATA (info, codep + 1);
7967e09e
L
11697 modrm.mod = (*codep >> 6) & 3;
11698 modrm.reg = (*codep >> 3) & 7;
11699 modrm.rm = *codep & 7;
252b5132
RH
11700 }
11701
55b126d4
L
11702 need_vex = 0;
11703 need_vex_reg = 0;
11704 vex_w_done = 0;
11705
ce518a5f 11706 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 11707 {
dfc8cf43 11708 get_sib (info);
252b5132
RH
11709 dofloat (sizeflag);
11710 }
11711 else
11712 {
8bb15339 11713 dp = get_valid_dis386 (dp, info);
b844680a 11714 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f 11715 {
dfc8cf43 11716 get_sib (info);
ce518a5f
L
11717 for (i = 0; i < MAX_OPERANDS; ++i)
11718 {
246c51aa 11719 obufp = op_out[i];
ce518a5f
L
11720 op_ad = MAX_OPERANDS - 1 - i;
11721 if (dp->op[i].rtn)
11722 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11723 }
6439fc28 11724 }
252b5132
RH
11725 }
11726
7d421014
ILT
11727 /* See if any prefixes were not used. If so, print the first one
11728 separately. If we don't do this, we'll wind up printing an
11729 instruction stream which does not precisely correspond to the
11730 bytes we are disassembling. */
f16cd0d5 11731 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 11732 {
f16cd0d5
L
11733 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11734 if (all_prefixes[i])
11735 {
11736 const char *name;
11737 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11738 if (name == NULL)
11739 name = INTERNAL_DISASSEMBLER_ERROR;
11740 (*info->fprintf_func) (info->stream, "%s", name);
11741 return 1;
11742 }
52b15da3 11743 }
7d421014 11744
d869730d 11745 /* Check if the REX prefix is used. */
2a70cca4 11746 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
11747 all_prefixes[last_rex_prefix] = 0;
11748
5e6718e4 11749 /* Check if the SEG prefix is used. */
f16cd0d5
L
11750 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11751 | PREFIX_FS | PREFIX_GS)) != 0
11752 && (used_prefixes
11753 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11754 all_prefixes[last_seg_prefix] = 0;
11755
5e6718e4 11756 /* Check if the ADDR prefix is used. */
f16cd0d5
L
11757 if ((prefixes & PREFIX_ADDR) != 0
11758 && (used_prefixes & PREFIX_ADDR) != 0)
11759 all_prefixes[last_addr_prefix] = 0;
11760
5e6718e4 11761 /* Check if the DATA prefix is used. */
f16cd0d5
L
11762 if ((prefixes & PREFIX_DATA) != 0
11763 && (used_prefixes & PREFIX_DATA) != 0)
11764 all_prefixes[last_data_prefix] = 0;
11765
11766 prefix_length = 0;
f310f33d 11767 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
11768 if (all_prefixes[i])
11769 {
11770 const char *name;
11771 name = prefix_name (all_prefixes[i], sizeflag);
11772 if (name == NULL)
11773 abort ();
11774 prefix_length += strlen (name) + 1;
11775 (*info->fprintf_func) (info->stream, "%s ", name);
11776 }
b844680a 11777
f16cd0d5
L
11778 /* Check maximum code length. */
11779 if ((codep - start_codep) > MAX_CODE_LENGTH)
11780 {
11781 (*info->fprintf_func) (info->stream, "(bad)");
11782 return MAX_CODE_LENGTH;
11783 }
b844680a 11784
ea397f5b 11785 obufp = mnemonicendp;
f16cd0d5 11786 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
11787 oappend (" ");
11788 oappend (" ");
11789 (*info->fprintf_func) (info->stream, "%s", obuf);
11790
11791 /* The enter and bound instructions are printed with operands in the same
11792 order as the intel book; everything else is printed in reverse order. */
2da11e11 11793 if (intel_syntax || two_source_ops)
252b5132 11794 {
185b1163
L
11795 bfd_vma riprel;
11796
ce518a5f
L
11797 for (i = 0; i < MAX_OPERANDS; ++i)
11798 op_txt[i] = op_out[i];
246c51aa 11799
ce518a5f
L
11800 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11801 {
11802 op_ad = op_index[i];
11803 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11804 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
11805 riprel = op_riprel[i];
11806 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11807 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 11808 }
252b5132
RH
11809 }
11810 else
11811 {
ce518a5f
L
11812 for (i = 0; i < MAX_OPERANDS; ++i)
11813 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
11814 }
11815
ce518a5f
L
11816 needcomma = 0;
11817 for (i = 0; i < MAX_OPERANDS; ++i)
11818 if (*op_txt[i])
11819 {
11820 if (needcomma)
11821 (*info->fprintf_func) (info->stream, ",");
11822 if (op_index[i] != -1 && !op_riprel[i])
11823 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11824 else
11825 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11826 needcomma = 1;
11827 }
050dfa73 11828
ce518a5f 11829 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
11830 if (op_index[i] != -1 && op_riprel[i])
11831 {
11832 (*info->fprintf_func) (info->stream, " # ");
11833 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11834 + op_address[op_index[i]]), info);
185b1163 11835 break;
52b15da3 11836 }
e396998b 11837 return codep - priv.the_buffer;
252b5132
RH
11838}
11839
6439fc28 11840static const char *float_mem[] = {
252b5132 11841 /* d8 */
7c52e0e8
L
11842 "fadd{s|}",
11843 "fmul{s|}",
11844 "fcom{s|}",
11845 "fcomp{s|}",
11846 "fsub{s|}",
11847 "fsubr{s|}",
11848 "fdiv{s|}",
11849 "fdivr{s|}",
db6eb5be 11850 /* d9 */
7c52e0e8 11851 "fld{s|}",
252b5132 11852 "(bad)",
7c52e0e8
L
11853 "fst{s|}",
11854 "fstp{s|}",
9306ca4a 11855 "fldenvIC",
252b5132 11856 "fldcw",
9306ca4a 11857 "fNstenvIC",
252b5132
RH
11858 "fNstcw",
11859 /* da */
7c52e0e8
L
11860 "fiadd{l|}",
11861 "fimul{l|}",
11862 "ficom{l|}",
11863 "ficomp{l|}",
11864 "fisub{l|}",
11865 "fisubr{l|}",
11866 "fidiv{l|}",
11867 "fidivr{l|}",
252b5132 11868 /* db */
7c52e0e8
L
11869 "fild{l|}",
11870 "fisttp{l|}",
11871 "fist{l|}",
11872 "fistp{l|}",
252b5132 11873 "(bad)",
6439fc28 11874 "fld{t||t|}",
252b5132 11875 "(bad)",
6439fc28 11876 "fstp{t||t|}",
252b5132 11877 /* dc */
7c52e0e8
L
11878 "fadd{l|}",
11879 "fmul{l|}",
11880 "fcom{l|}",
11881 "fcomp{l|}",
11882 "fsub{l|}",
11883 "fsubr{l|}",
11884 "fdiv{l|}",
11885 "fdivr{l|}",
252b5132 11886 /* dd */
7c52e0e8
L
11887 "fld{l|}",
11888 "fisttp{ll|}",
11889 "fst{l||}",
11890 "fstp{l|}",
9306ca4a 11891 "frstorIC",
252b5132 11892 "(bad)",
9306ca4a 11893 "fNsaveIC",
252b5132
RH
11894 "fNstsw",
11895 /* de */
11896 "fiadd",
11897 "fimul",
11898 "ficom",
11899 "ficomp",
11900 "fisub",
11901 "fisubr",
11902 "fidiv",
11903 "fidivr",
11904 /* df */
11905 "fild",
ca164297 11906 "fisttp",
252b5132
RH
11907 "fist",
11908 "fistp",
11909 "fbld",
7c52e0e8 11910 "fild{ll|}",
252b5132 11911 "fbstp",
7c52e0e8 11912 "fistp{ll|}",
1d9f512f
AM
11913};
11914
11915static const unsigned char float_mem_mode[] = {
11916 /* d8 */
11917 d_mode,
11918 d_mode,
11919 d_mode,
11920 d_mode,
11921 d_mode,
11922 d_mode,
11923 d_mode,
11924 d_mode,
11925 /* d9 */
11926 d_mode,
11927 0,
11928 d_mode,
11929 d_mode,
11930 0,
11931 w_mode,
11932 0,
11933 w_mode,
11934 /* da */
11935 d_mode,
11936 d_mode,
11937 d_mode,
11938 d_mode,
11939 d_mode,
11940 d_mode,
11941 d_mode,
11942 d_mode,
11943 /* db */
11944 d_mode,
11945 d_mode,
11946 d_mode,
11947 d_mode,
11948 0,
9306ca4a 11949 t_mode,
1d9f512f 11950 0,
9306ca4a 11951 t_mode,
1d9f512f
AM
11952 /* dc */
11953 q_mode,
11954 q_mode,
11955 q_mode,
11956 q_mode,
11957 q_mode,
11958 q_mode,
11959 q_mode,
11960 q_mode,
11961 /* dd */
11962 q_mode,
11963 q_mode,
11964 q_mode,
11965 q_mode,
11966 0,
11967 0,
11968 0,
11969 w_mode,
11970 /* de */
11971 w_mode,
11972 w_mode,
11973 w_mode,
11974 w_mode,
11975 w_mode,
11976 w_mode,
11977 w_mode,
11978 w_mode,
11979 /* df */
11980 w_mode,
11981 w_mode,
11982 w_mode,
11983 w_mode,
9306ca4a 11984 t_mode,
1d9f512f 11985 q_mode,
9306ca4a 11986 t_mode,
1d9f512f 11987 q_mode
252b5132
RH
11988};
11989
ce518a5f
L
11990#define ST { OP_ST, 0 }
11991#define STi { OP_STi, 0 }
252b5132 11992
4efba78c
L
11993#define FGRPd9_2 NULL, { { NULL, 0 } }
11994#define FGRPd9_4 NULL, { { NULL, 1 } }
11995#define FGRPd9_5 NULL, { { NULL, 2 } }
11996#define FGRPd9_6 NULL, { { NULL, 3 } }
11997#define FGRPd9_7 NULL, { { NULL, 4 } }
11998#define FGRPda_5 NULL, { { NULL, 5 } }
11999#define FGRPdb_4 NULL, { { NULL, 6 } }
12000#define FGRPde_3 NULL, { { NULL, 7 } }
12001#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 12002
2da11e11 12003static const struct dis386 float_reg[][8] = {
252b5132
RH
12004 /* d8 */
12005 {
ce518a5f
L
12006 { "fadd", { ST, STi } },
12007 { "fmul", { ST, STi } },
12008 { "fcom", { STi } },
12009 { "fcomp", { STi } },
12010 { "fsub", { ST, STi } },
12011 { "fsubr", { ST, STi } },
12012 { "fdiv", { ST, STi } },
12013 { "fdivr", { ST, STi } },
252b5132
RH
12014 },
12015 /* d9 */
12016 {
ce518a5f
L
12017 { "fld", { STi } },
12018 { "fxch", { STi } },
252b5132 12019 { FGRPd9_2 },
592d1631 12020 { Bad_Opcode },
252b5132
RH
12021 { FGRPd9_4 },
12022 { FGRPd9_5 },
12023 { FGRPd9_6 },
12024 { FGRPd9_7 },
12025 },
12026 /* da */
12027 {
ce518a5f
L
12028 { "fcmovb", { ST, STi } },
12029 { "fcmove", { ST, STi } },
12030 { "fcmovbe",{ ST, STi } },
12031 { "fcmovu", { ST, STi } },
592d1631 12032 { Bad_Opcode },
252b5132 12033 { FGRPda_5 },
592d1631
L
12034 { Bad_Opcode },
12035 { Bad_Opcode },
252b5132
RH
12036 },
12037 /* db */
12038 {
ce518a5f
L
12039 { "fcmovnb",{ ST, STi } },
12040 { "fcmovne",{ ST, STi } },
12041 { "fcmovnbe",{ ST, STi } },
12042 { "fcmovnu",{ ST, STi } },
252b5132 12043 { FGRPdb_4 },
ce518a5f
L
12044 { "fucomi", { ST, STi } },
12045 { "fcomi", { ST, STi } },
592d1631 12046 { Bad_Opcode },
252b5132
RH
12047 },
12048 /* dc */
12049 {
ce518a5f
L
12050 { "fadd", { STi, ST } },
12051 { "fmul", { STi, ST } },
592d1631
L
12052 { Bad_Opcode },
12053 { Bad_Opcode },
9d141669
L
12054 { "fsub!M", { STi, ST } },
12055 { "fsubM", { STi, ST } },
12056 { "fdiv!M", { STi, ST } },
12057 { "fdivM", { STi, ST } },
252b5132
RH
12058 },
12059 /* dd */
12060 {
ce518a5f 12061 { "ffree", { STi } },
592d1631 12062 { Bad_Opcode },
ce518a5f
L
12063 { "fst", { STi } },
12064 { "fstp", { STi } },
12065 { "fucom", { STi } },
12066 { "fucomp", { STi } },
592d1631
L
12067 { Bad_Opcode },
12068 { Bad_Opcode },
252b5132
RH
12069 },
12070 /* de */
12071 {
ce518a5f
L
12072 { "faddp", { STi, ST } },
12073 { "fmulp", { STi, ST } },
592d1631 12074 { Bad_Opcode },
252b5132 12075 { FGRPde_3 },
9d141669
L
12076 { "fsub!Mp", { STi, ST } },
12077 { "fsubMp", { STi, ST } },
12078 { "fdiv!Mp", { STi, ST } },
12079 { "fdivMp", { STi, ST } },
252b5132
RH
12080 },
12081 /* df */
12082 {
ce518a5f 12083 { "ffreep", { STi } },
592d1631
L
12084 { Bad_Opcode },
12085 { Bad_Opcode },
12086 { Bad_Opcode },
252b5132 12087 { FGRPdf_4 },
ce518a5f
L
12088 { "fucomip", { ST, STi } },
12089 { "fcomip", { ST, STi } },
592d1631 12090 { Bad_Opcode },
252b5132
RH
12091 },
12092};
12093
252b5132
RH
12094static char *fgrps[][8] = {
12095 /* d9_2 0 */
12096 {
12097 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12098 },
12099
12100 /* d9_4 1 */
12101 {
12102 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12103 },
12104
12105 /* d9_5 2 */
12106 {
12107 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12108 },
12109
12110 /* d9_6 3 */
12111 {
12112 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12113 },
12114
12115 /* d9_7 4 */
12116 {
12117 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12118 },
12119
12120 /* da_5 5 */
12121 {
12122 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12123 },
12124
12125 /* db_4 6 */
12126 {
309d3373
JB
12127 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12128 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12129 },
12130
12131 /* de_3 7 */
12132 {
12133 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12134 },
12135
12136 /* df_4 8 */
12137 {
12138 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12139 },
12140};
12141
b6169b20
L
12142static void
12143swap_operand (void)
12144{
12145 mnemonicendp[0] = '.';
12146 mnemonicendp[1] = 's';
12147 mnemonicendp += 2;
12148}
12149
b844680a
L
12150static void
12151OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12152 int sizeflag ATTRIBUTE_UNUSED)
12153{
12154 /* Skip mod/rm byte. */
12155 MODRM_CHECK;
12156 codep++;
12157}
12158
252b5132 12159static void
26ca5450 12160dofloat (int sizeflag)
252b5132 12161{
2da11e11 12162 const struct dis386 *dp;
252b5132
RH
12163 unsigned char floatop;
12164
12165 floatop = codep[-1];
12166
7967e09e 12167 if (modrm.mod != 3)
252b5132 12168 {
7967e09e 12169 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12170
12171 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12172 obufp = op_out[0];
6e50d963 12173 op_ad = 2;
1d9f512f 12174 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12175 return;
12176 }
6608db57 12177 /* Skip mod/rm byte. */
4bba6815 12178 MODRM_CHECK;
252b5132
RH
12179 codep++;
12180
7967e09e 12181 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12182 if (dp->name == NULL)
12183 {
7967e09e 12184 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12185
6608db57 12186 /* Instruction fnstsw is only one with strange arg. */
252b5132 12187 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12188 strcpy (op_out[0], names16[0]);
252b5132
RH
12189 }
12190 else
12191 {
12192 putop (dp->name, sizeflag);
12193
ce518a5f 12194 obufp = op_out[0];
6e50d963 12195 op_ad = 2;
ce518a5f
L
12196 if (dp->op[0].rtn)
12197 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12198
ce518a5f 12199 obufp = op_out[1];
6e50d963 12200 op_ad = 1;
ce518a5f
L
12201 if (dp->op[1].rtn)
12202 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12203 }
12204}
12205
252b5132 12206static void
26ca5450 12207OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12208{
422673a9 12209 oappend ("%st" + intel_syntax);
252b5132
RH
12210}
12211
252b5132 12212static void
26ca5450 12213OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12214{
7967e09e 12215 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 12216 oappend (scratchbuf + intel_syntax);
252b5132
RH
12217}
12218
6608db57 12219/* Capital letters in template are macros. */
6439fc28 12220static int
d3ce72d0 12221putop (const char *in_template, int sizeflag)
252b5132 12222{
2da11e11 12223 const char *p;
9306ca4a 12224 int alt = 0;
9d141669 12225 int cond = 1;
98b528ac
L
12226 unsigned int l = 0, len = 1;
12227 char last[4];
12228
12229#define SAVE_LAST(c) \
12230 if (l < len && l < sizeof (last)) \
12231 last[l++] = c; \
12232 else \
12233 abort ();
252b5132 12234
d3ce72d0 12235 for (p = in_template; *p; p++)
252b5132
RH
12236 {
12237 switch (*p)
12238 {
12239 default:
12240 *obufp++ = *p;
12241 break;
98b528ac
L
12242 case '%':
12243 len++;
12244 break;
9d141669
L
12245 case '!':
12246 cond = 0;
12247 break;
6439fc28
AM
12248 case '{':
12249 alt = 0;
12250 if (intel_syntax)
6439fc28
AM
12251 {
12252 while (*++p != '|')
7c52e0e8
L
12253 if (*p == '}' || *p == '\0')
12254 abort ();
6439fc28 12255 }
9306ca4a
JB
12256 /* Fall through. */
12257 case 'I':
12258 alt = 1;
12259 continue;
6439fc28
AM
12260 case '|':
12261 while (*++p != '}')
12262 {
12263 if (*p == '\0')
12264 abort ();
12265 }
12266 break;
12267 case '}':
12268 break;
252b5132 12269 case 'A':
db6eb5be
AM
12270 if (intel_syntax)
12271 break;
7967e09e 12272 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12273 *obufp++ = 'b';
12274 break;
12275 case 'B':
4b06377f
L
12276 if (l == 0 && len == 1)
12277 {
12278case_B:
12279 if (intel_syntax)
12280 break;
12281 if (sizeflag & SUFFIX_ALWAYS)
12282 *obufp++ = 'b';
12283 }
12284 else
12285 {
12286 if (l != 1
12287 || len != 2
12288 || last[0] != 'L')
12289 {
12290 SAVE_LAST (*p);
12291 break;
12292 }
12293
12294 if (address_mode == mode_64bit
12295 && !(prefixes & PREFIX_ADDR))
12296 {
12297 *obufp++ = 'a';
12298 *obufp++ = 'b';
12299 *obufp++ = 's';
12300 }
12301
12302 goto case_B;
12303 }
252b5132 12304 break;
9306ca4a
JB
12305 case 'C':
12306 if (intel_syntax && !alt)
12307 break;
12308 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12309 {
12310 if (sizeflag & DFLAG)
12311 *obufp++ = intel_syntax ? 'd' : 'l';
12312 else
12313 *obufp++ = intel_syntax ? 'w' : 's';
12314 used_prefixes |= (prefixes & PREFIX_DATA);
12315 }
12316 break;
ed7841b3
JB
12317 case 'D':
12318 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12319 break;
161a04f6 12320 USED_REX (REX_W);
7967e09e 12321 if (modrm.mod == 3)
ed7841b3 12322 {
161a04f6 12323 if (rex & REX_W)
ed7841b3 12324 *obufp++ = 'q';
ed7841b3 12325 else
f16cd0d5
L
12326 {
12327 if (sizeflag & DFLAG)
12328 *obufp++ = intel_syntax ? 'd' : 'l';
12329 else
12330 *obufp++ = 'w';
12331 used_prefixes |= (prefixes & PREFIX_DATA);
12332 }
ed7841b3
JB
12333 }
12334 else
12335 *obufp++ = 'w';
12336 break;
252b5132 12337 case 'E': /* For jcxz/jecxz */
cb712a9e 12338 if (address_mode == mode_64bit)
c1a64871
JH
12339 {
12340 if (sizeflag & AFLAG)
12341 *obufp++ = 'r';
12342 else
12343 *obufp++ = 'e';
12344 }
12345 else
12346 if (sizeflag & AFLAG)
12347 *obufp++ = 'e';
3ffd33cf
AM
12348 used_prefixes |= (prefixes & PREFIX_ADDR);
12349 break;
12350 case 'F':
db6eb5be
AM
12351 if (intel_syntax)
12352 break;
e396998b 12353 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12354 {
12355 if (sizeflag & AFLAG)
cb712a9e 12356 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12357 else
cb712a9e 12358 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12359 used_prefixes |= (prefixes & PREFIX_ADDR);
12360 }
252b5132 12361 break;
52fd6d94
JB
12362 case 'G':
12363 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12364 break;
161a04f6 12365 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12366 *obufp++ = 'l';
12367 else
12368 *obufp++ = 'w';
161a04f6 12369 if (!(rex & REX_W))
52fd6d94
JB
12370 used_prefixes |= (prefixes & PREFIX_DATA);
12371 break;
5dd0794d 12372 case 'H':
db6eb5be
AM
12373 if (intel_syntax)
12374 break;
5dd0794d
AM
12375 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12376 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12377 {
12378 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12379 *obufp++ = ',';
12380 *obufp++ = 'p';
12381 if (prefixes & PREFIX_DS)
12382 *obufp++ = 't';
12383 else
12384 *obufp++ = 'n';
12385 }
12386 break;
9306ca4a
JB
12387 case 'J':
12388 if (intel_syntax)
12389 break;
12390 *obufp++ = 'l';
12391 break;
42903f7f
L
12392 case 'K':
12393 USED_REX (REX_W);
12394 if (rex & REX_W)
12395 *obufp++ = 'q';
12396 else
12397 *obufp++ = 'd';
12398 break;
6dd5059a
L
12399 case 'Z':
12400 if (intel_syntax)
12401 break;
12402 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12403 {
12404 *obufp++ = 'q';
12405 break;
12406 }
12407 /* Fall through. */
98b528ac 12408 goto case_L;
252b5132 12409 case 'L':
98b528ac
L
12410 if (l != 0 || len != 1)
12411 {
12412 SAVE_LAST (*p);
12413 break;
12414 }
12415case_L:
db6eb5be
AM
12416 if (intel_syntax)
12417 break;
252b5132
RH
12418 if (sizeflag & SUFFIX_ALWAYS)
12419 *obufp++ = 'l';
252b5132 12420 break;
9d141669
L
12421 case 'M':
12422 if (intel_mnemonic != cond)
12423 *obufp++ = 'r';
12424 break;
252b5132
RH
12425 case 'N':
12426 if ((prefixes & PREFIX_FWAIT) == 0)
12427 *obufp++ = 'n';
7d421014
ILT
12428 else
12429 used_prefixes |= PREFIX_FWAIT;
252b5132 12430 break;
52b15da3 12431 case 'O':
161a04f6
L
12432 USED_REX (REX_W);
12433 if (rex & REX_W)
6439fc28 12434 *obufp++ = 'o';
a35ca55a
JB
12435 else if (intel_syntax && (sizeflag & DFLAG))
12436 *obufp++ = 'q';
52b15da3
JH
12437 else
12438 *obufp++ = 'd';
161a04f6 12439 if (!(rex & REX_W))
a35ca55a 12440 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12441 break;
6439fc28 12442 case 'T':
d9e3625e
L
12443 if (!intel_syntax
12444 && address_mode == mode_64bit
12445 && (sizeflag & DFLAG))
6439fc28
AM
12446 {
12447 *obufp++ = 'q';
12448 break;
12449 }
6608db57 12450 /* Fall through. */
252b5132 12451 case 'P':
db6eb5be 12452 if (intel_syntax)
d9e3625e
L
12453 {
12454 if ((rex & REX_W) == 0
12455 && (prefixes & PREFIX_DATA))
12456 {
12457 if ((sizeflag & DFLAG) == 0)
12458 *obufp++ = 'w';
12459 used_prefixes |= (prefixes & PREFIX_DATA);
12460 }
12461 break;
12462 }
252b5132 12463 if ((prefixes & PREFIX_DATA)
161a04f6 12464 || (rex & REX_W)
e396998b 12465 || (sizeflag & SUFFIX_ALWAYS))
252b5132 12466 {
161a04f6
L
12467 USED_REX (REX_W);
12468 if (rex & REX_W)
52b15da3 12469 *obufp++ = 'q';
c2419411 12470 else
52b15da3
JH
12471 {
12472 if (sizeflag & DFLAG)
12473 *obufp++ = 'l';
12474 else
12475 *obufp++ = 'w';
f16cd0d5 12476 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12477 }
252b5132
RH
12478 }
12479 break;
6439fc28 12480 case 'U':
db6eb5be
AM
12481 if (intel_syntax)
12482 break;
cb712a9e 12483 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 12484 {
7967e09e 12485 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12486 *obufp++ = 'q';
6439fc28
AM
12487 break;
12488 }
6608db57 12489 /* Fall through. */
98b528ac 12490 goto case_Q;
252b5132 12491 case 'Q':
98b528ac 12492 if (l == 0 && len == 1)
252b5132 12493 {
98b528ac
L
12494case_Q:
12495 if (intel_syntax && !alt)
12496 break;
12497 USED_REX (REX_W);
12498 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12499 {
98b528ac
L
12500 if (rex & REX_W)
12501 *obufp++ = 'q';
52b15da3 12502 else
98b528ac
L
12503 {
12504 if (sizeflag & DFLAG)
12505 *obufp++ = intel_syntax ? 'd' : 'l';
12506 else
12507 *obufp++ = 'w';
f16cd0d5 12508 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 12509 }
52b15da3 12510 }
98b528ac
L
12511 }
12512 else
12513 {
12514 if (l != 1 || len != 2 || last[0] != 'L')
12515 {
12516 SAVE_LAST (*p);
12517 break;
12518 }
12519 if (intel_syntax
12520 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12521 break;
12522 if ((rex & REX_W))
12523 {
12524 USED_REX (REX_W);
12525 *obufp++ = 'q';
12526 }
12527 else
12528 *obufp++ = 'l';
252b5132
RH
12529 }
12530 break;
12531 case 'R':
161a04f6
L
12532 USED_REX (REX_W);
12533 if (rex & REX_W)
a35ca55a
JB
12534 *obufp++ = 'q';
12535 else if (sizeflag & DFLAG)
c608c12e 12536 {
a35ca55a 12537 if (intel_syntax)
c608c12e 12538 *obufp++ = 'd';
c608c12e 12539 else
a35ca55a 12540 *obufp++ = 'l';
c608c12e 12541 }
252b5132 12542 else
a35ca55a
JB
12543 *obufp++ = 'w';
12544 if (intel_syntax && !p[1]
161a04f6 12545 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 12546 *obufp++ = 'e';
161a04f6 12547 if (!(rex & REX_W))
52b15da3 12548 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12549 break;
1a114b12 12550 case 'V':
4b06377f 12551 if (l == 0 && len == 1)
1a114b12 12552 {
4b06377f
L
12553 if (intel_syntax)
12554 break;
12555 if (address_mode == mode_64bit && (sizeflag & DFLAG))
12556 {
12557 if (sizeflag & SUFFIX_ALWAYS)
12558 *obufp++ = 'q';
12559 break;
12560 }
12561 }
12562 else
12563 {
12564 if (l != 1
12565 || len != 2
12566 || last[0] != 'L')
12567 {
12568 SAVE_LAST (*p);
12569 break;
12570 }
12571
12572 if (rex & REX_W)
12573 {
12574 *obufp++ = 'a';
12575 *obufp++ = 'b';
12576 *obufp++ = 's';
12577 }
1a114b12
JB
12578 }
12579 /* Fall through. */
4b06377f 12580 goto case_S;
252b5132 12581 case 'S':
4b06377f 12582 if (l == 0 && len == 1)
252b5132 12583 {
4b06377f
L
12584case_S:
12585 if (intel_syntax)
12586 break;
12587 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 12588 {
4b06377f
L
12589 if (rex & REX_W)
12590 *obufp++ = 'q';
52b15da3 12591 else
4b06377f
L
12592 {
12593 if (sizeflag & DFLAG)
12594 *obufp++ = 'l';
12595 else
12596 *obufp++ = 'w';
12597 used_prefixes |= (prefixes & PREFIX_DATA);
12598 }
12599 }
12600 }
12601 else
12602 {
12603 if (l != 1
12604 || len != 2
12605 || last[0] != 'L')
12606 {
12607 SAVE_LAST (*p);
12608 break;
52b15da3 12609 }
4b06377f
L
12610
12611 if (address_mode == mode_64bit
12612 && !(prefixes & PREFIX_ADDR))
12613 {
12614 *obufp++ = 'a';
12615 *obufp++ = 'b';
12616 *obufp++ = 's';
12617 }
12618
12619 goto case_S;
252b5132 12620 }
252b5132 12621 break;
041bd2e0 12622 case 'X':
c0f3af97
L
12623 if (l != 0 || len != 1)
12624 {
12625 SAVE_LAST (*p);
12626 break;
12627 }
12628 if (need_vex && vex.prefix)
12629 {
12630 if (vex.prefix == DATA_PREFIX_OPCODE)
12631 *obufp++ = 'd';
12632 else
12633 *obufp++ = 's';
12634 }
041bd2e0 12635 else
f16cd0d5
L
12636 {
12637 if (prefixes & PREFIX_DATA)
12638 *obufp++ = 'd';
12639 else
12640 *obufp++ = 's';
12641 used_prefixes |= (prefixes & PREFIX_DATA);
12642 }
041bd2e0 12643 break;
76f227a5 12644 case 'Y':
c0f3af97 12645 if (l == 0 && len == 1)
76f227a5 12646 {
c0f3af97
L
12647 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12648 break;
12649 if (rex & REX_W)
12650 {
12651 USED_REX (REX_W);
12652 *obufp++ = 'q';
12653 }
12654 break;
12655 }
12656 else
12657 {
12658 if (l != 1 || len != 2 || last[0] != 'X')
12659 {
12660 SAVE_LAST (*p);
12661 break;
12662 }
12663 if (!need_vex)
12664 abort ();
12665 if (intel_syntax
12666 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12667 break;
12668 switch (vex.length)
12669 {
12670 case 128:
12671 *obufp++ = 'x';
12672 break;
12673 case 256:
12674 *obufp++ = 'y';
12675 break;
12676 default:
12677 abort ();
12678 }
76f227a5
JH
12679 }
12680 break;
252b5132 12681 case 'W':
0bfee649 12682 if (l == 0 && len == 1)
a35ca55a 12683 {
0bfee649
L
12684 /* operand size flag for cwtl, cbtw */
12685 USED_REX (REX_W);
12686 if (rex & REX_W)
12687 {
12688 if (intel_syntax)
12689 *obufp++ = 'd';
12690 else
12691 *obufp++ = 'l';
12692 }
12693 else if (sizeflag & DFLAG)
12694 *obufp++ = 'w';
a35ca55a 12695 else
0bfee649
L
12696 *obufp++ = 'b';
12697 if (!(rex & REX_W))
12698 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 12699 }
252b5132 12700 else
0bfee649
L
12701 {
12702 if (l != 1 || len != 2 || last[0] != 'X')
12703 {
12704 SAVE_LAST (*p);
12705 break;
12706 }
12707 if (!need_vex)
12708 abort ();
12709 *obufp++ = vex.w ? 'd': 's';
12710 }
252b5132
RH
12711 break;
12712 }
9306ca4a 12713 alt = 0;
252b5132
RH
12714 }
12715 *obufp = 0;
ea397f5b 12716 mnemonicendp = obufp;
6439fc28 12717 return 0;
252b5132
RH
12718}
12719
12720static void
26ca5450 12721oappend (const char *s)
252b5132 12722{
ea397f5b 12723 obufp = stpcpy (obufp, s);
252b5132
RH
12724}
12725
12726static void
26ca5450 12727append_seg (void)
252b5132
RH
12728{
12729 if (prefixes & PREFIX_CS)
7d421014 12730 {
7d421014 12731 used_prefixes |= PREFIX_CS;
d708bcba 12732 oappend ("%cs:" + intel_syntax);
7d421014 12733 }
252b5132 12734 if (prefixes & PREFIX_DS)
7d421014 12735 {
7d421014 12736 used_prefixes |= PREFIX_DS;
d708bcba 12737 oappend ("%ds:" + intel_syntax);
7d421014 12738 }
252b5132 12739 if (prefixes & PREFIX_SS)
7d421014 12740 {
7d421014 12741 used_prefixes |= PREFIX_SS;
d708bcba 12742 oappend ("%ss:" + intel_syntax);
7d421014 12743 }
252b5132 12744 if (prefixes & PREFIX_ES)
7d421014 12745 {
7d421014 12746 used_prefixes |= PREFIX_ES;
d708bcba 12747 oappend ("%es:" + intel_syntax);
7d421014 12748 }
252b5132 12749 if (prefixes & PREFIX_FS)
7d421014 12750 {
7d421014 12751 used_prefixes |= PREFIX_FS;
d708bcba 12752 oappend ("%fs:" + intel_syntax);
7d421014 12753 }
252b5132 12754 if (prefixes & PREFIX_GS)
7d421014 12755 {
7d421014 12756 used_prefixes |= PREFIX_GS;
d708bcba 12757 oappend ("%gs:" + intel_syntax);
7d421014 12758 }
252b5132
RH
12759}
12760
12761static void
26ca5450 12762OP_indirE (int bytemode, int sizeflag)
252b5132
RH
12763{
12764 if (!intel_syntax)
12765 oappend ("*");
12766 OP_E (bytemode, sizeflag);
12767}
12768
52b15da3 12769static void
26ca5450 12770print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 12771{
cb712a9e 12772 if (address_mode == mode_64bit)
52b15da3
JH
12773 {
12774 if (hex)
12775 {
12776 char tmp[30];
12777 int i;
12778 buf[0] = '0';
12779 buf[1] = 'x';
12780 sprintf_vma (tmp, disp);
6608db57 12781 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
12782 strcpy (buf + 2, tmp + i);
12783 }
12784 else
12785 {
12786 bfd_signed_vma v = disp;
12787 char tmp[30];
12788 int i;
12789 if (v < 0)
12790 {
12791 *(buf++) = '-';
12792 v = -disp;
6608db57 12793 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
12794 if (v < 0)
12795 {
12796 strcpy (buf, "9223372036854775808");
12797 return;
12798 }
12799 }
12800 if (!v)
12801 {
12802 strcpy (buf, "0");
12803 return;
12804 }
12805
12806 i = 0;
12807 tmp[29] = 0;
12808 while (v)
12809 {
6608db57 12810 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
12811 v /= 10;
12812 i++;
12813 }
12814 strcpy (buf, tmp + 29 - i);
12815 }
12816 }
12817 else
12818 {
12819 if (hex)
12820 sprintf (buf, "0x%x", (unsigned int) disp);
12821 else
12822 sprintf (buf, "%d", (int) disp);
12823 }
12824}
12825
5d669648
L
12826/* Put DISP in BUF as signed hex number. */
12827
12828static void
12829print_displacement (char *buf, bfd_vma disp)
12830{
12831 bfd_signed_vma val = disp;
12832 char tmp[30];
12833 int i, j = 0;
12834
12835 if (val < 0)
12836 {
12837 buf[j++] = '-';
12838 val = -disp;
12839
12840 /* Check for possible overflow. */
12841 if (val < 0)
12842 {
12843 switch (address_mode)
12844 {
12845 case mode_64bit:
12846 strcpy (buf + j, "0x8000000000000000");
12847 break;
12848 case mode_32bit:
12849 strcpy (buf + j, "0x80000000");
12850 break;
12851 case mode_16bit:
12852 strcpy (buf + j, "0x8000");
12853 break;
12854 }
12855 return;
12856 }
12857 }
12858
12859 buf[j++] = '0';
12860 buf[j++] = 'x';
12861
0af1713e 12862 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
12863 for (i = 0; tmp[i] == '0'; i++)
12864 continue;
12865 if (tmp[i] == '\0')
12866 i--;
12867 strcpy (buf + j, tmp + i);
12868}
12869
3f31e633
JB
12870static void
12871intel_operand_size (int bytemode, int sizeflag)
12872{
12873 switch (bytemode)
12874 {
12875 case b_mode:
b6169b20 12876 case b_swap_mode:
42903f7f 12877 case dqb_mode:
3f31e633
JB
12878 oappend ("BYTE PTR ");
12879 break;
12880 case w_mode:
12881 case dqw_mode:
12882 oappend ("WORD PTR ");
12883 break;
1a114b12 12884 case stack_v_mode:
cb712a9e 12885 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
12886 {
12887 oappend ("QWORD PTR ");
3f31e633
JB
12888 break;
12889 }
12890 /* FALLTHRU */
12891 case v_mode:
b6169b20 12892 case v_swap_mode:
3f31e633 12893 case dq_mode:
161a04f6
L
12894 USED_REX (REX_W);
12895 if (rex & REX_W)
3f31e633 12896 oappend ("QWORD PTR ");
3f31e633 12897 else
f16cd0d5
L
12898 {
12899 if ((sizeflag & DFLAG) || bytemode == dq_mode)
12900 oappend ("DWORD PTR ");
12901 else
12902 oappend ("WORD PTR ");
12903 used_prefixes |= (prefixes & PREFIX_DATA);
12904 }
3f31e633 12905 break;
52fd6d94 12906 case z_mode:
161a04f6 12907 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12908 *obufp++ = 'D';
12909 oappend ("WORD PTR ");
161a04f6 12910 if (!(rex & REX_W))
52fd6d94
JB
12911 used_prefixes |= (prefixes & PREFIX_DATA);
12912 break;
34b772a6
JB
12913 case a_mode:
12914 if (sizeflag & DFLAG)
12915 oappend ("QWORD PTR ");
12916 else
12917 oappend ("DWORD PTR ");
12918 used_prefixes |= (prefixes & PREFIX_DATA);
12919 break;
3f31e633 12920 case d_mode:
539f890d
L
12921 case d_scalar_mode:
12922 case d_scalar_swap_mode:
fa99fab2 12923 case d_swap_mode:
42903f7f 12924 case dqd_mode:
3f31e633
JB
12925 oappend ("DWORD PTR ");
12926 break;
12927 case q_mode:
539f890d
L
12928 case q_scalar_mode:
12929 case q_scalar_swap_mode:
b6169b20 12930 case q_swap_mode:
3f31e633
JB
12931 oappend ("QWORD PTR ");
12932 break;
12933 case m_mode:
cb712a9e 12934 if (address_mode == mode_64bit)
3f31e633
JB
12935 oappend ("QWORD PTR ");
12936 else
12937 oappend ("DWORD PTR ");
12938 break;
12939 case f_mode:
12940 if (sizeflag & DFLAG)
12941 oappend ("FWORD PTR ");
12942 else
12943 oappend ("DWORD PTR ");
12944 used_prefixes |= (prefixes & PREFIX_DATA);
12945 break;
12946 case t_mode:
12947 oappend ("TBYTE PTR ");
12948 break;
12949 case x_mode:
b6169b20 12950 case x_swap_mode:
c0f3af97
L
12951 if (need_vex)
12952 {
12953 switch (vex.length)
12954 {
12955 case 128:
12956 oappend ("XMMWORD PTR ");
12957 break;
12958 case 256:
12959 oappend ("YMMWORD PTR ");
12960 break;
12961 default:
12962 abort ();
12963 }
12964 }
12965 else
12966 oappend ("XMMWORD PTR ");
12967 break;
12968 case xmm_mode:
3f31e633
JB
12969 oappend ("XMMWORD PTR ");
12970 break;
c0f3af97
L
12971 case xmmq_mode:
12972 if (!need_vex)
12973 abort ();
12974
12975 switch (vex.length)
12976 {
12977 case 128:
12978 oappend ("QWORD PTR ");
12979 break;
12980 case 256:
12981 oappend ("XMMWORD PTR ");
12982 break;
12983 default:
12984 abort ();
12985 }
12986 break;
12987 case ymmq_mode:
12988 if (!need_vex)
12989 abort ();
12990
12991 switch (vex.length)
12992 {
12993 case 128:
12994 oappend ("QWORD PTR ");
12995 break;
12996 case 256:
12997 oappend ("YMMWORD PTR ");
12998 break;
12999 default:
13000 abort ();
13001 }
13002 break;
fb9c77c7
L
13003 case o_mode:
13004 oappend ("OWORD PTR ");
13005 break;
0bfee649 13006 case vex_w_dq_mode:
1c480963 13007 case vex_scalar_w_dq_mode:
0bfee649
L
13008 if (!need_vex)
13009 abort ();
13010
13011 if (vex.w)
13012 oappend ("QWORD PTR ");
13013 else
13014 oappend ("DWORD PTR ");
13015 break;
3f31e633
JB
13016 default:
13017 break;
13018 }
13019}
13020
252b5132 13021static void
c0f3af97 13022OP_E_register (int bytemode, int sizeflag)
252b5132 13023{
c0f3af97
L
13024 int reg = modrm.rm;
13025 const char **names;
252b5132 13026
c0f3af97
L
13027 USED_REX (REX_B);
13028 if ((rex & REX_B))
13029 reg += 8;
252b5132 13030
b6169b20
L
13031 if ((sizeflag & SUFFIX_ALWAYS)
13032 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
13033 swap_operand ();
13034
c0f3af97 13035 switch (bytemode)
252b5132 13036 {
c0f3af97 13037 case b_mode:
b6169b20 13038 case b_swap_mode:
c0f3af97
L
13039 USED_REX (0);
13040 if (rex)
13041 names = names8rex;
13042 else
13043 names = names8;
13044 break;
13045 case w_mode:
13046 names = names16;
13047 break;
13048 case d_mode:
13049 names = names32;
13050 break;
13051 case q_mode:
13052 names = names64;
13053 break;
13054 case m_mode:
13055 names = address_mode == mode_64bit ? names64 : names32;
13056 break;
13057 case stack_v_mode:
13058 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 13059 {
c0f3af97 13060 names = names64;
252b5132 13061 break;
252b5132 13062 }
c0f3af97
L
13063 bytemode = v_mode;
13064 /* FALLTHRU */
13065 case v_mode:
b6169b20 13066 case v_swap_mode:
c0f3af97
L
13067 case dq_mode:
13068 case dqb_mode:
13069 case dqd_mode:
13070 case dqw_mode:
13071 USED_REX (REX_W);
13072 if (rex & REX_W)
13073 names = names64;
c0f3af97 13074 else
f16cd0d5
L
13075 {
13076 if ((sizeflag & DFLAG)
13077 || (bytemode != v_mode
13078 && bytemode != v_swap_mode))
13079 names = names32;
13080 else
13081 names = names16;
13082 used_prefixes |= (prefixes & PREFIX_DATA);
13083 }
c0f3af97
L
13084 break;
13085 case 0:
13086 return;
13087 default:
13088 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13089 return;
13090 }
c0f3af97
L
13091 oappend (names[reg]);
13092}
13093
13094static void
c1e679ec 13095OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13096{
13097 bfd_vma disp = 0;
13098 int add = (rex & REX_B) ? 8 : 0;
13099 int riprel = 0;
252b5132 13100
c0f3af97 13101 USED_REX (REX_B);
3f31e633
JB
13102 if (intel_syntax)
13103 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13104 append_seg ();
13105
5d669648 13106 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 13107 {
5d669648
L
13108 /* 32/64 bit address mode */
13109 int havedisp;
252b5132
RH
13110 int havesib;
13111 int havebase;
0f7da397 13112 int haveindex;
20afcfb7 13113 int needindex;
82c18208 13114 int base, rbase;
91d6fa6a 13115 int vindex = 0;
252b5132
RH
13116 int scale = 0;
13117
13118 havesib = 0;
13119 havebase = 1;
0f7da397 13120 haveindex = 0;
7967e09e 13121 base = modrm.rm;
252b5132
RH
13122
13123 if (base == 4)
13124 {
13125 havesib = 1;
dfc8cf43
L
13126 vindex = sib.index;
13127 scale = sib.scale;
13128 base = sib.base;
161a04f6
L
13129 USED_REX (REX_X);
13130 if (rex & REX_X)
91d6fa6a
NC
13131 vindex += 8;
13132 haveindex = vindex != 4;
252b5132
RH
13133 codep++;
13134 }
82c18208 13135 rbase = base + add;
252b5132 13136
7967e09e 13137 switch (modrm.mod)
252b5132
RH
13138 {
13139 case 0:
82c18208 13140 if (base == 5)
252b5132
RH
13141 {
13142 havebase = 0;
cb712a9e 13143 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
13144 riprel = 1;
13145 disp = get32s ();
252b5132
RH
13146 }
13147 break;
13148 case 1:
13149 FETCH_DATA (the_info, codep + 1);
13150 disp = *codep++;
13151 if ((disp & 0x80) != 0)
13152 disp -= 0x100;
13153 break;
13154 case 2:
52b15da3 13155 disp = get32s ();
252b5132
RH
13156 break;
13157 }
13158
20afcfb7
L
13159 /* In 32bit mode, we need index register to tell [offset] from
13160 [eiz*1 + offset]. */
13161 needindex = (havesib
13162 && !havebase
13163 && !haveindex
13164 && address_mode == mode_32bit);
13165 havedisp = (havebase
13166 || needindex
13167 || (havesib && (haveindex || scale != 0)));
5d669648 13168
252b5132 13169 if (!intel_syntax)
82c18208 13170 if (modrm.mod != 0 || base == 5)
db6eb5be 13171 {
5d669648
L
13172 if (havedisp || riprel)
13173 print_displacement (scratchbuf, disp);
13174 else
13175 print_operand_value (scratchbuf, 1, disp);
db6eb5be 13176 oappend (scratchbuf);
52b15da3
JH
13177 if (riprel)
13178 {
13179 set_op (disp, 1);
87767711 13180 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 13181 }
db6eb5be 13182 }
2da11e11 13183
87767711
JB
13184 if (havebase || haveindex || riprel)
13185 used_prefixes |= PREFIX_ADDR;
13186
5d669648 13187 if (havedisp || (intel_syntax && riprel))
252b5132 13188 {
252b5132 13189 *obufp++ = open_char;
52b15da3 13190 if (intel_syntax && riprel)
185b1163
L
13191 {
13192 set_op (disp, 1);
87767711 13193 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 13194 }
db6eb5be 13195 *obufp = '\0';
252b5132 13196 if (havebase)
cb712a9e 13197 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 13198 ? names64[rbase] : names32[rbase]);
252b5132
RH
13199 if (havesib)
13200 {
db51cc60
L
13201 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
13202 print index to tell base + index from base. */
13203 if (scale != 0
20afcfb7 13204 || needindex
db51cc60
L
13205 || haveindex
13206 || (havebase && base != ESP_REG_NUM))
252b5132 13207 {
9306ca4a 13208 if (!intel_syntax || havebase)
db6eb5be 13209 {
9306ca4a
JB
13210 *obufp++ = separator_char;
13211 *obufp = '\0';
db6eb5be 13212 }
db51cc60
L
13213 if (haveindex)
13214 oappend (address_mode == mode_64bit
13215 && (sizeflag & AFLAG)
91d6fa6a 13216 ? names64[vindex] : names32[vindex]);
db51cc60
L
13217 else
13218 oappend (address_mode == mode_64bit
13219 && (sizeflag & AFLAG)
13220 ? index64 : index32);
13221
db6eb5be
AM
13222 *obufp++ = scale_char;
13223 *obufp = '\0';
13224 sprintf (scratchbuf, "%d", 1 << scale);
13225 oappend (scratchbuf);
13226 }
252b5132 13227 }
185b1163 13228 if (intel_syntax
82c18208 13229 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 13230 {
db51cc60 13231 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
13232 {
13233 *obufp++ = '+';
13234 *obufp = '\0';
13235 }
05203043 13236 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
13237 {
13238 *obufp++ = '-';
13239 *obufp = '\0';
13240 disp = - (bfd_signed_vma) disp;
13241 }
13242
db51cc60
L
13243 if (havedisp)
13244 print_displacement (scratchbuf, disp);
13245 else
13246 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
13247 oappend (scratchbuf);
13248 }
252b5132
RH
13249
13250 *obufp++ = close_char;
db6eb5be 13251 *obufp = '\0';
252b5132
RH
13252 }
13253 else if (intel_syntax)
db6eb5be 13254 {
82c18208 13255 if (modrm.mod != 0 || base == 5)
db6eb5be 13256 {
252b5132
RH
13257 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13258 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13259 ;
13260 else
13261 {
d708bcba 13262 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13263 oappend (":");
13264 }
52b15da3 13265 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
13266 oappend (scratchbuf);
13267 }
13268 }
252b5132
RH
13269 }
13270 else
f16cd0d5
L
13271 {
13272 /* 16 bit address mode */
13273 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 13274 switch (modrm.mod)
252b5132
RH
13275 {
13276 case 0:
7967e09e 13277 if (modrm.rm == 6)
252b5132
RH
13278 {
13279 disp = get16 ();
13280 if ((disp & 0x8000) != 0)
13281 disp -= 0x10000;
13282 }
13283 break;
13284 case 1:
13285 FETCH_DATA (the_info, codep + 1);
13286 disp = *codep++;
13287 if ((disp & 0x80) != 0)
13288 disp -= 0x100;
13289 break;
13290 case 2:
13291 disp = get16 ();
13292 if ((disp & 0x8000) != 0)
13293 disp -= 0x10000;
13294 break;
13295 }
13296
13297 if (!intel_syntax)
7967e09e 13298 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 13299 {
5d669648 13300 print_displacement (scratchbuf, disp);
db6eb5be
AM
13301 oappend (scratchbuf);
13302 }
252b5132 13303
7967e09e 13304 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
13305 {
13306 *obufp++ = open_char;
db6eb5be 13307 *obufp = '\0';
7967e09e 13308 oappend (index16[modrm.rm]);
5d669648
L
13309 if (intel_syntax
13310 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 13311 {
5d669648 13312 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
13313 {
13314 *obufp++ = '+';
13315 *obufp = '\0';
13316 }
7967e09e 13317 else if (modrm.mod != 1)
3d456fa1
JB
13318 {
13319 *obufp++ = '-';
13320 *obufp = '\0';
13321 disp = - (bfd_signed_vma) disp;
13322 }
13323
5d669648 13324 print_displacement (scratchbuf, disp);
3d456fa1
JB
13325 oappend (scratchbuf);
13326 }
13327
db6eb5be
AM
13328 *obufp++ = close_char;
13329 *obufp = '\0';
252b5132 13330 }
3d456fa1
JB
13331 else if (intel_syntax)
13332 {
13333 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13334 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13335 ;
13336 else
13337 {
13338 oappend (names_seg[ds_reg - es_reg]);
13339 oappend (":");
13340 }
13341 print_operand_value (scratchbuf, 1, disp & 0xffff);
13342 oappend (scratchbuf);
13343 }
252b5132
RH
13344 }
13345}
13346
c0f3af97 13347static void
8b3f93e7 13348OP_E (int bytemode, int sizeflag)
c0f3af97
L
13349{
13350 /* Skip mod/rm byte. */
13351 MODRM_CHECK;
13352 codep++;
13353
13354 if (modrm.mod == 3)
13355 OP_E_register (bytemode, sizeflag);
13356 else
c1e679ec 13357 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
13358}
13359
252b5132 13360static void
26ca5450 13361OP_G (int bytemode, int sizeflag)
252b5132 13362{
52b15da3 13363 int add = 0;
161a04f6
L
13364 USED_REX (REX_R);
13365 if (rex & REX_R)
52b15da3 13366 add += 8;
252b5132
RH
13367 switch (bytemode)
13368 {
13369 case b_mode:
52b15da3
JH
13370 USED_REX (0);
13371 if (rex)
7967e09e 13372 oappend (names8rex[modrm.reg + add]);
52b15da3 13373 else
7967e09e 13374 oappend (names8[modrm.reg + add]);
252b5132
RH
13375 break;
13376 case w_mode:
7967e09e 13377 oappend (names16[modrm.reg + add]);
252b5132
RH
13378 break;
13379 case d_mode:
7967e09e 13380 oappend (names32[modrm.reg + add]);
52b15da3
JH
13381 break;
13382 case q_mode:
7967e09e 13383 oappend (names64[modrm.reg + add]);
252b5132
RH
13384 break;
13385 case v_mode:
9306ca4a 13386 case dq_mode:
42903f7f
L
13387 case dqb_mode:
13388 case dqd_mode:
9306ca4a 13389 case dqw_mode:
161a04f6
L
13390 USED_REX (REX_W);
13391 if (rex & REX_W)
7967e09e 13392 oappend (names64[modrm.reg + add]);
252b5132 13393 else
f16cd0d5
L
13394 {
13395 if ((sizeflag & DFLAG) || bytemode != v_mode)
13396 oappend (names32[modrm.reg + add]);
13397 else
13398 oappend (names16[modrm.reg + add]);
13399 used_prefixes |= (prefixes & PREFIX_DATA);
13400 }
252b5132 13401 break;
90700ea2 13402 case m_mode:
cb712a9e 13403 if (address_mode == mode_64bit)
7967e09e 13404 oappend (names64[modrm.reg + add]);
90700ea2 13405 else
7967e09e 13406 oappend (names32[modrm.reg + add]);
90700ea2 13407 break;
252b5132
RH
13408 default:
13409 oappend (INTERNAL_DISASSEMBLER_ERROR);
13410 break;
13411 }
13412}
13413
52b15da3 13414static bfd_vma
26ca5450 13415get64 (void)
52b15da3 13416{
5dd0794d 13417 bfd_vma x;
52b15da3 13418#ifdef BFD64
5dd0794d
AM
13419 unsigned int a;
13420 unsigned int b;
13421
52b15da3
JH
13422 FETCH_DATA (the_info, codep + 8);
13423 a = *codep++ & 0xff;
13424 a |= (*codep++ & 0xff) << 8;
13425 a |= (*codep++ & 0xff) << 16;
13426 a |= (*codep++ & 0xff) << 24;
5dd0794d 13427 b = *codep++ & 0xff;
52b15da3
JH
13428 b |= (*codep++ & 0xff) << 8;
13429 b |= (*codep++ & 0xff) << 16;
13430 b |= (*codep++ & 0xff) << 24;
13431 x = a + ((bfd_vma) b << 32);
13432#else
6608db57 13433 abort ();
5dd0794d 13434 x = 0;
52b15da3
JH
13435#endif
13436 return x;
13437}
13438
13439static bfd_signed_vma
26ca5450 13440get32 (void)
252b5132 13441{
52b15da3 13442 bfd_signed_vma x = 0;
252b5132
RH
13443
13444 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
13445 x = *codep++ & (bfd_signed_vma) 0xff;
13446 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13447 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13448 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13449 return x;
13450}
13451
13452static bfd_signed_vma
26ca5450 13453get32s (void)
52b15da3
JH
13454{
13455 bfd_signed_vma x = 0;
13456
13457 FETCH_DATA (the_info, codep + 4);
13458 x = *codep++ & (bfd_signed_vma) 0xff;
13459 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13460 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13461 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13462
13463 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13464
252b5132
RH
13465 return x;
13466}
13467
13468static int
26ca5450 13469get16 (void)
252b5132
RH
13470{
13471 int x = 0;
13472
13473 FETCH_DATA (the_info, codep + 2);
13474 x = *codep++ & 0xff;
13475 x |= (*codep++ & 0xff) << 8;
13476 return x;
13477}
13478
13479static void
26ca5450 13480set_op (bfd_vma op, int riprel)
252b5132
RH
13481{
13482 op_index[op_ad] = op_ad;
cb712a9e 13483 if (address_mode == mode_64bit)
7081ff04
AJ
13484 {
13485 op_address[op_ad] = op;
13486 op_riprel[op_ad] = riprel;
13487 }
13488 else
13489 {
13490 /* Mask to get a 32-bit address. */
13491 op_address[op_ad] = op & 0xffffffff;
13492 op_riprel[op_ad] = riprel & 0xffffffff;
13493 }
252b5132
RH
13494}
13495
13496static void
26ca5450 13497OP_REG (int code, int sizeflag)
252b5132 13498{
2da11e11 13499 const char *s;
9b60702d 13500 int add;
161a04f6
L
13501 USED_REX (REX_B);
13502 if (rex & REX_B)
52b15da3 13503 add = 8;
9b60702d
L
13504 else
13505 add = 0;
52b15da3
JH
13506
13507 switch (code)
13508 {
52b15da3
JH
13509 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13510 case sp_reg: case bp_reg: case si_reg: case di_reg:
13511 s = names16[code - ax_reg + add];
13512 break;
13513 case es_reg: case ss_reg: case cs_reg:
13514 case ds_reg: case fs_reg: case gs_reg:
13515 s = names_seg[code - es_reg + add];
13516 break;
13517 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13518 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13519 USED_REX (0);
13520 if (rex)
13521 s = names8rex[code - al_reg + add];
13522 else
13523 s = names8[code - al_reg];
13524 break;
6439fc28
AM
13525 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13526 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 13527 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
13528 {
13529 s = names64[code - rAX_reg + add];
13530 break;
13531 }
13532 code += eAX_reg - rAX_reg;
6608db57 13533 /* Fall through. */
52b15da3
JH
13534 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13535 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13536 USED_REX (REX_W);
13537 if (rex & REX_W)
52b15da3 13538 s = names64[code - eAX_reg + add];
52b15da3 13539 else
f16cd0d5
L
13540 {
13541 if (sizeflag & DFLAG)
13542 s = names32[code - eAX_reg + add];
13543 else
13544 s = names16[code - eAX_reg + add];
13545 used_prefixes |= (prefixes & PREFIX_DATA);
13546 }
52b15da3 13547 break;
52b15da3
JH
13548 default:
13549 s = INTERNAL_DISASSEMBLER_ERROR;
13550 break;
13551 }
13552 oappend (s);
13553}
13554
13555static void
26ca5450 13556OP_IMREG (int code, int sizeflag)
52b15da3
JH
13557{
13558 const char *s;
252b5132
RH
13559
13560 switch (code)
13561 {
13562 case indir_dx_reg:
d708bcba 13563 if (intel_syntax)
52fd6d94 13564 s = "dx";
d708bcba 13565 else
db6eb5be 13566 s = "(%dx)";
252b5132
RH
13567 break;
13568 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13569 case sp_reg: case bp_reg: case si_reg: case di_reg:
13570 s = names16[code - ax_reg];
13571 break;
13572 case es_reg: case ss_reg: case cs_reg:
13573 case ds_reg: case fs_reg: case gs_reg:
13574 s = names_seg[code - es_reg];
13575 break;
13576 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13577 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
13578 USED_REX (0);
13579 if (rex)
13580 s = names8rex[code - al_reg];
13581 else
13582 s = names8[code - al_reg];
252b5132
RH
13583 break;
13584 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13585 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13586 USED_REX (REX_W);
13587 if (rex & REX_W)
52b15da3 13588 s = names64[code - eAX_reg];
252b5132 13589 else
f16cd0d5
L
13590 {
13591 if (sizeflag & DFLAG)
13592 s = names32[code - eAX_reg];
13593 else
13594 s = names16[code - eAX_reg];
13595 used_prefixes |= (prefixes & PREFIX_DATA);
13596 }
252b5132 13597 break;
52fd6d94 13598 case z_mode_ax_reg:
161a04f6 13599 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13600 s = *names32;
13601 else
13602 s = *names16;
161a04f6 13603 if (!(rex & REX_W))
52fd6d94
JB
13604 used_prefixes |= (prefixes & PREFIX_DATA);
13605 break;
252b5132
RH
13606 default:
13607 s = INTERNAL_DISASSEMBLER_ERROR;
13608 break;
13609 }
13610 oappend (s);
13611}
13612
13613static void
26ca5450 13614OP_I (int bytemode, int sizeflag)
252b5132 13615{
52b15da3
JH
13616 bfd_signed_vma op;
13617 bfd_signed_vma mask = -1;
252b5132
RH
13618
13619 switch (bytemode)
13620 {
13621 case b_mode:
13622 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
13623 op = *codep++;
13624 mask = 0xff;
13625 break;
13626 case q_mode:
cb712a9e 13627 if (address_mode == mode_64bit)
6439fc28
AM
13628 {
13629 op = get32s ();
13630 break;
13631 }
6608db57 13632 /* Fall through. */
252b5132 13633 case v_mode:
161a04f6
L
13634 USED_REX (REX_W);
13635 if (rex & REX_W)
52b15da3 13636 op = get32s ();
252b5132 13637 else
52b15da3 13638 {
f16cd0d5
L
13639 if (sizeflag & DFLAG)
13640 {
13641 op = get32 ();
13642 mask = 0xffffffff;
13643 }
13644 else
13645 {
13646 op = get16 ();
13647 mask = 0xfffff;
13648 }
13649 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13650 }
252b5132
RH
13651 break;
13652 case w_mode:
52b15da3 13653 mask = 0xfffff;
252b5132
RH
13654 op = get16 ();
13655 break;
9306ca4a
JB
13656 case const_1_mode:
13657 if (intel_syntax)
13658 oappend ("1");
13659 return;
252b5132
RH
13660 default:
13661 oappend (INTERNAL_DISASSEMBLER_ERROR);
13662 return;
13663 }
13664
52b15da3
JH
13665 op &= mask;
13666 scratchbuf[0] = '$';
d708bcba
AM
13667 print_operand_value (scratchbuf + 1, 1, op);
13668 oappend (scratchbuf + intel_syntax);
52b15da3
JH
13669 scratchbuf[0] = '\0';
13670}
13671
13672static void
26ca5450 13673OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
13674{
13675 bfd_signed_vma op;
13676 bfd_signed_vma mask = -1;
13677
cb712a9e 13678 if (address_mode != mode_64bit)
6439fc28
AM
13679 {
13680 OP_I (bytemode, sizeflag);
13681 return;
13682 }
13683
52b15da3
JH
13684 switch (bytemode)
13685 {
13686 case b_mode:
13687 FETCH_DATA (the_info, codep + 1);
13688 op = *codep++;
13689 mask = 0xff;
13690 break;
13691 case v_mode:
161a04f6
L
13692 USED_REX (REX_W);
13693 if (rex & REX_W)
52b15da3 13694 op = get64 ();
52b15da3
JH
13695 else
13696 {
f16cd0d5
L
13697 if (sizeflag & DFLAG)
13698 {
13699 op = get32 ();
13700 mask = 0xffffffff;
13701 }
13702 else
13703 {
13704 op = get16 ();
13705 mask = 0xfffff;
13706 }
13707 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13708 }
52b15da3
JH
13709 break;
13710 case w_mode:
13711 mask = 0xfffff;
13712 op = get16 ();
13713 break;
13714 default:
13715 oappend (INTERNAL_DISASSEMBLER_ERROR);
13716 return;
13717 }
13718
13719 op &= mask;
13720 scratchbuf[0] = '$';
d708bcba
AM
13721 print_operand_value (scratchbuf + 1, 1, op);
13722 oappend (scratchbuf + intel_syntax);
252b5132
RH
13723 scratchbuf[0] = '\0';
13724}
13725
13726static void
26ca5450 13727OP_sI (int bytemode, int sizeflag)
252b5132 13728{
52b15da3 13729 bfd_signed_vma op;
252b5132
RH
13730
13731 switch (bytemode)
13732 {
13733 case b_mode:
13734 FETCH_DATA (the_info, codep + 1);
13735 op = *codep++;
13736 if ((op & 0x80) != 0)
13737 op -= 0x100;
13738 break;
13739 case v_mode:
d9e3625e 13740 if (sizeflag & DFLAG)
52b15da3 13741 op = get32s ();
252b5132 13742 else
d9e3625e 13743 op = get16 ();
252b5132
RH
13744 break;
13745 default:
13746 oappend (INTERNAL_DISASSEMBLER_ERROR);
13747 return;
13748 }
52b15da3
JH
13749
13750 scratchbuf[0] = '$';
13751 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 13752 oappend (scratchbuf + intel_syntax);
252b5132
RH
13753}
13754
13755static void
26ca5450 13756OP_J (int bytemode, int sizeflag)
252b5132 13757{
52b15da3 13758 bfd_vma disp;
7081ff04 13759 bfd_vma mask = -1;
65ca155d 13760 bfd_vma segment = 0;
252b5132
RH
13761
13762 switch (bytemode)
13763 {
13764 case b_mode:
13765 FETCH_DATA (the_info, codep + 1);
13766 disp = *codep++;
13767 if ((disp & 0x80) != 0)
13768 disp -= 0x100;
13769 break;
13770 case v_mode:
f16cd0d5 13771 USED_REX (REX_W);
161a04f6 13772 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13773 disp = get32s ();
252b5132
RH
13774 else
13775 {
13776 disp = get16 ();
206717e8
L
13777 if ((disp & 0x8000) != 0)
13778 disp -= 0x10000;
65ca155d
L
13779 /* In 16bit mode, address is wrapped around at 64k within
13780 the same segment. Otherwise, a data16 prefix on a jump
13781 instruction means that the pc is masked to 16 bits after
13782 the displacement is added! */
13783 mask = 0xffff;
13784 if ((prefixes & PREFIX_DATA) == 0)
13785 segment = ((start_pc + codep - start_codep)
13786 & ~((bfd_vma) 0xffff));
252b5132 13787 }
f16cd0d5
L
13788 if (!(rex & REX_W))
13789 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13790 break;
13791 default:
13792 oappend (INTERNAL_DISASSEMBLER_ERROR);
13793 return;
13794 }
65ca155d 13795 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
13796 set_op (disp, 0);
13797 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
13798 oappend (scratchbuf);
13799}
13800
252b5132 13801static void
ed7841b3 13802OP_SEG (int bytemode, int sizeflag)
252b5132 13803{
ed7841b3 13804 if (bytemode == w_mode)
7967e09e 13805 oappend (names_seg[modrm.reg]);
ed7841b3 13806 else
7967e09e 13807 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
13808}
13809
13810static void
26ca5450 13811OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
13812{
13813 int seg, offset;
13814
c608c12e 13815 if (sizeflag & DFLAG)
252b5132 13816 {
c608c12e
AM
13817 offset = get32 ();
13818 seg = get16 ();
252b5132 13819 }
c608c12e
AM
13820 else
13821 {
13822 offset = get16 ();
13823 seg = get16 ();
13824 }
7d421014 13825 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 13826 if (intel_syntax)
3f31e633 13827 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
13828 else
13829 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 13830 oappend (scratchbuf);
252b5132
RH
13831}
13832
252b5132 13833static void
3f31e633 13834OP_OFF (int bytemode, int sizeflag)
252b5132 13835{
52b15da3 13836 bfd_vma off;
252b5132 13837
3f31e633
JB
13838 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13839 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13840 append_seg ();
13841
cb712a9e 13842 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
13843 off = get32 ();
13844 else
13845 off = get16 ();
13846
13847 if (intel_syntax)
13848 {
13849 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13850 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 13851 {
d708bcba 13852 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13853 oappend (":");
13854 }
13855 }
52b15da3
JH
13856 print_operand_value (scratchbuf, 1, off);
13857 oappend (scratchbuf);
13858}
6439fc28 13859
52b15da3 13860static void
3f31e633 13861OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
13862{
13863 bfd_vma off;
13864
539e75ad
L
13865 if (address_mode != mode_64bit
13866 || (prefixes & PREFIX_ADDR))
6439fc28
AM
13867 {
13868 OP_OFF (bytemode, sizeflag);
13869 return;
13870 }
13871
3f31e633
JB
13872 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13873 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
13874 append_seg ();
13875
6608db57 13876 off = get64 ();
52b15da3
JH
13877
13878 if (intel_syntax)
13879 {
13880 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13881 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 13882 {
d708bcba 13883 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
13884 oappend (":");
13885 }
13886 }
13887 print_operand_value (scratchbuf, 1, off);
252b5132
RH
13888 oappend (scratchbuf);
13889}
13890
13891static void
26ca5450 13892ptr_reg (int code, int sizeflag)
252b5132 13893{
2da11e11 13894 const char *s;
d708bcba 13895
1d9f512f 13896 *obufp++ = open_char;
20f0a1fc 13897 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 13898 if (address_mode == mode_64bit)
c1a64871
JH
13899 {
13900 if (!(sizeflag & AFLAG))
db6eb5be 13901 s = names32[code - eAX_reg];
c1a64871 13902 else
db6eb5be 13903 s = names64[code - eAX_reg];
c1a64871 13904 }
52b15da3 13905 else if (sizeflag & AFLAG)
252b5132
RH
13906 s = names32[code - eAX_reg];
13907 else
13908 s = names16[code - eAX_reg];
13909 oappend (s);
1d9f512f
AM
13910 *obufp++ = close_char;
13911 *obufp = 0;
252b5132
RH
13912}
13913
13914static void
26ca5450 13915OP_ESreg (int code, int sizeflag)
252b5132 13916{
9306ca4a 13917 if (intel_syntax)
52fd6d94
JB
13918 {
13919 switch (codep[-1])
13920 {
13921 case 0x6d: /* insw/insl */
13922 intel_operand_size (z_mode, sizeflag);
13923 break;
13924 case 0xa5: /* movsw/movsl/movsq */
13925 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13926 case 0xab: /* stosw/stosl */
13927 case 0xaf: /* scasw/scasl */
13928 intel_operand_size (v_mode, sizeflag);
13929 break;
13930 default:
13931 intel_operand_size (b_mode, sizeflag);
13932 }
13933 }
d708bcba 13934 oappend ("%es:" + intel_syntax);
252b5132
RH
13935 ptr_reg (code, sizeflag);
13936}
13937
13938static void
26ca5450 13939OP_DSreg (int code, int sizeflag)
252b5132 13940{
9306ca4a 13941 if (intel_syntax)
52fd6d94
JB
13942 {
13943 switch (codep[-1])
13944 {
13945 case 0x6f: /* outsw/outsl */
13946 intel_operand_size (z_mode, sizeflag);
13947 break;
13948 case 0xa5: /* movsw/movsl/movsq */
13949 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13950 case 0xad: /* lodsw/lodsl/lodsq */
13951 intel_operand_size (v_mode, sizeflag);
13952 break;
13953 default:
13954 intel_operand_size (b_mode, sizeflag);
13955 }
13956 }
252b5132
RH
13957 if ((prefixes
13958 & (PREFIX_CS
13959 | PREFIX_DS
13960 | PREFIX_SS
13961 | PREFIX_ES
13962 | PREFIX_FS
13963 | PREFIX_GS)) == 0)
13964 prefixes |= PREFIX_DS;
6608db57 13965 append_seg ();
252b5132
RH
13966 ptr_reg (code, sizeflag);
13967}
13968
252b5132 13969static void
26ca5450 13970OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13971{
9b60702d 13972 int add;
161a04f6 13973 if (rex & REX_R)
c4a530c5 13974 {
161a04f6 13975 USED_REX (REX_R);
c4a530c5
JB
13976 add = 8;
13977 }
cb712a9e 13978 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 13979 {
f16cd0d5 13980 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
13981 used_prefixes |= PREFIX_LOCK;
13982 add = 8;
13983 }
9b60702d
L
13984 else
13985 add = 0;
7967e09e 13986 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 13987 oappend (scratchbuf + intel_syntax);
252b5132
RH
13988}
13989
252b5132 13990static void
26ca5450 13991OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13992{
9b60702d 13993 int add;
161a04f6
L
13994 USED_REX (REX_R);
13995 if (rex & REX_R)
52b15da3 13996 add = 8;
9b60702d
L
13997 else
13998 add = 0;
d708bcba 13999 if (intel_syntax)
7967e09e 14000 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 14001 else
7967e09e 14002 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
14003 oappend (scratchbuf);
14004}
14005
252b5132 14006static void
26ca5450 14007OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14008{
7967e09e 14009 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 14010 oappend (scratchbuf + intel_syntax);
252b5132
RH
14011}
14012
14013static void
6f74c397 14014OP_R (int bytemode, int sizeflag)
252b5132 14015{
7967e09e 14016 if (modrm.mod == 3)
2da11e11
AM
14017 OP_E (bytemode, sizeflag);
14018 else
6608db57 14019 BadOp ();
252b5132
RH
14020}
14021
14022static void
26ca5450 14023OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 14024{
b9733481
L
14025 int reg = modrm.reg;
14026 const char **names;
14027
041bd2e0
JH
14028 used_prefixes |= (prefixes & PREFIX_DATA);
14029 if (prefixes & PREFIX_DATA)
20f0a1fc 14030 {
b9733481 14031 names = names_xmm;
161a04f6
L
14032 USED_REX (REX_R);
14033 if (rex & REX_R)
b9733481 14034 reg += 8;
20f0a1fc 14035 }
041bd2e0 14036 else
b9733481
L
14037 names = names_mm;
14038 oappend (names[reg]);
252b5132
RH
14039}
14040
c608c12e 14041static void
c0f3af97 14042OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 14043{
b9733481
L
14044 int reg = modrm.reg;
14045 const char **names;
14046
161a04f6
L
14047 USED_REX (REX_R);
14048 if (rex & REX_R)
b9733481 14049 reg += 8;
539f890d
L
14050 if (need_vex
14051 && bytemode != xmm_mode
14052 && bytemode != scalar_mode)
c0f3af97
L
14053 {
14054 switch (vex.length)
14055 {
14056 case 128:
b9733481 14057 names = names_xmm;
c0f3af97
L
14058 break;
14059 case 256:
b9733481 14060 names = names_ymm;
c0f3af97
L
14061 break;
14062 default:
14063 abort ();
14064 }
14065 }
14066 else
b9733481
L
14067 names = names_xmm;
14068 oappend (names[reg]);
c608c12e
AM
14069}
14070
252b5132 14071static void
26ca5450 14072OP_EM (int bytemode, int sizeflag)
252b5132 14073{
b9733481
L
14074 int reg;
14075 const char **names;
14076
7967e09e 14077 if (modrm.mod != 3)
252b5132 14078 {
b6169b20
L
14079 if (intel_syntax
14080 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
14081 {
14082 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14083 used_prefixes |= (prefixes & PREFIX_DATA);
14084 }
252b5132
RH
14085 OP_E (bytemode, sizeflag);
14086 return;
14087 }
14088
b6169b20
L
14089 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
14090 swap_operand ();
14091
6608db57 14092 /* Skip mod/rm byte. */
4bba6815 14093 MODRM_CHECK;
252b5132 14094 codep++;
041bd2e0 14095 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14096 reg = modrm.rm;
041bd2e0 14097 if (prefixes & PREFIX_DATA)
20f0a1fc 14098 {
b9733481 14099 names = names_xmm;
161a04f6
L
14100 USED_REX (REX_B);
14101 if (rex & REX_B)
b9733481 14102 reg += 8;
20f0a1fc 14103 }
041bd2e0 14104 else
b9733481
L
14105 names = names_mm;
14106 oappend (names[reg]);
252b5132
RH
14107}
14108
246c51aa
L
14109/* cvt* are the only instructions in sse2 which have
14110 both SSE and MMX operands and also have 0x66 prefix
14111 in their opcode. 0x66 was originally used to differentiate
14112 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
14113 cvt* separately using OP_EMC and OP_MXC */
14114static void
14115OP_EMC (int bytemode, int sizeflag)
14116{
7967e09e 14117 if (modrm.mod != 3)
4d9567e0
MM
14118 {
14119 if (intel_syntax && bytemode == v_mode)
14120 {
14121 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14122 used_prefixes |= (prefixes & PREFIX_DATA);
14123 }
14124 OP_E (bytemode, sizeflag);
14125 return;
14126 }
246c51aa 14127
4d9567e0
MM
14128 /* Skip mod/rm byte. */
14129 MODRM_CHECK;
14130 codep++;
14131 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14132 oappend (names_mm[modrm.rm]);
4d9567e0
MM
14133}
14134
14135static void
14136OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14137{
14138 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 14139 oappend (names_mm[modrm.reg]);
4d9567e0
MM
14140}
14141
c608c12e 14142static void
26ca5450 14143OP_EX (int bytemode, int sizeflag)
c608c12e 14144{
b9733481
L
14145 int reg;
14146 const char **names;
d6f574e0
L
14147
14148 /* Skip mod/rm byte. */
14149 MODRM_CHECK;
14150 codep++;
14151
7967e09e 14152 if (modrm.mod != 3)
c608c12e 14153 {
c1e679ec 14154 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
14155 return;
14156 }
d6f574e0 14157
b9733481 14158 reg = modrm.rm;
161a04f6
L
14159 USED_REX (REX_B);
14160 if (rex & REX_B)
b9733481 14161 reg += 8;
c608c12e 14162
b6169b20 14163 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
14164 && (bytemode == x_swap_mode
14165 || bytemode == d_swap_mode
539f890d
L
14166 || bytemode == d_scalar_swap_mode
14167 || bytemode == q_swap_mode
14168 || bytemode == q_scalar_swap_mode))
b6169b20
L
14169 swap_operand ();
14170
c0f3af97
L
14171 if (need_vex
14172 && bytemode != xmm_mode
539f890d
L
14173 && bytemode != xmmq_mode
14174 && bytemode != d_scalar_mode
14175 && bytemode != d_scalar_swap_mode
14176 && bytemode != q_scalar_mode
1c480963
L
14177 && bytemode != q_scalar_swap_mode
14178 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
14179 {
14180 switch (vex.length)
14181 {
14182 case 128:
b9733481 14183 names = names_xmm;
c0f3af97
L
14184 break;
14185 case 256:
b9733481 14186 names = names_ymm;
c0f3af97
L
14187 break;
14188 default:
14189 abort ();
14190 }
14191 }
14192 else
b9733481
L
14193 names = names_xmm;
14194 oappend (names[reg]);
c608c12e
AM
14195}
14196
252b5132 14197static void
26ca5450 14198OP_MS (int bytemode, int sizeflag)
252b5132 14199{
7967e09e 14200 if (modrm.mod == 3)
2da11e11
AM
14201 OP_EM (bytemode, sizeflag);
14202 else
6608db57 14203 BadOp ();
252b5132
RH
14204}
14205
992aaec9 14206static void
26ca5450 14207OP_XS (int bytemode, int sizeflag)
992aaec9 14208{
7967e09e 14209 if (modrm.mod == 3)
992aaec9
AM
14210 OP_EX (bytemode, sizeflag);
14211 else
6608db57 14212 BadOp ();
992aaec9
AM
14213}
14214
cc0ec051
AM
14215static void
14216OP_M (int bytemode, int sizeflag)
14217{
7967e09e 14218 if (modrm.mod == 3)
75413a22
L
14219 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14220 BadOp ();
cc0ec051
AM
14221 else
14222 OP_E (bytemode, sizeflag);
14223}
14224
14225static void
14226OP_0f07 (int bytemode, int sizeflag)
14227{
7967e09e 14228 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
14229 BadOp ();
14230 else
14231 OP_E (bytemode, sizeflag);
14232}
14233
46e883c5 14234/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 14235 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 14236
cc0ec051 14237static void
46e883c5 14238NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 14239{
8b38ad71
L
14240 if ((prefixes & PREFIX_DATA) != 0
14241 || (rex != 0
14242 && rex != 0x48
14243 && address_mode == mode_64bit))
46e883c5
L
14244 OP_REG (bytemode, sizeflag);
14245 else
14246 strcpy (obuf, "nop");
14247}
14248
14249static void
14250NOP_Fixup2 (int bytemode, int sizeflag)
14251{
8b38ad71
L
14252 if ((prefixes & PREFIX_DATA) != 0
14253 || (rex != 0
14254 && rex != 0x48
14255 && address_mode == mode_64bit))
46e883c5 14256 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
14257}
14258
84037f8c 14259static const char *const Suffix3DNow[] = {
252b5132
RH
14260/* 00 */ NULL, NULL, NULL, NULL,
14261/* 04 */ NULL, NULL, NULL, NULL,
14262/* 08 */ NULL, NULL, NULL, NULL,
9e525108 14263/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
14264/* 10 */ NULL, NULL, NULL, NULL,
14265/* 14 */ NULL, NULL, NULL, NULL,
14266/* 18 */ NULL, NULL, NULL, NULL,
9e525108 14267/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
14268/* 20 */ NULL, NULL, NULL, NULL,
14269/* 24 */ NULL, NULL, NULL, NULL,
14270/* 28 */ NULL, NULL, NULL, NULL,
14271/* 2C */ NULL, NULL, NULL, NULL,
14272/* 30 */ NULL, NULL, NULL, NULL,
14273/* 34 */ NULL, NULL, NULL, NULL,
14274/* 38 */ NULL, NULL, NULL, NULL,
14275/* 3C */ NULL, NULL, NULL, NULL,
14276/* 40 */ NULL, NULL, NULL, NULL,
14277/* 44 */ NULL, NULL, NULL, NULL,
14278/* 48 */ NULL, NULL, NULL, NULL,
14279/* 4C */ NULL, NULL, NULL, NULL,
14280/* 50 */ NULL, NULL, NULL, NULL,
14281/* 54 */ NULL, NULL, NULL, NULL,
14282/* 58 */ NULL, NULL, NULL, NULL,
14283/* 5C */ NULL, NULL, NULL, NULL,
14284/* 60 */ NULL, NULL, NULL, NULL,
14285/* 64 */ NULL, NULL, NULL, NULL,
14286/* 68 */ NULL, NULL, NULL, NULL,
14287/* 6C */ NULL, NULL, NULL, NULL,
14288/* 70 */ NULL, NULL, NULL, NULL,
14289/* 74 */ NULL, NULL, NULL, NULL,
14290/* 78 */ NULL, NULL, NULL, NULL,
14291/* 7C */ NULL, NULL, NULL, NULL,
14292/* 80 */ NULL, NULL, NULL, NULL,
14293/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
14294/* 88 */ NULL, NULL, "pfnacc", NULL,
14295/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
14296/* 90 */ "pfcmpge", NULL, NULL, NULL,
14297/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14298/* 98 */ NULL, NULL, "pfsub", NULL,
14299/* 9C */ NULL, NULL, "pfadd", NULL,
14300/* A0 */ "pfcmpgt", NULL, NULL, NULL,
14301/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14302/* A8 */ NULL, NULL, "pfsubr", NULL,
14303/* AC */ NULL, NULL, "pfacc", NULL,
14304/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 14305/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 14306/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
14307/* BC */ NULL, NULL, NULL, "pavgusb",
14308/* C0 */ NULL, NULL, NULL, NULL,
14309/* C4 */ NULL, NULL, NULL, NULL,
14310/* C8 */ NULL, NULL, NULL, NULL,
14311/* CC */ NULL, NULL, NULL, NULL,
14312/* D0 */ NULL, NULL, NULL, NULL,
14313/* D4 */ NULL, NULL, NULL, NULL,
14314/* D8 */ NULL, NULL, NULL, NULL,
14315/* DC */ NULL, NULL, NULL, NULL,
14316/* E0 */ NULL, NULL, NULL, NULL,
14317/* E4 */ NULL, NULL, NULL, NULL,
14318/* E8 */ NULL, NULL, NULL, NULL,
14319/* EC */ NULL, NULL, NULL, NULL,
14320/* F0 */ NULL, NULL, NULL, NULL,
14321/* F4 */ NULL, NULL, NULL, NULL,
14322/* F8 */ NULL, NULL, NULL, NULL,
14323/* FC */ NULL, NULL, NULL, NULL,
14324};
14325
14326static void
26ca5450 14327OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
14328{
14329 const char *mnemonic;
14330
14331 FETCH_DATA (the_info, codep + 1);
14332 /* AMD 3DNow! instructions are specified by an opcode suffix in the
14333 place where an 8-bit immediate would normally go. ie. the last
14334 byte of the instruction. */
ea397f5b 14335 obufp = mnemonicendp;
c608c12e 14336 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 14337 if (mnemonic)
2da11e11 14338 oappend (mnemonic);
252b5132
RH
14339 else
14340 {
14341 /* Since a variable sized modrm/sib chunk is between the start
14342 of the opcode (0x0f0f) and the opcode suffix, we need to do
14343 all the modrm processing first, and don't know until now that
14344 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
14345 op_out[0][0] = '\0';
14346 op_out[1][0] = '\0';
6608db57 14347 BadOp ();
252b5132 14348 }
ea397f5b 14349 mnemonicendp = obufp;
252b5132 14350}
c608c12e 14351
ea397f5b
L
14352static struct op simd_cmp_op[] =
14353{
14354 { STRING_COMMA_LEN ("eq") },
14355 { STRING_COMMA_LEN ("lt") },
14356 { STRING_COMMA_LEN ("le") },
14357 { STRING_COMMA_LEN ("unord") },
14358 { STRING_COMMA_LEN ("neq") },
14359 { STRING_COMMA_LEN ("nlt") },
14360 { STRING_COMMA_LEN ("nle") },
14361 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
14362};
14363
14364static void
ad19981d 14365CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
14366{
14367 unsigned int cmp_type;
14368
14369 FETCH_DATA (the_info, codep + 1);
14370 cmp_type = *codep++ & 0xff;
c0f3af97 14371 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 14372 {
ad19981d 14373 char suffix [3];
ea397f5b 14374 char *p = mnemonicendp - 2;
ad19981d
L
14375 suffix[0] = p[0];
14376 suffix[1] = p[1];
14377 suffix[2] = '\0';
ea397f5b
L
14378 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14379 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
14380 }
14381 else
14382 {
ad19981d
L
14383 /* We have a reserved extension byte. Output it directly. */
14384 scratchbuf[0] = '$';
14385 print_operand_value (scratchbuf + 1, 1, cmp_type);
14386 oappend (scratchbuf + intel_syntax);
14387 scratchbuf[0] = '\0';
c608c12e
AM
14388 }
14389}
14390
ca164297 14391static void
b844680a
L
14392OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14393 int sizeflag ATTRIBUTE_UNUSED)
14394{
14395 /* mwait %eax,%ecx */
14396 if (!intel_syntax)
14397 {
14398 const char **names = (address_mode == mode_64bit
14399 ? names64 : names32);
14400 strcpy (op_out[0], names[0]);
14401 strcpy (op_out[1], names[1]);
14402 two_source_ops = 1;
14403 }
14404 /* Skip mod/rm byte. */
14405 MODRM_CHECK;
14406 codep++;
14407}
14408
14409static void
14410OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14411 int sizeflag ATTRIBUTE_UNUSED)
ca164297 14412{
b844680a
L
14413 /* monitor %eax,%ecx,%edx" */
14414 if (!intel_syntax)
ca164297 14415 {
b844680a 14416 const char **op1_names;
cb712a9e
L
14417 const char **names = (address_mode == mode_64bit
14418 ? names64 : names32);
1d9f512f 14419
b844680a
L
14420 if (!(prefixes & PREFIX_ADDR))
14421 op1_names = (address_mode == mode_16bit
14422 ? names16 : names);
ca164297
L
14423 else
14424 {
b844680a 14425 /* Remove "addr16/addr32". */
f16cd0d5 14426 all_prefixes[last_addr_prefix] = 0;
b844680a
L
14427 op1_names = (address_mode != mode_32bit
14428 ? names32 : names16);
14429 used_prefixes |= PREFIX_ADDR;
ca164297 14430 }
b844680a
L
14431 strcpy (op_out[0], op1_names[0]);
14432 strcpy (op_out[1], names[1]);
14433 strcpy (op_out[2], names[2]);
14434 two_source_ops = 1;
ca164297 14435 }
b844680a
L
14436 /* Skip mod/rm byte. */
14437 MODRM_CHECK;
14438 codep++;
30123838
JB
14439}
14440
6608db57
KH
14441static void
14442BadOp (void)
2da11e11 14443{
6608db57
KH
14444 /* Throw away prefixes and 1st. opcode byte. */
14445 codep = insn_codep + 1;
2da11e11
AM
14446 oappend ("(bad)");
14447}
4cc91dba 14448
35c52694
L
14449static void
14450REP_Fixup (int bytemode, int sizeflag)
14451{
14452 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14453 lods and stos. */
35c52694 14454 if (prefixes & PREFIX_REPZ)
f16cd0d5 14455 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
14456
14457 switch (bytemode)
14458 {
14459 case al_reg:
14460 case eAX_reg:
14461 case indir_dx_reg:
14462 OP_IMREG (bytemode, sizeflag);
14463 break;
14464 case eDI_reg:
14465 OP_ESreg (bytemode, sizeflag);
14466 break;
14467 case eSI_reg:
14468 OP_DSreg (bytemode, sizeflag);
14469 break;
14470 default:
14471 abort ();
14472 break;
14473 }
14474}
f5804c90
L
14475
14476static void
14477CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14478{
161a04f6
L
14479 USED_REX (REX_W);
14480 if (rex & REX_W)
f5804c90
L
14481 {
14482 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
14483 char *p = mnemonicendp - 2;
14484 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 14485 bytemode = o_mode;
f5804c90
L
14486 }
14487 OP_M (bytemode, sizeflag);
14488}
42903f7f
L
14489
14490static void
14491XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14492{
b9733481
L
14493 const char **names;
14494
c0f3af97
L
14495 if (need_vex)
14496 {
14497 switch (vex.length)
14498 {
14499 case 128:
b9733481 14500 names = names_xmm;
c0f3af97
L
14501 break;
14502 case 256:
b9733481 14503 names = names_ymm;
c0f3af97
L
14504 break;
14505 default:
14506 abort ();
14507 }
14508 }
14509 else
b9733481
L
14510 names = names_xmm;
14511 oappend (names[reg]);
42903f7f 14512}
381d071f
L
14513
14514static void
14515CRC32_Fixup (int bytemode, int sizeflag)
14516{
14517 /* Add proper suffix to "crc32". */
ea397f5b 14518 char *p = mnemonicendp;
381d071f
L
14519
14520 switch (bytemode)
14521 {
14522 case b_mode:
20592a94 14523 if (intel_syntax)
ea397f5b 14524 goto skip;
20592a94 14525
381d071f
L
14526 *p++ = 'b';
14527 break;
14528 case v_mode:
20592a94 14529 if (intel_syntax)
ea397f5b 14530 goto skip;
20592a94 14531
381d071f
L
14532 USED_REX (REX_W);
14533 if (rex & REX_W)
14534 *p++ = 'q';
f16cd0d5
L
14535 else
14536 {
14537 if (sizeflag & DFLAG)
14538 *p++ = 'l';
14539 else
14540 *p++ = 'w';
14541 used_prefixes |= (prefixes & PREFIX_DATA);
14542 }
381d071f
L
14543 break;
14544 default:
14545 oappend (INTERNAL_DISASSEMBLER_ERROR);
14546 break;
14547 }
ea397f5b 14548 mnemonicendp = p;
381d071f
L
14549 *p = '\0';
14550
ea397f5b 14551skip:
381d071f
L
14552 if (modrm.mod == 3)
14553 {
14554 int add;
14555
14556 /* Skip mod/rm byte. */
14557 MODRM_CHECK;
14558 codep++;
14559
14560 USED_REX (REX_B);
14561 add = (rex & REX_B) ? 8 : 0;
14562 if (bytemode == b_mode)
14563 {
14564 USED_REX (0);
14565 if (rex)
14566 oappend (names8rex[modrm.rm + add]);
14567 else
14568 oappend (names8[modrm.rm + add]);
14569 }
14570 else
14571 {
14572 USED_REX (REX_W);
14573 if (rex & REX_W)
14574 oappend (names64[modrm.rm + add]);
14575 else if ((prefixes & PREFIX_DATA))
14576 oappend (names16[modrm.rm + add]);
14577 else
14578 oappend (names32[modrm.rm + add]);
14579 }
14580 }
14581 else
9344ff29 14582 OP_E (bytemode, sizeflag);
381d071f 14583}
85f10a01 14584
eacc9c89
L
14585static void
14586FXSAVE_Fixup (int bytemode, int sizeflag)
14587{
14588 /* Add proper suffix to "fxsave" and "fxrstor". */
14589 USED_REX (REX_W);
14590 if (rex & REX_W)
14591 {
14592 char *p = mnemonicendp;
14593 *p++ = '6';
14594 *p++ = '4';
14595 *p = '\0';
14596 mnemonicendp = p;
14597 }
14598 OP_M (bytemode, sizeflag);
14599}
14600
c0f3af97
L
14601/* Display the destination register operand for instructions with
14602 VEX. */
14603
14604static void
14605OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14606{
539f890d 14607 int reg;
b9733481
L
14608 const char **names;
14609
c0f3af97
L
14610 if (!need_vex)
14611 abort ();
14612
14613 if (!need_vex_reg)
14614 return;
14615
539f890d
L
14616 reg = vex.register_specifier;
14617 if (bytemode == vex_scalar_mode)
14618 {
14619 oappend (names_xmm[reg]);
14620 return;
14621 }
14622
c0f3af97
L
14623 switch (vex.length)
14624 {
14625 case 128:
14626 switch (bytemode)
14627 {
14628 case vex_mode:
14629 case vex128_mode:
cb21baef
L
14630 names = names_xmm;
14631 break;
14632 case dq_mode:
14633 if (vex.w)
14634 names = names64;
14635 else
14636 names = names32;
c0f3af97
L
14637 break;
14638 default:
14639 abort ();
14640 return;
14641 }
c0f3af97
L
14642 break;
14643 case 256:
14644 switch (bytemode)
14645 {
14646 case vex_mode:
14647 case vex256_mode:
14648 break;
14649 default:
14650 abort ();
14651 return;
14652 }
14653
b9733481 14654 names = names_ymm;
c0f3af97
L
14655 break;
14656 default:
14657 abort ();
14658 break;
14659 }
539f890d 14660 oappend (names[reg]);
c0f3af97
L
14661}
14662
922d8de8
DR
14663/* Get the VEX immediate byte without moving codep. */
14664
14665static unsigned char
ccc5981b 14666get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
14667{
14668 int bytes_before_imm = 0;
14669
922d8de8
DR
14670 if (modrm.mod != 3)
14671 {
14672 /* There are SIB/displacement bytes. */
14673 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
02e647f9 14674 {
922d8de8 14675 /* 32/64 bit address mode */
02e647f9 14676 int base = modrm.rm;
922d8de8
DR
14677
14678 /* Check SIB byte. */
02e647f9
SP
14679 if (base == 4)
14680 {
14681 FETCH_DATA (the_info, codep + 1);
14682 base = *codep & 7;
14683 /* When decoding the third source, don't increase
14684 bytes_before_imm as this has already been incremented
14685 by one in OP_E_memory while decoding the second
14686 source operand. */
ccc5981b
SP
14687 if (opnum == 0)
14688 bytes_before_imm++;
02e647f9
SP
14689 }
14690
14691 /* Don't increase bytes_before_imm when decoding the third source,
14692 it has already been incremented by OP_E_memory while decoding
14693 the second source operand. */
14694 if (opnum == 0)
14695 {
14696 switch (modrm.mod)
14697 {
14698 case 0:
14699 /* When modrm.rm == 5 or modrm.rm == 4 and base in
14700 SIB == 5, there is a 4 byte displacement. */
14701 if (base != 5)
14702 /* No displacement. */
14703 break;
14704 case 2:
14705 /* 4 byte displacement. */
14706 bytes_before_imm += 4;
14707 break;
14708 case 1:
14709 /* 1 byte displacement. */
14710 bytes_before_imm++;
14711 break;
14712 }
14713 }
14714 }
922d8de8 14715 else
02e647f9
SP
14716 {
14717 /* 16 bit address mode */
14718 /* Don't increase bytes_before_imm when decoding the third source,
14719 it has already been incremented by OP_E_memory while decoding
14720 the second source operand. */
14721 if (opnum == 0)
14722 {
14723 switch (modrm.mod)
14724 {
14725 case 0:
14726 /* When modrm.rm == 6, there is a 2 byte displacement. */
14727 if (modrm.rm != 6)
14728 /* No displacement. */
14729 break;
14730 case 2:
14731 /* 2 byte displacement. */
14732 bytes_before_imm += 2;
14733 break;
14734 case 1:
14735 /* 1 byte displacement: when decoding the third source,
14736 don't increase bytes_before_imm as this has already
14737 been incremented by one in OP_E_memory while decoding
14738 the second source operand. */
14739 if (opnum == 0)
14740 bytes_before_imm++;
ccc5981b 14741
02e647f9
SP
14742 break;
14743 }
922d8de8
DR
14744 }
14745 }
14746 }
14747
14748 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14749 return codep [bytes_before_imm];
14750}
14751
14752static void
14753OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14754{
b9733481
L
14755 const char **names;
14756
922d8de8
DR
14757 if (reg == -1 && modrm.mod != 3)
14758 {
14759 OP_E_memory (bytemode, sizeflag);
14760 return;
14761 }
14762 else
14763 {
14764 if (reg == -1)
14765 {
14766 reg = modrm.rm;
14767 USED_REX (REX_B);
14768 if (rex & REX_B)
14769 reg += 8;
14770 }
14771 else if (reg > 7 && address_mode != mode_64bit)
14772 BadOp ();
14773 }
14774
14775 switch (vex.length)
14776 {
14777 case 128:
b9733481 14778 names = names_xmm;
922d8de8
DR
14779 break;
14780 case 256:
b9733481 14781 names = names_ymm;
922d8de8
DR
14782 break;
14783 default:
14784 abort ();
14785 }
b9733481 14786 oappend (names[reg]);
922d8de8
DR
14787}
14788
a683cc34
SP
14789static void
14790OP_EX_VexImmW (int bytemode, int sizeflag)
14791{
14792 int reg = -1;
14793 static unsigned char vex_imm8;
14794
14795 if (vex_w_done == 0)
14796 {
14797 vex_w_done = 1;
14798
14799 /* Skip mod/rm byte. */
14800 MODRM_CHECK;
14801 codep++;
14802
14803 vex_imm8 = get_vex_imm8 (sizeflag, 0);
14804
14805 if (vex.w)
14806 reg = vex_imm8 >> 4;
14807
14808 OP_EX_VexReg (bytemode, sizeflag, reg);
14809 }
14810 else if (vex_w_done == 1)
14811 {
14812 vex_w_done = 2;
14813
14814 if (!vex.w)
14815 reg = vex_imm8 >> 4;
14816
14817 OP_EX_VexReg (bytemode, sizeflag, reg);
14818 }
14819 else
14820 {
14821 /* Output the imm8 directly. */
14822 scratchbuf[0] = '$';
14823 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14824 oappend (scratchbuf + intel_syntax);
14825 scratchbuf[0] = '\0';
14826 codep++;
14827 }
14828}
14829
5dd85c99
SP
14830static void
14831OP_Vex_2src (int bytemode, int sizeflag)
14832{
14833 if (modrm.mod == 3)
14834 {
b9733481 14835 int reg = modrm.rm;
5dd85c99 14836 USED_REX (REX_B);
b9733481
L
14837 if (rex & REX_B)
14838 reg += 8;
14839 oappend (names_xmm[reg]);
5dd85c99
SP
14840 }
14841 else
14842 {
14843 if (intel_syntax
14844 && (bytemode == v_mode || bytemode == v_swap_mode))
14845 {
14846 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14847 used_prefixes |= (prefixes & PREFIX_DATA);
14848 }
14849 OP_E (bytemode, sizeflag);
14850 }
14851}
14852
14853static void
14854OP_Vex_2src_1 (int bytemode, int sizeflag)
14855{
14856 if (modrm.mod == 3)
14857 {
14858 /* Skip mod/rm byte. */
14859 MODRM_CHECK;
14860 codep++;
14861 }
14862
14863 if (vex.w)
b9733481 14864 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14865 else
14866 OP_Vex_2src (bytemode, sizeflag);
14867}
14868
14869static void
14870OP_Vex_2src_2 (int bytemode, int sizeflag)
14871{
14872 if (vex.w)
14873 OP_Vex_2src (bytemode, sizeflag);
14874 else
b9733481 14875 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14876}
14877
922d8de8
DR
14878static void
14879OP_EX_VexW (int bytemode, int sizeflag)
14880{
14881 int reg = -1;
14882
14883 if (!vex_w_done)
14884 {
14885 vex_w_done = 1;
41effecb
SP
14886
14887 /* Skip mod/rm byte. */
14888 MODRM_CHECK;
14889 codep++;
14890
922d8de8 14891 if (vex.w)
ccc5981b 14892 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
14893 }
14894 else
14895 {
14896 if (!vex.w)
ccc5981b 14897 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
14898 }
14899
14900 OP_EX_VexReg (bytemode, sizeflag, reg);
14901}
14902
922d8de8
DR
14903static void
14904VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
14905 int sizeflag ATTRIBUTE_UNUSED)
14906{
14907 /* Skip the immediate byte and check for invalid bits. */
14908 FETCH_DATA (the_info, codep + 1);
14909 if (*codep++ & 0xf)
14910 BadOp ();
14911}
14912
c0f3af97
L
14913static void
14914OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14915{
14916 int reg;
b9733481
L
14917 const char **names;
14918
c0f3af97
L
14919 FETCH_DATA (the_info, codep + 1);
14920 reg = *codep++;
14921
14922 if (bytemode != x_mode)
14923 abort ();
14924
14925 if (reg & 0xf)
14926 BadOp ();
14927
14928 reg >>= 4;
dae39acc
L
14929 if (reg > 7 && address_mode != mode_64bit)
14930 BadOp ();
14931
c0f3af97
L
14932 switch (vex.length)
14933 {
14934 case 128:
b9733481 14935 names = names_xmm;
c0f3af97
L
14936 break;
14937 case 256:
b9733481 14938 names = names_ymm;
c0f3af97
L
14939 break;
14940 default:
14941 abort ();
14942 }
b9733481 14943 oappend (names[reg]);
c0f3af97
L
14944}
14945
922d8de8
DR
14946static void
14947OP_XMM_VexW (int bytemode, int sizeflag)
14948{
14949 /* Turn off the REX.W bit since it is used for swapping operands
14950 now. */
14951 rex &= ~REX_W;
14952 OP_XMM (bytemode, sizeflag);
14953}
14954
c0f3af97
L
14955static void
14956OP_EX_Vex (int bytemode, int sizeflag)
14957{
14958 if (modrm.mod != 3)
14959 {
14960 if (vex.register_specifier != 0)
14961 BadOp ();
14962 need_vex_reg = 0;
14963 }
14964 OP_EX (bytemode, sizeflag);
14965}
14966
14967static void
14968OP_XMM_Vex (int bytemode, int sizeflag)
14969{
14970 if (modrm.mod != 3)
14971 {
14972 if (vex.register_specifier != 0)
14973 BadOp ();
14974 need_vex_reg = 0;
14975 }
14976 OP_XMM (bytemode, sizeflag);
14977}
14978
14979static void
14980VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14981{
14982 switch (vex.length)
14983 {
14984 case 128:
ea397f5b 14985 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
14986 break;
14987 case 256:
ea397f5b 14988 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
14989 break;
14990 default:
14991 abort ();
14992 }
14993}
14994
ea397f5b
L
14995static struct op vex_cmp_op[] =
14996{
14997 { STRING_COMMA_LEN ("eq") },
14998 { STRING_COMMA_LEN ("lt") },
14999 { STRING_COMMA_LEN ("le") },
15000 { STRING_COMMA_LEN ("unord") },
15001 { STRING_COMMA_LEN ("neq") },
15002 { STRING_COMMA_LEN ("nlt") },
15003 { STRING_COMMA_LEN ("nle") },
15004 { STRING_COMMA_LEN ("ord") },
15005 { STRING_COMMA_LEN ("eq_uq") },
15006 { STRING_COMMA_LEN ("nge") },
15007 { STRING_COMMA_LEN ("ngt") },
15008 { STRING_COMMA_LEN ("false") },
15009 { STRING_COMMA_LEN ("neq_oq") },
15010 { STRING_COMMA_LEN ("ge") },
15011 { STRING_COMMA_LEN ("gt") },
15012 { STRING_COMMA_LEN ("true") },
15013 { STRING_COMMA_LEN ("eq_os") },
15014 { STRING_COMMA_LEN ("lt_oq") },
15015 { STRING_COMMA_LEN ("le_oq") },
15016 { STRING_COMMA_LEN ("unord_s") },
15017 { STRING_COMMA_LEN ("neq_us") },
15018 { STRING_COMMA_LEN ("nlt_uq") },
15019 { STRING_COMMA_LEN ("nle_uq") },
15020 { STRING_COMMA_LEN ("ord_s") },
15021 { STRING_COMMA_LEN ("eq_us") },
15022 { STRING_COMMA_LEN ("nge_uq") },
15023 { STRING_COMMA_LEN ("ngt_uq") },
15024 { STRING_COMMA_LEN ("false_os") },
15025 { STRING_COMMA_LEN ("neq_os") },
15026 { STRING_COMMA_LEN ("ge_oq") },
15027 { STRING_COMMA_LEN ("gt_oq") },
15028 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
15029};
15030
15031static void
15032VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15033{
15034 unsigned int cmp_type;
15035
15036 FETCH_DATA (the_info, codep + 1);
15037 cmp_type = *codep++ & 0xff;
15038 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
15039 {
15040 char suffix [3];
ea397f5b 15041 char *p = mnemonicendp - 2;
c0f3af97
L
15042 suffix[0] = p[0];
15043 suffix[1] = p[1];
15044 suffix[2] = '\0';
ea397f5b
L
15045 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
15046 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
15047 }
15048 else
15049 {
15050 /* We have a reserved extension byte. Output it directly. */
15051 scratchbuf[0] = '$';
15052 print_operand_value (scratchbuf + 1, 1, cmp_type);
15053 oappend (scratchbuf + intel_syntax);
15054 scratchbuf[0] = '\0';
15055 }
15056}
15057
ea397f5b
L
15058static const struct op pclmul_op[] =
15059{
15060 { STRING_COMMA_LEN ("lql") },
15061 { STRING_COMMA_LEN ("hql") },
15062 { STRING_COMMA_LEN ("lqh") },
15063 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
15064};
15065
15066static void
15067PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
15068 int sizeflag ATTRIBUTE_UNUSED)
15069{
15070 unsigned int pclmul_type;
15071
15072 FETCH_DATA (the_info, codep + 1);
15073 pclmul_type = *codep++ & 0xff;
15074 switch (pclmul_type)
15075 {
15076 case 0x10:
15077 pclmul_type = 2;
15078 break;
15079 case 0x11:
15080 pclmul_type = 3;
15081 break;
15082 default:
15083 break;
15084 }
15085 if (pclmul_type < ARRAY_SIZE (pclmul_op))
15086 {
15087 char suffix [4];
ea397f5b 15088 char *p = mnemonicendp - 3;
c0f3af97
L
15089 suffix[0] = p[0];
15090 suffix[1] = p[1];
15091 suffix[2] = p[2];
15092 suffix[3] = '\0';
ea397f5b
L
15093 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
15094 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
15095 }
15096 else
15097 {
15098 /* We have a reserved extension byte. Output it directly. */
15099 scratchbuf[0] = '$';
15100 print_operand_value (scratchbuf + 1, 1, pclmul_type);
15101 oappend (scratchbuf + intel_syntax);
15102 scratchbuf[0] = '\0';
15103 }
15104}
15105
f1f8f695
L
15106static void
15107MOVBE_Fixup (int bytemode, int sizeflag)
15108{
15109 /* Add proper suffix to "movbe". */
ea397f5b 15110 char *p = mnemonicendp;
f1f8f695
L
15111
15112 switch (bytemode)
15113 {
15114 case v_mode:
15115 if (intel_syntax)
ea397f5b 15116 goto skip;
f1f8f695
L
15117
15118 USED_REX (REX_W);
15119 if (sizeflag & SUFFIX_ALWAYS)
15120 {
15121 if (rex & REX_W)
15122 *p++ = 'q';
f1f8f695 15123 else
f16cd0d5
L
15124 {
15125 if (sizeflag & DFLAG)
15126 *p++ = 'l';
15127 else
15128 *p++ = 'w';
15129 used_prefixes |= (prefixes & PREFIX_DATA);
15130 }
f1f8f695 15131 }
f1f8f695
L
15132 break;
15133 default:
15134 oappend (INTERNAL_DISASSEMBLER_ERROR);
15135 break;
15136 }
ea397f5b 15137 mnemonicendp = p;
f1f8f695
L
15138 *p = '\0';
15139
ea397f5b 15140skip:
f1f8f695
L
15141 OP_M (bytemode, sizeflag);
15142}
f88c9eb0
SP
15143
15144static void
15145OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15146{
15147 int reg;
15148 const char **names;
15149
15150 /* Skip mod/rm byte. */
15151 MODRM_CHECK;
15152 codep++;
15153
15154 if (vex.w)
15155 names = names64;
f88c9eb0 15156 else
ce7d077e 15157 names = names32;
f88c9eb0
SP
15158
15159 reg = modrm.rm;
15160 USED_REX (REX_B);
15161 if (rex & REX_B)
15162 reg += 8;
15163
15164 oappend (names[reg]);
15165}
15166
15167static void
15168OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15169{
15170 const char **names;
15171
15172 if (vex.w)
15173 names = names64;
f88c9eb0 15174 else
ce7d077e 15175 names = names32;
f88c9eb0
SP
15176
15177 oappend (names[vex.register_specifier]);
15178}
15179
This page took 1.647161 seconds and 4 git commands to generate.