*** empty log message ***
[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);
117static void OP_LWP_I (int, int);
5dd85c99
SP
118static void OP_Vex_2src_1 (int, int);
119static void OP_Vex_2src_2 (int, int);
c1e679ec 120
f1f8f695 121static void MOVBE_Fixup (int, int);
252b5132 122
6608db57 123struct dis_private {
252b5132
RH
124 /* Points to first byte not fetched. */
125 bfd_byte *max_fetched;
0b1cf022 126 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 127 bfd_vma insn_start;
e396998b 128 int orig_sizeflag;
252b5132
RH
129 jmp_buf bailout;
130};
131
cb712a9e
L
132enum address_mode
133{
134 mode_16bit,
135 mode_32bit,
136 mode_64bit
137};
138
139enum address_mode address_mode;
52b15da3 140
5076851f
ILT
141/* Flags for the prefixes for the current instruction. See below. */
142static int prefixes;
143
52b15da3
JH
144/* REX prefix the current instruction. See below. */
145static int rex;
146/* Bits of REX we've already used. */
147static int rex_used;
d869730d 148/* REX bits in original REX prefix ignored. */
c0f3af97 149static int rex_ignored;
52b15da3
JH
150/* Mark parts used in the REX prefix. When we are testing for
151 empty prefix (for 8bit register REX extension), just mask it
152 out. Otherwise test for REX bit is excuse for existence of REX
153 only in case value is nonzero. */
154#define USED_REX(value) \
155 { \
156 if (value) \
161a04f6
L
157 { \
158 if ((rex & value)) \
159 rex_used |= (value) | REX_OPCODE; \
160 } \
52b15da3 161 else \
161a04f6 162 rex_used |= REX_OPCODE; \
52b15da3
JH
163 }
164
7d421014
ILT
165/* Flags for prefixes which we somehow handled when printing the
166 current instruction. */
167static int used_prefixes;
168
5076851f
ILT
169/* Flags stored in PREFIXES. */
170#define PREFIX_REPZ 1
171#define PREFIX_REPNZ 2
172#define PREFIX_LOCK 4
173#define PREFIX_CS 8
174#define PREFIX_SS 0x10
175#define PREFIX_DS 0x20
176#define PREFIX_ES 0x40
177#define PREFIX_FS 0x80
178#define PREFIX_GS 0x100
179#define PREFIX_DATA 0x200
180#define PREFIX_ADDR 0x400
181#define PREFIX_FWAIT 0x800
182
252b5132
RH
183/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
184 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
185 on error. */
186#define FETCH_DATA(info, addr) \
6608db57 187 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
188 ? 1 : fetch_data ((info), (addr)))
189
190static int
26ca5450 191fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
192{
193 int status;
6608db57 194 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
195 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
196
0b1cf022 197 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
198 status = (*info->read_memory_func) (start,
199 priv->max_fetched,
200 addr - priv->max_fetched,
201 info);
202 else
203 status = -1;
252b5132
RH
204 if (status != 0)
205 {
7d421014 206 /* If we did manage to read at least one byte, then
db6eb5be
AM
207 print_insn_i386 will do something sensible. Otherwise, print
208 an error. We do that here because this is where we know
209 STATUS. */
7d421014 210 if (priv->max_fetched == priv->the_buffer)
5076851f 211 (*info->memory_error_func) (status, start, info);
252b5132
RH
212 longjmp (priv->bailout, 1);
213 }
214 else
215 priv->max_fetched = addr;
216 return 1;
217}
218
ce518a5f 219#define XX { NULL, 0 }
592d1631 220#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
221
222#define Eb { OP_E, b_mode }
b6169b20 223#define EbS { OP_E, b_swap_mode }
ce518a5f 224#define Ev { OP_E, v_mode }
b6169b20 225#define EvS { OP_E, v_swap_mode }
ce518a5f
L
226#define Ed { OP_E, d_mode }
227#define Edq { OP_E, dq_mode }
228#define Edqw { OP_E, dqw_mode }
42903f7f
L
229#define Edqb { OP_E, dqb_mode }
230#define Edqd { OP_E, dqd_mode }
09335d05 231#define Eq { OP_E, q_mode }
ce518a5f
L
232#define indirEv { OP_indirE, stack_v_mode }
233#define indirEp { OP_indirE, f_mode }
234#define stackEv { OP_E, stack_v_mode }
235#define Em { OP_E, m_mode }
236#define Ew { OP_E, w_mode }
237#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 238#define Ma { OP_M, a_mode }
b844680a 239#define Mb { OP_M, b_mode }
d9a5e5e5 240#define Md { OP_M, d_mode }
f1f8f695 241#define Mo { OP_M, o_mode }
ce518a5f
L
242#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
243#define Mq { OP_M, q_mode }
4ee52178 244#define Mx { OP_M, x_mode }
c0f3af97 245#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
246#define Gb { OP_G, b_mode }
247#define Gv { OP_G, v_mode }
248#define Gd { OP_G, d_mode }
249#define Gdq { OP_G, dq_mode }
250#define Gm { OP_G, m_mode }
251#define Gw { OP_G, w_mode }
6f74c397
L
252#define Rd { OP_R, d_mode }
253#define Rm { OP_R, m_mode }
ce518a5f
L
254#define Ib { OP_I, b_mode }
255#define sIb { OP_sI, b_mode } /* sign extened byte */
256#define Iv { OP_I, v_mode }
257#define Iq { OP_I, q_mode }
258#define Iv64 { OP_I64, v_mode }
259#define Iw { OP_I, w_mode }
260#define I1 { OP_I, const_1_mode }
261#define Jb { OP_J, b_mode }
262#define Jv { OP_J, v_mode }
263#define Cm { OP_C, m_mode }
264#define Dm { OP_D, m_mode }
265#define Td { OP_T, d_mode }
b844680a 266#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
267
268#define RMeAX { OP_REG, eAX_reg }
269#define RMeBX { OP_REG, eBX_reg }
270#define RMeCX { OP_REG, eCX_reg }
271#define RMeDX { OP_REG, eDX_reg }
272#define RMeSP { OP_REG, eSP_reg }
273#define RMeBP { OP_REG, eBP_reg }
274#define RMeSI { OP_REG, eSI_reg }
275#define RMeDI { OP_REG, eDI_reg }
276#define RMrAX { OP_REG, rAX_reg }
277#define RMrBX { OP_REG, rBX_reg }
278#define RMrCX { OP_REG, rCX_reg }
279#define RMrDX { OP_REG, rDX_reg }
280#define RMrSP { OP_REG, rSP_reg }
281#define RMrBP { OP_REG, rBP_reg }
282#define RMrSI { OP_REG, rSI_reg }
283#define RMrDI { OP_REG, rDI_reg }
284#define RMAL { OP_REG, al_reg }
285#define RMAL { OP_REG, al_reg }
286#define RMCL { OP_REG, cl_reg }
287#define RMDL { OP_REG, dl_reg }
288#define RMBL { OP_REG, bl_reg }
289#define RMAH { OP_REG, ah_reg }
290#define RMCH { OP_REG, ch_reg }
291#define RMDH { OP_REG, dh_reg }
292#define RMBH { OP_REG, bh_reg }
293#define RMAX { OP_REG, ax_reg }
294#define RMDX { OP_REG, dx_reg }
295
296#define eAX { OP_IMREG, eAX_reg }
297#define eBX { OP_IMREG, eBX_reg }
298#define eCX { OP_IMREG, eCX_reg }
299#define eDX { OP_IMREG, eDX_reg }
300#define eSP { OP_IMREG, eSP_reg }
301#define eBP { OP_IMREG, eBP_reg }
302#define eSI { OP_IMREG, eSI_reg }
303#define eDI { OP_IMREG, eDI_reg }
304#define AL { OP_IMREG, al_reg }
305#define CL { OP_IMREG, cl_reg }
306#define DL { OP_IMREG, dl_reg }
307#define BL { OP_IMREG, bl_reg }
308#define AH { OP_IMREG, ah_reg }
309#define CH { OP_IMREG, ch_reg }
310#define DH { OP_IMREG, dh_reg }
311#define BH { OP_IMREG, bh_reg }
312#define AX { OP_IMREG, ax_reg }
313#define DX { OP_IMREG, dx_reg }
314#define zAX { OP_IMREG, z_mode_ax_reg }
315#define indirDX { OP_IMREG, indir_dx_reg }
316
317#define Sw { OP_SEG, w_mode }
318#define Sv { OP_SEG, v_mode }
319#define Ap { OP_DIR, 0 }
320#define Ob { OP_OFF64, b_mode }
321#define Ov { OP_OFF64, v_mode }
322#define Xb { OP_DSreg, eSI_reg }
323#define Xv { OP_DSreg, eSI_reg }
324#define Xz { OP_DSreg, eSI_reg }
325#define Yb { OP_ESreg, eDI_reg }
326#define Yv { OP_ESreg, eDI_reg }
327#define DSBX { OP_DSreg, eBX_reg }
328
329#define es { OP_REG, es_reg }
330#define ss { OP_REG, ss_reg }
331#define cs { OP_REG, cs_reg }
332#define ds { OP_REG, ds_reg }
333#define fs { OP_REG, fs_reg }
334#define gs { OP_REG, gs_reg }
335
336#define MX { OP_MMX, 0 }
337#define XM { OP_XMM, 0 }
539f890d 338#define XMScalar { OP_XMM, scalar_mode }
c0f3af97 339#define XMM { OP_XMM, xmm_mode }
ce518a5f 340#define EM { OP_EM, v_mode }
b6169b20 341#define EMS { OP_EM, v_swap_mode }
09a2c6cf 342#define EMd { OP_EM, d_mode }
14051056 343#define EMx { OP_EM, x_mode }
8976381e 344#define EXw { OP_EX, w_mode }
09a2c6cf 345#define EXd { OP_EX, d_mode }
539f890d 346#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 347#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 348#define EXq { OP_EX, q_mode }
539f890d
L
349#define EXqScalar { OP_EX, q_scalar_mode }
350#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 351#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 352#define EXx { OP_EX, x_mode }
b6169b20 353#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
354#define EXxmm { OP_EX, xmm_mode }
355#define EXxmmq { OP_EX, xmmq_mode }
356#define EXymmq { OP_EX, ymmq_mode }
0bfee649 357#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 358#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
ce518a5f
L
359#define MS { OP_MS, v_mode }
360#define XS { OP_XS, v_mode }
09335d05 361#define EMCq { OP_EMC, q_mode }
ce518a5f 362#define MXC { OP_MXC, 0 }
ce518a5f 363#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 364#define CMP { CMP_Fixup, 0 }
42903f7f 365#define XMM0 { XMM_Fixup, 0 }
eacc9c89 366#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
367#define Vex_2src_1 { OP_Vex_2src_1, 0 }
368#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 369
c0f3af97 370#define Vex { OP_VEX, vex_mode }
539f890d 371#define VexScalar { OP_VEX, vex_scalar_mode }
c0f3af97
L
372#define Vex128 { OP_VEX, vex128_mode }
373#define Vex256 { OP_VEX, vex256_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,
598 REG_VEX_71,
599 REG_VEX_72,
600 REG_VEX_73,
f88c9eb0
SP
601 REG_VEX_AE,
602 REG_XOP_LWPCB,
603 REG_XOP_LWP
51e7da1b 604};
1ceb70f8 605
51e7da1b
L
606enum
607{
608 MOD_8D = 0,
3873ba12
L
609 MOD_0F01_REG_0,
610 MOD_0F01_REG_1,
611 MOD_0F01_REG_2,
612 MOD_0F01_REG_3,
613 MOD_0F01_REG_7,
614 MOD_0F12_PREFIX_0,
615 MOD_0F13,
616 MOD_0F16_PREFIX_0,
617 MOD_0F17,
618 MOD_0F18_REG_0,
619 MOD_0F18_REG_1,
620 MOD_0F18_REG_2,
621 MOD_0F18_REG_3,
622 MOD_0F20,
623 MOD_0F21,
624 MOD_0F22,
625 MOD_0F23,
626 MOD_0F24,
627 MOD_0F26,
628 MOD_0F2B_PREFIX_0,
629 MOD_0F2B_PREFIX_1,
630 MOD_0F2B_PREFIX_2,
631 MOD_0F2B_PREFIX_3,
632 MOD_0F51,
633 MOD_0F71_REG_2,
634 MOD_0F71_REG_4,
635 MOD_0F71_REG_6,
636 MOD_0F72_REG_2,
637 MOD_0F72_REG_4,
638 MOD_0F72_REG_6,
639 MOD_0F73_REG_2,
640 MOD_0F73_REG_3,
641 MOD_0F73_REG_6,
642 MOD_0F73_REG_7,
643 MOD_0FAE_REG_0,
644 MOD_0FAE_REG_1,
645 MOD_0FAE_REG_2,
646 MOD_0FAE_REG_3,
647 MOD_0FAE_REG_4,
648 MOD_0FAE_REG_5,
649 MOD_0FAE_REG_6,
650 MOD_0FAE_REG_7,
651 MOD_0FB2,
652 MOD_0FB4,
653 MOD_0FB5,
654 MOD_0FC7_REG_6,
655 MOD_0FC7_REG_7,
656 MOD_0FD7,
657 MOD_0FE7_PREFIX_2,
658 MOD_0FF0_PREFIX_3,
659 MOD_0F382A_PREFIX_2,
660 MOD_62_32BIT,
661 MOD_C4_32BIT,
662 MOD_C5_32BIT,
663 MOD_VEX_12_PREFIX_0,
664 MOD_VEX_13,
665 MOD_VEX_16_PREFIX_0,
666 MOD_VEX_17,
667 MOD_VEX_2B,
976f1fde 668 MOD_VEX_50,
3873ba12
L
669 MOD_VEX_71_REG_2,
670 MOD_VEX_71_REG_4,
671 MOD_VEX_71_REG_6,
672 MOD_VEX_72_REG_2,
673 MOD_VEX_72_REG_4,
674 MOD_VEX_72_REG_6,
675 MOD_VEX_73_REG_2,
676 MOD_VEX_73_REG_3,
677 MOD_VEX_73_REG_6,
678 MOD_VEX_73_REG_7,
679 MOD_VEX_AE_REG_2,
680 MOD_VEX_AE_REG_3,
681 MOD_VEX_D7_PREFIX_2,
682 MOD_VEX_E7_PREFIX_2,
683 MOD_VEX_F0_PREFIX_3,
684 MOD_VEX_3818_PREFIX_2,
685 MOD_VEX_3819_PREFIX_2,
686 MOD_VEX_381A_PREFIX_2,
687 MOD_VEX_382A_PREFIX_2,
688 MOD_VEX_382C_PREFIX_2,
689 MOD_VEX_382D_PREFIX_2,
690 MOD_VEX_382E_PREFIX_2,
691 MOD_VEX_382F_PREFIX_2
51e7da1b 692};
1ceb70f8 693
51e7da1b
L
694enum
695{
696 RM_0F01_REG_0 = 0,
3873ba12
L
697 RM_0F01_REG_1,
698 RM_0F01_REG_2,
699 RM_0F01_REG_3,
700 RM_0F01_REG_7,
701 RM_0FAE_REG_5,
702 RM_0FAE_REG_6,
703 RM_0FAE_REG_7
51e7da1b 704};
1ceb70f8 705
51e7da1b
L
706enum
707{
708 PREFIX_90 = 0,
3873ba12
L
709 PREFIX_0F10,
710 PREFIX_0F11,
711 PREFIX_0F12,
712 PREFIX_0F16,
713 PREFIX_0F2A,
714 PREFIX_0F2B,
715 PREFIX_0F2C,
716 PREFIX_0F2D,
717 PREFIX_0F2E,
718 PREFIX_0F2F,
719 PREFIX_0F51,
720 PREFIX_0F52,
721 PREFIX_0F53,
722 PREFIX_0F58,
723 PREFIX_0F59,
724 PREFIX_0F5A,
725 PREFIX_0F5B,
726 PREFIX_0F5C,
727 PREFIX_0F5D,
728 PREFIX_0F5E,
729 PREFIX_0F5F,
730 PREFIX_0F60,
731 PREFIX_0F61,
732 PREFIX_0F62,
733 PREFIX_0F6C,
734 PREFIX_0F6D,
735 PREFIX_0F6F,
736 PREFIX_0F70,
737 PREFIX_0F73_REG_3,
738 PREFIX_0F73_REG_7,
739 PREFIX_0F78,
740 PREFIX_0F79,
741 PREFIX_0F7C,
742 PREFIX_0F7D,
743 PREFIX_0F7E,
744 PREFIX_0F7F,
745 PREFIX_0FB8,
746 PREFIX_0FBD,
747 PREFIX_0FC2,
748 PREFIX_0FC3,
749 PREFIX_0FC7_REG_6,
750 PREFIX_0FD0,
751 PREFIX_0FD6,
752 PREFIX_0FE6,
753 PREFIX_0FE7,
754 PREFIX_0FF0,
755 PREFIX_0FF7,
756 PREFIX_0F3810,
757 PREFIX_0F3814,
758 PREFIX_0F3815,
759 PREFIX_0F3817,
760 PREFIX_0F3820,
761 PREFIX_0F3821,
762 PREFIX_0F3822,
763 PREFIX_0F3823,
764 PREFIX_0F3824,
765 PREFIX_0F3825,
766 PREFIX_0F3828,
767 PREFIX_0F3829,
768 PREFIX_0F382A,
769 PREFIX_0F382B,
770 PREFIX_0F3830,
771 PREFIX_0F3831,
772 PREFIX_0F3832,
773 PREFIX_0F3833,
774 PREFIX_0F3834,
775 PREFIX_0F3835,
776 PREFIX_0F3837,
777 PREFIX_0F3838,
778 PREFIX_0F3839,
779 PREFIX_0F383A,
780 PREFIX_0F383B,
781 PREFIX_0F383C,
782 PREFIX_0F383D,
783 PREFIX_0F383E,
784 PREFIX_0F383F,
785 PREFIX_0F3840,
786 PREFIX_0F3841,
787 PREFIX_0F3880,
788 PREFIX_0F3881,
789 PREFIX_0F38DB,
790 PREFIX_0F38DC,
791 PREFIX_0F38DD,
792 PREFIX_0F38DE,
793 PREFIX_0F38DF,
794 PREFIX_0F38F0,
795 PREFIX_0F38F1,
796 PREFIX_0F3A08,
797 PREFIX_0F3A09,
798 PREFIX_0F3A0A,
799 PREFIX_0F3A0B,
800 PREFIX_0F3A0C,
801 PREFIX_0F3A0D,
802 PREFIX_0F3A0E,
803 PREFIX_0F3A14,
804 PREFIX_0F3A15,
805 PREFIX_0F3A16,
806 PREFIX_0F3A17,
807 PREFIX_0F3A20,
808 PREFIX_0F3A21,
809 PREFIX_0F3A22,
810 PREFIX_0F3A40,
811 PREFIX_0F3A41,
812 PREFIX_0F3A42,
813 PREFIX_0F3A44,
814 PREFIX_0F3A60,
815 PREFIX_0F3A61,
816 PREFIX_0F3A62,
817 PREFIX_0F3A63,
818 PREFIX_0F3ADF,
819 PREFIX_VEX_10,
820 PREFIX_VEX_11,
821 PREFIX_VEX_12,
822 PREFIX_VEX_16,
823 PREFIX_VEX_2A,
824 PREFIX_VEX_2C,
825 PREFIX_VEX_2D,
826 PREFIX_VEX_2E,
827 PREFIX_VEX_2F,
828 PREFIX_VEX_51,
829 PREFIX_VEX_52,
830 PREFIX_VEX_53,
831 PREFIX_VEX_58,
832 PREFIX_VEX_59,
833 PREFIX_VEX_5A,
834 PREFIX_VEX_5B,
835 PREFIX_VEX_5C,
836 PREFIX_VEX_5D,
837 PREFIX_VEX_5E,
838 PREFIX_VEX_5F,
839 PREFIX_VEX_60,
840 PREFIX_VEX_61,
841 PREFIX_VEX_62,
842 PREFIX_VEX_63,
843 PREFIX_VEX_64,
844 PREFIX_VEX_65,
845 PREFIX_VEX_66,
846 PREFIX_VEX_67,
847 PREFIX_VEX_68,
848 PREFIX_VEX_69,
849 PREFIX_VEX_6A,
850 PREFIX_VEX_6B,
851 PREFIX_VEX_6C,
852 PREFIX_VEX_6D,
853 PREFIX_VEX_6E,
854 PREFIX_VEX_6F,
855 PREFIX_VEX_70,
856 PREFIX_VEX_71_REG_2,
857 PREFIX_VEX_71_REG_4,
858 PREFIX_VEX_71_REG_6,
859 PREFIX_VEX_72_REG_2,
860 PREFIX_VEX_72_REG_4,
861 PREFIX_VEX_72_REG_6,
862 PREFIX_VEX_73_REG_2,
863 PREFIX_VEX_73_REG_3,
864 PREFIX_VEX_73_REG_6,
865 PREFIX_VEX_73_REG_7,
866 PREFIX_VEX_74,
867 PREFIX_VEX_75,
868 PREFIX_VEX_76,
869 PREFIX_VEX_77,
870 PREFIX_VEX_7C,
871 PREFIX_VEX_7D,
872 PREFIX_VEX_7E,
873 PREFIX_VEX_7F,
874 PREFIX_VEX_C2,
875 PREFIX_VEX_C4,
876 PREFIX_VEX_C5,
877 PREFIX_VEX_D0,
878 PREFIX_VEX_D1,
879 PREFIX_VEX_D2,
880 PREFIX_VEX_D3,
881 PREFIX_VEX_D4,
882 PREFIX_VEX_D5,
883 PREFIX_VEX_D6,
884 PREFIX_VEX_D7,
885 PREFIX_VEX_D8,
886 PREFIX_VEX_D9,
887 PREFIX_VEX_DA,
888 PREFIX_VEX_DB,
889 PREFIX_VEX_DC,
890 PREFIX_VEX_DD,
891 PREFIX_VEX_DE,
892 PREFIX_VEX_DF,
893 PREFIX_VEX_E0,
894 PREFIX_VEX_E1,
895 PREFIX_VEX_E2,
896 PREFIX_VEX_E3,
897 PREFIX_VEX_E4,
898 PREFIX_VEX_E5,
899 PREFIX_VEX_E6,
900 PREFIX_VEX_E7,
901 PREFIX_VEX_E8,
902 PREFIX_VEX_E9,
903 PREFIX_VEX_EA,
904 PREFIX_VEX_EB,
905 PREFIX_VEX_EC,
906 PREFIX_VEX_ED,
907 PREFIX_VEX_EE,
908 PREFIX_VEX_EF,
909 PREFIX_VEX_F0,
910 PREFIX_VEX_F1,
911 PREFIX_VEX_F2,
912 PREFIX_VEX_F3,
913 PREFIX_VEX_F4,
914 PREFIX_VEX_F5,
915 PREFIX_VEX_F6,
916 PREFIX_VEX_F7,
917 PREFIX_VEX_F8,
918 PREFIX_VEX_F9,
919 PREFIX_VEX_FA,
920 PREFIX_VEX_FB,
921 PREFIX_VEX_FC,
922 PREFIX_VEX_FD,
923 PREFIX_VEX_FE,
924 PREFIX_VEX_3800,
925 PREFIX_VEX_3801,
926 PREFIX_VEX_3802,
927 PREFIX_VEX_3803,
928 PREFIX_VEX_3804,
929 PREFIX_VEX_3805,
930 PREFIX_VEX_3806,
931 PREFIX_VEX_3807,
932 PREFIX_VEX_3808,
933 PREFIX_VEX_3809,
934 PREFIX_VEX_380A,
935 PREFIX_VEX_380B,
936 PREFIX_VEX_380C,
937 PREFIX_VEX_380D,
938 PREFIX_VEX_380E,
939 PREFIX_VEX_380F,
940 PREFIX_VEX_3817,
941 PREFIX_VEX_3818,
942 PREFIX_VEX_3819,
943 PREFIX_VEX_381A,
944 PREFIX_VEX_381C,
945 PREFIX_VEX_381D,
946 PREFIX_VEX_381E,
947 PREFIX_VEX_3820,
948 PREFIX_VEX_3821,
949 PREFIX_VEX_3822,
950 PREFIX_VEX_3823,
951 PREFIX_VEX_3824,
952 PREFIX_VEX_3825,
953 PREFIX_VEX_3828,
954 PREFIX_VEX_3829,
955 PREFIX_VEX_382A,
956 PREFIX_VEX_382B,
957 PREFIX_VEX_382C,
958 PREFIX_VEX_382D,
959 PREFIX_VEX_382E,
960 PREFIX_VEX_382F,
961 PREFIX_VEX_3830,
962 PREFIX_VEX_3831,
963 PREFIX_VEX_3832,
964 PREFIX_VEX_3833,
965 PREFIX_VEX_3834,
966 PREFIX_VEX_3835,
967 PREFIX_VEX_3837,
968 PREFIX_VEX_3838,
969 PREFIX_VEX_3839,
970 PREFIX_VEX_383A,
971 PREFIX_VEX_383B,
972 PREFIX_VEX_383C,
973 PREFIX_VEX_383D,
974 PREFIX_VEX_383E,
975 PREFIX_VEX_383F,
976 PREFIX_VEX_3840,
977 PREFIX_VEX_3841,
978 PREFIX_VEX_3896,
979 PREFIX_VEX_3897,
980 PREFIX_VEX_3898,
981 PREFIX_VEX_3899,
982 PREFIX_VEX_389A,
983 PREFIX_VEX_389B,
984 PREFIX_VEX_389C,
985 PREFIX_VEX_389D,
986 PREFIX_VEX_389E,
987 PREFIX_VEX_389F,
988 PREFIX_VEX_38A6,
989 PREFIX_VEX_38A7,
990 PREFIX_VEX_38A8,
991 PREFIX_VEX_38A9,
992 PREFIX_VEX_38AA,
993 PREFIX_VEX_38AB,
994 PREFIX_VEX_38AC,
995 PREFIX_VEX_38AD,
996 PREFIX_VEX_38AE,
997 PREFIX_VEX_38AF,
998 PREFIX_VEX_38B6,
999 PREFIX_VEX_38B7,
1000 PREFIX_VEX_38B8,
1001 PREFIX_VEX_38B9,
1002 PREFIX_VEX_38BA,
1003 PREFIX_VEX_38BB,
1004 PREFIX_VEX_38BC,
1005 PREFIX_VEX_38BD,
1006 PREFIX_VEX_38BE,
1007 PREFIX_VEX_38BF,
1008 PREFIX_VEX_38DB,
1009 PREFIX_VEX_38DC,
1010 PREFIX_VEX_38DD,
1011 PREFIX_VEX_38DE,
1012 PREFIX_VEX_38DF,
1013 PREFIX_VEX_3A04,
1014 PREFIX_VEX_3A05,
1015 PREFIX_VEX_3A06,
1016 PREFIX_VEX_3A08,
1017 PREFIX_VEX_3A09,
1018 PREFIX_VEX_3A0A,
1019 PREFIX_VEX_3A0B,
1020 PREFIX_VEX_3A0C,
1021 PREFIX_VEX_3A0D,
1022 PREFIX_VEX_3A0E,
1023 PREFIX_VEX_3A0F,
1024 PREFIX_VEX_3A14,
1025 PREFIX_VEX_3A15,
1026 PREFIX_VEX_3A16,
1027 PREFIX_VEX_3A17,
1028 PREFIX_VEX_3A18,
1029 PREFIX_VEX_3A19,
1030 PREFIX_VEX_3A20,
1031 PREFIX_VEX_3A21,
1032 PREFIX_VEX_3A22,
1033 PREFIX_VEX_3A40,
1034 PREFIX_VEX_3A41,
1035 PREFIX_VEX_3A42,
1036 PREFIX_VEX_3A44,
a683cc34
SP
1037 PREFIX_VEX_3A48,
1038 PREFIX_VEX_3A49,
3873ba12
L
1039 PREFIX_VEX_3A4A,
1040 PREFIX_VEX_3A4B,
1041 PREFIX_VEX_3A4C,
1042 PREFIX_VEX_3A5C,
1043 PREFIX_VEX_3A5D,
1044 PREFIX_VEX_3A5E,
1045 PREFIX_VEX_3A5F,
1046 PREFIX_VEX_3A60,
1047 PREFIX_VEX_3A61,
1048 PREFIX_VEX_3A62,
1049 PREFIX_VEX_3A63,
1050 PREFIX_VEX_3A68,
1051 PREFIX_VEX_3A69,
1052 PREFIX_VEX_3A6A,
1053 PREFIX_VEX_3A6B,
1054 PREFIX_VEX_3A6C,
1055 PREFIX_VEX_3A6D,
1056 PREFIX_VEX_3A6E,
1057 PREFIX_VEX_3A6F,
1058 PREFIX_VEX_3A78,
1059 PREFIX_VEX_3A79,
1060 PREFIX_VEX_3A7A,
1061 PREFIX_VEX_3A7B,
1062 PREFIX_VEX_3A7C,
1063 PREFIX_VEX_3A7D,
1064 PREFIX_VEX_3A7E,
1065 PREFIX_VEX_3A7F,
1066 PREFIX_VEX_3ADF
51e7da1b 1067};
4e7d34a6 1068
51e7da1b
L
1069enum
1070{
1071 X86_64_06 = 0,
3873ba12
L
1072 X86_64_07,
1073 X86_64_0D,
1074 X86_64_16,
1075 X86_64_17,
1076 X86_64_1E,
1077 X86_64_1F,
1078 X86_64_27,
1079 X86_64_2F,
1080 X86_64_37,
1081 X86_64_3F,
1082 X86_64_60,
1083 X86_64_61,
1084 X86_64_62,
1085 X86_64_63,
1086 X86_64_6D,
1087 X86_64_6F,
1088 X86_64_9A,
1089 X86_64_C4,
1090 X86_64_C5,
1091 X86_64_CE,
1092 X86_64_D4,
1093 X86_64_D5,
1094 X86_64_EA,
1095 X86_64_0F01_REG_0,
1096 X86_64_0F01_REG_1,
1097 X86_64_0F01_REG_2,
1098 X86_64_0F01_REG_3
51e7da1b 1099};
4e7d34a6 1100
51e7da1b
L
1101enum
1102{
1103 THREE_BYTE_0F38 = 0,
3873ba12
L
1104 THREE_BYTE_0F3A,
1105 THREE_BYTE_0F7A
51e7da1b 1106};
4e7d34a6 1107
f88c9eb0
SP
1108enum
1109{
5dd85c99
SP
1110 XOP_08 = 0,
1111 XOP_09,
f88c9eb0
SP
1112 XOP_0A
1113};
1114
51e7da1b
L
1115enum
1116{
1117 VEX_0F = 0,
3873ba12
L
1118 VEX_0F38,
1119 VEX_0F3A
51e7da1b 1120};
c0f3af97 1121
51e7da1b
L
1122enum
1123{
1124 VEX_LEN_10_P_1 = 0,
3873ba12
L
1125 VEX_LEN_10_P_3,
1126 VEX_LEN_11_P_1,
1127 VEX_LEN_11_P_3,
1128 VEX_LEN_12_P_0_M_0,
1129 VEX_LEN_12_P_0_M_1,
1130 VEX_LEN_12_P_2,
1131 VEX_LEN_13_M_0,
1132 VEX_LEN_16_P_0_M_0,
1133 VEX_LEN_16_P_0_M_1,
1134 VEX_LEN_16_P_2,
1135 VEX_LEN_17_M_0,
1136 VEX_LEN_2A_P_1,
1137 VEX_LEN_2A_P_3,
1138 VEX_LEN_2C_P_1,
1139 VEX_LEN_2C_P_3,
1140 VEX_LEN_2D_P_1,
1141 VEX_LEN_2D_P_3,
1142 VEX_LEN_2E_P_0,
1143 VEX_LEN_2E_P_2,
1144 VEX_LEN_2F_P_0,
1145 VEX_LEN_2F_P_2,
1146 VEX_LEN_51_P_1,
1147 VEX_LEN_51_P_3,
1148 VEX_LEN_52_P_1,
1149 VEX_LEN_53_P_1,
1150 VEX_LEN_58_P_1,
1151 VEX_LEN_58_P_3,
1152 VEX_LEN_59_P_1,
1153 VEX_LEN_59_P_3,
1154 VEX_LEN_5A_P_1,
1155 VEX_LEN_5A_P_3,
1156 VEX_LEN_5C_P_1,
1157 VEX_LEN_5C_P_3,
1158 VEX_LEN_5D_P_1,
1159 VEX_LEN_5D_P_3,
1160 VEX_LEN_5E_P_1,
1161 VEX_LEN_5E_P_3,
1162 VEX_LEN_5F_P_1,
1163 VEX_LEN_5F_P_3,
1164 VEX_LEN_60_P_2,
1165 VEX_LEN_61_P_2,
1166 VEX_LEN_62_P_2,
1167 VEX_LEN_63_P_2,
1168 VEX_LEN_64_P_2,
1169 VEX_LEN_65_P_2,
1170 VEX_LEN_66_P_2,
1171 VEX_LEN_67_P_2,
1172 VEX_LEN_68_P_2,
1173 VEX_LEN_69_P_2,
1174 VEX_LEN_6A_P_2,
1175 VEX_LEN_6B_P_2,
1176 VEX_LEN_6C_P_2,
1177 VEX_LEN_6D_P_2,
1178 VEX_LEN_6E_P_2,
1179 VEX_LEN_70_P_1,
1180 VEX_LEN_70_P_2,
1181 VEX_LEN_70_P_3,
1182 VEX_LEN_71_R_2_P_2,
1183 VEX_LEN_71_R_4_P_2,
1184 VEX_LEN_71_R_6_P_2,
1185 VEX_LEN_72_R_2_P_2,
1186 VEX_LEN_72_R_4_P_2,
1187 VEX_LEN_72_R_6_P_2,
1188 VEX_LEN_73_R_2_P_2,
1189 VEX_LEN_73_R_3_P_2,
1190 VEX_LEN_73_R_6_P_2,
1191 VEX_LEN_73_R_7_P_2,
1192 VEX_LEN_74_P_2,
1193 VEX_LEN_75_P_2,
1194 VEX_LEN_76_P_2,
1195 VEX_LEN_7E_P_1,
1196 VEX_LEN_7E_P_2,
1197 VEX_LEN_AE_R_2_M_0,
1198 VEX_LEN_AE_R_3_M_0,
1199 VEX_LEN_C2_P_1,
1200 VEX_LEN_C2_P_3,
1201 VEX_LEN_C4_P_2,
1202 VEX_LEN_C5_P_2,
1203 VEX_LEN_D1_P_2,
1204 VEX_LEN_D2_P_2,
1205 VEX_LEN_D3_P_2,
1206 VEX_LEN_D4_P_2,
1207 VEX_LEN_D5_P_2,
1208 VEX_LEN_D6_P_2,
1209 VEX_LEN_D7_P_2_M_1,
1210 VEX_LEN_D8_P_2,
1211 VEX_LEN_D9_P_2,
1212 VEX_LEN_DA_P_2,
1213 VEX_LEN_DB_P_2,
1214 VEX_LEN_DC_P_2,
1215 VEX_LEN_DD_P_2,
1216 VEX_LEN_DE_P_2,
1217 VEX_LEN_DF_P_2,
1218 VEX_LEN_E0_P_2,
1219 VEX_LEN_E1_P_2,
1220 VEX_LEN_E2_P_2,
1221 VEX_LEN_E3_P_2,
1222 VEX_LEN_E4_P_2,
1223 VEX_LEN_E5_P_2,
1224 VEX_LEN_E8_P_2,
1225 VEX_LEN_E9_P_2,
1226 VEX_LEN_EA_P_2,
1227 VEX_LEN_EB_P_2,
1228 VEX_LEN_EC_P_2,
1229 VEX_LEN_ED_P_2,
1230 VEX_LEN_EE_P_2,
1231 VEX_LEN_EF_P_2,
1232 VEX_LEN_F1_P_2,
1233 VEX_LEN_F2_P_2,
1234 VEX_LEN_F3_P_2,
1235 VEX_LEN_F4_P_2,
1236 VEX_LEN_F5_P_2,
1237 VEX_LEN_F6_P_2,
1238 VEX_LEN_F7_P_2,
1239 VEX_LEN_F8_P_2,
1240 VEX_LEN_F9_P_2,
1241 VEX_LEN_FA_P_2,
1242 VEX_LEN_FB_P_2,
1243 VEX_LEN_FC_P_2,
1244 VEX_LEN_FD_P_2,
1245 VEX_LEN_FE_P_2,
1246 VEX_LEN_3800_P_2,
1247 VEX_LEN_3801_P_2,
1248 VEX_LEN_3802_P_2,
1249 VEX_LEN_3803_P_2,
1250 VEX_LEN_3804_P_2,
1251 VEX_LEN_3805_P_2,
1252 VEX_LEN_3806_P_2,
1253 VEX_LEN_3807_P_2,
1254 VEX_LEN_3808_P_2,
1255 VEX_LEN_3809_P_2,
1256 VEX_LEN_380A_P_2,
1257 VEX_LEN_380B_P_2,
1258 VEX_LEN_3819_P_2_M_0,
1259 VEX_LEN_381A_P_2_M_0,
1260 VEX_LEN_381C_P_2,
1261 VEX_LEN_381D_P_2,
1262 VEX_LEN_381E_P_2,
1263 VEX_LEN_3820_P_2,
1264 VEX_LEN_3821_P_2,
1265 VEX_LEN_3822_P_2,
1266 VEX_LEN_3823_P_2,
1267 VEX_LEN_3824_P_2,
1268 VEX_LEN_3825_P_2,
1269 VEX_LEN_3828_P_2,
1270 VEX_LEN_3829_P_2,
1271 VEX_LEN_382A_P_2_M_0,
1272 VEX_LEN_382B_P_2,
1273 VEX_LEN_3830_P_2,
1274 VEX_LEN_3831_P_2,
1275 VEX_LEN_3832_P_2,
1276 VEX_LEN_3833_P_2,
1277 VEX_LEN_3834_P_2,
1278 VEX_LEN_3835_P_2,
1279 VEX_LEN_3837_P_2,
1280 VEX_LEN_3838_P_2,
1281 VEX_LEN_3839_P_2,
1282 VEX_LEN_383A_P_2,
1283 VEX_LEN_383B_P_2,
1284 VEX_LEN_383C_P_2,
1285 VEX_LEN_383D_P_2,
1286 VEX_LEN_383E_P_2,
1287 VEX_LEN_383F_P_2,
1288 VEX_LEN_3840_P_2,
1289 VEX_LEN_3841_P_2,
1290 VEX_LEN_38DB_P_2,
1291 VEX_LEN_38DC_P_2,
1292 VEX_LEN_38DD_P_2,
1293 VEX_LEN_38DE_P_2,
1294 VEX_LEN_38DF_P_2,
1295 VEX_LEN_3A06_P_2,
1296 VEX_LEN_3A0A_P_2,
1297 VEX_LEN_3A0B_P_2,
1298 VEX_LEN_3A0E_P_2,
1299 VEX_LEN_3A0F_P_2,
1300 VEX_LEN_3A14_P_2,
1301 VEX_LEN_3A15_P_2,
1302 VEX_LEN_3A16_P_2,
1303 VEX_LEN_3A17_P_2,
1304 VEX_LEN_3A18_P_2,
1305 VEX_LEN_3A19_P_2,
1306 VEX_LEN_3A20_P_2,
1307 VEX_LEN_3A21_P_2,
1308 VEX_LEN_3A22_P_2,
1309 VEX_LEN_3A41_P_2,
1310 VEX_LEN_3A42_P_2,
1311 VEX_LEN_3A44_P_2,
1312 VEX_LEN_3A4C_P_2,
1313 VEX_LEN_3A60_P_2,
1314 VEX_LEN_3A61_P_2,
1315 VEX_LEN_3A62_P_2,
1316 VEX_LEN_3A63_P_2,
1317 VEX_LEN_3A6A_P_2,
1318 VEX_LEN_3A6B_P_2,
1319 VEX_LEN_3A6E_P_2,
1320 VEX_LEN_3A6F_P_2,
1321 VEX_LEN_3A7A_P_2,
1322 VEX_LEN_3A7B_P_2,
1323 VEX_LEN_3A7E_P_2,
1324 VEX_LEN_3A7F_P_2,
5dd85c99 1325 VEX_LEN_3ADF_P_2,
5dd85c99
SP
1326 VEX_LEN_XOP_09_80,
1327 VEX_LEN_XOP_09_81
51e7da1b 1328};
c0f3af97 1329
9e30b8e0
L
1330enum
1331{
1332 VEX_W_10_P_0 = 0,
1333 VEX_W_10_P_1,
1334 VEX_W_10_P_2,
1335 VEX_W_10_P_3,
1336 VEX_W_11_P_0,
1337 VEX_W_11_P_1,
1338 VEX_W_11_P_2,
1339 VEX_W_11_P_3,
1340 VEX_W_12_P_0_M_0,
1341 VEX_W_12_P_0_M_1,
1342 VEX_W_12_P_1,
1343 VEX_W_12_P_2,
1344 VEX_W_12_P_3,
1345 VEX_W_13_M_0,
1346 VEX_W_14,
1347 VEX_W_15,
1348 VEX_W_16_P_0_M_0,
1349 VEX_W_16_P_0_M_1,
1350 VEX_W_16_P_1,
1351 VEX_W_16_P_2,
1352 VEX_W_17_M_0,
1353 VEX_W_28,
1354 VEX_W_29,
1355 VEX_W_2B_M_0,
1356 VEX_W_2E_P_0,
1357 VEX_W_2E_P_2,
1358 VEX_W_2F_P_0,
1359 VEX_W_2F_P_2,
1360 VEX_W_50_M_0,
1361 VEX_W_51_P_0,
1362 VEX_W_51_P_1,
1363 VEX_W_51_P_2,
1364 VEX_W_51_P_3,
1365 VEX_W_52_P_0,
1366 VEX_W_52_P_1,
1367 VEX_W_53_P_0,
1368 VEX_W_53_P_1,
1369 VEX_W_58_P_0,
1370 VEX_W_58_P_1,
1371 VEX_W_58_P_2,
1372 VEX_W_58_P_3,
1373 VEX_W_59_P_0,
1374 VEX_W_59_P_1,
1375 VEX_W_59_P_2,
1376 VEX_W_59_P_3,
1377 VEX_W_5A_P_0,
1378 VEX_W_5A_P_1,
1379 VEX_W_5A_P_3,
1380 VEX_W_5B_P_0,
1381 VEX_W_5B_P_1,
1382 VEX_W_5B_P_2,
1383 VEX_W_5C_P_0,
1384 VEX_W_5C_P_1,
1385 VEX_W_5C_P_2,
1386 VEX_W_5C_P_3,
1387 VEX_W_5D_P_0,
1388 VEX_W_5D_P_1,
1389 VEX_W_5D_P_2,
1390 VEX_W_5D_P_3,
1391 VEX_W_5E_P_0,
1392 VEX_W_5E_P_1,
1393 VEX_W_5E_P_2,
1394 VEX_W_5E_P_3,
1395 VEX_W_5F_P_0,
1396 VEX_W_5F_P_1,
1397 VEX_W_5F_P_2,
1398 VEX_W_5F_P_3,
1399 VEX_W_60_P_2,
1400 VEX_W_61_P_2,
1401 VEX_W_62_P_2,
1402 VEX_W_63_P_2,
1403 VEX_W_64_P_2,
1404 VEX_W_65_P_2,
1405 VEX_W_66_P_2,
1406 VEX_W_67_P_2,
1407 VEX_W_68_P_2,
1408 VEX_W_69_P_2,
1409 VEX_W_6A_P_2,
1410 VEX_W_6B_P_2,
1411 VEX_W_6C_P_2,
1412 VEX_W_6D_P_2,
1413 VEX_W_6F_P_1,
1414 VEX_W_6F_P_2,
1415 VEX_W_70_P_1,
1416 VEX_W_70_P_2,
1417 VEX_W_70_P_3,
1418 VEX_W_71_R_2_P_2,
1419 VEX_W_71_R_4_P_2,
1420 VEX_W_71_R_6_P_2,
1421 VEX_W_72_R_2_P_2,
1422 VEX_W_72_R_4_P_2,
1423 VEX_W_72_R_6_P_2,
1424 VEX_W_73_R_2_P_2,
1425 VEX_W_73_R_3_P_2,
1426 VEX_W_73_R_6_P_2,
1427 VEX_W_73_R_7_P_2,
1428 VEX_W_74_P_2,
1429 VEX_W_75_P_2,
1430 VEX_W_76_P_2,
1431 VEX_W_77_P_0,
1432 VEX_W_7C_P_2,
1433 VEX_W_7C_P_3,
1434 VEX_W_7D_P_2,
1435 VEX_W_7D_P_3,
1436 VEX_W_7E_P_1,
1437 VEX_W_7F_P_1,
1438 VEX_W_7F_P_2,
1439 VEX_W_AE_R_2_M_0,
1440 VEX_W_AE_R_3_M_0,
1441 VEX_W_C2_P_0,
1442 VEX_W_C2_P_1,
1443 VEX_W_C2_P_2,
1444 VEX_W_C2_P_3,
1445 VEX_W_C4_P_2,
1446 VEX_W_C5_P_2,
1447 VEX_W_D0_P_2,
1448 VEX_W_D0_P_3,
1449 VEX_W_D1_P_2,
1450 VEX_W_D2_P_2,
1451 VEX_W_D3_P_2,
1452 VEX_W_D4_P_2,
1453 VEX_W_D5_P_2,
1454 VEX_W_D6_P_2,
1455 VEX_W_D7_P_2_M_1,
1456 VEX_W_D8_P_2,
1457 VEX_W_D9_P_2,
1458 VEX_W_DA_P_2,
1459 VEX_W_DB_P_2,
1460 VEX_W_DC_P_2,
1461 VEX_W_DD_P_2,
1462 VEX_W_DE_P_2,
1463 VEX_W_DF_P_2,
1464 VEX_W_E0_P_2,
1465 VEX_W_E1_P_2,
1466 VEX_W_E2_P_2,
1467 VEX_W_E3_P_2,
1468 VEX_W_E4_P_2,
1469 VEX_W_E5_P_2,
1470 VEX_W_E6_P_1,
1471 VEX_W_E6_P_2,
1472 VEX_W_E6_P_3,
1473 VEX_W_E7_P_2_M_0,
1474 VEX_W_E8_P_2,
1475 VEX_W_E9_P_2,
1476 VEX_W_EA_P_2,
1477 VEX_W_EB_P_2,
1478 VEX_W_EC_P_2,
1479 VEX_W_ED_P_2,
1480 VEX_W_EE_P_2,
1481 VEX_W_EF_P_2,
1482 VEX_W_F0_P_3_M_0,
1483 VEX_W_F1_P_2,
1484 VEX_W_F2_P_2,
1485 VEX_W_F3_P_2,
1486 VEX_W_F4_P_2,
1487 VEX_W_F5_P_2,
1488 VEX_W_F6_P_2,
1489 VEX_W_F7_P_2,
1490 VEX_W_F8_P_2,
1491 VEX_W_F9_P_2,
1492 VEX_W_FA_P_2,
1493 VEX_W_FB_P_2,
1494 VEX_W_FC_P_2,
1495 VEX_W_FD_P_2,
1496 VEX_W_FE_P_2,
1497 VEX_W_3800_P_2,
1498 VEX_W_3801_P_2,
1499 VEX_W_3802_P_2,
1500 VEX_W_3803_P_2,
1501 VEX_W_3804_P_2,
1502 VEX_W_3805_P_2,
1503 VEX_W_3806_P_2,
1504 VEX_W_3807_P_2,
1505 VEX_W_3808_P_2,
1506 VEX_W_3809_P_2,
1507 VEX_W_380A_P_2,
1508 VEX_W_380B_P_2,
1509 VEX_W_380C_P_2,
1510 VEX_W_380D_P_2,
1511 VEX_W_380E_P_2,
1512 VEX_W_380F_P_2,
1513 VEX_W_3817_P_2,
bcf2684f 1514 VEX_W_3818_P_2_M_0,
9e30b8e0
L
1515 VEX_W_3819_P_2_M_0,
1516 VEX_W_381A_P_2_M_0,
1517 VEX_W_381C_P_2,
1518 VEX_W_381D_P_2,
1519 VEX_W_381E_P_2,
1520 VEX_W_3820_P_2,
1521 VEX_W_3821_P_2,
1522 VEX_W_3822_P_2,
1523 VEX_W_3823_P_2,
1524 VEX_W_3824_P_2,
1525 VEX_W_3825_P_2,
1526 VEX_W_3828_P_2,
1527 VEX_W_3829_P_2,
1528 VEX_W_382A_P_2_M_0,
1529 VEX_W_382B_P_2,
53aa04a0
L
1530 VEX_W_382C_P_2_M_0,
1531 VEX_W_382D_P_2_M_0,
1532 VEX_W_382E_P_2_M_0,
1533 VEX_W_382F_P_2_M_0,
9e30b8e0
L
1534 VEX_W_3830_P_2,
1535 VEX_W_3831_P_2,
1536 VEX_W_3832_P_2,
1537 VEX_W_3833_P_2,
1538 VEX_W_3834_P_2,
1539 VEX_W_3835_P_2,
1540 VEX_W_3837_P_2,
1541 VEX_W_3838_P_2,
1542 VEX_W_3839_P_2,
1543 VEX_W_383A_P_2,
1544 VEX_W_383B_P_2,
1545 VEX_W_383C_P_2,
1546 VEX_W_383D_P_2,
1547 VEX_W_383E_P_2,
1548 VEX_W_383F_P_2,
1549 VEX_W_3840_P_2,
1550 VEX_W_3841_P_2,
1551 VEX_W_38DB_P_2,
1552 VEX_W_38DC_P_2,
1553 VEX_W_38DD_P_2,
1554 VEX_W_38DE_P_2,
1555 VEX_W_38DF_P_2,
1556 VEX_W_3A04_P_2,
1557 VEX_W_3A05_P_2,
1558 VEX_W_3A06_P_2,
1559 VEX_W_3A08_P_2,
1560 VEX_W_3A09_P_2,
1561 VEX_W_3A0A_P_2,
1562 VEX_W_3A0B_P_2,
1563 VEX_W_3A0C_P_2,
1564 VEX_W_3A0D_P_2,
1565 VEX_W_3A0E_P_2,
1566 VEX_W_3A0F_P_2,
1567 VEX_W_3A14_P_2,
1568 VEX_W_3A15_P_2,
1569 VEX_W_3A18_P_2,
1570 VEX_W_3A19_P_2,
1571 VEX_W_3A20_P_2,
1572 VEX_W_3A21_P_2,
1573 VEX_W_3A40_P_2,
1574 VEX_W_3A41_P_2,
1575 VEX_W_3A42_P_2,
1576 VEX_W_3A44_P_2,
a683cc34
SP
1577 VEX_W_3A48_P_2,
1578 VEX_W_3A49_P_2,
9e30b8e0
L
1579 VEX_W_3A4A_P_2,
1580 VEX_W_3A4B_P_2,
1581 VEX_W_3A4C_P_2,
1582 VEX_W_3A60_P_2,
1583 VEX_W_3A61_P_2,
1584 VEX_W_3A62_P_2,
1585 VEX_W_3A63_P_2,
1586 VEX_W_3ADF_P_2
1587};
1588
26ca5450 1589typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1590
1591struct dis386 {
2da11e11 1592 const char *name;
ce518a5f
L
1593 struct
1594 {
1595 op_rtn rtn;
1596 int bytemode;
1597 } op[MAX_OPERANDS];
252b5132
RH
1598};
1599
1600/* Upper case letters in the instruction names here are macros.
1601 'A' => print 'b' if no register operands or suffix_always is true
1602 'B' => print 'b' if suffix_always is true
9306ca4a 1603 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1604 size prefix
ed7841b3 1605 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1606 suffix_always is true
252b5132 1607 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1608 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1609 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1610 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1611 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1612 for some of the macro letters)
9306ca4a 1613 'J' => print 'l'
42903f7f 1614 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1615 'L' => print 'l' if suffix_always is true
9d141669 1616 'M' => print 'r' if intel_mnemonic is false.
252b5132 1617 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1618 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1619 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1620 or suffix_always is true. print 'q' if rex prefix is present.
1621 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1622 is true
a35ca55a 1623 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1624 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1625 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1626 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1627 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1628 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1629 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1630 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1631 suffix_always is true.
6dd5059a 1632 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1633 '!' => change condition from true to false or from false to true.
98b528ac
L
1634 '%' => add 1 upper case letter to the macro.
1635
1636 2 upper case letter macros:
c0f3af97
L
1637 "XY" => print 'x' or 'y' if no register operands or suffix_always
1638 is true.
4b06377f
L
1639 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1640 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1641 or suffix_always is true
4b06377f
L
1642 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1643 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1644 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
52b15da3 1645
6439fc28
AM
1646 Many of the above letters print nothing in Intel mode. See "putop"
1647 for the details.
52b15da3 1648
6439fc28 1649 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1650 mnemonic strings for AT&T and Intel. */
252b5132 1651
6439fc28 1652static const struct dis386 dis386[] = {
252b5132 1653 /* 00 */
ce518a5f
L
1654 { "addB", { Eb, Gb } },
1655 { "addS", { Ev, Gv } },
c7532693
L
1656 { "addB", { Gb, EbS } },
1657 { "addS", { Gv, EvS } },
ce518a5f
L
1658 { "addB", { AL, Ib } },
1659 { "addS", { eAX, Iv } },
4e7d34a6
L
1660 { X86_64_TABLE (X86_64_06) },
1661 { X86_64_TABLE (X86_64_07) },
252b5132 1662 /* 08 */
ce518a5f
L
1663 { "orB", { Eb, Gb } },
1664 { "orS", { Ev, Gv } },
c7532693
L
1665 { "orB", { Gb, EbS } },
1666 { "orS", { Gv, EvS } },
ce518a5f
L
1667 { "orB", { AL, Ib } },
1668 { "orS", { eAX, Iv } },
4e7d34a6 1669 { X86_64_TABLE (X86_64_0D) },
592d1631 1670 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 1671 /* 10 */
ce518a5f
L
1672 { "adcB", { Eb, Gb } },
1673 { "adcS", { Ev, Gv } },
c7532693
L
1674 { "adcB", { Gb, EbS } },
1675 { "adcS", { Gv, EvS } },
ce518a5f
L
1676 { "adcB", { AL, Ib } },
1677 { "adcS", { eAX, Iv } },
4e7d34a6
L
1678 { X86_64_TABLE (X86_64_16) },
1679 { X86_64_TABLE (X86_64_17) },
252b5132 1680 /* 18 */
ce518a5f
L
1681 { "sbbB", { Eb, Gb } },
1682 { "sbbS", { Ev, Gv } },
c7532693
L
1683 { "sbbB", { Gb, EbS } },
1684 { "sbbS", { Gv, EvS } },
ce518a5f
L
1685 { "sbbB", { AL, Ib } },
1686 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1687 { X86_64_TABLE (X86_64_1E) },
1688 { X86_64_TABLE (X86_64_1F) },
252b5132 1689 /* 20 */
ce518a5f
L
1690 { "andB", { Eb, Gb } },
1691 { "andS", { Ev, Gv } },
c7532693
L
1692 { "andB", { Gb, EbS } },
1693 { "andS", { Gv, EvS } },
ce518a5f
L
1694 { "andB", { AL, Ib } },
1695 { "andS", { eAX, Iv } },
592d1631 1696 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 1697 { X86_64_TABLE (X86_64_27) },
252b5132 1698 /* 28 */
ce518a5f
L
1699 { "subB", { Eb, Gb } },
1700 { "subS", { Ev, Gv } },
c7532693
L
1701 { "subB", { Gb, EbS } },
1702 { "subS", { Gv, EvS } },
ce518a5f
L
1703 { "subB", { AL, Ib } },
1704 { "subS", { eAX, Iv } },
592d1631 1705 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 1706 { X86_64_TABLE (X86_64_2F) },
252b5132 1707 /* 30 */
ce518a5f
L
1708 { "xorB", { Eb, Gb } },
1709 { "xorS", { Ev, Gv } },
c7532693
L
1710 { "xorB", { Gb, EbS } },
1711 { "xorS", { Gv, EvS } },
ce518a5f
L
1712 { "xorB", { AL, Ib } },
1713 { "xorS", { eAX, Iv } },
592d1631 1714 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 1715 { X86_64_TABLE (X86_64_37) },
252b5132 1716 /* 38 */
ce518a5f
L
1717 { "cmpB", { Eb, Gb } },
1718 { "cmpS", { Ev, Gv } },
c7532693
L
1719 { "cmpB", { Gb, EbS } },
1720 { "cmpS", { Gv, EvS } },
ce518a5f
L
1721 { "cmpB", { AL, Ib } },
1722 { "cmpS", { eAX, Iv } },
592d1631 1723 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 1724 { X86_64_TABLE (X86_64_3F) },
252b5132 1725 /* 40 */
ce518a5f
L
1726 { "inc{S|}", { RMeAX } },
1727 { "inc{S|}", { RMeCX } },
1728 { "inc{S|}", { RMeDX } },
1729 { "inc{S|}", { RMeBX } },
1730 { "inc{S|}", { RMeSP } },
1731 { "inc{S|}", { RMeBP } },
1732 { "inc{S|}", { RMeSI } },
1733 { "inc{S|}", { RMeDI } },
252b5132 1734 /* 48 */
ce518a5f
L
1735 { "dec{S|}", { RMeAX } },
1736 { "dec{S|}", { RMeCX } },
1737 { "dec{S|}", { RMeDX } },
1738 { "dec{S|}", { RMeBX } },
1739 { "dec{S|}", { RMeSP } },
1740 { "dec{S|}", { RMeBP } },
1741 { "dec{S|}", { RMeSI } },
1742 { "dec{S|}", { RMeDI } },
252b5132 1743 /* 50 */
ce518a5f
L
1744 { "pushV", { RMrAX } },
1745 { "pushV", { RMrCX } },
1746 { "pushV", { RMrDX } },
1747 { "pushV", { RMrBX } },
1748 { "pushV", { RMrSP } },
1749 { "pushV", { RMrBP } },
1750 { "pushV", { RMrSI } },
1751 { "pushV", { RMrDI } },
252b5132 1752 /* 58 */
ce518a5f
L
1753 { "popV", { RMrAX } },
1754 { "popV", { RMrCX } },
1755 { "popV", { RMrDX } },
1756 { "popV", { RMrBX } },
1757 { "popV", { RMrSP } },
1758 { "popV", { RMrBP } },
1759 { "popV", { RMrSI } },
1760 { "popV", { RMrDI } },
252b5132 1761 /* 60 */
4e7d34a6
L
1762 { X86_64_TABLE (X86_64_60) },
1763 { X86_64_TABLE (X86_64_61) },
1764 { X86_64_TABLE (X86_64_62) },
1765 { X86_64_TABLE (X86_64_63) },
592d1631
L
1766 { Bad_Opcode }, /* seg fs */
1767 { Bad_Opcode }, /* seg gs */
1768 { Bad_Opcode }, /* op size prefix */
1769 { Bad_Opcode }, /* adr size prefix */
252b5132 1770 /* 68 */
ce518a5f
L
1771 { "pushT", { Iq } },
1772 { "imulS", { Gv, Ev, Iv } },
1773 { "pushT", { sIb } },
1774 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1775 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1776 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1777 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1778 { X86_64_TABLE (X86_64_6F) },
252b5132 1779 /* 70 */
ce518a5f
L
1780 { "joH", { Jb, XX, cond_jump_flag } },
1781 { "jnoH", { Jb, XX, cond_jump_flag } },
1782 { "jbH", { Jb, XX, cond_jump_flag } },
1783 { "jaeH", { Jb, XX, cond_jump_flag } },
1784 { "jeH", { Jb, XX, cond_jump_flag } },
1785 { "jneH", { Jb, XX, cond_jump_flag } },
1786 { "jbeH", { Jb, XX, cond_jump_flag } },
1787 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1788 /* 78 */
ce518a5f
L
1789 { "jsH", { Jb, XX, cond_jump_flag } },
1790 { "jnsH", { Jb, XX, cond_jump_flag } },
1791 { "jpH", { Jb, XX, cond_jump_flag } },
1792 { "jnpH", { Jb, XX, cond_jump_flag } },
1793 { "jlH", { Jb, XX, cond_jump_flag } },
1794 { "jgeH", { Jb, XX, cond_jump_flag } },
1795 { "jleH", { Jb, XX, cond_jump_flag } },
1796 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1797 /* 80 */
1ceb70f8
L
1798 { REG_TABLE (REG_80) },
1799 { REG_TABLE (REG_81) },
592d1631 1800 { Bad_Opcode },
1ceb70f8 1801 { REG_TABLE (REG_82) },
ce518a5f
L
1802 { "testB", { Eb, Gb } },
1803 { "testS", { Ev, Gv } },
1804 { "xchgB", { Eb, Gb } },
1805 { "xchgS", { Ev, Gv } },
252b5132 1806 /* 88 */
ce518a5f
L
1807 { "movB", { Eb, Gb } },
1808 { "movS", { Ev, Gv } },
b6169b20
L
1809 { "movB", { Gb, EbS } },
1810 { "movS", { Gv, EvS } },
ce518a5f 1811 { "movD", { Sv, Sw } },
1ceb70f8 1812 { MOD_TABLE (MOD_8D) },
ce518a5f 1813 { "movD", { Sw, Sv } },
1ceb70f8 1814 { REG_TABLE (REG_8F) },
252b5132 1815 /* 90 */
1ceb70f8 1816 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1817 { "xchgS", { RMeCX, eAX } },
1818 { "xchgS", { RMeDX, eAX } },
1819 { "xchgS", { RMeBX, eAX } },
1820 { "xchgS", { RMeSP, eAX } },
1821 { "xchgS", { RMeBP, eAX } },
1822 { "xchgS", { RMeSI, eAX } },
1823 { "xchgS", { RMeDI, eAX } },
252b5132 1824 /* 98 */
7c52e0e8
L
1825 { "cW{t|}R", { XX } },
1826 { "cR{t|}O", { XX } },
4e7d34a6 1827 { X86_64_TABLE (X86_64_9A) },
592d1631 1828 { Bad_Opcode }, /* fwait */
ce518a5f
L
1829 { "pushfT", { XX } },
1830 { "popfT", { XX } },
7c52e0e8
L
1831 { "sahf", { XX } },
1832 { "lahf", { XX } },
252b5132 1833 /* a0 */
4b06377f
L
1834 { "mov%LB", { AL, Ob } },
1835 { "mov%LS", { eAX, Ov } },
1836 { "mov%LB", { Ob, AL } },
1837 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1838 { "movs{b|}", { Ybr, Xb } },
1839 { "movs{R|}", { Yvr, Xv } },
1840 { "cmps{b|}", { Xb, Yb } },
1841 { "cmps{R|}", { Xv, Yv } },
252b5132 1842 /* a8 */
ce518a5f
L
1843 { "testB", { AL, Ib } },
1844 { "testS", { eAX, Iv } },
1845 { "stosB", { Ybr, AL } },
1846 { "stosS", { Yvr, eAX } },
1847 { "lodsB", { ALr, Xb } },
1848 { "lodsS", { eAXr, Xv } },
1849 { "scasB", { AL, Yb } },
1850 { "scasS", { eAX, Yv } },
252b5132 1851 /* b0 */
ce518a5f
L
1852 { "movB", { RMAL, Ib } },
1853 { "movB", { RMCL, Ib } },
1854 { "movB", { RMDL, Ib } },
1855 { "movB", { RMBL, Ib } },
1856 { "movB", { RMAH, Ib } },
1857 { "movB", { RMCH, Ib } },
1858 { "movB", { RMDH, Ib } },
1859 { "movB", { RMBH, Ib } },
252b5132 1860 /* b8 */
4b06377f
L
1861 { "mov%LV", { RMeAX, Iv64 } },
1862 { "mov%LV", { RMeCX, Iv64 } },
1863 { "mov%LV", { RMeDX, Iv64 } },
1864 { "mov%LV", { RMeBX, Iv64 } },
1865 { "mov%LV", { RMeSP, Iv64 } },
1866 { "mov%LV", { RMeBP, Iv64 } },
1867 { "mov%LV", { RMeSI, Iv64 } },
1868 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1869 /* c0 */
1ceb70f8
L
1870 { REG_TABLE (REG_C0) },
1871 { REG_TABLE (REG_C1) },
ce518a5f
L
1872 { "retT", { Iw } },
1873 { "retT", { XX } },
4e7d34a6
L
1874 { X86_64_TABLE (X86_64_C4) },
1875 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1876 { REG_TABLE (REG_C6) },
1877 { REG_TABLE (REG_C7) },
252b5132 1878 /* c8 */
ce518a5f
L
1879 { "enterT", { Iw, Ib } },
1880 { "leaveT", { XX } },
ddab3d59
JB
1881 { "Jret{|f}P", { Iw } },
1882 { "Jret{|f}P", { XX } },
ce518a5f
L
1883 { "int3", { XX } },
1884 { "int", { Ib } },
4e7d34a6 1885 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1886 { "iretP", { XX } },
252b5132 1887 /* d0 */
1ceb70f8
L
1888 { REG_TABLE (REG_D0) },
1889 { REG_TABLE (REG_D1) },
1890 { REG_TABLE (REG_D2) },
1891 { REG_TABLE (REG_D3) },
4e7d34a6
L
1892 { X86_64_TABLE (X86_64_D4) },
1893 { X86_64_TABLE (X86_64_D5) },
592d1631 1894 { Bad_Opcode },
ce518a5f 1895 { "xlat", { DSBX } },
252b5132
RH
1896 /* d8 */
1897 { FLOAT },
1898 { FLOAT },
1899 { FLOAT },
1900 { FLOAT },
1901 { FLOAT },
1902 { FLOAT },
1903 { FLOAT },
1904 { FLOAT },
1905 /* e0 */
ce518a5f
L
1906 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1907 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1908 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1909 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1910 { "inB", { AL, Ib } },
1911 { "inG", { zAX, Ib } },
1912 { "outB", { Ib, AL } },
1913 { "outG", { Ib, zAX } },
252b5132 1914 /* e8 */
ce518a5f
L
1915 { "callT", { Jv } },
1916 { "jmpT", { Jv } },
4e7d34a6 1917 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1918 { "jmp", { Jb } },
1919 { "inB", { AL, indirDX } },
1920 { "inG", { zAX, indirDX } },
1921 { "outB", { indirDX, AL } },
1922 { "outG", { indirDX, zAX } },
252b5132 1923 /* f0 */
592d1631 1924 { Bad_Opcode }, /* lock prefix */
ce518a5f 1925 { "icebp", { XX } },
592d1631
L
1926 { Bad_Opcode }, /* repne */
1927 { Bad_Opcode }, /* repz */
ce518a5f
L
1928 { "hlt", { XX } },
1929 { "cmc", { XX } },
1ceb70f8
L
1930 { REG_TABLE (REG_F6) },
1931 { REG_TABLE (REG_F7) },
252b5132 1932 /* f8 */
ce518a5f
L
1933 { "clc", { XX } },
1934 { "stc", { XX } },
1935 { "cli", { XX } },
1936 { "sti", { XX } },
1937 { "cld", { XX } },
1938 { "std", { XX } },
1ceb70f8
L
1939 { REG_TABLE (REG_FE) },
1940 { REG_TABLE (REG_FF) },
252b5132
RH
1941};
1942
6439fc28 1943static const struct dis386 dis386_twobyte[] = {
252b5132 1944 /* 00 */
1ceb70f8
L
1945 { REG_TABLE (REG_0F00 ) },
1946 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1947 { "larS", { Gv, Ew } },
1948 { "lslS", { Gv, Ew } },
592d1631 1949 { Bad_Opcode },
ce518a5f
L
1950 { "syscall", { XX } },
1951 { "clts", { XX } },
1952 { "sysretP", { XX } },
252b5132 1953 /* 08 */
ce518a5f
L
1954 { "invd", { XX } },
1955 { "wbinvd", { XX } },
592d1631 1956 { Bad_Opcode },
ce518a5f 1957 { "ud2a", { XX } },
592d1631 1958 { Bad_Opcode },
b5b1fc4f 1959 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1960 { "femms", { XX } },
1961 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1962 /* 10 */
1ceb70f8
L
1963 { PREFIX_TABLE (PREFIX_0F10) },
1964 { PREFIX_TABLE (PREFIX_0F11) },
1965 { PREFIX_TABLE (PREFIX_0F12) },
1966 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1967 { "unpcklpX", { XM, EXx } },
1968 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1969 { PREFIX_TABLE (PREFIX_0F16) },
1970 { MOD_TABLE (MOD_0F17) },
252b5132 1971 /* 18 */
1ceb70f8 1972 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1973 { "nopQ", { Ev } },
1974 { "nopQ", { Ev } },
1975 { "nopQ", { Ev } },
1976 { "nopQ", { Ev } },
1977 { "nopQ", { Ev } },
1978 { "nopQ", { Ev } },
ce518a5f 1979 { "nopQ", { Ev } },
252b5132 1980 /* 20 */
1ceb70f8
L
1981 { MOD_TABLE (MOD_0F20) },
1982 { MOD_TABLE (MOD_0F21) },
1983 { MOD_TABLE (MOD_0F22) },
1984 { MOD_TABLE (MOD_0F23) },
1985 { MOD_TABLE (MOD_0F24) },
592d1631 1986 { Bad_Opcode },
1ceb70f8 1987 { MOD_TABLE (MOD_0F26) },
592d1631 1988 { Bad_Opcode },
252b5132 1989 /* 28 */
09a2c6cf 1990 { "movapX", { XM, EXx } },
b6169b20 1991 { "movapX", { EXxS, XM } },
1ceb70f8
L
1992 { PREFIX_TABLE (PREFIX_0F2A) },
1993 { PREFIX_TABLE (PREFIX_0F2B) },
1994 { PREFIX_TABLE (PREFIX_0F2C) },
1995 { PREFIX_TABLE (PREFIX_0F2D) },
1996 { PREFIX_TABLE (PREFIX_0F2E) },
1997 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 1998 /* 30 */
ce518a5f
L
1999 { "wrmsr", { XX } },
2000 { "rdtsc", { XX } },
2001 { "rdmsr", { XX } },
2002 { "rdpmc", { XX } },
2003 { "sysenter", { XX } },
2004 { "sysexit", { XX } },
592d1631 2005 { Bad_Opcode },
47dd174c 2006 { "getsec", { XX } },
252b5132 2007 /* 38 */
4e7d34a6 2008 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2009 { Bad_Opcode },
4e7d34a6 2010 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2011 { Bad_Opcode },
2012 { Bad_Opcode },
2013 { Bad_Opcode },
2014 { Bad_Opcode },
2015 { Bad_Opcode },
252b5132 2016 /* 40 */
b19d5385
JB
2017 { "cmovoS", { Gv, Ev } },
2018 { "cmovnoS", { Gv, Ev } },
2019 { "cmovbS", { Gv, Ev } },
2020 { "cmovaeS", { Gv, Ev } },
2021 { "cmoveS", { Gv, Ev } },
2022 { "cmovneS", { Gv, Ev } },
2023 { "cmovbeS", { Gv, Ev } },
2024 { "cmovaS", { Gv, Ev } },
252b5132 2025 /* 48 */
b19d5385
JB
2026 { "cmovsS", { Gv, Ev } },
2027 { "cmovnsS", { Gv, Ev } },
2028 { "cmovpS", { Gv, Ev } },
2029 { "cmovnpS", { Gv, Ev } },
2030 { "cmovlS", { Gv, Ev } },
2031 { "cmovgeS", { Gv, Ev } },
2032 { "cmovleS", { Gv, Ev } },
2033 { "cmovgS", { Gv, Ev } },
252b5132 2034 /* 50 */
75c135a8 2035 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2036 { PREFIX_TABLE (PREFIX_0F51) },
2037 { PREFIX_TABLE (PREFIX_0F52) },
2038 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2039 { "andpX", { XM, EXx } },
2040 { "andnpX", { XM, EXx } },
2041 { "orpX", { XM, EXx } },
2042 { "xorpX", { XM, EXx } },
252b5132 2043 /* 58 */
1ceb70f8
L
2044 { PREFIX_TABLE (PREFIX_0F58) },
2045 { PREFIX_TABLE (PREFIX_0F59) },
2046 { PREFIX_TABLE (PREFIX_0F5A) },
2047 { PREFIX_TABLE (PREFIX_0F5B) },
2048 { PREFIX_TABLE (PREFIX_0F5C) },
2049 { PREFIX_TABLE (PREFIX_0F5D) },
2050 { PREFIX_TABLE (PREFIX_0F5E) },
2051 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2052 /* 60 */
1ceb70f8
L
2053 { PREFIX_TABLE (PREFIX_0F60) },
2054 { PREFIX_TABLE (PREFIX_0F61) },
2055 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2056 { "packsswb", { MX, EM } },
2057 { "pcmpgtb", { MX, EM } },
2058 { "pcmpgtw", { MX, EM } },
2059 { "pcmpgtd", { MX, EM } },
2060 { "packuswb", { MX, EM } },
252b5132 2061 /* 68 */
ce518a5f
L
2062 { "punpckhbw", { MX, EM } },
2063 { "punpckhwd", { MX, EM } },
2064 { "punpckhdq", { MX, EM } },
2065 { "packssdw", { MX, EM } },
1ceb70f8
L
2066 { PREFIX_TABLE (PREFIX_0F6C) },
2067 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2068 { "movK", { MX, Edq } },
1ceb70f8 2069 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2070 /* 70 */
1ceb70f8
L
2071 { PREFIX_TABLE (PREFIX_0F70) },
2072 { REG_TABLE (REG_0F71) },
2073 { REG_TABLE (REG_0F72) },
2074 { REG_TABLE (REG_0F73) },
ce518a5f
L
2075 { "pcmpeqb", { MX, EM } },
2076 { "pcmpeqw", { MX, EM } },
2077 { "pcmpeqd", { MX, EM } },
2078 { "emms", { XX } },
252b5132 2079 /* 78 */
1ceb70f8
L
2080 { PREFIX_TABLE (PREFIX_0F78) },
2081 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2082 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2083 { Bad_Opcode },
1ceb70f8
L
2084 { PREFIX_TABLE (PREFIX_0F7C) },
2085 { PREFIX_TABLE (PREFIX_0F7D) },
2086 { PREFIX_TABLE (PREFIX_0F7E) },
2087 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2088 /* 80 */
ce518a5f
L
2089 { "joH", { Jv, XX, cond_jump_flag } },
2090 { "jnoH", { Jv, XX, cond_jump_flag } },
2091 { "jbH", { Jv, XX, cond_jump_flag } },
2092 { "jaeH", { Jv, XX, cond_jump_flag } },
2093 { "jeH", { Jv, XX, cond_jump_flag } },
2094 { "jneH", { Jv, XX, cond_jump_flag } },
2095 { "jbeH", { Jv, XX, cond_jump_flag } },
2096 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 2097 /* 88 */
ce518a5f
L
2098 { "jsH", { Jv, XX, cond_jump_flag } },
2099 { "jnsH", { Jv, XX, cond_jump_flag } },
2100 { "jpH", { Jv, XX, cond_jump_flag } },
2101 { "jnpH", { Jv, XX, cond_jump_flag } },
2102 { "jlH", { Jv, XX, cond_jump_flag } },
2103 { "jgeH", { Jv, XX, cond_jump_flag } },
2104 { "jleH", { Jv, XX, cond_jump_flag } },
2105 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 2106 /* 90 */
ce518a5f
L
2107 { "seto", { Eb } },
2108 { "setno", { Eb } },
2109 { "setb", { Eb } },
2110 { "setae", { Eb } },
2111 { "sete", { Eb } },
2112 { "setne", { Eb } },
2113 { "setbe", { Eb } },
2114 { "seta", { Eb } },
252b5132 2115 /* 98 */
ce518a5f
L
2116 { "sets", { Eb } },
2117 { "setns", { Eb } },
2118 { "setp", { Eb } },
2119 { "setnp", { Eb } },
2120 { "setl", { Eb } },
2121 { "setge", { Eb } },
2122 { "setle", { Eb } },
2123 { "setg", { Eb } },
252b5132 2124 /* a0 */
ce518a5f
L
2125 { "pushT", { fs } },
2126 { "popT", { fs } },
2127 { "cpuid", { XX } },
2128 { "btS", { Ev, Gv } },
2129 { "shldS", { Ev, Gv, Ib } },
2130 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2131 { REG_TABLE (REG_0FA6) },
2132 { REG_TABLE (REG_0FA7) },
252b5132 2133 /* a8 */
ce518a5f
L
2134 { "pushT", { gs } },
2135 { "popT", { gs } },
2136 { "rsm", { XX } },
2137 { "btsS", { Ev, Gv } },
2138 { "shrdS", { Ev, Gv, Ib } },
2139 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2140 { REG_TABLE (REG_0FAE) },
ce518a5f 2141 { "imulS", { Gv, Ev } },
252b5132 2142 /* b0 */
ce518a5f
L
2143 { "cmpxchgB", { Eb, Gb } },
2144 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 2145 { MOD_TABLE (MOD_0FB2) },
ce518a5f 2146 { "btrS", { Ev, Gv } },
1ceb70f8
L
2147 { MOD_TABLE (MOD_0FB4) },
2148 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2149 { "movz{bR|x}", { Gv, Eb } },
2150 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2151 /* b8 */
1ceb70f8 2152 { PREFIX_TABLE (PREFIX_0FB8) },
ce518a5f 2153 { "ud2b", { XX } },
1ceb70f8 2154 { REG_TABLE (REG_0FBA) },
ce518a5f
L
2155 { "btcS", { Ev, Gv } },
2156 { "bsfS", { Gv, Ev } },
1ceb70f8 2157 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2158 { "movs{bR|x}", { Gv, Eb } },
2159 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2160 /* c0 */
ce518a5f
L
2161 { "xaddB", { Eb, Gb } },
2162 { "xaddS", { Ev, Gv } },
1ceb70f8 2163 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2164 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2165 { "pinsrw", { MX, Edqw, Ib } },
2166 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2167 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2168 { REG_TABLE (REG_0FC7) },
252b5132 2169 /* c8 */
ce518a5f
L
2170 { "bswap", { RMeAX } },
2171 { "bswap", { RMeCX } },
2172 { "bswap", { RMeDX } },
2173 { "bswap", { RMeBX } },
2174 { "bswap", { RMeSP } },
2175 { "bswap", { RMeBP } },
2176 { "bswap", { RMeSI } },
2177 { "bswap", { RMeDI } },
252b5132 2178 /* d0 */
1ceb70f8 2179 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2180 { "psrlw", { MX, EM } },
2181 { "psrld", { MX, EM } },
2182 { "psrlq", { MX, EM } },
2183 { "paddq", { MX, EM } },
2184 { "pmullw", { MX, EM } },
1ceb70f8 2185 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2186 { MOD_TABLE (MOD_0FD7) },
252b5132 2187 /* d8 */
ce518a5f
L
2188 { "psubusb", { MX, EM } },
2189 { "psubusw", { MX, EM } },
2190 { "pminub", { MX, EM } },
2191 { "pand", { MX, EM } },
2192 { "paddusb", { MX, EM } },
2193 { "paddusw", { MX, EM } },
2194 { "pmaxub", { MX, EM } },
2195 { "pandn", { MX, EM } },
252b5132 2196 /* e0 */
ce518a5f
L
2197 { "pavgb", { MX, EM } },
2198 { "psraw", { MX, EM } },
2199 { "psrad", { MX, EM } },
2200 { "pavgw", { MX, EM } },
2201 { "pmulhuw", { MX, EM } },
2202 { "pmulhw", { MX, EM } },
1ceb70f8
L
2203 { PREFIX_TABLE (PREFIX_0FE6) },
2204 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2205 /* e8 */
ce518a5f
L
2206 { "psubsb", { MX, EM } },
2207 { "psubsw", { MX, EM } },
2208 { "pminsw", { MX, EM } },
2209 { "por", { MX, EM } },
2210 { "paddsb", { MX, EM } },
2211 { "paddsw", { MX, EM } },
2212 { "pmaxsw", { MX, EM } },
2213 { "pxor", { MX, EM } },
252b5132 2214 /* f0 */
1ceb70f8 2215 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2216 { "psllw", { MX, EM } },
2217 { "pslld", { MX, EM } },
2218 { "psllq", { MX, EM } },
2219 { "pmuludq", { MX, EM } },
2220 { "pmaddwd", { MX, EM } },
2221 { "psadbw", { MX, EM } },
1ceb70f8 2222 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2223 /* f8 */
ce518a5f
L
2224 { "psubb", { MX, EM } },
2225 { "psubw", { MX, EM } },
2226 { "psubd", { MX, EM } },
2227 { "psubq", { MX, EM } },
2228 { "paddb", { MX, EM } },
2229 { "paddw", { MX, EM } },
2230 { "paddd", { MX, EM } },
592d1631 2231 { Bad_Opcode },
252b5132
RH
2232};
2233
2234static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2235 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2236 /* ------------------------------- */
2237 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2238 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2239 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2240 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2241 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2242 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2243 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2244 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2245 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2246 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2247 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2248 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2249 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2250 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2251 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2252 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2253 /* ------------------------------- */
2254 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2255};
2256
2257static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2258 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2259 /* ------------------------------- */
252b5132 2260 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2261 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2262 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2263 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2264 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2265 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2266 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2267 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2268 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2269 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2270 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2271 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2272 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2273 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2274 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2275 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2276 /* ------------------------------- */
2277 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2278};
2279
252b5132
RH
2280static char obuf[100];
2281static char *obufp;
ea397f5b 2282static char *mnemonicendp;
252b5132
RH
2283static char scratchbuf[100];
2284static unsigned char *start_codep;
2285static unsigned char *insn_codep;
2286static unsigned char *codep;
f16cd0d5
L
2287static int last_lock_prefix;
2288static int last_repz_prefix;
2289static int last_repnz_prefix;
2290static int last_data_prefix;
2291static int last_addr_prefix;
2292static int last_rex_prefix;
2293static int last_seg_prefix;
2294#define MAX_CODE_LENGTH 15
2295/* We can up to 14 prefixes since the maximum instruction length is
2296 15bytes. */
2297static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2298static disassemble_info *the_info;
7967e09e
L
2299static struct
2300 {
2301 int mod;
7967e09e 2302 int reg;
484c222e 2303 int rm;
7967e09e
L
2304 }
2305modrm;
4bba6815 2306static unsigned char need_modrm;
c0f3af97
L
2307static struct
2308 {
2309 int register_specifier;
2310 int length;
2311 int prefix;
2312 int w;
2313 }
2314vex;
2315static unsigned char need_vex;
2316static unsigned char need_vex_reg;
dae39acc 2317static unsigned char vex_w_done;
252b5132 2318
ea397f5b
L
2319struct op
2320 {
2321 const char *name;
2322 unsigned int len;
2323 };
2324
4bba6815
AM
2325/* If we are accessing mod/rm/reg without need_modrm set, then the
2326 values are stale. Hitting this abort likely indicates that you
2327 need to update onebyte_has_modrm or twobyte_has_modrm. */
2328#define MODRM_CHECK if (!need_modrm) abort ()
2329
d708bcba
AM
2330static const char **names64;
2331static const char **names32;
2332static const char **names16;
2333static const char **names8;
2334static const char **names8rex;
2335static const char **names_seg;
db51cc60
L
2336static const char *index64;
2337static const char *index32;
d708bcba
AM
2338static const char **index16;
2339
2340static const char *intel_names64[] = {
2341 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2342 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2343};
2344static const char *intel_names32[] = {
2345 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2346 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2347};
2348static const char *intel_names16[] = {
2349 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2350 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2351};
2352static const char *intel_names8[] = {
2353 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2354};
2355static const char *intel_names8rex[] = {
2356 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2357 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2358};
2359static const char *intel_names_seg[] = {
2360 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2361};
db51cc60
L
2362static const char *intel_index64 = "riz";
2363static const char *intel_index32 = "eiz";
d708bcba
AM
2364static const char *intel_index16[] = {
2365 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2366};
2367
2368static const char *att_names64[] = {
2369 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2370 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2371};
d708bcba
AM
2372static const char *att_names32[] = {
2373 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2374 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2375};
d708bcba
AM
2376static const char *att_names16[] = {
2377 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2378 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2379};
d708bcba
AM
2380static const char *att_names8[] = {
2381 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2382};
d708bcba
AM
2383static const char *att_names8rex[] = {
2384 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2385 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2386};
d708bcba
AM
2387static const char *att_names_seg[] = {
2388 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2389};
db51cc60
L
2390static const char *att_index64 = "%riz";
2391static const char *att_index32 = "%eiz";
d708bcba
AM
2392static const char *att_index16[] = {
2393 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2394};
2395
b9733481
L
2396static const char **names_mm;
2397static const char *intel_names_mm[] = {
2398 "mm0", "mm1", "mm2", "mm3",
2399 "mm4", "mm5", "mm6", "mm7"
2400};
2401static const char *att_names_mm[] = {
2402 "%mm0", "%mm1", "%mm2", "%mm3",
2403 "%mm4", "%mm5", "%mm6", "%mm7"
2404};
2405
2406static const char **names_xmm;
2407static const char *intel_names_xmm[] = {
2408 "xmm0", "xmm1", "xmm2", "xmm3",
2409 "xmm4", "xmm5", "xmm6", "xmm7",
2410 "xmm8", "xmm9", "xmm10", "xmm11",
2411 "xmm12", "xmm13", "xmm14", "xmm15"
2412};
2413static const char *att_names_xmm[] = {
2414 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2415 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2416 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2417 "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2418};
2419
2420static const char **names_ymm;
2421static const char *intel_names_ymm[] = {
2422 "ymm0", "ymm1", "ymm2", "ymm3",
2423 "ymm4", "ymm5", "ymm6", "ymm7",
2424 "ymm8", "ymm9", "ymm10", "ymm11",
2425 "ymm12", "ymm13", "ymm14", "ymm15"
2426};
2427static const char *att_names_ymm[] = {
2428 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2429 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2430 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2431 "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2432};
2433
1ceb70f8
L
2434static const struct dis386 reg_table[][8] = {
2435 /* REG_80 */
252b5132 2436 {
ce518a5f
L
2437 { "addA", { Eb, Ib } },
2438 { "orA", { Eb, Ib } },
2439 { "adcA", { Eb, Ib } },
2440 { "sbbA", { Eb, Ib } },
2441 { "andA", { Eb, Ib } },
2442 { "subA", { Eb, Ib } },
2443 { "xorA", { Eb, Ib } },
2444 { "cmpA", { Eb, Ib } },
252b5132 2445 },
1ceb70f8 2446 /* REG_81 */
252b5132 2447 {
ce518a5f
L
2448 { "addQ", { Ev, Iv } },
2449 { "orQ", { Ev, Iv } },
2450 { "adcQ", { Ev, Iv } },
2451 { "sbbQ", { Ev, Iv } },
2452 { "andQ", { Ev, Iv } },
2453 { "subQ", { Ev, Iv } },
2454 { "xorQ", { Ev, Iv } },
2455 { "cmpQ", { Ev, Iv } },
252b5132 2456 },
1ceb70f8 2457 /* REG_82 */
252b5132 2458 {
ce518a5f
L
2459 { "addQ", { Ev, sIb } },
2460 { "orQ", { Ev, sIb } },
2461 { "adcQ", { Ev, sIb } },
2462 { "sbbQ", { Ev, sIb } },
2463 { "andQ", { Ev, sIb } },
2464 { "subQ", { Ev, sIb } },
2465 { "xorQ", { Ev, sIb } },
2466 { "cmpQ", { Ev, sIb } },
252b5132 2467 },
1ceb70f8 2468 /* REG_8F */
4e7d34a6
L
2469 {
2470 { "popU", { stackEv } },
c48244a5 2471 { XOP_8F_TABLE (XOP_09) },
592d1631
L
2472 { Bad_Opcode },
2473 { Bad_Opcode },
2474 { Bad_Opcode },
f88c9eb0 2475 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 2476 },
1ceb70f8 2477 /* REG_C0 */
252b5132 2478 {
ce518a5f
L
2479 { "rolA", { Eb, Ib } },
2480 { "rorA", { Eb, Ib } },
2481 { "rclA", { Eb, Ib } },
2482 { "rcrA", { Eb, Ib } },
2483 { "shlA", { Eb, Ib } },
2484 { "shrA", { Eb, Ib } },
592d1631 2485 { Bad_Opcode },
ce518a5f 2486 { "sarA", { Eb, Ib } },
252b5132 2487 },
1ceb70f8 2488 /* REG_C1 */
252b5132 2489 {
ce518a5f
L
2490 { "rolQ", { Ev, Ib } },
2491 { "rorQ", { Ev, Ib } },
2492 { "rclQ", { Ev, Ib } },
2493 { "rcrQ", { Ev, Ib } },
2494 { "shlQ", { Ev, Ib } },
2495 { "shrQ", { Ev, Ib } },
592d1631 2496 { Bad_Opcode },
ce518a5f 2497 { "sarQ", { Ev, Ib } },
252b5132 2498 },
1ceb70f8 2499 /* REG_C6 */
4e7d34a6
L
2500 {
2501 { "movA", { Eb, Ib } },
4e7d34a6 2502 },
1ceb70f8 2503 /* REG_C7 */
4e7d34a6
L
2504 {
2505 { "movQ", { Ev, Iv } },
4e7d34a6 2506 },
1ceb70f8 2507 /* REG_D0 */
252b5132 2508 {
ce518a5f
L
2509 { "rolA", { Eb, I1 } },
2510 { "rorA", { Eb, I1 } },
2511 { "rclA", { Eb, I1 } },
2512 { "rcrA", { Eb, I1 } },
2513 { "shlA", { Eb, I1 } },
2514 { "shrA", { Eb, I1 } },
592d1631 2515 { Bad_Opcode },
ce518a5f 2516 { "sarA", { Eb, I1 } },
252b5132 2517 },
1ceb70f8 2518 /* REG_D1 */
252b5132 2519 {
ce518a5f
L
2520 { "rolQ", { Ev, I1 } },
2521 { "rorQ", { Ev, I1 } },
2522 { "rclQ", { Ev, I1 } },
2523 { "rcrQ", { Ev, I1 } },
2524 { "shlQ", { Ev, I1 } },
2525 { "shrQ", { Ev, I1 } },
592d1631 2526 { Bad_Opcode },
ce518a5f 2527 { "sarQ", { Ev, I1 } },
252b5132 2528 },
1ceb70f8 2529 /* REG_D2 */
252b5132 2530 {
ce518a5f
L
2531 { "rolA", { Eb, CL } },
2532 { "rorA", { Eb, CL } },
2533 { "rclA", { Eb, CL } },
2534 { "rcrA", { Eb, CL } },
2535 { "shlA", { Eb, CL } },
2536 { "shrA", { Eb, CL } },
592d1631 2537 { Bad_Opcode },
ce518a5f 2538 { "sarA", { Eb, CL } },
252b5132 2539 },
1ceb70f8 2540 /* REG_D3 */
252b5132 2541 {
ce518a5f
L
2542 { "rolQ", { Ev, CL } },
2543 { "rorQ", { Ev, CL } },
2544 { "rclQ", { Ev, CL } },
2545 { "rcrQ", { Ev, CL } },
2546 { "shlQ", { Ev, CL } },
2547 { "shrQ", { Ev, CL } },
592d1631 2548 { Bad_Opcode },
ce518a5f 2549 { "sarQ", { Ev, CL } },
252b5132 2550 },
1ceb70f8 2551 /* REG_F6 */
252b5132 2552 {
ce518a5f 2553 { "testA", { Eb, Ib } },
592d1631 2554 { Bad_Opcode },
ce518a5f
L
2555 { "notA", { Eb } },
2556 { "negA", { Eb } },
2557 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2558 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2559 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2560 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2561 },
1ceb70f8 2562 /* REG_F7 */
252b5132 2563 {
ce518a5f 2564 { "testQ", { Ev, Iv } },
592d1631 2565 { Bad_Opcode },
ce518a5f
L
2566 { "notQ", { Ev } },
2567 { "negQ", { Ev } },
2568 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2569 { "imulQ", { Ev } },
2570 { "divQ", { Ev } },
2571 { "idivQ", { Ev } },
252b5132 2572 },
1ceb70f8 2573 /* REG_FE */
252b5132 2574 {
ce518a5f
L
2575 { "incA", { Eb } },
2576 { "decA", { Eb } },
252b5132 2577 },
1ceb70f8 2578 /* REG_FF */
252b5132 2579 {
ce518a5f
L
2580 { "incQ", { Ev } },
2581 { "decQ", { Ev } },
2582 { "callT", { indirEv } },
2583 { "JcallT", { indirEp } },
2584 { "jmpT", { indirEv } },
2585 { "JjmpT", { indirEp } },
2586 { "pushU", { stackEv } },
592d1631 2587 { Bad_Opcode },
252b5132 2588 },
1ceb70f8 2589 /* REG_0F00 */
252b5132 2590 {
ce518a5f
L
2591 { "sldtD", { Sv } },
2592 { "strD", { Sv } },
2593 { "lldt", { Ew } },
2594 { "ltr", { Ew } },
2595 { "verr", { Ew } },
2596 { "verw", { Ew } },
592d1631
L
2597 { Bad_Opcode },
2598 { Bad_Opcode },
252b5132 2599 },
1ceb70f8 2600 /* REG_0F01 */
252b5132 2601 {
1ceb70f8
L
2602 { MOD_TABLE (MOD_0F01_REG_0) },
2603 { MOD_TABLE (MOD_0F01_REG_1) },
2604 { MOD_TABLE (MOD_0F01_REG_2) },
2605 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 2606 { "smswD", { Sv } },
592d1631 2607 { Bad_Opcode },
ce518a5f 2608 { "lmsw", { Ew } },
1ceb70f8 2609 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2610 },
b5b1fc4f 2611 /* REG_0F0D */
252b5132 2612 {
4e7d34a6
L
2613 { "prefetch", { Eb } },
2614 { "prefetchw", { Eb } },
252b5132 2615 },
1ceb70f8 2616 /* REG_0F18 */
252b5132 2617 {
1ceb70f8
L
2618 { MOD_TABLE (MOD_0F18_REG_0) },
2619 { MOD_TABLE (MOD_0F18_REG_1) },
2620 { MOD_TABLE (MOD_0F18_REG_2) },
2621 { MOD_TABLE (MOD_0F18_REG_3) },
252b5132 2622 },
1ceb70f8 2623 /* REG_0F71 */
a6bd098c 2624 {
592d1631
L
2625 { Bad_Opcode },
2626 { Bad_Opcode },
1ceb70f8 2627 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 2628 { Bad_Opcode },
1ceb70f8 2629 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 2630 { Bad_Opcode },
1ceb70f8 2631 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 2632 },
1ceb70f8 2633 /* REG_0F72 */
a6bd098c 2634 {
592d1631
L
2635 { Bad_Opcode },
2636 { Bad_Opcode },
1ceb70f8 2637 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 2638 { Bad_Opcode },
1ceb70f8 2639 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 2640 { Bad_Opcode },
1ceb70f8 2641 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 2642 },
1ceb70f8 2643 /* REG_0F73 */
252b5132 2644 {
592d1631
L
2645 { Bad_Opcode },
2646 { Bad_Opcode },
1ceb70f8
L
2647 { MOD_TABLE (MOD_0F73_REG_2) },
2648 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
2649 { Bad_Opcode },
2650 { Bad_Opcode },
1ceb70f8
L
2651 { MOD_TABLE (MOD_0F73_REG_6) },
2652 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2653 },
1ceb70f8 2654 /* REG_0FA6 */
252b5132 2655 {
4e7d34a6
L
2656 { "montmul", { { OP_0f07, 0 } } },
2657 { "xsha1", { { OP_0f07, 0 } } },
2658 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 2659 },
1ceb70f8 2660 /* REG_0FA7 */
4e7d34a6
L
2661 {
2662 { "xstore-rng", { { OP_0f07, 0 } } },
2663 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2664 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2665 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2666 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2667 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 2668 },
1ceb70f8 2669 /* REG_0FAE */
4e7d34a6 2670 {
1ceb70f8
L
2671 { MOD_TABLE (MOD_0FAE_REG_0) },
2672 { MOD_TABLE (MOD_0FAE_REG_1) },
2673 { MOD_TABLE (MOD_0FAE_REG_2) },
2674 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2675 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2676 { MOD_TABLE (MOD_0FAE_REG_5) },
2677 { MOD_TABLE (MOD_0FAE_REG_6) },
2678 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2679 },
1ceb70f8 2680 /* REG_0FBA */
252b5132 2681 {
592d1631
L
2682 { Bad_Opcode },
2683 { Bad_Opcode },
2684 { Bad_Opcode },
2685 { Bad_Opcode },
4e7d34a6
L
2686 { "btQ", { Ev, Ib } },
2687 { "btsQ", { Ev, Ib } },
2688 { "btrQ", { Ev, Ib } },
2689 { "btcQ", { Ev, Ib } },
c608c12e 2690 },
1ceb70f8 2691 /* REG_0FC7 */
c608c12e 2692 {
592d1631 2693 { Bad_Opcode },
4e7d34a6 2694 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
2695 { Bad_Opcode },
2696 { Bad_Opcode },
2697 { Bad_Opcode },
2698 { Bad_Opcode },
1ceb70f8
L
2699 { MOD_TABLE (MOD_0FC7_REG_6) },
2700 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2701 },
c0f3af97
L
2702 /* REG_VEX_71 */
2703 {
592d1631
L
2704 { Bad_Opcode },
2705 { Bad_Opcode },
c0f3af97 2706 { MOD_TABLE (MOD_VEX_71_REG_2) },
592d1631 2707 { Bad_Opcode },
c0f3af97 2708 { MOD_TABLE (MOD_VEX_71_REG_4) },
592d1631 2709 { Bad_Opcode },
c0f3af97 2710 { MOD_TABLE (MOD_VEX_71_REG_6) },
c0f3af97
L
2711 },
2712 /* REG_VEX_72 */
2713 {
592d1631
L
2714 { Bad_Opcode },
2715 { Bad_Opcode },
c0f3af97 2716 { MOD_TABLE (MOD_VEX_72_REG_2) },
592d1631 2717 { Bad_Opcode },
c0f3af97 2718 { MOD_TABLE (MOD_VEX_72_REG_4) },
592d1631 2719 { Bad_Opcode },
c0f3af97 2720 { MOD_TABLE (MOD_VEX_72_REG_6) },
c0f3af97
L
2721 },
2722 /* REG_VEX_73 */
2723 {
592d1631
L
2724 { Bad_Opcode },
2725 { Bad_Opcode },
c0f3af97
L
2726 { MOD_TABLE (MOD_VEX_73_REG_2) },
2727 { MOD_TABLE (MOD_VEX_73_REG_3) },
592d1631
L
2728 { Bad_Opcode },
2729 { Bad_Opcode },
c0f3af97
L
2730 { MOD_TABLE (MOD_VEX_73_REG_6) },
2731 { MOD_TABLE (MOD_VEX_73_REG_7) },
2732 },
2733 /* REG_VEX_AE */
2734 {
592d1631
L
2735 { Bad_Opcode },
2736 { Bad_Opcode },
c0f3af97
L
2737 { MOD_TABLE (MOD_VEX_AE_REG_2) },
2738 { MOD_TABLE (MOD_VEX_AE_REG_3) },
c0f3af97 2739 },
f88c9eb0
SP
2740 /* REG_XOP_LWPCB */
2741 {
2742 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2743 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
2744 },
2745 /* REG_XOP_LWP */
2746 {
2747 { "lwpins", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
2748 { "lwpval", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } },
f88c9eb0 2749 },
4e7d34a6
L
2750};
2751
1ceb70f8
L
2752static const struct dis386 prefix_table[][4] = {
2753 /* PREFIX_90 */
252b5132 2754 {
4e7d34a6
L
2755 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2756 { "pause", { XX } },
2757 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 2758 },
4e7d34a6 2759
1ceb70f8 2760 /* PREFIX_0F10 */
cc0ec051 2761 {
4e7d34a6
L
2762 { "movups", { XM, EXx } },
2763 { "movss", { XM, EXd } },
2764 { "movupd", { XM, EXx } },
2765 { "movsd", { XM, EXq } },
30d1c836 2766 },
4e7d34a6 2767
1ceb70f8 2768 /* PREFIX_0F11 */
30d1c836 2769 {
b6169b20 2770 { "movups", { EXxS, XM } },
fa99fab2 2771 { "movss", { EXdS, XM } },
b6169b20 2772 { "movupd", { EXxS, XM } },
fa99fab2 2773 { "movsd", { EXqS, XM } },
4e7d34a6 2774 },
252b5132 2775
1ceb70f8 2776 /* PREFIX_0F12 */
c608c12e 2777 {
1ceb70f8 2778 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2779 { "movsldup", { XM, EXx } },
2780 { "movlpd", { XM, EXq } },
2781 { "movddup", { XM, EXq } },
c608c12e 2782 },
4e7d34a6 2783
1ceb70f8 2784 /* PREFIX_0F16 */
c608c12e 2785 {
1ceb70f8 2786 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2787 { "movshdup", { XM, EXx } },
2788 { "movhpd", { XM, EXq } },
c608c12e 2789 },
4e7d34a6 2790
1ceb70f8 2791 /* PREFIX_0F2A */
c608c12e 2792 {
09335d05 2793 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2794 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2795 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2796 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2797 },
4e7d34a6 2798
1ceb70f8 2799 /* PREFIX_0F2B */
c608c12e 2800 {
75c135a8
L
2801 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2802 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2803 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2804 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2805 },
4e7d34a6 2806
1ceb70f8 2807 /* PREFIX_0F2C */
c608c12e 2808 {
09335d05
L
2809 { "cvttps2pi", { MXC, EXq } },
2810 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2811 { "cvttpd2pi", { MXC, EXx } },
09335d05 2812 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2813 },
4e7d34a6 2814
1ceb70f8 2815 /* PREFIX_0F2D */
c608c12e 2816 {
4e7d34a6
L
2817 { "cvtps2pi", { MXC, EXq } },
2818 { "cvtss2siY", { Gv, EXd } },
2819 { "cvtpd2pi", { MXC, EXx } },
2820 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2821 },
4e7d34a6 2822
1ceb70f8 2823 /* PREFIX_0F2E */
c608c12e 2824 {
4e7d34a6 2825 { "ucomiss",{ XM, EXd } },
592d1631 2826 { Bad_Opcode },
4e7d34a6 2827 { "ucomisd",{ XM, EXq } },
c608c12e 2828 },
4e7d34a6 2829
1ceb70f8 2830 /* PREFIX_0F2F */
c608c12e 2831 {
4e7d34a6 2832 { "comiss", { XM, EXd } },
592d1631 2833 { Bad_Opcode },
4e7d34a6 2834 { "comisd", { XM, EXq } },
c608c12e 2835 },
4e7d34a6 2836
1ceb70f8 2837 /* PREFIX_0F51 */
c608c12e 2838 {
4e7d34a6
L
2839 { "sqrtps", { XM, EXx } },
2840 { "sqrtss", { XM, EXd } },
2841 { "sqrtpd", { XM, EXx } },
2842 { "sqrtsd", { XM, EXq } },
c608c12e 2843 },
4e7d34a6 2844
1ceb70f8 2845 /* PREFIX_0F52 */
c608c12e 2846 {
4e7d34a6
L
2847 { "rsqrtps",{ XM, EXx } },
2848 { "rsqrtss",{ XM, EXd } },
c608c12e 2849 },
4e7d34a6 2850
1ceb70f8 2851 /* PREFIX_0F53 */
c608c12e 2852 {
4e7d34a6
L
2853 { "rcpps", { XM, EXx } },
2854 { "rcpss", { XM, EXd } },
c608c12e 2855 },
4e7d34a6 2856
1ceb70f8 2857 /* PREFIX_0F58 */
c608c12e 2858 {
4e7d34a6
L
2859 { "addps", { XM, EXx } },
2860 { "addss", { XM, EXd } },
2861 { "addpd", { XM, EXx } },
2862 { "addsd", { XM, EXq } },
c608c12e 2863 },
4e7d34a6 2864
1ceb70f8 2865 /* PREFIX_0F59 */
c608c12e 2866 {
4e7d34a6
L
2867 { "mulps", { XM, EXx } },
2868 { "mulss", { XM, EXd } },
2869 { "mulpd", { XM, EXx } },
2870 { "mulsd", { XM, EXq } },
041bd2e0 2871 },
4e7d34a6 2872
1ceb70f8 2873 /* PREFIX_0F5A */
041bd2e0 2874 {
4e7d34a6
L
2875 { "cvtps2pd", { XM, EXq } },
2876 { "cvtss2sd", { XM, EXd } },
2877 { "cvtpd2ps", { XM, EXx } },
2878 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2879 },
4e7d34a6 2880
1ceb70f8 2881 /* PREFIX_0F5B */
041bd2e0 2882 {
09a2c6cf
L
2883 { "cvtdq2ps", { XM, EXx } },
2884 { "cvttps2dq", { XM, EXx } },
2885 { "cvtps2dq", { XM, EXx } },
041bd2e0 2886 },
4e7d34a6 2887
1ceb70f8 2888 /* PREFIX_0F5C */
041bd2e0 2889 {
4e7d34a6
L
2890 { "subps", { XM, EXx } },
2891 { "subss", { XM, EXd } },
2892 { "subpd", { XM, EXx } },
2893 { "subsd", { XM, EXq } },
041bd2e0 2894 },
4e7d34a6 2895
1ceb70f8 2896 /* PREFIX_0F5D */
041bd2e0 2897 {
4e7d34a6
L
2898 { "minps", { XM, EXx } },
2899 { "minss", { XM, EXd } },
2900 { "minpd", { XM, EXx } },
2901 { "minsd", { XM, EXq } },
041bd2e0 2902 },
4e7d34a6 2903
1ceb70f8 2904 /* PREFIX_0F5E */
041bd2e0 2905 {
4e7d34a6
L
2906 { "divps", { XM, EXx } },
2907 { "divss", { XM, EXd } },
2908 { "divpd", { XM, EXx } },
2909 { "divsd", { XM, EXq } },
041bd2e0 2910 },
4e7d34a6 2911
1ceb70f8 2912 /* PREFIX_0F5F */
041bd2e0 2913 {
4e7d34a6
L
2914 { "maxps", { XM, EXx } },
2915 { "maxss", { XM, EXd } },
2916 { "maxpd", { XM, EXx } },
2917 { "maxsd", { XM, EXq } },
041bd2e0 2918 },
4e7d34a6 2919
1ceb70f8 2920 /* PREFIX_0F60 */
041bd2e0 2921 {
4e7d34a6 2922 { "punpcklbw",{ MX, EMd } },
592d1631 2923 { Bad_Opcode },
4e7d34a6 2924 { "punpcklbw",{ MX, EMx } },
041bd2e0 2925 },
4e7d34a6 2926
1ceb70f8 2927 /* PREFIX_0F61 */
041bd2e0 2928 {
4e7d34a6 2929 { "punpcklwd",{ MX, EMd } },
592d1631 2930 { Bad_Opcode },
4e7d34a6 2931 { "punpcklwd",{ MX, EMx } },
041bd2e0 2932 },
4e7d34a6 2933
1ceb70f8 2934 /* PREFIX_0F62 */
041bd2e0 2935 {
4e7d34a6 2936 { "punpckldq",{ MX, EMd } },
592d1631 2937 { Bad_Opcode },
4e7d34a6 2938 { "punpckldq",{ MX, EMx } },
041bd2e0 2939 },
4e7d34a6 2940
1ceb70f8 2941 /* PREFIX_0F6C */
041bd2e0 2942 {
592d1631
L
2943 { Bad_Opcode },
2944 { Bad_Opcode },
4e7d34a6 2945 { "punpcklqdq", { XM, EXx } },
0f17484f 2946 },
4e7d34a6 2947
1ceb70f8 2948 /* PREFIX_0F6D */
0f17484f 2949 {
592d1631
L
2950 { Bad_Opcode },
2951 { Bad_Opcode },
4e7d34a6 2952 { "punpckhqdq", { XM, EXx } },
041bd2e0 2953 },
4e7d34a6 2954
1ceb70f8 2955 /* PREFIX_0F6F */
ca164297 2956 {
4e7d34a6
L
2957 { "movq", { MX, EM } },
2958 { "movdqu", { XM, EXx } },
2959 { "movdqa", { XM, EXx } },
ca164297 2960 },
4e7d34a6 2961
1ceb70f8 2962 /* PREFIX_0F70 */
4e7d34a6
L
2963 {
2964 { "pshufw", { MX, EM, Ib } },
2965 { "pshufhw",{ XM, EXx, Ib } },
2966 { "pshufd", { XM, EXx, Ib } },
2967 { "pshuflw",{ XM, EXx, Ib } },
2968 },
2969
92fddf8e
L
2970 /* PREFIX_0F73_REG_3 */
2971 {
592d1631
L
2972 { Bad_Opcode },
2973 { Bad_Opcode },
92fddf8e 2974 { "psrldq", { XS, Ib } },
92fddf8e
L
2975 },
2976
2977 /* PREFIX_0F73_REG_7 */
2978 {
592d1631
L
2979 { Bad_Opcode },
2980 { Bad_Opcode },
92fddf8e 2981 { "pslldq", { XS, Ib } },
92fddf8e
L
2982 },
2983
1ceb70f8 2984 /* PREFIX_0F78 */
4e7d34a6
L
2985 {
2986 {"vmread", { Em, Gm } },
592d1631 2987 { Bad_Opcode },
4e7d34a6
L
2988 {"extrq", { XS, Ib, Ib } },
2989 {"insertq", { XM, XS, Ib, Ib } },
2990 },
2991
1ceb70f8 2992 /* PREFIX_0F79 */
4e7d34a6
L
2993 {
2994 {"vmwrite", { Gm, Em } },
592d1631 2995 { Bad_Opcode },
4e7d34a6
L
2996 {"extrq", { XM, XS } },
2997 {"insertq", { XM, XS } },
2998 },
2999
1ceb70f8 3000 /* PREFIX_0F7C */
ca164297 3001 {
592d1631
L
3002 { Bad_Opcode },
3003 { Bad_Opcode },
09a2c6cf
L
3004 { "haddpd", { XM, EXx } },
3005 { "haddps", { XM, EXx } },
ca164297 3006 },
4e7d34a6 3007
1ceb70f8 3008 /* PREFIX_0F7D */
ca164297 3009 {
592d1631
L
3010 { Bad_Opcode },
3011 { Bad_Opcode },
09a2c6cf
L
3012 { "hsubpd", { XM, EXx } },
3013 { "hsubps", { XM, EXx } },
ca164297 3014 },
4e7d34a6 3015
1ceb70f8 3016 /* PREFIX_0F7E */
ca164297 3017 {
4e7d34a6
L
3018 { "movK", { Edq, MX } },
3019 { "movq", { XM, EXq } },
3020 { "movK", { Edq, XM } },
ca164297 3021 },
4e7d34a6 3022
1ceb70f8 3023 /* PREFIX_0F7F */
ca164297 3024 {
b6169b20
L
3025 { "movq", { EMS, MX } },
3026 { "movdqu", { EXxS, XM } },
3027 { "movdqa", { EXxS, XM } },
ca164297 3028 },
4e7d34a6 3029
1ceb70f8 3030 /* PREFIX_0FB8 */
ca164297 3031 {
592d1631 3032 { Bad_Opcode },
4e7d34a6 3033 { "popcntS", { Gv, Ev } },
ca164297 3034 },
4e7d34a6 3035
1ceb70f8 3036 /* PREFIX_0FBD */
050dfa73 3037 {
4e7d34a6
L
3038 { "bsrS", { Gv, Ev } },
3039 { "lzcntS", { Gv, Ev } },
3040 { "bsrS", { Gv, Ev } },
050dfa73
MM
3041 },
3042
1ceb70f8 3043 /* PREFIX_0FC2 */
050dfa73 3044 {
ad19981d
L
3045 { "cmpps", { XM, EXx, CMP } },
3046 { "cmpss", { XM, EXd, CMP } },
3047 { "cmppd", { XM, EXx, CMP } },
3048 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3049 },
246c51aa 3050
4ee52178
L
3051 /* PREFIX_0FC3 */
3052 {
3053 { "movntiS", { Ma, Gv } },
4ee52178
L
3054 },
3055
92fddf8e
L
3056 /* PREFIX_0FC7_REG_6 */
3057 {
3058 { "vmptrld",{ Mq } },
3059 { "vmxon", { Mq } },
3060 { "vmclear",{ Mq } },
92fddf8e
L
3061 },
3062
1ceb70f8 3063 /* PREFIX_0FD0 */
050dfa73 3064 {
592d1631
L
3065 { Bad_Opcode },
3066 { Bad_Opcode },
4e7d34a6
L
3067 { "addsubpd", { XM, EXx } },
3068 { "addsubps", { XM, EXx } },
246c51aa 3069 },
050dfa73 3070
1ceb70f8 3071 /* PREFIX_0FD6 */
050dfa73 3072 {
592d1631 3073 { Bad_Opcode },
4e7d34a6 3074 { "movq2dq",{ XM, MS } },
b6169b20 3075 { "movq", { EXqS, XM } },
4e7d34a6 3076 { "movdq2q",{ MX, XS } },
050dfa73
MM
3077 },
3078
1ceb70f8 3079 /* PREFIX_0FE6 */
7918206c 3080 {
592d1631 3081 { Bad_Opcode },
4e7d34a6
L
3082 { "cvtdq2pd", { XM, EXq } },
3083 { "cvttpd2dq", { XM, EXx } },
3084 { "cvtpd2dq", { XM, EXx } },
7918206c 3085 },
8b38ad71 3086
1ceb70f8 3087 /* PREFIX_0FE7 */
8b38ad71 3088 {
4ee52178 3089 { "movntq", { Mq, MX } },
592d1631 3090 { Bad_Opcode },
75c135a8 3091 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3092 },
3093
1ceb70f8 3094 /* PREFIX_0FF0 */
4e7d34a6 3095 {
592d1631
L
3096 { Bad_Opcode },
3097 { Bad_Opcode },
3098 { Bad_Opcode },
1ceb70f8 3099 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3100 },
3101
1ceb70f8 3102 /* PREFIX_0FF7 */
4e7d34a6
L
3103 {
3104 { "maskmovq", { MX, MS } },
592d1631 3105 { Bad_Opcode },
4e7d34a6 3106 { "maskmovdqu", { XM, XS } },
8b38ad71 3107 },
42903f7f 3108
1ceb70f8 3109 /* PREFIX_0F3810 */
42903f7f 3110 {
592d1631
L
3111 { Bad_Opcode },
3112 { Bad_Opcode },
88a94849 3113 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3114 },
3115
1ceb70f8 3116 /* PREFIX_0F3814 */
42903f7f 3117 {
592d1631
L
3118 { Bad_Opcode },
3119 { Bad_Opcode },
88a94849 3120 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3121 },
3122
1ceb70f8 3123 /* PREFIX_0F3815 */
42903f7f 3124 {
592d1631
L
3125 { Bad_Opcode },
3126 { Bad_Opcode },
09a2c6cf 3127 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3128 },
3129
1ceb70f8 3130 /* PREFIX_0F3817 */
42903f7f 3131 {
592d1631
L
3132 { Bad_Opcode },
3133 { Bad_Opcode },
09a2c6cf 3134 { "ptest", { XM, EXx } },
42903f7f
L
3135 },
3136
1ceb70f8 3137 /* PREFIX_0F3820 */
42903f7f 3138 {
592d1631
L
3139 { Bad_Opcode },
3140 { Bad_Opcode },
8976381e 3141 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3142 },
3143
1ceb70f8 3144 /* PREFIX_0F3821 */
42903f7f 3145 {
592d1631
L
3146 { Bad_Opcode },
3147 { Bad_Opcode },
8976381e 3148 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3149 },
3150
1ceb70f8 3151 /* PREFIX_0F3822 */
42903f7f 3152 {
592d1631
L
3153 { Bad_Opcode },
3154 { Bad_Opcode },
8976381e 3155 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3156 },
3157
1ceb70f8 3158 /* PREFIX_0F3823 */
42903f7f 3159 {
592d1631
L
3160 { Bad_Opcode },
3161 { Bad_Opcode },
8976381e 3162 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3163 },
3164
1ceb70f8 3165 /* PREFIX_0F3824 */
42903f7f 3166 {
592d1631
L
3167 { Bad_Opcode },
3168 { Bad_Opcode },
8976381e 3169 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3170 },
3171
1ceb70f8 3172 /* PREFIX_0F3825 */
42903f7f 3173 {
592d1631
L
3174 { Bad_Opcode },
3175 { Bad_Opcode },
8976381e 3176 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3177 },
3178
1ceb70f8 3179 /* PREFIX_0F3828 */
42903f7f 3180 {
592d1631
L
3181 { Bad_Opcode },
3182 { Bad_Opcode },
09a2c6cf 3183 { "pmuldq", { XM, EXx } },
42903f7f
L
3184 },
3185
1ceb70f8 3186 /* PREFIX_0F3829 */
42903f7f 3187 {
592d1631
L
3188 { Bad_Opcode },
3189 { Bad_Opcode },
09a2c6cf 3190 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3191 },
3192
1ceb70f8 3193 /* PREFIX_0F382A */
42903f7f 3194 {
592d1631
L
3195 { Bad_Opcode },
3196 { Bad_Opcode },
75c135a8 3197 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3198 },
3199
1ceb70f8 3200 /* PREFIX_0F382B */
42903f7f 3201 {
592d1631
L
3202 { Bad_Opcode },
3203 { Bad_Opcode },
09a2c6cf 3204 { "packusdw", { XM, EXx } },
42903f7f
L
3205 },
3206
1ceb70f8 3207 /* PREFIX_0F3830 */
42903f7f 3208 {
592d1631
L
3209 { Bad_Opcode },
3210 { Bad_Opcode },
8976381e 3211 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3212 },
3213
1ceb70f8 3214 /* PREFIX_0F3831 */
42903f7f 3215 {
592d1631
L
3216 { Bad_Opcode },
3217 { Bad_Opcode },
8976381e 3218 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3219 },
3220
1ceb70f8 3221 /* PREFIX_0F3832 */
42903f7f 3222 {
592d1631
L
3223 { Bad_Opcode },
3224 { Bad_Opcode },
8976381e 3225 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3226 },
3227
1ceb70f8 3228 /* PREFIX_0F3833 */
42903f7f 3229 {
592d1631
L
3230 { Bad_Opcode },
3231 { Bad_Opcode },
8976381e 3232 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3233 },
3234
1ceb70f8 3235 /* PREFIX_0F3834 */
42903f7f 3236 {
592d1631
L
3237 { Bad_Opcode },
3238 { Bad_Opcode },
8976381e 3239 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3240 },
3241
1ceb70f8 3242 /* PREFIX_0F3835 */
42903f7f 3243 {
592d1631
L
3244 { Bad_Opcode },
3245 { Bad_Opcode },
8976381e 3246 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3247 },
3248
1ceb70f8 3249 /* PREFIX_0F3837 */
4e7d34a6 3250 {
592d1631
L
3251 { Bad_Opcode },
3252 { Bad_Opcode },
4e7d34a6 3253 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3254 },
3255
1ceb70f8 3256 /* PREFIX_0F3838 */
42903f7f 3257 {
592d1631
L
3258 { Bad_Opcode },
3259 { Bad_Opcode },
09a2c6cf 3260 { "pminsb", { XM, EXx } },
42903f7f
L
3261 },
3262
1ceb70f8 3263 /* PREFIX_0F3839 */
42903f7f 3264 {
592d1631
L
3265 { Bad_Opcode },
3266 { Bad_Opcode },
09a2c6cf 3267 { "pminsd", { XM, EXx } },
42903f7f
L
3268 },
3269
1ceb70f8 3270 /* PREFIX_0F383A */
42903f7f 3271 {
592d1631
L
3272 { Bad_Opcode },
3273 { Bad_Opcode },
09a2c6cf 3274 { "pminuw", { XM, EXx } },
42903f7f
L
3275 },
3276
1ceb70f8 3277 /* PREFIX_0F383B */
42903f7f 3278 {
592d1631
L
3279 { Bad_Opcode },
3280 { Bad_Opcode },
09a2c6cf 3281 { "pminud", { XM, EXx } },
42903f7f
L
3282 },
3283
1ceb70f8 3284 /* PREFIX_0F383C */
42903f7f 3285 {
592d1631
L
3286 { Bad_Opcode },
3287 { Bad_Opcode },
09a2c6cf 3288 { "pmaxsb", { XM, EXx } },
42903f7f
L
3289 },
3290
1ceb70f8 3291 /* PREFIX_0F383D */
42903f7f 3292 {
592d1631
L
3293 { Bad_Opcode },
3294 { Bad_Opcode },
09a2c6cf 3295 { "pmaxsd", { XM, EXx } },
42903f7f
L
3296 },
3297
1ceb70f8 3298 /* PREFIX_0F383E */
42903f7f 3299 {
592d1631
L
3300 { Bad_Opcode },
3301 { Bad_Opcode },
09a2c6cf 3302 { "pmaxuw", { XM, EXx } },
42903f7f
L
3303 },
3304
1ceb70f8 3305 /* PREFIX_0F383F */
42903f7f 3306 {
592d1631
L
3307 { Bad_Opcode },
3308 { Bad_Opcode },
09a2c6cf 3309 { "pmaxud", { XM, EXx } },
42903f7f
L
3310 },
3311
1ceb70f8 3312 /* PREFIX_0F3840 */
42903f7f 3313 {
592d1631
L
3314 { Bad_Opcode },
3315 { Bad_Opcode },
09a2c6cf 3316 { "pmulld", { XM, EXx } },
42903f7f
L
3317 },
3318
1ceb70f8 3319 /* PREFIX_0F3841 */
42903f7f 3320 {
592d1631
L
3321 { Bad_Opcode },
3322 { Bad_Opcode },
09a2c6cf 3323 { "phminposuw", { XM, EXx } },
42903f7f
L
3324 },
3325
f1f8f695
L
3326 /* PREFIX_0F3880 */
3327 {
592d1631
L
3328 { Bad_Opcode },
3329 { Bad_Opcode },
f1f8f695 3330 { "invept", { Gm, Mo } },
f1f8f695
L
3331 },
3332
3333 /* PREFIX_0F3881 */
3334 {
592d1631
L
3335 { Bad_Opcode },
3336 { Bad_Opcode },
f1f8f695 3337 { "invvpid", { Gm, Mo } },
f1f8f695
L
3338 },
3339
c0f3af97
L
3340 /* PREFIX_0F38DB */
3341 {
592d1631
L
3342 { Bad_Opcode },
3343 { Bad_Opcode },
c0f3af97 3344 { "aesimc", { XM, EXx } },
c0f3af97
L
3345 },
3346
3347 /* PREFIX_0F38DC */
3348 {
592d1631
L
3349 { Bad_Opcode },
3350 { Bad_Opcode },
c0f3af97 3351 { "aesenc", { XM, EXx } },
c0f3af97
L
3352 },
3353
3354 /* PREFIX_0F38DD */
3355 {
592d1631
L
3356 { Bad_Opcode },
3357 { Bad_Opcode },
c0f3af97 3358 { "aesenclast", { XM, EXx } },
c0f3af97
L
3359 },
3360
3361 /* PREFIX_0F38DE */
3362 {
592d1631
L
3363 { Bad_Opcode },
3364 { Bad_Opcode },
c0f3af97 3365 { "aesdec", { XM, EXx } },
c0f3af97
L
3366 },
3367
3368 /* PREFIX_0F38DF */
3369 {
592d1631
L
3370 { Bad_Opcode },
3371 { Bad_Opcode },
c0f3af97 3372 { "aesdeclast", { XM, EXx } },
c0f3af97
L
3373 },
3374
1ceb70f8 3375 /* PREFIX_0F38F0 */
4e7d34a6 3376 {
f1f8f695 3377 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 3378 { Bad_Opcode },
f1f8f695 3379 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3380 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3381 },
3382
1ceb70f8 3383 /* PREFIX_0F38F1 */
4e7d34a6 3384 {
f1f8f695 3385 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 3386 { Bad_Opcode },
f1f8f695 3387 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3388 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3389 },
3390
1ceb70f8 3391 /* PREFIX_0F3A08 */
42903f7f 3392 {
592d1631
L
3393 { Bad_Opcode },
3394 { Bad_Opcode },
09a2c6cf 3395 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3396 },
3397
1ceb70f8 3398 /* PREFIX_0F3A09 */
42903f7f 3399 {
592d1631
L
3400 { Bad_Opcode },
3401 { Bad_Opcode },
09a2c6cf 3402 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3403 },
3404
1ceb70f8 3405 /* PREFIX_0F3A0A */
42903f7f 3406 {
592d1631
L
3407 { Bad_Opcode },
3408 { Bad_Opcode },
09335d05 3409 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3410 },
3411
1ceb70f8 3412 /* PREFIX_0F3A0B */
42903f7f 3413 {
592d1631
L
3414 { Bad_Opcode },
3415 { Bad_Opcode },
09335d05 3416 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3417 },
3418
1ceb70f8 3419 /* PREFIX_0F3A0C */
42903f7f 3420 {
592d1631
L
3421 { Bad_Opcode },
3422 { Bad_Opcode },
09a2c6cf 3423 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3424 },
3425
1ceb70f8 3426 /* PREFIX_0F3A0D */
42903f7f 3427 {
592d1631
L
3428 { Bad_Opcode },
3429 { Bad_Opcode },
09a2c6cf 3430 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3431 },
3432
1ceb70f8 3433 /* PREFIX_0F3A0E */
42903f7f 3434 {
592d1631
L
3435 { Bad_Opcode },
3436 { Bad_Opcode },
09a2c6cf 3437 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3438 },
3439
1ceb70f8 3440 /* PREFIX_0F3A14 */
42903f7f 3441 {
592d1631
L
3442 { Bad_Opcode },
3443 { Bad_Opcode },
42903f7f 3444 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
3445 },
3446
1ceb70f8 3447 /* PREFIX_0F3A15 */
42903f7f 3448 {
592d1631
L
3449 { Bad_Opcode },
3450 { Bad_Opcode },
42903f7f 3451 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
3452 },
3453
1ceb70f8 3454 /* PREFIX_0F3A16 */
42903f7f 3455 {
592d1631
L
3456 { Bad_Opcode },
3457 { Bad_Opcode },
42903f7f 3458 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
3459 },
3460
1ceb70f8 3461 /* PREFIX_0F3A17 */
42903f7f 3462 {
592d1631
L
3463 { Bad_Opcode },
3464 { Bad_Opcode },
42903f7f 3465 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
3466 },
3467
1ceb70f8 3468 /* PREFIX_0F3A20 */
42903f7f 3469 {
592d1631
L
3470 { Bad_Opcode },
3471 { Bad_Opcode },
42903f7f 3472 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
3473 },
3474
1ceb70f8 3475 /* PREFIX_0F3A21 */
42903f7f 3476 {
592d1631
L
3477 { Bad_Opcode },
3478 { Bad_Opcode },
8976381e 3479 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3480 },
3481
1ceb70f8 3482 /* PREFIX_0F3A22 */
42903f7f 3483 {
592d1631
L
3484 { Bad_Opcode },
3485 { Bad_Opcode },
42903f7f 3486 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
3487 },
3488
1ceb70f8 3489 /* PREFIX_0F3A40 */
42903f7f 3490 {
592d1631
L
3491 { Bad_Opcode },
3492 { Bad_Opcode },
09a2c6cf 3493 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3494 },
3495
1ceb70f8 3496 /* PREFIX_0F3A41 */
42903f7f 3497 {
592d1631
L
3498 { Bad_Opcode },
3499 { Bad_Opcode },
09a2c6cf 3500 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3501 },
3502
1ceb70f8 3503 /* PREFIX_0F3A42 */
42903f7f 3504 {
592d1631
L
3505 { Bad_Opcode },
3506 { Bad_Opcode },
09a2c6cf 3507 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 3508 },
381d071f 3509
c0f3af97
L
3510 /* PREFIX_0F3A44 */
3511 {
592d1631
L
3512 { Bad_Opcode },
3513 { Bad_Opcode },
c0f3af97 3514 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
3515 },
3516
1ceb70f8 3517 /* PREFIX_0F3A60 */
381d071f 3518 {
592d1631
L
3519 { Bad_Opcode },
3520 { Bad_Opcode },
4e7d34a6 3521 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3522 },
3523
1ceb70f8 3524 /* PREFIX_0F3A61 */
381d071f 3525 {
592d1631
L
3526 { Bad_Opcode },
3527 { Bad_Opcode },
4e7d34a6 3528 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
3529 },
3530
1ceb70f8 3531 /* PREFIX_0F3A62 */
381d071f 3532 {
592d1631
L
3533 { Bad_Opcode },
3534 { Bad_Opcode },
4e7d34a6 3535 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
3536 },
3537
1ceb70f8 3538 /* PREFIX_0F3A63 */
381d071f 3539 {
592d1631
L
3540 { Bad_Opcode },
3541 { Bad_Opcode },
4e7d34a6 3542 { "pcmpistri", { XM, EXx, Ib } },
381d071f 3543 },
09a2c6cf 3544
c0f3af97 3545 /* PREFIX_0F3ADF */
09a2c6cf 3546 {
592d1631
L
3547 { Bad_Opcode },
3548 { Bad_Opcode },
c0f3af97 3549 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
3550 },
3551
c0f3af97 3552 /* PREFIX_VEX_10 */
09a2c6cf 3553 {
9e30b8e0 3554 { VEX_W_TABLE (VEX_W_10_P_0) },
c0f3af97 3555 { VEX_LEN_TABLE (VEX_LEN_10_P_1) },
9e30b8e0 3556 { VEX_W_TABLE (VEX_W_10_P_2) },
c0f3af97 3557 { VEX_LEN_TABLE (VEX_LEN_10_P_3) },
09a2c6cf
L
3558 },
3559
c0f3af97 3560 /* PREFIX_VEX_11 */
09a2c6cf 3561 {
9e30b8e0 3562 { VEX_W_TABLE (VEX_W_11_P_0) },
c0f3af97 3563 { VEX_LEN_TABLE (VEX_LEN_11_P_1) },
9e30b8e0 3564 { VEX_W_TABLE (VEX_W_11_P_2) },
c0f3af97 3565 { VEX_LEN_TABLE (VEX_LEN_11_P_3) },
09a2c6cf
L
3566 },
3567
c0f3af97 3568 /* PREFIX_VEX_12 */
09a2c6cf 3569 {
c0f3af97 3570 { MOD_TABLE (MOD_VEX_12_PREFIX_0) },
9e30b8e0 3571 { VEX_W_TABLE (VEX_W_12_P_1) },
c0f3af97 3572 { VEX_LEN_TABLE (VEX_LEN_12_P_2) },
9e30b8e0 3573 { VEX_W_TABLE (VEX_W_12_P_3) },
09a2c6cf
L
3574 },
3575
c0f3af97 3576 /* PREFIX_VEX_16 */
09a2c6cf 3577 {
c0f3af97 3578 { MOD_TABLE (MOD_VEX_16_PREFIX_0) },
9e30b8e0 3579 { VEX_W_TABLE (VEX_W_16_P_1) },
c0f3af97 3580 { VEX_LEN_TABLE (VEX_LEN_16_P_2) },
5f754f58 3581 },
7c52e0e8 3582
c0f3af97 3583 /* PREFIX_VEX_2A */
5f754f58 3584 {
592d1631 3585 { Bad_Opcode },
c0f3af97 3586 { VEX_LEN_TABLE (VEX_LEN_2A_P_1) },
592d1631 3587 { Bad_Opcode },
c0f3af97 3588 { VEX_LEN_TABLE (VEX_LEN_2A_P_3) },
5f754f58 3589 },
7c52e0e8 3590
c0f3af97 3591 /* PREFIX_VEX_2C */
5f754f58 3592 {
592d1631 3593 { Bad_Opcode },
c0f3af97 3594 { VEX_LEN_TABLE (VEX_LEN_2C_P_1) },
592d1631 3595 { Bad_Opcode },
c0f3af97 3596 { VEX_LEN_TABLE (VEX_LEN_2C_P_3) },
5f754f58 3597 },
7c52e0e8 3598
c0f3af97 3599 /* PREFIX_VEX_2D */
7c52e0e8 3600 {
592d1631 3601 { Bad_Opcode },
c0f3af97 3602 { VEX_LEN_TABLE (VEX_LEN_2D_P_1) },
592d1631 3603 { Bad_Opcode },
c0f3af97 3604 { VEX_LEN_TABLE (VEX_LEN_2D_P_3) },
7c52e0e8
L
3605 },
3606
c0f3af97 3607 /* PREFIX_VEX_2E */
7c52e0e8 3608 {
c0f3af97 3609 { VEX_LEN_TABLE (VEX_LEN_2E_P_0) },
592d1631 3610 { Bad_Opcode },
c0f3af97 3611 { VEX_LEN_TABLE (VEX_LEN_2E_P_2) },
7c52e0e8
L
3612 },
3613
c0f3af97 3614 /* PREFIX_VEX_2F */
7c52e0e8 3615 {
c0f3af97 3616 { VEX_LEN_TABLE (VEX_LEN_2F_P_0) },
592d1631 3617 { Bad_Opcode },
c0f3af97 3618 { VEX_LEN_TABLE (VEX_LEN_2F_P_2) },
7c52e0e8
L
3619 },
3620
c0f3af97 3621 /* PREFIX_VEX_51 */
7c52e0e8 3622 {
9e30b8e0 3623 { VEX_W_TABLE (VEX_W_51_P_0) },
c0f3af97 3624 { VEX_LEN_TABLE (VEX_LEN_51_P_1) },
9e30b8e0 3625 { VEX_W_TABLE (VEX_W_51_P_2) },
c0f3af97 3626 { VEX_LEN_TABLE (VEX_LEN_51_P_3) },
7c52e0e8
L
3627 },
3628
c0f3af97 3629 /* PREFIX_VEX_52 */
7c52e0e8 3630 {
9e30b8e0 3631 { VEX_W_TABLE (VEX_W_52_P_0) },
c0f3af97 3632 { VEX_LEN_TABLE (VEX_LEN_52_P_1) },
7c52e0e8
L
3633 },
3634
c0f3af97 3635 /* PREFIX_VEX_53 */
7c52e0e8 3636 {
9e30b8e0 3637 { VEX_W_TABLE (VEX_W_53_P_0) },
c0f3af97 3638 { VEX_LEN_TABLE (VEX_LEN_53_P_1) },
7c52e0e8
L
3639 },
3640
c0f3af97 3641 /* PREFIX_VEX_58 */
7c52e0e8 3642 {
9e30b8e0 3643 { VEX_W_TABLE (VEX_W_58_P_0) },
c0f3af97 3644 { VEX_LEN_TABLE (VEX_LEN_58_P_1) },
9e30b8e0 3645 { VEX_W_TABLE (VEX_W_58_P_2) },
c0f3af97 3646 { VEX_LEN_TABLE (VEX_LEN_58_P_3) },
7c52e0e8
L
3647 },
3648
c0f3af97 3649 /* PREFIX_VEX_59 */
7c52e0e8 3650 {
9e30b8e0 3651 { VEX_W_TABLE (VEX_W_59_P_0) },
c0f3af97 3652 { VEX_LEN_TABLE (VEX_LEN_59_P_1) },
9e30b8e0 3653 { VEX_W_TABLE (VEX_W_59_P_2) },
c0f3af97 3654 { VEX_LEN_TABLE (VEX_LEN_59_P_3) },
7c52e0e8
L
3655 },
3656
c0f3af97 3657 /* PREFIX_VEX_5A */
7c52e0e8 3658 {
9e30b8e0 3659 { VEX_W_TABLE (VEX_W_5A_P_0) },
c0f3af97
L
3660 { VEX_LEN_TABLE (VEX_LEN_5A_P_1) },
3661 { "vcvtpd2ps%XY", { XMM, EXx } },
3662 { VEX_LEN_TABLE (VEX_LEN_5A_P_3) },
7c52e0e8
L
3663 },
3664
c0f3af97 3665 /* PREFIX_VEX_5B */
7c52e0e8 3666 {
9e30b8e0
L
3667 { VEX_W_TABLE (VEX_W_5B_P_0) },
3668 { VEX_W_TABLE (VEX_W_5B_P_1) },
3669 { VEX_W_TABLE (VEX_W_5B_P_2) },
7c52e0e8
L
3670 },
3671
c0f3af97 3672 /* PREFIX_VEX_5C */
7c52e0e8 3673 {
9e30b8e0 3674 { VEX_W_TABLE (VEX_W_5C_P_0) },
c0f3af97 3675 { VEX_LEN_TABLE (VEX_LEN_5C_P_1) },
9e30b8e0 3676 { VEX_W_TABLE (VEX_W_5C_P_2) },
c0f3af97 3677 { VEX_LEN_TABLE (VEX_LEN_5C_P_3) },
7c52e0e8
L
3678 },
3679
c0f3af97 3680 /* PREFIX_VEX_5D */
7c52e0e8 3681 {
9e30b8e0 3682 { VEX_W_TABLE (VEX_W_5D_P_0) },
c0f3af97 3683 { VEX_LEN_TABLE (VEX_LEN_5D_P_1) },
9e30b8e0 3684 { VEX_W_TABLE (VEX_W_5D_P_2) },
c0f3af97 3685 { VEX_LEN_TABLE (VEX_LEN_5D_P_3) },
7c52e0e8
L
3686 },
3687
c0f3af97 3688 /* PREFIX_VEX_5E */
7c52e0e8 3689 {
9e30b8e0 3690 { VEX_W_TABLE (VEX_W_5E_P_0) },
c0f3af97 3691 { VEX_LEN_TABLE (VEX_LEN_5E_P_1) },
9e30b8e0 3692 { VEX_W_TABLE (VEX_W_5E_P_2) },
c0f3af97 3693 { VEX_LEN_TABLE (VEX_LEN_5E_P_3) },
7c52e0e8
L
3694 },
3695
c0f3af97 3696 /* PREFIX_VEX_5F */
7c52e0e8 3697 {
9e30b8e0 3698 { VEX_W_TABLE (VEX_W_5F_P_0) },
c0f3af97 3699 { VEX_LEN_TABLE (VEX_LEN_5F_P_1) },
9e30b8e0 3700 { VEX_W_TABLE (VEX_W_5F_P_2) },
c0f3af97 3701 { VEX_LEN_TABLE (VEX_LEN_5F_P_3) },
7c52e0e8
L
3702 },
3703
c0f3af97 3704 /* PREFIX_VEX_60 */
7c52e0e8 3705 {
592d1631
L
3706 { Bad_Opcode },
3707 { Bad_Opcode },
c0f3af97 3708 { VEX_LEN_TABLE (VEX_LEN_60_P_2) },
7c52e0e8
L
3709 },
3710
c0f3af97 3711 /* PREFIX_VEX_61 */
7c52e0e8 3712 {
592d1631
L
3713 { Bad_Opcode },
3714 { Bad_Opcode },
c0f3af97 3715 { VEX_LEN_TABLE (VEX_LEN_61_P_2) },
7c52e0e8
L
3716 },
3717
c0f3af97 3718 /* PREFIX_VEX_62 */
7c52e0e8 3719 {
592d1631
L
3720 { Bad_Opcode },
3721 { Bad_Opcode },
c0f3af97 3722 { VEX_LEN_TABLE (VEX_LEN_62_P_2) },
7c52e0e8
L
3723 },
3724
c0f3af97 3725 /* PREFIX_VEX_63 */
7c52e0e8 3726 {
592d1631
L
3727 { Bad_Opcode },
3728 { Bad_Opcode },
c0f3af97 3729 { VEX_LEN_TABLE (VEX_LEN_63_P_2) },
7c52e0e8
L
3730 },
3731
c0f3af97 3732 /* PREFIX_VEX_64 */
7c52e0e8 3733 {
592d1631
L
3734 { Bad_Opcode },
3735 { Bad_Opcode },
c0f3af97 3736 { VEX_LEN_TABLE (VEX_LEN_64_P_2) },
7c52e0e8
L
3737 },
3738
c0f3af97 3739 /* PREFIX_VEX_65 */
7c52e0e8 3740 {
592d1631
L
3741 { Bad_Opcode },
3742 { Bad_Opcode },
c0f3af97 3743 { VEX_LEN_TABLE (VEX_LEN_65_P_2) },
7c52e0e8
L
3744 },
3745
c0f3af97 3746 /* PREFIX_VEX_66 */
7c52e0e8 3747 {
592d1631
L
3748 { Bad_Opcode },
3749 { Bad_Opcode },
c0f3af97 3750 { VEX_LEN_TABLE (VEX_LEN_66_P_2) },
7c52e0e8 3751 },
6439fc28 3752
c0f3af97 3753 /* PREFIX_VEX_67 */
331d2d0d 3754 {
592d1631
L
3755 { Bad_Opcode },
3756 { Bad_Opcode },
c0f3af97 3757 { VEX_LEN_TABLE (VEX_LEN_67_P_2) },
c0f3af97
L
3758 },
3759
3760 /* PREFIX_VEX_68 */
3761 {
592d1631
L
3762 { Bad_Opcode },
3763 { Bad_Opcode },
c0f3af97 3764 { VEX_LEN_TABLE (VEX_LEN_68_P_2) },
c0f3af97
L
3765 },
3766
3767 /* PREFIX_VEX_69 */
3768 {
592d1631
L
3769 { Bad_Opcode },
3770 { Bad_Opcode },
c0f3af97 3771 { VEX_LEN_TABLE (VEX_LEN_69_P_2) },
c0f3af97
L
3772 },
3773
3774 /* PREFIX_VEX_6A */
3775 {
592d1631
L
3776 { Bad_Opcode },
3777 { Bad_Opcode },
c0f3af97 3778 { VEX_LEN_TABLE (VEX_LEN_6A_P_2) },
c0f3af97
L
3779 },
3780
3781 /* PREFIX_VEX_6B */
3782 {
592d1631
L
3783 { Bad_Opcode },
3784 { Bad_Opcode },
c0f3af97 3785 { VEX_LEN_TABLE (VEX_LEN_6B_P_2) },
c0f3af97
L
3786 },
3787
3788 /* PREFIX_VEX_6C */
3789 {
592d1631
L
3790 { Bad_Opcode },
3791 { Bad_Opcode },
c0f3af97 3792 { VEX_LEN_TABLE (VEX_LEN_6C_P_2) },
c0f3af97
L
3793 },
3794
3795 /* PREFIX_VEX_6D */
3796 {
592d1631
L
3797 { Bad_Opcode },
3798 { Bad_Opcode },
c0f3af97 3799 { VEX_LEN_TABLE (VEX_LEN_6D_P_2) },
c0f3af97
L
3800 },
3801
3802 /* PREFIX_VEX_6E */
3803 {
592d1631
L
3804 { Bad_Opcode },
3805 { Bad_Opcode },
c0f3af97 3806 { VEX_LEN_TABLE (VEX_LEN_6E_P_2) },
c0f3af97
L
3807 },
3808
3809 /* PREFIX_VEX_6F */
3810 {
592d1631 3811 { Bad_Opcode },
9e30b8e0
L
3812 { VEX_W_TABLE (VEX_W_6F_P_1) },
3813 { VEX_W_TABLE (VEX_W_6F_P_2) },
c0f3af97
L
3814 },
3815
3816 /* PREFIX_VEX_70 */
3817 {
592d1631 3818 { Bad_Opcode },
c0f3af97
L
3819 { VEX_LEN_TABLE (VEX_LEN_70_P_1) },
3820 { VEX_LEN_TABLE (VEX_LEN_70_P_2) },
3821 { VEX_LEN_TABLE (VEX_LEN_70_P_3) },
3822 },
3823
3824 /* PREFIX_VEX_71_REG_2 */
3825 {
592d1631
L
3826 { Bad_Opcode },
3827 { Bad_Opcode },
c0f3af97 3828 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) },
c0f3af97
L
3829 },
3830
3831 /* PREFIX_VEX_71_REG_4 */
3832 {
592d1631
L
3833 { Bad_Opcode },
3834 { Bad_Opcode },
c0f3af97 3835 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) },
c0f3af97
L
3836 },
3837
3838 /* PREFIX_VEX_71_REG_6 */
3839 {
592d1631
L
3840 { Bad_Opcode },
3841 { Bad_Opcode },
c0f3af97 3842 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) },
c0f3af97
L
3843 },
3844
3845 /* PREFIX_VEX_72_REG_2 */
3846 {
592d1631
L
3847 { Bad_Opcode },
3848 { Bad_Opcode },
c0f3af97 3849 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) },
c0f3af97
L
3850 },
3851
3852 /* PREFIX_VEX_72_REG_4 */
3853 {
592d1631
L
3854 { Bad_Opcode },
3855 { Bad_Opcode },
c0f3af97 3856 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) },
c0f3af97
L
3857 },
3858
3859 /* PREFIX_VEX_72_REG_6 */
3860 {
592d1631
L
3861 { Bad_Opcode },
3862 { Bad_Opcode },
c0f3af97 3863 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) },
c0f3af97
L
3864 },
3865
3866 /* PREFIX_VEX_73_REG_2 */
3867 {
592d1631
L
3868 { Bad_Opcode },
3869 { Bad_Opcode },
c0f3af97 3870 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) },
c0f3af97
L
3871 },
3872
3873 /* PREFIX_VEX_73_REG_3 */
3874 {
592d1631
L
3875 { Bad_Opcode },
3876 { Bad_Opcode },
c0f3af97 3877 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) },
c0f3af97
L
3878 },
3879
3880 /* PREFIX_VEX_73_REG_6 */
3881 {
592d1631
L
3882 { Bad_Opcode },
3883 { Bad_Opcode },
c0f3af97 3884 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) },
c0f3af97
L
3885 },
3886
3887 /* PREFIX_VEX_73_REG_7 */
3888 {
592d1631
L
3889 { Bad_Opcode },
3890 { Bad_Opcode },
c0f3af97 3891 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) },
c0f3af97
L
3892 },
3893
3894 /* PREFIX_VEX_74 */
3895 {
592d1631
L
3896 { Bad_Opcode },
3897 { Bad_Opcode },
c0f3af97 3898 { VEX_LEN_TABLE (VEX_LEN_74_P_2) },
c0f3af97
L
3899 },
3900
3901 /* PREFIX_VEX_75 */
3902 {
592d1631
L
3903 { Bad_Opcode },
3904 { Bad_Opcode },
c0f3af97 3905 { VEX_LEN_TABLE (VEX_LEN_75_P_2) },
c0f3af97
L
3906 },
3907
3908 /* PREFIX_VEX_76 */
3909 {
592d1631
L
3910 { Bad_Opcode },
3911 { Bad_Opcode },
c0f3af97 3912 { VEX_LEN_TABLE (VEX_LEN_76_P_2) },
c0f3af97
L
3913 },
3914
3915 /* PREFIX_VEX_77 */
3916 {
9e30b8e0 3917 { VEX_W_TABLE (VEX_W_77_P_0) },
c0f3af97
L
3918 },
3919
3920 /* PREFIX_VEX_7C */
3921 {
592d1631
L
3922 { Bad_Opcode },
3923 { Bad_Opcode },
9e30b8e0
L
3924 { VEX_W_TABLE (VEX_W_7C_P_2) },
3925 { VEX_W_TABLE (VEX_W_7C_P_3) },
c0f3af97
L
3926 },
3927
3928 /* PREFIX_VEX_7D */
3929 {
592d1631
L
3930 { Bad_Opcode },
3931 { Bad_Opcode },
9e30b8e0
L
3932 { VEX_W_TABLE (VEX_W_7D_P_2) },
3933 { VEX_W_TABLE (VEX_W_7D_P_3) },
c0f3af97
L
3934 },
3935
3936 /* PREFIX_VEX_7E */
3937 {
592d1631 3938 { Bad_Opcode },
c0f3af97
L
3939 { VEX_LEN_TABLE (VEX_LEN_7E_P_1) },
3940 { VEX_LEN_TABLE (VEX_LEN_7E_P_2) },
c0f3af97
L
3941 },
3942
3943 /* PREFIX_VEX_7F */
3944 {
592d1631 3945 { Bad_Opcode },
9e30b8e0
L
3946 { VEX_W_TABLE (VEX_W_7F_P_1) },
3947 { VEX_W_TABLE (VEX_W_7F_P_2) },
c0f3af97
L
3948 },
3949
3950 /* PREFIX_VEX_C2 */
3951 {
9e30b8e0 3952 { VEX_W_TABLE (VEX_W_C2_P_0) },
c0f3af97 3953 { VEX_LEN_TABLE (VEX_LEN_C2_P_1) },
9e30b8e0 3954 { VEX_W_TABLE (VEX_W_C2_P_2) },
c0f3af97
L
3955 { VEX_LEN_TABLE (VEX_LEN_C2_P_3) },
3956 },
3957
3958 /* PREFIX_VEX_C4 */
3959 {
592d1631
L
3960 { Bad_Opcode },
3961 { Bad_Opcode },
c0f3af97 3962 { VEX_LEN_TABLE (VEX_LEN_C4_P_2) },
c0f3af97
L
3963 },
3964
3965 /* PREFIX_VEX_C5 */
3966 {
592d1631
L
3967 { Bad_Opcode },
3968 { Bad_Opcode },
c0f3af97 3969 { VEX_LEN_TABLE (VEX_LEN_C5_P_2) },
c0f3af97
L
3970 },
3971
3972 /* PREFIX_VEX_D0 */
3973 {
592d1631
L
3974 { Bad_Opcode },
3975 { Bad_Opcode },
9e30b8e0
L
3976 { VEX_W_TABLE (VEX_W_D0_P_2) },
3977 { VEX_W_TABLE (VEX_W_D0_P_3) },
c0f3af97
L
3978 },
3979
3980 /* PREFIX_VEX_D1 */
3981 {
592d1631
L
3982 { Bad_Opcode },
3983 { Bad_Opcode },
c0f3af97 3984 { VEX_LEN_TABLE (VEX_LEN_D1_P_2) },
c0f3af97
L
3985 },
3986
3987 /* PREFIX_VEX_D2 */
3988 {
592d1631
L
3989 { Bad_Opcode },
3990 { Bad_Opcode },
c0f3af97 3991 { VEX_LEN_TABLE (VEX_LEN_D2_P_2) },
c0f3af97
L
3992 },
3993
3994 /* PREFIX_VEX_D3 */
3995 {
592d1631
L
3996 { Bad_Opcode },
3997 { Bad_Opcode },
c0f3af97 3998 { VEX_LEN_TABLE (VEX_LEN_D3_P_2) },
c0f3af97
L
3999 },
4000
4001 /* PREFIX_VEX_D4 */
4002 {
592d1631
L
4003 { Bad_Opcode },
4004 { Bad_Opcode },
c0f3af97 4005 { VEX_LEN_TABLE (VEX_LEN_D4_P_2) },
c0f3af97
L
4006 },
4007
4008 /* PREFIX_VEX_D5 */
4009 {
592d1631
L
4010 { Bad_Opcode },
4011 { Bad_Opcode },
c0f3af97 4012 { VEX_LEN_TABLE (VEX_LEN_D5_P_2) },
c0f3af97
L
4013 },
4014
4015 /* PREFIX_VEX_D6 */
4016 {
592d1631
L
4017 { Bad_Opcode },
4018 { Bad_Opcode },
c0f3af97 4019 { VEX_LEN_TABLE (VEX_LEN_D6_P_2) },
c0f3af97
L
4020 },
4021
4022 /* PREFIX_VEX_D7 */
4023 {
592d1631
L
4024 { Bad_Opcode },
4025 { Bad_Opcode },
c0f3af97 4026 { MOD_TABLE (MOD_VEX_D7_PREFIX_2) },
c0f3af97
L
4027 },
4028
4029 /* PREFIX_VEX_D8 */
4030 {
592d1631
L
4031 { Bad_Opcode },
4032 { Bad_Opcode },
c0f3af97 4033 { VEX_LEN_TABLE (VEX_LEN_D8_P_2) },
c0f3af97
L
4034 },
4035
4036 /* PREFIX_VEX_D9 */
4037 {
592d1631
L
4038 { Bad_Opcode },
4039 { Bad_Opcode },
c0f3af97 4040 { VEX_LEN_TABLE (VEX_LEN_D9_P_2) },
c0f3af97
L
4041 },
4042
4043 /* PREFIX_VEX_DA */
4044 {
592d1631
L
4045 { Bad_Opcode },
4046 { Bad_Opcode },
c0f3af97 4047 { VEX_LEN_TABLE (VEX_LEN_DA_P_2) },
c0f3af97
L
4048 },
4049
4050 /* PREFIX_VEX_DB */
4051 {
592d1631
L
4052 { Bad_Opcode },
4053 { Bad_Opcode },
c0f3af97 4054 { VEX_LEN_TABLE (VEX_LEN_DB_P_2) },
c0f3af97
L
4055 },
4056
4057 /* PREFIX_VEX_DC */
4058 {
592d1631
L
4059 { Bad_Opcode },
4060 { Bad_Opcode },
c0f3af97 4061 { VEX_LEN_TABLE (VEX_LEN_DC_P_2) },
c0f3af97
L
4062 },
4063
4064 /* PREFIX_VEX_DD */
4065 {
592d1631
L
4066 { Bad_Opcode },
4067 { Bad_Opcode },
c0f3af97 4068 { VEX_LEN_TABLE (VEX_LEN_DD_P_2) },
c0f3af97
L
4069 },
4070
4071 /* PREFIX_VEX_DE */
4072 {
592d1631
L
4073 { Bad_Opcode },
4074 { Bad_Opcode },
c0f3af97 4075 { VEX_LEN_TABLE (VEX_LEN_DE_P_2) },
c0f3af97
L
4076 },
4077
4078 /* PREFIX_VEX_DF */
4079 {
592d1631
L
4080 { Bad_Opcode },
4081 { Bad_Opcode },
c0f3af97 4082 { VEX_LEN_TABLE (VEX_LEN_DF_P_2) },
c0f3af97
L
4083 },
4084
4085 /* PREFIX_VEX_E0 */
4086 {
592d1631
L
4087 { Bad_Opcode },
4088 { Bad_Opcode },
c0f3af97 4089 { VEX_LEN_TABLE (VEX_LEN_E0_P_2) },
c0f3af97
L
4090 },
4091
4092 /* PREFIX_VEX_E1 */
4093 {
592d1631
L
4094 { Bad_Opcode },
4095 { Bad_Opcode },
c0f3af97 4096 { VEX_LEN_TABLE (VEX_LEN_E1_P_2) },
c0f3af97
L
4097 },
4098
4099 /* PREFIX_VEX_E2 */
4100 {
592d1631
L
4101 { Bad_Opcode },
4102 { Bad_Opcode },
c0f3af97 4103 { VEX_LEN_TABLE (VEX_LEN_E2_P_2) },
c0f3af97
L
4104 },
4105
4106 /* PREFIX_VEX_E3 */
4107 {
592d1631
L
4108 { Bad_Opcode },
4109 { Bad_Opcode },
c0f3af97 4110 { VEX_LEN_TABLE (VEX_LEN_E3_P_2) },
c0f3af97
L
4111 },
4112
4113 /* PREFIX_VEX_E4 */
4114 {
592d1631
L
4115 { Bad_Opcode },
4116 { Bad_Opcode },
c0f3af97 4117 { VEX_LEN_TABLE (VEX_LEN_E4_P_2) },
c0f3af97
L
4118 },
4119
4120 /* PREFIX_VEX_E5 */
4121 {
592d1631
L
4122 { Bad_Opcode },
4123 { Bad_Opcode },
c0f3af97 4124 { VEX_LEN_TABLE (VEX_LEN_E5_P_2) },
c0f3af97
L
4125 },
4126
4127 /* PREFIX_VEX_E6 */
4128 {
592d1631 4129 { Bad_Opcode },
9e30b8e0
L
4130 { VEX_W_TABLE (VEX_W_E6_P_1) },
4131 { VEX_W_TABLE (VEX_W_E6_P_2) },
4132 { VEX_W_TABLE (VEX_W_E6_P_3) },
c0f3af97
L
4133 },
4134
4135 /* PREFIX_VEX_E7 */
4136 {
592d1631
L
4137 { Bad_Opcode },
4138 { Bad_Opcode },
c0f3af97 4139 { MOD_TABLE (MOD_VEX_E7_PREFIX_2) },
c0f3af97
L
4140 },
4141
4142 /* PREFIX_VEX_E8 */
4143 {
592d1631
L
4144 { Bad_Opcode },
4145 { Bad_Opcode },
c0f3af97 4146 { VEX_LEN_TABLE (VEX_LEN_E8_P_2) },
c0f3af97
L
4147 },
4148
4149 /* PREFIX_VEX_E9 */
4150 {
592d1631
L
4151 { Bad_Opcode },
4152 { Bad_Opcode },
c0f3af97 4153 { VEX_LEN_TABLE (VEX_LEN_E9_P_2) },
c0f3af97
L
4154 },
4155
4156 /* PREFIX_VEX_EA */
4157 {
592d1631
L
4158 { Bad_Opcode },
4159 { Bad_Opcode },
c0f3af97 4160 { VEX_LEN_TABLE (VEX_LEN_EA_P_2) },
c0f3af97
L
4161 },
4162
4163 /* PREFIX_VEX_EB */
4164 {
592d1631
L
4165 { Bad_Opcode },
4166 { Bad_Opcode },
c0f3af97 4167 { VEX_LEN_TABLE (VEX_LEN_EB_P_2) },
c0f3af97
L
4168 },
4169
4170 /* PREFIX_VEX_EC */
4171 {
592d1631
L
4172 { Bad_Opcode },
4173 { Bad_Opcode },
c0f3af97 4174 { VEX_LEN_TABLE (VEX_LEN_EC_P_2) },
c0f3af97
L
4175 },
4176
4177 /* PREFIX_VEX_ED */
4178 {
592d1631
L
4179 { Bad_Opcode },
4180 { Bad_Opcode },
c0f3af97 4181 { VEX_LEN_TABLE (VEX_LEN_ED_P_2) },
c0f3af97
L
4182 },
4183
4184 /* PREFIX_VEX_EE */
4185 {
592d1631
L
4186 { Bad_Opcode },
4187 { Bad_Opcode },
c0f3af97 4188 { VEX_LEN_TABLE (VEX_LEN_EE_P_2) },
c0f3af97
L
4189 },
4190
4191 /* PREFIX_VEX_EF */
4192 {
592d1631
L
4193 { Bad_Opcode },
4194 { Bad_Opcode },
c0f3af97 4195 { VEX_LEN_TABLE (VEX_LEN_EF_P_2) },
c0f3af97
L
4196 },
4197
4198 /* PREFIX_VEX_F0 */
4199 {
592d1631
L
4200 { Bad_Opcode },
4201 { Bad_Opcode },
4202 { Bad_Opcode },
c0f3af97
L
4203 { MOD_TABLE (MOD_VEX_F0_PREFIX_3) },
4204 },
4205
4206 /* PREFIX_VEX_F1 */
4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
c0f3af97 4210 { VEX_LEN_TABLE (VEX_LEN_F1_P_2) },
c0f3af97
L
4211 },
4212
4213 /* PREFIX_VEX_F2 */
4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
c0f3af97 4217 { VEX_LEN_TABLE (VEX_LEN_F2_P_2) },
c0f3af97
L
4218 },
4219
4220 /* PREFIX_VEX_F3 */
4221 {
592d1631
L
4222 { Bad_Opcode },
4223 { Bad_Opcode },
c0f3af97 4224 { VEX_LEN_TABLE (VEX_LEN_F3_P_2) },
c0f3af97
L
4225 },
4226
4227 /* PREFIX_VEX_F4 */
4228 {
592d1631
L
4229 { Bad_Opcode },
4230 { Bad_Opcode },
c0f3af97 4231 { VEX_LEN_TABLE (VEX_LEN_F4_P_2) },
c0f3af97
L
4232 },
4233
4234 /* PREFIX_VEX_F5 */
4235 {
592d1631
L
4236 { Bad_Opcode },
4237 { Bad_Opcode },
c0f3af97 4238 { VEX_LEN_TABLE (VEX_LEN_F5_P_2) },
c0f3af97
L
4239 },
4240
4241 /* PREFIX_VEX_F6 */
4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
c0f3af97 4245 { VEX_LEN_TABLE (VEX_LEN_F6_P_2) },
c0f3af97
L
4246 },
4247
4248 /* PREFIX_VEX_F7 */
4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
c0f3af97 4252 { VEX_LEN_TABLE (VEX_LEN_F7_P_2) },
c0f3af97
L
4253 },
4254
4255 /* PREFIX_VEX_F8 */
4256 {
592d1631
L
4257 { Bad_Opcode },
4258 { Bad_Opcode },
c0f3af97 4259 { VEX_LEN_TABLE (VEX_LEN_F8_P_2) },
c0f3af97
L
4260 },
4261
4262 /* PREFIX_VEX_F9 */
4263 {
592d1631
L
4264 { Bad_Opcode },
4265 { Bad_Opcode },
c0f3af97 4266 { VEX_LEN_TABLE (VEX_LEN_F9_P_2) },
c0f3af97
L
4267 },
4268
4269 /* PREFIX_VEX_FA */
4270 {
592d1631
L
4271 { Bad_Opcode },
4272 { Bad_Opcode },
c0f3af97 4273 { VEX_LEN_TABLE (VEX_LEN_FA_P_2) },
c0f3af97
L
4274 },
4275
4276 /* PREFIX_VEX_FB */
4277 {
592d1631
L
4278 { Bad_Opcode },
4279 { Bad_Opcode },
c0f3af97 4280 { VEX_LEN_TABLE (VEX_LEN_FB_P_2) },
c0f3af97
L
4281 },
4282
4283 /* PREFIX_VEX_FC */
4284 {
592d1631
L
4285 { Bad_Opcode },
4286 { Bad_Opcode },
c0f3af97 4287 { VEX_LEN_TABLE (VEX_LEN_FC_P_2) },
c0f3af97
L
4288 },
4289
4290 /* PREFIX_VEX_FD */
4291 {
592d1631
L
4292 { Bad_Opcode },
4293 { Bad_Opcode },
c0f3af97 4294 { VEX_LEN_TABLE (VEX_LEN_FD_P_2) },
c0f3af97
L
4295 },
4296
4297 /* PREFIX_VEX_FE */
4298 {
592d1631
L
4299 { Bad_Opcode },
4300 { Bad_Opcode },
c0f3af97 4301 { VEX_LEN_TABLE (VEX_LEN_FE_P_2) },
c0f3af97
L
4302 },
4303
4304 /* PREFIX_VEX_3800 */
4305 {
592d1631
L
4306 { Bad_Opcode },
4307 { Bad_Opcode },
c0f3af97 4308 { VEX_LEN_TABLE (VEX_LEN_3800_P_2) },
c0f3af97
L
4309 },
4310
4311 /* PREFIX_VEX_3801 */
4312 {
592d1631
L
4313 { Bad_Opcode },
4314 { Bad_Opcode },
c0f3af97 4315 { VEX_LEN_TABLE (VEX_LEN_3801_P_2) },
c0f3af97
L
4316 },
4317
4318 /* PREFIX_VEX_3802 */
4319 {
592d1631
L
4320 { Bad_Opcode },
4321 { Bad_Opcode },
c0f3af97 4322 { VEX_LEN_TABLE (VEX_LEN_3802_P_2) },
c0f3af97
L
4323 },
4324
4325 /* PREFIX_VEX_3803 */
4326 {
592d1631
L
4327 { Bad_Opcode },
4328 { Bad_Opcode },
c0f3af97 4329 { VEX_LEN_TABLE (VEX_LEN_3803_P_2) },
c0f3af97
L
4330 },
4331
4332 /* PREFIX_VEX_3804 */
4333 {
592d1631
L
4334 { Bad_Opcode },
4335 { Bad_Opcode },
c0f3af97 4336 { VEX_LEN_TABLE (VEX_LEN_3804_P_2) },
c0f3af97
L
4337 },
4338
4339 /* PREFIX_VEX_3805 */
4340 {
592d1631
L
4341 { Bad_Opcode },
4342 { Bad_Opcode },
c0f3af97 4343 { VEX_LEN_TABLE (VEX_LEN_3805_P_2) },
c0f3af97
L
4344 },
4345
4346 /* PREFIX_VEX_3806 */
4347 {
592d1631
L
4348 { Bad_Opcode },
4349 { Bad_Opcode },
c0f3af97 4350 { VEX_LEN_TABLE (VEX_LEN_3806_P_2) },
c0f3af97
L
4351 },
4352
4353 /* PREFIX_VEX_3807 */
4354 {
592d1631
L
4355 { Bad_Opcode },
4356 { Bad_Opcode },
c0f3af97 4357 { VEX_LEN_TABLE (VEX_LEN_3807_P_2) },
c0f3af97
L
4358 },
4359
4360 /* PREFIX_VEX_3808 */
4361 {
592d1631
L
4362 { Bad_Opcode },
4363 { Bad_Opcode },
c0f3af97 4364 { VEX_LEN_TABLE (VEX_LEN_3808_P_2) },
c0f3af97
L
4365 },
4366
4367 /* PREFIX_VEX_3809 */
4368 {
592d1631
L
4369 { Bad_Opcode },
4370 { Bad_Opcode },
c0f3af97 4371 { VEX_LEN_TABLE (VEX_LEN_3809_P_2) },
c0f3af97
L
4372 },
4373
4374 /* PREFIX_VEX_380A */
4375 {
592d1631
L
4376 { Bad_Opcode },
4377 { Bad_Opcode },
c0f3af97 4378 { VEX_LEN_TABLE (VEX_LEN_380A_P_2) },
c0f3af97
L
4379 },
4380
4381 /* PREFIX_VEX_380B */
4382 {
592d1631
L
4383 { Bad_Opcode },
4384 { Bad_Opcode },
c0f3af97 4385 { VEX_LEN_TABLE (VEX_LEN_380B_P_2) },
c0f3af97
L
4386 },
4387
4388 /* PREFIX_VEX_380C */
4389 {
592d1631
L
4390 { Bad_Opcode },
4391 { Bad_Opcode },
9e30b8e0 4392 { VEX_W_TABLE (VEX_W_380C_P_2) },
c0f3af97
L
4393 },
4394
4395 /* PREFIX_VEX_380D */
4396 {
592d1631
L
4397 { Bad_Opcode },
4398 { Bad_Opcode },
9e30b8e0 4399 { VEX_W_TABLE (VEX_W_380D_P_2) },
c0f3af97
L
4400 },
4401
4402 /* PREFIX_VEX_380E */
4403 {
592d1631
L
4404 { Bad_Opcode },
4405 { Bad_Opcode },
9e30b8e0 4406 { VEX_W_TABLE (VEX_W_380E_P_2) },
c0f3af97
L
4407 },
4408
4409 /* PREFIX_VEX_380F */
4410 {
592d1631
L
4411 { Bad_Opcode },
4412 { Bad_Opcode },
9e30b8e0 4413 { VEX_W_TABLE (VEX_W_380F_P_2) },
c0f3af97
L
4414 },
4415
4416 /* PREFIX_VEX_3817 */
4417 {
592d1631
L
4418 { Bad_Opcode },
4419 { Bad_Opcode },
9e30b8e0 4420 { VEX_W_TABLE (VEX_W_3817_P_2) },
c0f3af97
L
4421 },
4422
4423 /* PREFIX_VEX_3818 */
4424 {
592d1631
L
4425 { Bad_Opcode },
4426 { Bad_Opcode },
c0f3af97 4427 { MOD_TABLE (MOD_VEX_3818_PREFIX_2) },
c0f3af97
L
4428 },
4429
4430 /* PREFIX_VEX_3819 */
4431 {
592d1631
L
4432 { Bad_Opcode },
4433 { Bad_Opcode },
c0f3af97 4434 { MOD_TABLE (MOD_VEX_3819_PREFIX_2) },
c0f3af97
L
4435 },
4436
4437 /* PREFIX_VEX_381A */
4438 {
592d1631
L
4439 { Bad_Opcode },
4440 { Bad_Opcode },
c0f3af97 4441 { MOD_TABLE (MOD_VEX_381A_PREFIX_2) },
c0f3af97
L
4442 },
4443
4444 /* PREFIX_VEX_381C */
4445 {
592d1631
L
4446 { Bad_Opcode },
4447 { Bad_Opcode },
c0f3af97 4448 { VEX_LEN_TABLE (VEX_LEN_381C_P_2) },
c0f3af97
L
4449 },
4450
4451 /* PREFIX_VEX_381D */
4452 {
592d1631
L
4453 { Bad_Opcode },
4454 { Bad_Opcode },
c0f3af97 4455 { VEX_LEN_TABLE (VEX_LEN_381D_P_2) },
c0f3af97
L
4456 },
4457
4458 /* PREFIX_VEX_381E */
4459 {
592d1631
L
4460 { Bad_Opcode },
4461 { Bad_Opcode },
c0f3af97 4462 { VEX_LEN_TABLE (VEX_LEN_381E_P_2) },
c0f3af97
L
4463 },
4464
4465 /* PREFIX_VEX_3820 */
4466 {
592d1631
L
4467 { Bad_Opcode },
4468 { Bad_Opcode },
c0f3af97 4469 { VEX_LEN_TABLE (VEX_LEN_3820_P_2) },
c0f3af97
L
4470 },
4471
4472 /* PREFIX_VEX_3821 */
4473 {
592d1631
L
4474 { Bad_Opcode },
4475 { Bad_Opcode },
c0f3af97 4476 { VEX_LEN_TABLE (VEX_LEN_3821_P_2) },
c0f3af97
L
4477 },
4478
4479 /* PREFIX_VEX_3822 */
4480 {
592d1631
L
4481 { Bad_Opcode },
4482 { Bad_Opcode },
c0f3af97 4483 { VEX_LEN_TABLE (VEX_LEN_3822_P_2) },
c0f3af97
L
4484 },
4485
4486 /* PREFIX_VEX_3823 */
4487 {
592d1631
L
4488 { Bad_Opcode },
4489 { Bad_Opcode },
c0f3af97 4490 { VEX_LEN_TABLE (VEX_LEN_3823_P_2) },
c0f3af97
L
4491 },
4492
4493 /* PREFIX_VEX_3824 */
4494 {
592d1631
L
4495 { Bad_Opcode },
4496 { Bad_Opcode },
c0f3af97 4497 { VEX_LEN_TABLE (VEX_LEN_3824_P_2) },
c0f3af97
L
4498 },
4499
4500 /* PREFIX_VEX_3825 */
4501 {
592d1631
L
4502 { Bad_Opcode },
4503 { Bad_Opcode },
c0f3af97 4504 { VEX_LEN_TABLE (VEX_LEN_3825_P_2) },
c0f3af97
L
4505 },
4506
4507 /* PREFIX_VEX_3828 */
4508 {
592d1631
L
4509 { Bad_Opcode },
4510 { Bad_Opcode },
c0f3af97 4511 { VEX_LEN_TABLE (VEX_LEN_3828_P_2) },
c0f3af97
L
4512 },
4513
4514 /* PREFIX_VEX_3829 */
4515 {
592d1631
L
4516 { Bad_Opcode },
4517 { Bad_Opcode },
c0f3af97 4518 { VEX_LEN_TABLE (VEX_LEN_3829_P_2) },
c0f3af97
L
4519 },
4520
4521 /* PREFIX_VEX_382A */
4522 {
592d1631
L
4523 { Bad_Opcode },
4524 { Bad_Opcode },
c0f3af97 4525 { MOD_TABLE (MOD_VEX_382A_PREFIX_2) },
c0f3af97
L
4526 },
4527
4528 /* PREFIX_VEX_382B */
4529 {
592d1631
L
4530 { Bad_Opcode },
4531 { Bad_Opcode },
c0f3af97 4532 { VEX_LEN_TABLE (VEX_LEN_382B_P_2) },
c0f3af97
L
4533 },
4534
4535 /* PREFIX_VEX_382C */
4536 {
592d1631
L
4537 { Bad_Opcode },
4538 { Bad_Opcode },
c0f3af97 4539 { MOD_TABLE (MOD_VEX_382C_PREFIX_2) },
c0f3af97
L
4540 },
4541
4542 /* PREFIX_VEX_382D */
4543 {
592d1631
L
4544 { Bad_Opcode },
4545 { Bad_Opcode },
c0f3af97 4546 { MOD_TABLE (MOD_VEX_382D_PREFIX_2) },
c0f3af97
L
4547 },
4548
4549 /* PREFIX_VEX_382E */
4550 {
592d1631
L
4551 { Bad_Opcode },
4552 { Bad_Opcode },
c0f3af97 4553 { MOD_TABLE (MOD_VEX_382E_PREFIX_2) },
c0f3af97
L
4554 },
4555
4556 /* PREFIX_VEX_382F */
4557 {
592d1631
L
4558 { Bad_Opcode },
4559 { Bad_Opcode },
c0f3af97 4560 { MOD_TABLE (MOD_VEX_382F_PREFIX_2) },
c0f3af97
L
4561 },
4562
4563 /* PREFIX_VEX_3830 */
4564 {
592d1631
L
4565 { Bad_Opcode },
4566 { Bad_Opcode },
c0f3af97 4567 { VEX_LEN_TABLE (VEX_LEN_3830_P_2) },
c0f3af97
L
4568 },
4569
4570 /* PREFIX_VEX_3831 */
4571 {
592d1631
L
4572 { Bad_Opcode },
4573 { Bad_Opcode },
c0f3af97 4574 { VEX_LEN_TABLE (VEX_LEN_3831_P_2) },
c0f3af97
L
4575 },
4576
4577 /* PREFIX_VEX_3832 */
4578 {
592d1631
L
4579 { Bad_Opcode },
4580 { Bad_Opcode },
c0f3af97 4581 { VEX_LEN_TABLE (VEX_LEN_3832_P_2) },
c0f3af97
L
4582 },
4583
4584 /* PREFIX_VEX_3833 */
4585 {
592d1631
L
4586 { Bad_Opcode },
4587 { Bad_Opcode },
c0f3af97 4588 { VEX_LEN_TABLE (VEX_LEN_3833_P_2) },
c0f3af97
L
4589 },
4590
4591 /* PREFIX_VEX_3834 */
4592 {
592d1631
L
4593 { Bad_Opcode },
4594 { Bad_Opcode },
c0f3af97 4595 { VEX_LEN_TABLE (VEX_LEN_3834_P_2) },
c0f3af97
L
4596 },
4597
4598 /* PREFIX_VEX_3835 */
4599 {
592d1631
L
4600 { Bad_Opcode },
4601 { Bad_Opcode },
c0f3af97 4602 { VEX_LEN_TABLE (VEX_LEN_3835_P_2) },
c0f3af97
L
4603 },
4604
4605 /* PREFIX_VEX_3837 */
4606 {
592d1631
L
4607 { Bad_Opcode },
4608 { Bad_Opcode },
c0f3af97 4609 { VEX_LEN_TABLE (VEX_LEN_3837_P_2) },
c0f3af97
L
4610 },
4611
4612 /* PREFIX_VEX_3838 */
4613 {
592d1631
L
4614 { Bad_Opcode },
4615 { Bad_Opcode },
c0f3af97 4616 { VEX_LEN_TABLE (VEX_LEN_3838_P_2) },
c0f3af97
L
4617 },
4618
4619 /* PREFIX_VEX_3839 */
4620 {
592d1631
L
4621 { Bad_Opcode },
4622 { Bad_Opcode },
c0f3af97 4623 { VEX_LEN_TABLE (VEX_LEN_3839_P_2) },
c0f3af97
L
4624 },
4625
4626 /* PREFIX_VEX_383A */
4627 {
592d1631
L
4628 { Bad_Opcode },
4629 { Bad_Opcode },
c0f3af97 4630 { VEX_LEN_TABLE (VEX_LEN_383A_P_2) },
c0f3af97
L
4631 },
4632
4633 /* PREFIX_VEX_383B */
4634 {
592d1631
L
4635 { Bad_Opcode },
4636 { Bad_Opcode },
c0f3af97 4637 { VEX_LEN_TABLE (VEX_LEN_383B_P_2) },
c0f3af97
L
4638 },
4639
4640 /* PREFIX_VEX_383C */
4641 {
592d1631
L
4642 { Bad_Opcode },
4643 { Bad_Opcode },
c0f3af97 4644 { VEX_LEN_TABLE (VEX_LEN_383C_P_2) },
c0f3af97
L
4645 },
4646
4647 /* PREFIX_VEX_383D */
4648 {
592d1631
L
4649 { Bad_Opcode },
4650 { Bad_Opcode },
c0f3af97 4651 { VEX_LEN_TABLE (VEX_LEN_383D_P_2) },
c0f3af97
L
4652 },
4653
4654 /* PREFIX_VEX_383E */
4655 {
592d1631
L
4656 { Bad_Opcode },
4657 { Bad_Opcode },
c0f3af97 4658 { VEX_LEN_TABLE (VEX_LEN_383E_P_2) },
c0f3af97
L
4659 },
4660
4661 /* PREFIX_VEX_383F */
4662 {
592d1631
L
4663 { Bad_Opcode },
4664 { Bad_Opcode },
c0f3af97 4665 { VEX_LEN_TABLE (VEX_LEN_383F_P_2) },
c0f3af97
L
4666 },
4667
4668 /* PREFIX_VEX_3840 */
4669 {
592d1631
L
4670 { Bad_Opcode },
4671 { Bad_Opcode },
c0f3af97 4672 { VEX_LEN_TABLE (VEX_LEN_3840_P_2) },
c0f3af97
L
4673 },
4674
4675 /* PREFIX_VEX_3841 */
4676 {
592d1631
L
4677 { Bad_Opcode },
4678 { Bad_Opcode },
c0f3af97 4679 { VEX_LEN_TABLE (VEX_LEN_3841_P_2) },
c0f3af97
L
4680 },
4681
0bfee649 4682 /* PREFIX_VEX_3896 */
a5ff0eb2 4683 {
592d1631
L
4684 { Bad_Opcode },
4685 { Bad_Opcode },
0bfee649 4686 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4687 },
4688
0bfee649 4689 /* PREFIX_VEX_3897 */
a5ff0eb2 4690 {
592d1631
L
4691 { Bad_Opcode },
4692 { Bad_Opcode },
0bfee649 4693 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4694 },
4695
0bfee649 4696 /* PREFIX_VEX_3898 */
a5ff0eb2 4697 {
592d1631
L
4698 { Bad_Opcode },
4699 { Bad_Opcode },
0bfee649 4700 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4701 },
4702
0bfee649 4703 /* PREFIX_VEX_3899 */
a5ff0eb2 4704 {
592d1631
L
4705 { Bad_Opcode },
4706 { Bad_Opcode },
1c480963 4707 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
4708 },
4709
0bfee649 4710 /* PREFIX_VEX_389A */
a5ff0eb2 4711 {
592d1631
L
4712 { Bad_Opcode },
4713 { Bad_Opcode },
0bfee649 4714 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4715 },
4716
0bfee649 4717 /* PREFIX_VEX_389B */
c0f3af97 4718 {
592d1631
L
4719 { Bad_Opcode },
4720 { Bad_Opcode },
1c480963 4721 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4722 },
4723
0bfee649 4724 /* PREFIX_VEX_389C */
c0f3af97 4725 {
592d1631
L
4726 { Bad_Opcode },
4727 { Bad_Opcode },
0bfee649 4728 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4729 },
4730
0bfee649 4731 /* PREFIX_VEX_389D */
c0f3af97 4732 {
592d1631
L
4733 { Bad_Opcode },
4734 { Bad_Opcode },
1c480963 4735 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4736 },
4737
0bfee649 4738 /* PREFIX_VEX_389E */
c0f3af97 4739 {
592d1631
L
4740 { Bad_Opcode },
4741 { Bad_Opcode },
0bfee649 4742 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4743 },
4744
0bfee649 4745 /* PREFIX_VEX_389F */
c0f3af97 4746 {
592d1631
L
4747 { Bad_Opcode },
4748 { Bad_Opcode },
1c480963 4749 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4750 },
4751
0bfee649 4752 /* PREFIX_VEX_38A6 */
c0f3af97 4753 {
592d1631
L
4754 { Bad_Opcode },
4755 { Bad_Opcode },
0bfee649 4756 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 4757 { Bad_Opcode },
c0f3af97
L
4758 },
4759
0bfee649 4760 /* PREFIX_VEX_38A7 */
c0f3af97 4761 {
592d1631
L
4762 { Bad_Opcode },
4763 { Bad_Opcode },
0bfee649 4764 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4765 },
4766
0bfee649 4767 /* PREFIX_VEX_38A8 */
c0f3af97 4768 {
592d1631
L
4769 { Bad_Opcode },
4770 { Bad_Opcode },
0bfee649 4771 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4772 },
4773
0bfee649 4774 /* PREFIX_VEX_38A9 */
c0f3af97 4775 {
592d1631
L
4776 { Bad_Opcode },
4777 { Bad_Opcode },
1c480963 4778 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4779 },
4780
0bfee649 4781 /* PREFIX_VEX_38AA */
c0f3af97 4782 {
592d1631
L
4783 { Bad_Opcode },
4784 { Bad_Opcode },
0bfee649 4785 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4786 },
4787
0bfee649 4788 /* PREFIX_VEX_38AB */
c0f3af97 4789 {
592d1631
L
4790 { Bad_Opcode },
4791 { Bad_Opcode },
1c480963 4792 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4793 },
4794
0bfee649 4795 /* PREFIX_VEX_38AC */
c0f3af97 4796 {
592d1631
L
4797 { Bad_Opcode },
4798 { Bad_Opcode },
0bfee649 4799 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4800 },
4801
0bfee649 4802 /* PREFIX_VEX_38AD */
c0f3af97 4803 {
592d1631
L
4804 { Bad_Opcode },
4805 { Bad_Opcode },
1c480963 4806 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4807 },
4808
0bfee649 4809 /* PREFIX_VEX_38AE */
c0f3af97 4810 {
592d1631
L
4811 { Bad_Opcode },
4812 { Bad_Opcode },
0bfee649 4813 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4814 },
4815
0bfee649 4816 /* PREFIX_VEX_38AF */
c0f3af97 4817 {
592d1631
L
4818 { Bad_Opcode },
4819 { Bad_Opcode },
1c480963 4820 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4821 },
4822
0bfee649 4823 /* PREFIX_VEX_38B6 */
c0f3af97 4824 {
592d1631
L
4825 { Bad_Opcode },
4826 { Bad_Opcode },
0bfee649 4827 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4828 },
4829
0bfee649 4830 /* PREFIX_VEX_38B7 */
c0f3af97 4831 {
592d1631
L
4832 { Bad_Opcode },
4833 { Bad_Opcode },
0bfee649 4834 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4835 },
4836
0bfee649 4837 /* PREFIX_VEX_38B8 */
c0f3af97 4838 {
592d1631
L
4839 { Bad_Opcode },
4840 { Bad_Opcode },
0bfee649 4841 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4842 },
4843
0bfee649 4844 /* PREFIX_VEX_38B9 */
c0f3af97 4845 {
592d1631
L
4846 { Bad_Opcode },
4847 { Bad_Opcode },
1c480963 4848 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4849 },
4850
0bfee649 4851 /* PREFIX_VEX_38BA */
c0f3af97 4852 {
592d1631
L
4853 { Bad_Opcode },
4854 { Bad_Opcode },
0bfee649 4855 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4856 },
4857
0bfee649 4858 /* PREFIX_VEX_38BB */
c0f3af97 4859 {
592d1631
L
4860 { Bad_Opcode },
4861 { Bad_Opcode },
1c480963 4862 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4863 },
4864
0bfee649 4865 /* PREFIX_VEX_38BC */
c0f3af97 4866 {
592d1631
L
4867 { Bad_Opcode },
4868 { Bad_Opcode },
0bfee649 4869 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4870 },
4871
0bfee649 4872 /* PREFIX_VEX_38BD */
c0f3af97 4873 {
592d1631
L
4874 { Bad_Opcode },
4875 { Bad_Opcode },
1c480963 4876 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4877 },
4878
0bfee649 4879 /* PREFIX_VEX_38BE */
c0f3af97 4880 {
592d1631
L
4881 { Bad_Opcode },
4882 { Bad_Opcode },
0bfee649 4883 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4884 },
4885
0bfee649 4886 /* PREFIX_VEX_38BF */
c0f3af97 4887 {
592d1631
L
4888 { Bad_Opcode },
4889 { Bad_Opcode },
1c480963 4890 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4891 },
4892
0bfee649 4893 /* PREFIX_VEX_38DB */
c0f3af97 4894 {
592d1631
L
4895 { Bad_Opcode },
4896 { Bad_Opcode },
0bfee649 4897 { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
c0f3af97
L
4898 },
4899
0bfee649 4900 /* PREFIX_VEX_38DC */
c0f3af97 4901 {
592d1631
L
4902 { Bad_Opcode },
4903 { Bad_Opcode },
0bfee649 4904 { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
c0f3af97
L
4905 },
4906
0bfee649 4907 /* PREFIX_VEX_38DD */
c0f3af97 4908 {
592d1631
L
4909 { Bad_Opcode },
4910 { Bad_Opcode },
0bfee649 4911 { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
c0f3af97
L
4912 },
4913
0bfee649 4914 /* PREFIX_VEX_38DE */
c0f3af97 4915 {
592d1631
L
4916 { Bad_Opcode },
4917 { Bad_Opcode },
0bfee649 4918 { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
c0f3af97
L
4919 },
4920
0bfee649 4921 /* PREFIX_VEX_38DF */
c0f3af97 4922 {
592d1631
L
4923 { Bad_Opcode },
4924 { Bad_Opcode },
0bfee649 4925 { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
c0f3af97
L
4926 },
4927
0bfee649 4928 /* PREFIX_VEX_3A04 */
c0f3af97 4929 {
592d1631
L
4930 { Bad_Opcode },
4931 { Bad_Opcode },
9e30b8e0 4932 { VEX_W_TABLE (VEX_W_3A04_P_2) },
c0f3af97
L
4933 },
4934
0bfee649 4935 /* PREFIX_VEX_3A05 */
c0f3af97 4936 {
592d1631
L
4937 { Bad_Opcode },
4938 { Bad_Opcode },
9e30b8e0 4939 { VEX_W_TABLE (VEX_W_3A05_P_2) },
c0f3af97
L
4940 },
4941
0bfee649 4942 /* PREFIX_VEX_3A06 */
c0f3af97 4943 {
592d1631
L
4944 { Bad_Opcode },
4945 { Bad_Opcode },
0bfee649 4946 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) },
c0f3af97
L
4947 },
4948
0bfee649 4949 /* PREFIX_VEX_3A08 */
c0f3af97 4950 {
592d1631
L
4951 { Bad_Opcode },
4952 { Bad_Opcode },
9e30b8e0 4953 { VEX_W_TABLE (VEX_W_3A08_P_2) },
c0f3af97
L
4954 },
4955
0bfee649 4956 /* PREFIX_VEX_3A09 */
c0f3af97 4957 {
592d1631
L
4958 { Bad_Opcode },
4959 { Bad_Opcode },
9e30b8e0 4960 { VEX_W_TABLE (VEX_W_3A09_P_2) },
c0f3af97
L
4961 },
4962
0bfee649 4963 /* PREFIX_VEX_3A0A */
c0f3af97 4964 {
592d1631
L
4965 { Bad_Opcode },
4966 { Bad_Opcode },
0bfee649 4967 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) },
0bfee649
L
4968 },
4969
4970 /* PREFIX_VEX_3A0B */
4971 {
592d1631
L
4972 { Bad_Opcode },
4973 { Bad_Opcode },
0bfee649 4974 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) },
0bfee649
L
4975 },
4976
4977 /* PREFIX_VEX_3A0C */
4978 {
592d1631
L
4979 { Bad_Opcode },
4980 { Bad_Opcode },
9e30b8e0 4981 { VEX_W_TABLE (VEX_W_3A0C_P_2) },
0bfee649
L
4982 },
4983
4984 /* PREFIX_VEX_3A0D */
4985 {
592d1631
L
4986 { Bad_Opcode },
4987 { Bad_Opcode },
9e30b8e0 4988 { VEX_W_TABLE (VEX_W_3A0D_P_2) },
c0f3af97
L
4989 },
4990
0bfee649
L
4991 /* PREFIX_VEX_3A0E */
4992 {
592d1631
L
4993 { Bad_Opcode },
4994 { Bad_Opcode },
0bfee649 4995 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) },
0bfee649
L
4996 },
4997
4998 /* PREFIX_VEX_3A0F */
4999 {
592d1631
L
5000 { Bad_Opcode },
5001 { Bad_Opcode },
0bfee649 5002 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) },
0bfee649
L
5003 },
5004
5005 /* PREFIX_VEX_3A14 */
5006 {
592d1631
L
5007 { Bad_Opcode },
5008 { Bad_Opcode },
0bfee649 5009 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) },
0bfee649
L
5010 },
5011
5012 /* PREFIX_VEX_3A15 */
5013 {
592d1631
L
5014 { Bad_Opcode },
5015 { Bad_Opcode },
0bfee649 5016 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) },
0bfee649
L
5017 },
5018
5019 /* PREFIX_VEX_3A16 */
c0f3af97 5020 {
592d1631
L
5021 { Bad_Opcode },
5022 { Bad_Opcode },
0bfee649 5023 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) },
c0f3af97
L
5024 },
5025
0bfee649 5026 /* PREFIX_VEX_3A17 */
c0f3af97 5027 {
592d1631
L
5028 { Bad_Opcode },
5029 { Bad_Opcode },
0bfee649 5030 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) },
c0f3af97
L
5031 },
5032
0bfee649 5033 /* PREFIX_VEX_3A18 */
c0f3af97 5034 {
592d1631
L
5035 { Bad_Opcode },
5036 { Bad_Opcode },
0bfee649 5037 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) },
c0f3af97
L
5038 },
5039
0bfee649 5040 /* PREFIX_VEX_3A19 */
c0f3af97 5041 {
592d1631
L
5042 { Bad_Opcode },
5043 { Bad_Opcode },
0bfee649 5044 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) },
c0f3af97
L
5045 },
5046
0bfee649 5047 /* PREFIX_VEX_3A20 */
c0f3af97 5048 {
592d1631
L
5049 { Bad_Opcode },
5050 { Bad_Opcode },
0bfee649 5051 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) },
c0f3af97
L
5052 },
5053
0bfee649 5054 /* PREFIX_VEX_3A21 */
c0f3af97 5055 {
592d1631
L
5056 { Bad_Opcode },
5057 { Bad_Opcode },
0bfee649 5058 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) },
c0f3af97
L
5059 },
5060
0bfee649
L
5061 /* PREFIX_VEX_3A22 */
5062 {
592d1631
L
5063 { Bad_Opcode },
5064 { Bad_Opcode },
0bfee649 5065 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) },
0bfee649
L
5066 },
5067
5068 /* PREFIX_VEX_3A40 */
c0f3af97 5069 {
592d1631
L
5070 { Bad_Opcode },
5071 { Bad_Opcode },
9e30b8e0 5072 { VEX_W_TABLE (VEX_W_3A40_P_2) },
c0f3af97
L
5073 },
5074
0bfee649 5075 /* PREFIX_VEX_3A41 */
c0f3af97 5076 {
592d1631
L
5077 { Bad_Opcode },
5078 { Bad_Opcode },
0bfee649 5079 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) },
c0f3af97
L
5080 },
5081
0bfee649 5082 /* PREFIX_VEX_3A42 */
c0f3af97 5083 {
592d1631
L
5084 { Bad_Opcode },
5085 { Bad_Opcode },
0bfee649 5086 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) },
c0f3af97
L
5087 },
5088
ce2f5b3c
L
5089 /* PREFIX_VEX_3A44 */
5090 {
592d1631
L
5091 { Bad_Opcode },
5092 { Bad_Opcode },
ce2f5b3c 5093 { VEX_LEN_TABLE (VEX_LEN_3A44_P_2) },
ce2f5b3c
L
5094 },
5095
a683cc34
SP
5096 /* PREFIX_VEX_3A48 */
5097 {
5098 { Bad_Opcode },
5099 { Bad_Opcode },
5100 { VEX_W_TABLE (VEX_W_3A48_P_2) },
5101 },
5102
5103 /* PREFIX_VEX_3A49 */
5104 {
5105 { Bad_Opcode },
5106 { Bad_Opcode },
5107 { VEX_W_TABLE (VEX_W_3A49_P_2) },
5108 },
5109
0bfee649 5110 /* PREFIX_VEX_3A4A */
c0f3af97 5111 {
592d1631
L
5112 { Bad_Opcode },
5113 { Bad_Opcode },
9e30b8e0 5114 { VEX_W_TABLE (VEX_W_3A4A_P_2) },
c0f3af97
L
5115 },
5116
0bfee649 5117 /* PREFIX_VEX_3A4B */
c0f3af97 5118 {
592d1631
L
5119 { Bad_Opcode },
5120 { Bad_Opcode },
9e30b8e0 5121 { VEX_W_TABLE (VEX_W_3A4B_P_2) },
c0f3af97
L
5122 },
5123
0bfee649 5124 /* PREFIX_VEX_3A4C */
c0f3af97 5125 {
592d1631
L
5126 { Bad_Opcode },
5127 { Bad_Opcode },
0bfee649 5128 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) },
c0f3af97
L
5129 },
5130
922d8de8
DR
5131 /* PREFIX_VEX_3A5C */
5132 {
592d1631
L
5133 { Bad_Opcode },
5134 { Bad_Opcode },
206c2556 5135 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5136 },
5137
5138 /* PREFIX_VEX_3A5D */
5139 {
592d1631
L
5140 { Bad_Opcode },
5141 { Bad_Opcode },
206c2556 5142 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5143 },
5144
5145 /* PREFIX_VEX_3A5E */
5146 {
592d1631
L
5147 { Bad_Opcode },
5148 { Bad_Opcode },
206c2556 5149 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5150 },
5151
5152 /* PREFIX_VEX_3A5F */
5153 {
592d1631
L
5154 { Bad_Opcode },
5155 { Bad_Opcode },
206c2556 5156 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5157 },
5158
0bfee649 5159 /* PREFIX_VEX_3A60 */
c0f3af97 5160 {
592d1631
L
5161 { Bad_Opcode },
5162 { Bad_Opcode },
0bfee649 5163 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) },
592d1631 5164 { Bad_Opcode },
c0f3af97
L
5165 },
5166
0bfee649 5167 /* PREFIX_VEX_3A61 */
c0f3af97 5168 {
592d1631
L
5169 { Bad_Opcode },
5170 { Bad_Opcode },
0bfee649 5171 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) },
c0f3af97
L
5172 },
5173
0bfee649 5174 /* PREFIX_VEX_3A62 */
c0f3af97 5175 {
592d1631
L
5176 { Bad_Opcode },
5177 { Bad_Opcode },
0bfee649 5178 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) },
c0f3af97
L
5179 },
5180
0bfee649 5181 /* PREFIX_VEX_3A63 */
c0f3af97 5182 {
592d1631
L
5183 { Bad_Opcode },
5184 { Bad_Opcode },
0bfee649 5185 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) },
c0f3af97 5186 },
a5ff0eb2 5187
922d8de8
DR
5188 /* PREFIX_VEX_3A68 */
5189 {
592d1631
L
5190 { Bad_Opcode },
5191 { Bad_Opcode },
206c2556 5192 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5193 },
5194
5195 /* PREFIX_VEX_3A69 */
5196 {
592d1631
L
5197 { Bad_Opcode },
5198 { Bad_Opcode },
206c2556 5199 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5200 },
5201
5202 /* PREFIX_VEX_3A6A */
5203 {
592d1631
L
5204 { Bad_Opcode },
5205 { Bad_Opcode },
922d8de8 5206 { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2) },
922d8de8
DR
5207 },
5208
5209 /* PREFIX_VEX_3A6B */
5210 {
592d1631
L
5211 { Bad_Opcode },
5212 { Bad_Opcode },
922d8de8 5213 { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2) },
922d8de8
DR
5214 },
5215
5216 /* PREFIX_VEX_3A6C */
5217 {
592d1631
L
5218 { Bad_Opcode },
5219 { Bad_Opcode },
206c2556 5220 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5221 },
5222
5223 /* PREFIX_VEX_3A6D */
5224 {
592d1631
L
5225 { Bad_Opcode },
5226 { Bad_Opcode },
206c2556 5227 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5228 },
5229
5230 /* PREFIX_VEX_3A6E */
5231 {
592d1631
L
5232 { Bad_Opcode },
5233 { Bad_Opcode },
922d8de8 5234 { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2) },
922d8de8
DR
5235 },
5236
5237 /* PREFIX_VEX_3A6F */
5238 {
592d1631
L
5239 { Bad_Opcode },
5240 { Bad_Opcode },
922d8de8 5241 { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2) },
922d8de8
DR
5242 },
5243
5244 /* PREFIX_VEX_3A78 */
5245 {
592d1631
L
5246 { Bad_Opcode },
5247 { Bad_Opcode },
206c2556 5248 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5249 },
5250
5251 /* PREFIX_VEX_3A79 */
5252 {
592d1631
L
5253 { Bad_Opcode },
5254 { Bad_Opcode },
206c2556 5255 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5256 },
5257
5258 /* PREFIX_VEX_3A7A */
5259 {
592d1631
L
5260 { Bad_Opcode },
5261 { Bad_Opcode },
922d8de8 5262 { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2) },
922d8de8
DR
5263 },
5264
5265 /* PREFIX_VEX_3A7B */
5266 {
592d1631
L
5267 { Bad_Opcode },
5268 { Bad_Opcode },
922d8de8 5269 { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2) },
922d8de8
DR
5270 },
5271
5272 /* PREFIX_VEX_3A7C */
5273 {
592d1631
L
5274 { Bad_Opcode },
5275 { Bad_Opcode },
206c2556 5276 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 5277 { Bad_Opcode },
922d8de8
DR
5278 },
5279
5280 /* PREFIX_VEX_3A7D */
5281 {
592d1631
L
5282 { Bad_Opcode },
5283 { Bad_Opcode },
206c2556 5284 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5285 },
5286
5287 /* PREFIX_VEX_3A7E */
5288 {
592d1631
L
5289 { Bad_Opcode },
5290 { Bad_Opcode },
922d8de8 5291 { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2) },
922d8de8
DR
5292 },
5293
5294 /* PREFIX_VEX_3A7F */
5295 {
592d1631
L
5296 { Bad_Opcode },
5297 { Bad_Opcode },
922d8de8 5298 { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) },
922d8de8
DR
5299 },
5300
a5ff0eb2
L
5301 /* PREFIX_VEX_3ADF */
5302 {
592d1631
L
5303 { Bad_Opcode },
5304 { Bad_Opcode },
a5ff0eb2 5305 { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
a5ff0eb2 5306 },
c0f3af97
L
5307};
5308
5309static const struct dis386 x86_64_table[][2] = {
5310 /* X86_64_06 */
5311 {
5312 { "push{T|}", { es } },
c0f3af97
L
5313 },
5314
5315 /* X86_64_07 */
5316 {
5317 { "pop{T|}", { es } },
c0f3af97
L
5318 },
5319
5320 /* X86_64_0D */
5321 {
5322 { "push{T|}", { cs } },
c0f3af97
L
5323 },
5324
5325 /* X86_64_16 */
5326 {
5327 { "push{T|}", { ss } },
c0f3af97
L
5328 },
5329
5330 /* X86_64_17 */
5331 {
5332 { "pop{T|}", { ss } },
c0f3af97
L
5333 },
5334
5335 /* X86_64_1E */
5336 {
5337 { "push{T|}", { ds } },
c0f3af97
L
5338 },
5339
5340 /* X86_64_1F */
5341 {
5342 { "pop{T|}", { ds } },
c0f3af97
L
5343 },
5344
5345 /* X86_64_27 */
5346 {
5347 { "daa", { XX } },
c0f3af97
L
5348 },
5349
5350 /* X86_64_2F */
5351 {
5352 { "das", { XX } },
c0f3af97
L
5353 },
5354
5355 /* X86_64_37 */
5356 {
5357 { "aaa", { XX } },
c0f3af97
L
5358 },
5359
5360 /* X86_64_3F */
5361 {
5362 { "aas", { XX } },
c0f3af97
L
5363 },
5364
5365 /* X86_64_60 */
5366 {
5367 { "pusha{P|}", { XX } },
c0f3af97
L
5368 },
5369
5370 /* X86_64_61 */
5371 {
5372 { "popa{P|}", { XX } },
c0f3af97
L
5373 },
5374
5375 /* X86_64_62 */
5376 {
5377 { MOD_TABLE (MOD_62_32BIT) },
c0f3af97
L
5378 },
5379
5380 /* X86_64_63 */
5381 {
5382 { "arpl", { Ew, Gw } },
5383 { "movs{lq|xd}", { Gv, Ed } },
5384 },
5385
5386 /* X86_64_6D */
5387 {
5388 { "ins{R|}", { Yzr, indirDX } },
5389 { "ins{G|}", { Yzr, indirDX } },
5390 },
5391
5392 /* X86_64_6F */
5393 {
5394 { "outs{R|}", { indirDXr, Xz } },
5395 { "outs{G|}", { indirDXr, Xz } },
5396 },
5397
5398 /* X86_64_9A */
5399 {
5400 { "Jcall{T|}", { Ap } },
c0f3af97
L
5401 },
5402
5403 /* X86_64_C4 */
5404 {
5405 { MOD_TABLE (MOD_C4_32BIT) },
5406 { VEX_C4_TABLE (VEX_0F) },
5407 },
5408
5409 /* X86_64_C5 */
5410 {
5411 { MOD_TABLE (MOD_C5_32BIT) },
5412 { VEX_C5_TABLE (VEX_0F) },
5413 },
5414
5415 /* X86_64_CE */
5416 {
5417 { "into", { XX } },
c0f3af97
L
5418 },
5419
5420 /* X86_64_D4 */
5421 {
5422 { "aam", { sIb } },
c0f3af97
L
5423 },
5424
5425 /* X86_64_D5 */
5426 {
5427 { "aad", { sIb } },
c0f3af97
L
5428 },
5429
5430 /* X86_64_EA */
5431 {
5432 { "Jjmp{T|}", { Ap } },
c0f3af97
L
5433 },
5434
5435 /* X86_64_0F01_REG_0 */
5436 {
5437 { "sgdt{Q|IQ}", { M } },
5438 { "sgdt", { M } },
5439 },
5440
5441 /* X86_64_0F01_REG_1 */
5442 {
5443 { "sidt{Q|IQ}", { M } },
5444 { "sidt", { M } },
5445 },
5446
5447 /* X86_64_0F01_REG_2 */
5448 {
5449 { "lgdt{Q|Q}", { M } },
5450 { "lgdt", { M } },
5451 },
5452
5453 /* X86_64_0F01_REG_3 */
5454 {
5455 { "lidt{Q|Q}", { M } },
5456 { "lidt", { M } },
5457 },
5458};
5459
5460static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5461
5462 /* THREE_BYTE_0F38 */
c0f3af97
L
5463 {
5464 /* 00 */
c1e679ec
DR
5465 { "pshufb", { MX, EM } },
5466 { "phaddw", { MX, EM } },
5467 { "phaddd", { MX, EM } },
5468 { "phaddsw", { MX, EM } },
5469 { "pmaddubsw", { MX, EM } },
5470 { "phsubw", { MX, EM } },
5471 { "phsubd", { MX, EM } },
5472 { "phsubsw", { MX, EM } },
c0f3af97 5473 /* 08 */
c1e679ec
DR
5474 { "psignb", { MX, EM } },
5475 { "psignw", { MX, EM } },
5476 { "psignd", { MX, EM } },
5477 { "pmulhrsw", { MX, EM } },
592d1631
L
5478 { Bad_Opcode },
5479 { Bad_Opcode },
5480 { Bad_Opcode },
5481 { Bad_Opcode },
f88c9eb0
SP
5482 /* 10 */
5483 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
5484 { Bad_Opcode },
5485 { Bad_Opcode },
5486 { Bad_Opcode },
f88c9eb0
SP
5487 { PREFIX_TABLE (PREFIX_0F3814) },
5488 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 5489 { Bad_Opcode },
f88c9eb0
SP
5490 { PREFIX_TABLE (PREFIX_0F3817) },
5491 /* 18 */
592d1631
L
5492 { Bad_Opcode },
5493 { Bad_Opcode },
5494 { Bad_Opcode },
5495 { Bad_Opcode },
f88c9eb0
SP
5496 { "pabsb", { MX, EM } },
5497 { "pabsw", { MX, EM } },
5498 { "pabsd", { MX, EM } },
592d1631 5499 { Bad_Opcode },
f88c9eb0
SP
5500 /* 20 */
5501 { PREFIX_TABLE (PREFIX_0F3820) },
5502 { PREFIX_TABLE (PREFIX_0F3821) },
5503 { PREFIX_TABLE (PREFIX_0F3822) },
5504 { PREFIX_TABLE (PREFIX_0F3823) },
5505 { PREFIX_TABLE (PREFIX_0F3824) },
5506 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
5507 { Bad_Opcode },
5508 { Bad_Opcode },
f88c9eb0
SP
5509 /* 28 */
5510 { PREFIX_TABLE (PREFIX_0F3828) },
5511 { PREFIX_TABLE (PREFIX_0F3829) },
5512 { PREFIX_TABLE (PREFIX_0F382A) },
5513 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
5514 { Bad_Opcode },
5515 { Bad_Opcode },
5516 { Bad_Opcode },
5517 { Bad_Opcode },
f88c9eb0
SP
5518 /* 30 */
5519 { PREFIX_TABLE (PREFIX_0F3830) },
5520 { PREFIX_TABLE (PREFIX_0F3831) },
5521 { PREFIX_TABLE (PREFIX_0F3832) },
5522 { PREFIX_TABLE (PREFIX_0F3833) },
5523 { PREFIX_TABLE (PREFIX_0F3834) },
5524 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 5525 { Bad_Opcode },
f88c9eb0
SP
5526 { PREFIX_TABLE (PREFIX_0F3837) },
5527 /* 38 */
5528 { PREFIX_TABLE (PREFIX_0F3838) },
5529 { PREFIX_TABLE (PREFIX_0F3839) },
5530 { PREFIX_TABLE (PREFIX_0F383A) },
5531 { PREFIX_TABLE (PREFIX_0F383B) },
5532 { PREFIX_TABLE (PREFIX_0F383C) },
5533 { PREFIX_TABLE (PREFIX_0F383D) },
5534 { PREFIX_TABLE (PREFIX_0F383E) },
5535 { PREFIX_TABLE (PREFIX_0F383F) },
5536 /* 40 */
5537 { PREFIX_TABLE (PREFIX_0F3840) },
5538 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
5539 { Bad_Opcode },
5540 { Bad_Opcode },
5541 { Bad_Opcode },
5542 { Bad_Opcode },
5543 { Bad_Opcode },
5544 { Bad_Opcode },
f88c9eb0 5545 /* 48 */
592d1631
L
5546 { Bad_Opcode },
5547 { Bad_Opcode },
5548 { Bad_Opcode },
5549 { Bad_Opcode },
5550 { Bad_Opcode },
5551 { Bad_Opcode },
5552 { Bad_Opcode },
5553 { Bad_Opcode },
f88c9eb0 5554 /* 50 */
592d1631
L
5555 { Bad_Opcode },
5556 { Bad_Opcode },
5557 { Bad_Opcode },
5558 { Bad_Opcode },
5559 { Bad_Opcode },
5560 { Bad_Opcode },
5561 { Bad_Opcode },
5562 { Bad_Opcode },
f88c9eb0 5563 /* 58 */
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
5566 { Bad_Opcode },
5567 { Bad_Opcode },
5568 { Bad_Opcode },
5569 { Bad_Opcode },
5570 { Bad_Opcode },
5571 { Bad_Opcode },
f88c9eb0 5572 /* 60 */
592d1631
L
5573 { Bad_Opcode },
5574 { Bad_Opcode },
5575 { Bad_Opcode },
5576 { Bad_Opcode },
5577 { Bad_Opcode },
5578 { Bad_Opcode },
5579 { Bad_Opcode },
5580 { Bad_Opcode },
f88c9eb0 5581 /* 68 */
592d1631
L
5582 { Bad_Opcode },
5583 { Bad_Opcode },
5584 { Bad_Opcode },
5585 { Bad_Opcode },
5586 { Bad_Opcode },
5587 { Bad_Opcode },
5588 { Bad_Opcode },
5589 { Bad_Opcode },
f88c9eb0 5590 /* 70 */
592d1631
L
5591 { Bad_Opcode },
5592 { Bad_Opcode },
5593 { Bad_Opcode },
5594 { Bad_Opcode },
5595 { Bad_Opcode },
5596 { Bad_Opcode },
5597 { Bad_Opcode },
5598 { Bad_Opcode },
f88c9eb0 5599 /* 78 */
592d1631
L
5600 { Bad_Opcode },
5601 { Bad_Opcode },
5602 { Bad_Opcode },
5603 { Bad_Opcode },
5604 { Bad_Opcode },
5605 { Bad_Opcode },
5606 { Bad_Opcode },
5607 { Bad_Opcode },
f88c9eb0
SP
5608 /* 80 */
5609 { PREFIX_TABLE (PREFIX_0F3880) },
5610 { PREFIX_TABLE (PREFIX_0F3881) },
592d1631
L
5611 { Bad_Opcode },
5612 { Bad_Opcode },
5613 { Bad_Opcode },
5614 { Bad_Opcode },
5615 { Bad_Opcode },
5616 { Bad_Opcode },
f88c9eb0 5617 /* 88 */
592d1631
L
5618 { Bad_Opcode },
5619 { Bad_Opcode },
5620 { Bad_Opcode },
5621 { Bad_Opcode },
5622 { Bad_Opcode },
5623 { Bad_Opcode },
5624 { Bad_Opcode },
5625 { Bad_Opcode },
f88c9eb0 5626 /* 90 */
592d1631
L
5627 { Bad_Opcode },
5628 { Bad_Opcode },
5629 { Bad_Opcode },
5630 { Bad_Opcode },
5631 { Bad_Opcode },
5632 { Bad_Opcode },
5633 { Bad_Opcode },
5634 { Bad_Opcode },
f88c9eb0 5635 /* 98 */
592d1631
L
5636 { Bad_Opcode },
5637 { Bad_Opcode },
5638 { Bad_Opcode },
5639 { Bad_Opcode },
5640 { Bad_Opcode },
5641 { Bad_Opcode },
5642 { Bad_Opcode },
5643 { Bad_Opcode },
f88c9eb0 5644 /* a0 */
592d1631
L
5645 { Bad_Opcode },
5646 { Bad_Opcode },
5647 { Bad_Opcode },
5648 { Bad_Opcode },
5649 { Bad_Opcode },
5650 { Bad_Opcode },
5651 { Bad_Opcode },
5652 { Bad_Opcode },
f88c9eb0 5653 /* a8 */
592d1631
L
5654 { Bad_Opcode },
5655 { Bad_Opcode },
5656 { Bad_Opcode },
5657 { Bad_Opcode },
5658 { Bad_Opcode },
5659 { Bad_Opcode },
5660 { Bad_Opcode },
5661 { Bad_Opcode },
f88c9eb0 5662 /* b0 */
592d1631
L
5663 { Bad_Opcode },
5664 { Bad_Opcode },
5665 { Bad_Opcode },
5666 { Bad_Opcode },
5667 { Bad_Opcode },
5668 { Bad_Opcode },
5669 { Bad_Opcode },
5670 { Bad_Opcode },
f88c9eb0 5671 /* b8 */
592d1631
L
5672 { Bad_Opcode },
5673 { Bad_Opcode },
5674 { Bad_Opcode },
5675 { Bad_Opcode },
5676 { Bad_Opcode },
5677 { Bad_Opcode },
5678 { Bad_Opcode },
5679 { Bad_Opcode },
f88c9eb0 5680 /* c0 */
592d1631
L
5681 { Bad_Opcode },
5682 { Bad_Opcode },
5683 { Bad_Opcode },
5684 { Bad_Opcode },
5685 { Bad_Opcode },
5686 { Bad_Opcode },
5687 { Bad_Opcode },
5688 { Bad_Opcode },
f88c9eb0 5689 /* c8 */
592d1631
L
5690 { Bad_Opcode },
5691 { Bad_Opcode },
5692 { Bad_Opcode },
5693 { Bad_Opcode },
5694 { Bad_Opcode },
5695 { Bad_Opcode },
5696 { Bad_Opcode },
5697 { Bad_Opcode },
f88c9eb0 5698 /* d0 */
592d1631
L
5699 { Bad_Opcode },
5700 { Bad_Opcode },
5701 { Bad_Opcode },
5702 { Bad_Opcode },
5703 { Bad_Opcode },
5704 { Bad_Opcode },
5705 { Bad_Opcode },
5706 { Bad_Opcode },
f88c9eb0 5707 /* d8 */
592d1631
L
5708 { Bad_Opcode },
5709 { Bad_Opcode },
5710 { Bad_Opcode },
f88c9eb0
SP
5711 { PREFIX_TABLE (PREFIX_0F38DB) },
5712 { PREFIX_TABLE (PREFIX_0F38DC) },
5713 { PREFIX_TABLE (PREFIX_0F38DD) },
5714 { PREFIX_TABLE (PREFIX_0F38DE) },
5715 { PREFIX_TABLE (PREFIX_0F38DF) },
5716 /* e0 */
592d1631
L
5717 { Bad_Opcode },
5718 { Bad_Opcode },
5719 { Bad_Opcode },
5720 { Bad_Opcode },
5721 { Bad_Opcode },
5722 { Bad_Opcode },
5723 { Bad_Opcode },
5724 { Bad_Opcode },
f88c9eb0 5725 /* e8 */
592d1631
L
5726 { Bad_Opcode },
5727 { Bad_Opcode },
5728 { Bad_Opcode },
5729 { Bad_Opcode },
5730 { Bad_Opcode },
5731 { Bad_Opcode },
5732 { Bad_Opcode },
5733 { Bad_Opcode },
f88c9eb0
SP
5734 /* f0 */
5735 { PREFIX_TABLE (PREFIX_0F38F0) },
5736 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
5737 { Bad_Opcode },
5738 { Bad_Opcode },
5739 { Bad_Opcode },
5740 { Bad_Opcode },
5741 { Bad_Opcode },
5742 { Bad_Opcode },
f88c9eb0 5743 /* f8 */
592d1631
L
5744 { Bad_Opcode },
5745 { Bad_Opcode },
5746 { Bad_Opcode },
5747 { Bad_Opcode },
5748 { Bad_Opcode },
5749 { Bad_Opcode },
5750 { Bad_Opcode },
5751 { Bad_Opcode },
f88c9eb0
SP
5752 },
5753 /* THREE_BYTE_0F3A */
5754 {
5755 /* 00 */
592d1631
L
5756 { Bad_Opcode },
5757 { Bad_Opcode },
5758 { Bad_Opcode },
5759 { Bad_Opcode },
5760 { Bad_Opcode },
5761 { Bad_Opcode },
5762 { Bad_Opcode },
5763 { Bad_Opcode },
f88c9eb0
SP
5764 /* 08 */
5765 { PREFIX_TABLE (PREFIX_0F3A08) },
5766 { PREFIX_TABLE (PREFIX_0F3A09) },
5767 { PREFIX_TABLE (PREFIX_0F3A0A) },
5768 { PREFIX_TABLE (PREFIX_0F3A0B) },
5769 { PREFIX_TABLE (PREFIX_0F3A0C) },
5770 { PREFIX_TABLE (PREFIX_0F3A0D) },
5771 { PREFIX_TABLE (PREFIX_0F3A0E) },
5772 { "palignr", { MX, EM, Ib } },
5773 /* 10 */
592d1631
L
5774 { Bad_Opcode },
5775 { Bad_Opcode },
5776 { Bad_Opcode },
5777 { Bad_Opcode },
f88c9eb0
SP
5778 { PREFIX_TABLE (PREFIX_0F3A14) },
5779 { PREFIX_TABLE (PREFIX_0F3A15) },
5780 { PREFIX_TABLE (PREFIX_0F3A16) },
5781 { PREFIX_TABLE (PREFIX_0F3A17) },
5782 /* 18 */
592d1631
L
5783 { Bad_Opcode },
5784 { Bad_Opcode },
5785 { Bad_Opcode },
5786 { Bad_Opcode },
5787 { Bad_Opcode },
5788 { Bad_Opcode },
5789 { Bad_Opcode },
5790 { Bad_Opcode },
f88c9eb0
SP
5791 /* 20 */
5792 { PREFIX_TABLE (PREFIX_0F3A20) },
5793 { PREFIX_TABLE (PREFIX_0F3A21) },
5794 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
5795 { Bad_Opcode },
5796 { Bad_Opcode },
5797 { Bad_Opcode },
5798 { Bad_Opcode },
5799 { Bad_Opcode },
f88c9eb0 5800 /* 28 */
592d1631
L
5801 { Bad_Opcode },
5802 { Bad_Opcode },
5803 { Bad_Opcode },
5804 { Bad_Opcode },
5805 { Bad_Opcode },
5806 { Bad_Opcode },
5807 { Bad_Opcode },
5808 { Bad_Opcode },
f88c9eb0 5809 /* 30 */
592d1631
L
5810 { Bad_Opcode },
5811 { Bad_Opcode },
5812 { Bad_Opcode },
5813 { Bad_Opcode },
5814 { Bad_Opcode },
5815 { Bad_Opcode },
5816 { Bad_Opcode },
5817 { Bad_Opcode },
f88c9eb0 5818 /* 38 */
592d1631
L
5819 { Bad_Opcode },
5820 { Bad_Opcode },
5821 { Bad_Opcode },
5822 { Bad_Opcode },
5823 { Bad_Opcode },
5824 { Bad_Opcode },
5825 { Bad_Opcode },
5826 { Bad_Opcode },
f88c9eb0
SP
5827 /* 40 */
5828 { PREFIX_TABLE (PREFIX_0F3A40) },
5829 { PREFIX_TABLE (PREFIX_0F3A41) },
5830 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 5831 { Bad_Opcode },
f88c9eb0 5832 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
5833 { Bad_Opcode },
5834 { Bad_Opcode },
5835 { Bad_Opcode },
f88c9eb0 5836 /* 48 */
592d1631
L
5837 { Bad_Opcode },
5838 { Bad_Opcode },
5839 { Bad_Opcode },
5840 { Bad_Opcode },
5841 { Bad_Opcode },
5842 { Bad_Opcode },
5843 { Bad_Opcode },
5844 { Bad_Opcode },
f88c9eb0 5845 /* 50 */
592d1631
L
5846 { Bad_Opcode },
5847 { Bad_Opcode },
5848 { Bad_Opcode },
5849 { Bad_Opcode },
5850 { Bad_Opcode },
5851 { Bad_Opcode },
5852 { Bad_Opcode },
5853 { Bad_Opcode },
f88c9eb0 5854 /* 58 */
592d1631
L
5855 { Bad_Opcode },
5856 { Bad_Opcode },
5857 { Bad_Opcode },
5858 { Bad_Opcode },
5859 { Bad_Opcode },
5860 { Bad_Opcode },
5861 { Bad_Opcode },
5862 { Bad_Opcode },
f88c9eb0
SP
5863 /* 60 */
5864 { PREFIX_TABLE (PREFIX_0F3A60) },
5865 { PREFIX_TABLE (PREFIX_0F3A61) },
5866 { PREFIX_TABLE (PREFIX_0F3A62) },
5867 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
5868 { Bad_Opcode },
5869 { Bad_Opcode },
5870 { Bad_Opcode },
5871 { Bad_Opcode },
f88c9eb0 5872 /* 68 */
592d1631
L
5873 { Bad_Opcode },
5874 { Bad_Opcode },
5875 { Bad_Opcode },
5876 { Bad_Opcode },
5877 { Bad_Opcode },
5878 { Bad_Opcode },
5879 { Bad_Opcode },
5880 { Bad_Opcode },
f88c9eb0 5881 /* 70 */
592d1631
L
5882 { Bad_Opcode },
5883 { Bad_Opcode },
5884 { Bad_Opcode },
5885 { Bad_Opcode },
5886 { Bad_Opcode },
5887 { Bad_Opcode },
5888 { Bad_Opcode },
5889 { Bad_Opcode },
f88c9eb0 5890 /* 78 */
592d1631
L
5891 { Bad_Opcode },
5892 { Bad_Opcode },
5893 { Bad_Opcode },
5894 { Bad_Opcode },
5895 { Bad_Opcode },
5896 { Bad_Opcode },
5897 { Bad_Opcode },
5898 { Bad_Opcode },
f88c9eb0 5899 /* 80 */
592d1631
L
5900 { Bad_Opcode },
5901 { Bad_Opcode },
5902 { Bad_Opcode },
5903 { Bad_Opcode },
5904 { Bad_Opcode },
5905 { Bad_Opcode },
5906 { Bad_Opcode },
5907 { Bad_Opcode },
f88c9eb0 5908 /* 88 */
592d1631
L
5909 { Bad_Opcode },
5910 { Bad_Opcode },
5911 { Bad_Opcode },
5912 { Bad_Opcode },
5913 { Bad_Opcode },
5914 { Bad_Opcode },
5915 { Bad_Opcode },
5916 { Bad_Opcode },
f88c9eb0 5917 /* 90 */
592d1631
L
5918 { Bad_Opcode },
5919 { Bad_Opcode },
5920 { Bad_Opcode },
5921 { Bad_Opcode },
5922 { Bad_Opcode },
5923 { Bad_Opcode },
5924 { Bad_Opcode },
5925 { Bad_Opcode },
f88c9eb0 5926 /* 98 */
592d1631
L
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { Bad_Opcode },
5931 { Bad_Opcode },
5932 { Bad_Opcode },
5933 { Bad_Opcode },
5934 { Bad_Opcode },
f88c9eb0 5935 /* a0 */
592d1631
L
5936 { Bad_Opcode },
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { Bad_Opcode },
5942 { Bad_Opcode },
5943 { Bad_Opcode },
f88c9eb0 5944 /* a8 */
592d1631
L
5945 { Bad_Opcode },
5946 { Bad_Opcode },
5947 { Bad_Opcode },
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { Bad_Opcode },
5951 { Bad_Opcode },
5952 { Bad_Opcode },
f88c9eb0 5953 /* b0 */
592d1631
L
5954 { Bad_Opcode },
5955 { Bad_Opcode },
5956 { Bad_Opcode },
5957 { Bad_Opcode },
5958 { Bad_Opcode },
5959 { Bad_Opcode },
5960 { Bad_Opcode },
5961 { Bad_Opcode },
f88c9eb0 5962 /* b8 */
592d1631
L
5963 { Bad_Opcode },
5964 { Bad_Opcode },
5965 { Bad_Opcode },
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { Bad_Opcode },
5970 { Bad_Opcode },
f88c9eb0 5971 /* c0 */
592d1631
L
5972 { Bad_Opcode },
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { Bad_Opcode },
5976 { Bad_Opcode },
5977 { Bad_Opcode },
5978 { Bad_Opcode },
5979 { Bad_Opcode },
f88c9eb0 5980 /* c8 */
592d1631
L
5981 { Bad_Opcode },
5982 { Bad_Opcode },
5983 { Bad_Opcode },
5984 { Bad_Opcode },
5985 { Bad_Opcode },
5986 { Bad_Opcode },
5987 { Bad_Opcode },
5988 { Bad_Opcode },
f88c9eb0 5989 /* d0 */
592d1631
L
5990 { Bad_Opcode },
5991 { Bad_Opcode },
5992 { Bad_Opcode },
5993 { Bad_Opcode },
5994 { Bad_Opcode },
5995 { Bad_Opcode },
5996 { Bad_Opcode },
5997 { Bad_Opcode },
f88c9eb0 5998 /* d8 */
592d1631
L
5999 { Bad_Opcode },
6000 { Bad_Opcode },
6001 { Bad_Opcode },
6002 { Bad_Opcode },
6003 { Bad_Opcode },
6004 { Bad_Opcode },
6005 { Bad_Opcode },
f88c9eb0
SP
6006 { PREFIX_TABLE (PREFIX_0F3ADF) },
6007 /* e0 */
592d1631
L
6008 { Bad_Opcode },
6009 { Bad_Opcode },
6010 { Bad_Opcode },
6011 { Bad_Opcode },
6012 { Bad_Opcode },
6013 { Bad_Opcode },
6014 { Bad_Opcode },
6015 { Bad_Opcode },
f88c9eb0 6016 /* e8 */
592d1631
L
6017 { Bad_Opcode },
6018 { Bad_Opcode },
6019 { Bad_Opcode },
6020 { Bad_Opcode },
6021 { Bad_Opcode },
6022 { Bad_Opcode },
6023 { Bad_Opcode },
6024 { Bad_Opcode },
f88c9eb0 6025 /* f0 */
592d1631
L
6026 { Bad_Opcode },
6027 { Bad_Opcode },
6028 { Bad_Opcode },
6029 { Bad_Opcode },
6030 { Bad_Opcode },
6031 { Bad_Opcode },
6032 { Bad_Opcode },
6033 { Bad_Opcode },
f88c9eb0 6034 /* f8 */
592d1631
L
6035 { Bad_Opcode },
6036 { Bad_Opcode },
6037 { Bad_Opcode },
6038 { Bad_Opcode },
6039 { Bad_Opcode },
6040 { Bad_Opcode },
6041 { Bad_Opcode },
6042 { Bad_Opcode },
f88c9eb0
SP
6043 },
6044
6045 /* THREE_BYTE_0F7A */
6046 {
6047 /* 00 */
592d1631
L
6048 { Bad_Opcode },
6049 { Bad_Opcode },
6050 { Bad_Opcode },
6051 { Bad_Opcode },
6052 { Bad_Opcode },
6053 { Bad_Opcode },
6054 { Bad_Opcode },
6055 { Bad_Opcode },
f88c9eb0 6056 /* 08 */
592d1631
L
6057 { Bad_Opcode },
6058 { Bad_Opcode },
6059 { Bad_Opcode },
6060 { Bad_Opcode },
6061 { Bad_Opcode },
6062 { Bad_Opcode },
6063 { Bad_Opcode },
6064 { Bad_Opcode },
f88c9eb0 6065 /* 10 */
592d1631
L
6066 { Bad_Opcode },
6067 { Bad_Opcode },
6068 { Bad_Opcode },
6069 { Bad_Opcode },
6070 { Bad_Opcode },
6071 { Bad_Opcode },
6072 { Bad_Opcode },
6073 { Bad_Opcode },
f88c9eb0 6074 /* 18 */
592d1631
L
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { Bad_Opcode },
6078 { Bad_Opcode },
6079 { Bad_Opcode },
6080 { Bad_Opcode },
6081 { Bad_Opcode },
6082 { Bad_Opcode },
f88c9eb0
SP
6083 /* 20 */
6084 { "ptest", { XX } },
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
6087 { Bad_Opcode },
6088 { Bad_Opcode },
6089 { Bad_Opcode },
6090 { Bad_Opcode },
6091 { Bad_Opcode },
f88c9eb0 6092 /* 28 */
592d1631
L
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { Bad_Opcode },
6096 { Bad_Opcode },
6097 { Bad_Opcode },
6098 { Bad_Opcode },
6099 { Bad_Opcode },
6100 { Bad_Opcode },
f88c9eb0 6101 /* 30 */
592d1631
L
6102 { Bad_Opcode },
6103 { Bad_Opcode },
6104 { Bad_Opcode },
6105 { Bad_Opcode },
6106 { Bad_Opcode },
6107 { Bad_Opcode },
6108 { Bad_Opcode },
6109 { Bad_Opcode },
f88c9eb0 6110 /* 38 */
592d1631
L
6111 { Bad_Opcode },
6112 { Bad_Opcode },
6113 { Bad_Opcode },
6114 { Bad_Opcode },
6115 { Bad_Opcode },
6116 { Bad_Opcode },
6117 { Bad_Opcode },
6118 { Bad_Opcode },
f88c9eb0 6119 /* 40 */
592d1631 6120 { Bad_Opcode },
f88c9eb0
SP
6121 { "phaddbw", { XM, EXq } },
6122 { "phaddbd", { XM, EXq } },
6123 { "phaddbq", { XM, EXq } },
592d1631
L
6124 { Bad_Opcode },
6125 { Bad_Opcode },
f88c9eb0
SP
6126 { "phaddwd", { XM, EXq } },
6127 { "phaddwq", { XM, EXq } },
6128 /* 48 */
592d1631
L
6129 { Bad_Opcode },
6130 { Bad_Opcode },
6131 { Bad_Opcode },
f88c9eb0 6132 { "phadddq", { XM, EXq } },
592d1631
L
6133 { Bad_Opcode },
6134 { Bad_Opcode },
6135 { Bad_Opcode },
6136 { Bad_Opcode },
f88c9eb0 6137 /* 50 */
592d1631 6138 { Bad_Opcode },
f88c9eb0
SP
6139 { "phaddubw", { XM, EXq } },
6140 { "phaddubd", { XM, EXq } },
6141 { "phaddubq", { XM, EXq } },
592d1631
L
6142 { Bad_Opcode },
6143 { Bad_Opcode },
f88c9eb0
SP
6144 { "phadduwd", { XM, EXq } },
6145 { "phadduwq", { XM, EXq } },
6146 /* 58 */
592d1631
L
6147 { Bad_Opcode },
6148 { Bad_Opcode },
6149 { Bad_Opcode },
f88c9eb0 6150 { "phaddudq", { XM, EXq } },
592d1631
L
6151 { Bad_Opcode },
6152 { Bad_Opcode },
6153 { Bad_Opcode },
6154 { Bad_Opcode },
f88c9eb0 6155 /* 60 */
592d1631 6156 { Bad_Opcode },
f88c9eb0
SP
6157 { "phsubbw", { XM, EXq } },
6158 { "phsubbd", { XM, EXq } },
6159 { "phsubbq", { XM, EXq } },
592d1631
L
6160 { Bad_Opcode },
6161 { Bad_Opcode },
6162 { Bad_Opcode },
6163 { Bad_Opcode },
4e7d34a6 6164 /* 68 */
592d1631
L
6165 { Bad_Opcode },
6166 { Bad_Opcode },
6167 { Bad_Opcode },
6168 { Bad_Opcode },
6169 { Bad_Opcode },
6170 { Bad_Opcode },
6171 { Bad_Opcode },
6172 { Bad_Opcode },
85f10a01 6173 /* 70 */
592d1631
L
6174 { Bad_Opcode },
6175 { Bad_Opcode },
6176 { Bad_Opcode },
6177 { Bad_Opcode },
6178 { Bad_Opcode },
6179 { Bad_Opcode },
6180 { Bad_Opcode },
6181 { Bad_Opcode },
85f10a01 6182 /* 78 */
592d1631
L
6183 { Bad_Opcode },
6184 { Bad_Opcode },
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { Bad_Opcode },
6188 { Bad_Opcode },
6189 { Bad_Opcode },
6190 { Bad_Opcode },
85f10a01 6191 /* 80 */
592d1631
L
6192 { Bad_Opcode },
6193 { Bad_Opcode },
6194 { Bad_Opcode },
6195 { Bad_Opcode },
6196 { Bad_Opcode },
6197 { Bad_Opcode },
6198 { Bad_Opcode },
6199 { Bad_Opcode },
85f10a01 6200 /* 88 */
592d1631
L
6201 { Bad_Opcode },
6202 { Bad_Opcode },
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { Bad_Opcode },
6206 { Bad_Opcode },
6207 { Bad_Opcode },
6208 { Bad_Opcode },
85f10a01 6209 /* 90 */
592d1631
L
6210 { Bad_Opcode },
6211 { Bad_Opcode },
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6214 { Bad_Opcode },
6215 { Bad_Opcode },
6216 { Bad_Opcode },
6217 { Bad_Opcode },
85f10a01 6218 /* 98 */
592d1631
L
6219 { Bad_Opcode },
6220 { Bad_Opcode },
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { Bad_Opcode },
6224 { Bad_Opcode },
6225 { Bad_Opcode },
6226 { Bad_Opcode },
85f10a01 6227 /* a0 */
592d1631
L
6228 { Bad_Opcode },
6229 { Bad_Opcode },
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { Bad_Opcode },
6233 { Bad_Opcode },
6234 { Bad_Opcode },
6235 { Bad_Opcode },
85f10a01 6236 /* a8 */
592d1631
L
6237 { Bad_Opcode },
6238 { Bad_Opcode },
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { Bad_Opcode },
6243 { Bad_Opcode },
6244 { Bad_Opcode },
85f10a01 6245 /* b0 */
592d1631
L
6246 { Bad_Opcode },
6247 { Bad_Opcode },
6248 { Bad_Opcode },
6249 { Bad_Opcode },
6250 { Bad_Opcode },
6251 { Bad_Opcode },
6252 { Bad_Opcode },
6253 { Bad_Opcode },
85f10a01 6254 /* b8 */
592d1631
L
6255 { Bad_Opcode },
6256 { Bad_Opcode },
6257 { Bad_Opcode },
6258 { Bad_Opcode },
6259 { Bad_Opcode },
6260 { Bad_Opcode },
6261 { Bad_Opcode },
6262 { Bad_Opcode },
85f10a01 6263 /* c0 */
592d1631
L
6264 { Bad_Opcode },
6265 { Bad_Opcode },
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { Bad_Opcode },
6269 { Bad_Opcode },
6270 { Bad_Opcode },
6271 { Bad_Opcode },
85f10a01 6272 /* c8 */
592d1631
L
6273 { Bad_Opcode },
6274 { Bad_Opcode },
6275 { Bad_Opcode },
6276 { Bad_Opcode },
6277 { Bad_Opcode },
6278 { Bad_Opcode },
6279 { Bad_Opcode },
6280 { Bad_Opcode },
85f10a01 6281 /* d0 */
592d1631
L
6282 { Bad_Opcode },
6283 { Bad_Opcode },
6284 { Bad_Opcode },
6285 { Bad_Opcode },
6286 { Bad_Opcode },
6287 { Bad_Opcode },
6288 { Bad_Opcode },
6289 { Bad_Opcode },
85f10a01 6290 /* d8 */
592d1631
L
6291 { Bad_Opcode },
6292 { Bad_Opcode },
6293 { Bad_Opcode },
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { Bad_Opcode },
6297 { Bad_Opcode },
6298 { Bad_Opcode },
85f10a01 6299 /* e0 */
592d1631
L
6300 { Bad_Opcode },
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6306 { Bad_Opcode },
6307 { Bad_Opcode },
85f10a01 6308 /* e8 */
592d1631
L
6309 { Bad_Opcode },
6310 { Bad_Opcode },
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { Bad_Opcode },
6314 { Bad_Opcode },
6315 { Bad_Opcode },
6316 { Bad_Opcode },
85f10a01 6317 /* f0 */
592d1631
L
6318 { Bad_Opcode },
6319 { Bad_Opcode },
6320 { Bad_Opcode },
6321 { Bad_Opcode },
6322 { Bad_Opcode },
6323 { Bad_Opcode },
6324 { Bad_Opcode },
6325 { Bad_Opcode },
85f10a01 6326 /* f8 */
592d1631
L
6327 { Bad_Opcode },
6328 { Bad_Opcode },
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6331 { Bad_Opcode },
6332 { Bad_Opcode },
6333 { Bad_Opcode },
6334 { Bad_Opcode },
85f10a01 6335 },
f88c9eb0
SP
6336};
6337
6338static const struct dis386 xop_table[][256] = {
5dd85c99 6339 /* XOP_08 */
85f10a01
MM
6340 {
6341 /* 00 */
592d1631
L
6342 { Bad_Opcode },
6343 { Bad_Opcode },
6344 { Bad_Opcode },
6345 { Bad_Opcode },
6346 { Bad_Opcode },
6347 { Bad_Opcode },
6348 { Bad_Opcode },
6349 { Bad_Opcode },
85f10a01 6350 /* 08 */
592d1631
L
6351 { Bad_Opcode },
6352 { Bad_Opcode },
6353 { Bad_Opcode },
6354 { Bad_Opcode },
6355 { Bad_Opcode },
6356 { Bad_Opcode },
6357 { Bad_Opcode },
6358 { Bad_Opcode },
85f10a01 6359 /* 10 */
592d1631
L
6360 { Bad_Opcode },
6361 { Bad_Opcode },
6362 { Bad_Opcode },
6363 { Bad_Opcode },
6364 { Bad_Opcode },
6365 { Bad_Opcode },
6366 { Bad_Opcode },
6367 { Bad_Opcode },
85f10a01 6368 /* 18 */
592d1631
L
6369 { Bad_Opcode },
6370 { Bad_Opcode },
6371 { Bad_Opcode },
6372 { Bad_Opcode },
6373 { Bad_Opcode },
6374 { Bad_Opcode },
6375 { Bad_Opcode },
6376 { Bad_Opcode },
85f10a01 6377 /* 20 */
592d1631
L
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { Bad_Opcode },
6381 { Bad_Opcode },
6382 { Bad_Opcode },
6383 { Bad_Opcode },
6384 { Bad_Opcode },
6385 { Bad_Opcode },
85f10a01 6386 /* 28 */
592d1631
L
6387 { Bad_Opcode },
6388 { Bad_Opcode },
6389 { Bad_Opcode },
6390 { Bad_Opcode },
6391 { Bad_Opcode },
6392 { Bad_Opcode },
6393 { Bad_Opcode },
6394 { Bad_Opcode },
c0f3af97 6395 /* 30 */
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
6398 { Bad_Opcode },
6399 { Bad_Opcode },
6400 { Bad_Opcode },
6401 { Bad_Opcode },
6402 { Bad_Opcode },
6403 { Bad_Opcode },
c0f3af97 6404 /* 38 */
592d1631
L
6405 { Bad_Opcode },
6406 { Bad_Opcode },
6407 { Bad_Opcode },
6408 { Bad_Opcode },
6409 { Bad_Opcode },
6410 { Bad_Opcode },
6411 { Bad_Opcode },
6412 { Bad_Opcode },
c0f3af97 6413 /* 40 */
592d1631
L
6414 { Bad_Opcode },
6415 { Bad_Opcode },
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { Bad_Opcode },
6419 { Bad_Opcode },
6420 { Bad_Opcode },
6421 { Bad_Opcode },
85f10a01 6422 /* 48 */
592d1631
L
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6425 { Bad_Opcode },
6426 { Bad_Opcode },
6427 { Bad_Opcode },
6428 { Bad_Opcode },
6429 { Bad_Opcode },
6430 { Bad_Opcode },
c0f3af97 6431 /* 50 */
592d1631
L
6432 { Bad_Opcode },
6433 { Bad_Opcode },
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { Bad_Opcode },
6437 { Bad_Opcode },
6438 { Bad_Opcode },
6439 { Bad_Opcode },
85f10a01 6440 /* 58 */
592d1631
L
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { Bad_Opcode },
6444 { Bad_Opcode },
6445 { Bad_Opcode },
6446 { Bad_Opcode },
6447 { Bad_Opcode },
6448 { Bad_Opcode },
c1e679ec 6449 /* 60 */
592d1631
L
6450 { Bad_Opcode },
6451 { Bad_Opcode },
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { Bad_Opcode },
6455 { Bad_Opcode },
6456 { Bad_Opcode },
6457 { Bad_Opcode },
c0f3af97 6458 /* 68 */
592d1631
L
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { Bad_Opcode },
6462 { Bad_Opcode },
6463 { Bad_Opcode },
6464 { Bad_Opcode },
6465 { Bad_Opcode },
6466 { Bad_Opcode },
85f10a01 6467 /* 70 */
592d1631
L
6468 { Bad_Opcode },
6469 { Bad_Opcode },
6470 { Bad_Opcode },
6471 { Bad_Opcode },
6472 { Bad_Opcode },
6473 { Bad_Opcode },
6474 { Bad_Opcode },
6475 { Bad_Opcode },
85f10a01 6476 /* 78 */
592d1631
L
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { Bad_Opcode },
6480 { Bad_Opcode },
6481 { Bad_Opcode },
6482 { Bad_Opcode },
6483 { Bad_Opcode },
6484 { Bad_Opcode },
85f10a01 6485 /* 80 */
592d1631
L
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { Bad_Opcode },
6490 { Bad_Opcode },
5dd85c99
SP
6491 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6492 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6493 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6494 /* 88 */
592d1631
L
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { Bad_Opcode },
6498 { Bad_Opcode },
6499 { Bad_Opcode },
6500 { Bad_Opcode },
5dd85c99
SP
6501 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6502 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6503 /* 90 */
592d1631
L
6504 { Bad_Opcode },
6505 { Bad_Opcode },
6506 { Bad_Opcode },
6507 { Bad_Opcode },
6508 { Bad_Opcode },
5dd85c99
SP
6509 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6510 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6511 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6512 /* 98 */
592d1631
L
6513 { Bad_Opcode },
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { Bad_Opcode },
6518 { Bad_Opcode },
5dd85c99
SP
6519 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6520 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6521 /* a0 */
592d1631
L
6522 { Bad_Opcode },
6523 { Bad_Opcode },
5dd85c99
SP
6524 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6525 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
6526 { Bad_Opcode },
6527 { Bad_Opcode },
5dd85c99 6528 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6529 { Bad_Opcode },
5dd85c99 6530 /* a8 */
592d1631
L
6531 { Bad_Opcode },
6532 { Bad_Opcode },
6533 { Bad_Opcode },
6534 { Bad_Opcode },
6535 { Bad_Opcode },
6536 { Bad_Opcode },
6537 { Bad_Opcode },
6538 { Bad_Opcode },
5dd85c99 6539 /* b0 */
592d1631
L
6540 { Bad_Opcode },
6541 { Bad_Opcode },
6542 { Bad_Opcode },
6543 { Bad_Opcode },
6544 { Bad_Opcode },
6545 { Bad_Opcode },
5dd85c99 6546 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6547 { Bad_Opcode },
5dd85c99 6548 /* b8 */
592d1631
L
6549 { Bad_Opcode },
6550 { Bad_Opcode },
6551 { Bad_Opcode },
6552 { Bad_Opcode },
6553 { Bad_Opcode },
6554 { Bad_Opcode },
6555 { Bad_Opcode },
6556 { Bad_Opcode },
5dd85c99
SP
6557 /* c0 */
6558 { "vprotb", { XM, Vex_2src_1, Ib } },
6559 { "vprotw", { XM, Vex_2src_1, Ib } },
6560 { "vprotd", { XM, Vex_2src_1, Ib } },
6561 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
6562 { Bad_Opcode },
6563 { Bad_Opcode },
6564 { Bad_Opcode },
6565 { Bad_Opcode },
5dd85c99 6566 /* c8 */
592d1631
L
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { Bad_Opcode },
5dd85c99
SP
6571 { "vpcomb", { XM, Vex128, EXx, Ib } },
6572 { "vpcomw", { XM, Vex128, EXx, Ib } },
6573 { "vpcomd", { XM, Vex128, EXx, Ib } },
6574 { "vpcomq", { XM, Vex128, EXx, Ib } },
6575 /* d0 */
592d1631
L
6576 { Bad_Opcode },
6577 { Bad_Opcode },
6578 { Bad_Opcode },
6579 { Bad_Opcode },
6580 { Bad_Opcode },
6581 { Bad_Opcode },
6582 { Bad_Opcode },
6583 { Bad_Opcode },
5dd85c99 6584 /* d8 */
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6588 { Bad_Opcode },
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6591 { Bad_Opcode },
6592 { Bad_Opcode },
5dd85c99 6593 /* e0 */
592d1631
L
6594 { Bad_Opcode },
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { Bad_Opcode },
6599 { Bad_Opcode },
6600 { Bad_Opcode },
6601 { Bad_Opcode },
5dd85c99 6602 /* e8 */
592d1631
L
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { Bad_Opcode },
5dd85c99
SP
6607 { "vpcomub", { XM, Vex128, EXx, Ib } },
6608 { "vpcomuw", { XM, Vex128, EXx, Ib } },
6609 { "vpcomud", { XM, Vex128, EXx, Ib } },
6610 { "vpcomuq", { XM, Vex128, EXx, Ib } },
6611 /* f0 */
592d1631
L
6612 { Bad_Opcode },
6613 { Bad_Opcode },
6614 { Bad_Opcode },
6615 { Bad_Opcode },
6616 { Bad_Opcode },
6617 { Bad_Opcode },
6618 { Bad_Opcode },
6619 { Bad_Opcode },
5dd85c99 6620 /* f8 */
592d1631
L
6621 { Bad_Opcode },
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6624 { Bad_Opcode },
6625 { Bad_Opcode },
6626 { Bad_Opcode },
6627 { Bad_Opcode },
6628 { Bad_Opcode },
5dd85c99
SP
6629 },
6630 /* XOP_09 */
6631 {
6632 /* 00 */
592d1631
L
6633 { Bad_Opcode },
6634 { Bad_Opcode },
6635 { Bad_Opcode },
6636 { Bad_Opcode },
6637 { Bad_Opcode },
6638 { Bad_Opcode },
6639 { Bad_Opcode },
6640 { Bad_Opcode },
5dd85c99 6641 /* 08 */
592d1631
L
6642 { Bad_Opcode },
6643 { Bad_Opcode },
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
6647 { Bad_Opcode },
6648 { Bad_Opcode },
6649 { Bad_Opcode },
5dd85c99 6650 /* 10 */
592d1631
L
6651 { Bad_Opcode },
6652 { Bad_Opcode },
5dd85c99 6653 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
6654 { Bad_Opcode },
6655 { Bad_Opcode },
6656 { Bad_Opcode },
6657 { Bad_Opcode },
6658 { Bad_Opcode },
5dd85c99 6659 /* 18 */
592d1631
L
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
6664 { Bad_Opcode },
6665 { Bad_Opcode },
6666 { Bad_Opcode },
6667 { Bad_Opcode },
5dd85c99 6668 /* 20 */
592d1631
L
6669 { Bad_Opcode },
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
6674 { Bad_Opcode },
6675 { Bad_Opcode },
6676 { Bad_Opcode },
5dd85c99 6677 /* 28 */
592d1631
L
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
6683 { Bad_Opcode },
6684 { Bad_Opcode },
6685 { Bad_Opcode },
5dd85c99 6686 /* 30 */
592d1631
L
6687 { Bad_Opcode },
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { Bad_Opcode },
6694 { Bad_Opcode },
5dd85c99 6695 /* 38 */
592d1631
L
6696 { Bad_Opcode },
6697 { Bad_Opcode },
6698 { Bad_Opcode },
6699 { Bad_Opcode },
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { Bad_Opcode },
6703 { Bad_Opcode },
5dd85c99 6704 /* 40 */
592d1631
L
6705 { Bad_Opcode },
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { Bad_Opcode },
6709 { Bad_Opcode },
6710 { Bad_Opcode },
6711 { Bad_Opcode },
6712 { Bad_Opcode },
5dd85c99 6713 /* 48 */
592d1631
L
6714 { Bad_Opcode },
6715 { Bad_Opcode },
6716 { Bad_Opcode },
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { Bad_Opcode },
5dd85c99 6722 /* 50 */
592d1631
L
6723 { Bad_Opcode },
6724 { Bad_Opcode },
6725 { Bad_Opcode },
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { Bad_Opcode },
6730 { Bad_Opcode },
5dd85c99 6731 /* 58 */
592d1631
L
6732 { Bad_Opcode },
6733 { Bad_Opcode },
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6739 { Bad_Opcode },
5dd85c99 6740 /* 60 */
592d1631
L
6741 { Bad_Opcode },
6742 { Bad_Opcode },
6743 { Bad_Opcode },
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
6747 { Bad_Opcode },
6748 { Bad_Opcode },
5dd85c99 6749 /* 68 */
592d1631
L
6750 { Bad_Opcode },
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6757 { Bad_Opcode },
5dd85c99 6758 /* 70 */
592d1631
L
6759 { Bad_Opcode },
6760 { Bad_Opcode },
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
6766 { Bad_Opcode },
5dd85c99 6767 /* 78 */
592d1631
L
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
6775 { Bad_Opcode },
5dd85c99
SP
6776 /* 80 */
6777 { VEX_LEN_TABLE (VEX_LEN_XOP_09_80) },
6778 { VEX_LEN_TABLE (VEX_LEN_XOP_09_81) },
6779 { "vfrczss", { XM, EXd } },
6780 { "vfrczsd", { XM, EXq } },
592d1631
L
6781 { Bad_Opcode },
6782 { Bad_Opcode },
6783 { Bad_Opcode },
6784 { Bad_Opcode },
5dd85c99 6785 /* 88 */
592d1631
L
6786 { Bad_Opcode },
6787 { Bad_Opcode },
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
6793 { Bad_Opcode },
5dd85c99
SP
6794 /* 90 */
6795 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
6796 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
6797 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
6798 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
6799 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
6800 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
6801 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
6802 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
6803 /* 98 */
6804 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
6805 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
6806 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
6807 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
6808 { Bad_Opcode },
6809 { Bad_Opcode },
6810 { Bad_Opcode },
6811 { Bad_Opcode },
5dd85c99 6812 /* a0 */
592d1631
L
6813 { Bad_Opcode },
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
6817 { Bad_Opcode },
6818 { Bad_Opcode },
6819 { Bad_Opcode },
6820 { Bad_Opcode },
5dd85c99 6821 /* a8 */
592d1631
L
6822 { Bad_Opcode },
6823 { Bad_Opcode },
6824 { Bad_Opcode },
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
6828 { Bad_Opcode },
6829 { Bad_Opcode },
5dd85c99 6830 /* b0 */
592d1631
L
6831 { Bad_Opcode },
6832 { Bad_Opcode },
6833 { Bad_Opcode },
6834 { Bad_Opcode },
6835 { Bad_Opcode },
6836 { Bad_Opcode },
6837 { Bad_Opcode },
6838 { Bad_Opcode },
5dd85c99 6839 /* b8 */
592d1631
L
6840 { Bad_Opcode },
6841 { Bad_Opcode },
6842 { Bad_Opcode },
6843 { Bad_Opcode },
6844 { Bad_Opcode },
6845 { Bad_Opcode },
6846 { Bad_Opcode },
6847 { Bad_Opcode },
5dd85c99 6848 /* c0 */
592d1631 6849 { Bad_Opcode },
5dd85c99
SP
6850 { "vphaddbw", { XM, EXxmm } },
6851 { "vphaddbd", { XM, EXxmm } },
6852 { "vphaddbq", { XM, EXxmm } },
592d1631
L
6853 { Bad_Opcode },
6854 { Bad_Opcode },
5dd85c99
SP
6855 { "vphaddwd", { XM, EXxmm } },
6856 { "vphaddwq", { XM, EXxmm } },
6857 /* c8 */
592d1631
L
6858 { Bad_Opcode },
6859 { Bad_Opcode },
6860 { Bad_Opcode },
5dd85c99 6861 { "vphadddq", { XM, EXxmm } },
592d1631
L
6862 { Bad_Opcode },
6863 { Bad_Opcode },
6864 { Bad_Opcode },
6865 { Bad_Opcode },
5dd85c99 6866 /* d0 */
592d1631 6867 { Bad_Opcode },
5dd85c99
SP
6868 { "vphaddubw", { XM, EXxmm } },
6869 { "vphaddubd", { XM, EXxmm } },
6870 { "vphaddubq", { XM, EXxmm } },
592d1631
L
6871 { Bad_Opcode },
6872 { Bad_Opcode },
5dd85c99
SP
6873 { "vphadduwd", { XM, EXxmm } },
6874 { "vphadduwq", { XM, EXxmm } },
6875 /* d8 */
592d1631
L
6876 { Bad_Opcode },
6877 { Bad_Opcode },
6878 { Bad_Opcode },
5dd85c99 6879 { "vphaddudq", { XM, EXxmm } },
592d1631
L
6880 { Bad_Opcode },
6881 { Bad_Opcode },
6882 { Bad_Opcode },
6883 { Bad_Opcode },
5dd85c99 6884 /* e0 */
592d1631 6885 { Bad_Opcode },
5dd85c99
SP
6886 { "vphsubbw", { XM, EXxmm } },
6887 { "vphsubwd", { XM, EXxmm } },
6888 { "vphsubdq", { XM, EXxmm } },
592d1631
L
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
6892 { Bad_Opcode },
4e7d34a6 6893 /* e8 */
592d1631
L
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { Bad_Opcode },
6898 { Bad_Opcode },
6899 { Bad_Opcode },
6900 { Bad_Opcode },
6901 { Bad_Opcode },
4e7d34a6 6902 /* f0 */
592d1631
L
6903 { Bad_Opcode },
6904 { Bad_Opcode },
6905 { Bad_Opcode },
6906 { Bad_Opcode },
6907 { Bad_Opcode },
6908 { Bad_Opcode },
6909 { Bad_Opcode },
6910 { Bad_Opcode },
4e7d34a6 6911 /* f8 */
592d1631
L
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { Bad_Opcode },
6919 { Bad_Opcode },
4e7d34a6 6920 },
f88c9eb0 6921 /* XOP_0A */
4e7d34a6
L
6922 {
6923 /* 00 */
592d1631
L
6924 { Bad_Opcode },
6925 { Bad_Opcode },
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
4e7d34a6 6932 /* 08 */
592d1631
L
6933 { Bad_Opcode },
6934 { Bad_Opcode },
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
4e7d34a6 6941 /* 10 */
592d1631
L
6942 { Bad_Opcode },
6943 { Bad_Opcode },
f88c9eb0 6944 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
4e7d34a6 6950 /* 18 */
592d1631
L
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
4e7d34a6 6959 /* 20 */
592d1631
L
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
4e7d34a6 6968 /* 28 */
592d1631
L
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
4e7d34a6 6977 /* 30 */
592d1631
L
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
c0f3af97 6986 /* 38 */
592d1631
L
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
c0f3af97 6995 /* 40 */
592d1631
L
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
c1e679ec 7004 /* 48 */
592d1631
L
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
c1e679ec 7013 /* 50 */
592d1631
L
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
4e7d34a6 7022 /* 58 */
592d1631
L
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
4e7d34a6 7031 /* 60 */
592d1631
L
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
4e7d34a6 7040 /* 68 */
592d1631
L
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
4e7d34a6 7049 /* 70 */
592d1631
L
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
4e7d34a6 7058 /* 78 */
592d1631
L
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
4e7d34a6 7067 /* 80 */
592d1631
L
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
4e7d34a6 7076 /* 88 */
592d1631
L
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
4e7d34a6 7085 /* 90 */
592d1631
L
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
4e7d34a6 7094 /* 98 */
592d1631
L
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
4e7d34a6 7103 /* a0 */
592d1631
L
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
4e7d34a6 7112 /* a8 */
592d1631
L
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
d5d7db8e 7121 /* b0 */
592d1631
L
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
85f10a01 7130 /* b8 */
592d1631
L
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
85f10a01 7139 /* c0 */
592d1631
L
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
85f10a01 7148 /* c8 */
592d1631
L
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
85f10a01 7157 /* d0 */
592d1631
L
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
85f10a01 7166 /* d8 */
592d1631
L
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
85f10a01 7175 /* e0 */
592d1631
L
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
85f10a01 7184 /* e8 */
592d1631
L
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
85f10a01 7193 /* f0 */
592d1631
L
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
85f10a01 7202 /* f8 */
592d1631
L
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
85f10a01 7211 },
c0f3af97
L
7212};
7213
7214static const struct dis386 vex_table[][256] = {
7215 /* VEX_0F */
85f10a01
MM
7216 {
7217 /* 00 */
592d1631
L
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
85f10a01 7226 /* 08 */
592d1631
L
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
c0f3af97
L
7235 /* 10 */
7236 { PREFIX_TABLE (PREFIX_VEX_10) },
7237 { PREFIX_TABLE (PREFIX_VEX_11) },
7238 { PREFIX_TABLE (PREFIX_VEX_12) },
7239 { MOD_TABLE (MOD_VEX_13) },
9e30b8e0
L
7240 { VEX_W_TABLE (VEX_W_14) },
7241 { VEX_W_TABLE (VEX_W_15) },
c0f3af97
L
7242 { PREFIX_TABLE (PREFIX_VEX_16) },
7243 { MOD_TABLE (MOD_VEX_17) },
7244 /* 18 */
592d1631
L
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
c0f3af97 7253 /* 20 */
592d1631
L
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
c0f3af97 7262 /* 28 */
9e30b8e0
L
7263 { VEX_W_TABLE (VEX_W_28) },
7264 { VEX_W_TABLE (VEX_W_29) },
c0f3af97
L
7265 { PREFIX_TABLE (PREFIX_VEX_2A) },
7266 { MOD_TABLE (MOD_VEX_2B) },
7267 { PREFIX_TABLE (PREFIX_VEX_2C) },
7268 { PREFIX_TABLE (PREFIX_VEX_2D) },
7269 { PREFIX_TABLE (PREFIX_VEX_2E) },
7270 { PREFIX_TABLE (PREFIX_VEX_2F) },
85f10a01 7271 /* 30 */
592d1631
L
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
4e7d34a6 7280 /* 38 */
592d1631
L
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
d5d7db8e 7289 /* 40 */
592d1631
L
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
85f10a01 7298 /* 48 */
592d1631
L
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
d5d7db8e 7307 /* 50 */
976f1fde 7308 { MOD_TABLE (MOD_VEX_50) },
c0f3af97
L
7309 { PREFIX_TABLE (PREFIX_VEX_51) },
7310 { PREFIX_TABLE (PREFIX_VEX_52) },
7311 { PREFIX_TABLE (PREFIX_VEX_53) },
7312 { "vandpX", { XM, Vex, EXx } },
7313 { "vandnpX", { XM, Vex, EXx } },
7314 { "vorpX", { XM, Vex, EXx } },
7315 { "vxorpX", { XM, Vex, EXx } },
7316 /* 58 */
7317 { PREFIX_TABLE (PREFIX_VEX_58) },
7318 { PREFIX_TABLE (PREFIX_VEX_59) },
7319 { PREFIX_TABLE (PREFIX_VEX_5A) },
7320 { PREFIX_TABLE (PREFIX_VEX_5B) },
7321 { PREFIX_TABLE (PREFIX_VEX_5C) },
7322 { PREFIX_TABLE (PREFIX_VEX_5D) },
7323 { PREFIX_TABLE (PREFIX_VEX_5E) },
7324 { PREFIX_TABLE (PREFIX_VEX_5F) },
7325 /* 60 */
7326 { PREFIX_TABLE (PREFIX_VEX_60) },
7327 { PREFIX_TABLE (PREFIX_VEX_61) },
7328 { PREFIX_TABLE (PREFIX_VEX_62) },
7329 { PREFIX_TABLE (PREFIX_VEX_63) },
7330 { PREFIX_TABLE (PREFIX_VEX_64) },
7331 { PREFIX_TABLE (PREFIX_VEX_65) },
7332 { PREFIX_TABLE (PREFIX_VEX_66) },
7333 { PREFIX_TABLE (PREFIX_VEX_67) },
7334 /* 68 */
7335 { PREFIX_TABLE (PREFIX_VEX_68) },
7336 { PREFIX_TABLE (PREFIX_VEX_69) },
7337 { PREFIX_TABLE (PREFIX_VEX_6A) },
7338 { PREFIX_TABLE (PREFIX_VEX_6B) },
7339 { PREFIX_TABLE (PREFIX_VEX_6C) },
7340 { PREFIX_TABLE (PREFIX_VEX_6D) },
7341 { PREFIX_TABLE (PREFIX_VEX_6E) },
7342 { PREFIX_TABLE (PREFIX_VEX_6F) },
7343 /* 70 */
7344 { PREFIX_TABLE (PREFIX_VEX_70) },
7345 { REG_TABLE (REG_VEX_71) },
7346 { REG_TABLE (REG_VEX_72) },
7347 { REG_TABLE (REG_VEX_73) },
7348 { PREFIX_TABLE (PREFIX_VEX_74) },
7349 { PREFIX_TABLE (PREFIX_VEX_75) },
7350 { PREFIX_TABLE (PREFIX_VEX_76) },
7351 { PREFIX_TABLE (PREFIX_VEX_77) },
7352 /* 78 */
592d1631
L
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
c0f3af97
L
7357 { PREFIX_TABLE (PREFIX_VEX_7C) },
7358 { PREFIX_TABLE (PREFIX_VEX_7D) },
7359 { PREFIX_TABLE (PREFIX_VEX_7E) },
7360 { PREFIX_TABLE (PREFIX_VEX_7F) },
7361 /* 80 */
592d1631
L
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
c0f3af97 7370 /* 88 */
592d1631
L
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
c0f3af97 7379 /* 90 */
592d1631
L
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
c0f3af97 7388 /* 98 */
592d1631
L
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
c0f3af97 7397 /* a0 */
592d1631
L
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
c0f3af97 7406 /* a8 */
592d1631
L
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
c0f3af97 7413 { REG_TABLE (REG_VEX_AE) },
592d1631 7414 { Bad_Opcode },
c0f3af97 7415 /* b0 */
592d1631
L
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
c0f3af97 7424 /* b8 */
592d1631
L
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
c0f3af97 7433 /* c0 */
592d1631
L
7434 { Bad_Opcode },
7435 { Bad_Opcode },
c0f3af97 7436 { PREFIX_TABLE (PREFIX_VEX_C2) },
592d1631 7437 { Bad_Opcode },
c0f3af97
L
7438 { PREFIX_TABLE (PREFIX_VEX_C4) },
7439 { PREFIX_TABLE (PREFIX_VEX_C5) },
7440 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 7441 { Bad_Opcode },
c0f3af97 7442 /* c8 */
592d1631
L
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
c0f3af97
L
7451 /* d0 */
7452 { PREFIX_TABLE (PREFIX_VEX_D0) },
7453 { PREFIX_TABLE (PREFIX_VEX_D1) },
7454 { PREFIX_TABLE (PREFIX_VEX_D2) },
7455 { PREFIX_TABLE (PREFIX_VEX_D3) },
7456 { PREFIX_TABLE (PREFIX_VEX_D4) },
7457 { PREFIX_TABLE (PREFIX_VEX_D5) },
7458 { PREFIX_TABLE (PREFIX_VEX_D6) },
7459 { PREFIX_TABLE (PREFIX_VEX_D7) },
7460 /* d8 */
7461 { PREFIX_TABLE (PREFIX_VEX_D8) },
7462 { PREFIX_TABLE (PREFIX_VEX_D9) },
7463 { PREFIX_TABLE (PREFIX_VEX_DA) },
7464 { PREFIX_TABLE (PREFIX_VEX_DB) },
7465 { PREFIX_TABLE (PREFIX_VEX_DC) },
7466 { PREFIX_TABLE (PREFIX_VEX_DD) },
7467 { PREFIX_TABLE (PREFIX_VEX_DE) },
7468 { PREFIX_TABLE (PREFIX_VEX_DF) },
7469 /* e0 */
7470 { PREFIX_TABLE (PREFIX_VEX_E0) },
7471 { PREFIX_TABLE (PREFIX_VEX_E1) },
7472 { PREFIX_TABLE (PREFIX_VEX_E2) },
7473 { PREFIX_TABLE (PREFIX_VEX_E3) },
7474 { PREFIX_TABLE (PREFIX_VEX_E4) },
7475 { PREFIX_TABLE (PREFIX_VEX_E5) },
7476 { PREFIX_TABLE (PREFIX_VEX_E6) },
7477 { PREFIX_TABLE (PREFIX_VEX_E7) },
7478 /* e8 */
7479 { PREFIX_TABLE (PREFIX_VEX_E8) },
7480 { PREFIX_TABLE (PREFIX_VEX_E9) },
7481 { PREFIX_TABLE (PREFIX_VEX_EA) },
7482 { PREFIX_TABLE (PREFIX_VEX_EB) },
7483 { PREFIX_TABLE (PREFIX_VEX_EC) },
7484 { PREFIX_TABLE (PREFIX_VEX_ED) },
7485 { PREFIX_TABLE (PREFIX_VEX_EE) },
7486 { PREFIX_TABLE (PREFIX_VEX_EF) },
7487 /* f0 */
7488 { PREFIX_TABLE (PREFIX_VEX_F0) },
7489 { PREFIX_TABLE (PREFIX_VEX_F1) },
7490 { PREFIX_TABLE (PREFIX_VEX_F2) },
7491 { PREFIX_TABLE (PREFIX_VEX_F3) },
7492 { PREFIX_TABLE (PREFIX_VEX_F4) },
7493 { PREFIX_TABLE (PREFIX_VEX_F5) },
7494 { PREFIX_TABLE (PREFIX_VEX_F6) },
7495 { PREFIX_TABLE (PREFIX_VEX_F7) },
7496 /* f8 */
7497 { PREFIX_TABLE (PREFIX_VEX_F8) },
7498 { PREFIX_TABLE (PREFIX_VEX_F9) },
7499 { PREFIX_TABLE (PREFIX_VEX_FA) },
7500 { PREFIX_TABLE (PREFIX_VEX_FB) },
7501 { PREFIX_TABLE (PREFIX_VEX_FC) },
7502 { PREFIX_TABLE (PREFIX_VEX_FD) },
7503 { PREFIX_TABLE (PREFIX_VEX_FE) },
592d1631 7504 { Bad_Opcode },
c0f3af97
L
7505 },
7506 /* VEX_0F38 */
7507 {
7508 /* 00 */
7509 { PREFIX_TABLE (PREFIX_VEX_3800) },
7510 { PREFIX_TABLE (PREFIX_VEX_3801) },
7511 { PREFIX_TABLE (PREFIX_VEX_3802) },
7512 { PREFIX_TABLE (PREFIX_VEX_3803) },
7513 { PREFIX_TABLE (PREFIX_VEX_3804) },
7514 { PREFIX_TABLE (PREFIX_VEX_3805) },
7515 { PREFIX_TABLE (PREFIX_VEX_3806) },
7516 { PREFIX_TABLE (PREFIX_VEX_3807) },
7517 /* 08 */
7518 { PREFIX_TABLE (PREFIX_VEX_3808) },
7519 { PREFIX_TABLE (PREFIX_VEX_3809) },
7520 { PREFIX_TABLE (PREFIX_VEX_380A) },
7521 { PREFIX_TABLE (PREFIX_VEX_380B) },
7522 { PREFIX_TABLE (PREFIX_VEX_380C) },
7523 { PREFIX_TABLE (PREFIX_VEX_380D) },
7524 { PREFIX_TABLE (PREFIX_VEX_380E) },
7525 { PREFIX_TABLE (PREFIX_VEX_380F) },
7526 /* 10 */
592d1631
L
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
c0f3af97
L
7534 { PREFIX_TABLE (PREFIX_VEX_3817) },
7535 /* 18 */
7536 { PREFIX_TABLE (PREFIX_VEX_3818) },
7537 { PREFIX_TABLE (PREFIX_VEX_3819) },
7538 { PREFIX_TABLE (PREFIX_VEX_381A) },
592d1631 7539 { Bad_Opcode },
c0f3af97
L
7540 { PREFIX_TABLE (PREFIX_VEX_381C) },
7541 { PREFIX_TABLE (PREFIX_VEX_381D) },
7542 { PREFIX_TABLE (PREFIX_VEX_381E) },
592d1631 7543 { Bad_Opcode },
c0f3af97
L
7544 /* 20 */
7545 { PREFIX_TABLE (PREFIX_VEX_3820) },
7546 { PREFIX_TABLE (PREFIX_VEX_3821) },
7547 { PREFIX_TABLE (PREFIX_VEX_3822) },
7548 { PREFIX_TABLE (PREFIX_VEX_3823) },
7549 { PREFIX_TABLE (PREFIX_VEX_3824) },
7550 { PREFIX_TABLE (PREFIX_VEX_3825) },
592d1631
L
7551 { Bad_Opcode },
7552 { Bad_Opcode },
c0f3af97
L
7553 /* 28 */
7554 { PREFIX_TABLE (PREFIX_VEX_3828) },
7555 { PREFIX_TABLE (PREFIX_VEX_3829) },
7556 { PREFIX_TABLE (PREFIX_VEX_382A) },
7557 { PREFIX_TABLE (PREFIX_VEX_382B) },
7558 { PREFIX_TABLE (PREFIX_VEX_382C) },
7559 { PREFIX_TABLE (PREFIX_VEX_382D) },
7560 { PREFIX_TABLE (PREFIX_VEX_382E) },
7561 { PREFIX_TABLE (PREFIX_VEX_382F) },
7562 /* 30 */
7563 { PREFIX_TABLE (PREFIX_VEX_3830) },
7564 { PREFIX_TABLE (PREFIX_VEX_3831) },
7565 { PREFIX_TABLE (PREFIX_VEX_3832) },
7566 { PREFIX_TABLE (PREFIX_VEX_3833) },
7567 { PREFIX_TABLE (PREFIX_VEX_3834) },
7568 { PREFIX_TABLE (PREFIX_VEX_3835) },
592d1631 7569 { Bad_Opcode },
c0f3af97
L
7570 { PREFIX_TABLE (PREFIX_VEX_3837) },
7571 /* 38 */
7572 { PREFIX_TABLE (PREFIX_VEX_3838) },
7573 { PREFIX_TABLE (PREFIX_VEX_3839) },
7574 { PREFIX_TABLE (PREFIX_VEX_383A) },
7575 { PREFIX_TABLE (PREFIX_VEX_383B) },
7576 { PREFIX_TABLE (PREFIX_VEX_383C) },
7577 { PREFIX_TABLE (PREFIX_VEX_383D) },
7578 { PREFIX_TABLE (PREFIX_VEX_383E) },
7579 { PREFIX_TABLE (PREFIX_VEX_383F) },
7580 /* 40 */
7581 { PREFIX_TABLE (PREFIX_VEX_3840) },
7582 { PREFIX_TABLE (PREFIX_VEX_3841) },
592d1631
L
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
c0f3af97 7589 /* 48 */
592d1631
L
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
c0f3af97 7598 /* 50 */
592d1631
L
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
c0f3af97 7607 /* 58 */
592d1631
L
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
c0f3af97 7616 /* 60 */
592d1631
L
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
c0f3af97 7625 /* 68 */
592d1631
L
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
c0f3af97 7634 /* 70 */
592d1631
L
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
c0f3af97 7643 /* 78 */
592d1631
L
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
c0f3af97 7652 /* 80 */
592d1631
L
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
c0f3af97 7661 /* 88 */
592d1631
L
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
c0f3af97 7670 /* 90 */
592d1631
L
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
0bfee649
L
7677 { PREFIX_TABLE (PREFIX_VEX_3896) },
7678 { PREFIX_TABLE (PREFIX_VEX_3897) },
c0f3af97 7679 /* 98 */
0bfee649
L
7680 { PREFIX_TABLE (PREFIX_VEX_3898) },
7681 { PREFIX_TABLE (PREFIX_VEX_3899) },
7682 { PREFIX_TABLE (PREFIX_VEX_389A) },
7683 { PREFIX_TABLE (PREFIX_VEX_389B) },
7684 { PREFIX_TABLE (PREFIX_VEX_389C) },
7685 { PREFIX_TABLE (PREFIX_VEX_389D) },
7686 { PREFIX_TABLE (PREFIX_VEX_389E) },
7687 { PREFIX_TABLE (PREFIX_VEX_389F) },
c0f3af97 7688 /* a0 */
592d1631
L
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
0bfee649
L
7695 { PREFIX_TABLE (PREFIX_VEX_38A6) },
7696 { PREFIX_TABLE (PREFIX_VEX_38A7) },
c0f3af97 7697 /* a8 */
0bfee649
L
7698 { PREFIX_TABLE (PREFIX_VEX_38A8) },
7699 { PREFIX_TABLE (PREFIX_VEX_38A9) },
7700 { PREFIX_TABLE (PREFIX_VEX_38AA) },
7701 { PREFIX_TABLE (PREFIX_VEX_38AB) },
7702 { PREFIX_TABLE (PREFIX_VEX_38AC) },
7703 { PREFIX_TABLE (PREFIX_VEX_38AD) },
7704 { PREFIX_TABLE (PREFIX_VEX_38AE) },
7705 { PREFIX_TABLE (PREFIX_VEX_38AF) },
c0f3af97 7706 /* b0 */
592d1631
L
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
0bfee649
L
7713 { PREFIX_TABLE (PREFIX_VEX_38B6) },
7714 { PREFIX_TABLE (PREFIX_VEX_38B7) },
c0f3af97 7715 /* b8 */
0bfee649
L
7716 { PREFIX_TABLE (PREFIX_VEX_38B8) },
7717 { PREFIX_TABLE (PREFIX_VEX_38B9) },
7718 { PREFIX_TABLE (PREFIX_VEX_38BA) },
7719 { PREFIX_TABLE (PREFIX_VEX_38BB) },
7720 { PREFIX_TABLE (PREFIX_VEX_38BC) },
7721 { PREFIX_TABLE (PREFIX_VEX_38BD) },
7722 { PREFIX_TABLE (PREFIX_VEX_38BE) },
7723 { PREFIX_TABLE (PREFIX_VEX_38BF) },
c0f3af97 7724 /* c0 */
592d1631
L
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
c0f3af97 7733 /* c8 */
592d1631
L
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
c0f3af97 7742 /* d0 */
592d1631
L
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
c0f3af97 7751 /* d8 */
592d1631
L
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
a5ff0eb2
L
7755 { PREFIX_TABLE (PREFIX_VEX_38DB) },
7756 { PREFIX_TABLE (PREFIX_VEX_38DC) },
7757 { PREFIX_TABLE (PREFIX_VEX_38DD) },
7758 { PREFIX_TABLE (PREFIX_VEX_38DE) },
7759 { PREFIX_TABLE (PREFIX_VEX_38DF) },
c0f3af97 7760 /* e0 */
592d1631
L
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
c0f3af97 7769 /* e8 */
592d1631
L
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
c0f3af97 7778 /* f0 */
592d1631
L
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
c0f3af97 7787 /* f8 */
592d1631
L
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
c0f3af97
L
7796 },
7797 /* VEX_0F3A */
7798 {
7799 /* 00 */
592d1631
L
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
c0f3af97
L
7804 { PREFIX_TABLE (PREFIX_VEX_3A04) },
7805 { PREFIX_TABLE (PREFIX_VEX_3A05) },
7806 { PREFIX_TABLE (PREFIX_VEX_3A06) },
592d1631 7807 { Bad_Opcode },
c0f3af97
L
7808 /* 08 */
7809 { PREFIX_TABLE (PREFIX_VEX_3A08) },
7810 { PREFIX_TABLE (PREFIX_VEX_3A09) },
7811 { PREFIX_TABLE (PREFIX_VEX_3A0A) },
7812 { PREFIX_TABLE (PREFIX_VEX_3A0B) },
7813 { PREFIX_TABLE (PREFIX_VEX_3A0C) },
7814 { PREFIX_TABLE (PREFIX_VEX_3A0D) },
7815 { PREFIX_TABLE (PREFIX_VEX_3A0E) },
7816 { PREFIX_TABLE (PREFIX_VEX_3A0F) },
7817 /* 10 */
592d1631
L
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
c0f3af97
L
7822 { PREFIX_TABLE (PREFIX_VEX_3A14) },
7823 { PREFIX_TABLE (PREFIX_VEX_3A15) },
7824 { PREFIX_TABLE (PREFIX_VEX_3A16) },
7825 { PREFIX_TABLE (PREFIX_VEX_3A17) },
7826 /* 18 */
7827 { PREFIX_TABLE (PREFIX_VEX_3A18) },
7828 { PREFIX_TABLE (PREFIX_VEX_3A19) },
592d1631
L
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
c0f3af97
L
7835 /* 20 */
7836 { PREFIX_TABLE (PREFIX_VEX_3A20) },
7837 { PREFIX_TABLE (PREFIX_VEX_3A21) },
7838 { PREFIX_TABLE (PREFIX_VEX_3A22) },
592d1631
L
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
c0f3af97 7844 /* 28 */
592d1631
L
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
c0f3af97 7853 /* 30 */
592d1631
L
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
c0f3af97 7862 /* 38 */
592d1631
L
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
c0f3af97
L
7871 /* 40 */
7872 { PREFIX_TABLE (PREFIX_VEX_3A40) },
7873 { PREFIX_TABLE (PREFIX_VEX_3A41) },
7874 { PREFIX_TABLE (PREFIX_VEX_3A42) },
592d1631 7875 { Bad_Opcode },
ce2f5b3c 7876 { PREFIX_TABLE (PREFIX_VEX_3A44) },
592d1631
L
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
c0f3af97 7880 /* 48 */
a683cc34
SP
7881 { PREFIX_TABLE (PREFIX_VEX_3A48) },
7882 { PREFIX_TABLE (PREFIX_VEX_3A49) },
c0f3af97
L
7883 { PREFIX_TABLE (PREFIX_VEX_3A4A) },
7884 { PREFIX_TABLE (PREFIX_VEX_3A4B) },
7885 { PREFIX_TABLE (PREFIX_VEX_3A4C) },
592d1631
L
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
c0f3af97 7889 /* 50 */
592d1631
L
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
c0f3af97 7898 /* 58 */
592d1631
L
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
922d8de8
DR
7903 { PREFIX_TABLE (PREFIX_VEX_3A5C) },
7904 { PREFIX_TABLE (PREFIX_VEX_3A5D) },
7905 { PREFIX_TABLE (PREFIX_VEX_3A5E) },
7906 { PREFIX_TABLE (PREFIX_VEX_3A5F) },
c0f3af97
L
7907 /* 60 */
7908 { PREFIX_TABLE (PREFIX_VEX_3A60) },
7909 { PREFIX_TABLE (PREFIX_VEX_3A61) },
7910 { PREFIX_TABLE (PREFIX_VEX_3A62) },
7911 { PREFIX_TABLE (PREFIX_VEX_3A63) },
592d1631
L
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
c0f3af97 7916 /* 68 */
922d8de8
DR
7917 { PREFIX_TABLE (PREFIX_VEX_3A68) },
7918 { PREFIX_TABLE (PREFIX_VEX_3A69) },
7919 { PREFIX_TABLE (PREFIX_VEX_3A6A) },
7920 { PREFIX_TABLE (PREFIX_VEX_3A6B) },
7921 { PREFIX_TABLE (PREFIX_VEX_3A6C) },
7922 { PREFIX_TABLE (PREFIX_VEX_3A6D) },
7923 { PREFIX_TABLE (PREFIX_VEX_3A6E) },
7924 { PREFIX_TABLE (PREFIX_VEX_3A6F) },
c0f3af97 7925 /* 70 */
592d1631
L
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
c0f3af97 7934 /* 78 */
922d8de8
DR
7935 { PREFIX_TABLE (PREFIX_VEX_3A78) },
7936 { PREFIX_TABLE (PREFIX_VEX_3A79) },
7937 { PREFIX_TABLE (PREFIX_VEX_3A7A) },
7938 { PREFIX_TABLE (PREFIX_VEX_3A7B) },
7939 { PREFIX_TABLE (PREFIX_VEX_3A7C) },
7940 { PREFIX_TABLE (PREFIX_VEX_3A7D) },
7941 { PREFIX_TABLE (PREFIX_VEX_3A7E) },
7942 { PREFIX_TABLE (PREFIX_VEX_3A7F) },
c0f3af97 7943 /* 80 */
592d1631
L
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
c0f3af97 7952 /* 88 */
592d1631
L
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
c0f3af97 7961 /* 90 */
592d1631
L
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
c0f3af97 7970 /* 98 */
592d1631
L
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
c0f3af97 7979 /* a0 */
592d1631
L
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
c0f3af97 7988 /* a8 */
592d1631
L
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
c0f3af97 7997 /* b0 */
592d1631
L
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
c0f3af97 8006 /* b8 */
592d1631
L
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
c0f3af97 8015 /* c0 */
592d1631
L
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
c0f3af97 8024 /* c8 */
592d1631
L
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
c0f3af97 8033 /* d0 */
592d1631
L
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
c0f3af97 8042 /* d8 */
592d1631
L
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
a5ff0eb2 8050 { PREFIX_TABLE (PREFIX_VEX_3ADF) },
c0f3af97 8051 /* e0 */
592d1631
L
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
c0f3af97 8060 /* e8 */
592d1631
L
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
c0f3af97 8069 /* f0 */
592d1631
L
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
c0f3af97 8078 /* f8 */
592d1631
L
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
c0f3af97
L
8087 },
8088};
8089
8090static const struct dis386 vex_len_table[][2] = {
8091 /* VEX_LEN_10_P_1 */
8092 {
9e30b8e0 8093 { VEX_W_TABLE (VEX_W_10_P_1) },
539f890d 8094 { VEX_W_TABLE (VEX_W_10_P_1) },
c0f3af97
L
8095 },
8096
8097 /* VEX_LEN_10_P_3 */
8098 {
9e30b8e0 8099 { VEX_W_TABLE (VEX_W_10_P_3) },
539f890d 8100 { VEX_W_TABLE (VEX_W_10_P_3) },
c0f3af97
L
8101 },
8102
8103 /* VEX_LEN_11_P_1 */
8104 {
9e30b8e0 8105 { VEX_W_TABLE (VEX_W_11_P_1) },
539f890d 8106 { VEX_W_TABLE (VEX_W_11_P_1) },
c0f3af97
L
8107 },
8108
8109 /* VEX_LEN_11_P_3 */
8110 {
9e30b8e0 8111 { VEX_W_TABLE (VEX_W_11_P_3) },
539f890d 8112 { VEX_W_TABLE (VEX_W_11_P_3) },
c0f3af97
L
8113 },
8114
8115 /* VEX_LEN_12_P_0_M_0 */
8116 {
9e30b8e0 8117 { VEX_W_TABLE (VEX_W_12_P_0_M_0) },
c0f3af97
L
8118 },
8119
8120 /* VEX_LEN_12_P_0_M_1 */
8121 {
9e30b8e0 8122 { VEX_W_TABLE (VEX_W_12_P_0_M_1) },
c0f3af97
L
8123 },
8124
8125 /* VEX_LEN_12_P_2 */
8126 {
9e30b8e0 8127 { VEX_W_TABLE (VEX_W_12_P_2) },
c0f3af97
L
8128 },
8129
8130 /* VEX_LEN_13_M_0 */
8131 {
9e30b8e0 8132 { VEX_W_TABLE (VEX_W_13_M_0) },
c0f3af97
L
8133 },
8134
8135 /* VEX_LEN_16_P_0_M_0 */
8136 {
9e30b8e0 8137 { VEX_W_TABLE (VEX_W_16_P_0_M_0) },
c0f3af97
L
8138 },
8139
8140 /* VEX_LEN_16_P_0_M_1 */
8141 {
9e30b8e0 8142 { VEX_W_TABLE (VEX_W_16_P_0_M_1) },
c0f3af97
L
8143 },
8144
8145 /* VEX_LEN_16_P_2 */
8146 {
9e30b8e0 8147 { VEX_W_TABLE (VEX_W_16_P_2) },
c0f3af97
L
8148 },
8149
8150 /* VEX_LEN_17_M_0 */
8151 {
9e30b8e0 8152 { VEX_W_TABLE (VEX_W_17_M_0) },
c0f3af97
L
8153 },
8154
8155 /* VEX_LEN_2A_P_1 */
8156 {
539f890d
L
8157 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8158 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8159 },
8160
8161 /* VEX_LEN_2A_P_3 */
8162 {
539f890d
L
8163 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8164 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8165 },
8166
c0f3af97
L
8167 /* VEX_LEN_2C_P_1 */
8168 {
539f890d
L
8169 { "vcvttss2siY", { Gv, EXdScalar } },
8170 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
8171 },
8172
8173 /* VEX_LEN_2C_P_3 */
8174 {
539f890d
L
8175 { "vcvttsd2siY", { Gv, EXqScalar } },
8176 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8177 },
8178
8179 /* VEX_LEN_2D_P_1 */
8180 {
539f890d
L
8181 { "vcvtss2siY", { Gv, EXdScalar } },
8182 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
8183 },
8184
8185 /* VEX_LEN_2D_P_3 */
8186 {
539f890d
L
8187 { "vcvtsd2siY", { Gv, EXqScalar } },
8188 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8189 },
8190
8191 /* VEX_LEN_2E_P_0 */
8192 {
9e30b8e0 8193 { VEX_W_TABLE (VEX_W_2E_P_0) },
539f890d 8194 { VEX_W_TABLE (VEX_W_2E_P_0) },
c0f3af97
L
8195 },
8196
8197 /* VEX_LEN_2E_P_2 */
8198 {
9e30b8e0 8199 { VEX_W_TABLE (VEX_W_2E_P_2) },
539f890d 8200 { VEX_W_TABLE (VEX_W_2E_P_2) },
c0f3af97
L
8201 },
8202
8203 /* VEX_LEN_2F_P_0 */
8204 {
9e30b8e0 8205 { VEX_W_TABLE (VEX_W_2F_P_0) },
539f890d 8206 { VEX_W_TABLE (VEX_W_2F_P_0) },
c0f3af97
L
8207 },
8208
8209 /* VEX_LEN_2F_P_2 */
8210 {
9e30b8e0 8211 { VEX_W_TABLE (VEX_W_2F_P_2) },
539f890d 8212 { VEX_W_TABLE (VEX_W_2F_P_2) },
c0f3af97
L
8213 },
8214
8215 /* VEX_LEN_51_P_1 */
8216 {
9e30b8e0 8217 { VEX_W_TABLE (VEX_W_51_P_1) },
539f890d 8218 { VEX_W_TABLE (VEX_W_51_P_1) },
c0f3af97
L
8219 },
8220
8221 /* VEX_LEN_51_P_3 */
8222 {
9e30b8e0 8223 { VEX_W_TABLE (VEX_W_51_P_3) },
539f890d 8224 { VEX_W_TABLE (VEX_W_51_P_3) },
c0f3af97
L
8225 },
8226
8227 /* VEX_LEN_52_P_1 */
8228 {
9e30b8e0 8229 { VEX_W_TABLE (VEX_W_52_P_1) },
539f890d 8230 { VEX_W_TABLE (VEX_W_52_P_1) },
c0f3af97
L
8231 },
8232
8233 /* VEX_LEN_53_P_1 */
8234 {
9e30b8e0 8235 { VEX_W_TABLE (VEX_W_53_P_1) },
539f890d 8236 { VEX_W_TABLE (VEX_W_53_P_1) },
c0f3af97
L
8237 },
8238
8239 /* VEX_LEN_58_P_1 */
8240 {
9e30b8e0 8241 { VEX_W_TABLE (VEX_W_58_P_1) },
539f890d 8242 { VEX_W_TABLE (VEX_W_58_P_1) },
c0f3af97
L
8243 },
8244
8245 /* VEX_LEN_58_P_3 */
8246 {
9e30b8e0 8247 { VEX_W_TABLE (VEX_W_58_P_3) },
539f890d 8248 { VEX_W_TABLE (VEX_W_58_P_3) },
c0f3af97
L
8249 },
8250
8251 /* VEX_LEN_59_P_1 */
8252 {
9e30b8e0 8253 { VEX_W_TABLE (VEX_W_59_P_1) },
539f890d 8254 { VEX_W_TABLE (VEX_W_59_P_1) },
c0f3af97
L
8255 },
8256
8257 /* VEX_LEN_59_P_3 */
8258 {
9e30b8e0 8259 { VEX_W_TABLE (VEX_W_59_P_3) },
539f890d 8260 { VEX_W_TABLE (VEX_W_59_P_3) },
c0f3af97
L
8261 },
8262
8263 /* VEX_LEN_5A_P_1 */
8264 {
9e30b8e0 8265 { VEX_W_TABLE (VEX_W_5A_P_1) },
539f890d 8266 { VEX_W_TABLE (VEX_W_5A_P_1) },
c0f3af97
L
8267 },
8268
8269 /* VEX_LEN_5A_P_3 */
8270 {
9e30b8e0 8271 { VEX_W_TABLE (VEX_W_5A_P_3) },
539f890d 8272 { VEX_W_TABLE (VEX_W_5A_P_3) },
c0f3af97
L
8273 },
8274
8275 /* VEX_LEN_5C_P_1 */
8276 {
9e30b8e0 8277 { VEX_W_TABLE (VEX_W_5C_P_1) },
539f890d 8278 { VEX_W_TABLE (VEX_W_5C_P_1) },
c0f3af97
L
8279 },
8280
8281 /* VEX_LEN_5C_P_3 */
8282 {
9e30b8e0 8283 { VEX_W_TABLE (VEX_W_5C_P_3) },
539f890d 8284 { VEX_W_TABLE (VEX_W_5C_P_3) },
c0f3af97
L
8285 },
8286
8287 /* VEX_LEN_5D_P_1 */
8288 {
9e30b8e0 8289 { VEX_W_TABLE (VEX_W_5D_P_1) },
539f890d 8290 { VEX_W_TABLE (VEX_W_5D_P_1) },
c0f3af97
L
8291 },
8292
8293 /* VEX_LEN_5D_P_3 */
8294 {
9e30b8e0 8295 { VEX_W_TABLE (VEX_W_5D_P_3) },
539f890d 8296 { VEX_W_TABLE (VEX_W_5D_P_3) },
c0f3af97
L
8297 },
8298
8299 /* VEX_LEN_5E_P_1 */
8300 {
9e30b8e0 8301 { VEX_W_TABLE (VEX_W_5E_P_1) },
539f890d 8302 { VEX_W_TABLE (VEX_W_5E_P_1) },
c0f3af97
L
8303 },
8304
8305 /* VEX_LEN_5E_P_3 */
8306 {
9e30b8e0 8307 { VEX_W_TABLE (VEX_W_5E_P_3) },
539f890d 8308 { VEX_W_TABLE (VEX_W_5E_P_3) },
c0f3af97
L
8309 },
8310
8311 /* VEX_LEN_5F_P_1 */
8312 {
9e30b8e0 8313 { VEX_W_TABLE (VEX_W_5F_P_1) },
539f890d 8314 { VEX_W_TABLE (VEX_W_5F_P_1) },
c0f3af97
L
8315 },
8316
8317 /* VEX_LEN_5F_P_3 */
8318 {
9e30b8e0 8319 { VEX_W_TABLE (VEX_W_5F_P_3) },
539f890d 8320 { VEX_W_TABLE (VEX_W_5F_P_3) },
c0f3af97
L
8321 },
8322
8323 /* VEX_LEN_60_P_2 */
8324 {
9e30b8e0 8325 { VEX_W_TABLE (VEX_W_60_P_2) },
c0f3af97
L
8326 },
8327
8328 /* VEX_LEN_61_P_2 */
8329 {
9e30b8e0 8330 { VEX_W_TABLE (VEX_W_61_P_2) },
c0f3af97
L
8331 },
8332
8333 /* VEX_LEN_62_P_2 */
8334 {
9e30b8e0 8335 { VEX_W_TABLE (VEX_W_62_P_2) },
c0f3af97
L
8336 },
8337
8338 /* VEX_LEN_63_P_2 */
8339 {
9e30b8e0 8340 { VEX_W_TABLE (VEX_W_63_P_2) },
c0f3af97
L
8341 },
8342
8343 /* VEX_LEN_64_P_2 */
8344 {
9e30b8e0 8345 { VEX_W_TABLE (VEX_W_64_P_2) },
c0f3af97
L
8346 },
8347
8348 /* VEX_LEN_65_P_2 */
8349 {
9e30b8e0 8350 { VEX_W_TABLE (VEX_W_65_P_2) },
c0f3af97
L
8351 },
8352
8353 /* VEX_LEN_66_P_2 */
8354 {
9e30b8e0 8355 { VEX_W_TABLE (VEX_W_66_P_2) },
c0f3af97
L
8356 },
8357
8358 /* VEX_LEN_67_P_2 */
8359 {
9e30b8e0 8360 { VEX_W_TABLE (VEX_W_67_P_2) },
c0f3af97
L
8361 },
8362
8363 /* VEX_LEN_68_P_2 */
8364 {
9e30b8e0 8365 { VEX_W_TABLE (VEX_W_68_P_2) },
c0f3af97
L
8366 },
8367
8368 /* VEX_LEN_69_P_2 */
8369 {
9e30b8e0 8370 { VEX_W_TABLE (VEX_W_69_P_2) },
c0f3af97
L
8371 },
8372
8373 /* VEX_LEN_6A_P_2 */
8374 {
9e30b8e0 8375 { VEX_W_TABLE (VEX_W_6A_P_2) },
c0f3af97
L
8376 },
8377
8378 /* VEX_LEN_6B_P_2 */
8379 {
9e30b8e0 8380 { VEX_W_TABLE (VEX_W_6B_P_2) },
c0f3af97
L
8381 },
8382
8383 /* VEX_LEN_6C_P_2 */
8384 {
9e30b8e0 8385 { VEX_W_TABLE (VEX_W_6C_P_2) },
c0f3af97
L
8386 },
8387
8388 /* VEX_LEN_6D_P_2 */
8389 {
9e30b8e0 8390 { VEX_W_TABLE (VEX_W_6D_P_2) },
c0f3af97
L
8391 },
8392
8393 /* VEX_LEN_6E_P_2 */
8394 {
539f890d
L
8395 { "vmovK", { XMScalar, Edq } },
8396 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
8397 },
8398
8399 /* VEX_LEN_70_P_1 */
8400 {
9e30b8e0 8401 { VEX_W_TABLE (VEX_W_70_P_1) },
c0f3af97
L
8402 },
8403
8404 /* VEX_LEN_70_P_2 */
8405 {
9e30b8e0 8406 { VEX_W_TABLE (VEX_W_70_P_2) },
c0f3af97
L
8407 },
8408
8409 /* VEX_LEN_70_P_3 */
8410 {
9e30b8e0 8411 { VEX_W_TABLE (VEX_W_70_P_3) },
c0f3af97
L
8412 },
8413
8414 /* VEX_LEN_71_R_2_P_2 */
8415 {
9e30b8e0 8416 { VEX_W_TABLE (VEX_W_71_R_2_P_2) },
c0f3af97
L
8417 },
8418
8419 /* VEX_LEN_71_R_4_P_2 */
8420 {
9e30b8e0 8421 { VEX_W_TABLE (VEX_W_71_R_4_P_2) },
c0f3af97
L
8422 },
8423
8424 /* VEX_LEN_71_R_6_P_2 */
8425 {
9e30b8e0 8426 { VEX_W_TABLE (VEX_W_71_R_6_P_2) },
c0f3af97
L
8427 },
8428
8429 /* VEX_LEN_72_R_2_P_2 */
8430 {
9e30b8e0 8431 { VEX_W_TABLE (VEX_W_72_R_2_P_2) },
c0f3af97
L
8432 },
8433
8434 /* VEX_LEN_72_R_4_P_2 */
8435 {
9e30b8e0 8436 { VEX_W_TABLE (VEX_W_72_R_4_P_2) },
c0f3af97
L
8437 },
8438
8439 /* VEX_LEN_72_R_6_P_2 */
8440 {
9e30b8e0 8441 { VEX_W_TABLE (VEX_W_72_R_6_P_2) },
c0f3af97
L
8442 },
8443
8444 /* VEX_LEN_73_R_2_P_2 */
8445 {
9e30b8e0 8446 { VEX_W_TABLE (VEX_W_73_R_2_P_2) },
c0f3af97
L
8447 },
8448
8449 /* VEX_LEN_73_R_3_P_2 */
8450 {
9e30b8e0 8451 { VEX_W_TABLE (VEX_W_73_R_3_P_2) },
c0f3af97
L
8452 },
8453
8454 /* VEX_LEN_73_R_6_P_2 */
8455 {
9e30b8e0 8456 { VEX_W_TABLE (VEX_W_73_R_6_P_2) },
c0f3af97
L
8457 },
8458
8459 /* VEX_LEN_73_R_7_P_2 */
8460 {
9e30b8e0 8461 { VEX_W_TABLE (VEX_W_73_R_7_P_2) },
c0f3af97
L
8462 },
8463
8464 /* VEX_LEN_74_P_2 */
8465 {
9e30b8e0 8466 { VEX_W_TABLE (VEX_W_74_P_2) },
c0f3af97
L
8467 },
8468
8469 /* VEX_LEN_75_P_2 */
8470 {
9e30b8e0 8471 { VEX_W_TABLE (VEX_W_75_P_2) },
c0f3af97
L
8472 },
8473
8474 /* VEX_LEN_76_P_2 */
8475 {
9e30b8e0 8476 { VEX_W_TABLE (VEX_W_76_P_2) },
c0f3af97
L
8477 },
8478
8479 /* VEX_LEN_7E_P_1 */
8480 {
9e30b8e0 8481 { VEX_W_TABLE (VEX_W_7E_P_1) },
539f890d 8482 { VEX_W_TABLE (VEX_W_7E_P_1) },
c0f3af97
L
8483 },
8484
8485 /* VEX_LEN_7E_P_2 */
8486 {
539f890d
L
8487 { "vmovK", { Edq, XMScalar } },
8488 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
8489 },
8490
9daa0d29 8491 /* VEX_LEN_AE_R_2_M_0 */
c0f3af97 8492 {
9e30b8e0 8493 { VEX_W_TABLE (VEX_W_AE_R_2_M_0) },
c0f3af97
L
8494 },
8495
9daa0d29 8496 /* VEX_LEN_AE_R_3_M_0 */
c0f3af97 8497 {
9e30b8e0 8498 { VEX_W_TABLE (VEX_W_AE_R_3_M_0) },
c0f3af97
L
8499 },
8500
8501 /* VEX_LEN_C2_P_1 */
8502 {
9e30b8e0 8503 { VEX_W_TABLE (VEX_W_C2_P_1) },
539f890d 8504 { VEX_W_TABLE (VEX_W_C2_P_1) },
c0f3af97
L
8505 },
8506
8507 /* VEX_LEN_C2_P_3 */
8508 {
9e30b8e0 8509 { VEX_W_TABLE (VEX_W_C2_P_3) },
539f890d 8510 { VEX_W_TABLE (VEX_W_C2_P_3) },
c0f3af97
L
8511 },
8512
8513 /* VEX_LEN_C4_P_2 */
8514 {
9e30b8e0 8515 { VEX_W_TABLE (VEX_W_C4_P_2) },
c0f3af97
L
8516 },
8517
8518 /* VEX_LEN_C5_P_2 */
8519 {
9e30b8e0 8520 { VEX_W_TABLE (VEX_W_C5_P_2) },
c0f3af97
L
8521 },
8522
8523 /* VEX_LEN_D1_P_2 */
8524 {
9e30b8e0 8525 { VEX_W_TABLE (VEX_W_D1_P_2) },
c0f3af97
L
8526 },
8527
8528 /* VEX_LEN_D2_P_2 */
8529 {
9e30b8e0 8530 { VEX_W_TABLE (VEX_W_D2_P_2) },
c0f3af97
L
8531 },
8532
8533 /* VEX_LEN_D3_P_2 */
8534 {
9e30b8e0 8535 { VEX_W_TABLE (VEX_W_D3_P_2) },
c0f3af97
L
8536 },
8537
8538 /* VEX_LEN_D4_P_2 */
8539 {
9e30b8e0 8540 { VEX_W_TABLE (VEX_W_D4_P_2) },
c0f3af97
L
8541 },
8542
8543 /* VEX_LEN_D5_P_2 */
8544 {
9e30b8e0 8545 { VEX_W_TABLE (VEX_W_D5_P_2) },
c0f3af97
L
8546 },
8547
8548 /* VEX_LEN_D6_P_2 */
8549 {
9e30b8e0 8550 { VEX_W_TABLE (VEX_W_D6_P_2) },
539f890d 8551 { VEX_W_TABLE (VEX_W_D6_P_2) },
c0f3af97
L
8552 },
8553
8554 /* VEX_LEN_D7_P_2_M_1 */
8555 {
9e30b8e0 8556 { VEX_W_TABLE (VEX_W_D7_P_2_M_1) },
c0f3af97
L
8557 },
8558
8559 /* VEX_LEN_D8_P_2 */
8560 {
9e30b8e0 8561 { VEX_W_TABLE (VEX_W_D8_P_2) },
c0f3af97
L
8562 },
8563
8564 /* VEX_LEN_D9_P_2 */
8565 {
9e30b8e0 8566 { VEX_W_TABLE (VEX_W_D9_P_2) },
c0f3af97
L
8567 },
8568
8569 /* VEX_LEN_DA_P_2 */
8570 {
9e30b8e0 8571 { VEX_W_TABLE (VEX_W_DA_P_2) },
c0f3af97
L
8572 },
8573
8574 /* VEX_LEN_DB_P_2 */
8575 {
9e30b8e0 8576 { VEX_W_TABLE (VEX_W_DB_P_2) },
c0f3af97
L
8577 },
8578
8579 /* VEX_LEN_DC_P_2 */
8580 {
9e30b8e0 8581 { VEX_W_TABLE (VEX_W_DC_P_2) },
c0f3af97
L
8582 },
8583
8584 /* VEX_LEN_DD_P_2 */
8585 {
9e30b8e0 8586 { VEX_W_TABLE (VEX_W_DD_P_2) },
c0f3af97
L
8587 },
8588
8589 /* VEX_LEN_DE_P_2 */
8590 {
9e30b8e0 8591 { VEX_W_TABLE (VEX_W_DE_P_2) },
c0f3af97
L
8592 },
8593
8594 /* VEX_LEN_DF_P_2 */
8595 {
9e30b8e0 8596 { VEX_W_TABLE (VEX_W_DF_P_2) },
c0f3af97
L
8597 },
8598
8599 /* VEX_LEN_E0_P_2 */
8600 {
9e30b8e0 8601 { VEX_W_TABLE (VEX_W_E0_P_2) },
c0f3af97
L
8602 },
8603
8604 /* VEX_LEN_E1_P_2 */
8605 {
9e30b8e0 8606 { VEX_W_TABLE (VEX_W_E1_P_2) },
c0f3af97
L
8607 },
8608
8609 /* VEX_LEN_E2_P_2 */
8610 {
9e30b8e0 8611 { VEX_W_TABLE (VEX_W_E2_P_2) },
c0f3af97
L
8612 },
8613
8614 /* VEX_LEN_E3_P_2 */
8615 {
9e30b8e0 8616 { VEX_W_TABLE (VEX_W_E3_P_2) },
c0f3af97
L
8617 },
8618
8619 /* VEX_LEN_E4_P_2 */
8620 {
9e30b8e0 8621 { VEX_W_TABLE (VEX_W_E4_P_2) },
c0f3af97
L
8622 },
8623
8624 /* VEX_LEN_E5_P_2 */
8625 {
9e30b8e0 8626 { VEX_W_TABLE (VEX_W_E5_P_2) },
c0f3af97
L
8627 },
8628
c0f3af97
L
8629 /* VEX_LEN_E8_P_2 */
8630 {
9e30b8e0 8631 { VEX_W_TABLE (VEX_W_E8_P_2) },
c0f3af97
L
8632 },
8633
8634 /* VEX_LEN_E9_P_2 */
8635 {
9e30b8e0 8636 { VEX_W_TABLE (VEX_W_E9_P_2) },
c0f3af97
L
8637 },
8638
8639 /* VEX_LEN_EA_P_2 */
8640 {
9e30b8e0 8641 { VEX_W_TABLE (VEX_W_EA_P_2) },
c0f3af97
L
8642 },
8643
8644 /* VEX_LEN_EB_P_2 */
8645 {
9e30b8e0 8646 { VEX_W_TABLE (VEX_W_EB_P_2) },
c0f3af97
L
8647 },
8648
8649 /* VEX_LEN_EC_P_2 */
8650 {
9e30b8e0 8651 { VEX_W_TABLE (VEX_W_EC_P_2) },
c0f3af97
L
8652 },
8653
8654 /* VEX_LEN_ED_P_2 */
8655 {
9e30b8e0 8656 { VEX_W_TABLE (VEX_W_ED_P_2) },
c0f3af97
L
8657 },
8658
8659 /* VEX_LEN_EE_P_2 */
8660 {
9e30b8e0 8661 { VEX_W_TABLE (VEX_W_EE_P_2) },
c0f3af97
L
8662 },
8663
8664 /* VEX_LEN_EF_P_2 */
8665 {
9e30b8e0 8666 { VEX_W_TABLE (VEX_W_EF_P_2) },
c0f3af97
L
8667 },
8668
8669 /* VEX_LEN_F1_P_2 */
8670 {
9e30b8e0 8671 { VEX_W_TABLE (VEX_W_F1_P_2) },
c0f3af97
L
8672 },
8673
8674 /* VEX_LEN_F2_P_2 */
8675 {
9e30b8e0 8676 { VEX_W_TABLE (VEX_W_F2_P_2) },
c0f3af97
L
8677 },
8678
8679 /* VEX_LEN_F3_P_2 */
8680 {
9e30b8e0 8681 { VEX_W_TABLE (VEX_W_F3_P_2) },
c0f3af97
L
8682 },
8683
8684 /* VEX_LEN_F4_P_2 */
8685 {
9e30b8e0 8686 { VEX_W_TABLE (VEX_W_F4_P_2) },
c0f3af97
L
8687 },
8688
8689 /* VEX_LEN_F5_P_2 */
8690 {
9e30b8e0 8691 { VEX_W_TABLE (VEX_W_F5_P_2) },
c0f3af97
L
8692 },
8693
8694 /* VEX_LEN_F6_P_2 */
8695 {
9e30b8e0 8696 { VEX_W_TABLE (VEX_W_F6_P_2) },
c0f3af97
L
8697 },
8698
8699 /* VEX_LEN_F7_P_2 */
8700 {
9e30b8e0 8701 { VEX_W_TABLE (VEX_W_F7_P_2) },
c0f3af97
L
8702 },
8703
8704 /* VEX_LEN_F8_P_2 */
8705 {
9e30b8e0 8706 { VEX_W_TABLE (VEX_W_F8_P_2) },
c0f3af97
L
8707 },
8708
8709 /* VEX_LEN_F9_P_2 */
8710 {
9e30b8e0 8711 { VEX_W_TABLE (VEX_W_F9_P_2) },
c0f3af97
L
8712 },
8713
8714 /* VEX_LEN_FA_P_2 */
8715 {
9e30b8e0 8716 { VEX_W_TABLE (VEX_W_FA_P_2) },
c0f3af97
L
8717 },
8718
8719 /* VEX_LEN_FB_P_2 */
8720 {
9e30b8e0 8721 { VEX_W_TABLE (VEX_W_FB_P_2) },
c0f3af97
L
8722 },
8723
8724 /* VEX_LEN_FC_P_2 */
8725 {
9e30b8e0 8726 { VEX_W_TABLE (VEX_W_FC_P_2) },
c0f3af97
L
8727 },
8728
8729 /* VEX_LEN_FD_P_2 */
8730 {
9e30b8e0 8731 { VEX_W_TABLE (VEX_W_FD_P_2) },
c0f3af97
L
8732 },
8733
8734 /* VEX_LEN_FE_P_2 */
8735 {
9e30b8e0 8736 { VEX_W_TABLE (VEX_W_FE_P_2) },
c0f3af97
L
8737 },
8738
8739 /* VEX_LEN_3800_P_2 */
8740 {
9e30b8e0 8741 { VEX_W_TABLE (VEX_W_3800_P_2) },
c0f3af97
L
8742 },
8743
8744 /* VEX_LEN_3801_P_2 */
8745 {
9e30b8e0 8746 { VEX_W_TABLE (VEX_W_3801_P_2) },
c0f3af97
L
8747 },
8748
8749 /* VEX_LEN_3802_P_2 */
8750 {
9e30b8e0 8751 { VEX_W_TABLE (VEX_W_3802_P_2) },
c0f3af97
L
8752 },
8753
8754 /* VEX_LEN_3803_P_2 */
8755 {
9e30b8e0 8756 { VEX_W_TABLE (VEX_W_3803_P_2) },
c0f3af97
L
8757 },
8758
8759 /* VEX_LEN_3804_P_2 */
8760 {
9e30b8e0 8761 { VEX_W_TABLE (VEX_W_3804_P_2) },
c0f3af97
L
8762 },
8763
8764 /* VEX_LEN_3805_P_2 */
8765 {
9e30b8e0 8766 { VEX_W_TABLE (VEX_W_3805_P_2) },
c0f3af97
L
8767 },
8768
8769 /* VEX_LEN_3806_P_2 */
8770 {
9e30b8e0 8771 { VEX_W_TABLE (VEX_W_3806_P_2) },
c0f3af97
L
8772 },
8773
8774 /* VEX_LEN_3807_P_2 */
8775 {
9e30b8e0 8776 { VEX_W_TABLE (VEX_W_3807_P_2) },
c0f3af97
L
8777 },
8778
8779 /* VEX_LEN_3808_P_2 */
8780 {
9e30b8e0 8781 { VEX_W_TABLE (VEX_W_3808_P_2) },
c0f3af97
L
8782 },
8783
8784 /* VEX_LEN_3809_P_2 */
8785 {
9e30b8e0 8786 { VEX_W_TABLE (VEX_W_3809_P_2) },
c0f3af97
L
8787 },
8788
8789 /* VEX_LEN_380A_P_2 */
8790 {
9e30b8e0 8791 { VEX_W_TABLE (VEX_W_380A_P_2) },
c0f3af97
L
8792 },
8793
8794 /* VEX_LEN_380B_P_2 */
8795 {
9e30b8e0 8796 { VEX_W_TABLE (VEX_W_380B_P_2) },
c0f3af97
L
8797 },
8798
8799 /* VEX_LEN_3819_P_2_M_0 */
8800 {
592d1631 8801 { Bad_Opcode },
9e30b8e0 8802 { VEX_W_TABLE (VEX_W_3819_P_2_M_0) },
c0f3af97
L
8803 },
8804
8805 /* VEX_LEN_381A_P_2_M_0 */
8806 {
592d1631 8807 { Bad_Opcode },
9e30b8e0 8808 { VEX_W_TABLE (VEX_W_381A_P_2_M_0) },
c0f3af97
L
8809 },
8810
8811 /* VEX_LEN_381C_P_2 */
8812 {
9e30b8e0 8813 { VEX_W_TABLE (VEX_W_381C_P_2) },
c0f3af97
L
8814 },
8815
8816 /* VEX_LEN_381D_P_2 */
8817 {
9e30b8e0 8818 { VEX_W_TABLE (VEX_W_381D_P_2) },
c0f3af97
L
8819 },
8820
8821 /* VEX_LEN_381E_P_2 */
8822 {
9e30b8e0 8823 { VEX_W_TABLE (VEX_W_381E_P_2) },
c0f3af97
L
8824 },
8825
8826 /* VEX_LEN_3820_P_2 */
8827 {
9e30b8e0 8828 { VEX_W_TABLE (VEX_W_3820_P_2) },
c0f3af97
L
8829 },
8830
8831 /* VEX_LEN_3821_P_2 */
8832 {
9e30b8e0 8833 { VEX_W_TABLE (VEX_W_3821_P_2) },
c0f3af97
L
8834 },
8835
8836 /* VEX_LEN_3822_P_2 */
8837 {
9e30b8e0 8838 { VEX_W_TABLE (VEX_W_3822_P_2) },
c0f3af97
L
8839 },
8840
8841 /* VEX_LEN_3823_P_2 */
8842 {
9e30b8e0 8843 { VEX_W_TABLE (VEX_W_3823_P_2) },
c0f3af97
L
8844 },
8845
8846 /* VEX_LEN_3824_P_2 */
8847 {
9e30b8e0 8848 { VEX_W_TABLE (VEX_W_3824_P_2) },
c0f3af97
L
8849 },
8850
8851 /* VEX_LEN_3825_P_2 */
8852 {
9e30b8e0 8853 { VEX_W_TABLE (VEX_W_3825_P_2) },
c0f3af97
L
8854 },
8855
8856 /* VEX_LEN_3828_P_2 */
8857 {
9e30b8e0 8858 { VEX_W_TABLE (VEX_W_3828_P_2) },
c0f3af97
L
8859 },
8860
8861 /* VEX_LEN_3829_P_2 */
8862 {
9e30b8e0 8863 { VEX_W_TABLE (VEX_W_3829_P_2) },
c0f3af97
L
8864 },
8865
8866 /* VEX_LEN_382A_P_2_M_0 */
8867 {
9e30b8e0 8868 { VEX_W_TABLE (VEX_W_382A_P_2_M_0) },
c0f3af97
L
8869 },
8870
8871 /* VEX_LEN_382B_P_2 */
8872 {
9e30b8e0 8873 { VEX_W_TABLE (VEX_W_382B_P_2) },
c0f3af97
L
8874 },
8875
8876 /* VEX_LEN_3830_P_2 */
8877 {
9e30b8e0 8878 { VEX_W_TABLE (VEX_W_3830_P_2) },
c0f3af97
L
8879 },
8880
8881 /* VEX_LEN_3831_P_2 */
8882 {
9e30b8e0 8883 { VEX_W_TABLE (VEX_W_3831_P_2) },
c0f3af97
L
8884 },
8885
8886 /* VEX_LEN_3832_P_2 */
8887 {
9e30b8e0 8888 { VEX_W_TABLE (VEX_W_3832_P_2) },
c0f3af97
L
8889 },
8890
8891 /* VEX_LEN_3833_P_2 */
8892 {
9e30b8e0 8893 { VEX_W_TABLE (VEX_W_3833_P_2) },
c0f3af97
L
8894 },
8895
8896 /* VEX_LEN_3834_P_2 */
8897 {
9e30b8e0 8898 { VEX_W_TABLE (VEX_W_3834_P_2) },
c0f3af97
L
8899 },
8900
8901 /* VEX_LEN_3835_P_2 */
8902 {
9e30b8e0 8903 { VEX_W_TABLE (VEX_W_3835_P_2) },
c0f3af97
L
8904 },
8905
8906 /* VEX_LEN_3837_P_2 */
8907 {
9e30b8e0 8908 { VEX_W_TABLE (VEX_W_3837_P_2) },
c0f3af97
L
8909 },
8910
8911 /* VEX_LEN_3838_P_2 */
8912 {
9e30b8e0 8913 { VEX_W_TABLE (VEX_W_3838_P_2) },
c0f3af97
L
8914 },
8915
8916 /* VEX_LEN_3839_P_2 */
8917 {
9e30b8e0 8918 { VEX_W_TABLE (VEX_W_3839_P_2) },
c0f3af97
L
8919 },
8920
8921 /* VEX_LEN_383A_P_2 */
8922 {
9e30b8e0 8923 { VEX_W_TABLE (VEX_W_383A_P_2) },
c0f3af97
L
8924 },
8925
8926 /* VEX_LEN_383B_P_2 */
8927 {
9e30b8e0 8928 { VEX_W_TABLE (VEX_W_383B_P_2) },
c0f3af97
L
8929 },
8930
8931 /* VEX_LEN_383C_P_2 */
8932 {
9e30b8e0 8933 { VEX_W_TABLE (VEX_W_383C_P_2) },
c0f3af97
L
8934 },
8935
8936 /* VEX_LEN_383D_P_2 */
8937 {
9e30b8e0 8938 { VEX_W_TABLE (VEX_W_383D_P_2) },
c0f3af97
L
8939 },
8940
8941 /* VEX_LEN_383E_P_2 */
8942 {
9e30b8e0 8943 { VEX_W_TABLE (VEX_W_383E_P_2) },
c0f3af97
L
8944 },
8945
8946 /* VEX_LEN_383F_P_2 */
8947 {
9e30b8e0 8948 { VEX_W_TABLE (VEX_W_383F_P_2) },
c0f3af97
L
8949 },
8950
8951 /* VEX_LEN_3840_P_2 */
8952 {
9e30b8e0 8953 { VEX_W_TABLE (VEX_W_3840_P_2) },
c0f3af97
L
8954 },
8955
8956 /* VEX_LEN_3841_P_2 */
8957 {
9e30b8e0 8958 { VEX_W_TABLE (VEX_W_3841_P_2) },
c0f3af97
L
8959 },
8960
a5ff0eb2
L
8961 /* VEX_LEN_38DB_P_2 */
8962 {
9e30b8e0 8963 { VEX_W_TABLE (VEX_W_38DB_P_2) },
a5ff0eb2
L
8964 },
8965
8966 /* VEX_LEN_38DC_P_2 */
8967 {
9e30b8e0 8968 { VEX_W_TABLE (VEX_W_38DC_P_2) },
a5ff0eb2
L
8969 },
8970
8971 /* VEX_LEN_38DD_P_2 */
8972 {
9e30b8e0 8973 { VEX_W_TABLE (VEX_W_38DD_P_2) },
a5ff0eb2
L
8974 },
8975
8976 /* VEX_LEN_38DE_P_2 */
8977 {
9e30b8e0 8978 { VEX_W_TABLE (VEX_W_38DE_P_2) },
a5ff0eb2
L
8979 },
8980
8981 /* VEX_LEN_38DF_P_2 */
8982 {
9e30b8e0 8983 { VEX_W_TABLE (VEX_W_38DF_P_2) },
a5ff0eb2
L
8984 },
8985
c0f3af97
L
8986 /* VEX_LEN_3A06_P_2 */
8987 {
592d1631 8988 { Bad_Opcode },
9e30b8e0 8989 { VEX_W_TABLE (VEX_W_3A06_P_2) },
c0f3af97
L
8990 },
8991
8992 /* VEX_LEN_3A0A_P_2 */
8993 {
9e30b8e0 8994 { VEX_W_TABLE (VEX_W_3A0A_P_2) },
539f890d 8995 { VEX_W_TABLE (VEX_W_3A0A_P_2) },
c0f3af97
L
8996 },
8997
8998 /* VEX_LEN_3A0B_P_2 */
8999 {
9e30b8e0 9000 { VEX_W_TABLE (VEX_W_3A0B_P_2) },
539f890d 9001 { VEX_W_TABLE (VEX_W_3A0B_P_2) },
c0f3af97
L
9002 },
9003
9004 /* VEX_LEN_3A0E_P_2 */
9005 {
9e30b8e0 9006 { VEX_W_TABLE (VEX_W_3A0E_P_2) },
c0f3af97
L
9007 },
9008
9009 /* VEX_LEN_3A0F_P_2 */
9010 {
9e30b8e0 9011 { VEX_W_TABLE (VEX_W_3A0F_P_2) },
c0f3af97
L
9012 },
9013
9014 /* VEX_LEN_3A14_P_2 */
9015 {
9e30b8e0 9016 { VEX_W_TABLE (VEX_W_3A14_P_2) },
c0f3af97
L
9017 },
9018
9019 /* VEX_LEN_3A15_P_2 */
9020 {
9e30b8e0 9021 { VEX_W_TABLE (VEX_W_3A15_P_2) },
c0f3af97
L
9022 },
9023
9024 /* VEX_LEN_3A16_P_2 */
9025 {
9026 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
9027 },
9028
9029 /* VEX_LEN_3A17_P_2 */
9030 {
9031 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
9032 },
9033
9034 /* VEX_LEN_3A18_P_2 */
9035 {
592d1631 9036 { Bad_Opcode },
9e30b8e0 9037 { VEX_W_TABLE (VEX_W_3A18_P_2) },
c0f3af97
L
9038 },
9039
9040 /* VEX_LEN_3A19_P_2 */
9041 {
592d1631 9042 { Bad_Opcode },
9e30b8e0 9043 { VEX_W_TABLE (VEX_W_3A19_P_2) },
c0f3af97
L
9044 },
9045
9046 /* VEX_LEN_3A20_P_2 */
9047 {
9e30b8e0 9048 { VEX_W_TABLE (VEX_W_3A20_P_2) },
c0f3af97
L
9049 },
9050
9051 /* VEX_LEN_3A21_P_2 */
9052 {
9e30b8e0 9053 { VEX_W_TABLE (VEX_W_3A21_P_2) },
c0f3af97
L
9054 },
9055
9056 /* VEX_LEN_3A22_P_2 */
9057 {
9058 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
9059 },
9060
9061 /* VEX_LEN_3A41_P_2 */
9062 {
9e30b8e0 9063 { VEX_W_TABLE (VEX_W_3A41_P_2) },
c0f3af97
L
9064 },
9065
9066 /* VEX_LEN_3A42_P_2 */
9067 {
9e30b8e0 9068 { VEX_W_TABLE (VEX_W_3A42_P_2) },
c0f3af97
L
9069 },
9070
ce2f5b3c
L
9071 /* VEX_LEN_3A44_P_2 */
9072 {
9e30b8e0 9073 { VEX_W_TABLE (VEX_W_3A44_P_2) },
ce2f5b3c
L
9074 },
9075
c0f3af97
L
9076 /* VEX_LEN_3A4C_P_2 */
9077 {
9e30b8e0 9078 { VEX_W_TABLE (VEX_W_3A4C_P_2) },
c0f3af97
L
9079 },
9080
9081 /* VEX_LEN_3A60_P_2 */
9082 {
9e30b8e0 9083 { VEX_W_TABLE (VEX_W_3A60_P_2) },
c0f3af97
L
9084 },
9085
9086 /* VEX_LEN_3A61_P_2 */
9087 {
9e30b8e0 9088 { VEX_W_TABLE (VEX_W_3A61_P_2) },
c0f3af97
L
9089 },
9090
9091 /* VEX_LEN_3A62_P_2 */
9092 {
9e30b8e0 9093 { VEX_W_TABLE (VEX_W_3A62_P_2) },
c0f3af97
L
9094 },
9095
9096 /* VEX_LEN_3A63_P_2 */
9097 {
9e30b8e0 9098 { VEX_W_TABLE (VEX_W_3A63_P_2) },
c0f3af97
L
9099 },
9100
922d8de8
DR
9101 /* VEX_LEN_3A6A_P_2 */
9102 {
206c2556 9103 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9104 },
9105
9106 /* VEX_LEN_3A6B_P_2 */
9107 {
206c2556 9108 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9109 },
9110
9111 /* VEX_LEN_3A6E_P_2 */
9112 {
206c2556 9113 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9114 },
9115
9116 /* VEX_LEN_3A6F_P_2 */
9117 {
206c2556 9118 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9119 },
9120
9121 /* VEX_LEN_3A7A_P_2 */
9122 {
206c2556 9123 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9124 },
9125
9126 /* VEX_LEN_3A7B_P_2 */
9127 {
206c2556 9128 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9129 },
9130
9131 /* VEX_LEN_3A7E_P_2 */
9132 {
206c2556 9133 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9134 },
9135
9136 /* VEX_LEN_3A7F_P_2 */
9137 {
206c2556 9138 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9139 },
9140
a5ff0eb2
L
9141 /* VEX_LEN_3ADF_P_2 */
9142 {
9e30b8e0 9143 { VEX_W_TABLE (VEX_W_3ADF_P_2) },
a5ff0eb2 9144 },
4c807e72 9145
5dd85c99
SP
9146 /* VEX_LEN_XOP_09_80 */
9147 {
4c807e72
L
9148 { "vfrczps", { XM, EXxmm } },
9149 { "vfrczps", { XM, EXymmq } },
5dd85c99 9150 },
4c807e72 9151
5dd85c99
SP
9152 /* VEX_LEN_XOP_09_81 */
9153 {
4c807e72
L
9154 { "vfrczpd", { XM, EXxmm } },
9155 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9156 },
331d2d0d
L
9157};
9158
9e30b8e0 9159static const struct dis386 vex_w_table[][2] = {
b844680a 9160 {
9e30b8e0
L
9161 /* VEX_W_10_P_0 */
9162 { "vmovups", { XM, EXx } },
d8faab4e
L
9163 },
9164 {
9e30b8e0 9165 /* VEX_W_10_P_1 */
539f890d 9166 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9167 },
9168 {
9e30b8e0
L
9169 /* VEX_W_10_P_2 */
9170 { "vmovupd", { XM, EXx } },
d8faab4e
L
9171 },
9172 {
9e30b8e0 9173 /* VEX_W_10_P_3 */
539f890d 9174 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9175 },
9176 {
9e30b8e0
L
9177 /* VEX_W_11_P_0 */
9178 { "vmovups", { EXxS, XM } },
d8faab4e
L
9179 },
9180 {
9e30b8e0 9181 /* VEX_W_11_P_1 */
539f890d 9182 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9183 },
9184 {
9e30b8e0
L
9185 /* VEX_W_11_P_2 */
9186 { "vmovupd", { EXxS, XM } },
b844680a
L
9187 },
9188 {
9e30b8e0 9189 /* VEX_W_11_P_3 */
539f890d 9190 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9191 },
9192 {
9e30b8e0
L
9193 /* VEX_W_12_P_0_M_0 */
9194 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9195 },
9196 {
9e30b8e0
L
9197 /* VEX_W_12_P_0_M_1 */
9198 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9199 },
9200 {
9e30b8e0
L
9201 /* VEX_W_12_P_1 */
9202 { "vmovsldup", { XM, EXx } },
b844680a
L
9203 },
9204 {
9e30b8e0
L
9205 /* VEX_W_12_P_2 */
9206 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9207 },
9208 {
9e30b8e0
L
9209 /* VEX_W_12_P_3 */
9210 { "vmovddup", { XM, EXymmq } },
b844680a
L
9211 },
9212 {
9e30b8e0
L
9213 /* VEX_W_13_M_0 */
9214 { "vmovlpX", { EXq, XM } },
b844680a
L
9215 },
9216 {
9e30b8e0
L
9217 /* VEX_W_14 */
9218 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9219 },
9220 {
9e30b8e0
L
9221 /* VEX_W_15 */
9222 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9223 },
9224 {
9e30b8e0
L
9225 /* VEX_W_16_P_0_M_0 */
9226 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9227 },
9228 {
9229 /* VEX_W_16_P_0_M_1 */
9230 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9231 },
9232 {
9233 /* VEX_W_16_P_1 */
9234 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9235 },
9236 {
9237 /* VEX_W_16_P_2 */
9238 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9239 },
9240 {
9241 /* VEX_W_17_M_0 */
9242 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9243 },
9244 {
9245 /* VEX_W_28 */
9246 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9247 },
9248 {
9249 /* VEX_W_29 */
9250 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9251 },
9252 {
9253 /* VEX_W_2B_M_0 */
9254 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9255 },
9256 {
9257 /* VEX_W_2E_P_0 */
539f890d 9258 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9259 },
9260 {
9261 /* VEX_W_2E_P_2 */
539f890d 9262 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9263 },
9264 {
9265 /* VEX_W_2F_P_0 */
539f890d 9266 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9267 },
9268 {
9269 /* VEX_W_2F_P_2 */
539f890d 9270 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9271 },
9272 {
9273 /* VEX_W_50_M_0 */
9274 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
9275 },
9276 {
9277 /* VEX_W_51_P_0 */
9278 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
9279 },
9280 {
9281 /* VEX_W_51_P_1 */
539f890d 9282 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9283 },
9284 {
9285 /* VEX_W_51_P_2 */
9286 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
9287 },
9288 {
9289 /* VEX_W_51_P_3 */
539f890d 9290 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9291 },
9292 {
9293 /* VEX_W_52_P_0 */
9294 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
9295 },
9296 {
9297 /* VEX_W_52_P_1 */
539f890d 9298 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9299 },
9300 {
9301 /* VEX_W_53_P_0 */
9302 { "vrcpps", { XM, EXx } },
9e30b8e0
L
9303 },
9304 {
9305 /* VEX_W_53_P_1 */
539f890d 9306 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9307 },
9308 {
9309 /* VEX_W_58_P_0 */
9310 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
9311 },
9312 {
9313 /* VEX_W_58_P_1 */
539f890d 9314 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9315 },
9316 {
9317 /* VEX_W_58_P_2 */
9318 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9319 },
9320 {
9321 /* VEX_W_58_P_3 */
539f890d 9322 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9323 },
9324 {
9325 /* VEX_W_59_P_0 */
9326 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
9327 },
9328 {
9329 /* VEX_W_59_P_1 */
539f890d 9330 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9331 },
9332 {
9333 /* VEX_W_59_P_2 */
9334 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
9335 },
9336 {
9337 /* VEX_W_59_P_3 */
539f890d 9338 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9339 },
9340 {
9341 /* VEX_W_5A_P_0 */
9342 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
9343 },
9344 {
9345 /* VEX_W_5A_P_1 */
539f890d 9346 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9347 },
9348 {
9349 /* VEX_W_5A_P_3 */
539f890d 9350 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9351 },
9352 {
9353 /* VEX_W_5B_P_0 */
9354 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
9355 },
9356 {
9357 /* VEX_W_5B_P_1 */
9358 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
9359 },
9360 {
9361 /* VEX_W_5B_P_2 */
9362 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
9363 },
9364 {
9365 /* VEX_W_5C_P_0 */
9366 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
9367 },
9368 {
9369 /* VEX_W_5C_P_1 */
539f890d 9370 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9371 },
9372 {
9373 /* VEX_W_5C_P_2 */
9374 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9375 },
9376 {
9377 /* VEX_W_5C_P_3 */
539f890d 9378 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9379 },
9380 {
9381 /* VEX_W_5D_P_0 */
9382 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
9383 },
9384 {
9385 /* VEX_W_5D_P_1 */
539f890d 9386 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9387 },
9388 {
9389 /* VEX_W_5D_P_2 */
9390 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
9391 },
9392 {
9393 /* VEX_W_5D_P_3 */
539f890d 9394 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9395 },
9396 {
9397 /* VEX_W_5E_P_0 */
9398 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
9399 },
9400 {
9401 /* VEX_W_5E_P_1 */
539f890d 9402 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9403 },
9404 {
9405 /* VEX_W_5E_P_2 */
9406 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
9407 },
9408 {
9409 /* VEX_W_5E_P_3 */
539f890d 9410 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9411 },
9412 {
9413 /* VEX_W_5F_P_0 */
9414 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
9415 },
9416 {
9417 /* VEX_W_5F_P_1 */
539f890d 9418 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9419 },
9420 {
9421 /* VEX_W_5F_P_2 */
9422 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
9423 },
9424 {
9425 /* VEX_W_5F_P_3 */
539f890d 9426 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9427 },
9428 {
9429 /* VEX_W_60_P_2 */
9430 { "vpunpcklbw", { XM, Vex128, EXx } },
9e30b8e0
L
9431 },
9432 {
9433 /* VEX_W_61_P_2 */
9434 { "vpunpcklwd", { XM, Vex128, EXx } },
9e30b8e0
L
9435 },
9436 {
9437 /* VEX_W_62_P_2 */
9438 { "vpunpckldq", { XM, Vex128, EXx } },
9e30b8e0
L
9439 },
9440 {
9441 /* VEX_W_63_P_2 */
9442 { "vpacksswb", { XM, Vex128, EXx } },
9e30b8e0
L
9443 },
9444 {
9445 /* VEX_W_64_P_2 */
9446 { "vpcmpgtb", { XM, Vex128, EXx } },
9e30b8e0
L
9447 },
9448 {
9449 /* VEX_W_65_P_2 */
9450 { "vpcmpgtw", { XM, Vex128, EXx } },
9e30b8e0
L
9451 },
9452 {
9453 /* VEX_W_66_P_2 */
9454 { "vpcmpgtd", { XM, Vex128, EXx } },
9e30b8e0
L
9455 },
9456 {
9457 /* VEX_W_67_P_2 */
9458 { "vpackuswb", { XM, Vex128, EXx } },
9e30b8e0
L
9459 },
9460 {
9461 /* VEX_W_68_P_2 */
9462 { "vpunpckhbw", { XM, Vex128, EXx } },
9e30b8e0
L
9463 },
9464 {
9465 /* VEX_W_69_P_2 */
9466 { "vpunpckhwd", { XM, Vex128, EXx } },
9e30b8e0
L
9467 },
9468 {
9469 /* VEX_W_6A_P_2 */
9470 { "vpunpckhdq", { XM, Vex128, EXx } },
9e30b8e0
L
9471 },
9472 {
9473 /* VEX_W_6B_P_2 */
9474 { "vpackssdw", { XM, Vex128, EXx } },
9e30b8e0
L
9475 },
9476 {
9477 /* VEX_W_6C_P_2 */
9478 { "vpunpcklqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9479 },
9480 {
9481 /* VEX_W_6D_P_2 */
9482 { "vpunpckhqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9483 },
9484 {
9485 /* VEX_W_6F_P_1 */
efdb52b7 9486 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
9487 },
9488 {
9489 /* VEX_W_6F_P_2 */
efdb52b7 9490 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
9491 },
9492 {
9493 /* VEX_W_70_P_1 */
9494 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
9495 },
9496 {
9497 /* VEX_W_70_P_2 */
9498 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
9499 },
9500 {
9501 /* VEX_W_70_P_3 */
9502 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
9503 },
9504 {
9505 /* VEX_W_71_R_2_P_2 */
9506 { "vpsrlw", { Vex128, XS, Ib } },
9e30b8e0
L
9507 },
9508 {
9509 /* VEX_W_71_R_4_P_2 */
9510 { "vpsraw", { Vex128, XS, Ib } },
9e30b8e0
L
9511 },
9512 {
9513 /* VEX_W_71_R_6_P_2 */
9514 { "vpsllw", { Vex128, XS, Ib } },
9e30b8e0
L
9515 },
9516 {
9517 /* VEX_W_72_R_2_P_2 */
9518 { "vpsrld", { Vex128, XS, Ib } },
9e30b8e0
L
9519 },
9520 {
9521 /* VEX_W_72_R_4_P_2 */
9522 { "vpsrad", { Vex128, XS, Ib } },
9e30b8e0
L
9523 },
9524 {
9525 /* VEX_W_72_R_6_P_2 */
9526 { "vpslld", { Vex128, XS, Ib } },
9e30b8e0
L
9527 },
9528 {
9529 /* VEX_W_73_R_2_P_2 */
9530 { "vpsrlq", { Vex128, XS, Ib } },
9e30b8e0
L
9531 },
9532 {
9533 /* VEX_W_73_R_3_P_2 */
9534 { "vpsrldq", { Vex128, XS, Ib } },
9e30b8e0
L
9535 },
9536 {
9537 /* VEX_W_73_R_6_P_2 */
9538 { "vpsllq", { Vex128, XS, Ib } },
9e30b8e0
L
9539 },
9540 {
9541 /* VEX_W_73_R_7_P_2 */
9542 { "vpslldq", { Vex128, XS, Ib } },
9e30b8e0
L
9543 },
9544 {
9545 /* VEX_W_74_P_2 */
9546 { "vpcmpeqb", { XM, Vex128, EXx } },
9e30b8e0
L
9547 },
9548 {
9549 /* VEX_W_75_P_2 */
9550 { "vpcmpeqw", { XM, Vex128, EXx } },
9e30b8e0
L
9551 },
9552 {
9553 /* VEX_W_76_P_2 */
9554 { "vpcmpeqd", { XM, Vex128, EXx } },
9e30b8e0
L
9555 },
9556 {
9557 /* VEX_W_77_P_0 */
9558 { "", { VZERO } },
9e30b8e0
L
9559 },
9560 {
9561 /* VEX_W_7C_P_2 */
9562 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9563 },
9564 {
9565 /* VEX_W_7C_P_3 */
9566 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
9567 },
9568 {
9569 /* VEX_W_7D_P_2 */
9570 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9571 },
9572 {
9573 /* VEX_W_7D_P_3 */
9574 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
9575 },
9576 {
9577 /* VEX_W_7E_P_1 */
539f890d 9578 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
9579 },
9580 {
9581 /* VEX_W_7F_P_1 */
9582 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
9583 },
9584 {
9585 /* VEX_W_7F_P_2 */
9586 { "vmovdqa", { EXxS, XM } },
9e30b8e0
L
9587 },
9588 {
9589 /* VEX_W_AE_R_2_M_0 */
9590 { "vldmxcsr", { Md } },
9e30b8e0
L
9591 },
9592 {
9593 /* VEX_W_AE_R_3_M_0 */
9594 { "vstmxcsr", { Md } },
9e30b8e0
L
9595 },
9596 {
9597 /* VEX_W_C2_P_0 */
9598 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9599 },
9600 {
9601 /* VEX_W_C2_P_1 */
539f890d 9602 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
9603 },
9604 {
9605 /* VEX_W_C2_P_2 */
9606 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9607 },
9608 {
9609 /* VEX_W_C2_P_3 */
539f890d 9610 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
9611 },
9612 {
9613 /* VEX_W_C4_P_2 */
9614 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
9615 },
9616 {
9617 /* VEX_W_C5_P_2 */
9618 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
9619 },
9620 {
9621 /* VEX_W_D0_P_2 */
9622 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9623 },
9624 {
9625 /* VEX_W_D0_P_3 */
9626 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
9627 },
9628 {
9629 /* VEX_W_D1_P_2 */
9630 { "vpsrlw", { XM, Vex128, EXx } },
9e30b8e0
L
9631 },
9632 {
9633 /* VEX_W_D2_P_2 */
9634 { "vpsrld", { XM, Vex128, EXx } },
9e30b8e0
L
9635 },
9636 {
9637 /* VEX_W_D3_P_2 */
9638 { "vpsrlq", { XM, Vex128, EXx } },
9e30b8e0
L
9639 },
9640 {
9641 /* VEX_W_D4_P_2 */
9642 { "vpaddq", { XM, Vex128, EXx } },
9e30b8e0
L
9643 },
9644 {
9645 /* VEX_W_D5_P_2 */
9646 { "vpmullw", { XM, Vex128, EXx } },
9e30b8e0
L
9647 },
9648 {
9649 /* VEX_W_D6_P_2 */
539f890d 9650 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
9651 },
9652 {
9653 /* VEX_W_D7_P_2_M_1 */
9654 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
9655 },
9656 {
9657 /* VEX_W_D8_P_2 */
9658 { "vpsubusb", { XM, Vex128, EXx } },
9e30b8e0
L
9659 },
9660 {
9661 /* VEX_W_D9_P_2 */
9662 { "vpsubusw", { XM, Vex128, EXx } },
9e30b8e0
L
9663 },
9664 {
9665 /* VEX_W_DA_P_2 */
9666 { "vpminub", { XM, Vex128, EXx } },
9e30b8e0
L
9667 },
9668 {
9669 /* VEX_W_DB_P_2 */
9670 { "vpand", { XM, Vex128, EXx } },
9e30b8e0
L
9671 },
9672 {
9673 /* VEX_W_DC_P_2 */
9674 { "vpaddusb", { XM, Vex128, EXx } },
9e30b8e0
L
9675 },
9676 {
9677 /* VEX_W_DD_P_2 */
9678 { "vpaddusw", { XM, Vex128, EXx } },
9e30b8e0
L
9679 },
9680 {
9681 /* VEX_W_DE_P_2 */
9682 { "vpmaxub", { XM, Vex128, EXx } },
9e30b8e0
L
9683 },
9684 {
9685 /* VEX_W_DF_P_2 */
9686 { "vpandn", { XM, Vex128, EXx } },
9e30b8e0
L
9687 },
9688 {
9689 /* VEX_W_E0_P_2 */
9690 { "vpavgb", { XM, Vex128, EXx } },
9e30b8e0
L
9691 },
9692 {
9693 /* VEX_W_E1_P_2 */
9694 { "vpsraw", { XM, Vex128, EXx } },
9e30b8e0
L
9695 },
9696 {
9697 /* VEX_W_E2_P_2 */
9698 { "vpsrad", { XM, Vex128, EXx } },
9e30b8e0
L
9699 },
9700 {
9701 /* VEX_W_E3_P_2 */
9702 { "vpavgw", { XM, Vex128, EXx } },
9e30b8e0
L
9703 },
9704 {
9705 /* VEX_W_E4_P_2 */
9706 { "vpmulhuw", { XM, Vex128, EXx } },
9e30b8e0
L
9707 },
9708 {
9709 /* VEX_W_E5_P_2 */
9710 { "vpmulhw", { XM, Vex128, EXx } },
9e30b8e0
L
9711 },
9712 {
9713 /* VEX_W_E6_P_1 */
efdb52b7 9714 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
9715 },
9716 {
9717 /* VEX_W_E6_P_2 */
a179a9fd 9718 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9719 },
9720 {
9721 /* VEX_W_E6_P_3 */
a179a9fd 9722 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9723 },
9724 {
9725 /* VEX_W_E7_P_2_M_0 */
9726 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
9727 },
9728 {
9729 /* VEX_W_E8_P_2 */
9730 { "vpsubsb", { XM, Vex128, EXx } },
9e30b8e0
L
9731 },
9732 {
9733 /* VEX_W_E9_P_2 */
9734 { "vpsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9735 },
9736 {
9737 /* VEX_W_EA_P_2 */
9738 { "vpminsw", { XM, Vex128, EXx } },
9e30b8e0
L
9739 },
9740 {
9741 /* VEX_W_EB_P_2 */
9742 { "vpor", { XM, Vex128, EXx } },
9e30b8e0
L
9743 },
9744 {
9745 /* VEX_W_EC_P_2 */
9746 { "vpaddsb", { XM, Vex128, EXx } },
9e30b8e0
L
9747 },
9748 {
9749 /* VEX_W_ED_P_2 */
9750 { "vpaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9751 },
9752 {
9753 /* VEX_W_EE_P_2 */
9754 { "vpmaxsw", { XM, Vex128, EXx } },
9e30b8e0
L
9755 },
9756 {
9757 /* VEX_W_EF_P_2 */
9758 { "vpxor", { XM, Vex128, EXx } },
9e30b8e0
L
9759 },
9760 {
9761 /* VEX_W_F0_P_3_M_0 */
9762 { "vlddqu", { XM, M } },
9e30b8e0
L
9763 },
9764 {
9765 /* VEX_W_F1_P_2 */
9766 { "vpsllw", { XM, Vex128, EXx } },
9e30b8e0
L
9767 },
9768 {
9769 /* VEX_W_F2_P_2 */
9770 { "vpslld", { XM, Vex128, EXx } },
9e30b8e0
L
9771 },
9772 {
9773 /* VEX_W_F3_P_2 */
9774 { "vpsllq", { XM, Vex128, EXx } },
9e30b8e0
L
9775 },
9776 {
9777 /* VEX_W_F4_P_2 */
9778 { "vpmuludq", { XM, Vex128, EXx } },
9e30b8e0
L
9779 },
9780 {
9781 /* VEX_W_F5_P_2 */
9782 { "vpmaddwd", { XM, Vex128, EXx } },
9e30b8e0
L
9783 },
9784 {
9785 /* VEX_W_F6_P_2 */
9786 { "vpsadbw", { XM, Vex128, EXx } },
9e30b8e0
L
9787 },
9788 {
9789 /* VEX_W_F7_P_2 */
9790 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
9791 },
9792 {
9793 /* VEX_W_F8_P_2 */
9794 { "vpsubb", { XM, Vex128, EXx } },
9e30b8e0
L
9795 },
9796 {
9797 /* VEX_W_F9_P_2 */
9798 { "vpsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9799 },
9800 {
9801 /* VEX_W_FA_P_2 */
9802 { "vpsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9803 },
9804 {
9805 /* VEX_W_FB_P_2 */
9806 { "vpsubq", { XM, Vex128, EXx } },
9e30b8e0
L
9807 },
9808 {
9809 /* VEX_W_FC_P_2 */
9810 { "vpaddb", { XM, Vex128, EXx } },
9e30b8e0
L
9811 },
9812 {
9813 /* VEX_W_FD_P_2 */
9814 { "vpaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9815 },
9816 {
9817 /* VEX_W_FE_P_2 */
9818 { "vpaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9819 },
9820 {
9821 /* VEX_W_3800_P_2 */
9822 { "vpshufb", { XM, Vex128, EXx } },
9e30b8e0
L
9823 },
9824 {
9825 /* VEX_W_3801_P_2 */
9826 { "vphaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9827 },
9828 {
9829 /* VEX_W_3802_P_2 */
9830 { "vphaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9831 },
9832 {
9833 /* VEX_W_3803_P_2 */
9834 { "vphaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9835 },
9836 {
9837 /* VEX_W_3804_P_2 */
9838 { "vpmaddubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9839 },
9840 {
9841 /* VEX_W_3805_P_2 */
9842 { "vphsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9843 },
9844 {
9845 /* VEX_W_3806_P_2 */
9846 { "vphsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9847 },
9848 {
9849 /* VEX_W_3807_P_2 */
9850 { "vphsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9851 },
9852 {
9853 /* VEX_W_3808_P_2 */
9854 { "vpsignb", { XM, Vex128, EXx } },
9e30b8e0
L
9855 },
9856 {
9857 /* VEX_W_3809_P_2 */
9858 { "vpsignw", { XM, Vex128, EXx } },
9e30b8e0
L
9859 },
9860 {
9861 /* VEX_W_380A_P_2 */
9862 { "vpsignd", { XM, Vex128, EXx } },
9e30b8e0
L
9863 },
9864 {
9865 /* VEX_W_380B_P_2 */
9866 { "vpmulhrsw", { XM, Vex128, EXx } },
9e30b8e0
L
9867 },
9868 {
9869 /* VEX_W_380C_P_2 */
9870 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
9871 },
9872 {
9873 /* VEX_W_380D_P_2 */
9874 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
9875 },
9876 {
9877 /* VEX_W_380E_P_2 */
9878 { "vtestps", { XM, EXx } },
9e30b8e0
L
9879 },
9880 {
9881 /* VEX_W_380F_P_2 */
9882 { "vtestpd", { XM, EXx } },
9e30b8e0
L
9883 },
9884 {
9885 /* VEX_W_3817_P_2 */
9886 { "vptest", { XM, EXx } },
9e30b8e0 9887 },
bcf2684f
L
9888 {
9889 /* VEX_W_3818_P_2_M_0 */
9890 { "vbroadcastss", { XM, Md } },
bcf2684f 9891 },
9e30b8e0
L
9892 {
9893 /* VEX_W_3819_P_2_M_0 */
9894 { "vbroadcastsd", { XM, Mq } },
9e30b8e0
L
9895 },
9896 {
9897 /* VEX_W_381A_P_2_M_0 */
9898 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
9899 },
9900 {
9901 /* VEX_W_381C_P_2 */
9902 { "vpabsb", { XM, EXx } },
9e30b8e0
L
9903 },
9904 {
9905 /* VEX_W_381D_P_2 */
9906 { "vpabsw", { XM, EXx } },
9e30b8e0
L
9907 },
9908 {
9909 /* VEX_W_381E_P_2 */
9910 { "vpabsd", { XM, EXx } },
9e30b8e0
L
9911 },
9912 {
9913 /* VEX_W_3820_P_2 */
9914 { "vpmovsxbw", { XM, EXq } },
9e30b8e0
L
9915 },
9916 {
9917 /* VEX_W_3821_P_2 */
9918 { "vpmovsxbd", { XM, EXd } },
9e30b8e0
L
9919 },
9920 {
9921 /* VEX_W_3822_P_2 */
9922 { "vpmovsxbq", { XM, EXw } },
9e30b8e0
L
9923 },
9924 {
9925 /* VEX_W_3823_P_2 */
9926 { "vpmovsxwd", { XM, EXq } },
9e30b8e0
L
9927 },
9928 {
9929 /* VEX_W_3824_P_2 */
9930 { "vpmovsxwq", { XM, EXd } },
9e30b8e0
L
9931 },
9932 {
9933 /* VEX_W_3825_P_2 */
9934 { "vpmovsxdq", { XM, EXq } },
9e30b8e0
L
9935 },
9936 {
9937 /* VEX_W_3828_P_2 */
9938 { "vpmuldq", { XM, Vex128, EXx } },
9e30b8e0
L
9939 },
9940 {
9941 /* VEX_W_3829_P_2 */
9942 { "vpcmpeqq", { XM, Vex128, EXx } },
9e30b8e0
L
9943 },
9944 {
9945 /* VEX_W_382A_P_2_M_0 */
9946 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
9947 },
9948 {
9949 /* VEX_W_382B_P_2 */
9950 { "vpackusdw", { XM, Vex128, EXx } },
9e30b8e0 9951 },
53aa04a0
L
9952 {
9953 /* VEX_W_382C_P_2_M_0 */
9954 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
9955 },
9956 {
9957 /* VEX_W_382D_P_2_M_0 */
9958 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
9959 },
9960 {
9961 /* VEX_W_382E_P_2_M_0 */
9962 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
9963 },
9964 {
9965 /* VEX_W_382F_P_2_M_0 */
9966 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 9967 },
9e30b8e0
L
9968 {
9969 /* VEX_W_3830_P_2 */
9970 { "vpmovzxbw", { XM, EXq } },
9e30b8e0
L
9971 },
9972 {
9973 /* VEX_W_3831_P_2 */
9974 { "vpmovzxbd", { XM, EXd } },
9e30b8e0
L
9975 },
9976 {
9977 /* VEX_W_3832_P_2 */
9978 { "vpmovzxbq", { XM, EXw } },
9e30b8e0
L
9979 },
9980 {
9981 /* VEX_W_3833_P_2 */
9982 { "vpmovzxwd", { XM, EXq } },
9e30b8e0
L
9983 },
9984 {
9985 /* VEX_W_3834_P_2 */
9986 { "vpmovzxwq", { XM, EXd } },
9e30b8e0
L
9987 },
9988 {
9989 /* VEX_W_3835_P_2 */
9990 { "vpmovzxdq", { XM, EXq } },
9e30b8e0
L
9991 },
9992 {
9993 /* VEX_W_3837_P_2 */
9994 { "vpcmpgtq", { XM, Vex128, EXx } },
9e30b8e0
L
9995 },
9996 {
9997 /* VEX_W_3838_P_2 */
9998 { "vpminsb", { XM, Vex128, EXx } },
9e30b8e0
L
9999 },
10000 {
10001 /* VEX_W_3839_P_2 */
10002 { "vpminsd", { XM, Vex128, EXx } },
9e30b8e0
L
10003 },
10004 {
10005 /* VEX_W_383A_P_2 */
10006 { "vpminuw", { XM, Vex128, EXx } },
9e30b8e0
L
10007 },
10008 {
10009 /* VEX_W_383B_P_2 */
10010 { "vpminud", { XM, Vex128, EXx } },
9e30b8e0
L
10011 },
10012 {
10013 /* VEX_W_383C_P_2 */
10014 { "vpmaxsb", { XM, Vex128, EXx } },
9e30b8e0
L
10015 },
10016 {
10017 /* VEX_W_383D_P_2 */
10018 { "vpmaxsd", { XM, Vex128, EXx } },
9e30b8e0
L
10019 },
10020 {
10021 /* VEX_W_383E_P_2 */
10022 { "vpmaxuw", { XM, Vex128, EXx } },
9e30b8e0
L
10023 },
10024 {
10025 /* VEX_W_383F_P_2 */
10026 { "vpmaxud", { XM, Vex128, EXx } },
9e30b8e0
L
10027 },
10028 {
10029 /* VEX_W_3840_P_2 */
10030 { "vpmulld", { XM, Vex128, EXx } },
9e30b8e0
L
10031 },
10032 {
10033 /* VEX_W_3841_P_2 */
10034 { "vphminposuw", { XM, EXx } },
9e30b8e0
L
10035 },
10036 {
10037 /* VEX_W_38DB_P_2 */
10038 { "vaesimc", { XM, EXx } },
9e30b8e0
L
10039 },
10040 {
10041 /* VEX_W_38DC_P_2 */
10042 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
10043 },
10044 {
10045 /* VEX_W_38DD_P_2 */
10046 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10047 },
10048 {
10049 /* VEX_W_38DE_P_2 */
10050 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10051 },
10052 {
10053 /* VEX_W_38DF_P_2 */
10054 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0
L
10055 },
10056 {
10057 /* VEX_W_3A04_P_2 */
10058 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10059 },
10060 {
10061 /* VEX_W_3A05_P_2 */
10062 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10063 },
10064 {
10065 /* VEX_W_3A06_P_2 */
10066 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10067 },
10068 {
10069 /* VEX_W_3A08_P_2 */
10070 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10071 },
10072 {
10073 /* VEX_W_3A09_P_2 */
10074 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10075 },
10076 {
10077 /* VEX_W_3A0A_P_2 */
539f890d 10078 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10079 },
10080 {
10081 /* VEX_W_3A0B_P_2 */
539f890d 10082 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10083 },
10084 {
10085 /* VEX_W_3A0C_P_2 */
10086 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10087 },
10088 {
10089 /* VEX_W_3A0D_P_2 */
10090 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10091 },
10092 {
10093 /* VEX_W_3A0E_P_2 */
10094 { "vpblendw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10095 },
10096 {
10097 /* VEX_W_3A0F_P_2 */
10098 { "vpalignr", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10099 },
10100 {
10101 /* VEX_W_3A14_P_2 */
10102 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10103 },
10104 {
10105 /* VEX_W_3A15_P_2 */
10106 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10107 },
10108 {
10109 /* VEX_W_3A18_P_2 */
10110 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10111 },
10112 {
10113 /* VEX_W_3A19_P_2 */
10114 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10115 },
10116 {
10117 /* VEX_W_3A20_P_2 */
10118 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10119 },
10120 {
10121 /* VEX_W_3A21_P_2 */
10122 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0
L
10123 },
10124 {
10125 /* VEX_W_3A40_P_2 */
10126 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10127 },
10128 {
10129 /* VEX_W_3A41_P_2 */
10130 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10131 },
10132 {
10133 /* VEX_W_3A42_P_2 */
10134 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10135 },
10136 {
10137 /* VEX_W_3A44_P_2 */
10138 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10139 },
a683cc34
SP
10140 {
10141 /* VEX_W_3A48_P_2 */
10142 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10143 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10144 },
10145 {
10146 /* VEX_W_3A49_P_2 */
10147 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10148 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10149 },
9e30b8e0
L
10150 {
10151 /* VEX_W_3A4A_P_2 */
10152 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10153 },
10154 {
10155 /* VEX_W_3A4B_P_2 */
10156 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10157 },
10158 {
10159 /* VEX_W_3A4C_P_2 */
10160 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
9e30b8e0
L
10161 },
10162 {
10163 /* VEX_W_3A60_P_2 */
10164 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
10165 },
10166 {
10167 /* VEX_W_3A61_P_2 */
10168 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
10169 },
10170 {
10171 /* VEX_W_3A62_P_2 */
10172 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
10173 },
10174 {
10175 /* VEX_W_3A63_P_2 */
10176 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
10177 },
10178 {
10179 /* VEX_W_3ADF_P_2 */
10180 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0
L
10181 },
10182};
10183
10184static const struct dis386 mod_table[][2] = {
10185 {
10186 /* MOD_8D */
10187 { "leaS", { Gv, M } },
9e30b8e0
L
10188 },
10189 {
10190 /* MOD_0F01_REG_0 */
10191 { X86_64_TABLE (X86_64_0F01_REG_0) },
10192 { RM_TABLE (RM_0F01_REG_0) },
10193 },
10194 {
10195 /* MOD_0F01_REG_1 */
10196 { X86_64_TABLE (X86_64_0F01_REG_1) },
10197 { RM_TABLE (RM_0F01_REG_1) },
10198 },
10199 {
10200 /* MOD_0F01_REG_2 */
10201 { X86_64_TABLE (X86_64_0F01_REG_2) },
10202 { RM_TABLE (RM_0F01_REG_2) },
10203 },
10204 {
10205 /* MOD_0F01_REG_3 */
10206 { X86_64_TABLE (X86_64_0F01_REG_3) },
10207 { RM_TABLE (RM_0F01_REG_3) },
10208 },
10209 {
10210 /* MOD_0F01_REG_7 */
10211 { "invlpg", { Mb } },
10212 { RM_TABLE (RM_0F01_REG_7) },
10213 },
10214 {
10215 /* MOD_0F12_PREFIX_0 */
10216 { "movlps", { XM, EXq } },
10217 { "movhlps", { XM, EXq } },
10218 },
10219 {
10220 /* MOD_0F13 */
10221 { "movlpX", { EXq, XM } },
9e30b8e0
L
10222 },
10223 {
10224 /* MOD_0F16_PREFIX_0 */
10225 { "movhps", { XM, EXq } },
10226 { "movlhps", { XM, EXq } },
10227 },
10228 {
10229 /* MOD_0F17 */
10230 { "movhpX", { EXq, XM } },
9e30b8e0
L
10231 },
10232 {
10233 /* MOD_0F18_REG_0 */
10234 { "prefetchnta", { Mb } },
9e30b8e0
L
10235 },
10236 {
10237 /* MOD_0F18_REG_1 */
10238 { "prefetcht0", { Mb } },
9e30b8e0
L
10239 },
10240 {
10241 /* MOD_0F18_REG_2 */
10242 { "prefetcht1", { Mb } },
9e30b8e0
L
10243 },
10244 {
10245 /* MOD_0F18_REG_3 */
10246 { "prefetcht2", { Mb } },
9e30b8e0
L
10247 },
10248 {
10249 /* MOD_0F20 */
592d1631 10250 { Bad_Opcode },
9e30b8e0
L
10251 { "movZ", { Rm, Cm } },
10252 },
10253 {
10254 /* MOD_0F21 */
592d1631 10255 { Bad_Opcode },
9e30b8e0
L
10256 { "movZ", { Rm, Dm } },
10257 },
10258 {
10259 /* MOD_0F22 */
592d1631 10260 { Bad_Opcode },
9e30b8e0 10261 { "movZ", { Cm, Rm } },
b844680a
L
10262 },
10263 {
92fddf8e 10264 /* MOD_0F23 */
592d1631 10265 { Bad_Opcode },
92fddf8e 10266 { "movZ", { Dm, Rm } },
b844680a
L
10267 },
10268 {
92fddf8e 10269 /* MOD_0F24 */
592d1631 10270 { Bad_Opcode },
92fddf8e 10271 { "movL", { Rd, Td } },
b844680a
L
10272 },
10273 {
92fddf8e 10274 /* MOD_0F26 */
592d1631 10275 { Bad_Opcode },
92fddf8e 10276 { "movL", { Td, Rd } },
b844680a 10277 },
75c135a8
L
10278 {
10279 /* MOD_0F2B_PREFIX_0 */
4ee52178 10280 {"movntps", { Mx, XM } },
75c135a8
L
10281 },
10282 {
10283 /* MOD_0F2B_PREFIX_1 */
4ee52178 10284 {"movntss", { Md, XM } },
75c135a8
L
10285 },
10286 {
10287 /* MOD_0F2B_PREFIX_2 */
4ee52178 10288 {"movntpd", { Mx, XM } },
75c135a8
L
10289 },
10290 {
10291 /* MOD_0F2B_PREFIX_3 */
4ee52178 10292 {"movntsd", { Mq, XM } },
75c135a8
L
10293 },
10294 {
10295 /* MOD_0F51 */
592d1631 10296 { Bad_Opcode },
75c135a8
L
10297 { "movmskpX", { Gdq, XS } },
10298 },
b844680a 10299 {
1ceb70f8 10300 /* MOD_0F71_REG_2 */
592d1631 10301 { Bad_Opcode },
4e7d34a6 10302 { "psrlw", { MS, Ib } },
b844680a
L
10303 },
10304 {
1ceb70f8 10305 /* MOD_0F71_REG_4 */
592d1631 10306 { Bad_Opcode },
4e7d34a6 10307 { "psraw", { MS, Ib } },
b844680a
L
10308 },
10309 {
1ceb70f8 10310 /* MOD_0F71_REG_6 */
592d1631 10311 { Bad_Opcode },
4e7d34a6 10312 { "psllw", { MS, Ib } },
b844680a
L
10313 },
10314 {
1ceb70f8 10315 /* MOD_0F72_REG_2 */
592d1631 10316 { Bad_Opcode },
4e7d34a6 10317 { "psrld", { MS, Ib } },
b844680a
L
10318 },
10319 {
1ceb70f8 10320 /* MOD_0F72_REG_4 */
592d1631 10321 { Bad_Opcode },
4e7d34a6 10322 { "psrad", { MS, Ib } },
b844680a
L
10323 },
10324 {
1ceb70f8 10325 /* MOD_0F72_REG_6 */
592d1631 10326 { Bad_Opcode },
4e7d34a6 10327 { "pslld", { MS, Ib } },
b844680a
L
10328 },
10329 {
1ceb70f8 10330 /* MOD_0F73_REG_2 */
592d1631 10331 { Bad_Opcode },
4e7d34a6 10332 { "psrlq", { MS, Ib } },
b844680a
L
10333 },
10334 {
1ceb70f8 10335 /* MOD_0F73_REG_3 */
592d1631 10336 { Bad_Opcode },
c0f3af97
L
10337 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10338 },
10339 {
10340 /* MOD_0F73_REG_6 */
592d1631 10341 { Bad_Opcode },
c0f3af97
L
10342 { "psllq", { MS, Ib } },
10343 },
10344 {
10345 /* MOD_0F73_REG_7 */
592d1631 10346 { Bad_Opcode },
c0f3af97
L
10347 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10348 },
10349 {
10350 /* MOD_0FAE_REG_0 */
eacc9c89 10351 { "fxsave", { FXSAVE } },
c0f3af97
L
10352 },
10353 {
10354 /* MOD_0FAE_REG_1 */
eacc9c89 10355 { "fxrstor", { FXSAVE } },
c0f3af97
L
10356 },
10357 {
10358 /* MOD_0FAE_REG_2 */
10359 { "ldmxcsr", { Md } },
c0f3af97
L
10360 },
10361 {
10362 /* MOD_0FAE_REG_3 */
10363 { "stmxcsr", { Md } },
c0f3af97
L
10364 },
10365 {
10366 /* MOD_0FAE_REG_4 */
73bb6729 10367 { "xsave", { FXSAVE } },
c0f3af97
L
10368 },
10369 {
10370 /* MOD_0FAE_REG_5 */
73bb6729 10371 { "xrstor", { FXSAVE } },
c0f3af97
L
10372 { RM_TABLE (RM_0FAE_REG_5) },
10373 },
10374 {
10375 /* MOD_0FAE_REG_6 */
592d1631 10376 { Bad_Opcode },
c0f3af97
L
10377 { RM_TABLE (RM_0FAE_REG_6) },
10378 },
10379 {
10380 /* MOD_0FAE_REG_7 */
10381 { "clflush", { Mb } },
10382 { RM_TABLE (RM_0FAE_REG_7) },
10383 },
10384 {
10385 /* MOD_0FB2 */
10386 { "lssS", { Gv, Mp } },
c0f3af97
L
10387 },
10388 {
10389 /* MOD_0FB4 */
10390 { "lfsS", { Gv, Mp } },
c0f3af97
L
10391 },
10392 {
10393 /* MOD_0FB5 */
10394 { "lgsS", { Gv, Mp } },
c0f3af97
L
10395 },
10396 {
10397 /* MOD_0FC7_REG_6 */
10398 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
c0f3af97
L
10399 },
10400 {
10401 /* MOD_0FC7_REG_7 */
10402 { "vmptrst", { Mq } },
c0f3af97
L
10403 },
10404 {
10405 /* MOD_0FD7 */
592d1631 10406 { Bad_Opcode },
c0f3af97
L
10407 { "pmovmskb", { Gdq, MS } },
10408 },
10409 {
10410 /* MOD_0FE7_PREFIX_2 */
10411 { "movntdq", { Mx, XM } },
c0f3af97
L
10412 },
10413 {
10414 /* MOD_0FF0_PREFIX_3 */
10415 { "lddqu", { XM, M } },
c0f3af97
L
10416 },
10417 {
10418 /* MOD_0F382A_PREFIX_2 */
10419 { "movntdqa", { XM, Mx } },
c0f3af97
L
10420 },
10421 {
10422 /* MOD_62_32BIT */
10423 { "bound{S|}", { Gv, Ma } },
c0f3af97
L
10424 },
10425 {
10426 /* MOD_C4_32BIT */
10427 { "lesS", { Gv, Mp } },
10428 { VEX_C4_TABLE (VEX_0F) },
10429 },
10430 {
10431 /* MOD_C5_32BIT */
10432 { "ldsS", { Gv, Mp } },
10433 { VEX_C5_TABLE (VEX_0F) },
10434 },
10435 {
10436 /* MOD_VEX_12_PREFIX_0 */
10437 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) },
10438 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) },
10439 },
10440 {
10441 /* MOD_VEX_13 */
10442 { VEX_LEN_TABLE (VEX_LEN_13_M_0) },
c0f3af97
L
10443 },
10444 {
10445 /* MOD_VEX_16_PREFIX_0 */
10446 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) },
10447 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) },
10448 },
10449 {
10450 /* MOD_VEX_17 */
10451 { VEX_LEN_TABLE (VEX_LEN_17_M_0) },
c0f3af97
L
10452 },
10453 {
10454 /* MOD_VEX_2B */
9e30b8e0 10455 { VEX_W_TABLE (VEX_W_2B_M_0) },
c0f3af97
L
10456 },
10457 {
976f1fde 10458 /* MOD_VEX_50 */
592d1631 10459 { Bad_Opcode },
9e30b8e0 10460 { VEX_W_TABLE (VEX_W_50_M_0) },
c0f3af97
L
10461 },
10462 {
10463 /* MOD_VEX_71_REG_2 */
592d1631 10464 { Bad_Opcode },
c0f3af97 10465 { PREFIX_TABLE (PREFIX_VEX_71_REG_2) },
b844680a
L
10466 },
10467 {
c0f3af97 10468 /* MOD_VEX_71_REG_4 */
592d1631 10469 { Bad_Opcode },
c0f3af97 10470 { PREFIX_TABLE (PREFIX_VEX_71_REG_4) },
b844680a
L
10471 },
10472 {
c0f3af97 10473 /* MOD_VEX_71_REG_6 */
592d1631 10474 { Bad_Opcode },
c0f3af97 10475 { PREFIX_TABLE (PREFIX_VEX_71_REG_6) },
b844680a
L
10476 },
10477 {
c0f3af97 10478 /* MOD_VEX_72_REG_2 */
592d1631 10479 { Bad_Opcode },
c0f3af97 10480 { PREFIX_TABLE (PREFIX_VEX_72_REG_2) },
b844680a 10481 },
d8faab4e 10482 {
c0f3af97 10483 /* MOD_VEX_72_REG_4 */
592d1631 10484 { Bad_Opcode },
c0f3af97 10485 { PREFIX_TABLE (PREFIX_VEX_72_REG_4) },
d8faab4e
L
10486 },
10487 {
c0f3af97 10488 /* MOD_VEX_72_REG_6 */
592d1631 10489 { Bad_Opcode },
c0f3af97 10490 { PREFIX_TABLE (PREFIX_VEX_72_REG_6) },
d8faab4e 10491 },
876d4bfa 10492 {
c0f3af97 10493 /* MOD_VEX_73_REG_2 */
592d1631 10494 { Bad_Opcode },
c0f3af97 10495 { PREFIX_TABLE (PREFIX_VEX_73_REG_2) },
876d4bfa
L
10496 },
10497 {
c0f3af97 10498 /* MOD_VEX_73_REG_3 */
592d1631 10499 { Bad_Opcode },
c0f3af97 10500 { PREFIX_TABLE (PREFIX_VEX_73_REG_3) },
475a2301
L
10501 },
10502 {
c0f3af97 10503 /* MOD_VEX_73_REG_6 */
592d1631 10504 { Bad_Opcode },
c0f3af97 10505 { PREFIX_TABLE (PREFIX_VEX_73_REG_6) },
876d4bfa
L
10506 },
10507 {
c0f3af97 10508 /* MOD_VEX_73_REG_7 */
592d1631 10509 { Bad_Opcode },
c0f3af97 10510 { PREFIX_TABLE (PREFIX_VEX_73_REG_7) },
876d4bfa
L
10511 },
10512 {
c0f3af97
L
10513 /* MOD_VEX_AE_REG_2 */
10514 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) },
876d4bfa 10515 },
bbedc832 10516 {
c0f3af97
L
10517 /* MOD_VEX_AE_REG_3 */
10518 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) },
bbedc832 10519 },
144c41d9 10520 {
c0f3af97 10521 /* MOD_VEX_D7_PREFIX_2 */
592d1631 10522 { Bad_Opcode },
c0f3af97 10523 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) },
144c41d9 10524 },
1afd85e3 10525 {
c0f3af97 10526 /* MOD_VEX_E7_PREFIX_2 */
9e30b8e0 10527 { VEX_W_TABLE (VEX_W_E7_P_2_M_0) },
1afd85e3
L
10528 },
10529 {
c0f3af97 10530 /* MOD_VEX_F0_PREFIX_3 */
9e30b8e0 10531 { VEX_W_TABLE (VEX_W_F0_P_3_M_0) },
92fddf8e
L
10532 },
10533 {
c0f3af97 10534 /* MOD_VEX_3818_PREFIX_2 */
bcf2684f 10535 { VEX_W_TABLE (VEX_W_3818_P_2_M_0) },
1afd85e3 10536 },
75c135a8 10537 {
c0f3af97
L
10538 /* MOD_VEX_3819_PREFIX_2 */
10539 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) },
75c135a8
L
10540 },
10541 {
c0f3af97
L
10542 /* MOD_VEX_381A_PREFIX_2 */
10543 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) },
75c135a8 10544 },
1afd85e3 10545 {
c0f3af97
L
10546 /* MOD_VEX_382A_PREFIX_2 */
10547 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) },
1afd85e3 10548 },
75c135a8 10549 {
c0f3af97 10550 /* MOD_VEX_382C_PREFIX_2 */
53aa04a0 10551 { VEX_W_TABLE (VEX_W_382C_P_2_M_0) },
75c135a8 10552 },
1afd85e3 10553 {
c0f3af97 10554 /* MOD_VEX_382D_PREFIX_2 */
53aa04a0 10555 { VEX_W_TABLE (VEX_W_382D_P_2_M_0) },
1afd85e3
L
10556 },
10557 {
c0f3af97 10558 /* MOD_VEX_382E_PREFIX_2 */
53aa04a0 10559 { VEX_W_TABLE (VEX_W_382E_P_2_M_0) },
1afd85e3
L
10560 },
10561 {
c0f3af97 10562 /* MOD_VEX_382F_PREFIX_2 */
53aa04a0 10563 { VEX_W_TABLE (VEX_W_382F_P_2_M_0) },
1afd85e3 10564 },
b844680a
L
10565};
10566
1ceb70f8 10567static const struct dis386 rm_table[][8] = {
b844680a 10568 {
1ceb70f8 10569 /* RM_0F01_REG_0 */
592d1631 10570 { Bad_Opcode },
b844680a
L
10571 { "vmcall", { Skip_MODRM } },
10572 { "vmlaunch", { Skip_MODRM } },
10573 { "vmresume", { Skip_MODRM } },
10574 { "vmxoff", { Skip_MODRM } },
b844680a
L
10575 },
10576 {
1ceb70f8 10577 /* RM_0F01_REG_1 */
b844680a
L
10578 { "monitor", { { OP_Monitor, 0 } } },
10579 { "mwait", { { OP_Mwait, 0 } } },
b844680a 10580 },
475a2301
L
10581 {
10582 /* RM_0F01_REG_2 */
10583 { "xgetbv", { Skip_MODRM } },
10584 { "xsetbv", { Skip_MODRM } },
475a2301 10585 },
b844680a 10586 {
1ceb70f8 10587 /* RM_0F01_REG_3 */
4e7d34a6
L
10588 { "vmrun", { Skip_MODRM } },
10589 { "vmmcall", { Skip_MODRM } },
10590 { "vmload", { Skip_MODRM } },
10591 { "vmsave", { Skip_MODRM } },
10592 { "stgi", { Skip_MODRM } },
10593 { "clgi", { Skip_MODRM } },
10594 { "skinit", { Skip_MODRM } },
10595 { "invlpga", { Skip_MODRM } },
10596 },
10597 {
1ceb70f8 10598 /* RM_0F01_REG_7 */
4e7d34a6
L
10599 { "swapgs", { Skip_MODRM } },
10600 { "rdtscp", { Skip_MODRM } },
b844680a
L
10601 },
10602 {
1ceb70f8 10603 /* RM_0FAE_REG_5 */
4e7d34a6 10604 { "lfence", { Skip_MODRM } },
b844680a
L
10605 },
10606 {
1ceb70f8 10607 /* RM_0FAE_REG_6 */
4e7d34a6 10608 { "mfence", { Skip_MODRM } },
b844680a 10609 },
bbedc832 10610 {
1ceb70f8 10611 /* RM_0FAE_REG_7 */
4e7d34a6 10612 { "sfence", { Skip_MODRM } },
144c41d9 10613 },
b844680a
L
10614};
10615
c608c12e
AM
10616#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10617
f16cd0d5
L
10618/* We use the high bit to indicate different name for the same
10619 prefix. */
10620#define ADDR16_PREFIX (0x67 | 0x100)
10621#define ADDR32_PREFIX (0x67 | 0x200)
10622#define DATA16_PREFIX (0x66 | 0x100)
10623#define DATA32_PREFIX (0x66 | 0x200)
10624#define REP_PREFIX (0xf3 | 0x100)
10625
10626static int
26ca5450 10627ckprefix (void)
252b5132 10628{
f16cd0d5 10629 int newrex, i, length;
52b15da3 10630 rex = 0;
c0f3af97 10631 rex_ignored = 0;
252b5132 10632 prefixes = 0;
7d421014 10633 used_prefixes = 0;
52b15da3 10634 rex_used = 0;
f16cd0d5
L
10635 last_lock_prefix = -1;
10636 last_repz_prefix = -1;
10637 last_repnz_prefix = -1;
10638 last_data_prefix = -1;
10639 last_addr_prefix = -1;
10640 last_rex_prefix = -1;
10641 last_seg_prefix = -1;
f310f33d
L
10642 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10643 all_prefixes[i] = 0;
10644 i = 0;
f16cd0d5
L
10645 length = 0;
10646 /* The maximum instruction length is 15bytes. */
10647 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
10648 {
10649 FETCH_DATA (the_info, codep + 1);
52b15da3 10650 newrex = 0;
252b5132
RH
10651 switch (*codep)
10652 {
52b15da3
JH
10653 /* REX prefixes family. */
10654 case 0x40:
10655 case 0x41:
10656 case 0x42:
10657 case 0x43:
10658 case 0x44:
10659 case 0x45:
10660 case 0x46:
10661 case 0x47:
10662 case 0x48:
10663 case 0x49:
10664 case 0x4a:
10665 case 0x4b:
10666 case 0x4c:
10667 case 0x4d:
10668 case 0x4e:
10669 case 0x4f:
f16cd0d5
L
10670 if (address_mode == mode_64bit)
10671 newrex = *codep;
10672 else
10673 return 1;
10674 last_rex_prefix = i;
52b15da3 10675 break;
252b5132
RH
10676 case 0xf3:
10677 prefixes |= PREFIX_REPZ;
f16cd0d5 10678 last_repz_prefix = i;
252b5132
RH
10679 break;
10680 case 0xf2:
10681 prefixes |= PREFIX_REPNZ;
f16cd0d5 10682 last_repnz_prefix = i;
252b5132
RH
10683 break;
10684 case 0xf0:
10685 prefixes |= PREFIX_LOCK;
f16cd0d5 10686 last_lock_prefix = i;
252b5132
RH
10687 break;
10688 case 0x2e:
10689 prefixes |= PREFIX_CS;
f16cd0d5 10690 last_seg_prefix = i;
252b5132
RH
10691 break;
10692 case 0x36:
10693 prefixes |= PREFIX_SS;
f16cd0d5 10694 last_seg_prefix = i;
252b5132
RH
10695 break;
10696 case 0x3e:
10697 prefixes |= PREFIX_DS;
f16cd0d5 10698 last_seg_prefix = i;
252b5132
RH
10699 break;
10700 case 0x26:
10701 prefixes |= PREFIX_ES;
f16cd0d5 10702 last_seg_prefix = i;
252b5132
RH
10703 break;
10704 case 0x64:
10705 prefixes |= PREFIX_FS;
f16cd0d5 10706 last_seg_prefix = i;
252b5132
RH
10707 break;
10708 case 0x65:
10709 prefixes |= PREFIX_GS;
f16cd0d5 10710 last_seg_prefix = i;
252b5132
RH
10711 break;
10712 case 0x66:
10713 prefixes |= PREFIX_DATA;
f16cd0d5 10714 last_data_prefix = i;
252b5132
RH
10715 break;
10716 case 0x67:
10717 prefixes |= PREFIX_ADDR;
f16cd0d5 10718 last_addr_prefix = i;
252b5132 10719 break;
5076851f 10720 case FWAIT_OPCODE:
252b5132
RH
10721 /* fwait is really an instruction. If there are prefixes
10722 before the fwait, they belong to the fwait, *not* to the
10723 following instruction. */
3e7d61b2 10724 if (prefixes || rex)
252b5132
RH
10725 {
10726 prefixes |= PREFIX_FWAIT;
10727 codep++;
f16cd0d5 10728 return 1;
252b5132
RH
10729 }
10730 prefixes = PREFIX_FWAIT;
10731 break;
10732 default:
f16cd0d5 10733 return 1;
252b5132 10734 }
52b15da3
JH
10735 /* Rex is ignored when followed by another prefix. */
10736 if (rex)
10737 {
3e7d61b2 10738 rex_used = rex;
f16cd0d5 10739 return 1;
52b15da3 10740 }
f16cd0d5
L
10741 if (*codep != FWAIT_OPCODE)
10742 all_prefixes[i++] = *codep;
52b15da3 10743 rex = newrex;
252b5132 10744 codep++;
f16cd0d5
L
10745 length++;
10746 }
10747 return 0;
10748}
10749
10750static int
10751seg_prefix (int pref)
10752{
10753 switch (pref)
10754 {
10755 case 0x2e:
10756 return PREFIX_CS;
10757 case 0x36:
10758 return PREFIX_SS;
10759 case 0x3e:
10760 return PREFIX_DS;
10761 case 0x26:
10762 return PREFIX_ES;
10763 case 0x64:
10764 return PREFIX_FS;
10765 case 0x65:
10766 return PREFIX_GS;
10767 default:
10768 return 0;
252b5132
RH
10769 }
10770}
10771
7d421014
ILT
10772/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10773 prefix byte. */
10774
10775static const char *
26ca5450 10776prefix_name (int pref, int sizeflag)
7d421014 10777{
0003779b
L
10778 static const char *rexes [16] =
10779 {
10780 "rex", /* 0x40 */
10781 "rex.B", /* 0x41 */
10782 "rex.X", /* 0x42 */
10783 "rex.XB", /* 0x43 */
10784 "rex.R", /* 0x44 */
10785 "rex.RB", /* 0x45 */
10786 "rex.RX", /* 0x46 */
10787 "rex.RXB", /* 0x47 */
10788 "rex.W", /* 0x48 */
10789 "rex.WB", /* 0x49 */
10790 "rex.WX", /* 0x4a */
10791 "rex.WXB", /* 0x4b */
10792 "rex.WR", /* 0x4c */
10793 "rex.WRB", /* 0x4d */
10794 "rex.WRX", /* 0x4e */
10795 "rex.WRXB", /* 0x4f */
10796 };
10797
7d421014
ILT
10798 switch (pref)
10799 {
52b15da3
JH
10800 /* REX prefixes family. */
10801 case 0x40:
52b15da3 10802 case 0x41:
52b15da3 10803 case 0x42:
52b15da3 10804 case 0x43:
52b15da3 10805 case 0x44:
52b15da3 10806 case 0x45:
52b15da3 10807 case 0x46:
52b15da3 10808 case 0x47:
52b15da3 10809 case 0x48:
52b15da3 10810 case 0x49:
52b15da3 10811 case 0x4a:
52b15da3 10812 case 0x4b:
52b15da3 10813 case 0x4c:
52b15da3 10814 case 0x4d:
52b15da3 10815 case 0x4e:
52b15da3 10816 case 0x4f:
0003779b 10817 return rexes [pref - 0x40];
7d421014
ILT
10818 case 0xf3:
10819 return "repz";
10820 case 0xf2:
10821 return "repnz";
10822 case 0xf0:
10823 return "lock";
10824 case 0x2e:
10825 return "cs";
10826 case 0x36:
10827 return "ss";
10828 case 0x3e:
10829 return "ds";
10830 case 0x26:
10831 return "es";
10832 case 0x64:
10833 return "fs";
10834 case 0x65:
10835 return "gs";
10836 case 0x66:
10837 return (sizeflag & DFLAG) ? "data16" : "data32";
10838 case 0x67:
cb712a9e 10839 if (address_mode == mode_64bit)
db6eb5be 10840 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10841 else
2888cb7a 10842 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10843 case FWAIT_OPCODE:
10844 return "fwait";
f16cd0d5
L
10845 case ADDR16_PREFIX:
10846 return "addr16";
10847 case ADDR32_PREFIX:
10848 return "addr32";
10849 case DATA16_PREFIX:
10850 return "data16";
10851 case DATA32_PREFIX:
10852 return "data32";
10853 case REP_PREFIX:
10854 return "rep";
7d421014
ILT
10855 default:
10856 return NULL;
10857 }
10858}
10859
ce518a5f
L
10860static char op_out[MAX_OPERANDS][100];
10861static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10862static int two_source_ops;
ce518a5f
L
10863static bfd_vma op_address[MAX_OPERANDS];
10864static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10865static bfd_vma start_pc;
ce518a5f 10866
252b5132
RH
10867/*
10868 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10869 * (see topic "Redundant prefixes" in the "Differences from 8086"
10870 * section of the "Virtual 8086 Mode" chapter.)
10871 * 'pc' should be the address of this instruction, it will
10872 * be used to print the target address if this is a relative jump or call
10873 * The function returns the length of this instruction in bytes.
10874 */
10875
252b5132 10876static char intel_syntax;
9d141669 10877static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10878static char open_char;
10879static char close_char;
10880static char separator_char;
10881static char scale_char;
10882
e396998b
AM
10883/* Here for backwards compatibility. When gdb stops using
10884 print_insn_i386_att and print_insn_i386_intel these functions can
10885 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10886int
26ca5450 10887print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10888{
10889 intel_syntax = 0;
e396998b
AM
10890
10891 return print_insn (pc, info);
252b5132
RH
10892}
10893
10894int
26ca5450 10895print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10896{
10897 intel_syntax = 1;
e396998b
AM
10898
10899 return print_insn (pc, info);
252b5132
RH
10900}
10901
e396998b 10902int
26ca5450 10903print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10904{
10905 intel_syntax = -1;
10906
10907 return print_insn (pc, info);
10908}
10909
f59a29b9
L
10910void
10911print_i386_disassembler_options (FILE *stream)
10912{
10913 fprintf (stream, _("\n\
10914The following i386/x86-64 specific disassembler options are supported for use\n\
10915with the -M switch (multiple options should be separated by commas):\n"));
10916
10917 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10918 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10919 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10920 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10921 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10922 fprintf (stream, _(" att-mnemonic\n"
10923 " Display instruction in AT&T mnemonic\n"));
10924 fprintf (stream, _(" intel-mnemonic\n"
10925 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10926 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10927 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10928 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10929 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10930 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10931 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10932}
10933
592d1631
L
10934/* Bad opcode. */
10935static const struct dis386 bad_opcode = { "(bad)", { XX } };
10936
b844680a
L
10937/* Get a pointer to struct dis386 with a valid name. */
10938
10939static const struct dis386 *
8bb15339 10940get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10941{
91d6fa6a 10942 int vindex, vex_table_index;
b844680a
L
10943
10944 if (dp->name != NULL)
10945 return dp;
10946
10947 switch (dp->op[0].bytemode)
10948 {
1ceb70f8
L
10949 case USE_REG_TABLE:
10950 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10951 break;
10952
10953 case USE_MOD_TABLE:
91d6fa6a
NC
10954 vindex = modrm.mod == 0x3 ? 1 : 0;
10955 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
10956 break;
10957
10958 case USE_RM_TABLE:
10959 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
10960 break;
10961
4e7d34a6 10962 case USE_PREFIX_TABLE:
c0f3af97 10963 if (need_vex)
b844680a 10964 {
c0f3af97
L
10965 /* The prefix in VEX is implicit. */
10966 switch (vex.prefix)
10967 {
10968 case 0:
91d6fa6a 10969 vindex = 0;
c0f3af97
L
10970 break;
10971 case REPE_PREFIX_OPCODE:
91d6fa6a 10972 vindex = 1;
c0f3af97
L
10973 break;
10974 case DATA_PREFIX_OPCODE:
91d6fa6a 10975 vindex = 2;
c0f3af97
L
10976 break;
10977 case REPNE_PREFIX_OPCODE:
91d6fa6a 10978 vindex = 3;
c0f3af97
L
10979 break;
10980 default:
10981 abort ();
10982 break;
10983 }
b844680a 10984 }
c0f3af97 10985 else
b844680a 10986 {
91d6fa6a 10987 vindex = 0;
c0f3af97
L
10988 used_prefixes |= (prefixes & PREFIX_REPZ);
10989 if (prefixes & PREFIX_REPZ)
b844680a 10990 {
91d6fa6a 10991 vindex = 1;
f16cd0d5 10992 all_prefixes[last_repz_prefix] = 0;
b844680a
L
10993 }
10994 else
10995 {
c0f3af97
L
10996 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
10997 PREFIX_DATA. */
10998 used_prefixes |= (prefixes & PREFIX_REPNZ);
10999 if (prefixes & PREFIX_REPNZ)
11000 {
91d6fa6a 11001 vindex = 3;
f16cd0d5 11002 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11003 }
11004 else
b844680a 11005 {
c0f3af97
L
11006 used_prefixes |= (prefixes & PREFIX_DATA);
11007 if (prefixes & PREFIX_DATA)
11008 {
91d6fa6a 11009 vindex = 2;
f16cd0d5 11010 all_prefixes[last_data_prefix] = 0;
c0f3af97 11011 }
b844680a
L
11012 }
11013 }
11014 }
91d6fa6a 11015 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11016 break;
11017
4e7d34a6 11018 case USE_X86_64_TABLE:
91d6fa6a
NC
11019 vindex = address_mode == mode_64bit ? 1 : 0;
11020 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11021 break;
11022
4e7d34a6 11023 case USE_3BYTE_TABLE:
8bb15339 11024 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11025 vindex = *codep++;
11026 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
11027 modrm.mod = (*codep >> 6) & 3;
11028 modrm.reg = (*codep >> 3) & 7;
11029 modrm.rm = *codep & 7;
11030 break;
11031
c0f3af97
L
11032 case USE_VEX_LEN_TABLE:
11033 if (!need_vex)
11034 abort ();
11035
11036 switch (vex.length)
11037 {
11038 case 128:
91d6fa6a 11039 vindex = 0;
c0f3af97
L
11040 break;
11041 case 256:
91d6fa6a 11042 vindex = 1;
c0f3af97
L
11043 break;
11044 default:
11045 abort ();
11046 break;
11047 }
11048
91d6fa6a 11049 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11050 break;
11051
f88c9eb0
SP
11052 case USE_XOP_8F_TABLE:
11053 FETCH_DATA (info, codep + 3);
11054 /* All bits in the REX prefix are ignored. */
11055 rex_ignored = rex;
11056 rex = ~(*codep >> 5) & 0x7;
11057
11058 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11059 switch ((*codep & 0x1f))
11060 {
11061 default:
11062 BadOp ();
5dd85c99
SP
11063 case 0x8:
11064 vex_table_index = XOP_08;
11065 break;
f88c9eb0
SP
11066 case 0x9:
11067 vex_table_index = XOP_09;
11068 break;
11069 case 0xa:
11070 vex_table_index = XOP_0A;
11071 break;
11072 }
11073 codep++;
11074 vex.w = *codep & 0x80;
11075 if (vex.w && address_mode == mode_64bit)
11076 rex |= REX_W;
11077
11078 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11079 if (address_mode != mode_64bit
11080 && vex.register_specifier > 0x7)
11081 BadOp ();
11082
11083 vex.length = (*codep & 0x4) ? 256 : 128;
11084 switch ((*codep & 0x3))
11085 {
11086 case 0:
11087 vex.prefix = 0;
11088 break;
11089 case 1:
11090 vex.prefix = DATA_PREFIX_OPCODE;
11091 break;
11092 case 2:
11093 vex.prefix = REPE_PREFIX_OPCODE;
11094 break;
11095 case 3:
11096 vex.prefix = REPNE_PREFIX_OPCODE;
11097 break;
11098 }
11099 need_vex = 1;
11100 need_vex_reg = 1;
11101 codep++;
91d6fa6a
NC
11102 vindex = *codep++;
11103 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
11104
11105 FETCH_DATA (info, codep + 1);
11106 modrm.mod = (*codep >> 6) & 3;
11107 modrm.reg = (*codep >> 3) & 7;
11108 modrm.rm = *codep & 7;
f88c9eb0
SP
11109 break;
11110
c0f3af97
L
11111 case USE_VEX_C4_TABLE:
11112 FETCH_DATA (info, codep + 3);
11113 /* All bits in the REX prefix are ignored. */
11114 rex_ignored = rex;
11115 rex = ~(*codep >> 5) & 0x7;
11116 switch ((*codep & 0x1f))
11117 {
11118 default:
11119 BadOp ();
11120 case 0x1:
f88c9eb0 11121 vex_table_index = VEX_0F;
c0f3af97
L
11122 break;
11123 case 0x2:
f88c9eb0 11124 vex_table_index = VEX_0F38;
c0f3af97
L
11125 break;
11126 case 0x3:
f88c9eb0 11127 vex_table_index = VEX_0F3A;
c0f3af97
L
11128 break;
11129 }
11130 codep++;
11131 vex.w = *codep & 0x80;
11132 if (vex.w && address_mode == mode_64bit)
11133 rex |= REX_W;
11134
11135 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11136 if (address_mode != mode_64bit
11137 && vex.register_specifier > 0x7)
11138 BadOp ();
11139
11140 vex.length = (*codep & 0x4) ? 256 : 128;
11141 switch ((*codep & 0x3))
11142 {
11143 case 0:
11144 vex.prefix = 0;
11145 break;
11146 case 1:
11147 vex.prefix = DATA_PREFIX_OPCODE;
11148 break;
11149 case 2:
11150 vex.prefix = REPE_PREFIX_OPCODE;
11151 break;
11152 case 3:
11153 vex.prefix = REPNE_PREFIX_OPCODE;
11154 break;
11155 }
11156 need_vex = 1;
11157 need_vex_reg = 1;
11158 codep++;
91d6fa6a
NC
11159 vindex = *codep++;
11160 dp = &vex_table[vex_table_index][vindex];
c0f3af97 11161 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11162 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11163 {
11164 FETCH_DATA (info, codep + 1);
11165 modrm.mod = (*codep >> 6) & 3;
11166 modrm.reg = (*codep >> 3) & 7;
11167 modrm.rm = *codep & 7;
11168 }
11169 break;
11170
11171 case USE_VEX_C5_TABLE:
11172 FETCH_DATA (info, codep + 2);
11173 /* All bits in the REX prefix are ignored. */
11174 rex_ignored = rex;
11175 rex = (*codep & 0x80) ? 0 : REX_R;
11176
11177 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11178 if (address_mode != mode_64bit
11179 && vex.register_specifier > 0x7)
11180 BadOp ();
11181
759a05ce
L
11182 vex.w = 0;
11183
c0f3af97
L
11184 vex.length = (*codep & 0x4) ? 256 : 128;
11185 switch ((*codep & 0x3))
11186 {
11187 case 0:
11188 vex.prefix = 0;
11189 break;
11190 case 1:
11191 vex.prefix = DATA_PREFIX_OPCODE;
11192 break;
11193 case 2:
11194 vex.prefix = REPE_PREFIX_OPCODE;
11195 break;
11196 case 3:
11197 vex.prefix = REPNE_PREFIX_OPCODE;
11198 break;
11199 }
11200 need_vex = 1;
11201 need_vex_reg = 1;
11202 codep++;
91d6fa6a
NC
11203 vindex = *codep++;
11204 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 11205 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11206 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11207 {
11208 FETCH_DATA (info, codep + 1);
11209 modrm.mod = (*codep >> 6) & 3;
11210 modrm.reg = (*codep >> 3) & 7;
11211 modrm.rm = *codep & 7;
11212 }
11213 break;
11214
9e30b8e0
L
11215 case USE_VEX_W_TABLE:
11216 if (!need_vex)
11217 abort ();
11218
11219 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11220 break;
11221
592d1631
L
11222 case 0:
11223 dp = &bad_opcode;
11224 break;
11225
b844680a 11226 default:
d34b5006 11227 abort ();
b844680a
L
11228 }
11229
11230 if (dp->name != NULL)
11231 return dp;
11232 else
8bb15339 11233 return get_valid_dis386 (dp, info);
b844680a
L
11234}
11235
e396998b 11236static int
26ca5450 11237print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11238{
2da11e11 11239 const struct dis386 *dp;
252b5132 11240 int i;
ce518a5f 11241 char *op_txt[MAX_OPERANDS];
252b5132 11242 int needcomma;
e396998b
AM
11243 int sizeflag;
11244 const char *p;
252b5132 11245 struct dis_private priv;
eec0f4ca 11246 unsigned char op;
f16cd0d5
L
11247 int prefix_length;
11248 int default_prefixes;
252b5132 11249
cb712a9e 11250 if (info->mach == bfd_mach_x86_64_intel_syntax
8a9036a4
L
11251 || info->mach == bfd_mach_x86_64
11252 || info->mach == bfd_mach_l1om
11253 || info->mach == bfd_mach_l1om_intel_syntax)
cb712a9e
L
11254 address_mode = mode_64bit;
11255 else
11256 address_mode = mode_32bit;
52b15da3 11257
8373f971 11258 if (intel_syntax == (char) -1)
e396998b 11259 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
11260 || info->mach == bfd_mach_x86_64_intel_syntax
11261 || info->mach == bfd_mach_l1om_intel_syntax);
e396998b 11262
2da11e11 11263 if (info->mach == bfd_mach_i386_i386
52b15da3 11264 || info->mach == bfd_mach_x86_64
8a9036a4 11265 || info->mach == bfd_mach_l1om
52b15da3 11266 || info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
11267 || info->mach == bfd_mach_x86_64_intel_syntax
11268 || info->mach == bfd_mach_l1om_intel_syntax)
e396998b 11269 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 11270 else if (info->mach == bfd_mach_i386_i8086)
e396998b 11271 priv.orig_sizeflag = 0;
2da11e11
AM
11272 else
11273 abort ();
e396998b
AM
11274
11275 for (p = info->disassembler_options; p != NULL; )
11276 {
0112cd26 11277 if (CONST_STRNEQ (p, "x86-64"))
e396998b 11278 {
cb712a9e 11279 address_mode = mode_64bit;
e396998b
AM
11280 priv.orig_sizeflag = AFLAG | DFLAG;
11281 }
0112cd26 11282 else if (CONST_STRNEQ (p, "i386"))
e396998b 11283 {
cb712a9e 11284 address_mode = mode_32bit;
e396998b
AM
11285 priv.orig_sizeflag = AFLAG | DFLAG;
11286 }
0112cd26 11287 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11288 {
cb712a9e 11289 address_mode = mode_16bit;
e396998b
AM
11290 priv.orig_sizeflag = 0;
11291 }
0112cd26 11292 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11293 {
11294 intel_syntax = 1;
9d141669
L
11295 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11296 intel_mnemonic = 1;
e396998b 11297 }
0112cd26 11298 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11299 {
11300 intel_syntax = 0;
9d141669
L
11301 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11302 intel_mnemonic = 0;
e396998b 11303 }
0112cd26 11304 else if (CONST_STRNEQ (p, "addr"))
e396998b 11305 {
f59a29b9
L
11306 if (address_mode == mode_64bit)
11307 {
11308 if (p[4] == '3' && p[5] == '2')
11309 priv.orig_sizeflag &= ~AFLAG;
11310 else if (p[4] == '6' && p[5] == '4')
11311 priv.orig_sizeflag |= AFLAG;
11312 }
11313 else
11314 {
11315 if (p[4] == '1' && p[5] == '6')
11316 priv.orig_sizeflag &= ~AFLAG;
11317 else if (p[4] == '3' && p[5] == '2')
11318 priv.orig_sizeflag |= AFLAG;
11319 }
e396998b 11320 }
0112cd26 11321 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11322 {
11323 if (p[4] == '1' && p[5] == '6')
11324 priv.orig_sizeflag &= ~DFLAG;
11325 else if (p[4] == '3' && p[5] == '2')
11326 priv.orig_sizeflag |= DFLAG;
11327 }
0112cd26 11328 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11329 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11330
11331 p = strchr (p, ',');
11332 if (p != NULL)
11333 p++;
11334 }
11335
11336 if (intel_syntax)
11337 {
11338 names64 = intel_names64;
11339 names32 = intel_names32;
11340 names16 = intel_names16;
11341 names8 = intel_names8;
11342 names8rex = intel_names8rex;
11343 names_seg = intel_names_seg;
b9733481
L
11344 names_mm = intel_names_mm;
11345 names_xmm = intel_names_xmm;
11346 names_ymm = intel_names_ymm;
db51cc60
L
11347 index64 = intel_index64;
11348 index32 = intel_index32;
e396998b
AM
11349 index16 = intel_index16;
11350 open_char = '[';
11351 close_char = ']';
11352 separator_char = '+';
11353 scale_char = '*';
11354 }
11355 else
11356 {
11357 names64 = att_names64;
11358 names32 = att_names32;
11359 names16 = att_names16;
11360 names8 = att_names8;
11361 names8rex = att_names8rex;
11362 names_seg = att_names_seg;
b9733481
L
11363 names_mm = att_names_mm;
11364 names_xmm = att_names_xmm;
11365 names_ymm = att_names_ymm;
db51cc60
L
11366 index64 = att_index64;
11367 index32 = att_index32;
e396998b
AM
11368 index16 = att_index16;
11369 open_char = '(';
11370 close_char = ')';
11371 separator_char = ',';
11372 scale_char = ',';
11373 }
2da11e11 11374
4fe53c98 11375 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11376 puts most long word instructions on a single line. Use 8 bytes
11377 for Intel L1OM. */
11378 if (info->mach == bfd_mach_l1om
11379 || info->mach == bfd_mach_l1om_intel_syntax)
11380 info->bytes_per_line = 8;
11381 else
11382 info->bytes_per_line = 7;
252b5132 11383
26ca5450 11384 info->private_data = &priv;
252b5132
RH
11385 priv.max_fetched = priv.the_buffer;
11386 priv.insn_start = pc;
252b5132
RH
11387
11388 obuf[0] = 0;
ce518a5f
L
11389 for (i = 0; i < MAX_OPERANDS; ++i)
11390 {
11391 op_out[i][0] = 0;
11392 op_index[i] = -1;
11393 }
252b5132
RH
11394
11395 the_info = info;
11396 start_pc = pc;
e396998b
AM
11397 start_codep = priv.the_buffer;
11398 codep = priv.the_buffer;
252b5132 11399
5076851f
ILT
11400 if (setjmp (priv.bailout) != 0)
11401 {
7d421014
ILT
11402 const char *name;
11403
5076851f 11404 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
11405 means we have an incomplete instruction of some sort. Just
11406 print the first byte as a prefix or a .byte pseudo-op. */
11407 if (codep > priv.the_buffer)
5076851f 11408 {
e396998b 11409 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
11410 if (name != NULL)
11411 (*info->fprintf_func) (info->stream, "%s", name);
11412 else
5076851f 11413 {
7d421014
ILT
11414 /* Just print the first byte as a .byte instruction. */
11415 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 11416 (unsigned int) priv.the_buffer[0]);
5076851f 11417 }
5076851f 11418
7d421014 11419 return 1;
5076851f
ILT
11420 }
11421
11422 return -1;
11423 }
11424
52b15da3 11425 obufp = obuf;
f16cd0d5
L
11426 sizeflag = priv.orig_sizeflag;
11427
11428 if (!ckprefix () || rex_used)
11429 {
11430 /* Too many prefixes or unused REX prefixes. */
11431 for (i = 0;
11432 all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes);
11433 i++)
11434 (*info->fprintf_func) (info->stream, "%s",
11435 prefix_name (all_prefixes[i], sizeflag));
11436 return 1;
11437 }
252b5132
RH
11438
11439 insn_codep = codep;
11440
11441 FETCH_DATA (info, codep + 1);
11442 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11443
3e7d61b2 11444 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 11445 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 11446 {
f16cd0d5 11447 (*info->fprintf_func) (info->stream, "fwait");
7d421014 11448 return 1;
252b5132
RH
11449 }
11450
eec0f4ca 11451 op = 0;
c1e679ec 11452
252b5132
RH
11453 if (*codep == 0x0f)
11454 {
eec0f4ca 11455 unsigned char threebyte;
252b5132 11456 FETCH_DATA (info, codep + 2);
eec0f4ca
L
11457 threebyte = *++codep;
11458 dp = &dis386_twobyte[threebyte];
252b5132 11459 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 11460 codep++;
252b5132
RH
11461 }
11462 else
11463 {
6439fc28 11464 dp = &dis386[*codep];
252b5132 11465 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 11466 codep++;
252b5132 11467 }
246c51aa 11468
b844680a 11469 if ((prefixes & PREFIX_REPZ))
f16cd0d5 11470 used_prefixes |= PREFIX_REPZ;
b844680a 11471 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 11472 used_prefixes |= PREFIX_REPNZ;
b844680a 11473 if ((prefixes & PREFIX_LOCK))
f16cd0d5 11474 used_prefixes |= PREFIX_LOCK;
c608c12e 11475
f16cd0d5 11476 default_prefixes = 0;
c608c12e
AM
11477 if (prefixes & PREFIX_ADDR)
11478 {
11479 sizeflag ^= AFLAG;
ce518a5f 11480 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 11481 {
cb712a9e 11482 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 11483 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 11484 else
f16cd0d5
L
11485 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11486 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
11487 }
11488 }
11489
b844680a 11490 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
11491 {
11492 sizeflag ^= DFLAG;
ce518a5f
L
11493 if (dp->op[2].bytemode == cond_jump_mode
11494 && dp->op[0].bytemode == v_mode
6439fc28 11495 && !intel_syntax)
3ffd33cf
AM
11496 {
11497 if (sizeflag & DFLAG)
f16cd0d5 11498 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 11499 else
f16cd0d5
L
11500 all_prefixes[last_data_prefix] = DATA16_PREFIX;
11501 default_prefixes |= PREFIX_DATA;
11502 }
11503 else if (rex & REX_W)
11504 {
11505 /* REX_W will override PREFIX_DATA. */
11506 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
11507 }
11508 }
11509
8bb15339 11510 if (need_modrm)
252b5132
RH
11511 {
11512 FETCH_DATA (info, codep + 1);
7967e09e
L
11513 modrm.mod = (*codep >> 6) & 3;
11514 modrm.reg = (*codep >> 3) & 7;
11515 modrm.rm = *codep & 7;
252b5132
RH
11516 }
11517
55b126d4
L
11518 need_vex = 0;
11519 need_vex_reg = 0;
11520 vex_w_done = 0;
11521
ce518a5f 11522 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132
RH
11523 {
11524 dofloat (sizeflag);
11525 }
11526 else
11527 {
8bb15339 11528 dp = get_valid_dis386 (dp, info);
b844680a 11529 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f
L
11530 {
11531 for (i = 0; i < MAX_OPERANDS; ++i)
11532 {
246c51aa 11533 obufp = op_out[i];
ce518a5f
L
11534 op_ad = MAX_OPERANDS - 1 - i;
11535 if (dp->op[i].rtn)
11536 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11537 }
6439fc28 11538 }
252b5132
RH
11539 }
11540
7d421014
ILT
11541 /* See if any prefixes were not used. If so, print the first one
11542 separately. If we don't do this, we'll wind up printing an
11543 instruction stream which does not precisely correspond to the
11544 bytes we are disassembling. */
f16cd0d5 11545 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 11546 {
f16cd0d5
L
11547 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11548 if (all_prefixes[i])
11549 {
11550 const char *name;
11551 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11552 if (name == NULL)
11553 name = INTERNAL_DISASSEMBLER_ERROR;
11554 (*info->fprintf_func) (info->stream, "%s", name);
11555 return 1;
11556 }
52b15da3 11557 }
7d421014 11558
d869730d 11559 /* Check if the REX prefix is used. */
2a70cca4 11560 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
11561 all_prefixes[last_rex_prefix] = 0;
11562
5e6718e4 11563 /* Check if the SEG prefix is used. */
f16cd0d5
L
11564 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11565 | PREFIX_FS | PREFIX_GS)) != 0
11566 && (used_prefixes
11567 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11568 all_prefixes[last_seg_prefix] = 0;
11569
5e6718e4 11570 /* Check if the ADDR prefix is used. */
f16cd0d5
L
11571 if ((prefixes & PREFIX_ADDR) != 0
11572 && (used_prefixes & PREFIX_ADDR) != 0)
11573 all_prefixes[last_addr_prefix] = 0;
11574
5e6718e4 11575 /* Check if the DATA prefix is used. */
f16cd0d5
L
11576 if ((prefixes & PREFIX_DATA) != 0
11577 && (used_prefixes & PREFIX_DATA) != 0)
11578 all_prefixes[last_data_prefix] = 0;
11579
11580 prefix_length = 0;
f310f33d 11581 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
11582 if (all_prefixes[i])
11583 {
11584 const char *name;
11585 name = prefix_name (all_prefixes[i], sizeflag);
11586 if (name == NULL)
11587 abort ();
11588 prefix_length += strlen (name) + 1;
11589 (*info->fprintf_func) (info->stream, "%s ", name);
11590 }
b844680a 11591
f16cd0d5
L
11592 /* Check maximum code length. */
11593 if ((codep - start_codep) > MAX_CODE_LENGTH)
11594 {
11595 (*info->fprintf_func) (info->stream, "(bad)");
11596 return MAX_CODE_LENGTH;
11597 }
b844680a 11598
ea397f5b 11599 obufp = mnemonicendp;
f16cd0d5 11600 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
11601 oappend (" ");
11602 oappend (" ");
11603 (*info->fprintf_func) (info->stream, "%s", obuf);
11604
11605 /* The enter and bound instructions are printed with operands in the same
11606 order as the intel book; everything else is printed in reverse order. */
2da11e11 11607 if (intel_syntax || two_source_ops)
252b5132 11608 {
185b1163
L
11609 bfd_vma riprel;
11610
ce518a5f
L
11611 for (i = 0; i < MAX_OPERANDS; ++i)
11612 op_txt[i] = op_out[i];
246c51aa 11613
ce518a5f
L
11614 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11615 {
11616 op_ad = op_index[i];
11617 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11618 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
11619 riprel = op_riprel[i];
11620 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11621 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 11622 }
252b5132
RH
11623 }
11624 else
11625 {
ce518a5f
L
11626 for (i = 0; i < MAX_OPERANDS; ++i)
11627 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
11628 }
11629
ce518a5f
L
11630 needcomma = 0;
11631 for (i = 0; i < MAX_OPERANDS; ++i)
11632 if (*op_txt[i])
11633 {
11634 if (needcomma)
11635 (*info->fprintf_func) (info->stream, ",");
11636 if (op_index[i] != -1 && !op_riprel[i])
11637 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11638 else
11639 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11640 needcomma = 1;
11641 }
050dfa73 11642
ce518a5f 11643 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
11644 if (op_index[i] != -1 && op_riprel[i])
11645 {
11646 (*info->fprintf_func) (info->stream, " # ");
11647 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11648 + op_address[op_index[i]]), info);
185b1163 11649 break;
52b15da3 11650 }
e396998b 11651 return codep - priv.the_buffer;
252b5132
RH
11652}
11653
6439fc28 11654static const char *float_mem[] = {
252b5132 11655 /* d8 */
7c52e0e8
L
11656 "fadd{s|}",
11657 "fmul{s|}",
11658 "fcom{s|}",
11659 "fcomp{s|}",
11660 "fsub{s|}",
11661 "fsubr{s|}",
11662 "fdiv{s|}",
11663 "fdivr{s|}",
db6eb5be 11664 /* d9 */
7c52e0e8 11665 "fld{s|}",
252b5132 11666 "(bad)",
7c52e0e8
L
11667 "fst{s|}",
11668 "fstp{s|}",
9306ca4a 11669 "fldenvIC",
252b5132 11670 "fldcw",
9306ca4a 11671 "fNstenvIC",
252b5132
RH
11672 "fNstcw",
11673 /* da */
7c52e0e8
L
11674 "fiadd{l|}",
11675 "fimul{l|}",
11676 "ficom{l|}",
11677 "ficomp{l|}",
11678 "fisub{l|}",
11679 "fisubr{l|}",
11680 "fidiv{l|}",
11681 "fidivr{l|}",
252b5132 11682 /* db */
7c52e0e8
L
11683 "fild{l|}",
11684 "fisttp{l|}",
11685 "fist{l|}",
11686 "fistp{l|}",
252b5132 11687 "(bad)",
6439fc28 11688 "fld{t||t|}",
252b5132 11689 "(bad)",
6439fc28 11690 "fstp{t||t|}",
252b5132 11691 /* dc */
7c52e0e8
L
11692 "fadd{l|}",
11693 "fmul{l|}",
11694 "fcom{l|}",
11695 "fcomp{l|}",
11696 "fsub{l|}",
11697 "fsubr{l|}",
11698 "fdiv{l|}",
11699 "fdivr{l|}",
252b5132 11700 /* dd */
7c52e0e8
L
11701 "fld{l|}",
11702 "fisttp{ll|}",
11703 "fst{l||}",
11704 "fstp{l|}",
9306ca4a 11705 "frstorIC",
252b5132 11706 "(bad)",
9306ca4a 11707 "fNsaveIC",
252b5132
RH
11708 "fNstsw",
11709 /* de */
11710 "fiadd",
11711 "fimul",
11712 "ficom",
11713 "ficomp",
11714 "fisub",
11715 "fisubr",
11716 "fidiv",
11717 "fidivr",
11718 /* df */
11719 "fild",
ca164297 11720 "fisttp",
252b5132
RH
11721 "fist",
11722 "fistp",
11723 "fbld",
7c52e0e8 11724 "fild{ll|}",
252b5132 11725 "fbstp",
7c52e0e8 11726 "fistp{ll|}",
1d9f512f
AM
11727};
11728
11729static const unsigned char float_mem_mode[] = {
11730 /* d8 */
11731 d_mode,
11732 d_mode,
11733 d_mode,
11734 d_mode,
11735 d_mode,
11736 d_mode,
11737 d_mode,
11738 d_mode,
11739 /* d9 */
11740 d_mode,
11741 0,
11742 d_mode,
11743 d_mode,
11744 0,
11745 w_mode,
11746 0,
11747 w_mode,
11748 /* da */
11749 d_mode,
11750 d_mode,
11751 d_mode,
11752 d_mode,
11753 d_mode,
11754 d_mode,
11755 d_mode,
11756 d_mode,
11757 /* db */
11758 d_mode,
11759 d_mode,
11760 d_mode,
11761 d_mode,
11762 0,
9306ca4a 11763 t_mode,
1d9f512f 11764 0,
9306ca4a 11765 t_mode,
1d9f512f
AM
11766 /* dc */
11767 q_mode,
11768 q_mode,
11769 q_mode,
11770 q_mode,
11771 q_mode,
11772 q_mode,
11773 q_mode,
11774 q_mode,
11775 /* dd */
11776 q_mode,
11777 q_mode,
11778 q_mode,
11779 q_mode,
11780 0,
11781 0,
11782 0,
11783 w_mode,
11784 /* de */
11785 w_mode,
11786 w_mode,
11787 w_mode,
11788 w_mode,
11789 w_mode,
11790 w_mode,
11791 w_mode,
11792 w_mode,
11793 /* df */
11794 w_mode,
11795 w_mode,
11796 w_mode,
11797 w_mode,
9306ca4a 11798 t_mode,
1d9f512f 11799 q_mode,
9306ca4a 11800 t_mode,
1d9f512f 11801 q_mode
252b5132
RH
11802};
11803
ce518a5f
L
11804#define ST { OP_ST, 0 }
11805#define STi { OP_STi, 0 }
252b5132 11806
4efba78c
L
11807#define FGRPd9_2 NULL, { { NULL, 0 } }
11808#define FGRPd9_4 NULL, { { NULL, 1 } }
11809#define FGRPd9_5 NULL, { { NULL, 2 } }
11810#define FGRPd9_6 NULL, { { NULL, 3 } }
11811#define FGRPd9_7 NULL, { { NULL, 4 } }
11812#define FGRPda_5 NULL, { { NULL, 5 } }
11813#define FGRPdb_4 NULL, { { NULL, 6 } }
11814#define FGRPde_3 NULL, { { NULL, 7 } }
11815#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11816
2da11e11 11817static const struct dis386 float_reg[][8] = {
252b5132
RH
11818 /* d8 */
11819 {
ce518a5f
L
11820 { "fadd", { ST, STi } },
11821 { "fmul", { ST, STi } },
11822 { "fcom", { STi } },
11823 { "fcomp", { STi } },
11824 { "fsub", { ST, STi } },
11825 { "fsubr", { ST, STi } },
11826 { "fdiv", { ST, STi } },
11827 { "fdivr", { ST, STi } },
252b5132
RH
11828 },
11829 /* d9 */
11830 {
ce518a5f
L
11831 { "fld", { STi } },
11832 { "fxch", { STi } },
252b5132 11833 { FGRPd9_2 },
592d1631 11834 { Bad_Opcode },
252b5132
RH
11835 { FGRPd9_4 },
11836 { FGRPd9_5 },
11837 { FGRPd9_6 },
11838 { FGRPd9_7 },
11839 },
11840 /* da */
11841 {
ce518a5f
L
11842 { "fcmovb", { ST, STi } },
11843 { "fcmove", { ST, STi } },
11844 { "fcmovbe",{ ST, STi } },
11845 { "fcmovu", { ST, STi } },
592d1631 11846 { Bad_Opcode },
252b5132 11847 { FGRPda_5 },
592d1631
L
11848 { Bad_Opcode },
11849 { Bad_Opcode },
252b5132
RH
11850 },
11851 /* db */
11852 {
ce518a5f
L
11853 { "fcmovnb",{ ST, STi } },
11854 { "fcmovne",{ ST, STi } },
11855 { "fcmovnbe",{ ST, STi } },
11856 { "fcmovnu",{ ST, STi } },
252b5132 11857 { FGRPdb_4 },
ce518a5f
L
11858 { "fucomi", { ST, STi } },
11859 { "fcomi", { ST, STi } },
592d1631 11860 { Bad_Opcode },
252b5132
RH
11861 },
11862 /* dc */
11863 {
ce518a5f
L
11864 { "fadd", { STi, ST } },
11865 { "fmul", { STi, ST } },
592d1631
L
11866 { Bad_Opcode },
11867 { Bad_Opcode },
9d141669
L
11868 { "fsub!M", { STi, ST } },
11869 { "fsubM", { STi, ST } },
11870 { "fdiv!M", { STi, ST } },
11871 { "fdivM", { STi, ST } },
252b5132
RH
11872 },
11873 /* dd */
11874 {
ce518a5f 11875 { "ffree", { STi } },
592d1631 11876 { Bad_Opcode },
ce518a5f
L
11877 { "fst", { STi } },
11878 { "fstp", { STi } },
11879 { "fucom", { STi } },
11880 { "fucomp", { STi } },
592d1631
L
11881 { Bad_Opcode },
11882 { Bad_Opcode },
252b5132
RH
11883 },
11884 /* de */
11885 {
ce518a5f
L
11886 { "faddp", { STi, ST } },
11887 { "fmulp", { STi, ST } },
592d1631 11888 { Bad_Opcode },
252b5132 11889 { FGRPde_3 },
9d141669
L
11890 { "fsub!Mp", { STi, ST } },
11891 { "fsubMp", { STi, ST } },
11892 { "fdiv!Mp", { STi, ST } },
11893 { "fdivMp", { STi, ST } },
252b5132
RH
11894 },
11895 /* df */
11896 {
ce518a5f 11897 { "ffreep", { STi } },
592d1631
L
11898 { Bad_Opcode },
11899 { Bad_Opcode },
11900 { Bad_Opcode },
252b5132 11901 { FGRPdf_4 },
ce518a5f
L
11902 { "fucomip", { ST, STi } },
11903 { "fcomip", { ST, STi } },
592d1631 11904 { Bad_Opcode },
252b5132
RH
11905 },
11906};
11907
252b5132
RH
11908static char *fgrps[][8] = {
11909 /* d9_2 0 */
11910 {
11911 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11912 },
11913
11914 /* d9_4 1 */
11915 {
11916 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11917 },
11918
11919 /* d9_5 2 */
11920 {
11921 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11922 },
11923
11924 /* d9_6 3 */
11925 {
11926 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11927 },
11928
11929 /* d9_7 4 */
11930 {
11931 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11932 },
11933
11934 /* da_5 5 */
11935 {
11936 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11937 },
11938
11939 /* db_4 6 */
11940 {
309d3373
JB
11941 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11942 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11943 },
11944
11945 /* de_3 7 */
11946 {
11947 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11948 },
11949
11950 /* df_4 8 */
11951 {
11952 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11953 },
11954};
11955
b6169b20
L
11956static void
11957swap_operand (void)
11958{
11959 mnemonicendp[0] = '.';
11960 mnemonicendp[1] = 's';
11961 mnemonicendp += 2;
11962}
11963
b844680a
L
11964static void
11965OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
11966 int sizeflag ATTRIBUTE_UNUSED)
11967{
11968 /* Skip mod/rm byte. */
11969 MODRM_CHECK;
11970 codep++;
11971}
11972
252b5132 11973static void
26ca5450 11974dofloat (int sizeflag)
252b5132 11975{
2da11e11 11976 const struct dis386 *dp;
252b5132
RH
11977 unsigned char floatop;
11978
11979 floatop = codep[-1];
11980
7967e09e 11981 if (modrm.mod != 3)
252b5132 11982 {
7967e09e 11983 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
11984
11985 putop (float_mem[fp_indx], sizeflag);
ce518a5f 11986 obufp = op_out[0];
6e50d963 11987 op_ad = 2;
1d9f512f 11988 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
11989 return;
11990 }
6608db57 11991 /* Skip mod/rm byte. */
4bba6815 11992 MODRM_CHECK;
252b5132
RH
11993 codep++;
11994
7967e09e 11995 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
11996 if (dp->name == NULL)
11997 {
7967e09e 11998 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 11999
6608db57 12000 /* Instruction fnstsw is only one with strange arg. */
252b5132 12001 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12002 strcpy (op_out[0], names16[0]);
252b5132
RH
12003 }
12004 else
12005 {
12006 putop (dp->name, sizeflag);
12007
ce518a5f 12008 obufp = op_out[0];
6e50d963 12009 op_ad = 2;
ce518a5f
L
12010 if (dp->op[0].rtn)
12011 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12012
ce518a5f 12013 obufp = op_out[1];
6e50d963 12014 op_ad = 1;
ce518a5f
L
12015 if (dp->op[1].rtn)
12016 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12017 }
12018}
12019
252b5132 12020static void
26ca5450 12021OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12022{
422673a9 12023 oappend ("%st" + intel_syntax);
252b5132
RH
12024}
12025
252b5132 12026static void
26ca5450 12027OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12028{
7967e09e 12029 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 12030 oappend (scratchbuf + intel_syntax);
252b5132
RH
12031}
12032
6608db57 12033/* Capital letters in template are macros. */
6439fc28 12034static int
d3ce72d0 12035putop (const char *in_template, int sizeflag)
252b5132 12036{
2da11e11 12037 const char *p;
9306ca4a 12038 int alt = 0;
9d141669 12039 int cond = 1;
98b528ac
L
12040 unsigned int l = 0, len = 1;
12041 char last[4];
12042
12043#define SAVE_LAST(c) \
12044 if (l < len && l < sizeof (last)) \
12045 last[l++] = c; \
12046 else \
12047 abort ();
252b5132 12048
d3ce72d0 12049 for (p = in_template; *p; p++)
252b5132
RH
12050 {
12051 switch (*p)
12052 {
12053 default:
12054 *obufp++ = *p;
12055 break;
98b528ac
L
12056 case '%':
12057 len++;
12058 break;
9d141669
L
12059 case '!':
12060 cond = 0;
12061 break;
6439fc28
AM
12062 case '{':
12063 alt = 0;
12064 if (intel_syntax)
6439fc28
AM
12065 {
12066 while (*++p != '|')
7c52e0e8
L
12067 if (*p == '}' || *p == '\0')
12068 abort ();
6439fc28 12069 }
9306ca4a
JB
12070 /* Fall through. */
12071 case 'I':
12072 alt = 1;
12073 continue;
6439fc28
AM
12074 case '|':
12075 while (*++p != '}')
12076 {
12077 if (*p == '\0')
12078 abort ();
12079 }
12080 break;
12081 case '}':
12082 break;
252b5132 12083 case 'A':
db6eb5be
AM
12084 if (intel_syntax)
12085 break;
7967e09e 12086 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12087 *obufp++ = 'b';
12088 break;
12089 case 'B':
4b06377f
L
12090 if (l == 0 && len == 1)
12091 {
12092case_B:
12093 if (intel_syntax)
12094 break;
12095 if (sizeflag & SUFFIX_ALWAYS)
12096 *obufp++ = 'b';
12097 }
12098 else
12099 {
12100 if (l != 1
12101 || len != 2
12102 || last[0] != 'L')
12103 {
12104 SAVE_LAST (*p);
12105 break;
12106 }
12107
12108 if (address_mode == mode_64bit
12109 && !(prefixes & PREFIX_ADDR))
12110 {
12111 *obufp++ = 'a';
12112 *obufp++ = 'b';
12113 *obufp++ = 's';
12114 }
12115
12116 goto case_B;
12117 }
252b5132 12118 break;
9306ca4a
JB
12119 case 'C':
12120 if (intel_syntax && !alt)
12121 break;
12122 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12123 {
12124 if (sizeflag & DFLAG)
12125 *obufp++ = intel_syntax ? 'd' : 'l';
12126 else
12127 *obufp++ = intel_syntax ? 'w' : 's';
12128 used_prefixes |= (prefixes & PREFIX_DATA);
12129 }
12130 break;
ed7841b3
JB
12131 case 'D':
12132 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12133 break;
161a04f6 12134 USED_REX (REX_W);
7967e09e 12135 if (modrm.mod == 3)
ed7841b3 12136 {
161a04f6 12137 if (rex & REX_W)
ed7841b3 12138 *obufp++ = 'q';
ed7841b3 12139 else
f16cd0d5
L
12140 {
12141 if (sizeflag & DFLAG)
12142 *obufp++ = intel_syntax ? 'd' : 'l';
12143 else
12144 *obufp++ = 'w';
12145 used_prefixes |= (prefixes & PREFIX_DATA);
12146 }
ed7841b3
JB
12147 }
12148 else
12149 *obufp++ = 'w';
12150 break;
252b5132 12151 case 'E': /* For jcxz/jecxz */
cb712a9e 12152 if (address_mode == mode_64bit)
c1a64871
JH
12153 {
12154 if (sizeflag & AFLAG)
12155 *obufp++ = 'r';
12156 else
12157 *obufp++ = 'e';
12158 }
12159 else
12160 if (sizeflag & AFLAG)
12161 *obufp++ = 'e';
3ffd33cf
AM
12162 used_prefixes |= (prefixes & PREFIX_ADDR);
12163 break;
12164 case 'F':
db6eb5be
AM
12165 if (intel_syntax)
12166 break;
e396998b 12167 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12168 {
12169 if (sizeflag & AFLAG)
cb712a9e 12170 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12171 else
cb712a9e 12172 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12173 used_prefixes |= (prefixes & PREFIX_ADDR);
12174 }
252b5132 12175 break;
52fd6d94
JB
12176 case 'G':
12177 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12178 break;
161a04f6 12179 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12180 *obufp++ = 'l';
12181 else
12182 *obufp++ = 'w';
161a04f6 12183 if (!(rex & REX_W))
52fd6d94
JB
12184 used_prefixes |= (prefixes & PREFIX_DATA);
12185 break;
5dd0794d 12186 case 'H':
db6eb5be
AM
12187 if (intel_syntax)
12188 break;
5dd0794d
AM
12189 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12190 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12191 {
12192 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12193 *obufp++ = ',';
12194 *obufp++ = 'p';
12195 if (prefixes & PREFIX_DS)
12196 *obufp++ = 't';
12197 else
12198 *obufp++ = 'n';
12199 }
12200 break;
9306ca4a
JB
12201 case 'J':
12202 if (intel_syntax)
12203 break;
12204 *obufp++ = 'l';
12205 break;
42903f7f
L
12206 case 'K':
12207 USED_REX (REX_W);
12208 if (rex & REX_W)
12209 *obufp++ = 'q';
12210 else
12211 *obufp++ = 'd';
12212 break;
6dd5059a
L
12213 case 'Z':
12214 if (intel_syntax)
12215 break;
12216 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12217 {
12218 *obufp++ = 'q';
12219 break;
12220 }
12221 /* Fall through. */
98b528ac 12222 goto case_L;
252b5132 12223 case 'L':
98b528ac
L
12224 if (l != 0 || len != 1)
12225 {
12226 SAVE_LAST (*p);
12227 break;
12228 }
12229case_L:
db6eb5be
AM
12230 if (intel_syntax)
12231 break;
252b5132
RH
12232 if (sizeflag & SUFFIX_ALWAYS)
12233 *obufp++ = 'l';
252b5132 12234 break;
9d141669
L
12235 case 'M':
12236 if (intel_mnemonic != cond)
12237 *obufp++ = 'r';
12238 break;
252b5132
RH
12239 case 'N':
12240 if ((prefixes & PREFIX_FWAIT) == 0)
12241 *obufp++ = 'n';
7d421014
ILT
12242 else
12243 used_prefixes |= PREFIX_FWAIT;
252b5132 12244 break;
52b15da3 12245 case 'O':
161a04f6
L
12246 USED_REX (REX_W);
12247 if (rex & REX_W)
6439fc28 12248 *obufp++ = 'o';
a35ca55a
JB
12249 else if (intel_syntax && (sizeflag & DFLAG))
12250 *obufp++ = 'q';
52b15da3
JH
12251 else
12252 *obufp++ = 'd';
161a04f6 12253 if (!(rex & REX_W))
a35ca55a 12254 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12255 break;
6439fc28 12256 case 'T':
db6eb5be
AM
12257 if (intel_syntax)
12258 break;
cb712a9e 12259 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
12260 {
12261 *obufp++ = 'q';
12262 break;
12263 }
6608db57 12264 /* Fall through. */
252b5132 12265 case 'P':
db6eb5be
AM
12266 if (intel_syntax)
12267 break;
252b5132 12268 if ((prefixes & PREFIX_DATA)
161a04f6 12269 || (rex & REX_W)
e396998b 12270 || (sizeflag & SUFFIX_ALWAYS))
252b5132 12271 {
161a04f6
L
12272 USED_REX (REX_W);
12273 if (rex & REX_W)
52b15da3 12274 *obufp++ = 'q';
c2419411 12275 else
52b15da3
JH
12276 {
12277 if (sizeflag & DFLAG)
12278 *obufp++ = 'l';
12279 else
12280 *obufp++ = 'w';
f16cd0d5 12281 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12282 }
252b5132
RH
12283 }
12284 break;
6439fc28 12285 case 'U':
db6eb5be
AM
12286 if (intel_syntax)
12287 break;
cb712a9e 12288 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 12289 {
7967e09e 12290 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12291 *obufp++ = 'q';
6439fc28
AM
12292 break;
12293 }
6608db57 12294 /* Fall through. */
98b528ac 12295 goto case_Q;
252b5132 12296 case 'Q':
98b528ac 12297 if (l == 0 && len == 1)
252b5132 12298 {
98b528ac
L
12299case_Q:
12300 if (intel_syntax && !alt)
12301 break;
12302 USED_REX (REX_W);
12303 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12304 {
98b528ac
L
12305 if (rex & REX_W)
12306 *obufp++ = 'q';
52b15da3 12307 else
98b528ac
L
12308 {
12309 if (sizeflag & DFLAG)
12310 *obufp++ = intel_syntax ? 'd' : 'l';
12311 else
12312 *obufp++ = 'w';
f16cd0d5 12313 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 12314 }
52b15da3 12315 }
98b528ac
L
12316 }
12317 else
12318 {
12319 if (l != 1 || len != 2 || last[0] != 'L')
12320 {
12321 SAVE_LAST (*p);
12322 break;
12323 }
12324 if (intel_syntax
12325 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12326 break;
12327 if ((rex & REX_W))
12328 {
12329 USED_REX (REX_W);
12330 *obufp++ = 'q';
12331 }
12332 else
12333 *obufp++ = 'l';
252b5132
RH
12334 }
12335 break;
12336 case 'R':
161a04f6
L
12337 USED_REX (REX_W);
12338 if (rex & REX_W)
a35ca55a
JB
12339 *obufp++ = 'q';
12340 else if (sizeflag & DFLAG)
c608c12e 12341 {
a35ca55a 12342 if (intel_syntax)
c608c12e 12343 *obufp++ = 'd';
c608c12e 12344 else
a35ca55a 12345 *obufp++ = 'l';
c608c12e 12346 }
252b5132 12347 else
a35ca55a
JB
12348 *obufp++ = 'w';
12349 if (intel_syntax && !p[1]
161a04f6 12350 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 12351 *obufp++ = 'e';
161a04f6 12352 if (!(rex & REX_W))
52b15da3 12353 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12354 break;
1a114b12 12355 case 'V':
4b06377f 12356 if (l == 0 && len == 1)
1a114b12 12357 {
4b06377f
L
12358 if (intel_syntax)
12359 break;
12360 if (address_mode == mode_64bit && (sizeflag & DFLAG))
12361 {
12362 if (sizeflag & SUFFIX_ALWAYS)
12363 *obufp++ = 'q';
12364 break;
12365 }
12366 }
12367 else
12368 {
12369 if (l != 1
12370 || len != 2
12371 || last[0] != 'L')
12372 {
12373 SAVE_LAST (*p);
12374 break;
12375 }
12376
12377 if (rex & REX_W)
12378 {
12379 *obufp++ = 'a';
12380 *obufp++ = 'b';
12381 *obufp++ = 's';
12382 }
1a114b12
JB
12383 }
12384 /* Fall through. */
4b06377f 12385 goto case_S;
252b5132 12386 case 'S':
4b06377f 12387 if (l == 0 && len == 1)
252b5132 12388 {
4b06377f
L
12389case_S:
12390 if (intel_syntax)
12391 break;
12392 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 12393 {
4b06377f
L
12394 if (rex & REX_W)
12395 *obufp++ = 'q';
52b15da3 12396 else
4b06377f
L
12397 {
12398 if (sizeflag & DFLAG)
12399 *obufp++ = 'l';
12400 else
12401 *obufp++ = 'w';
12402 used_prefixes |= (prefixes & PREFIX_DATA);
12403 }
12404 }
12405 }
12406 else
12407 {
12408 if (l != 1
12409 || len != 2
12410 || last[0] != 'L')
12411 {
12412 SAVE_LAST (*p);
12413 break;
52b15da3 12414 }
4b06377f
L
12415
12416 if (address_mode == mode_64bit
12417 && !(prefixes & PREFIX_ADDR))
12418 {
12419 *obufp++ = 'a';
12420 *obufp++ = 'b';
12421 *obufp++ = 's';
12422 }
12423
12424 goto case_S;
252b5132 12425 }
252b5132 12426 break;
041bd2e0 12427 case 'X':
c0f3af97
L
12428 if (l != 0 || len != 1)
12429 {
12430 SAVE_LAST (*p);
12431 break;
12432 }
12433 if (need_vex && vex.prefix)
12434 {
12435 if (vex.prefix == DATA_PREFIX_OPCODE)
12436 *obufp++ = 'd';
12437 else
12438 *obufp++ = 's';
12439 }
041bd2e0 12440 else
f16cd0d5
L
12441 {
12442 if (prefixes & PREFIX_DATA)
12443 *obufp++ = 'd';
12444 else
12445 *obufp++ = 's';
12446 used_prefixes |= (prefixes & PREFIX_DATA);
12447 }
041bd2e0 12448 break;
76f227a5 12449 case 'Y':
c0f3af97 12450 if (l == 0 && len == 1)
76f227a5 12451 {
c0f3af97
L
12452 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12453 break;
12454 if (rex & REX_W)
12455 {
12456 USED_REX (REX_W);
12457 *obufp++ = 'q';
12458 }
12459 break;
12460 }
12461 else
12462 {
12463 if (l != 1 || len != 2 || last[0] != 'X')
12464 {
12465 SAVE_LAST (*p);
12466 break;
12467 }
12468 if (!need_vex)
12469 abort ();
12470 if (intel_syntax
12471 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12472 break;
12473 switch (vex.length)
12474 {
12475 case 128:
12476 *obufp++ = 'x';
12477 break;
12478 case 256:
12479 *obufp++ = 'y';
12480 break;
12481 default:
12482 abort ();
12483 }
76f227a5
JH
12484 }
12485 break;
252b5132 12486 case 'W':
0bfee649 12487 if (l == 0 && len == 1)
a35ca55a 12488 {
0bfee649
L
12489 /* operand size flag for cwtl, cbtw */
12490 USED_REX (REX_W);
12491 if (rex & REX_W)
12492 {
12493 if (intel_syntax)
12494 *obufp++ = 'd';
12495 else
12496 *obufp++ = 'l';
12497 }
12498 else if (sizeflag & DFLAG)
12499 *obufp++ = 'w';
a35ca55a 12500 else
0bfee649
L
12501 *obufp++ = 'b';
12502 if (!(rex & REX_W))
12503 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 12504 }
252b5132 12505 else
0bfee649
L
12506 {
12507 if (l != 1 || len != 2 || last[0] != 'X')
12508 {
12509 SAVE_LAST (*p);
12510 break;
12511 }
12512 if (!need_vex)
12513 abort ();
12514 *obufp++ = vex.w ? 'd': 's';
12515 }
252b5132
RH
12516 break;
12517 }
9306ca4a 12518 alt = 0;
252b5132
RH
12519 }
12520 *obufp = 0;
ea397f5b 12521 mnemonicendp = obufp;
6439fc28 12522 return 0;
252b5132
RH
12523}
12524
12525static void
26ca5450 12526oappend (const char *s)
252b5132 12527{
ea397f5b 12528 obufp = stpcpy (obufp, s);
252b5132
RH
12529}
12530
12531static void
26ca5450 12532append_seg (void)
252b5132
RH
12533{
12534 if (prefixes & PREFIX_CS)
7d421014 12535 {
7d421014 12536 used_prefixes |= PREFIX_CS;
d708bcba 12537 oappend ("%cs:" + intel_syntax);
7d421014 12538 }
252b5132 12539 if (prefixes & PREFIX_DS)
7d421014 12540 {
7d421014 12541 used_prefixes |= PREFIX_DS;
d708bcba 12542 oappend ("%ds:" + intel_syntax);
7d421014 12543 }
252b5132 12544 if (prefixes & PREFIX_SS)
7d421014 12545 {
7d421014 12546 used_prefixes |= PREFIX_SS;
d708bcba 12547 oappend ("%ss:" + intel_syntax);
7d421014 12548 }
252b5132 12549 if (prefixes & PREFIX_ES)
7d421014 12550 {
7d421014 12551 used_prefixes |= PREFIX_ES;
d708bcba 12552 oappend ("%es:" + intel_syntax);
7d421014 12553 }
252b5132 12554 if (prefixes & PREFIX_FS)
7d421014 12555 {
7d421014 12556 used_prefixes |= PREFIX_FS;
d708bcba 12557 oappend ("%fs:" + intel_syntax);
7d421014 12558 }
252b5132 12559 if (prefixes & PREFIX_GS)
7d421014 12560 {
7d421014 12561 used_prefixes |= PREFIX_GS;
d708bcba 12562 oappend ("%gs:" + intel_syntax);
7d421014 12563 }
252b5132
RH
12564}
12565
12566static void
26ca5450 12567OP_indirE (int bytemode, int sizeflag)
252b5132
RH
12568{
12569 if (!intel_syntax)
12570 oappend ("*");
12571 OP_E (bytemode, sizeflag);
12572}
12573
52b15da3 12574static void
26ca5450 12575print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 12576{
cb712a9e 12577 if (address_mode == mode_64bit)
52b15da3
JH
12578 {
12579 if (hex)
12580 {
12581 char tmp[30];
12582 int i;
12583 buf[0] = '0';
12584 buf[1] = 'x';
12585 sprintf_vma (tmp, disp);
6608db57 12586 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
12587 strcpy (buf + 2, tmp + i);
12588 }
12589 else
12590 {
12591 bfd_signed_vma v = disp;
12592 char tmp[30];
12593 int i;
12594 if (v < 0)
12595 {
12596 *(buf++) = '-';
12597 v = -disp;
6608db57 12598 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
12599 if (v < 0)
12600 {
12601 strcpy (buf, "9223372036854775808");
12602 return;
12603 }
12604 }
12605 if (!v)
12606 {
12607 strcpy (buf, "0");
12608 return;
12609 }
12610
12611 i = 0;
12612 tmp[29] = 0;
12613 while (v)
12614 {
6608db57 12615 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
12616 v /= 10;
12617 i++;
12618 }
12619 strcpy (buf, tmp + 29 - i);
12620 }
12621 }
12622 else
12623 {
12624 if (hex)
12625 sprintf (buf, "0x%x", (unsigned int) disp);
12626 else
12627 sprintf (buf, "%d", (int) disp);
12628 }
12629}
12630
5d669648
L
12631/* Put DISP in BUF as signed hex number. */
12632
12633static void
12634print_displacement (char *buf, bfd_vma disp)
12635{
12636 bfd_signed_vma val = disp;
12637 char tmp[30];
12638 int i, j = 0;
12639
12640 if (val < 0)
12641 {
12642 buf[j++] = '-';
12643 val = -disp;
12644
12645 /* Check for possible overflow. */
12646 if (val < 0)
12647 {
12648 switch (address_mode)
12649 {
12650 case mode_64bit:
12651 strcpy (buf + j, "0x8000000000000000");
12652 break;
12653 case mode_32bit:
12654 strcpy (buf + j, "0x80000000");
12655 break;
12656 case mode_16bit:
12657 strcpy (buf + j, "0x8000");
12658 break;
12659 }
12660 return;
12661 }
12662 }
12663
12664 buf[j++] = '0';
12665 buf[j++] = 'x';
12666
0af1713e 12667 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
12668 for (i = 0; tmp[i] == '0'; i++)
12669 continue;
12670 if (tmp[i] == '\0')
12671 i--;
12672 strcpy (buf + j, tmp + i);
12673}
12674
3f31e633
JB
12675static void
12676intel_operand_size (int bytemode, int sizeflag)
12677{
12678 switch (bytemode)
12679 {
12680 case b_mode:
b6169b20 12681 case b_swap_mode:
42903f7f 12682 case dqb_mode:
3f31e633
JB
12683 oappend ("BYTE PTR ");
12684 break;
12685 case w_mode:
12686 case dqw_mode:
12687 oappend ("WORD PTR ");
12688 break;
1a114b12 12689 case stack_v_mode:
cb712a9e 12690 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
12691 {
12692 oappend ("QWORD PTR ");
3f31e633
JB
12693 break;
12694 }
12695 /* FALLTHRU */
12696 case v_mode:
b6169b20 12697 case v_swap_mode:
3f31e633 12698 case dq_mode:
161a04f6
L
12699 USED_REX (REX_W);
12700 if (rex & REX_W)
3f31e633 12701 oappend ("QWORD PTR ");
3f31e633 12702 else
f16cd0d5
L
12703 {
12704 if ((sizeflag & DFLAG) || bytemode == dq_mode)
12705 oappend ("DWORD PTR ");
12706 else
12707 oappend ("WORD PTR ");
12708 used_prefixes |= (prefixes & PREFIX_DATA);
12709 }
3f31e633 12710 break;
52fd6d94 12711 case z_mode:
161a04f6 12712 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12713 *obufp++ = 'D';
12714 oappend ("WORD PTR ");
161a04f6 12715 if (!(rex & REX_W))
52fd6d94
JB
12716 used_prefixes |= (prefixes & PREFIX_DATA);
12717 break;
34b772a6
JB
12718 case a_mode:
12719 if (sizeflag & DFLAG)
12720 oappend ("QWORD PTR ");
12721 else
12722 oappend ("DWORD PTR ");
12723 used_prefixes |= (prefixes & PREFIX_DATA);
12724 break;
3f31e633 12725 case d_mode:
539f890d
L
12726 case d_scalar_mode:
12727 case d_scalar_swap_mode:
fa99fab2 12728 case d_swap_mode:
42903f7f 12729 case dqd_mode:
3f31e633
JB
12730 oappend ("DWORD PTR ");
12731 break;
12732 case q_mode:
539f890d
L
12733 case q_scalar_mode:
12734 case q_scalar_swap_mode:
b6169b20 12735 case q_swap_mode:
3f31e633
JB
12736 oappend ("QWORD PTR ");
12737 break;
12738 case m_mode:
cb712a9e 12739 if (address_mode == mode_64bit)
3f31e633
JB
12740 oappend ("QWORD PTR ");
12741 else
12742 oappend ("DWORD PTR ");
12743 break;
12744 case f_mode:
12745 if (sizeflag & DFLAG)
12746 oappend ("FWORD PTR ");
12747 else
12748 oappend ("DWORD PTR ");
12749 used_prefixes |= (prefixes & PREFIX_DATA);
12750 break;
12751 case t_mode:
12752 oappend ("TBYTE PTR ");
12753 break;
12754 case x_mode:
b6169b20 12755 case x_swap_mode:
c0f3af97
L
12756 if (need_vex)
12757 {
12758 switch (vex.length)
12759 {
12760 case 128:
12761 oappend ("XMMWORD PTR ");
12762 break;
12763 case 256:
12764 oappend ("YMMWORD PTR ");
12765 break;
12766 default:
12767 abort ();
12768 }
12769 }
12770 else
12771 oappend ("XMMWORD PTR ");
12772 break;
12773 case xmm_mode:
3f31e633
JB
12774 oappend ("XMMWORD PTR ");
12775 break;
c0f3af97
L
12776 case xmmq_mode:
12777 if (!need_vex)
12778 abort ();
12779
12780 switch (vex.length)
12781 {
12782 case 128:
12783 oappend ("QWORD PTR ");
12784 break;
12785 case 256:
12786 oappend ("XMMWORD PTR ");
12787 break;
12788 default:
12789 abort ();
12790 }
12791 break;
12792 case ymmq_mode:
12793 if (!need_vex)
12794 abort ();
12795
12796 switch (vex.length)
12797 {
12798 case 128:
12799 oappend ("QWORD PTR ");
12800 break;
12801 case 256:
12802 oappend ("YMMWORD PTR ");
12803 break;
12804 default:
12805 abort ();
12806 }
12807 break;
fb9c77c7
L
12808 case o_mode:
12809 oappend ("OWORD PTR ");
12810 break;
0bfee649 12811 case vex_w_dq_mode:
1c480963 12812 case vex_scalar_w_dq_mode:
0bfee649
L
12813 if (!need_vex)
12814 abort ();
12815
12816 if (vex.w)
12817 oappend ("QWORD PTR ");
12818 else
12819 oappend ("DWORD PTR ");
12820 break;
3f31e633
JB
12821 default:
12822 break;
12823 }
12824}
12825
252b5132 12826static void
c0f3af97 12827OP_E_register (int bytemode, int sizeflag)
252b5132 12828{
c0f3af97
L
12829 int reg = modrm.rm;
12830 const char **names;
252b5132 12831
c0f3af97
L
12832 USED_REX (REX_B);
12833 if ((rex & REX_B))
12834 reg += 8;
252b5132 12835
b6169b20
L
12836 if ((sizeflag & SUFFIX_ALWAYS)
12837 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
12838 swap_operand ();
12839
c0f3af97 12840 switch (bytemode)
252b5132 12841 {
c0f3af97 12842 case b_mode:
b6169b20 12843 case b_swap_mode:
c0f3af97
L
12844 USED_REX (0);
12845 if (rex)
12846 names = names8rex;
12847 else
12848 names = names8;
12849 break;
12850 case w_mode:
12851 names = names16;
12852 break;
12853 case d_mode:
12854 names = names32;
12855 break;
12856 case q_mode:
12857 names = names64;
12858 break;
12859 case m_mode:
12860 names = address_mode == mode_64bit ? names64 : names32;
12861 break;
12862 case stack_v_mode:
12863 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 12864 {
c0f3af97 12865 names = names64;
252b5132 12866 break;
252b5132 12867 }
c0f3af97
L
12868 bytemode = v_mode;
12869 /* FALLTHRU */
12870 case v_mode:
b6169b20 12871 case v_swap_mode:
c0f3af97
L
12872 case dq_mode:
12873 case dqb_mode:
12874 case dqd_mode:
12875 case dqw_mode:
12876 USED_REX (REX_W);
12877 if (rex & REX_W)
12878 names = names64;
c0f3af97 12879 else
f16cd0d5
L
12880 {
12881 if ((sizeflag & DFLAG)
12882 || (bytemode != v_mode
12883 && bytemode != v_swap_mode))
12884 names = names32;
12885 else
12886 names = names16;
12887 used_prefixes |= (prefixes & PREFIX_DATA);
12888 }
c0f3af97
L
12889 break;
12890 case 0:
12891 return;
12892 default:
12893 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
12894 return;
12895 }
c0f3af97
L
12896 oappend (names[reg]);
12897}
12898
12899static void
c1e679ec 12900OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
12901{
12902 bfd_vma disp = 0;
12903 int add = (rex & REX_B) ? 8 : 0;
12904 int riprel = 0;
252b5132 12905
c0f3af97 12906 USED_REX (REX_B);
3f31e633
JB
12907 if (intel_syntax)
12908 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12909 append_seg ();
12910
5d669648 12911 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 12912 {
5d669648
L
12913 /* 32/64 bit address mode */
12914 int havedisp;
252b5132
RH
12915 int havesib;
12916 int havebase;
0f7da397 12917 int haveindex;
20afcfb7 12918 int needindex;
82c18208 12919 int base, rbase;
91d6fa6a 12920 int vindex = 0;
252b5132
RH
12921 int scale = 0;
12922
12923 havesib = 0;
12924 havebase = 1;
0f7da397 12925 haveindex = 0;
7967e09e 12926 base = modrm.rm;
252b5132
RH
12927
12928 if (base == 4)
12929 {
12930 havesib = 1;
12931 FETCH_DATA (the_info, codep + 1);
91d6fa6a 12932 vindex = (*codep >> 3) & 7;
db51cc60 12933 scale = (*codep >> 6) & 3;
252b5132 12934 base = *codep & 7;
161a04f6
L
12935 USED_REX (REX_X);
12936 if (rex & REX_X)
91d6fa6a
NC
12937 vindex += 8;
12938 haveindex = vindex != 4;
252b5132
RH
12939 codep++;
12940 }
82c18208 12941 rbase = base + add;
252b5132 12942
7967e09e 12943 switch (modrm.mod)
252b5132
RH
12944 {
12945 case 0:
82c18208 12946 if (base == 5)
252b5132
RH
12947 {
12948 havebase = 0;
cb712a9e 12949 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
12950 riprel = 1;
12951 disp = get32s ();
252b5132
RH
12952 }
12953 break;
12954 case 1:
12955 FETCH_DATA (the_info, codep + 1);
12956 disp = *codep++;
12957 if ((disp & 0x80) != 0)
12958 disp -= 0x100;
12959 break;
12960 case 2:
52b15da3 12961 disp = get32s ();
252b5132
RH
12962 break;
12963 }
12964
20afcfb7
L
12965 /* In 32bit mode, we need index register to tell [offset] from
12966 [eiz*1 + offset]. */
12967 needindex = (havesib
12968 && !havebase
12969 && !haveindex
12970 && address_mode == mode_32bit);
12971 havedisp = (havebase
12972 || needindex
12973 || (havesib && (haveindex || scale != 0)));
5d669648 12974
252b5132 12975 if (!intel_syntax)
82c18208 12976 if (modrm.mod != 0 || base == 5)
db6eb5be 12977 {
5d669648
L
12978 if (havedisp || riprel)
12979 print_displacement (scratchbuf, disp);
12980 else
12981 print_operand_value (scratchbuf, 1, disp);
db6eb5be 12982 oappend (scratchbuf);
52b15da3
JH
12983 if (riprel)
12984 {
12985 set_op (disp, 1);
87767711 12986 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 12987 }
db6eb5be 12988 }
2da11e11 12989
87767711
JB
12990 if (havebase || haveindex || riprel)
12991 used_prefixes |= PREFIX_ADDR;
12992
5d669648 12993 if (havedisp || (intel_syntax && riprel))
252b5132 12994 {
252b5132 12995 *obufp++ = open_char;
52b15da3 12996 if (intel_syntax && riprel)
185b1163
L
12997 {
12998 set_op (disp, 1);
87767711 12999 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 13000 }
db6eb5be 13001 *obufp = '\0';
252b5132 13002 if (havebase)
cb712a9e 13003 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 13004 ? names64[rbase] : names32[rbase]);
252b5132
RH
13005 if (havesib)
13006 {
db51cc60
L
13007 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
13008 print index to tell base + index from base. */
13009 if (scale != 0
20afcfb7 13010 || needindex
db51cc60
L
13011 || haveindex
13012 || (havebase && base != ESP_REG_NUM))
252b5132 13013 {
9306ca4a 13014 if (!intel_syntax || havebase)
db6eb5be 13015 {
9306ca4a
JB
13016 *obufp++ = separator_char;
13017 *obufp = '\0';
db6eb5be 13018 }
db51cc60
L
13019 if (haveindex)
13020 oappend (address_mode == mode_64bit
13021 && (sizeflag & AFLAG)
91d6fa6a 13022 ? names64[vindex] : names32[vindex]);
db51cc60
L
13023 else
13024 oappend (address_mode == mode_64bit
13025 && (sizeflag & AFLAG)
13026 ? index64 : index32);
13027
db6eb5be
AM
13028 *obufp++ = scale_char;
13029 *obufp = '\0';
13030 sprintf (scratchbuf, "%d", 1 << scale);
13031 oappend (scratchbuf);
13032 }
252b5132 13033 }
185b1163 13034 if (intel_syntax
82c18208 13035 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 13036 {
db51cc60 13037 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
13038 {
13039 *obufp++ = '+';
13040 *obufp = '\0';
13041 }
05203043 13042 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
13043 {
13044 *obufp++ = '-';
13045 *obufp = '\0';
13046 disp = - (bfd_signed_vma) disp;
13047 }
13048
db51cc60
L
13049 if (havedisp)
13050 print_displacement (scratchbuf, disp);
13051 else
13052 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
13053 oappend (scratchbuf);
13054 }
252b5132
RH
13055
13056 *obufp++ = close_char;
db6eb5be 13057 *obufp = '\0';
252b5132
RH
13058 }
13059 else if (intel_syntax)
db6eb5be 13060 {
82c18208 13061 if (modrm.mod != 0 || base == 5)
db6eb5be 13062 {
252b5132
RH
13063 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13064 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13065 ;
13066 else
13067 {
d708bcba 13068 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13069 oappend (":");
13070 }
52b15da3 13071 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
13072 oappend (scratchbuf);
13073 }
13074 }
252b5132
RH
13075 }
13076 else
f16cd0d5
L
13077 {
13078 /* 16 bit address mode */
13079 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 13080 switch (modrm.mod)
252b5132
RH
13081 {
13082 case 0:
7967e09e 13083 if (modrm.rm == 6)
252b5132
RH
13084 {
13085 disp = get16 ();
13086 if ((disp & 0x8000) != 0)
13087 disp -= 0x10000;
13088 }
13089 break;
13090 case 1:
13091 FETCH_DATA (the_info, codep + 1);
13092 disp = *codep++;
13093 if ((disp & 0x80) != 0)
13094 disp -= 0x100;
13095 break;
13096 case 2:
13097 disp = get16 ();
13098 if ((disp & 0x8000) != 0)
13099 disp -= 0x10000;
13100 break;
13101 }
13102
13103 if (!intel_syntax)
7967e09e 13104 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 13105 {
5d669648 13106 print_displacement (scratchbuf, disp);
db6eb5be
AM
13107 oappend (scratchbuf);
13108 }
252b5132 13109
7967e09e 13110 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
13111 {
13112 *obufp++ = open_char;
db6eb5be 13113 *obufp = '\0';
7967e09e 13114 oappend (index16[modrm.rm]);
5d669648
L
13115 if (intel_syntax
13116 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 13117 {
5d669648 13118 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
13119 {
13120 *obufp++ = '+';
13121 *obufp = '\0';
13122 }
7967e09e 13123 else if (modrm.mod != 1)
3d456fa1
JB
13124 {
13125 *obufp++ = '-';
13126 *obufp = '\0';
13127 disp = - (bfd_signed_vma) disp;
13128 }
13129
5d669648 13130 print_displacement (scratchbuf, disp);
3d456fa1
JB
13131 oappend (scratchbuf);
13132 }
13133
db6eb5be
AM
13134 *obufp++ = close_char;
13135 *obufp = '\0';
252b5132 13136 }
3d456fa1
JB
13137 else if (intel_syntax)
13138 {
13139 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13140 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13141 ;
13142 else
13143 {
13144 oappend (names_seg[ds_reg - es_reg]);
13145 oappend (":");
13146 }
13147 print_operand_value (scratchbuf, 1, disp & 0xffff);
13148 oappend (scratchbuf);
13149 }
252b5132
RH
13150 }
13151}
13152
c0f3af97 13153static void
8b3f93e7 13154OP_E (int bytemode, int sizeflag)
c0f3af97
L
13155{
13156 /* Skip mod/rm byte. */
13157 MODRM_CHECK;
13158 codep++;
13159
13160 if (modrm.mod == 3)
13161 OP_E_register (bytemode, sizeflag);
13162 else
c1e679ec 13163 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
13164}
13165
252b5132 13166static void
26ca5450 13167OP_G (int bytemode, int sizeflag)
252b5132 13168{
52b15da3 13169 int add = 0;
161a04f6
L
13170 USED_REX (REX_R);
13171 if (rex & REX_R)
52b15da3 13172 add += 8;
252b5132
RH
13173 switch (bytemode)
13174 {
13175 case b_mode:
52b15da3
JH
13176 USED_REX (0);
13177 if (rex)
7967e09e 13178 oappend (names8rex[modrm.reg + add]);
52b15da3 13179 else
7967e09e 13180 oappend (names8[modrm.reg + add]);
252b5132
RH
13181 break;
13182 case w_mode:
7967e09e 13183 oappend (names16[modrm.reg + add]);
252b5132
RH
13184 break;
13185 case d_mode:
7967e09e 13186 oappend (names32[modrm.reg + add]);
52b15da3
JH
13187 break;
13188 case q_mode:
7967e09e 13189 oappend (names64[modrm.reg + add]);
252b5132
RH
13190 break;
13191 case v_mode:
9306ca4a 13192 case dq_mode:
42903f7f
L
13193 case dqb_mode:
13194 case dqd_mode:
9306ca4a 13195 case dqw_mode:
161a04f6
L
13196 USED_REX (REX_W);
13197 if (rex & REX_W)
7967e09e 13198 oappend (names64[modrm.reg + add]);
252b5132 13199 else
f16cd0d5
L
13200 {
13201 if ((sizeflag & DFLAG) || bytemode != v_mode)
13202 oappend (names32[modrm.reg + add]);
13203 else
13204 oappend (names16[modrm.reg + add]);
13205 used_prefixes |= (prefixes & PREFIX_DATA);
13206 }
252b5132 13207 break;
90700ea2 13208 case m_mode:
cb712a9e 13209 if (address_mode == mode_64bit)
7967e09e 13210 oappend (names64[modrm.reg + add]);
90700ea2 13211 else
7967e09e 13212 oappend (names32[modrm.reg + add]);
90700ea2 13213 break;
252b5132
RH
13214 default:
13215 oappend (INTERNAL_DISASSEMBLER_ERROR);
13216 break;
13217 }
13218}
13219
52b15da3 13220static bfd_vma
26ca5450 13221get64 (void)
52b15da3 13222{
5dd0794d 13223 bfd_vma x;
52b15da3 13224#ifdef BFD64
5dd0794d
AM
13225 unsigned int a;
13226 unsigned int b;
13227
52b15da3
JH
13228 FETCH_DATA (the_info, codep + 8);
13229 a = *codep++ & 0xff;
13230 a |= (*codep++ & 0xff) << 8;
13231 a |= (*codep++ & 0xff) << 16;
13232 a |= (*codep++ & 0xff) << 24;
5dd0794d 13233 b = *codep++ & 0xff;
52b15da3
JH
13234 b |= (*codep++ & 0xff) << 8;
13235 b |= (*codep++ & 0xff) << 16;
13236 b |= (*codep++ & 0xff) << 24;
13237 x = a + ((bfd_vma) b << 32);
13238#else
6608db57 13239 abort ();
5dd0794d 13240 x = 0;
52b15da3
JH
13241#endif
13242 return x;
13243}
13244
13245static bfd_signed_vma
26ca5450 13246get32 (void)
252b5132 13247{
52b15da3 13248 bfd_signed_vma x = 0;
252b5132
RH
13249
13250 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
13251 x = *codep++ & (bfd_signed_vma) 0xff;
13252 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13253 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13254 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13255 return x;
13256}
13257
13258static bfd_signed_vma
26ca5450 13259get32s (void)
52b15da3
JH
13260{
13261 bfd_signed_vma x = 0;
13262
13263 FETCH_DATA (the_info, codep + 4);
13264 x = *codep++ & (bfd_signed_vma) 0xff;
13265 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13266 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13267 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13268
13269 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13270
252b5132
RH
13271 return x;
13272}
13273
13274static int
26ca5450 13275get16 (void)
252b5132
RH
13276{
13277 int x = 0;
13278
13279 FETCH_DATA (the_info, codep + 2);
13280 x = *codep++ & 0xff;
13281 x |= (*codep++ & 0xff) << 8;
13282 return x;
13283}
13284
13285static void
26ca5450 13286set_op (bfd_vma op, int riprel)
252b5132
RH
13287{
13288 op_index[op_ad] = op_ad;
cb712a9e 13289 if (address_mode == mode_64bit)
7081ff04
AJ
13290 {
13291 op_address[op_ad] = op;
13292 op_riprel[op_ad] = riprel;
13293 }
13294 else
13295 {
13296 /* Mask to get a 32-bit address. */
13297 op_address[op_ad] = op & 0xffffffff;
13298 op_riprel[op_ad] = riprel & 0xffffffff;
13299 }
252b5132
RH
13300}
13301
13302static void
26ca5450 13303OP_REG (int code, int sizeflag)
252b5132 13304{
2da11e11 13305 const char *s;
9b60702d 13306 int add;
161a04f6
L
13307 USED_REX (REX_B);
13308 if (rex & REX_B)
52b15da3 13309 add = 8;
9b60702d
L
13310 else
13311 add = 0;
52b15da3
JH
13312
13313 switch (code)
13314 {
52b15da3
JH
13315 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13316 case sp_reg: case bp_reg: case si_reg: case di_reg:
13317 s = names16[code - ax_reg + add];
13318 break;
13319 case es_reg: case ss_reg: case cs_reg:
13320 case ds_reg: case fs_reg: case gs_reg:
13321 s = names_seg[code - es_reg + add];
13322 break;
13323 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13324 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13325 USED_REX (0);
13326 if (rex)
13327 s = names8rex[code - al_reg + add];
13328 else
13329 s = names8[code - al_reg];
13330 break;
6439fc28
AM
13331 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13332 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 13333 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
13334 {
13335 s = names64[code - rAX_reg + add];
13336 break;
13337 }
13338 code += eAX_reg - rAX_reg;
6608db57 13339 /* Fall through. */
52b15da3
JH
13340 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13341 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13342 USED_REX (REX_W);
13343 if (rex & REX_W)
52b15da3 13344 s = names64[code - eAX_reg + add];
52b15da3 13345 else
f16cd0d5
L
13346 {
13347 if (sizeflag & DFLAG)
13348 s = names32[code - eAX_reg + add];
13349 else
13350 s = names16[code - eAX_reg + add];
13351 used_prefixes |= (prefixes & PREFIX_DATA);
13352 }
52b15da3 13353 break;
52b15da3
JH
13354 default:
13355 s = INTERNAL_DISASSEMBLER_ERROR;
13356 break;
13357 }
13358 oappend (s);
13359}
13360
13361static void
26ca5450 13362OP_IMREG (int code, int sizeflag)
52b15da3
JH
13363{
13364 const char *s;
252b5132
RH
13365
13366 switch (code)
13367 {
13368 case indir_dx_reg:
d708bcba 13369 if (intel_syntax)
52fd6d94 13370 s = "dx";
d708bcba 13371 else
db6eb5be 13372 s = "(%dx)";
252b5132
RH
13373 break;
13374 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13375 case sp_reg: case bp_reg: case si_reg: case di_reg:
13376 s = names16[code - ax_reg];
13377 break;
13378 case es_reg: case ss_reg: case cs_reg:
13379 case ds_reg: case fs_reg: case gs_reg:
13380 s = names_seg[code - es_reg];
13381 break;
13382 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13383 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
13384 USED_REX (0);
13385 if (rex)
13386 s = names8rex[code - al_reg];
13387 else
13388 s = names8[code - al_reg];
252b5132
RH
13389 break;
13390 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13391 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13392 USED_REX (REX_W);
13393 if (rex & REX_W)
52b15da3 13394 s = names64[code - eAX_reg];
252b5132 13395 else
f16cd0d5
L
13396 {
13397 if (sizeflag & DFLAG)
13398 s = names32[code - eAX_reg];
13399 else
13400 s = names16[code - eAX_reg];
13401 used_prefixes |= (prefixes & PREFIX_DATA);
13402 }
252b5132 13403 break;
52fd6d94 13404 case z_mode_ax_reg:
161a04f6 13405 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13406 s = *names32;
13407 else
13408 s = *names16;
161a04f6 13409 if (!(rex & REX_W))
52fd6d94
JB
13410 used_prefixes |= (prefixes & PREFIX_DATA);
13411 break;
252b5132
RH
13412 default:
13413 s = INTERNAL_DISASSEMBLER_ERROR;
13414 break;
13415 }
13416 oappend (s);
13417}
13418
13419static void
26ca5450 13420OP_I (int bytemode, int sizeflag)
252b5132 13421{
52b15da3
JH
13422 bfd_signed_vma op;
13423 bfd_signed_vma mask = -1;
252b5132
RH
13424
13425 switch (bytemode)
13426 {
13427 case b_mode:
13428 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
13429 op = *codep++;
13430 mask = 0xff;
13431 break;
13432 case q_mode:
cb712a9e 13433 if (address_mode == mode_64bit)
6439fc28
AM
13434 {
13435 op = get32s ();
13436 break;
13437 }
6608db57 13438 /* Fall through. */
252b5132 13439 case v_mode:
161a04f6
L
13440 USED_REX (REX_W);
13441 if (rex & REX_W)
52b15da3 13442 op = get32s ();
252b5132 13443 else
52b15da3 13444 {
f16cd0d5
L
13445 if (sizeflag & DFLAG)
13446 {
13447 op = get32 ();
13448 mask = 0xffffffff;
13449 }
13450 else
13451 {
13452 op = get16 ();
13453 mask = 0xfffff;
13454 }
13455 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13456 }
252b5132
RH
13457 break;
13458 case w_mode:
52b15da3 13459 mask = 0xfffff;
252b5132
RH
13460 op = get16 ();
13461 break;
9306ca4a
JB
13462 case const_1_mode:
13463 if (intel_syntax)
13464 oappend ("1");
13465 return;
252b5132
RH
13466 default:
13467 oappend (INTERNAL_DISASSEMBLER_ERROR);
13468 return;
13469 }
13470
52b15da3
JH
13471 op &= mask;
13472 scratchbuf[0] = '$';
d708bcba
AM
13473 print_operand_value (scratchbuf + 1, 1, op);
13474 oappend (scratchbuf + intel_syntax);
52b15da3
JH
13475 scratchbuf[0] = '\0';
13476}
13477
13478static void
26ca5450 13479OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
13480{
13481 bfd_signed_vma op;
13482 bfd_signed_vma mask = -1;
13483
cb712a9e 13484 if (address_mode != mode_64bit)
6439fc28
AM
13485 {
13486 OP_I (bytemode, sizeflag);
13487 return;
13488 }
13489
52b15da3
JH
13490 switch (bytemode)
13491 {
13492 case b_mode:
13493 FETCH_DATA (the_info, codep + 1);
13494 op = *codep++;
13495 mask = 0xff;
13496 break;
13497 case v_mode:
161a04f6
L
13498 USED_REX (REX_W);
13499 if (rex & REX_W)
52b15da3 13500 op = get64 ();
52b15da3
JH
13501 else
13502 {
f16cd0d5
L
13503 if (sizeflag & DFLAG)
13504 {
13505 op = get32 ();
13506 mask = 0xffffffff;
13507 }
13508 else
13509 {
13510 op = get16 ();
13511 mask = 0xfffff;
13512 }
13513 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13514 }
52b15da3
JH
13515 break;
13516 case w_mode:
13517 mask = 0xfffff;
13518 op = get16 ();
13519 break;
13520 default:
13521 oappend (INTERNAL_DISASSEMBLER_ERROR);
13522 return;
13523 }
13524
13525 op &= mask;
13526 scratchbuf[0] = '$';
d708bcba
AM
13527 print_operand_value (scratchbuf + 1, 1, op);
13528 oappend (scratchbuf + intel_syntax);
252b5132
RH
13529 scratchbuf[0] = '\0';
13530}
13531
13532static void
26ca5450 13533OP_sI (int bytemode, int sizeflag)
252b5132 13534{
52b15da3
JH
13535 bfd_signed_vma op;
13536 bfd_signed_vma mask = -1;
252b5132
RH
13537
13538 switch (bytemode)
13539 {
13540 case b_mode:
13541 FETCH_DATA (the_info, codep + 1);
13542 op = *codep++;
13543 if ((op & 0x80) != 0)
13544 op -= 0x100;
52b15da3 13545 mask = 0xffffffff;
252b5132
RH
13546 break;
13547 case v_mode:
161a04f6
L
13548 USED_REX (REX_W);
13549 if (rex & REX_W)
52b15da3 13550 op = get32s ();
252b5132
RH
13551 else
13552 {
f16cd0d5
L
13553 if (sizeflag & DFLAG)
13554 {
13555 op = get32s ();
13556 mask = 0xffffffff;
13557 }
13558 else
13559 {
13560 mask = 0xffffffff;
13561 op = get16 ();
13562 if ((op & 0x8000) != 0)
13563 op -= 0x10000;
13564 }
13565 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13566 }
13567 break;
13568 case w_mode:
13569 op = get16 ();
52b15da3 13570 mask = 0xffffffff;
252b5132
RH
13571 if ((op & 0x8000) != 0)
13572 op -= 0x10000;
13573 break;
13574 default:
13575 oappend (INTERNAL_DISASSEMBLER_ERROR);
13576 return;
13577 }
52b15da3
JH
13578
13579 scratchbuf[0] = '$';
13580 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 13581 oappend (scratchbuf + intel_syntax);
252b5132
RH
13582}
13583
13584static void
26ca5450 13585OP_J (int bytemode, int sizeflag)
252b5132 13586{
52b15da3 13587 bfd_vma disp;
7081ff04 13588 bfd_vma mask = -1;
65ca155d 13589 bfd_vma segment = 0;
252b5132
RH
13590
13591 switch (bytemode)
13592 {
13593 case b_mode:
13594 FETCH_DATA (the_info, codep + 1);
13595 disp = *codep++;
13596 if ((disp & 0x80) != 0)
13597 disp -= 0x100;
13598 break;
13599 case v_mode:
f16cd0d5 13600 USED_REX (REX_W);
161a04f6 13601 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13602 disp = get32s ();
252b5132
RH
13603 else
13604 {
13605 disp = get16 ();
206717e8
L
13606 if ((disp & 0x8000) != 0)
13607 disp -= 0x10000;
65ca155d
L
13608 /* In 16bit mode, address is wrapped around at 64k within
13609 the same segment. Otherwise, a data16 prefix on a jump
13610 instruction means that the pc is masked to 16 bits after
13611 the displacement is added! */
13612 mask = 0xffff;
13613 if ((prefixes & PREFIX_DATA) == 0)
13614 segment = ((start_pc + codep - start_codep)
13615 & ~((bfd_vma) 0xffff));
252b5132 13616 }
f16cd0d5
L
13617 if (!(rex & REX_W))
13618 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13619 break;
13620 default:
13621 oappend (INTERNAL_DISASSEMBLER_ERROR);
13622 return;
13623 }
65ca155d 13624 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
13625 set_op (disp, 0);
13626 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
13627 oappend (scratchbuf);
13628}
13629
252b5132 13630static void
ed7841b3 13631OP_SEG (int bytemode, int sizeflag)
252b5132 13632{
ed7841b3 13633 if (bytemode == w_mode)
7967e09e 13634 oappend (names_seg[modrm.reg]);
ed7841b3 13635 else
7967e09e 13636 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
13637}
13638
13639static void
26ca5450 13640OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
13641{
13642 int seg, offset;
13643
c608c12e 13644 if (sizeflag & DFLAG)
252b5132 13645 {
c608c12e
AM
13646 offset = get32 ();
13647 seg = get16 ();
252b5132 13648 }
c608c12e
AM
13649 else
13650 {
13651 offset = get16 ();
13652 seg = get16 ();
13653 }
7d421014 13654 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 13655 if (intel_syntax)
3f31e633 13656 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
13657 else
13658 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 13659 oappend (scratchbuf);
252b5132
RH
13660}
13661
252b5132 13662static void
3f31e633 13663OP_OFF (int bytemode, int sizeflag)
252b5132 13664{
52b15da3 13665 bfd_vma off;
252b5132 13666
3f31e633
JB
13667 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13668 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13669 append_seg ();
13670
cb712a9e 13671 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
13672 off = get32 ();
13673 else
13674 off = get16 ();
13675
13676 if (intel_syntax)
13677 {
13678 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13679 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 13680 {
d708bcba 13681 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13682 oappend (":");
13683 }
13684 }
52b15da3
JH
13685 print_operand_value (scratchbuf, 1, off);
13686 oappend (scratchbuf);
13687}
6439fc28 13688
52b15da3 13689static void
3f31e633 13690OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
13691{
13692 bfd_vma off;
13693
539e75ad
L
13694 if (address_mode != mode_64bit
13695 || (prefixes & PREFIX_ADDR))
6439fc28
AM
13696 {
13697 OP_OFF (bytemode, sizeflag);
13698 return;
13699 }
13700
3f31e633
JB
13701 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13702 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
13703 append_seg ();
13704
6608db57 13705 off = get64 ();
52b15da3
JH
13706
13707 if (intel_syntax)
13708 {
13709 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13710 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 13711 {
d708bcba 13712 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
13713 oappend (":");
13714 }
13715 }
13716 print_operand_value (scratchbuf, 1, off);
252b5132
RH
13717 oappend (scratchbuf);
13718}
13719
13720static void
26ca5450 13721ptr_reg (int code, int sizeflag)
252b5132 13722{
2da11e11 13723 const char *s;
d708bcba 13724
1d9f512f 13725 *obufp++ = open_char;
20f0a1fc 13726 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 13727 if (address_mode == mode_64bit)
c1a64871
JH
13728 {
13729 if (!(sizeflag & AFLAG))
db6eb5be 13730 s = names32[code - eAX_reg];
c1a64871 13731 else
db6eb5be 13732 s = names64[code - eAX_reg];
c1a64871 13733 }
52b15da3 13734 else if (sizeflag & AFLAG)
252b5132
RH
13735 s = names32[code - eAX_reg];
13736 else
13737 s = names16[code - eAX_reg];
13738 oappend (s);
1d9f512f
AM
13739 *obufp++ = close_char;
13740 *obufp = 0;
252b5132
RH
13741}
13742
13743static void
26ca5450 13744OP_ESreg (int code, int sizeflag)
252b5132 13745{
9306ca4a 13746 if (intel_syntax)
52fd6d94
JB
13747 {
13748 switch (codep[-1])
13749 {
13750 case 0x6d: /* insw/insl */
13751 intel_operand_size (z_mode, sizeflag);
13752 break;
13753 case 0xa5: /* movsw/movsl/movsq */
13754 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13755 case 0xab: /* stosw/stosl */
13756 case 0xaf: /* scasw/scasl */
13757 intel_operand_size (v_mode, sizeflag);
13758 break;
13759 default:
13760 intel_operand_size (b_mode, sizeflag);
13761 }
13762 }
d708bcba 13763 oappend ("%es:" + intel_syntax);
252b5132
RH
13764 ptr_reg (code, sizeflag);
13765}
13766
13767static void
26ca5450 13768OP_DSreg (int code, int sizeflag)
252b5132 13769{
9306ca4a 13770 if (intel_syntax)
52fd6d94
JB
13771 {
13772 switch (codep[-1])
13773 {
13774 case 0x6f: /* outsw/outsl */
13775 intel_operand_size (z_mode, sizeflag);
13776 break;
13777 case 0xa5: /* movsw/movsl/movsq */
13778 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13779 case 0xad: /* lodsw/lodsl/lodsq */
13780 intel_operand_size (v_mode, sizeflag);
13781 break;
13782 default:
13783 intel_operand_size (b_mode, sizeflag);
13784 }
13785 }
252b5132
RH
13786 if ((prefixes
13787 & (PREFIX_CS
13788 | PREFIX_DS
13789 | PREFIX_SS
13790 | PREFIX_ES
13791 | PREFIX_FS
13792 | PREFIX_GS)) == 0)
13793 prefixes |= PREFIX_DS;
6608db57 13794 append_seg ();
252b5132
RH
13795 ptr_reg (code, sizeflag);
13796}
13797
252b5132 13798static void
26ca5450 13799OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13800{
9b60702d 13801 int add;
161a04f6 13802 if (rex & REX_R)
c4a530c5 13803 {
161a04f6 13804 USED_REX (REX_R);
c4a530c5
JB
13805 add = 8;
13806 }
cb712a9e 13807 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 13808 {
f16cd0d5 13809 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
13810 used_prefixes |= PREFIX_LOCK;
13811 add = 8;
13812 }
9b60702d
L
13813 else
13814 add = 0;
7967e09e 13815 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 13816 oappend (scratchbuf + intel_syntax);
252b5132
RH
13817}
13818
252b5132 13819static void
26ca5450 13820OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13821{
9b60702d 13822 int add;
161a04f6
L
13823 USED_REX (REX_R);
13824 if (rex & REX_R)
52b15da3 13825 add = 8;
9b60702d
L
13826 else
13827 add = 0;
d708bcba 13828 if (intel_syntax)
7967e09e 13829 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 13830 else
7967e09e 13831 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
13832 oappend (scratchbuf);
13833}
13834
252b5132 13835static void
26ca5450 13836OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13837{
7967e09e 13838 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 13839 oappend (scratchbuf + intel_syntax);
252b5132
RH
13840}
13841
13842static void
6f74c397 13843OP_R (int bytemode, int sizeflag)
252b5132 13844{
7967e09e 13845 if (modrm.mod == 3)
2da11e11
AM
13846 OP_E (bytemode, sizeflag);
13847 else
6608db57 13848 BadOp ();
252b5132
RH
13849}
13850
13851static void
26ca5450 13852OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13853{
b9733481
L
13854 int reg = modrm.reg;
13855 const char **names;
13856
041bd2e0
JH
13857 used_prefixes |= (prefixes & PREFIX_DATA);
13858 if (prefixes & PREFIX_DATA)
20f0a1fc 13859 {
b9733481 13860 names = names_xmm;
161a04f6
L
13861 USED_REX (REX_R);
13862 if (rex & REX_R)
b9733481 13863 reg += 8;
20f0a1fc 13864 }
041bd2e0 13865 else
b9733481
L
13866 names = names_mm;
13867 oappend (names[reg]);
252b5132
RH
13868}
13869
c608c12e 13870static void
c0f3af97 13871OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 13872{
b9733481
L
13873 int reg = modrm.reg;
13874 const char **names;
13875
161a04f6
L
13876 USED_REX (REX_R);
13877 if (rex & REX_R)
b9733481 13878 reg += 8;
539f890d
L
13879 if (need_vex
13880 && bytemode != xmm_mode
13881 && bytemode != scalar_mode)
c0f3af97
L
13882 {
13883 switch (vex.length)
13884 {
13885 case 128:
b9733481 13886 names = names_xmm;
c0f3af97
L
13887 break;
13888 case 256:
b9733481 13889 names = names_ymm;
c0f3af97
L
13890 break;
13891 default:
13892 abort ();
13893 }
13894 }
13895 else
b9733481
L
13896 names = names_xmm;
13897 oappend (names[reg]);
c608c12e
AM
13898}
13899
252b5132 13900static void
26ca5450 13901OP_EM (int bytemode, int sizeflag)
252b5132 13902{
b9733481
L
13903 int reg;
13904 const char **names;
13905
7967e09e 13906 if (modrm.mod != 3)
252b5132 13907 {
b6169b20
L
13908 if (intel_syntax
13909 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
13910 {
13911 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13912 used_prefixes |= (prefixes & PREFIX_DATA);
13913 }
252b5132
RH
13914 OP_E (bytemode, sizeflag);
13915 return;
13916 }
13917
b6169b20
L
13918 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
13919 swap_operand ();
13920
6608db57 13921 /* Skip mod/rm byte. */
4bba6815 13922 MODRM_CHECK;
252b5132 13923 codep++;
041bd2e0 13924 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13925 reg = modrm.rm;
041bd2e0 13926 if (prefixes & PREFIX_DATA)
20f0a1fc 13927 {
b9733481 13928 names = names_xmm;
161a04f6
L
13929 USED_REX (REX_B);
13930 if (rex & REX_B)
b9733481 13931 reg += 8;
20f0a1fc 13932 }
041bd2e0 13933 else
b9733481
L
13934 names = names_mm;
13935 oappend (names[reg]);
252b5132
RH
13936}
13937
246c51aa
L
13938/* cvt* are the only instructions in sse2 which have
13939 both SSE and MMX operands and also have 0x66 prefix
13940 in their opcode. 0x66 was originally used to differentiate
13941 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
13942 cvt* separately using OP_EMC and OP_MXC */
13943static void
13944OP_EMC (int bytemode, int sizeflag)
13945{
7967e09e 13946 if (modrm.mod != 3)
4d9567e0
MM
13947 {
13948 if (intel_syntax && bytemode == v_mode)
13949 {
13950 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13951 used_prefixes |= (prefixes & PREFIX_DATA);
13952 }
13953 OP_E (bytemode, sizeflag);
13954 return;
13955 }
246c51aa 13956
4d9567e0
MM
13957 /* Skip mod/rm byte. */
13958 MODRM_CHECK;
13959 codep++;
13960 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13961 oappend (names_mm[modrm.rm]);
4d9567e0
MM
13962}
13963
13964static void
13965OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13966{
13967 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13968 oappend (names_mm[modrm.reg]);
4d9567e0
MM
13969}
13970
c608c12e 13971static void
26ca5450 13972OP_EX (int bytemode, int sizeflag)
c608c12e 13973{
b9733481
L
13974 int reg;
13975 const char **names;
d6f574e0
L
13976
13977 /* Skip mod/rm byte. */
13978 MODRM_CHECK;
13979 codep++;
13980
7967e09e 13981 if (modrm.mod != 3)
c608c12e 13982 {
c1e679ec 13983 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
13984 return;
13985 }
d6f574e0 13986
b9733481 13987 reg = modrm.rm;
161a04f6
L
13988 USED_REX (REX_B);
13989 if (rex & REX_B)
b9733481 13990 reg += 8;
c608c12e 13991
b6169b20 13992 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
13993 && (bytemode == x_swap_mode
13994 || bytemode == d_swap_mode
539f890d
L
13995 || bytemode == d_scalar_swap_mode
13996 || bytemode == q_swap_mode
13997 || bytemode == q_scalar_swap_mode))
b6169b20
L
13998 swap_operand ();
13999
c0f3af97
L
14000 if (need_vex
14001 && bytemode != xmm_mode
539f890d
L
14002 && bytemode != xmmq_mode
14003 && bytemode != d_scalar_mode
14004 && bytemode != d_scalar_swap_mode
14005 && bytemode != q_scalar_mode
1c480963
L
14006 && bytemode != q_scalar_swap_mode
14007 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
14008 {
14009 switch (vex.length)
14010 {
14011 case 128:
b9733481 14012 names = names_xmm;
c0f3af97
L
14013 break;
14014 case 256:
b9733481 14015 names = names_ymm;
c0f3af97
L
14016 break;
14017 default:
14018 abort ();
14019 }
14020 }
14021 else
b9733481
L
14022 names = names_xmm;
14023 oappend (names[reg]);
c608c12e
AM
14024}
14025
252b5132 14026static void
26ca5450 14027OP_MS (int bytemode, int sizeflag)
252b5132 14028{
7967e09e 14029 if (modrm.mod == 3)
2da11e11
AM
14030 OP_EM (bytemode, sizeflag);
14031 else
6608db57 14032 BadOp ();
252b5132
RH
14033}
14034
992aaec9 14035static void
26ca5450 14036OP_XS (int bytemode, int sizeflag)
992aaec9 14037{
7967e09e 14038 if (modrm.mod == 3)
992aaec9
AM
14039 OP_EX (bytemode, sizeflag);
14040 else
6608db57 14041 BadOp ();
992aaec9
AM
14042}
14043
cc0ec051
AM
14044static void
14045OP_M (int bytemode, int sizeflag)
14046{
7967e09e 14047 if (modrm.mod == 3)
75413a22
L
14048 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14049 BadOp ();
cc0ec051
AM
14050 else
14051 OP_E (bytemode, sizeflag);
14052}
14053
14054static void
14055OP_0f07 (int bytemode, int sizeflag)
14056{
7967e09e 14057 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
14058 BadOp ();
14059 else
14060 OP_E (bytemode, sizeflag);
14061}
14062
46e883c5 14063/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 14064 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 14065
cc0ec051 14066static void
46e883c5 14067NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 14068{
8b38ad71
L
14069 if ((prefixes & PREFIX_DATA) != 0
14070 || (rex != 0
14071 && rex != 0x48
14072 && address_mode == mode_64bit))
46e883c5
L
14073 OP_REG (bytemode, sizeflag);
14074 else
14075 strcpy (obuf, "nop");
14076}
14077
14078static void
14079NOP_Fixup2 (int bytemode, int sizeflag)
14080{
8b38ad71
L
14081 if ((prefixes & PREFIX_DATA) != 0
14082 || (rex != 0
14083 && rex != 0x48
14084 && address_mode == mode_64bit))
46e883c5 14085 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
14086}
14087
84037f8c 14088static const char *const Suffix3DNow[] = {
252b5132
RH
14089/* 00 */ NULL, NULL, NULL, NULL,
14090/* 04 */ NULL, NULL, NULL, NULL,
14091/* 08 */ NULL, NULL, NULL, NULL,
9e525108 14092/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
14093/* 10 */ NULL, NULL, NULL, NULL,
14094/* 14 */ NULL, NULL, NULL, NULL,
14095/* 18 */ NULL, NULL, NULL, NULL,
9e525108 14096/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
14097/* 20 */ NULL, NULL, NULL, NULL,
14098/* 24 */ NULL, NULL, NULL, NULL,
14099/* 28 */ NULL, NULL, NULL, NULL,
14100/* 2C */ NULL, NULL, NULL, NULL,
14101/* 30 */ NULL, NULL, NULL, NULL,
14102/* 34 */ NULL, NULL, NULL, NULL,
14103/* 38 */ NULL, NULL, NULL, NULL,
14104/* 3C */ NULL, NULL, NULL, NULL,
14105/* 40 */ NULL, NULL, NULL, NULL,
14106/* 44 */ NULL, NULL, NULL, NULL,
14107/* 48 */ NULL, NULL, NULL, NULL,
14108/* 4C */ NULL, NULL, NULL, NULL,
14109/* 50 */ NULL, NULL, NULL, NULL,
14110/* 54 */ NULL, NULL, NULL, NULL,
14111/* 58 */ NULL, NULL, NULL, NULL,
14112/* 5C */ NULL, NULL, NULL, NULL,
14113/* 60 */ NULL, NULL, NULL, NULL,
14114/* 64 */ NULL, NULL, NULL, NULL,
14115/* 68 */ NULL, NULL, NULL, NULL,
14116/* 6C */ NULL, NULL, NULL, NULL,
14117/* 70 */ NULL, NULL, NULL, NULL,
14118/* 74 */ NULL, NULL, NULL, NULL,
14119/* 78 */ NULL, NULL, NULL, NULL,
14120/* 7C */ NULL, NULL, NULL, NULL,
14121/* 80 */ NULL, NULL, NULL, NULL,
14122/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
14123/* 88 */ NULL, NULL, "pfnacc", NULL,
14124/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
14125/* 90 */ "pfcmpge", NULL, NULL, NULL,
14126/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14127/* 98 */ NULL, NULL, "pfsub", NULL,
14128/* 9C */ NULL, NULL, "pfadd", NULL,
14129/* A0 */ "pfcmpgt", NULL, NULL, NULL,
14130/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14131/* A8 */ NULL, NULL, "pfsubr", NULL,
14132/* AC */ NULL, NULL, "pfacc", NULL,
14133/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 14134/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 14135/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
14136/* BC */ NULL, NULL, NULL, "pavgusb",
14137/* C0 */ NULL, NULL, NULL, NULL,
14138/* C4 */ NULL, NULL, NULL, NULL,
14139/* C8 */ NULL, NULL, NULL, NULL,
14140/* CC */ NULL, NULL, NULL, NULL,
14141/* D0 */ NULL, NULL, NULL, NULL,
14142/* D4 */ NULL, NULL, NULL, NULL,
14143/* D8 */ NULL, NULL, NULL, NULL,
14144/* DC */ NULL, NULL, NULL, NULL,
14145/* E0 */ NULL, NULL, NULL, NULL,
14146/* E4 */ NULL, NULL, NULL, NULL,
14147/* E8 */ NULL, NULL, NULL, NULL,
14148/* EC */ NULL, NULL, NULL, NULL,
14149/* F0 */ NULL, NULL, NULL, NULL,
14150/* F4 */ NULL, NULL, NULL, NULL,
14151/* F8 */ NULL, NULL, NULL, NULL,
14152/* FC */ NULL, NULL, NULL, NULL,
14153};
14154
14155static void
26ca5450 14156OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
14157{
14158 const char *mnemonic;
14159
14160 FETCH_DATA (the_info, codep + 1);
14161 /* AMD 3DNow! instructions are specified by an opcode suffix in the
14162 place where an 8-bit immediate would normally go. ie. the last
14163 byte of the instruction. */
ea397f5b 14164 obufp = mnemonicendp;
c608c12e 14165 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 14166 if (mnemonic)
2da11e11 14167 oappend (mnemonic);
252b5132
RH
14168 else
14169 {
14170 /* Since a variable sized modrm/sib chunk is between the start
14171 of the opcode (0x0f0f) and the opcode suffix, we need to do
14172 all the modrm processing first, and don't know until now that
14173 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
14174 op_out[0][0] = '\0';
14175 op_out[1][0] = '\0';
6608db57 14176 BadOp ();
252b5132 14177 }
ea397f5b 14178 mnemonicendp = obufp;
252b5132 14179}
c608c12e 14180
ea397f5b
L
14181static struct op simd_cmp_op[] =
14182{
14183 { STRING_COMMA_LEN ("eq") },
14184 { STRING_COMMA_LEN ("lt") },
14185 { STRING_COMMA_LEN ("le") },
14186 { STRING_COMMA_LEN ("unord") },
14187 { STRING_COMMA_LEN ("neq") },
14188 { STRING_COMMA_LEN ("nlt") },
14189 { STRING_COMMA_LEN ("nle") },
14190 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
14191};
14192
14193static void
ad19981d 14194CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
14195{
14196 unsigned int cmp_type;
14197
14198 FETCH_DATA (the_info, codep + 1);
14199 cmp_type = *codep++ & 0xff;
c0f3af97 14200 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 14201 {
ad19981d 14202 char suffix [3];
ea397f5b 14203 char *p = mnemonicendp - 2;
ad19981d
L
14204 suffix[0] = p[0];
14205 suffix[1] = p[1];
14206 suffix[2] = '\0';
ea397f5b
L
14207 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14208 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
14209 }
14210 else
14211 {
ad19981d
L
14212 /* We have a reserved extension byte. Output it directly. */
14213 scratchbuf[0] = '$';
14214 print_operand_value (scratchbuf + 1, 1, cmp_type);
14215 oappend (scratchbuf + intel_syntax);
14216 scratchbuf[0] = '\0';
c608c12e
AM
14217 }
14218}
14219
ca164297 14220static void
b844680a
L
14221OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14222 int sizeflag ATTRIBUTE_UNUSED)
14223{
14224 /* mwait %eax,%ecx */
14225 if (!intel_syntax)
14226 {
14227 const char **names = (address_mode == mode_64bit
14228 ? names64 : names32);
14229 strcpy (op_out[0], names[0]);
14230 strcpy (op_out[1], names[1]);
14231 two_source_ops = 1;
14232 }
14233 /* Skip mod/rm byte. */
14234 MODRM_CHECK;
14235 codep++;
14236}
14237
14238static void
14239OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14240 int sizeflag ATTRIBUTE_UNUSED)
ca164297 14241{
b844680a
L
14242 /* monitor %eax,%ecx,%edx" */
14243 if (!intel_syntax)
ca164297 14244 {
b844680a 14245 const char **op1_names;
cb712a9e
L
14246 const char **names = (address_mode == mode_64bit
14247 ? names64 : names32);
1d9f512f 14248
b844680a
L
14249 if (!(prefixes & PREFIX_ADDR))
14250 op1_names = (address_mode == mode_16bit
14251 ? names16 : names);
ca164297
L
14252 else
14253 {
b844680a 14254 /* Remove "addr16/addr32". */
f16cd0d5 14255 all_prefixes[last_addr_prefix] = 0;
b844680a
L
14256 op1_names = (address_mode != mode_32bit
14257 ? names32 : names16);
14258 used_prefixes |= PREFIX_ADDR;
ca164297 14259 }
b844680a
L
14260 strcpy (op_out[0], op1_names[0]);
14261 strcpy (op_out[1], names[1]);
14262 strcpy (op_out[2], names[2]);
14263 two_source_ops = 1;
ca164297 14264 }
b844680a
L
14265 /* Skip mod/rm byte. */
14266 MODRM_CHECK;
14267 codep++;
30123838
JB
14268}
14269
6608db57
KH
14270static void
14271BadOp (void)
2da11e11 14272{
6608db57
KH
14273 /* Throw away prefixes and 1st. opcode byte. */
14274 codep = insn_codep + 1;
2da11e11
AM
14275 oappend ("(bad)");
14276}
4cc91dba 14277
35c52694
L
14278static void
14279REP_Fixup (int bytemode, int sizeflag)
14280{
14281 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14282 lods and stos. */
35c52694 14283 if (prefixes & PREFIX_REPZ)
f16cd0d5 14284 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
14285
14286 switch (bytemode)
14287 {
14288 case al_reg:
14289 case eAX_reg:
14290 case indir_dx_reg:
14291 OP_IMREG (bytemode, sizeflag);
14292 break;
14293 case eDI_reg:
14294 OP_ESreg (bytemode, sizeflag);
14295 break;
14296 case eSI_reg:
14297 OP_DSreg (bytemode, sizeflag);
14298 break;
14299 default:
14300 abort ();
14301 break;
14302 }
14303}
f5804c90
L
14304
14305static void
14306CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14307{
161a04f6
L
14308 USED_REX (REX_W);
14309 if (rex & REX_W)
f5804c90
L
14310 {
14311 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
14312 char *p = mnemonicendp - 2;
14313 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 14314 bytemode = o_mode;
f5804c90
L
14315 }
14316 OP_M (bytemode, sizeflag);
14317}
42903f7f
L
14318
14319static void
14320XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14321{
b9733481
L
14322 const char **names;
14323
c0f3af97
L
14324 if (need_vex)
14325 {
14326 switch (vex.length)
14327 {
14328 case 128:
b9733481 14329 names = names_xmm;
c0f3af97
L
14330 break;
14331 case 256:
b9733481 14332 names = names_ymm;
c0f3af97
L
14333 break;
14334 default:
14335 abort ();
14336 }
14337 }
14338 else
b9733481
L
14339 names = names_xmm;
14340 oappend (names[reg]);
42903f7f 14341}
381d071f
L
14342
14343static void
14344CRC32_Fixup (int bytemode, int sizeflag)
14345{
14346 /* Add proper suffix to "crc32". */
ea397f5b 14347 char *p = mnemonicendp;
381d071f
L
14348
14349 switch (bytemode)
14350 {
14351 case b_mode:
20592a94 14352 if (intel_syntax)
ea397f5b 14353 goto skip;
20592a94 14354
381d071f
L
14355 *p++ = 'b';
14356 break;
14357 case v_mode:
20592a94 14358 if (intel_syntax)
ea397f5b 14359 goto skip;
20592a94 14360
381d071f
L
14361 USED_REX (REX_W);
14362 if (rex & REX_W)
14363 *p++ = 'q';
f16cd0d5
L
14364 else
14365 {
14366 if (sizeflag & DFLAG)
14367 *p++ = 'l';
14368 else
14369 *p++ = 'w';
14370 used_prefixes |= (prefixes & PREFIX_DATA);
14371 }
381d071f
L
14372 break;
14373 default:
14374 oappend (INTERNAL_DISASSEMBLER_ERROR);
14375 break;
14376 }
ea397f5b 14377 mnemonicendp = p;
381d071f
L
14378 *p = '\0';
14379
ea397f5b 14380skip:
381d071f
L
14381 if (modrm.mod == 3)
14382 {
14383 int add;
14384
14385 /* Skip mod/rm byte. */
14386 MODRM_CHECK;
14387 codep++;
14388
14389 USED_REX (REX_B);
14390 add = (rex & REX_B) ? 8 : 0;
14391 if (bytemode == b_mode)
14392 {
14393 USED_REX (0);
14394 if (rex)
14395 oappend (names8rex[modrm.rm + add]);
14396 else
14397 oappend (names8[modrm.rm + add]);
14398 }
14399 else
14400 {
14401 USED_REX (REX_W);
14402 if (rex & REX_W)
14403 oappend (names64[modrm.rm + add]);
14404 else if ((prefixes & PREFIX_DATA))
14405 oappend (names16[modrm.rm + add]);
14406 else
14407 oappend (names32[modrm.rm + add]);
14408 }
14409 }
14410 else
9344ff29 14411 OP_E (bytemode, sizeflag);
381d071f 14412}
85f10a01 14413
eacc9c89
L
14414static void
14415FXSAVE_Fixup (int bytemode, int sizeflag)
14416{
14417 /* Add proper suffix to "fxsave" and "fxrstor". */
14418 USED_REX (REX_W);
14419 if (rex & REX_W)
14420 {
14421 char *p = mnemonicendp;
14422 *p++ = '6';
14423 *p++ = '4';
14424 *p = '\0';
14425 mnemonicendp = p;
14426 }
14427 OP_M (bytemode, sizeflag);
14428}
14429
c0f3af97
L
14430/* Display the destination register operand for instructions with
14431 VEX. */
14432
14433static void
14434OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14435{
539f890d 14436 int reg;
b9733481
L
14437 const char **names;
14438
c0f3af97
L
14439 if (!need_vex)
14440 abort ();
14441
14442 if (!need_vex_reg)
14443 return;
14444
539f890d
L
14445 reg = vex.register_specifier;
14446 if (bytemode == vex_scalar_mode)
14447 {
14448 oappend (names_xmm[reg]);
14449 return;
14450 }
14451
c0f3af97
L
14452 switch (vex.length)
14453 {
14454 case 128:
14455 switch (bytemode)
14456 {
14457 case vex_mode:
14458 case vex128_mode:
14459 break;
14460 default:
14461 abort ();
14462 return;
14463 }
14464
b9733481 14465 names = names_xmm;
c0f3af97
L
14466 break;
14467 case 256:
14468 switch (bytemode)
14469 {
14470 case vex_mode:
14471 case vex256_mode:
14472 break;
14473 default:
14474 abort ();
14475 return;
14476 }
14477
b9733481 14478 names = names_ymm;
c0f3af97
L
14479 break;
14480 default:
14481 abort ();
14482 break;
14483 }
539f890d 14484 oappend (names[reg]);
c0f3af97
L
14485}
14486
922d8de8
DR
14487/* Get the VEX immediate byte without moving codep. */
14488
14489static unsigned char
ccc5981b 14490get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
14491{
14492 int bytes_before_imm = 0;
14493
922d8de8
DR
14494 if (modrm.mod != 3)
14495 {
14496 /* There are SIB/displacement bytes. */
14497 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
02e647f9 14498 {
922d8de8 14499 /* 32/64 bit address mode */
02e647f9 14500 int base = modrm.rm;
922d8de8
DR
14501
14502 /* Check SIB byte. */
02e647f9
SP
14503 if (base == 4)
14504 {
14505 FETCH_DATA (the_info, codep + 1);
14506 base = *codep & 7;
14507 /* When decoding the third source, don't increase
14508 bytes_before_imm as this has already been incremented
14509 by one in OP_E_memory while decoding the second
14510 source operand. */
ccc5981b
SP
14511 if (opnum == 0)
14512 bytes_before_imm++;
02e647f9
SP
14513 }
14514
14515 /* Don't increase bytes_before_imm when decoding the third source,
14516 it has already been incremented by OP_E_memory while decoding
14517 the second source operand. */
14518 if (opnum == 0)
14519 {
14520 switch (modrm.mod)
14521 {
14522 case 0:
14523 /* When modrm.rm == 5 or modrm.rm == 4 and base in
14524 SIB == 5, there is a 4 byte displacement. */
14525 if (base != 5)
14526 /* No displacement. */
14527 break;
14528 case 2:
14529 /* 4 byte displacement. */
14530 bytes_before_imm += 4;
14531 break;
14532 case 1:
14533 /* 1 byte displacement. */
14534 bytes_before_imm++;
14535 break;
14536 }
14537 }
14538 }
922d8de8 14539 else
02e647f9
SP
14540 {
14541 /* 16 bit address mode */
14542 /* Don't increase bytes_before_imm when decoding the third source,
14543 it has already been incremented by OP_E_memory while decoding
14544 the second source operand. */
14545 if (opnum == 0)
14546 {
14547 switch (modrm.mod)
14548 {
14549 case 0:
14550 /* When modrm.rm == 6, there is a 2 byte displacement. */
14551 if (modrm.rm != 6)
14552 /* No displacement. */
14553 break;
14554 case 2:
14555 /* 2 byte displacement. */
14556 bytes_before_imm += 2;
14557 break;
14558 case 1:
14559 /* 1 byte displacement: when decoding the third source,
14560 don't increase bytes_before_imm as this has already
14561 been incremented by one in OP_E_memory while decoding
14562 the second source operand. */
14563 if (opnum == 0)
14564 bytes_before_imm++;
ccc5981b 14565
02e647f9
SP
14566 break;
14567 }
922d8de8
DR
14568 }
14569 }
14570 }
14571
14572 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14573 return codep [bytes_before_imm];
14574}
14575
14576static void
14577OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14578{
b9733481
L
14579 const char **names;
14580
922d8de8
DR
14581 if (reg == -1 && modrm.mod != 3)
14582 {
14583 OP_E_memory (bytemode, sizeflag);
14584 return;
14585 }
14586 else
14587 {
14588 if (reg == -1)
14589 {
14590 reg = modrm.rm;
14591 USED_REX (REX_B);
14592 if (rex & REX_B)
14593 reg += 8;
14594 }
14595 else if (reg > 7 && address_mode != mode_64bit)
14596 BadOp ();
14597 }
14598
14599 switch (vex.length)
14600 {
14601 case 128:
b9733481 14602 names = names_xmm;
922d8de8
DR
14603 break;
14604 case 256:
b9733481 14605 names = names_ymm;
922d8de8
DR
14606 break;
14607 default:
14608 abort ();
14609 }
b9733481 14610 oappend (names[reg]);
922d8de8
DR
14611}
14612
a683cc34
SP
14613static void
14614OP_EX_VexImmW (int bytemode, int sizeflag)
14615{
14616 int reg = -1;
14617 static unsigned char vex_imm8;
14618
14619 if (vex_w_done == 0)
14620 {
14621 vex_w_done = 1;
14622
14623 /* Skip mod/rm byte. */
14624 MODRM_CHECK;
14625 codep++;
14626
14627 vex_imm8 = get_vex_imm8 (sizeflag, 0);
14628
14629 if (vex.w)
14630 reg = vex_imm8 >> 4;
14631
14632 OP_EX_VexReg (bytemode, sizeflag, reg);
14633 }
14634 else if (vex_w_done == 1)
14635 {
14636 vex_w_done = 2;
14637
14638 if (!vex.w)
14639 reg = vex_imm8 >> 4;
14640
14641 OP_EX_VexReg (bytemode, sizeflag, reg);
14642 }
14643 else
14644 {
14645 /* Output the imm8 directly. */
14646 scratchbuf[0] = '$';
14647 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14648 oappend (scratchbuf + intel_syntax);
14649 scratchbuf[0] = '\0';
14650 codep++;
14651 }
14652}
14653
5dd85c99
SP
14654static void
14655OP_Vex_2src (int bytemode, int sizeflag)
14656{
14657 if (modrm.mod == 3)
14658 {
b9733481 14659 int reg = modrm.rm;
5dd85c99 14660 USED_REX (REX_B);
b9733481
L
14661 if (rex & REX_B)
14662 reg += 8;
14663 oappend (names_xmm[reg]);
5dd85c99
SP
14664 }
14665 else
14666 {
14667 if (intel_syntax
14668 && (bytemode == v_mode || bytemode == v_swap_mode))
14669 {
14670 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14671 used_prefixes |= (prefixes & PREFIX_DATA);
14672 }
14673 OP_E (bytemode, sizeflag);
14674 }
14675}
14676
14677static void
14678OP_Vex_2src_1 (int bytemode, int sizeflag)
14679{
14680 if (modrm.mod == 3)
14681 {
14682 /* Skip mod/rm byte. */
14683 MODRM_CHECK;
14684 codep++;
14685 }
14686
14687 if (vex.w)
b9733481 14688 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14689 else
14690 OP_Vex_2src (bytemode, sizeflag);
14691}
14692
14693static void
14694OP_Vex_2src_2 (int bytemode, int sizeflag)
14695{
14696 if (vex.w)
14697 OP_Vex_2src (bytemode, sizeflag);
14698 else
b9733481 14699 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14700}
14701
922d8de8
DR
14702static void
14703OP_EX_VexW (int bytemode, int sizeflag)
14704{
14705 int reg = -1;
14706
14707 if (!vex_w_done)
14708 {
14709 vex_w_done = 1;
41effecb
SP
14710
14711 /* Skip mod/rm byte. */
14712 MODRM_CHECK;
14713 codep++;
14714
922d8de8 14715 if (vex.w)
ccc5981b 14716 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
14717 }
14718 else
14719 {
14720 if (!vex.w)
ccc5981b 14721 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
14722 }
14723
14724 OP_EX_VexReg (bytemode, sizeflag, reg);
14725}
14726
922d8de8
DR
14727static void
14728VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
14729 int sizeflag ATTRIBUTE_UNUSED)
14730{
14731 /* Skip the immediate byte and check for invalid bits. */
14732 FETCH_DATA (the_info, codep + 1);
14733 if (*codep++ & 0xf)
14734 BadOp ();
14735}
14736
c0f3af97
L
14737static void
14738OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14739{
14740 int reg;
b9733481
L
14741 const char **names;
14742
c0f3af97
L
14743 FETCH_DATA (the_info, codep + 1);
14744 reg = *codep++;
14745
14746 if (bytemode != x_mode)
14747 abort ();
14748
14749 if (reg & 0xf)
14750 BadOp ();
14751
14752 reg >>= 4;
dae39acc
L
14753 if (reg > 7 && address_mode != mode_64bit)
14754 BadOp ();
14755
c0f3af97
L
14756 switch (vex.length)
14757 {
14758 case 128:
b9733481 14759 names = names_xmm;
c0f3af97
L
14760 break;
14761 case 256:
b9733481 14762 names = names_ymm;
c0f3af97
L
14763 break;
14764 default:
14765 abort ();
14766 }
b9733481 14767 oappend (names[reg]);
c0f3af97
L
14768}
14769
922d8de8
DR
14770static void
14771OP_XMM_VexW (int bytemode, int sizeflag)
14772{
14773 /* Turn off the REX.W bit since it is used for swapping operands
14774 now. */
14775 rex &= ~REX_W;
14776 OP_XMM (bytemode, sizeflag);
14777}
14778
c0f3af97
L
14779static void
14780OP_EX_Vex (int bytemode, int sizeflag)
14781{
14782 if (modrm.mod != 3)
14783 {
14784 if (vex.register_specifier != 0)
14785 BadOp ();
14786 need_vex_reg = 0;
14787 }
14788 OP_EX (bytemode, sizeflag);
14789}
14790
14791static void
14792OP_XMM_Vex (int bytemode, int sizeflag)
14793{
14794 if (modrm.mod != 3)
14795 {
14796 if (vex.register_specifier != 0)
14797 BadOp ();
14798 need_vex_reg = 0;
14799 }
14800 OP_XMM (bytemode, sizeflag);
14801}
14802
14803static void
14804VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14805{
14806 switch (vex.length)
14807 {
14808 case 128:
ea397f5b 14809 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
14810 break;
14811 case 256:
ea397f5b 14812 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
14813 break;
14814 default:
14815 abort ();
14816 }
14817}
14818
ea397f5b
L
14819static struct op vex_cmp_op[] =
14820{
14821 { STRING_COMMA_LEN ("eq") },
14822 { STRING_COMMA_LEN ("lt") },
14823 { STRING_COMMA_LEN ("le") },
14824 { STRING_COMMA_LEN ("unord") },
14825 { STRING_COMMA_LEN ("neq") },
14826 { STRING_COMMA_LEN ("nlt") },
14827 { STRING_COMMA_LEN ("nle") },
14828 { STRING_COMMA_LEN ("ord") },
14829 { STRING_COMMA_LEN ("eq_uq") },
14830 { STRING_COMMA_LEN ("nge") },
14831 { STRING_COMMA_LEN ("ngt") },
14832 { STRING_COMMA_LEN ("false") },
14833 { STRING_COMMA_LEN ("neq_oq") },
14834 { STRING_COMMA_LEN ("ge") },
14835 { STRING_COMMA_LEN ("gt") },
14836 { STRING_COMMA_LEN ("true") },
14837 { STRING_COMMA_LEN ("eq_os") },
14838 { STRING_COMMA_LEN ("lt_oq") },
14839 { STRING_COMMA_LEN ("le_oq") },
14840 { STRING_COMMA_LEN ("unord_s") },
14841 { STRING_COMMA_LEN ("neq_us") },
14842 { STRING_COMMA_LEN ("nlt_uq") },
14843 { STRING_COMMA_LEN ("nle_uq") },
14844 { STRING_COMMA_LEN ("ord_s") },
14845 { STRING_COMMA_LEN ("eq_us") },
14846 { STRING_COMMA_LEN ("nge_uq") },
14847 { STRING_COMMA_LEN ("ngt_uq") },
14848 { STRING_COMMA_LEN ("false_os") },
14849 { STRING_COMMA_LEN ("neq_os") },
14850 { STRING_COMMA_LEN ("ge_oq") },
14851 { STRING_COMMA_LEN ("gt_oq") },
14852 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
14853};
14854
14855static void
14856VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14857{
14858 unsigned int cmp_type;
14859
14860 FETCH_DATA (the_info, codep + 1);
14861 cmp_type = *codep++ & 0xff;
14862 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
14863 {
14864 char suffix [3];
ea397f5b 14865 char *p = mnemonicendp - 2;
c0f3af97
L
14866 suffix[0] = p[0];
14867 suffix[1] = p[1];
14868 suffix[2] = '\0';
ea397f5b
L
14869 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
14870 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
14871 }
14872 else
14873 {
14874 /* We have a reserved extension byte. Output it directly. */
14875 scratchbuf[0] = '$';
14876 print_operand_value (scratchbuf + 1, 1, cmp_type);
14877 oappend (scratchbuf + intel_syntax);
14878 scratchbuf[0] = '\0';
14879 }
14880}
14881
ea397f5b
L
14882static const struct op pclmul_op[] =
14883{
14884 { STRING_COMMA_LEN ("lql") },
14885 { STRING_COMMA_LEN ("hql") },
14886 { STRING_COMMA_LEN ("lqh") },
14887 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
14888};
14889
14890static void
14891PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
14892 int sizeflag ATTRIBUTE_UNUSED)
14893{
14894 unsigned int pclmul_type;
14895
14896 FETCH_DATA (the_info, codep + 1);
14897 pclmul_type = *codep++ & 0xff;
14898 switch (pclmul_type)
14899 {
14900 case 0x10:
14901 pclmul_type = 2;
14902 break;
14903 case 0x11:
14904 pclmul_type = 3;
14905 break;
14906 default:
14907 break;
14908 }
14909 if (pclmul_type < ARRAY_SIZE (pclmul_op))
14910 {
14911 char suffix [4];
ea397f5b 14912 char *p = mnemonicendp - 3;
c0f3af97
L
14913 suffix[0] = p[0];
14914 suffix[1] = p[1];
14915 suffix[2] = p[2];
14916 suffix[3] = '\0';
ea397f5b
L
14917 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
14918 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
14919 }
14920 else
14921 {
14922 /* We have a reserved extension byte. Output it directly. */
14923 scratchbuf[0] = '$';
14924 print_operand_value (scratchbuf + 1, 1, pclmul_type);
14925 oappend (scratchbuf + intel_syntax);
14926 scratchbuf[0] = '\0';
14927 }
14928}
14929
f1f8f695
L
14930static void
14931MOVBE_Fixup (int bytemode, int sizeflag)
14932{
14933 /* Add proper suffix to "movbe". */
ea397f5b 14934 char *p = mnemonicendp;
f1f8f695
L
14935
14936 switch (bytemode)
14937 {
14938 case v_mode:
14939 if (intel_syntax)
ea397f5b 14940 goto skip;
f1f8f695
L
14941
14942 USED_REX (REX_W);
14943 if (sizeflag & SUFFIX_ALWAYS)
14944 {
14945 if (rex & REX_W)
14946 *p++ = 'q';
f1f8f695 14947 else
f16cd0d5
L
14948 {
14949 if (sizeflag & DFLAG)
14950 *p++ = 'l';
14951 else
14952 *p++ = 'w';
14953 used_prefixes |= (prefixes & PREFIX_DATA);
14954 }
f1f8f695 14955 }
f1f8f695
L
14956 break;
14957 default:
14958 oappend (INTERNAL_DISASSEMBLER_ERROR);
14959 break;
14960 }
ea397f5b 14961 mnemonicendp = p;
f1f8f695
L
14962 *p = '\0';
14963
ea397f5b 14964skip:
f1f8f695
L
14965 OP_M (bytemode, sizeflag);
14966}
f88c9eb0
SP
14967
14968static void
14969OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14970{
14971 int reg;
14972 const char **names;
14973
14974 /* Skip mod/rm byte. */
14975 MODRM_CHECK;
14976 codep++;
14977
14978 if (vex.w)
14979 names = names64;
14980 else if (vex.length == 256)
14981 names = names32;
14982 else
14983 names = names16;
14984
14985 reg = modrm.rm;
14986 USED_REX (REX_B);
14987 if (rex & REX_B)
14988 reg += 8;
14989
14990 oappend (names[reg]);
14991}
14992
14993static void
14994OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14995{
14996 const char **names;
14997
14998 if (vex.w)
14999 names = names64;
15000 else if (vex.length == 256)
15001 names = names32;
15002 else
15003 names = names16;
15004
15005 oappend (names[vex.register_specifier]);
15006}
15007
15008static void
15009OP_LWP_I (int bytemode ATTRIBUTE_UNUSED, int sizeflag)
15010{
15011 if (vex.w || vex.length == 256)
15012 OP_I (q_mode, sizeflag);
15013 else
15014 OP_I (w_mode, sizeflag);
15015}
15016
This page took 2.458168 seconds and 4 git commands to generate.