sync changelog with gcc, plus commit the following patch:
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
060d22b0 2 Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
c75ef631 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
0af1713e 4 Free Software Foundation, Inc.
252b5132 5
9b201bb5 6 This file is part of the GNU opcodes library.
20f0a1fc 7
9b201bb5 8 This library is free software; you can redistribute it and/or modify
20f0a1fc 9 it under the terms of the GNU General Public License as published by
9b201bb5
NC
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
20f0a1fc 12
9b201bb5
NC
13 It is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
20f0a1fc
NC
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
9b201bb5
NC
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
20f0a1fc
NC
23
24/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
25 July 1988
26 modified by John Hassey (hassey@dg-rtp.dg.com)
27 x86-64 support added by Jan Hubicka (jh@suse.cz)
28 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
29
30/* The main tables describing the instructions is essentially a copy
31 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
32 Programmers Manual. Usually, there is a capital letter, followed
33 by a small letter. The capital letter tell the addressing mode,
34 and the small letter tells about the operand size. Refer to
35 the Intel manual for details. */
252b5132 36
252b5132 37#include "sysdep.h"
dabbade6 38#include "dis-asm.h"
252b5132 39#include "opintl.h"
0b1cf022 40#include "opcode/i386.h"
85f10a01 41#include "libiberty.h"
252b5132
RH
42
43#include <setjmp.h>
44
26ca5450
AJ
45static int print_insn (bfd_vma, disassemble_info *);
46static void dofloat (int);
47static void OP_ST (int, int);
48static void OP_STi (int, int);
49static int putop (const char *, int);
50static void oappend (const char *);
51static void append_seg (void);
52static void OP_indirE (int, int);
53static void print_operand_value (char *, int, bfd_vma);
c0f3af97 54static void OP_E_register (int, int);
c1e679ec 55static void OP_E_memory (int, int);
5d669648 56static void print_displacement (char *, bfd_vma);
26ca5450
AJ
57static void OP_E (int, int);
58static void OP_G (int, int);
59static bfd_vma get64 (void);
60static bfd_signed_vma get32 (void);
61static bfd_signed_vma get32s (void);
62static int get16 (void);
63static void set_op (bfd_vma, int);
b844680a 64static void OP_Skip_MODRM (int, int);
26ca5450
AJ
65static void OP_REG (int, int);
66static void OP_IMREG (int, int);
67static void OP_I (int, int);
68static void OP_I64 (int, int);
69static void OP_sI (int, int);
70static void OP_J (int, int);
71static void OP_SEG (int, int);
72static void OP_DIR (int, int);
73static void OP_OFF (int, int);
74static void OP_OFF64 (int, int);
75static void ptr_reg (int, int);
76static void OP_ESreg (int, int);
77static void OP_DSreg (int, int);
78static void OP_C (int, int);
79static void OP_D (int, int);
80static void OP_T (int, int);
6f74c397 81static void OP_R (int, int);
26ca5450
AJ
82static void OP_MMX (int, int);
83static void OP_XMM (int, int);
84static void OP_EM (int, int);
85static void OP_EX (int, int);
4d9567e0
MM
86static void OP_EMC (int,int);
87static void OP_MXC (int,int);
26ca5450
AJ
88static void OP_MS (int, int);
89static void OP_XS (int, int);
cc0ec051 90static void OP_M (int, int);
c0f3af97
L
91static void OP_VEX (int, int);
92static void OP_EX_Vex (int, int);
922d8de8 93static void OP_EX_VexW (int, int);
a683cc34 94static void OP_EX_VexImmW (int, int);
c0f3af97 95static void OP_XMM_Vex (int, int);
922d8de8 96static void OP_XMM_VexW (int, int);
c0f3af97
L
97static void OP_REG_VexI4 (int, int);
98static void PCLMUL_Fixup (int, int);
922d8de8 99static void VEXI4_Fixup (int, int);
c0f3af97
L
100static void VZERO_Fixup (int, int);
101static void VCMP_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
f5804c90 111static void CMPXCHG8B_Fixup (int, int);
42903f7f 112static void XMM_Fixup (int, int);
381d071f 113static void CRC32_Fixup (int, int);
eacc9c89 114static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
115static void OP_LWPCB_E (int, int);
116static void OP_LWP_E (int, int);
5dd85c99
SP
117static void OP_Vex_2src_1 (int, int);
118static void OP_Vex_2src_2 (int, int);
c1e679ec 119
f1f8f695 120static void MOVBE_Fixup (int, int);
252b5132 121
6608db57 122struct dis_private {
252b5132
RH
123 /* Points to first byte not fetched. */
124 bfd_byte *max_fetched;
0b1cf022 125 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 126 bfd_vma insn_start;
e396998b 127 int orig_sizeflag;
252b5132
RH
128 jmp_buf bailout;
129};
130
cb712a9e
L
131enum address_mode
132{
133 mode_16bit,
134 mode_32bit,
135 mode_64bit
136};
137
138enum address_mode address_mode;
52b15da3 139
5076851f
ILT
140/* Flags for the prefixes for the current instruction. See below. */
141static int prefixes;
142
52b15da3
JH
143/* REX prefix the current instruction. See below. */
144static int rex;
145/* Bits of REX we've already used. */
146static int rex_used;
d869730d 147/* REX bits in original REX prefix ignored. */
c0f3af97 148static int rex_ignored;
52b15da3
JH
149/* Mark parts used in the REX prefix. When we are testing for
150 empty prefix (for 8bit register REX extension), just mask it
151 out. Otherwise test for REX bit is excuse for existence of REX
152 only in case value is nonzero. */
153#define USED_REX(value) \
154 { \
155 if (value) \
161a04f6
L
156 { \
157 if ((rex & value)) \
158 rex_used |= (value) | REX_OPCODE; \
159 } \
52b15da3 160 else \
161a04f6 161 rex_used |= REX_OPCODE; \
52b15da3
JH
162 }
163
7d421014
ILT
164/* Flags for prefixes which we somehow handled when printing the
165 current instruction. */
166static int used_prefixes;
167
5076851f
ILT
168/* Flags stored in PREFIXES. */
169#define PREFIX_REPZ 1
170#define PREFIX_REPNZ 2
171#define PREFIX_LOCK 4
172#define PREFIX_CS 8
173#define PREFIX_SS 0x10
174#define PREFIX_DS 0x20
175#define PREFIX_ES 0x40
176#define PREFIX_FS 0x80
177#define PREFIX_GS 0x100
178#define PREFIX_DATA 0x200
179#define PREFIX_ADDR 0x400
180#define PREFIX_FWAIT 0x800
181
252b5132
RH
182/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
183 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
184 on error. */
185#define FETCH_DATA(info, addr) \
6608db57 186 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
187 ? 1 : fetch_data ((info), (addr)))
188
189static int
26ca5450 190fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
191{
192 int status;
6608db57 193 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
194 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
195
0b1cf022 196 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
197 status = (*info->read_memory_func) (start,
198 priv->max_fetched,
199 addr - priv->max_fetched,
200 info);
201 else
202 status = -1;
252b5132
RH
203 if (status != 0)
204 {
7d421014 205 /* If we did manage to read at least one byte, then
db6eb5be
AM
206 print_insn_i386 will do something sensible. Otherwise, print
207 an error. We do that here because this is where we know
208 STATUS. */
7d421014 209 if (priv->max_fetched == priv->the_buffer)
5076851f 210 (*info->memory_error_func) (status, start, info);
252b5132
RH
211 longjmp (priv->bailout, 1);
212 }
213 else
214 priv->max_fetched = addr;
215 return 1;
216}
217
ce518a5f 218#define XX { NULL, 0 }
592d1631 219#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
220
221#define Eb { OP_E, b_mode }
b6169b20 222#define EbS { OP_E, b_swap_mode }
ce518a5f 223#define Ev { OP_E, v_mode }
b6169b20 224#define EvS { OP_E, v_swap_mode }
ce518a5f
L
225#define Ed { OP_E, d_mode }
226#define Edq { OP_E, dq_mode }
227#define Edqw { OP_E, dqw_mode }
42903f7f
L
228#define Edqb { OP_E, dqb_mode }
229#define Edqd { OP_E, dqd_mode }
09335d05 230#define Eq { OP_E, q_mode }
ce518a5f
L
231#define indirEv { OP_indirE, stack_v_mode }
232#define indirEp { OP_indirE, f_mode }
233#define stackEv { OP_E, stack_v_mode }
234#define Em { OP_E, m_mode }
235#define Ew { OP_E, w_mode }
236#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 237#define Ma { OP_M, a_mode }
b844680a 238#define Mb { OP_M, b_mode }
d9a5e5e5 239#define Md { OP_M, d_mode }
f1f8f695 240#define Mo { OP_M, o_mode }
ce518a5f
L
241#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
242#define Mq { OP_M, q_mode }
4ee52178 243#define Mx { OP_M, x_mode }
c0f3af97 244#define Mxmm { OP_M, xmm_mode }
ce518a5f
L
245#define Gb { OP_G, b_mode }
246#define Gv { OP_G, v_mode }
247#define Gd { OP_G, d_mode }
248#define Gdq { OP_G, dq_mode }
249#define Gm { OP_G, m_mode }
250#define Gw { OP_G, w_mode }
6f74c397
L
251#define Rd { OP_R, d_mode }
252#define Rm { OP_R, m_mode }
ce518a5f
L
253#define Ib { OP_I, b_mode }
254#define sIb { OP_sI, b_mode } /* sign extened byte */
255#define Iv { OP_I, v_mode }
256#define Iq { OP_I, q_mode }
257#define Iv64 { OP_I64, v_mode }
258#define Iw { OP_I, w_mode }
259#define I1 { OP_I, const_1_mode }
260#define Jb { OP_J, b_mode }
261#define Jv { OP_J, v_mode }
262#define Cm { OP_C, m_mode }
263#define Dm { OP_D, m_mode }
264#define Td { OP_T, d_mode }
b844680a 265#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
266
267#define RMeAX { OP_REG, eAX_reg }
268#define RMeBX { OP_REG, eBX_reg }
269#define RMeCX { OP_REG, eCX_reg }
270#define RMeDX { OP_REG, eDX_reg }
271#define RMeSP { OP_REG, eSP_reg }
272#define RMeBP { OP_REG, eBP_reg }
273#define RMeSI { OP_REG, eSI_reg }
274#define RMeDI { OP_REG, eDI_reg }
275#define RMrAX { OP_REG, rAX_reg }
276#define RMrBX { OP_REG, rBX_reg }
277#define RMrCX { OP_REG, rCX_reg }
278#define RMrDX { OP_REG, rDX_reg }
279#define RMrSP { OP_REG, rSP_reg }
280#define RMrBP { OP_REG, rBP_reg }
281#define RMrSI { OP_REG, rSI_reg }
282#define RMrDI { OP_REG, rDI_reg }
283#define RMAL { OP_REG, al_reg }
284#define RMAL { OP_REG, al_reg }
285#define RMCL { OP_REG, cl_reg }
286#define RMDL { OP_REG, dl_reg }
287#define RMBL { OP_REG, bl_reg }
288#define RMAH { OP_REG, ah_reg }
289#define RMCH { OP_REG, ch_reg }
290#define RMDH { OP_REG, dh_reg }
291#define RMBH { OP_REG, bh_reg }
292#define RMAX { OP_REG, ax_reg }
293#define RMDX { OP_REG, dx_reg }
294
295#define eAX { OP_IMREG, eAX_reg }
296#define eBX { OP_IMREG, eBX_reg }
297#define eCX { OP_IMREG, eCX_reg }
298#define eDX { OP_IMREG, eDX_reg }
299#define eSP { OP_IMREG, eSP_reg }
300#define eBP { OP_IMREG, eBP_reg }
301#define eSI { OP_IMREG, eSI_reg }
302#define eDI { OP_IMREG, eDI_reg }
303#define AL { OP_IMREG, al_reg }
304#define CL { OP_IMREG, cl_reg }
305#define DL { OP_IMREG, dl_reg }
306#define BL { OP_IMREG, bl_reg }
307#define AH { OP_IMREG, ah_reg }
308#define CH { OP_IMREG, ch_reg }
309#define DH { OP_IMREG, dh_reg }
310#define BH { OP_IMREG, bh_reg }
311#define AX { OP_IMREG, ax_reg }
312#define DX { OP_IMREG, dx_reg }
313#define zAX { OP_IMREG, z_mode_ax_reg }
314#define indirDX { OP_IMREG, indir_dx_reg }
315
316#define Sw { OP_SEG, w_mode }
317#define Sv { OP_SEG, v_mode }
318#define Ap { OP_DIR, 0 }
319#define Ob { OP_OFF64, b_mode }
320#define Ov { OP_OFF64, v_mode }
321#define Xb { OP_DSreg, eSI_reg }
322#define Xv { OP_DSreg, eSI_reg }
323#define Xz { OP_DSreg, eSI_reg }
324#define Yb { OP_ESreg, eDI_reg }
325#define Yv { OP_ESreg, eDI_reg }
326#define DSBX { OP_DSreg, eBX_reg }
327
328#define es { OP_REG, es_reg }
329#define ss { OP_REG, ss_reg }
330#define cs { OP_REG, cs_reg }
331#define ds { OP_REG, ds_reg }
332#define fs { OP_REG, fs_reg }
333#define gs { OP_REG, gs_reg }
334
335#define MX { OP_MMX, 0 }
336#define XM { OP_XMM, 0 }
539f890d 337#define XMScalar { OP_XMM, scalar_mode }
c0f3af97 338#define XMM { OP_XMM, xmm_mode }
ce518a5f 339#define EM { OP_EM, v_mode }
b6169b20 340#define EMS { OP_EM, v_swap_mode }
09a2c6cf 341#define EMd { OP_EM, d_mode }
14051056 342#define EMx { OP_EM, x_mode }
8976381e 343#define EXw { OP_EX, w_mode }
09a2c6cf 344#define EXd { OP_EX, d_mode }
539f890d 345#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 346#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 347#define EXq { OP_EX, q_mode }
539f890d
L
348#define EXqScalar { OP_EX, q_scalar_mode }
349#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 350#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 351#define EXx { OP_EX, x_mode }
b6169b20 352#define EXxS { OP_EX, x_swap_mode }
c0f3af97
L
353#define EXxmm { OP_EX, xmm_mode }
354#define EXxmmq { OP_EX, xmmq_mode }
355#define EXymmq { OP_EX, ymmq_mode }
0bfee649 356#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 357#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
ce518a5f
L
358#define MS { OP_MS, v_mode }
359#define XS { OP_XS, v_mode }
09335d05 360#define EMCq { OP_EMC, q_mode }
ce518a5f 361#define MXC { OP_MXC, 0 }
ce518a5f 362#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 363#define CMP { CMP_Fixup, 0 }
42903f7f 364#define XMM0 { XMM_Fixup, 0 }
eacc9c89 365#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
366#define Vex_2src_1 { OP_Vex_2src_1, 0 }
367#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 368
c0f3af97 369#define Vex { OP_VEX, vex_mode }
539f890d 370#define VexScalar { OP_VEX, vex_scalar_mode }
c0f3af97
L
371#define Vex128 { OP_VEX, vex128_mode }
372#define Vex256 { OP_VEX, vex256_mode }
922d8de8 373#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 374#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 375#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 376#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 377#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 378#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 379#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
380#define EXVexW { OP_EX_VexW, x_mode }
381#define EXdVexW { OP_EX_VexW, d_mode }
382#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 383#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 384#define XMVex { OP_XMM_Vex, 0 }
539f890d 385#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 386#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
387#define XMVexI4 { OP_REG_VexI4, x_mode }
388#define PCLMUL { PCLMUL_Fixup, 0 }
389#define VZERO { VZERO_Fixup, 0 }
390#define VCMP { VCMP_Fixup, 0 }
c0f3af97 391
35c52694 392/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
393#define Xbr { REP_Fixup, eSI_reg }
394#define Xvr { REP_Fixup, eSI_reg }
395#define Ybr { REP_Fixup, eDI_reg }
396#define Yvr { REP_Fixup, eDI_reg }
397#define Yzr { REP_Fixup, eDI_reg }
398#define indirDXr { REP_Fixup, indir_dx_reg }
399#define ALr { REP_Fixup, al_reg }
400#define eAXr { REP_Fixup, eAX_reg }
401
402#define cond_jump_flag { NULL, cond_jump_mode }
403#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 404
252b5132 405/* bits in sizeflag */
252b5132 406#define SUFFIX_ALWAYS 4
252b5132
RH
407#define AFLAG 2
408#define DFLAG 1
409
51e7da1b
L
410enum
411{
412 /* byte operand */
413 b_mode = 1,
414 /* byte operand with operand swapped */
3873ba12 415 b_swap_mode,
51e7da1b 416 /* operand size depends on prefixes */
3873ba12 417 v_mode,
51e7da1b 418 /* operand size depends on prefixes with operand swapped */
3873ba12 419 v_swap_mode,
51e7da1b 420 /* word operand */
3873ba12 421 w_mode,
51e7da1b 422 /* double word operand */
3873ba12 423 d_mode,
51e7da1b 424 /* double word operand with operand swapped */
3873ba12 425 d_swap_mode,
51e7da1b 426 /* quad word operand */
3873ba12 427 q_mode,
51e7da1b 428 /* quad word operand with operand swapped */
3873ba12 429 q_swap_mode,
51e7da1b 430 /* ten-byte operand */
3873ba12 431 t_mode,
51e7da1b 432 /* 16-byte XMM or 32-byte YMM operand */
3873ba12 433 x_mode,
51e7da1b 434 /* 16-byte XMM or 32-byte YMM operand with operand swapped */
3873ba12 435 x_swap_mode,
51e7da1b 436 /* 16-byte XMM operand */
3873ba12 437 xmm_mode,
51e7da1b 438 /* 16-byte XMM or quad word operand */
3873ba12 439 xmmq_mode,
51e7da1b 440 /* 32-byte YMM or quad word operand */
3873ba12 441 ymmq_mode,
51e7da1b 442 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 443 m_mode,
51e7da1b 444 /* pair of v_mode operands */
3873ba12
L
445 a_mode,
446 cond_jump_mode,
447 loop_jcxz_mode,
51e7da1b 448 /* operand size depends on REX prefixes. */
3873ba12 449 dq_mode,
51e7da1b 450 /* registers like dq_mode, memory like w_mode. */
3873ba12 451 dqw_mode,
51e7da1b 452 /* 4- or 6-byte pointer operand */
3873ba12
L
453 f_mode,
454 const_1_mode,
51e7da1b 455 /* v_mode for stack-related opcodes. */
3873ba12 456 stack_v_mode,
51e7da1b 457 /* non-quad operand size depends on prefixes */
3873ba12 458 z_mode,
51e7da1b 459 /* 16-byte operand */
3873ba12 460 o_mode,
51e7da1b 461 /* registers like dq_mode, memory like b_mode. */
3873ba12 462 dqb_mode,
51e7da1b 463 /* registers like dq_mode, memory like d_mode. */
3873ba12 464 dqd_mode,
51e7da1b 465 /* normal vex mode */
3873ba12 466 vex_mode,
51e7da1b 467 /* 128bit vex mode */
3873ba12 468 vex128_mode,
51e7da1b 469 /* 256bit vex mode */
3873ba12 470 vex256_mode,
51e7da1b 471 /* operand size depends on the VEX.W bit. */
3873ba12 472 vex_w_dq_mode,
d55ee72f 473
539f890d
L
474 /* scalar, ignore vector length. */
475 scalar_mode,
476 /* like d_mode, ignore vector length. */
477 d_scalar_mode,
478 /* like d_swap_mode, ignore vector length. */
479 d_scalar_swap_mode,
480 /* like q_mode, ignore vector length. */
481 q_scalar_mode,
482 /* like q_swap_mode, ignore vector length. */
483 q_scalar_swap_mode,
484 /* like vex_mode, ignore vector length. */
485 vex_scalar_mode,
1c480963
L
486 /* like vex_w_dq_mode, ignore vector length. */
487 vex_scalar_w_dq_mode,
539f890d 488
3873ba12
L
489 es_reg,
490 cs_reg,
491 ss_reg,
492 ds_reg,
493 fs_reg,
494 gs_reg,
d55ee72f 495
3873ba12
L
496 eAX_reg,
497 eCX_reg,
498 eDX_reg,
499 eBX_reg,
500 eSP_reg,
501 eBP_reg,
502 eSI_reg,
503 eDI_reg,
d55ee72f 504
3873ba12
L
505 al_reg,
506 cl_reg,
507 dl_reg,
508 bl_reg,
509 ah_reg,
510 ch_reg,
511 dh_reg,
512 bh_reg,
d55ee72f 513
3873ba12
L
514 ax_reg,
515 cx_reg,
516 dx_reg,
517 bx_reg,
518 sp_reg,
519 bp_reg,
520 si_reg,
521 di_reg,
d55ee72f 522
3873ba12
L
523 rAX_reg,
524 rCX_reg,
525 rDX_reg,
526 rBX_reg,
527 rSP_reg,
528 rBP_reg,
529 rSI_reg,
530 rDI_reg,
d55ee72f 531
3873ba12
L
532 z_mode_ax_reg,
533 indir_dx_reg
51e7da1b 534};
252b5132 535
51e7da1b
L
536enum
537{
538 FLOATCODE = 1,
3873ba12
L
539 USE_REG_TABLE,
540 USE_MOD_TABLE,
541 USE_RM_TABLE,
542 USE_PREFIX_TABLE,
543 USE_X86_64_TABLE,
544 USE_3BYTE_TABLE,
f88c9eb0 545 USE_XOP_8F_TABLE,
3873ba12
L
546 USE_VEX_C4_TABLE,
547 USE_VEX_C5_TABLE,
9e30b8e0
L
548 USE_VEX_LEN_TABLE,
549 USE_VEX_W_TABLE
51e7da1b 550};
6439fc28 551
1ceb70f8 552#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 553
4e7d34a6 554#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
555#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
556#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
557#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
558#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
559#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
560#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 561#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
562#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
563#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
564#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 565#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
1ceb70f8 566
51e7da1b
L
567enum
568{
569 REG_80 = 0,
3873ba12
L
570 REG_81,
571 REG_82,
572 REG_8F,
573 REG_C0,
574 REG_C1,
575 REG_C6,
576 REG_C7,
577 REG_D0,
578 REG_D1,
579 REG_D2,
580 REG_D3,
581 REG_F6,
582 REG_F7,
583 REG_FE,
584 REG_FF,
585 REG_0F00,
586 REG_0F01,
587 REG_0F0D,
588 REG_0F18,
589 REG_0F71,
590 REG_0F72,
591 REG_0F73,
592 REG_0FA6,
593 REG_0FA7,
594 REG_0FAE,
595 REG_0FBA,
596 REG_0FC7,
597 REG_VEX_71,
598 REG_VEX_72,
599 REG_VEX_73,
f88c9eb0
SP
600 REG_VEX_AE,
601 REG_XOP_LWPCB,
602 REG_XOP_LWP
51e7da1b 603};
1ceb70f8 604
51e7da1b
L
605enum
606{
607 MOD_8D = 0,
3873ba12
L
608 MOD_0F01_REG_0,
609 MOD_0F01_REG_1,
610 MOD_0F01_REG_2,
611 MOD_0F01_REG_3,
612 MOD_0F01_REG_7,
613 MOD_0F12_PREFIX_0,
614 MOD_0F13,
615 MOD_0F16_PREFIX_0,
616 MOD_0F17,
617 MOD_0F18_REG_0,
618 MOD_0F18_REG_1,
619 MOD_0F18_REG_2,
620 MOD_0F18_REG_3,
621 MOD_0F20,
622 MOD_0F21,
623 MOD_0F22,
624 MOD_0F23,
625 MOD_0F24,
626 MOD_0F26,
627 MOD_0F2B_PREFIX_0,
628 MOD_0F2B_PREFIX_1,
629 MOD_0F2B_PREFIX_2,
630 MOD_0F2B_PREFIX_3,
631 MOD_0F51,
632 MOD_0F71_REG_2,
633 MOD_0F71_REG_4,
634 MOD_0F71_REG_6,
635 MOD_0F72_REG_2,
636 MOD_0F72_REG_4,
637 MOD_0F72_REG_6,
638 MOD_0F73_REG_2,
639 MOD_0F73_REG_3,
640 MOD_0F73_REG_6,
641 MOD_0F73_REG_7,
642 MOD_0FAE_REG_0,
643 MOD_0FAE_REG_1,
644 MOD_0FAE_REG_2,
645 MOD_0FAE_REG_3,
646 MOD_0FAE_REG_4,
647 MOD_0FAE_REG_5,
648 MOD_0FAE_REG_6,
649 MOD_0FAE_REG_7,
650 MOD_0FB2,
651 MOD_0FB4,
652 MOD_0FB5,
653 MOD_0FC7_REG_6,
654 MOD_0FC7_REG_7,
655 MOD_0FD7,
656 MOD_0FE7_PREFIX_2,
657 MOD_0FF0_PREFIX_3,
658 MOD_0F382A_PREFIX_2,
659 MOD_62_32BIT,
660 MOD_C4_32BIT,
661 MOD_C5_32BIT,
662 MOD_VEX_12_PREFIX_0,
663 MOD_VEX_13,
664 MOD_VEX_16_PREFIX_0,
665 MOD_VEX_17,
666 MOD_VEX_2B,
976f1fde 667 MOD_VEX_50,
3873ba12
L
668 MOD_VEX_71_REG_2,
669 MOD_VEX_71_REG_4,
670 MOD_VEX_71_REG_6,
671 MOD_VEX_72_REG_2,
672 MOD_VEX_72_REG_4,
673 MOD_VEX_72_REG_6,
674 MOD_VEX_73_REG_2,
675 MOD_VEX_73_REG_3,
676 MOD_VEX_73_REG_6,
677 MOD_VEX_73_REG_7,
678 MOD_VEX_AE_REG_2,
679 MOD_VEX_AE_REG_3,
680 MOD_VEX_D7_PREFIX_2,
681 MOD_VEX_E7_PREFIX_2,
682 MOD_VEX_F0_PREFIX_3,
683 MOD_VEX_3818_PREFIX_2,
684 MOD_VEX_3819_PREFIX_2,
685 MOD_VEX_381A_PREFIX_2,
686 MOD_VEX_382A_PREFIX_2,
687 MOD_VEX_382C_PREFIX_2,
688 MOD_VEX_382D_PREFIX_2,
689 MOD_VEX_382E_PREFIX_2,
690 MOD_VEX_382F_PREFIX_2
51e7da1b 691};
1ceb70f8 692
51e7da1b
L
693enum
694{
695 RM_0F01_REG_0 = 0,
3873ba12
L
696 RM_0F01_REG_1,
697 RM_0F01_REG_2,
698 RM_0F01_REG_3,
699 RM_0F01_REG_7,
700 RM_0FAE_REG_5,
701 RM_0FAE_REG_6,
702 RM_0FAE_REG_7
51e7da1b 703};
1ceb70f8 704
51e7da1b
L
705enum
706{
707 PREFIX_90 = 0,
3873ba12
L
708 PREFIX_0F10,
709 PREFIX_0F11,
710 PREFIX_0F12,
711 PREFIX_0F16,
712 PREFIX_0F2A,
713 PREFIX_0F2B,
714 PREFIX_0F2C,
715 PREFIX_0F2D,
716 PREFIX_0F2E,
717 PREFIX_0F2F,
718 PREFIX_0F51,
719 PREFIX_0F52,
720 PREFIX_0F53,
721 PREFIX_0F58,
722 PREFIX_0F59,
723 PREFIX_0F5A,
724 PREFIX_0F5B,
725 PREFIX_0F5C,
726 PREFIX_0F5D,
727 PREFIX_0F5E,
728 PREFIX_0F5F,
729 PREFIX_0F60,
730 PREFIX_0F61,
731 PREFIX_0F62,
732 PREFIX_0F6C,
733 PREFIX_0F6D,
734 PREFIX_0F6F,
735 PREFIX_0F70,
736 PREFIX_0F73_REG_3,
737 PREFIX_0F73_REG_7,
738 PREFIX_0F78,
739 PREFIX_0F79,
740 PREFIX_0F7C,
741 PREFIX_0F7D,
742 PREFIX_0F7E,
743 PREFIX_0F7F,
744 PREFIX_0FB8,
745 PREFIX_0FBD,
746 PREFIX_0FC2,
747 PREFIX_0FC3,
748 PREFIX_0FC7_REG_6,
749 PREFIX_0FD0,
750 PREFIX_0FD6,
751 PREFIX_0FE6,
752 PREFIX_0FE7,
753 PREFIX_0FF0,
754 PREFIX_0FF7,
755 PREFIX_0F3810,
756 PREFIX_0F3814,
757 PREFIX_0F3815,
758 PREFIX_0F3817,
759 PREFIX_0F3820,
760 PREFIX_0F3821,
761 PREFIX_0F3822,
762 PREFIX_0F3823,
763 PREFIX_0F3824,
764 PREFIX_0F3825,
765 PREFIX_0F3828,
766 PREFIX_0F3829,
767 PREFIX_0F382A,
768 PREFIX_0F382B,
769 PREFIX_0F3830,
770 PREFIX_0F3831,
771 PREFIX_0F3832,
772 PREFIX_0F3833,
773 PREFIX_0F3834,
774 PREFIX_0F3835,
775 PREFIX_0F3837,
776 PREFIX_0F3838,
777 PREFIX_0F3839,
778 PREFIX_0F383A,
779 PREFIX_0F383B,
780 PREFIX_0F383C,
781 PREFIX_0F383D,
782 PREFIX_0F383E,
783 PREFIX_0F383F,
784 PREFIX_0F3840,
785 PREFIX_0F3841,
786 PREFIX_0F3880,
787 PREFIX_0F3881,
788 PREFIX_0F38DB,
789 PREFIX_0F38DC,
790 PREFIX_0F38DD,
791 PREFIX_0F38DE,
792 PREFIX_0F38DF,
793 PREFIX_0F38F0,
794 PREFIX_0F38F1,
795 PREFIX_0F3A08,
796 PREFIX_0F3A09,
797 PREFIX_0F3A0A,
798 PREFIX_0F3A0B,
799 PREFIX_0F3A0C,
800 PREFIX_0F3A0D,
801 PREFIX_0F3A0E,
802 PREFIX_0F3A14,
803 PREFIX_0F3A15,
804 PREFIX_0F3A16,
805 PREFIX_0F3A17,
806 PREFIX_0F3A20,
807 PREFIX_0F3A21,
808 PREFIX_0F3A22,
809 PREFIX_0F3A40,
810 PREFIX_0F3A41,
811 PREFIX_0F3A42,
812 PREFIX_0F3A44,
813 PREFIX_0F3A60,
814 PREFIX_0F3A61,
815 PREFIX_0F3A62,
816 PREFIX_0F3A63,
817 PREFIX_0F3ADF,
818 PREFIX_VEX_10,
819 PREFIX_VEX_11,
820 PREFIX_VEX_12,
821 PREFIX_VEX_16,
822 PREFIX_VEX_2A,
823 PREFIX_VEX_2C,
824 PREFIX_VEX_2D,
825 PREFIX_VEX_2E,
826 PREFIX_VEX_2F,
827 PREFIX_VEX_51,
828 PREFIX_VEX_52,
829 PREFIX_VEX_53,
830 PREFIX_VEX_58,
831 PREFIX_VEX_59,
832 PREFIX_VEX_5A,
833 PREFIX_VEX_5B,
834 PREFIX_VEX_5C,
835 PREFIX_VEX_5D,
836 PREFIX_VEX_5E,
837 PREFIX_VEX_5F,
838 PREFIX_VEX_60,
839 PREFIX_VEX_61,
840 PREFIX_VEX_62,
841 PREFIX_VEX_63,
842 PREFIX_VEX_64,
843 PREFIX_VEX_65,
844 PREFIX_VEX_66,
845 PREFIX_VEX_67,
846 PREFIX_VEX_68,
847 PREFIX_VEX_69,
848 PREFIX_VEX_6A,
849 PREFIX_VEX_6B,
850 PREFIX_VEX_6C,
851 PREFIX_VEX_6D,
852 PREFIX_VEX_6E,
853 PREFIX_VEX_6F,
854 PREFIX_VEX_70,
855 PREFIX_VEX_71_REG_2,
856 PREFIX_VEX_71_REG_4,
857 PREFIX_VEX_71_REG_6,
858 PREFIX_VEX_72_REG_2,
859 PREFIX_VEX_72_REG_4,
860 PREFIX_VEX_72_REG_6,
861 PREFIX_VEX_73_REG_2,
862 PREFIX_VEX_73_REG_3,
863 PREFIX_VEX_73_REG_6,
864 PREFIX_VEX_73_REG_7,
865 PREFIX_VEX_74,
866 PREFIX_VEX_75,
867 PREFIX_VEX_76,
868 PREFIX_VEX_77,
869 PREFIX_VEX_7C,
870 PREFIX_VEX_7D,
871 PREFIX_VEX_7E,
872 PREFIX_VEX_7F,
873 PREFIX_VEX_C2,
874 PREFIX_VEX_C4,
875 PREFIX_VEX_C5,
876 PREFIX_VEX_D0,
877 PREFIX_VEX_D1,
878 PREFIX_VEX_D2,
879 PREFIX_VEX_D3,
880 PREFIX_VEX_D4,
881 PREFIX_VEX_D5,
882 PREFIX_VEX_D6,
883 PREFIX_VEX_D7,
884 PREFIX_VEX_D8,
885 PREFIX_VEX_D9,
886 PREFIX_VEX_DA,
887 PREFIX_VEX_DB,
888 PREFIX_VEX_DC,
889 PREFIX_VEX_DD,
890 PREFIX_VEX_DE,
891 PREFIX_VEX_DF,
892 PREFIX_VEX_E0,
893 PREFIX_VEX_E1,
894 PREFIX_VEX_E2,
895 PREFIX_VEX_E3,
896 PREFIX_VEX_E4,
897 PREFIX_VEX_E5,
898 PREFIX_VEX_E6,
899 PREFIX_VEX_E7,
900 PREFIX_VEX_E8,
901 PREFIX_VEX_E9,
902 PREFIX_VEX_EA,
903 PREFIX_VEX_EB,
904 PREFIX_VEX_EC,
905 PREFIX_VEX_ED,
906 PREFIX_VEX_EE,
907 PREFIX_VEX_EF,
908 PREFIX_VEX_F0,
909 PREFIX_VEX_F1,
910 PREFIX_VEX_F2,
911 PREFIX_VEX_F3,
912 PREFIX_VEX_F4,
913 PREFIX_VEX_F5,
914 PREFIX_VEX_F6,
915 PREFIX_VEX_F7,
916 PREFIX_VEX_F8,
917 PREFIX_VEX_F9,
918 PREFIX_VEX_FA,
919 PREFIX_VEX_FB,
920 PREFIX_VEX_FC,
921 PREFIX_VEX_FD,
922 PREFIX_VEX_FE,
923 PREFIX_VEX_3800,
924 PREFIX_VEX_3801,
925 PREFIX_VEX_3802,
926 PREFIX_VEX_3803,
927 PREFIX_VEX_3804,
928 PREFIX_VEX_3805,
929 PREFIX_VEX_3806,
930 PREFIX_VEX_3807,
931 PREFIX_VEX_3808,
932 PREFIX_VEX_3809,
933 PREFIX_VEX_380A,
934 PREFIX_VEX_380B,
935 PREFIX_VEX_380C,
936 PREFIX_VEX_380D,
937 PREFIX_VEX_380E,
938 PREFIX_VEX_380F,
939 PREFIX_VEX_3817,
940 PREFIX_VEX_3818,
941 PREFIX_VEX_3819,
942 PREFIX_VEX_381A,
943 PREFIX_VEX_381C,
944 PREFIX_VEX_381D,
945 PREFIX_VEX_381E,
946 PREFIX_VEX_3820,
947 PREFIX_VEX_3821,
948 PREFIX_VEX_3822,
949 PREFIX_VEX_3823,
950 PREFIX_VEX_3824,
951 PREFIX_VEX_3825,
952 PREFIX_VEX_3828,
953 PREFIX_VEX_3829,
954 PREFIX_VEX_382A,
955 PREFIX_VEX_382B,
956 PREFIX_VEX_382C,
957 PREFIX_VEX_382D,
958 PREFIX_VEX_382E,
959 PREFIX_VEX_382F,
960 PREFIX_VEX_3830,
961 PREFIX_VEX_3831,
962 PREFIX_VEX_3832,
963 PREFIX_VEX_3833,
964 PREFIX_VEX_3834,
965 PREFIX_VEX_3835,
966 PREFIX_VEX_3837,
967 PREFIX_VEX_3838,
968 PREFIX_VEX_3839,
969 PREFIX_VEX_383A,
970 PREFIX_VEX_383B,
971 PREFIX_VEX_383C,
972 PREFIX_VEX_383D,
973 PREFIX_VEX_383E,
974 PREFIX_VEX_383F,
975 PREFIX_VEX_3840,
976 PREFIX_VEX_3841,
977 PREFIX_VEX_3896,
978 PREFIX_VEX_3897,
979 PREFIX_VEX_3898,
980 PREFIX_VEX_3899,
981 PREFIX_VEX_389A,
982 PREFIX_VEX_389B,
983 PREFIX_VEX_389C,
984 PREFIX_VEX_389D,
985 PREFIX_VEX_389E,
986 PREFIX_VEX_389F,
987 PREFIX_VEX_38A6,
988 PREFIX_VEX_38A7,
989 PREFIX_VEX_38A8,
990 PREFIX_VEX_38A9,
991 PREFIX_VEX_38AA,
992 PREFIX_VEX_38AB,
993 PREFIX_VEX_38AC,
994 PREFIX_VEX_38AD,
995 PREFIX_VEX_38AE,
996 PREFIX_VEX_38AF,
997 PREFIX_VEX_38B6,
998 PREFIX_VEX_38B7,
999 PREFIX_VEX_38B8,
1000 PREFIX_VEX_38B9,
1001 PREFIX_VEX_38BA,
1002 PREFIX_VEX_38BB,
1003 PREFIX_VEX_38BC,
1004 PREFIX_VEX_38BD,
1005 PREFIX_VEX_38BE,
1006 PREFIX_VEX_38BF,
1007 PREFIX_VEX_38DB,
1008 PREFIX_VEX_38DC,
1009 PREFIX_VEX_38DD,
1010 PREFIX_VEX_38DE,
1011 PREFIX_VEX_38DF,
1012 PREFIX_VEX_3A04,
1013 PREFIX_VEX_3A05,
1014 PREFIX_VEX_3A06,
1015 PREFIX_VEX_3A08,
1016 PREFIX_VEX_3A09,
1017 PREFIX_VEX_3A0A,
1018 PREFIX_VEX_3A0B,
1019 PREFIX_VEX_3A0C,
1020 PREFIX_VEX_3A0D,
1021 PREFIX_VEX_3A0E,
1022 PREFIX_VEX_3A0F,
1023 PREFIX_VEX_3A14,
1024 PREFIX_VEX_3A15,
1025 PREFIX_VEX_3A16,
1026 PREFIX_VEX_3A17,
1027 PREFIX_VEX_3A18,
1028 PREFIX_VEX_3A19,
1029 PREFIX_VEX_3A20,
1030 PREFIX_VEX_3A21,
1031 PREFIX_VEX_3A22,
1032 PREFIX_VEX_3A40,
1033 PREFIX_VEX_3A41,
1034 PREFIX_VEX_3A42,
1035 PREFIX_VEX_3A44,
a683cc34
SP
1036 PREFIX_VEX_3A48,
1037 PREFIX_VEX_3A49,
3873ba12
L
1038 PREFIX_VEX_3A4A,
1039 PREFIX_VEX_3A4B,
1040 PREFIX_VEX_3A4C,
1041 PREFIX_VEX_3A5C,
1042 PREFIX_VEX_3A5D,
1043 PREFIX_VEX_3A5E,
1044 PREFIX_VEX_3A5F,
1045 PREFIX_VEX_3A60,
1046 PREFIX_VEX_3A61,
1047 PREFIX_VEX_3A62,
1048 PREFIX_VEX_3A63,
1049 PREFIX_VEX_3A68,
1050 PREFIX_VEX_3A69,
1051 PREFIX_VEX_3A6A,
1052 PREFIX_VEX_3A6B,
1053 PREFIX_VEX_3A6C,
1054 PREFIX_VEX_3A6D,
1055 PREFIX_VEX_3A6E,
1056 PREFIX_VEX_3A6F,
1057 PREFIX_VEX_3A78,
1058 PREFIX_VEX_3A79,
1059 PREFIX_VEX_3A7A,
1060 PREFIX_VEX_3A7B,
1061 PREFIX_VEX_3A7C,
1062 PREFIX_VEX_3A7D,
1063 PREFIX_VEX_3A7E,
1064 PREFIX_VEX_3A7F,
1065 PREFIX_VEX_3ADF
51e7da1b 1066};
4e7d34a6 1067
51e7da1b
L
1068enum
1069{
1070 X86_64_06 = 0,
3873ba12
L
1071 X86_64_07,
1072 X86_64_0D,
1073 X86_64_16,
1074 X86_64_17,
1075 X86_64_1E,
1076 X86_64_1F,
1077 X86_64_27,
1078 X86_64_2F,
1079 X86_64_37,
1080 X86_64_3F,
1081 X86_64_60,
1082 X86_64_61,
1083 X86_64_62,
1084 X86_64_63,
1085 X86_64_6D,
1086 X86_64_6F,
1087 X86_64_9A,
1088 X86_64_C4,
1089 X86_64_C5,
1090 X86_64_CE,
1091 X86_64_D4,
1092 X86_64_D5,
1093 X86_64_EA,
1094 X86_64_0F01_REG_0,
1095 X86_64_0F01_REG_1,
1096 X86_64_0F01_REG_2,
1097 X86_64_0F01_REG_3
51e7da1b 1098};
4e7d34a6 1099
51e7da1b
L
1100enum
1101{
1102 THREE_BYTE_0F38 = 0,
3873ba12
L
1103 THREE_BYTE_0F3A,
1104 THREE_BYTE_0F7A
51e7da1b 1105};
4e7d34a6 1106
f88c9eb0
SP
1107enum
1108{
5dd85c99
SP
1109 XOP_08 = 0,
1110 XOP_09,
f88c9eb0
SP
1111 XOP_0A
1112};
1113
51e7da1b
L
1114enum
1115{
1116 VEX_0F = 0,
3873ba12
L
1117 VEX_0F38,
1118 VEX_0F3A
51e7da1b 1119};
c0f3af97 1120
51e7da1b
L
1121enum
1122{
1123 VEX_LEN_10_P_1 = 0,
3873ba12
L
1124 VEX_LEN_10_P_3,
1125 VEX_LEN_11_P_1,
1126 VEX_LEN_11_P_3,
1127 VEX_LEN_12_P_0_M_0,
1128 VEX_LEN_12_P_0_M_1,
1129 VEX_LEN_12_P_2,
1130 VEX_LEN_13_M_0,
1131 VEX_LEN_16_P_0_M_0,
1132 VEX_LEN_16_P_0_M_1,
1133 VEX_LEN_16_P_2,
1134 VEX_LEN_17_M_0,
1135 VEX_LEN_2A_P_1,
1136 VEX_LEN_2A_P_3,
1137 VEX_LEN_2C_P_1,
1138 VEX_LEN_2C_P_3,
1139 VEX_LEN_2D_P_1,
1140 VEX_LEN_2D_P_3,
1141 VEX_LEN_2E_P_0,
1142 VEX_LEN_2E_P_2,
1143 VEX_LEN_2F_P_0,
1144 VEX_LEN_2F_P_2,
1145 VEX_LEN_51_P_1,
1146 VEX_LEN_51_P_3,
1147 VEX_LEN_52_P_1,
1148 VEX_LEN_53_P_1,
1149 VEX_LEN_58_P_1,
1150 VEX_LEN_58_P_3,
1151 VEX_LEN_59_P_1,
1152 VEX_LEN_59_P_3,
1153 VEX_LEN_5A_P_1,
1154 VEX_LEN_5A_P_3,
1155 VEX_LEN_5C_P_1,
1156 VEX_LEN_5C_P_3,
1157 VEX_LEN_5D_P_1,
1158 VEX_LEN_5D_P_3,
1159 VEX_LEN_5E_P_1,
1160 VEX_LEN_5E_P_3,
1161 VEX_LEN_5F_P_1,
1162 VEX_LEN_5F_P_3,
1163 VEX_LEN_60_P_2,
1164 VEX_LEN_61_P_2,
1165 VEX_LEN_62_P_2,
1166 VEX_LEN_63_P_2,
1167 VEX_LEN_64_P_2,
1168 VEX_LEN_65_P_2,
1169 VEX_LEN_66_P_2,
1170 VEX_LEN_67_P_2,
1171 VEX_LEN_68_P_2,
1172 VEX_LEN_69_P_2,
1173 VEX_LEN_6A_P_2,
1174 VEX_LEN_6B_P_2,
1175 VEX_LEN_6C_P_2,
1176 VEX_LEN_6D_P_2,
1177 VEX_LEN_6E_P_2,
1178 VEX_LEN_70_P_1,
1179 VEX_LEN_70_P_2,
1180 VEX_LEN_70_P_3,
1181 VEX_LEN_71_R_2_P_2,
1182 VEX_LEN_71_R_4_P_2,
1183 VEX_LEN_71_R_6_P_2,
1184 VEX_LEN_72_R_2_P_2,
1185 VEX_LEN_72_R_4_P_2,
1186 VEX_LEN_72_R_6_P_2,
1187 VEX_LEN_73_R_2_P_2,
1188 VEX_LEN_73_R_3_P_2,
1189 VEX_LEN_73_R_6_P_2,
1190 VEX_LEN_73_R_7_P_2,
1191 VEX_LEN_74_P_2,
1192 VEX_LEN_75_P_2,
1193 VEX_LEN_76_P_2,
1194 VEX_LEN_7E_P_1,
1195 VEX_LEN_7E_P_2,
1196 VEX_LEN_AE_R_2_M_0,
1197 VEX_LEN_AE_R_3_M_0,
1198 VEX_LEN_C2_P_1,
1199 VEX_LEN_C2_P_3,
1200 VEX_LEN_C4_P_2,
1201 VEX_LEN_C5_P_2,
1202 VEX_LEN_D1_P_2,
1203 VEX_LEN_D2_P_2,
1204 VEX_LEN_D3_P_2,
1205 VEX_LEN_D4_P_2,
1206 VEX_LEN_D5_P_2,
1207 VEX_LEN_D6_P_2,
1208 VEX_LEN_D7_P_2_M_1,
1209 VEX_LEN_D8_P_2,
1210 VEX_LEN_D9_P_2,
1211 VEX_LEN_DA_P_2,
1212 VEX_LEN_DB_P_2,
1213 VEX_LEN_DC_P_2,
1214 VEX_LEN_DD_P_2,
1215 VEX_LEN_DE_P_2,
1216 VEX_LEN_DF_P_2,
1217 VEX_LEN_E0_P_2,
1218 VEX_LEN_E1_P_2,
1219 VEX_LEN_E2_P_2,
1220 VEX_LEN_E3_P_2,
1221 VEX_LEN_E4_P_2,
1222 VEX_LEN_E5_P_2,
1223 VEX_LEN_E8_P_2,
1224 VEX_LEN_E9_P_2,
1225 VEX_LEN_EA_P_2,
1226 VEX_LEN_EB_P_2,
1227 VEX_LEN_EC_P_2,
1228 VEX_LEN_ED_P_2,
1229 VEX_LEN_EE_P_2,
1230 VEX_LEN_EF_P_2,
1231 VEX_LEN_F1_P_2,
1232 VEX_LEN_F2_P_2,
1233 VEX_LEN_F3_P_2,
1234 VEX_LEN_F4_P_2,
1235 VEX_LEN_F5_P_2,
1236 VEX_LEN_F6_P_2,
1237 VEX_LEN_F7_P_2,
1238 VEX_LEN_F8_P_2,
1239 VEX_LEN_F9_P_2,
1240 VEX_LEN_FA_P_2,
1241 VEX_LEN_FB_P_2,
1242 VEX_LEN_FC_P_2,
1243 VEX_LEN_FD_P_2,
1244 VEX_LEN_FE_P_2,
1245 VEX_LEN_3800_P_2,
1246 VEX_LEN_3801_P_2,
1247 VEX_LEN_3802_P_2,
1248 VEX_LEN_3803_P_2,
1249 VEX_LEN_3804_P_2,
1250 VEX_LEN_3805_P_2,
1251 VEX_LEN_3806_P_2,
1252 VEX_LEN_3807_P_2,
1253 VEX_LEN_3808_P_2,
1254 VEX_LEN_3809_P_2,
1255 VEX_LEN_380A_P_2,
1256 VEX_LEN_380B_P_2,
1257 VEX_LEN_3819_P_2_M_0,
1258 VEX_LEN_381A_P_2_M_0,
1259 VEX_LEN_381C_P_2,
1260 VEX_LEN_381D_P_2,
1261 VEX_LEN_381E_P_2,
1262 VEX_LEN_3820_P_2,
1263 VEX_LEN_3821_P_2,
1264 VEX_LEN_3822_P_2,
1265 VEX_LEN_3823_P_2,
1266 VEX_LEN_3824_P_2,
1267 VEX_LEN_3825_P_2,
1268 VEX_LEN_3828_P_2,
1269 VEX_LEN_3829_P_2,
1270 VEX_LEN_382A_P_2_M_0,
1271 VEX_LEN_382B_P_2,
1272 VEX_LEN_3830_P_2,
1273 VEX_LEN_3831_P_2,
1274 VEX_LEN_3832_P_2,
1275 VEX_LEN_3833_P_2,
1276 VEX_LEN_3834_P_2,
1277 VEX_LEN_3835_P_2,
1278 VEX_LEN_3837_P_2,
1279 VEX_LEN_3838_P_2,
1280 VEX_LEN_3839_P_2,
1281 VEX_LEN_383A_P_2,
1282 VEX_LEN_383B_P_2,
1283 VEX_LEN_383C_P_2,
1284 VEX_LEN_383D_P_2,
1285 VEX_LEN_383E_P_2,
1286 VEX_LEN_383F_P_2,
1287 VEX_LEN_3840_P_2,
1288 VEX_LEN_3841_P_2,
1289 VEX_LEN_38DB_P_2,
1290 VEX_LEN_38DC_P_2,
1291 VEX_LEN_38DD_P_2,
1292 VEX_LEN_38DE_P_2,
1293 VEX_LEN_38DF_P_2,
1294 VEX_LEN_3A06_P_2,
1295 VEX_LEN_3A0A_P_2,
1296 VEX_LEN_3A0B_P_2,
1297 VEX_LEN_3A0E_P_2,
1298 VEX_LEN_3A0F_P_2,
1299 VEX_LEN_3A14_P_2,
1300 VEX_LEN_3A15_P_2,
1301 VEX_LEN_3A16_P_2,
1302 VEX_LEN_3A17_P_2,
1303 VEX_LEN_3A18_P_2,
1304 VEX_LEN_3A19_P_2,
1305 VEX_LEN_3A20_P_2,
1306 VEX_LEN_3A21_P_2,
1307 VEX_LEN_3A22_P_2,
1308 VEX_LEN_3A41_P_2,
1309 VEX_LEN_3A42_P_2,
1310 VEX_LEN_3A44_P_2,
1311 VEX_LEN_3A4C_P_2,
1312 VEX_LEN_3A60_P_2,
1313 VEX_LEN_3A61_P_2,
1314 VEX_LEN_3A62_P_2,
1315 VEX_LEN_3A63_P_2,
1316 VEX_LEN_3A6A_P_2,
1317 VEX_LEN_3A6B_P_2,
1318 VEX_LEN_3A6E_P_2,
1319 VEX_LEN_3A6F_P_2,
1320 VEX_LEN_3A7A_P_2,
1321 VEX_LEN_3A7B_P_2,
1322 VEX_LEN_3A7E_P_2,
1323 VEX_LEN_3A7F_P_2,
5dd85c99 1324 VEX_LEN_3ADF_P_2,
5dd85c99
SP
1325 VEX_LEN_XOP_09_80,
1326 VEX_LEN_XOP_09_81
51e7da1b 1327};
c0f3af97 1328
9e30b8e0
L
1329enum
1330{
1331 VEX_W_10_P_0 = 0,
1332 VEX_W_10_P_1,
1333 VEX_W_10_P_2,
1334 VEX_W_10_P_3,
1335 VEX_W_11_P_0,
1336 VEX_W_11_P_1,
1337 VEX_W_11_P_2,
1338 VEX_W_11_P_3,
1339 VEX_W_12_P_0_M_0,
1340 VEX_W_12_P_0_M_1,
1341 VEX_W_12_P_1,
1342 VEX_W_12_P_2,
1343 VEX_W_12_P_3,
1344 VEX_W_13_M_0,
1345 VEX_W_14,
1346 VEX_W_15,
1347 VEX_W_16_P_0_M_0,
1348 VEX_W_16_P_0_M_1,
1349 VEX_W_16_P_1,
1350 VEX_W_16_P_2,
1351 VEX_W_17_M_0,
1352 VEX_W_28,
1353 VEX_W_29,
1354 VEX_W_2B_M_0,
1355 VEX_W_2E_P_0,
1356 VEX_W_2E_P_2,
1357 VEX_W_2F_P_0,
1358 VEX_W_2F_P_2,
1359 VEX_W_50_M_0,
1360 VEX_W_51_P_0,
1361 VEX_W_51_P_1,
1362 VEX_W_51_P_2,
1363 VEX_W_51_P_3,
1364 VEX_W_52_P_0,
1365 VEX_W_52_P_1,
1366 VEX_W_53_P_0,
1367 VEX_W_53_P_1,
1368 VEX_W_58_P_0,
1369 VEX_W_58_P_1,
1370 VEX_W_58_P_2,
1371 VEX_W_58_P_3,
1372 VEX_W_59_P_0,
1373 VEX_W_59_P_1,
1374 VEX_W_59_P_2,
1375 VEX_W_59_P_3,
1376 VEX_W_5A_P_0,
1377 VEX_W_5A_P_1,
1378 VEX_W_5A_P_3,
1379 VEX_W_5B_P_0,
1380 VEX_W_5B_P_1,
1381 VEX_W_5B_P_2,
1382 VEX_W_5C_P_0,
1383 VEX_W_5C_P_1,
1384 VEX_W_5C_P_2,
1385 VEX_W_5C_P_3,
1386 VEX_W_5D_P_0,
1387 VEX_W_5D_P_1,
1388 VEX_W_5D_P_2,
1389 VEX_W_5D_P_3,
1390 VEX_W_5E_P_0,
1391 VEX_W_5E_P_1,
1392 VEX_W_5E_P_2,
1393 VEX_W_5E_P_3,
1394 VEX_W_5F_P_0,
1395 VEX_W_5F_P_1,
1396 VEX_W_5F_P_2,
1397 VEX_W_5F_P_3,
1398 VEX_W_60_P_2,
1399 VEX_W_61_P_2,
1400 VEX_W_62_P_2,
1401 VEX_W_63_P_2,
1402 VEX_W_64_P_2,
1403 VEX_W_65_P_2,
1404 VEX_W_66_P_2,
1405 VEX_W_67_P_2,
1406 VEX_W_68_P_2,
1407 VEX_W_69_P_2,
1408 VEX_W_6A_P_2,
1409 VEX_W_6B_P_2,
1410 VEX_W_6C_P_2,
1411 VEX_W_6D_P_2,
1412 VEX_W_6F_P_1,
1413 VEX_W_6F_P_2,
1414 VEX_W_70_P_1,
1415 VEX_W_70_P_2,
1416 VEX_W_70_P_3,
1417 VEX_W_71_R_2_P_2,
1418 VEX_W_71_R_4_P_2,
1419 VEX_W_71_R_6_P_2,
1420 VEX_W_72_R_2_P_2,
1421 VEX_W_72_R_4_P_2,
1422 VEX_W_72_R_6_P_2,
1423 VEX_W_73_R_2_P_2,
1424 VEX_W_73_R_3_P_2,
1425 VEX_W_73_R_6_P_2,
1426 VEX_W_73_R_7_P_2,
1427 VEX_W_74_P_2,
1428 VEX_W_75_P_2,
1429 VEX_W_76_P_2,
1430 VEX_W_77_P_0,
1431 VEX_W_7C_P_2,
1432 VEX_W_7C_P_3,
1433 VEX_W_7D_P_2,
1434 VEX_W_7D_P_3,
1435 VEX_W_7E_P_1,
1436 VEX_W_7F_P_1,
1437 VEX_W_7F_P_2,
1438 VEX_W_AE_R_2_M_0,
1439 VEX_W_AE_R_3_M_0,
1440 VEX_W_C2_P_0,
1441 VEX_W_C2_P_1,
1442 VEX_W_C2_P_2,
1443 VEX_W_C2_P_3,
1444 VEX_W_C4_P_2,
1445 VEX_W_C5_P_2,
1446 VEX_W_D0_P_2,
1447 VEX_W_D0_P_3,
1448 VEX_W_D1_P_2,
1449 VEX_W_D2_P_2,
1450 VEX_W_D3_P_2,
1451 VEX_W_D4_P_2,
1452 VEX_W_D5_P_2,
1453 VEX_W_D6_P_2,
1454 VEX_W_D7_P_2_M_1,
1455 VEX_W_D8_P_2,
1456 VEX_W_D9_P_2,
1457 VEX_W_DA_P_2,
1458 VEX_W_DB_P_2,
1459 VEX_W_DC_P_2,
1460 VEX_W_DD_P_2,
1461 VEX_W_DE_P_2,
1462 VEX_W_DF_P_2,
1463 VEX_W_E0_P_2,
1464 VEX_W_E1_P_2,
1465 VEX_W_E2_P_2,
1466 VEX_W_E3_P_2,
1467 VEX_W_E4_P_2,
1468 VEX_W_E5_P_2,
1469 VEX_W_E6_P_1,
1470 VEX_W_E6_P_2,
1471 VEX_W_E6_P_3,
1472 VEX_W_E7_P_2_M_0,
1473 VEX_W_E8_P_2,
1474 VEX_W_E9_P_2,
1475 VEX_W_EA_P_2,
1476 VEX_W_EB_P_2,
1477 VEX_W_EC_P_2,
1478 VEX_W_ED_P_2,
1479 VEX_W_EE_P_2,
1480 VEX_W_EF_P_2,
1481 VEX_W_F0_P_3_M_0,
1482 VEX_W_F1_P_2,
1483 VEX_W_F2_P_2,
1484 VEX_W_F3_P_2,
1485 VEX_W_F4_P_2,
1486 VEX_W_F5_P_2,
1487 VEX_W_F6_P_2,
1488 VEX_W_F7_P_2,
1489 VEX_W_F8_P_2,
1490 VEX_W_F9_P_2,
1491 VEX_W_FA_P_2,
1492 VEX_W_FB_P_2,
1493 VEX_W_FC_P_2,
1494 VEX_W_FD_P_2,
1495 VEX_W_FE_P_2,
1496 VEX_W_3800_P_2,
1497 VEX_W_3801_P_2,
1498 VEX_W_3802_P_2,
1499 VEX_W_3803_P_2,
1500 VEX_W_3804_P_2,
1501 VEX_W_3805_P_2,
1502 VEX_W_3806_P_2,
1503 VEX_W_3807_P_2,
1504 VEX_W_3808_P_2,
1505 VEX_W_3809_P_2,
1506 VEX_W_380A_P_2,
1507 VEX_W_380B_P_2,
1508 VEX_W_380C_P_2,
1509 VEX_W_380D_P_2,
1510 VEX_W_380E_P_2,
1511 VEX_W_380F_P_2,
1512 VEX_W_3817_P_2,
bcf2684f 1513 VEX_W_3818_P_2_M_0,
9e30b8e0
L
1514 VEX_W_3819_P_2_M_0,
1515 VEX_W_381A_P_2_M_0,
1516 VEX_W_381C_P_2,
1517 VEX_W_381D_P_2,
1518 VEX_W_381E_P_2,
1519 VEX_W_3820_P_2,
1520 VEX_W_3821_P_2,
1521 VEX_W_3822_P_2,
1522 VEX_W_3823_P_2,
1523 VEX_W_3824_P_2,
1524 VEX_W_3825_P_2,
1525 VEX_W_3828_P_2,
1526 VEX_W_3829_P_2,
1527 VEX_W_382A_P_2_M_0,
1528 VEX_W_382B_P_2,
53aa04a0
L
1529 VEX_W_382C_P_2_M_0,
1530 VEX_W_382D_P_2_M_0,
1531 VEX_W_382E_P_2_M_0,
1532 VEX_W_382F_P_2_M_0,
9e30b8e0
L
1533 VEX_W_3830_P_2,
1534 VEX_W_3831_P_2,
1535 VEX_W_3832_P_2,
1536 VEX_W_3833_P_2,
1537 VEX_W_3834_P_2,
1538 VEX_W_3835_P_2,
1539 VEX_W_3837_P_2,
1540 VEX_W_3838_P_2,
1541 VEX_W_3839_P_2,
1542 VEX_W_383A_P_2,
1543 VEX_W_383B_P_2,
1544 VEX_W_383C_P_2,
1545 VEX_W_383D_P_2,
1546 VEX_W_383E_P_2,
1547 VEX_W_383F_P_2,
1548 VEX_W_3840_P_2,
1549 VEX_W_3841_P_2,
1550 VEX_W_38DB_P_2,
1551 VEX_W_38DC_P_2,
1552 VEX_W_38DD_P_2,
1553 VEX_W_38DE_P_2,
1554 VEX_W_38DF_P_2,
1555 VEX_W_3A04_P_2,
1556 VEX_W_3A05_P_2,
1557 VEX_W_3A06_P_2,
1558 VEX_W_3A08_P_2,
1559 VEX_W_3A09_P_2,
1560 VEX_W_3A0A_P_2,
1561 VEX_W_3A0B_P_2,
1562 VEX_W_3A0C_P_2,
1563 VEX_W_3A0D_P_2,
1564 VEX_W_3A0E_P_2,
1565 VEX_W_3A0F_P_2,
1566 VEX_W_3A14_P_2,
1567 VEX_W_3A15_P_2,
1568 VEX_W_3A18_P_2,
1569 VEX_W_3A19_P_2,
1570 VEX_W_3A20_P_2,
1571 VEX_W_3A21_P_2,
1572 VEX_W_3A40_P_2,
1573 VEX_W_3A41_P_2,
1574 VEX_W_3A42_P_2,
1575 VEX_W_3A44_P_2,
a683cc34
SP
1576 VEX_W_3A48_P_2,
1577 VEX_W_3A49_P_2,
9e30b8e0
L
1578 VEX_W_3A4A_P_2,
1579 VEX_W_3A4B_P_2,
1580 VEX_W_3A4C_P_2,
1581 VEX_W_3A60_P_2,
1582 VEX_W_3A61_P_2,
1583 VEX_W_3A62_P_2,
1584 VEX_W_3A63_P_2,
1585 VEX_W_3ADF_P_2
1586};
1587
26ca5450 1588typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
1589
1590struct dis386 {
2da11e11 1591 const char *name;
ce518a5f
L
1592 struct
1593 {
1594 op_rtn rtn;
1595 int bytemode;
1596 } op[MAX_OPERANDS];
252b5132
RH
1597};
1598
1599/* Upper case letters in the instruction names here are macros.
1600 'A' => print 'b' if no register operands or suffix_always is true
1601 'B' => print 'b' if suffix_always is true
9306ca4a 1602 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 1603 size prefix
ed7841b3 1604 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 1605 suffix_always is true
252b5132 1606 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 1607 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 1608 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 1609 'H' => print ",pt" or ",pn" branch hint
9306ca4a 1610 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 1611 for some of the macro letters)
9306ca4a 1612 'J' => print 'l'
42903f7f 1613 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 1614 'L' => print 'l' if suffix_always is true
9d141669 1615 'M' => print 'r' if intel_mnemonic is false.
252b5132 1616 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 1617 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 1618 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
1619 or suffix_always is true. print 'q' if rex prefix is present.
1620 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1621 is true
a35ca55a 1622 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 1623 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
1624 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1625 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 1626 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 1627 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 1628 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
1629 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1630 suffix_always is true.
6dd5059a 1631 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 1632 '!' => change condition from true to false or from false to true.
98b528ac
L
1633 '%' => add 1 upper case letter to the macro.
1634
1635 2 upper case letter macros:
c0f3af97
L
1636 "XY" => print 'x' or 'y' if no register operands or suffix_always
1637 is true.
4b06377f
L
1638 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1639 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 1640 or suffix_always is true
4b06377f
L
1641 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1642 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1643 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
52b15da3 1644
6439fc28
AM
1645 Many of the above letters print nothing in Intel mode. See "putop"
1646 for the details.
52b15da3 1647
6439fc28 1648 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 1649 mnemonic strings for AT&T and Intel. */
252b5132 1650
6439fc28 1651static const struct dis386 dis386[] = {
252b5132 1652 /* 00 */
ce518a5f
L
1653 { "addB", { Eb, Gb } },
1654 { "addS", { Ev, Gv } },
c7532693
L
1655 { "addB", { Gb, EbS } },
1656 { "addS", { Gv, EvS } },
ce518a5f
L
1657 { "addB", { AL, Ib } },
1658 { "addS", { eAX, Iv } },
4e7d34a6
L
1659 { X86_64_TABLE (X86_64_06) },
1660 { X86_64_TABLE (X86_64_07) },
252b5132 1661 /* 08 */
ce518a5f
L
1662 { "orB", { Eb, Gb } },
1663 { "orS", { Ev, Gv } },
c7532693
L
1664 { "orB", { Gb, EbS } },
1665 { "orS", { Gv, EvS } },
ce518a5f
L
1666 { "orB", { AL, Ib } },
1667 { "orS", { eAX, Iv } },
4e7d34a6 1668 { X86_64_TABLE (X86_64_0D) },
592d1631 1669 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 1670 /* 10 */
ce518a5f
L
1671 { "adcB", { Eb, Gb } },
1672 { "adcS", { Ev, Gv } },
c7532693
L
1673 { "adcB", { Gb, EbS } },
1674 { "adcS", { Gv, EvS } },
ce518a5f
L
1675 { "adcB", { AL, Ib } },
1676 { "adcS", { eAX, Iv } },
4e7d34a6
L
1677 { X86_64_TABLE (X86_64_16) },
1678 { X86_64_TABLE (X86_64_17) },
252b5132 1679 /* 18 */
ce518a5f
L
1680 { "sbbB", { Eb, Gb } },
1681 { "sbbS", { Ev, Gv } },
c7532693
L
1682 { "sbbB", { Gb, EbS } },
1683 { "sbbS", { Gv, EvS } },
ce518a5f
L
1684 { "sbbB", { AL, Ib } },
1685 { "sbbS", { eAX, Iv } },
4e7d34a6
L
1686 { X86_64_TABLE (X86_64_1E) },
1687 { X86_64_TABLE (X86_64_1F) },
252b5132 1688 /* 20 */
ce518a5f
L
1689 { "andB", { Eb, Gb } },
1690 { "andS", { Ev, Gv } },
c7532693
L
1691 { "andB", { Gb, EbS } },
1692 { "andS", { Gv, EvS } },
ce518a5f
L
1693 { "andB", { AL, Ib } },
1694 { "andS", { eAX, Iv } },
592d1631 1695 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 1696 { X86_64_TABLE (X86_64_27) },
252b5132 1697 /* 28 */
ce518a5f
L
1698 { "subB", { Eb, Gb } },
1699 { "subS", { Ev, Gv } },
c7532693
L
1700 { "subB", { Gb, EbS } },
1701 { "subS", { Gv, EvS } },
ce518a5f
L
1702 { "subB", { AL, Ib } },
1703 { "subS", { eAX, Iv } },
592d1631 1704 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 1705 { X86_64_TABLE (X86_64_2F) },
252b5132 1706 /* 30 */
ce518a5f
L
1707 { "xorB", { Eb, Gb } },
1708 { "xorS", { Ev, Gv } },
c7532693
L
1709 { "xorB", { Gb, EbS } },
1710 { "xorS", { Gv, EvS } },
ce518a5f
L
1711 { "xorB", { AL, Ib } },
1712 { "xorS", { eAX, Iv } },
592d1631 1713 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 1714 { X86_64_TABLE (X86_64_37) },
252b5132 1715 /* 38 */
ce518a5f
L
1716 { "cmpB", { Eb, Gb } },
1717 { "cmpS", { Ev, Gv } },
c7532693
L
1718 { "cmpB", { Gb, EbS } },
1719 { "cmpS", { Gv, EvS } },
ce518a5f
L
1720 { "cmpB", { AL, Ib } },
1721 { "cmpS", { eAX, Iv } },
592d1631 1722 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 1723 { X86_64_TABLE (X86_64_3F) },
252b5132 1724 /* 40 */
ce518a5f
L
1725 { "inc{S|}", { RMeAX } },
1726 { "inc{S|}", { RMeCX } },
1727 { "inc{S|}", { RMeDX } },
1728 { "inc{S|}", { RMeBX } },
1729 { "inc{S|}", { RMeSP } },
1730 { "inc{S|}", { RMeBP } },
1731 { "inc{S|}", { RMeSI } },
1732 { "inc{S|}", { RMeDI } },
252b5132 1733 /* 48 */
ce518a5f
L
1734 { "dec{S|}", { RMeAX } },
1735 { "dec{S|}", { RMeCX } },
1736 { "dec{S|}", { RMeDX } },
1737 { "dec{S|}", { RMeBX } },
1738 { "dec{S|}", { RMeSP } },
1739 { "dec{S|}", { RMeBP } },
1740 { "dec{S|}", { RMeSI } },
1741 { "dec{S|}", { RMeDI } },
252b5132 1742 /* 50 */
ce518a5f
L
1743 { "pushV", { RMrAX } },
1744 { "pushV", { RMrCX } },
1745 { "pushV", { RMrDX } },
1746 { "pushV", { RMrBX } },
1747 { "pushV", { RMrSP } },
1748 { "pushV", { RMrBP } },
1749 { "pushV", { RMrSI } },
1750 { "pushV", { RMrDI } },
252b5132 1751 /* 58 */
ce518a5f
L
1752 { "popV", { RMrAX } },
1753 { "popV", { RMrCX } },
1754 { "popV", { RMrDX } },
1755 { "popV", { RMrBX } },
1756 { "popV", { RMrSP } },
1757 { "popV", { RMrBP } },
1758 { "popV", { RMrSI } },
1759 { "popV", { RMrDI } },
252b5132 1760 /* 60 */
4e7d34a6
L
1761 { X86_64_TABLE (X86_64_60) },
1762 { X86_64_TABLE (X86_64_61) },
1763 { X86_64_TABLE (X86_64_62) },
1764 { X86_64_TABLE (X86_64_63) },
592d1631
L
1765 { Bad_Opcode }, /* seg fs */
1766 { Bad_Opcode }, /* seg gs */
1767 { Bad_Opcode }, /* op size prefix */
1768 { Bad_Opcode }, /* adr size prefix */
252b5132 1769 /* 68 */
ce518a5f
L
1770 { "pushT", { Iq } },
1771 { "imulS", { Gv, Ev, Iv } },
1772 { "pushT", { sIb } },
1773 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 1774 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 1775 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 1776 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 1777 { X86_64_TABLE (X86_64_6F) },
252b5132 1778 /* 70 */
ce518a5f
L
1779 { "joH", { Jb, XX, cond_jump_flag } },
1780 { "jnoH", { Jb, XX, cond_jump_flag } },
1781 { "jbH", { Jb, XX, cond_jump_flag } },
1782 { "jaeH", { Jb, XX, cond_jump_flag } },
1783 { "jeH", { Jb, XX, cond_jump_flag } },
1784 { "jneH", { Jb, XX, cond_jump_flag } },
1785 { "jbeH", { Jb, XX, cond_jump_flag } },
1786 { "jaH", { Jb, XX, cond_jump_flag } },
252b5132 1787 /* 78 */
ce518a5f
L
1788 { "jsH", { Jb, XX, cond_jump_flag } },
1789 { "jnsH", { Jb, XX, cond_jump_flag } },
1790 { "jpH", { Jb, XX, cond_jump_flag } },
1791 { "jnpH", { Jb, XX, cond_jump_flag } },
1792 { "jlH", { Jb, XX, cond_jump_flag } },
1793 { "jgeH", { Jb, XX, cond_jump_flag } },
1794 { "jleH", { Jb, XX, cond_jump_flag } },
1795 { "jgH", { Jb, XX, cond_jump_flag } },
252b5132 1796 /* 80 */
1ceb70f8
L
1797 { REG_TABLE (REG_80) },
1798 { REG_TABLE (REG_81) },
592d1631 1799 { Bad_Opcode },
1ceb70f8 1800 { REG_TABLE (REG_82) },
ce518a5f
L
1801 { "testB", { Eb, Gb } },
1802 { "testS", { Ev, Gv } },
1803 { "xchgB", { Eb, Gb } },
1804 { "xchgS", { Ev, Gv } },
252b5132 1805 /* 88 */
ce518a5f
L
1806 { "movB", { Eb, Gb } },
1807 { "movS", { Ev, Gv } },
b6169b20
L
1808 { "movB", { Gb, EbS } },
1809 { "movS", { Gv, EvS } },
ce518a5f 1810 { "movD", { Sv, Sw } },
1ceb70f8 1811 { MOD_TABLE (MOD_8D) },
ce518a5f 1812 { "movD", { Sw, Sv } },
1ceb70f8 1813 { REG_TABLE (REG_8F) },
252b5132 1814 /* 90 */
1ceb70f8 1815 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
1816 { "xchgS", { RMeCX, eAX } },
1817 { "xchgS", { RMeDX, eAX } },
1818 { "xchgS", { RMeBX, eAX } },
1819 { "xchgS", { RMeSP, eAX } },
1820 { "xchgS", { RMeBP, eAX } },
1821 { "xchgS", { RMeSI, eAX } },
1822 { "xchgS", { RMeDI, eAX } },
252b5132 1823 /* 98 */
7c52e0e8
L
1824 { "cW{t|}R", { XX } },
1825 { "cR{t|}O", { XX } },
4e7d34a6 1826 { X86_64_TABLE (X86_64_9A) },
592d1631 1827 { Bad_Opcode }, /* fwait */
ce518a5f
L
1828 { "pushfT", { XX } },
1829 { "popfT", { XX } },
7c52e0e8
L
1830 { "sahf", { XX } },
1831 { "lahf", { XX } },
252b5132 1832 /* a0 */
4b06377f
L
1833 { "mov%LB", { AL, Ob } },
1834 { "mov%LS", { eAX, Ov } },
1835 { "mov%LB", { Ob, AL } },
1836 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
1837 { "movs{b|}", { Ybr, Xb } },
1838 { "movs{R|}", { Yvr, Xv } },
1839 { "cmps{b|}", { Xb, Yb } },
1840 { "cmps{R|}", { Xv, Yv } },
252b5132 1841 /* a8 */
ce518a5f
L
1842 { "testB", { AL, Ib } },
1843 { "testS", { eAX, Iv } },
1844 { "stosB", { Ybr, AL } },
1845 { "stosS", { Yvr, eAX } },
1846 { "lodsB", { ALr, Xb } },
1847 { "lodsS", { eAXr, Xv } },
1848 { "scasB", { AL, Yb } },
1849 { "scasS", { eAX, Yv } },
252b5132 1850 /* b0 */
ce518a5f
L
1851 { "movB", { RMAL, Ib } },
1852 { "movB", { RMCL, Ib } },
1853 { "movB", { RMDL, Ib } },
1854 { "movB", { RMBL, Ib } },
1855 { "movB", { RMAH, Ib } },
1856 { "movB", { RMCH, Ib } },
1857 { "movB", { RMDH, Ib } },
1858 { "movB", { RMBH, Ib } },
252b5132 1859 /* b8 */
4b06377f
L
1860 { "mov%LV", { RMeAX, Iv64 } },
1861 { "mov%LV", { RMeCX, Iv64 } },
1862 { "mov%LV", { RMeDX, Iv64 } },
1863 { "mov%LV", { RMeBX, Iv64 } },
1864 { "mov%LV", { RMeSP, Iv64 } },
1865 { "mov%LV", { RMeBP, Iv64 } },
1866 { "mov%LV", { RMeSI, Iv64 } },
1867 { "mov%LV", { RMeDI, Iv64 } },
252b5132 1868 /* c0 */
1ceb70f8
L
1869 { REG_TABLE (REG_C0) },
1870 { REG_TABLE (REG_C1) },
ce518a5f
L
1871 { "retT", { Iw } },
1872 { "retT", { XX } },
4e7d34a6
L
1873 { X86_64_TABLE (X86_64_C4) },
1874 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
1875 { REG_TABLE (REG_C6) },
1876 { REG_TABLE (REG_C7) },
252b5132 1877 /* c8 */
ce518a5f
L
1878 { "enterT", { Iw, Ib } },
1879 { "leaveT", { XX } },
ddab3d59
JB
1880 { "Jret{|f}P", { Iw } },
1881 { "Jret{|f}P", { XX } },
ce518a5f
L
1882 { "int3", { XX } },
1883 { "int", { Ib } },
4e7d34a6 1884 { X86_64_TABLE (X86_64_CE) },
ce518a5f 1885 { "iretP", { XX } },
252b5132 1886 /* d0 */
1ceb70f8
L
1887 { REG_TABLE (REG_D0) },
1888 { REG_TABLE (REG_D1) },
1889 { REG_TABLE (REG_D2) },
1890 { REG_TABLE (REG_D3) },
4e7d34a6
L
1891 { X86_64_TABLE (X86_64_D4) },
1892 { X86_64_TABLE (X86_64_D5) },
592d1631 1893 { Bad_Opcode },
ce518a5f 1894 { "xlat", { DSBX } },
252b5132
RH
1895 /* d8 */
1896 { FLOAT },
1897 { FLOAT },
1898 { FLOAT },
1899 { FLOAT },
1900 { FLOAT },
1901 { FLOAT },
1902 { FLOAT },
1903 { FLOAT },
1904 /* e0 */
ce518a5f
L
1905 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1906 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1907 { "loopFH", { Jb, XX, loop_jcxz_flag } },
1908 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1909 { "inB", { AL, Ib } },
1910 { "inG", { zAX, Ib } },
1911 { "outB", { Ib, AL } },
1912 { "outG", { Ib, zAX } },
252b5132 1913 /* e8 */
ce518a5f
L
1914 { "callT", { Jv } },
1915 { "jmpT", { Jv } },
4e7d34a6 1916 { X86_64_TABLE (X86_64_EA) },
ce518a5f
L
1917 { "jmp", { Jb } },
1918 { "inB", { AL, indirDX } },
1919 { "inG", { zAX, indirDX } },
1920 { "outB", { indirDX, AL } },
1921 { "outG", { indirDX, zAX } },
252b5132 1922 /* f0 */
592d1631 1923 { Bad_Opcode }, /* lock prefix */
ce518a5f 1924 { "icebp", { XX } },
592d1631
L
1925 { Bad_Opcode }, /* repne */
1926 { Bad_Opcode }, /* repz */
ce518a5f
L
1927 { "hlt", { XX } },
1928 { "cmc", { XX } },
1ceb70f8
L
1929 { REG_TABLE (REG_F6) },
1930 { REG_TABLE (REG_F7) },
252b5132 1931 /* f8 */
ce518a5f
L
1932 { "clc", { XX } },
1933 { "stc", { XX } },
1934 { "cli", { XX } },
1935 { "sti", { XX } },
1936 { "cld", { XX } },
1937 { "std", { XX } },
1ceb70f8
L
1938 { REG_TABLE (REG_FE) },
1939 { REG_TABLE (REG_FF) },
252b5132
RH
1940};
1941
6439fc28 1942static const struct dis386 dis386_twobyte[] = {
252b5132 1943 /* 00 */
1ceb70f8
L
1944 { REG_TABLE (REG_0F00 ) },
1945 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
1946 { "larS", { Gv, Ew } },
1947 { "lslS", { Gv, Ew } },
592d1631 1948 { Bad_Opcode },
ce518a5f
L
1949 { "syscall", { XX } },
1950 { "clts", { XX } },
1951 { "sysretP", { XX } },
252b5132 1952 /* 08 */
ce518a5f
L
1953 { "invd", { XX } },
1954 { "wbinvd", { XX } },
592d1631 1955 { Bad_Opcode },
ce518a5f 1956 { "ud2a", { XX } },
592d1631 1957 { Bad_Opcode },
b5b1fc4f 1958 { REG_TABLE (REG_0F0D) },
ce518a5f
L
1959 { "femms", { XX } },
1960 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 1961 /* 10 */
1ceb70f8
L
1962 { PREFIX_TABLE (PREFIX_0F10) },
1963 { PREFIX_TABLE (PREFIX_0F11) },
1964 { PREFIX_TABLE (PREFIX_0F12) },
1965 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
1966 { "unpcklpX", { XM, EXx } },
1967 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
1968 { PREFIX_TABLE (PREFIX_0F16) },
1969 { MOD_TABLE (MOD_0F17) },
252b5132 1970 /* 18 */
1ceb70f8 1971 { REG_TABLE (REG_0F18) },
b5b1fc4f
L
1972 { "nopQ", { Ev } },
1973 { "nopQ", { Ev } },
1974 { "nopQ", { Ev } },
1975 { "nopQ", { Ev } },
1976 { "nopQ", { Ev } },
1977 { "nopQ", { Ev } },
ce518a5f 1978 { "nopQ", { Ev } },
252b5132 1979 /* 20 */
1ceb70f8
L
1980 { MOD_TABLE (MOD_0F20) },
1981 { MOD_TABLE (MOD_0F21) },
1982 { MOD_TABLE (MOD_0F22) },
1983 { MOD_TABLE (MOD_0F23) },
1984 { MOD_TABLE (MOD_0F24) },
592d1631 1985 { Bad_Opcode },
1ceb70f8 1986 { MOD_TABLE (MOD_0F26) },
592d1631 1987 { Bad_Opcode },
252b5132 1988 /* 28 */
09a2c6cf 1989 { "movapX", { XM, EXx } },
b6169b20 1990 { "movapX", { EXxS, XM } },
1ceb70f8
L
1991 { PREFIX_TABLE (PREFIX_0F2A) },
1992 { PREFIX_TABLE (PREFIX_0F2B) },
1993 { PREFIX_TABLE (PREFIX_0F2C) },
1994 { PREFIX_TABLE (PREFIX_0F2D) },
1995 { PREFIX_TABLE (PREFIX_0F2E) },
1996 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 1997 /* 30 */
ce518a5f
L
1998 { "wrmsr", { XX } },
1999 { "rdtsc", { XX } },
2000 { "rdmsr", { XX } },
2001 { "rdpmc", { XX } },
2002 { "sysenter", { XX } },
2003 { "sysexit", { XX } },
592d1631 2004 { Bad_Opcode },
47dd174c 2005 { "getsec", { XX } },
252b5132 2006 /* 38 */
4e7d34a6 2007 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2008 { Bad_Opcode },
4e7d34a6 2009 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2010 { Bad_Opcode },
2011 { Bad_Opcode },
2012 { Bad_Opcode },
2013 { Bad_Opcode },
2014 { Bad_Opcode },
252b5132 2015 /* 40 */
b19d5385
JB
2016 { "cmovoS", { Gv, Ev } },
2017 { "cmovnoS", { Gv, Ev } },
2018 { "cmovbS", { Gv, Ev } },
2019 { "cmovaeS", { Gv, Ev } },
2020 { "cmoveS", { Gv, Ev } },
2021 { "cmovneS", { Gv, Ev } },
2022 { "cmovbeS", { Gv, Ev } },
2023 { "cmovaS", { Gv, Ev } },
252b5132 2024 /* 48 */
b19d5385
JB
2025 { "cmovsS", { Gv, Ev } },
2026 { "cmovnsS", { Gv, Ev } },
2027 { "cmovpS", { Gv, Ev } },
2028 { "cmovnpS", { Gv, Ev } },
2029 { "cmovlS", { Gv, Ev } },
2030 { "cmovgeS", { Gv, Ev } },
2031 { "cmovleS", { Gv, Ev } },
2032 { "cmovgS", { Gv, Ev } },
252b5132 2033 /* 50 */
75c135a8 2034 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2035 { PREFIX_TABLE (PREFIX_0F51) },
2036 { PREFIX_TABLE (PREFIX_0F52) },
2037 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2038 { "andpX", { XM, EXx } },
2039 { "andnpX", { XM, EXx } },
2040 { "orpX", { XM, EXx } },
2041 { "xorpX", { XM, EXx } },
252b5132 2042 /* 58 */
1ceb70f8
L
2043 { PREFIX_TABLE (PREFIX_0F58) },
2044 { PREFIX_TABLE (PREFIX_0F59) },
2045 { PREFIX_TABLE (PREFIX_0F5A) },
2046 { PREFIX_TABLE (PREFIX_0F5B) },
2047 { PREFIX_TABLE (PREFIX_0F5C) },
2048 { PREFIX_TABLE (PREFIX_0F5D) },
2049 { PREFIX_TABLE (PREFIX_0F5E) },
2050 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2051 /* 60 */
1ceb70f8
L
2052 { PREFIX_TABLE (PREFIX_0F60) },
2053 { PREFIX_TABLE (PREFIX_0F61) },
2054 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2055 { "packsswb", { MX, EM } },
2056 { "pcmpgtb", { MX, EM } },
2057 { "pcmpgtw", { MX, EM } },
2058 { "pcmpgtd", { MX, EM } },
2059 { "packuswb", { MX, EM } },
252b5132 2060 /* 68 */
ce518a5f
L
2061 { "punpckhbw", { MX, EM } },
2062 { "punpckhwd", { MX, EM } },
2063 { "punpckhdq", { MX, EM } },
2064 { "packssdw", { MX, EM } },
1ceb70f8
L
2065 { PREFIX_TABLE (PREFIX_0F6C) },
2066 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2067 { "movK", { MX, Edq } },
1ceb70f8 2068 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2069 /* 70 */
1ceb70f8
L
2070 { PREFIX_TABLE (PREFIX_0F70) },
2071 { REG_TABLE (REG_0F71) },
2072 { REG_TABLE (REG_0F72) },
2073 { REG_TABLE (REG_0F73) },
ce518a5f
L
2074 { "pcmpeqb", { MX, EM } },
2075 { "pcmpeqw", { MX, EM } },
2076 { "pcmpeqd", { MX, EM } },
2077 { "emms", { XX } },
252b5132 2078 /* 78 */
1ceb70f8
L
2079 { PREFIX_TABLE (PREFIX_0F78) },
2080 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2081 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2082 { Bad_Opcode },
1ceb70f8
L
2083 { PREFIX_TABLE (PREFIX_0F7C) },
2084 { PREFIX_TABLE (PREFIX_0F7D) },
2085 { PREFIX_TABLE (PREFIX_0F7E) },
2086 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2087 /* 80 */
ce518a5f
L
2088 { "joH", { Jv, XX, cond_jump_flag } },
2089 { "jnoH", { Jv, XX, cond_jump_flag } },
2090 { "jbH", { Jv, XX, cond_jump_flag } },
2091 { "jaeH", { Jv, XX, cond_jump_flag } },
2092 { "jeH", { Jv, XX, cond_jump_flag } },
2093 { "jneH", { Jv, XX, cond_jump_flag } },
2094 { "jbeH", { Jv, XX, cond_jump_flag } },
2095 { "jaH", { Jv, XX, cond_jump_flag } },
252b5132 2096 /* 88 */
ce518a5f
L
2097 { "jsH", { Jv, XX, cond_jump_flag } },
2098 { "jnsH", { Jv, XX, cond_jump_flag } },
2099 { "jpH", { Jv, XX, cond_jump_flag } },
2100 { "jnpH", { Jv, XX, cond_jump_flag } },
2101 { "jlH", { Jv, XX, cond_jump_flag } },
2102 { "jgeH", { Jv, XX, cond_jump_flag } },
2103 { "jleH", { Jv, XX, cond_jump_flag } },
2104 { "jgH", { Jv, XX, cond_jump_flag } },
252b5132 2105 /* 90 */
ce518a5f
L
2106 { "seto", { Eb } },
2107 { "setno", { Eb } },
2108 { "setb", { Eb } },
2109 { "setae", { Eb } },
2110 { "sete", { Eb } },
2111 { "setne", { Eb } },
2112 { "setbe", { Eb } },
2113 { "seta", { Eb } },
252b5132 2114 /* 98 */
ce518a5f
L
2115 { "sets", { Eb } },
2116 { "setns", { Eb } },
2117 { "setp", { Eb } },
2118 { "setnp", { Eb } },
2119 { "setl", { Eb } },
2120 { "setge", { Eb } },
2121 { "setle", { Eb } },
2122 { "setg", { Eb } },
252b5132 2123 /* a0 */
ce518a5f
L
2124 { "pushT", { fs } },
2125 { "popT", { fs } },
2126 { "cpuid", { XX } },
2127 { "btS", { Ev, Gv } },
2128 { "shldS", { Ev, Gv, Ib } },
2129 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2130 { REG_TABLE (REG_0FA6) },
2131 { REG_TABLE (REG_0FA7) },
252b5132 2132 /* a8 */
ce518a5f
L
2133 { "pushT", { gs } },
2134 { "popT", { gs } },
2135 { "rsm", { XX } },
2136 { "btsS", { Ev, Gv } },
2137 { "shrdS", { Ev, Gv, Ib } },
2138 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2139 { REG_TABLE (REG_0FAE) },
ce518a5f 2140 { "imulS", { Gv, Ev } },
252b5132 2141 /* b0 */
ce518a5f
L
2142 { "cmpxchgB", { Eb, Gb } },
2143 { "cmpxchgS", { Ev, Gv } },
1ceb70f8 2144 { MOD_TABLE (MOD_0FB2) },
ce518a5f 2145 { "btrS", { Ev, Gv } },
1ceb70f8
L
2146 { MOD_TABLE (MOD_0FB4) },
2147 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2148 { "movz{bR|x}", { Gv, Eb } },
2149 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2150 /* b8 */
1ceb70f8 2151 { PREFIX_TABLE (PREFIX_0FB8) },
ce518a5f 2152 { "ud2b", { XX } },
1ceb70f8 2153 { REG_TABLE (REG_0FBA) },
ce518a5f
L
2154 { "btcS", { Ev, Gv } },
2155 { "bsfS", { Gv, Ev } },
1ceb70f8 2156 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2157 { "movs{bR|x}", { Gv, Eb } },
2158 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2159 /* c0 */
ce518a5f
L
2160 { "xaddB", { Eb, Gb } },
2161 { "xaddS", { Ev, Gv } },
1ceb70f8 2162 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2163 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2164 { "pinsrw", { MX, Edqw, Ib } },
2165 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2166 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2167 { REG_TABLE (REG_0FC7) },
252b5132 2168 /* c8 */
ce518a5f
L
2169 { "bswap", { RMeAX } },
2170 { "bswap", { RMeCX } },
2171 { "bswap", { RMeDX } },
2172 { "bswap", { RMeBX } },
2173 { "bswap", { RMeSP } },
2174 { "bswap", { RMeBP } },
2175 { "bswap", { RMeSI } },
2176 { "bswap", { RMeDI } },
252b5132 2177 /* d0 */
1ceb70f8 2178 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2179 { "psrlw", { MX, EM } },
2180 { "psrld", { MX, EM } },
2181 { "psrlq", { MX, EM } },
2182 { "paddq", { MX, EM } },
2183 { "pmullw", { MX, EM } },
1ceb70f8 2184 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2185 { MOD_TABLE (MOD_0FD7) },
252b5132 2186 /* d8 */
ce518a5f
L
2187 { "psubusb", { MX, EM } },
2188 { "psubusw", { MX, EM } },
2189 { "pminub", { MX, EM } },
2190 { "pand", { MX, EM } },
2191 { "paddusb", { MX, EM } },
2192 { "paddusw", { MX, EM } },
2193 { "pmaxub", { MX, EM } },
2194 { "pandn", { MX, EM } },
252b5132 2195 /* e0 */
ce518a5f
L
2196 { "pavgb", { MX, EM } },
2197 { "psraw", { MX, EM } },
2198 { "psrad", { MX, EM } },
2199 { "pavgw", { MX, EM } },
2200 { "pmulhuw", { MX, EM } },
2201 { "pmulhw", { MX, EM } },
1ceb70f8
L
2202 { PREFIX_TABLE (PREFIX_0FE6) },
2203 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2204 /* e8 */
ce518a5f
L
2205 { "psubsb", { MX, EM } },
2206 { "psubsw", { MX, EM } },
2207 { "pminsw", { MX, EM } },
2208 { "por", { MX, EM } },
2209 { "paddsb", { MX, EM } },
2210 { "paddsw", { MX, EM } },
2211 { "pmaxsw", { MX, EM } },
2212 { "pxor", { MX, EM } },
252b5132 2213 /* f0 */
1ceb70f8 2214 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2215 { "psllw", { MX, EM } },
2216 { "pslld", { MX, EM } },
2217 { "psllq", { MX, EM } },
2218 { "pmuludq", { MX, EM } },
2219 { "pmaddwd", { MX, EM } },
2220 { "psadbw", { MX, EM } },
1ceb70f8 2221 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2222 /* f8 */
ce518a5f
L
2223 { "psubb", { MX, EM } },
2224 { "psubw", { MX, EM } },
2225 { "psubd", { MX, EM } },
2226 { "psubq", { MX, EM } },
2227 { "paddb", { MX, EM } },
2228 { "paddw", { MX, EM } },
2229 { "paddd", { MX, EM } },
592d1631 2230 { Bad_Opcode },
252b5132
RH
2231};
2232
2233static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2234 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2235 /* ------------------------------- */
2236 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2237 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2238 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2239 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2240 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2241 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2242 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2243 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2244 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2245 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2246 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2247 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2248 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2249 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2250 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2251 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2252 /* ------------------------------- */
2253 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2254};
2255
2256static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2257 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2258 /* ------------------------------- */
252b5132 2259 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2260 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2261 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2262 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2263 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2264 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2265 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2266 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2267 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2268 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2269 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2270 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2271 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2272 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2273 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2274 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2275 /* ------------------------------- */
2276 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2277};
2278
252b5132
RH
2279static char obuf[100];
2280static char *obufp;
ea397f5b 2281static char *mnemonicendp;
252b5132
RH
2282static char scratchbuf[100];
2283static unsigned char *start_codep;
2284static unsigned char *insn_codep;
2285static unsigned char *codep;
f16cd0d5
L
2286static int last_lock_prefix;
2287static int last_repz_prefix;
2288static int last_repnz_prefix;
2289static int last_data_prefix;
2290static int last_addr_prefix;
2291static int last_rex_prefix;
2292static int last_seg_prefix;
2293#define MAX_CODE_LENGTH 15
2294/* We can up to 14 prefixes since the maximum instruction length is
2295 15bytes. */
2296static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2297static disassemble_info *the_info;
7967e09e
L
2298static struct
2299 {
2300 int mod;
7967e09e 2301 int reg;
484c222e 2302 int rm;
7967e09e
L
2303 }
2304modrm;
4bba6815 2305static unsigned char need_modrm;
dfc8cf43
L
2306static struct
2307 {
2308 int scale;
2309 int index;
2310 int base;
2311 }
2312sib;
c0f3af97
L
2313static struct
2314 {
2315 int register_specifier;
2316 int length;
2317 int prefix;
2318 int w;
2319 }
2320vex;
2321static unsigned char need_vex;
2322static unsigned char need_vex_reg;
dae39acc 2323static unsigned char vex_w_done;
252b5132 2324
ea397f5b
L
2325struct op
2326 {
2327 const char *name;
2328 unsigned int len;
2329 };
2330
4bba6815
AM
2331/* If we are accessing mod/rm/reg without need_modrm set, then the
2332 values are stale. Hitting this abort likely indicates that you
2333 need to update onebyte_has_modrm or twobyte_has_modrm. */
2334#define MODRM_CHECK if (!need_modrm) abort ()
2335
d708bcba
AM
2336static const char **names64;
2337static const char **names32;
2338static const char **names16;
2339static const char **names8;
2340static const char **names8rex;
2341static const char **names_seg;
db51cc60
L
2342static const char *index64;
2343static const char *index32;
d708bcba
AM
2344static const char **index16;
2345
2346static const char *intel_names64[] = {
2347 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2348 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2349};
2350static const char *intel_names32[] = {
2351 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2352 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2353};
2354static const char *intel_names16[] = {
2355 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2356 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2357};
2358static const char *intel_names8[] = {
2359 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2360};
2361static const char *intel_names8rex[] = {
2362 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2363 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2364};
2365static const char *intel_names_seg[] = {
2366 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2367};
db51cc60
L
2368static const char *intel_index64 = "riz";
2369static const char *intel_index32 = "eiz";
d708bcba
AM
2370static const char *intel_index16[] = {
2371 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2372};
2373
2374static const char *att_names64[] = {
2375 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2376 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2377};
d708bcba
AM
2378static const char *att_names32[] = {
2379 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2380 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2381};
d708bcba
AM
2382static const char *att_names16[] = {
2383 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2384 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2385};
d708bcba
AM
2386static const char *att_names8[] = {
2387 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2388};
d708bcba
AM
2389static const char *att_names8rex[] = {
2390 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2391 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2392};
d708bcba
AM
2393static const char *att_names_seg[] = {
2394 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2395};
db51cc60
L
2396static const char *att_index64 = "%riz";
2397static const char *att_index32 = "%eiz";
d708bcba
AM
2398static const char *att_index16[] = {
2399 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2400};
2401
b9733481
L
2402static const char **names_mm;
2403static const char *intel_names_mm[] = {
2404 "mm0", "mm1", "mm2", "mm3",
2405 "mm4", "mm5", "mm6", "mm7"
2406};
2407static const char *att_names_mm[] = {
2408 "%mm0", "%mm1", "%mm2", "%mm3",
2409 "%mm4", "%mm5", "%mm6", "%mm7"
2410};
2411
2412static const char **names_xmm;
2413static const char *intel_names_xmm[] = {
2414 "xmm0", "xmm1", "xmm2", "xmm3",
2415 "xmm4", "xmm5", "xmm6", "xmm7",
2416 "xmm8", "xmm9", "xmm10", "xmm11",
2417 "xmm12", "xmm13", "xmm14", "xmm15"
2418};
2419static const char *att_names_xmm[] = {
2420 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2421 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2422 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2423 "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2424};
2425
2426static const char **names_ymm;
2427static const char *intel_names_ymm[] = {
2428 "ymm0", "ymm1", "ymm2", "ymm3",
2429 "ymm4", "ymm5", "ymm6", "ymm7",
2430 "ymm8", "ymm9", "ymm10", "ymm11",
2431 "ymm12", "ymm13", "ymm14", "ymm15"
2432};
2433static const char *att_names_ymm[] = {
2434 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2435 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2436 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2437 "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2438};
2439
1ceb70f8
L
2440static const struct dis386 reg_table[][8] = {
2441 /* REG_80 */
252b5132 2442 {
ce518a5f
L
2443 { "addA", { Eb, Ib } },
2444 { "orA", { Eb, Ib } },
2445 { "adcA", { Eb, Ib } },
2446 { "sbbA", { Eb, Ib } },
2447 { "andA", { Eb, Ib } },
2448 { "subA", { Eb, Ib } },
2449 { "xorA", { Eb, Ib } },
2450 { "cmpA", { Eb, Ib } },
252b5132 2451 },
1ceb70f8 2452 /* REG_81 */
252b5132 2453 {
ce518a5f
L
2454 { "addQ", { Ev, Iv } },
2455 { "orQ", { Ev, Iv } },
2456 { "adcQ", { Ev, Iv } },
2457 { "sbbQ", { Ev, Iv } },
2458 { "andQ", { Ev, Iv } },
2459 { "subQ", { Ev, Iv } },
2460 { "xorQ", { Ev, Iv } },
2461 { "cmpQ", { Ev, Iv } },
252b5132 2462 },
1ceb70f8 2463 /* REG_82 */
252b5132 2464 {
ce518a5f
L
2465 { "addQ", { Ev, sIb } },
2466 { "orQ", { Ev, sIb } },
2467 { "adcQ", { Ev, sIb } },
2468 { "sbbQ", { Ev, sIb } },
2469 { "andQ", { Ev, sIb } },
2470 { "subQ", { Ev, sIb } },
2471 { "xorQ", { Ev, sIb } },
2472 { "cmpQ", { Ev, sIb } },
252b5132 2473 },
1ceb70f8 2474 /* REG_8F */
4e7d34a6
L
2475 {
2476 { "popU", { stackEv } },
c48244a5 2477 { XOP_8F_TABLE (XOP_09) },
592d1631
L
2478 { Bad_Opcode },
2479 { Bad_Opcode },
2480 { Bad_Opcode },
f88c9eb0 2481 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 2482 },
1ceb70f8 2483 /* REG_C0 */
252b5132 2484 {
ce518a5f
L
2485 { "rolA", { Eb, Ib } },
2486 { "rorA", { Eb, Ib } },
2487 { "rclA", { Eb, Ib } },
2488 { "rcrA", { Eb, Ib } },
2489 { "shlA", { Eb, Ib } },
2490 { "shrA", { Eb, Ib } },
592d1631 2491 { Bad_Opcode },
ce518a5f 2492 { "sarA", { Eb, Ib } },
252b5132 2493 },
1ceb70f8 2494 /* REG_C1 */
252b5132 2495 {
ce518a5f
L
2496 { "rolQ", { Ev, Ib } },
2497 { "rorQ", { Ev, Ib } },
2498 { "rclQ", { Ev, Ib } },
2499 { "rcrQ", { Ev, Ib } },
2500 { "shlQ", { Ev, Ib } },
2501 { "shrQ", { Ev, Ib } },
592d1631 2502 { Bad_Opcode },
ce518a5f 2503 { "sarQ", { Ev, Ib } },
252b5132 2504 },
1ceb70f8 2505 /* REG_C6 */
4e7d34a6
L
2506 {
2507 { "movA", { Eb, Ib } },
4e7d34a6 2508 },
1ceb70f8 2509 /* REG_C7 */
4e7d34a6
L
2510 {
2511 { "movQ", { Ev, Iv } },
4e7d34a6 2512 },
1ceb70f8 2513 /* REG_D0 */
252b5132 2514 {
ce518a5f
L
2515 { "rolA", { Eb, I1 } },
2516 { "rorA", { Eb, I1 } },
2517 { "rclA", { Eb, I1 } },
2518 { "rcrA", { Eb, I1 } },
2519 { "shlA", { Eb, I1 } },
2520 { "shrA", { Eb, I1 } },
592d1631 2521 { Bad_Opcode },
ce518a5f 2522 { "sarA", { Eb, I1 } },
252b5132 2523 },
1ceb70f8 2524 /* REG_D1 */
252b5132 2525 {
ce518a5f
L
2526 { "rolQ", { Ev, I1 } },
2527 { "rorQ", { Ev, I1 } },
2528 { "rclQ", { Ev, I1 } },
2529 { "rcrQ", { Ev, I1 } },
2530 { "shlQ", { Ev, I1 } },
2531 { "shrQ", { Ev, I1 } },
592d1631 2532 { Bad_Opcode },
ce518a5f 2533 { "sarQ", { Ev, I1 } },
252b5132 2534 },
1ceb70f8 2535 /* REG_D2 */
252b5132 2536 {
ce518a5f
L
2537 { "rolA", { Eb, CL } },
2538 { "rorA", { Eb, CL } },
2539 { "rclA", { Eb, CL } },
2540 { "rcrA", { Eb, CL } },
2541 { "shlA", { Eb, CL } },
2542 { "shrA", { Eb, CL } },
592d1631 2543 { Bad_Opcode },
ce518a5f 2544 { "sarA", { Eb, CL } },
252b5132 2545 },
1ceb70f8 2546 /* REG_D3 */
252b5132 2547 {
ce518a5f
L
2548 { "rolQ", { Ev, CL } },
2549 { "rorQ", { Ev, CL } },
2550 { "rclQ", { Ev, CL } },
2551 { "rcrQ", { Ev, CL } },
2552 { "shlQ", { Ev, CL } },
2553 { "shrQ", { Ev, CL } },
592d1631 2554 { Bad_Opcode },
ce518a5f 2555 { "sarQ", { Ev, CL } },
252b5132 2556 },
1ceb70f8 2557 /* REG_F6 */
252b5132 2558 {
ce518a5f 2559 { "testA", { Eb, Ib } },
592d1631 2560 { Bad_Opcode },
ce518a5f
L
2561 { "notA", { Eb } },
2562 { "negA", { Eb } },
2563 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2564 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2565 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2566 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 2567 },
1ceb70f8 2568 /* REG_F7 */
252b5132 2569 {
ce518a5f 2570 { "testQ", { Ev, Iv } },
592d1631 2571 { Bad_Opcode },
ce518a5f
L
2572 { "notQ", { Ev } },
2573 { "negQ", { Ev } },
2574 { "mulQ", { Ev } }, /* Don't print the implicit register. */
2575 { "imulQ", { Ev } },
2576 { "divQ", { Ev } },
2577 { "idivQ", { Ev } },
252b5132 2578 },
1ceb70f8 2579 /* REG_FE */
252b5132 2580 {
ce518a5f
L
2581 { "incA", { Eb } },
2582 { "decA", { Eb } },
252b5132 2583 },
1ceb70f8 2584 /* REG_FF */
252b5132 2585 {
ce518a5f
L
2586 { "incQ", { Ev } },
2587 { "decQ", { Ev } },
2588 { "callT", { indirEv } },
2589 { "JcallT", { indirEp } },
2590 { "jmpT", { indirEv } },
2591 { "JjmpT", { indirEp } },
2592 { "pushU", { stackEv } },
592d1631 2593 { Bad_Opcode },
252b5132 2594 },
1ceb70f8 2595 /* REG_0F00 */
252b5132 2596 {
ce518a5f
L
2597 { "sldtD", { Sv } },
2598 { "strD", { Sv } },
2599 { "lldt", { Ew } },
2600 { "ltr", { Ew } },
2601 { "verr", { Ew } },
2602 { "verw", { Ew } },
592d1631
L
2603 { Bad_Opcode },
2604 { Bad_Opcode },
252b5132 2605 },
1ceb70f8 2606 /* REG_0F01 */
252b5132 2607 {
1ceb70f8
L
2608 { MOD_TABLE (MOD_0F01_REG_0) },
2609 { MOD_TABLE (MOD_0F01_REG_1) },
2610 { MOD_TABLE (MOD_0F01_REG_2) },
2611 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 2612 { "smswD", { Sv } },
592d1631 2613 { Bad_Opcode },
ce518a5f 2614 { "lmsw", { Ew } },
1ceb70f8 2615 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 2616 },
b5b1fc4f 2617 /* REG_0F0D */
252b5132 2618 {
4e7d34a6
L
2619 { "prefetch", { Eb } },
2620 { "prefetchw", { Eb } },
252b5132 2621 },
1ceb70f8 2622 /* REG_0F18 */
252b5132 2623 {
1ceb70f8
L
2624 { MOD_TABLE (MOD_0F18_REG_0) },
2625 { MOD_TABLE (MOD_0F18_REG_1) },
2626 { MOD_TABLE (MOD_0F18_REG_2) },
2627 { MOD_TABLE (MOD_0F18_REG_3) },
252b5132 2628 },
1ceb70f8 2629 /* REG_0F71 */
a6bd098c 2630 {
592d1631
L
2631 { Bad_Opcode },
2632 { Bad_Opcode },
1ceb70f8 2633 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 2634 { Bad_Opcode },
1ceb70f8 2635 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 2636 { Bad_Opcode },
1ceb70f8 2637 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 2638 },
1ceb70f8 2639 /* REG_0F72 */
a6bd098c 2640 {
592d1631
L
2641 { Bad_Opcode },
2642 { Bad_Opcode },
1ceb70f8 2643 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 2644 { Bad_Opcode },
1ceb70f8 2645 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 2646 { Bad_Opcode },
1ceb70f8 2647 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 2648 },
1ceb70f8 2649 /* REG_0F73 */
252b5132 2650 {
592d1631
L
2651 { Bad_Opcode },
2652 { Bad_Opcode },
1ceb70f8
L
2653 { MOD_TABLE (MOD_0F73_REG_2) },
2654 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
2655 { Bad_Opcode },
2656 { Bad_Opcode },
1ceb70f8
L
2657 { MOD_TABLE (MOD_0F73_REG_6) },
2658 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 2659 },
1ceb70f8 2660 /* REG_0FA6 */
252b5132 2661 {
4e7d34a6
L
2662 { "montmul", { { OP_0f07, 0 } } },
2663 { "xsha1", { { OP_0f07, 0 } } },
2664 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 2665 },
1ceb70f8 2666 /* REG_0FA7 */
4e7d34a6
L
2667 {
2668 { "xstore-rng", { { OP_0f07, 0 } } },
2669 { "xcrypt-ecb", { { OP_0f07, 0 } } },
2670 { "xcrypt-cbc", { { OP_0f07, 0 } } },
2671 { "xcrypt-ctr", { { OP_0f07, 0 } } },
2672 { "xcrypt-cfb", { { OP_0f07, 0 } } },
2673 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 2674 },
1ceb70f8 2675 /* REG_0FAE */
4e7d34a6 2676 {
1ceb70f8
L
2677 { MOD_TABLE (MOD_0FAE_REG_0) },
2678 { MOD_TABLE (MOD_0FAE_REG_1) },
2679 { MOD_TABLE (MOD_0FAE_REG_2) },
2680 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 2681 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
2682 { MOD_TABLE (MOD_0FAE_REG_5) },
2683 { MOD_TABLE (MOD_0FAE_REG_6) },
2684 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 2685 },
1ceb70f8 2686 /* REG_0FBA */
252b5132 2687 {
592d1631
L
2688 { Bad_Opcode },
2689 { Bad_Opcode },
2690 { Bad_Opcode },
2691 { Bad_Opcode },
4e7d34a6
L
2692 { "btQ", { Ev, Ib } },
2693 { "btsQ", { Ev, Ib } },
2694 { "btrQ", { Ev, Ib } },
2695 { "btcQ", { Ev, Ib } },
c608c12e 2696 },
1ceb70f8 2697 /* REG_0FC7 */
c608c12e 2698 {
592d1631 2699 { Bad_Opcode },
4e7d34a6 2700 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
2701 { Bad_Opcode },
2702 { Bad_Opcode },
2703 { Bad_Opcode },
2704 { Bad_Opcode },
1ceb70f8
L
2705 { MOD_TABLE (MOD_0FC7_REG_6) },
2706 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 2707 },
c0f3af97
L
2708 /* REG_VEX_71 */
2709 {
592d1631
L
2710 { Bad_Opcode },
2711 { Bad_Opcode },
c0f3af97 2712 { MOD_TABLE (MOD_VEX_71_REG_2) },
592d1631 2713 { Bad_Opcode },
c0f3af97 2714 { MOD_TABLE (MOD_VEX_71_REG_4) },
592d1631 2715 { Bad_Opcode },
c0f3af97 2716 { MOD_TABLE (MOD_VEX_71_REG_6) },
c0f3af97
L
2717 },
2718 /* REG_VEX_72 */
2719 {
592d1631
L
2720 { Bad_Opcode },
2721 { Bad_Opcode },
c0f3af97 2722 { MOD_TABLE (MOD_VEX_72_REG_2) },
592d1631 2723 { Bad_Opcode },
c0f3af97 2724 { MOD_TABLE (MOD_VEX_72_REG_4) },
592d1631 2725 { Bad_Opcode },
c0f3af97 2726 { MOD_TABLE (MOD_VEX_72_REG_6) },
c0f3af97
L
2727 },
2728 /* REG_VEX_73 */
2729 {
592d1631
L
2730 { Bad_Opcode },
2731 { Bad_Opcode },
c0f3af97
L
2732 { MOD_TABLE (MOD_VEX_73_REG_2) },
2733 { MOD_TABLE (MOD_VEX_73_REG_3) },
592d1631
L
2734 { Bad_Opcode },
2735 { Bad_Opcode },
c0f3af97
L
2736 { MOD_TABLE (MOD_VEX_73_REG_6) },
2737 { MOD_TABLE (MOD_VEX_73_REG_7) },
2738 },
2739 /* REG_VEX_AE */
2740 {
592d1631
L
2741 { Bad_Opcode },
2742 { Bad_Opcode },
c0f3af97
L
2743 { MOD_TABLE (MOD_VEX_AE_REG_2) },
2744 { MOD_TABLE (MOD_VEX_AE_REG_3) },
c0f3af97 2745 },
f88c9eb0
SP
2746 /* REG_XOP_LWPCB */
2747 {
2748 { "llwpcb", { { OP_LWPCB_E, 0 } } },
2749 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
2750 },
2751 /* REG_XOP_LWP */
2752 {
ce7d077e
SP
2753 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
2754 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 2755 },
4e7d34a6
L
2756};
2757
1ceb70f8
L
2758static const struct dis386 prefix_table[][4] = {
2759 /* PREFIX_90 */
252b5132 2760 {
4e7d34a6
L
2761 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2762 { "pause", { XX } },
2763 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 2764 },
4e7d34a6 2765
1ceb70f8 2766 /* PREFIX_0F10 */
cc0ec051 2767 {
4e7d34a6
L
2768 { "movups", { XM, EXx } },
2769 { "movss", { XM, EXd } },
2770 { "movupd", { XM, EXx } },
2771 { "movsd", { XM, EXq } },
30d1c836 2772 },
4e7d34a6 2773
1ceb70f8 2774 /* PREFIX_0F11 */
30d1c836 2775 {
b6169b20 2776 { "movups", { EXxS, XM } },
fa99fab2 2777 { "movss", { EXdS, XM } },
b6169b20 2778 { "movupd", { EXxS, XM } },
fa99fab2 2779 { "movsd", { EXqS, XM } },
4e7d34a6 2780 },
252b5132 2781
1ceb70f8 2782 /* PREFIX_0F12 */
c608c12e 2783 {
1ceb70f8 2784 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
2785 { "movsldup", { XM, EXx } },
2786 { "movlpd", { XM, EXq } },
2787 { "movddup", { XM, EXq } },
c608c12e 2788 },
4e7d34a6 2789
1ceb70f8 2790 /* PREFIX_0F16 */
c608c12e 2791 {
1ceb70f8 2792 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
2793 { "movshdup", { XM, EXx } },
2794 { "movhpd", { XM, EXq } },
c608c12e 2795 },
4e7d34a6 2796
1ceb70f8 2797 /* PREFIX_0F2A */
c608c12e 2798 {
09335d05 2799 { "cvtpi2ps", { XM, EMCq } },
98b528ac 2800 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 2801 { "cvtpi2pd", { XM, EMCq } },
98b528ac 2802 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 2803 },
4e7d34a6 2804
1ceb70f8 2805 /* PREFIX_0F2B */
c608c12e 2806 {
75c135a8
L
2807 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2808 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2809 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2810 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 2811 },
4e7d34a6 2812
1ceb70f8 2813 /* PREFIX_0F2C */
c608c12e 2814 {
09335d05
L
2815 { "cvttps2pi", { MXC, EXq } },
2816 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 2817 { "cvttpd2pi", { MXC, EXx } },
09335d05 2818 { "cvttsd2siY", { Gv, EXq } },
c608c12e 2819 },
4e7d34a6 2820
1ceb70f8 2821 /* PREFIX_0F2D */
c608c12e 2822 {
4e7d34a6
L
2823 { "cvtps2pi", { MXC, EXq } },
2824 { "cvtss2siY", { Gv, EXd } },
2825 { "cvtpd2pi", { MXC, EXx } },
2826 { "cvtsd2siY", { Gv, EXq } },
c608c12e 2827 },
4e7d34a6 2828
1ceb70f8 2829 /* PREFIX_0F2E */
c608c12e 2830 {
4e7d34a6 2831 { "ucomiss",{ XM, EXd } },
592d1631 2832 { Bad_Opcode },
4e7d34a6 2833 { "ucomisd",{ XM, EXq } },
c608c12e 2834 },
4e7d34a6 2835
1ceb70f8 2836 /* PREFIX_0F2F */
c608c12e 2837 {
4e7d34a6 2838 { "comiss", { XM, EXd } },
592d1631 2839 { Bad_Opcode },
4e7d34a6 2840 { "comisd", { XM, EXq } },
c608c12e 2841 },
4e7d34a6 2842
1ceb70f8 2843 /* PREFIX_0F51 */
c608c12e 2844 {
4e7d34a6
L
2845 { "sqrtps", { XM, EXx } },
2846 { "sqrtss", { XM, EXd } },
2847 { "sqrtpd", { XM, EXx } },
2848 { "sqrtsd", { XM, EXq } },
c608c12e 2849 },
4e7d34a6 2850
1ceb70f8 2851 /* PREFIX_0F52 */
c608c12e 2852 {
4e7d34a6
L
2853 { "rsqrtps",{ XM, EXx } },
2854 { "rsqrtss",{ XM, EXd } },
c608c12e 2855 },
4e7d34a6 2856
1ceb70f8 2857 /* PREFIX_0F53 */
c608c12e 2858 {
4e7d34a6
L
2859 { "rcpps", { XM, EXx } },
2860 { "rcpss", { XM, EXd } },
c608c12e 2861 },
4e7d34a6 2862
1ceb70f8 2863 /* PREFIX_0F58 */
c608c12e 2864 {
4e7d34a6
L
2865 { "addps", { XM, EXx } },
2866 { "addss", { XM, EXd } },
2867 { "addpd", { XM, EXx } },
2868 { "addsd", { XM, EXq } },
c608c12e 2869 },
4e7d34a6 2870
1ceb70f8 2871 /* PREFIX_0F59 */
c608c12e 2872 {
4e7d34a6
L
2873 { "mulps", { XM, EXx } },
2874 { "mulss", { XM, EXd } },
2875 { "mulpd", { XM, EXx } },
2876 { "mulsd", { XM, EXq } },
041bd2e0 2877 },
4e7d34a6 2878
1ceb70f8 2879 /* PREFIX_0F5A */
041bd2e0 2880 {
4e7d34a6
L
2881 { "cvtps2pd", { XM, EXq } },
2882 { "cvtss2sd", { XM, EXd } },
2883 { "cvtpd2ps", { XM, EXx } },
2884 { "cvtsd2ss", { XM, EXq } },
041bd2e0 2885 },
4e7d34a6 2886
1ceb70f8 2887 /* PREFIX_0F5B */
041bd2e0 2888 {
09a2c6cf
L
2889 { "cvtdq2ps", { XM, EXx } },
2890 { "cvttps2dq", { XM, EXx } },
2891 { "cvtps2dq", { XM, EXx } },
041bd2e0 2892 },
4e7d34a6 2893
1ceb70f8 2894 /* PREFIX_0F5C */
041bd2e0 2895 {
4e7d34a6
L
2896 { "subps", { XM, EXx } },
2897 { "subss", { XM, EXd } },
2898 { "subpd", { XM, EXx } },
2899 { "subsd", { XM, EXq } },
041bd2e0 2900 },
4e7d34a6 2901
1ceb70f8 2902 /* PREFIX_0F5D */
041bd2e0 2903 {
4e7d34a6
L
2904 { "minps", { XM, EXx } },
2905 { "minss", { XM, EXd } },
2906 { "minpd", { XM, EXx } },
2907 { "minsd", { XM, EXq } },
041bd2e0 2908 },
4e7d34a6 2909
1ceb70f8 2910 /* PREFIX_0F5E */
041bd2e0 2911 {
4e7d34a6
L
2912 { "divps", { XM, EXx } },
2913 { "divss", { XM, EXd } },
2914 { "divpd", { XM, EXx } },
2915 { "divsd", { XM, EXq } },
041bd2e0 2916 },
4e7d34a6 2917
1ceb70f8 2918 /* PREFIX_0F5F */
041bd2e0 2919 {
4e7d34a6
L
2920 { "maxps", { XM, EXx } },
2921 { "maxss", { XM, EXd } },
2922 { "maxpd", { XM, EXx } },
2923 { "maxsd", { XM, EXq } },
041bd2e0 2924 },
4e7d34a6 2925
1ceb70f8 2926 /* PREFIX_0F60 */
041bd2e0 2927 {
4e7d34a6 2928 { "punpcklbw",{ MX, EMd } },
592d1631 2929 { Bad_Opcode },
4e7d34a6 2930 { "punpcklbw",{ MX, EMx } },
041bd2e0 2931 },
4e7d34a6 2932
1ceb70f8 2933 /* PREFIX_0F61 */
041bd2e0 2934 {
4e7d34a6 2935 { "punpcklwd",{ MX, EMd } },
592d1631 2936 { Bad_Opcode },
4e7d34a6 2937 { "punpcklwd",{ MX, EMx } },
041bd2e0 2938 },
4e7d34a6 2939
1ceb70f8 2940 /* PREFIX_0F62 */
041bd2e0 2941 {
4e7d34a6 2942 { "punpckldq",{ MX, EMd } },
592d1631 2943 { Bad_Opcode },
4e7d34a6 2944 { "punpckldq",{ MX, EMx } },
041bd2e0 2945 },
4e7d34a6 2946
1ceb70f8 2947 /* PREFIX_0F6C */
041bd2e0 2948 {
592d1631
L
2949 { Bad_Opcode },
2950 { Bad_Opcode },
4e7d34a6 2951 { "punpcklqdq", { XM, EXx } },
0f17484f 2952 },
4e7d34a6 2953
1ceb70f8 2954 /* PREFIX_0F6D */
0f17484f 2955 {
592d1631
L
2956 { Bad_Opcode },
2957 { Bad_Opcode },
4e7d34a6 2958 { "punpckhqdq", { XM, EXx } },
041bd2e0 2959 },
4e7d34a6 2960
1ceb70f8 2961 /* PREFIX_0F6F */
ca164297 2962 {
4e7d34a6
L
2963 { "movq", { MX, EM } },
2964 { "movdqu", { XM, EXx } },
2965 { "movdqa", { XM, EXx } },
ca164297 2966 },
4e7d34a6 2967
1ceb70f8 2968 /* PREFIX_0F70 */
4e7d34a6
L
2969 {
2970 { "pshufw", { MX, EM, Ib } },
2971 { "pshufhw",{ XM, EXx, Ib } },
2972 { "pshufd", { XM, EXx, Ib } },
2973 { "pshuflw",{ XM, EXx, Ib } },
2974 },
2975
92fddf8e
L
2976 /* PREFIX_0F73_REG_3 */
2977 {
592d1631
L
2978 { Bad_Opcode },
2979 { Bad_Opcode },
92fddf8e 2980 { "psrldq", { XS, Ib } },
92fddf8e
L
2981 },
2982
2983 /* PREFIX_0F73_REG_7 */
2984 {
592d1631
L
2985 { Bad_Opcode },
2986 { Bad_Opcode },
92fddf8e 2987 { "pslldq", { XS, Ib } },
92fddf8e
L
2988 },
2989
1ceb70f8 2990 /* PREFIX_0F78 */
4e7d34a6
L
2991 {
2992 {"vmread", { Em, Gm } },
592d1631 2993 { Bad_Opcode },
4e7d34a6
L
2994 {"extrq", { XS, Ib, Ib } },
2995 {"insertq", { XM, XS, Ib, Ib } },
2996 },
2997
1ceb70f8 2998 /* PREFIX_0F79 */
4e7d34a6
L
2999 {
3000 {"vmwrite", { Gm, Em } },
592d1631 3001 { Bad_Opcode },
4e7d34a6
L
3002 {"extrq", { XM, XS } },
3003 {"insertq", { XM, XS } },
3004 },
3005
1ceb70f8 3006 /* PREFIX_0F7C */
ca164297 3007 {
592d1631
L
3008 { Bad_Opcode },
3009 { Bad_Opcode },
09a2c6cf
L
3010 { "haddpd", { XM, EXx } },
3011 { "haddps", { XM, EXx } },
ca164297 3012 },
4e7d34a6 3013
1ceb70f8 3014 /* PREFIX_0F7D */
ca164297 3015 {
592d1631
L
3016 { Bad_Opcode },
3017 { Bad_Opcode },
09a2c6cf
L
3018 { "hsubpd", { XM, EXx } },
3019 { "hsubps", { XM, EXx } },
ca164297 3020 },
4e7d34a6 3021
1ceb70f8 3022 /* PREFIX_0F7E */
ca164297 3023 {
4e7d34a6
L
3024 { "movK", { Edq, MX } },
3025 { "movq", { XM, EXq } },
3026 { "movK", { Edq, XM } },
ca164297 3027 },
4e7d34a6 3028
1ceb70f8 3029 /* PREFIX_0F7F */
ca164297 3030 {
b6169b20
L
3031 { "movq", { EMS, MX } },
3032 { "movdqu", { EXxS, XM } },
3033 { "movdqa", { EXxS, XM } },
ca164297 3034 },
4e7d34a6 3035
1ceb70f8 3036 /* PREFIX_0FB8 */
ca164297 3037 {
592d1631 3038 { Bad_Opcode },
4e7d34a6 3039 { "popcntS", { Gv, Ev } },
ca164297 3040 },
4e7d34a6 3041
1ceb70f8 3042 /* PREFIX_0FBD */
050dfa73 3043 {
4e7d34a6
L
3044 { "bsrS", { Gv, Ev } },
3045 { "lzcntS", { Gv, Ev } },
3046 { "bsrS", { Gv, Ev } },
050dfa73
MM
3047 },
3048
1ceb70f8 3049 /* PREFIX_0FC2 */
050dfa73 3050 {
ad19981d
L
3051 { "cmpps", { XM, EXx, CMP } },
3052 { "cmpss", { XM, EXd, CMP } },
3053 { "cmppd", { XM, EXx, CMP } },
3054 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3055 },
246c51aa 3056
4ee52178
L
3057 /* PREFIX_0FC3 */
3058 {
3059 { "movntiS", { Ma, Gv } },
4ee52178
L
3060 },
3061
92fddf8e
L
3062 /* PREFIX_0FC7_REG_6 */
3063 {
3064 { "vmptrld",{ Mq } },
3065 { "vmxon", { Mq } },
3066 { "vmclear",{ Mq } },
92fddf8e
L
3067 },
3068
1ceb70f8 3069 /* PREFIX_0FD0 */
050dfa73 3070 {
592d1631
L
3071 { Bad_Opcode },
3072 { Bad_Opcode },
4e7d34a6
L
3073 { "addsubpd", { XM, EXx } },
3074 { "addsubps", { XM, EXx } },
246c51aa 3075 },
050dfa73 3076
1ceb70f8 3077 /* PREFIX_0FD6 */
050dfa73 3078 {
592d1631 3079 { Bad_Opcode },
4e7d34a6 3080 { "movq2dq",{ XM, MS } },
b6169b20 3081 { "movq", { EXqS, XM } },
4e7d34a6 3082 { "movdq2q",{ MX, XS } },
050dfa73
MM
3083 },
3084
1ceb70f8 3085 /* PREFIX_0FE6 */
7918206c 3086 {
592d1631 3087 { Bad_Opcode },
4e7d34a6
L
3088 { "cvtdq2pd", { XM, EXq } },
3089 { "cvttpd2dq", { XM, EXx } },
3090 { "cvtpd2dq", { XM, EXx } },
7918206c 3091 },
8b38ad71 3092
1ceb70f8 3093 /* PREFIX_0FE7 */
8b38ad71 3094 {
4ee52178 3095 { "movntq", { Mq, MX } },
592d1631 3096 { Bad_Opcode },
75c135a8 3097 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3098 },
3099
1ceb70f8 3100 /* PREFIX_0FF0 */
4e7d34a6 3101 {
592d1631
L
3102 { Bad_Opcode },
3103 { Bad_Opcode },
3104 { Bad_Opcode },
1ceb70f8 3105 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3106 },
3107
1ceb70f8 3108 /* PREFIX_0FF7 */
4e7d34a6
L
3109 {
3110 { "maskmovq", { MX, MS } },
592d1631 3111 { Bad_Opcode },
4e7d34a6 3112 { "maskmovdqu", { XM, XS } },
8b38ad71 3113 },
42903f7f 3114
1ceb70f8 3115 /* PREFIX_0F3810 */
42903f7f 3116 {
592d1631
L
3117 { Bad_Opcode },
3118 { Bad_Opcode },
88a94849 3119 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3120 },
3121
1ceb70f8 3122 /* PREFIX_0F3814 */
42903f7f 3123 {
592d1631
L
3124 { Bad_Opcode },
3125 { Bad_Opcode },
88a94849 3126 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3127 },
3128
1ceb70f8 3129 /* PREFIX_0F3815 */
42903f7f 3130 {
592d1631
L
3131 { Bad_Opcode },
3132 { Bad_Opcode },
09a2c6cf 3133 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3134 },
3135
1ceb70f8 3136 /* PREFIX_0F3817 */
42903f7f 3137 {
592d1631
L
3138 { Bad_Opcode },
3139 { Bad_Opcode },
09a2c6cf 3140 { "ptest", { XM, EXx } },
42903f7f
L
3141 },
3142
1ceb70f8 3143 /* PREFIX_0F3820 */
42903f7f 3144 {
592d1631
L
3145 { Bad_Opcode },
3146 { Bad_Opcode },
8976381e 3147 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3148 },
3149
1ceb70f8 3150 /* PREFIX_0F3821 */
42903f7f 3151 {
592d1631
L
3152 { Bad_Opcode },
3153 { Bad_Opcode },
8976381e 3154 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3155 },
3156
1ceb70f8 3157 /* PREFIX_0F3822 */
42903f7f 3158 {
592d1631
L
3159 { Bad_Opcode },
3160 { Bad_Opcode },
8976381e 3161 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3162 },
3163
1ceb70f8 3164 /* PREFIX_0F3823 */
42903f7f 3165 {
592d1631
L
3166 { Bad_Opcode },
3167 { Bad_Opcode },
8976381e 3168 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3169 },
3170
1ceb70f8 3171 /* PREFIX_0F3824 */
42903f7f 3172 {
592d1631
L
3173 { Bad_Opcode },
3174 { Bad_Opcode },
8976381e 3175 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3176 },
3177
1ceb70f8 3178 /* PREFIX_0F3825 */
42903f7f 3179 {
592d1631
L
3180 { Bad_Opcode },
3181 { Bad_Opcode },
8976381e 3182 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3183 },
3184
1ceb70f8 3185 /* PREFIX_0F3828 */
42903f7f 3186 {
592d1631
L
3187 { Bad_Opcode },
3188 { Bad_Opcode },
09a2c6cf 3189 { "pmuldq", { XM, EXx } },
42903f7f
L
3190 },
3191
1ceb70f8 3192 /* PREFIX_0F3829 */
42903f7f 3193 {
592d1631
L
3194 { Bad_Opcode },
3195 { Bad_Opcode },
09a2c6cf 3196 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3197 },
3198
1ceb70f8 3199 /* PREFIX_0F382A */
42903f7f 3200 {
592d1631
L
3201 { Bad_Opcode },
3202 { Bad_Opcode },
75c135a8 3203 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3204 },
3205
1ceb70f8 3206 /* PREFIX_0F382B */
42903f7f 3207 {
592d1631
L
3208 { Bad_Opcode },
3209 { Bad_Opcode },
09a2c6cf 3210 { "packusdw", { XM, EXx } },
42903f7f
L
3211 },
3212
1ceb70f8 3213 /* PREFIX_0F3830 */
42903f7f 3214 {
592d1631
L
3215 { Bad_Opcode },
3216 { Bad_Opcode },
8976381e 3217 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3218 },
3219
1ceb70f8 3220 /* PREFIX_0F3831 */
42903f7f 3221 {
592d1631
L
3222 { Bad_Opcode },
3223 { Bad_Opcode },
8976381e 3224 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3225 },
3226
1ceb70f8 3227 /* PREFIX_0F3832 */
42903f7f 3228 {
592d1631
L
3229 { Bad_Opcode },
3230 { Bad_Opcode },
8976381e 3231 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3232 },
3233
1ceb70f8 3234 /* PREFIX_0F3833 */
42903f7f 3235 {
592d1631
L
3236 { Bad_Opcode },
3237 { Bad_Opcode },
8976381e 3238 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3239 },
3240
1ceb70f8 3241 /* PREFIX_0F3834 */
42903f7f 3242 {
592d1631
L
3243 { Bad_Opcode },
3244 { Bad_Opcode },
8976381e 3245 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3246 },
3247
1ceb70f8 3248 /* PREFIX_0F3835 */
42903f7f 3249 {
592d1631
L
3250 { Bad_Opcode },
3251 { Bad_Opcode },
8976381e 3252 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3253 },
3254
1ceb70f8 3255 /* PREFIX_0F3837 */
4e7d34a6 3256 {
592d1631
L
3257 { Bad_Opcode },
3258 { Bad_Opcode },
4e7d34a6 3259 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3260 },
3261
1ceb70f8 3262 /* PREFIX_0F3838 */
42903f7f 3263 {
592d1631
L
3264 { Bad_Opcode },
3265 { Bad_Opcode },
09a2c6cf 3266 { "pminsb", { XM, EXx } },
42903f7f
L
3267 },
3268
1ceb70f8 3269 /* PREFIX_0F3839 */
42903f7f 3270 {
592d1631
L
3271 { Bad_Opcode },
3272 { Bad_Opcode },
09a2c6cf 3273 { "pminsd", { XM, EXx } },
42903f7f
L
3274 },
3275
1ceb70f8 3276 /* PREFIX_0F383A */
42903f7f 3277 {
592d1631
L
3278 { Bad_Opcode },
3279 { Bad_Opcode },
09a2c6cf 3280 { "pminuw", { XM, EXx } },
42903f7f
L
3281 },
3282
1ceb70f8 3283 /* PREFIX_0F383B */
42903f7f 3284 {
592d1631
L
3285 { Bad_Opcode },
3286 { Bad_Opcode },
09a2c6cf 3287 { "pminud", { XM, EXx } },
42903f7f
L
3288 },
3289
1ceb70f8 3290 /* PREFIX_0F383C */
42903f7f 3291 {
592d1631
L
3292 { Bad_Opcode },
3293 { Bad_Opcode },
09a2c6cf 3294 { "pmaxsb", { XM, EXx } },
42903f7f
L
3295 },
3296
1ceb70f8 3297 /* PREFIX_0F383D */
42903f7f 3298 {
592d1631
L
3299 { Bad_Opcode },
3300 { Bad_Opcode },
09a2c6cf 3301 { "pmaxsd", { XM, EXx } },
42903f7f
L
3302 },
3303
1ceb70f8 3304 /* PREFIX_0F383E */
42903f7f 3305 {
592d1631
L
3306 { Bad_Opcode },
3307 { Bad_Opcode },
09a2c6cf 3308 { "pmaxuw", { XM, EXx } },
42903f7f
L
3309 },
3310
1ceb70f8 3311 /* PREFIX_0F383F */
42903f7f 3312 {
592d1631
L
3313 { Bad_Opcode },
3314 { Bad_Opcode },
09a2c6cf 3315 { "pmaxud", { XM, EXx } },
42903f7f
L
3316 },
3317
1ceb70f8 3318 /* PREFIX_0F3840 */
42903f7f 3319 {
592d1631
L
3320 { Bad_Opcode },
3321 { Bad_Opcode },
09a2c6cf 3322 { "pmulld", { XM, EXx } },
42903f7f
L
3323 },
3324
1ceb70f8 3325 /* PREFIX_0F3841 */
42903f7f 3326 {
592d1631
L
3327 { Bad_Opcode },
3328 { Bad_Opcode },
09a2c6cf 3329 { "phminposuw", { XM, EXx } },
42903f7f
L
3330 },
3331
f1f8f695
L
3332 /* PREFIX_0F3880 */
3333 {
592d1631
L
3334 { Bad_Opcode },
3335 { Bad_Opcode },
f1f8f695 3336 { "invept", { Gm, Mo } },
f1f8f695
L
3337 },
3338
3339 /* PREFIX_0F3881 */
3340 {
592d1631
L
3341 { Bad_Opcode },
3342 { Bad_Opcode },
f1f8f695 3343 { "invvpid", { Gm, Mo } },
f1f8f695
L
3344 },
3345
c0f3af97
L
3346 /* PREFIX_0F38DB */
3347 {
592d1631
L
3348 { Bad_Opcode },
3349 { Bad_Opcode },
c0f3af97 3350 { "aesimc", { XM, EXx } },
c0f3af97
L
3351 },
3352
3353 /* PREFIX_0F38DC */
3354 {
592d1631
L
3355 { Bad_Opcode },
3356 { Bad_Opcode },
c0f3af97 3357 { "aesenc", { XM, EXx } },
c0f3af97
L
3358 },
3359
3360 /* PREFIX_0F38DD */
3361 {
592d1631
L
3362 { Bad_Opcode },
3363 { Bad_Opcode },
c0f3af97 3364 { "aesenclast", { XM, EXx } },
c0f3af97
L
3365 },
3366
3367 /* PREFIX_0F38DE */
3368 {
592d1631
L
3369 { Bad_Opcode },
3370 { Bad_Opcode },
c0f3af97 3371 { "aesdec", { XM, EXx } },
c0f3af97
L
3372 },
3373
3374 /* PREFIX_0F38DF */
3375 {
592d1631
L
3376 { Bad_Opcode },
3377 { Bad_Opcode },
c0f3af97 3378 { "aesdeclast", { XM, EXx } },
c0f3af97
L
3379 },
3380
1ceb70f8 3381 /* PREFIX_0F38F0 */
4e7d34a6 3382 {
f1f8f695 3383 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 3384 { Bad_Opcode },
f1f8f695 3385 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4e7d34a6
L
3386 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3387 },
3388
1ceb70f8 3389 /* PREFIX_0F38F1 */
4e7d34a6 3390 {
f1f8f695 3391 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 3392 { Bad_Opcode },
f1f8f695 3393 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4e7d34a6
L
3394 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3395 },
3396
1ceb70f8 3397 /* PREFIX_0F3A08 */
42903f7f 3398 {
592d1631
L
3399 { Bad_Opcode },
3400 { Bad_Opcode },
09a2c6cf 3401 { "roundps", { XM, EXx, Ib } },
42903f7f
L
3402 },
3403
1ceb70f8 3404 /* PREFIX_0F3A09 */
42903f7f 3405 {
592d1631
L
3406 { Bad_Opcode },
3407 { Bad_Opcode },
09a2c6cf 3408 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
3409 },
3410
1ceb70f8 3411 /* PREFIX_0F3A0A */
42903f7f 3412 {
592d1631
L
3413 { Bad_Opcode },
3414 { Bad_Opcode },
09335d05 3415 { "roundss", { XM, EXd, Ib } },
42903f7f
L
3416 },
3417
1ceb70f8 3418 /* PREFIX_0F3A0B */
42903f7f 3419 {
592d1631
L
3420 { Bad_Opcode },
3421 { Bad_Opcode },
09335d05 3422 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
3423 },
3424
1ceb70f8 3425 /* PREFIX_0F3A0C */
42903f7f 3426 {
592d1631
L
3427 { Bad_Opcode },
3428 { Bad_Opcode },
09a2c6cf 3429 { "blendps", { XM, EXx, Ib } },
42903f7f
L
3430 },
3431
1ceb70f8 3432 /* PREFIX_0F3A0D */
42903f7f 3433 {
592d1631
L
3434 { Bad_Opcode },
3435 { Bad_Opcode },
09a2c6cf 3436 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
3437 },
3438
1ceb70f8 3439 /* PREFIX_0F3A0E */
42903f7f 3440 {
592d1631
L
3441 { Bad_Opcode },
3442 { Bad_Opcode },
09a2c6cf 3443 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
3444 },
3445
1ceb70f8 3446 /* PREFIX_0F3A14 */
42903f7f 3447 {
592d1631
L
3448 { Bad_Opcode },
3449 { Bad_Opcode },
42903f7f 3450 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
3451 },
3452
1ceb70f8 3453 /* PREFIX_0F3A15 */
42903f7f 3454 {
592d1631
L
3455 { Bad_Opcode },
3456 { Bad_Opcode },
42903f7f 3457 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
3458 },
3459
1ceb70f8 3460 /* PREFIX_0F3A16 */
42903f7f 3461 {
592d1631
L
3462 { Bad_Opcode },
3463 { Bad_Opcode },
42903f7f 3464 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
3465 },
3466
1ceb70f8 3467 /* PREFIX_0F3A17 */
42903f7f 3468 {
592d1631
L
3469 { Bad_Opcode },
3470 { Bad_Opcode },
42903f7f 3471 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
3472 },
3473
1ceb70f8 3474 /* PREFIX_0F3A20 */
42903f7f 3475 {
592d1631
L
3476 { Bad_Opcode },
3477 { Bad_Opcode },
42903f7f 3478 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
3479 },
3480
1ceb70f8 3481 /* PREFIX_0F3A21 */
42903f7f 3482 {
592d1631
L
3483 { Bad_Opcode },
3484 { Bad_Opcode },
8976381e 3485 { "insertps", { XM, EXd, Ib } },
42903f7f
L
3486 },
3487
1ceb70f8 3488 /* PREFIX_0F3A22 */
42903f7f 3489 {
592d1631
L
3490 { Bad_Opcode },
3491 { Bad_Opcode },
42903f7f 3492 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
3493 },
3494
1ceb70f8 3495 /* PREFIX_0F3A40 */
42903f7f 3496 {
592d1631
L
3497 { Bad_Opcode },
3498 { Bad_Opcode },
09a2c6cf 3499 { "dpps", { XM, EXx, Ib } },
42903f7f
L
3500 },
3501
1ceb70f8 3502 /* PREFIX_0F3A41 */
42903f7f 3503 {
592d1631
L
3504 { Bad_Opcode },
3505 { Bad_Opcode },
09a2c6cf 3506 { "dppd", { XM, EXx, Ib } },
42903f7f
L
3507 },
3508
1ceb70f8 3509 /* PREFIX_0F3A42 */
42903f7f 3510 {
592d1631
L
3511 { Bad_Opcode },
3512 { Bad_Opcode },
09a2c6cf 3513 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 3514 },
381d071f 3515
c0f3af97
L
3516 /* PREFIX_0F3A44 */
3517 {
592d1631
L
3518 { Bad_Opcode },
3519 { Bad_Opcode },
c0f3af97 3520 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
3521 },
3522
1ceb70f8 3523 /* PREFIX_0F3A60 */
381d071f 3524 {
592d1631
L
3525 { Bad_Opcode },
3526 { Bad_Opcode },
4e7d34a6 3527 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
3528 },
3529
1ceb70f8 3530 /* PREFIX_0F3A61 */
381d071f 3531 {
592d1631
L
3532 { Bad_Opcode },
3533 { Bad_Opcode },
4e7d34a6 3534 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
3535 },
3536
1ceb70f8 3537 /* PREFIX_0F3A62 */
381d071f 3538 {
592d1631
L
3539 { Bad_Opcode },
3540 { Bad_Opcode },
4e7d34a6 3541 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
3542 },
3543
1ceb70f8 3544 /* PREFIX_0F3A63 */
381d071f 3545 {
592d1631
L
3546 { Bad_Opcode },
3547 { Bad_Opcode },
4e7d34a6 3548 { "pcmpistri", { XM, EXx, Ib } },
381d071f 3549 },
09a2c6cf 3550
c0f3af97 3551 /* PREFIX_0F3ADF */
09a2c6cf 3552 {
592d1631
L
3553 { Bad_Opcode },
3554 { Bad_Opcode },
c0f3af97 3555 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
3556 },
3557
c0f3af97 3558 /* PREFIX_VEX_10 */
09a2c6cf 3559 {
9e30b8e0 3560 { VEX_W_TABLE (VEX_W_10_P_0) },
c0f3af97 3561 { VEX_LEN_TABLE (VEX_LEN_10_P_1) },
9e30b8e0 3562 { VEX_W_TABLE (VEX_W_10_P_2) },
c0f3af97 3563 { VEX_LEN_TABLE (VEX_LEN_10_P_3) },
09a2c6cf
L
3564 },
3565
c0f3af97 3566 /* PREFIX_VEX_11 */
09a2c6cf 3567 {
9e30b8e0 3568 { VEX_W_TABLE (VEX_W_11_P_0) },
c0f3af97 3569 { VEX_LEN_TABLE (VEX_LEN_11_P_1) },
9e30b8e0 3570 { VEX_W_TABLE (VEX_W_11_P_2) },
c0f3af97 3571 { VEX_LEN_TABLE (VEX_LEN_11_P_3) },
09a2c6cf
L
3572 },
3573
c0f3af97 3574 /* PREFIX_VEX_12 */
09a2c6cf 3575 {
c0f3af97 3576 { MOD_TABLE (MOD_VEX_12_PREFIX_0) },
9e30b8e0 3577 { VEX_W_TABLE (VEX_W_12_P_1) },
c0f3af97 3578 { VEX_LEN_TABLE (VEX_LEN_12_P_2) },
9e30b8e0 3579 { VEX_W_TABLE (VEX_W_12_P_3) },
09a2c6cf
L
3580 },
3581
c0f3af97 3582 /* PREFIX_VEX_16 */
09a2c6cf 3583 {
c0f3af97 3584 { MOD_TABLE (MOD_VEX_16_PREFIX_0) },
9e30b8e0 3585 { VEX_W_TABLE (VEX_W_16_P_1) },
c0f3af97 3586 { VEX_LEN_TABLE (VEX_LEN_16_P_2) },
5f754f58 3587 },
7c52e0e8 3588
c0f3af97 3589 /* PREFIX_VEX_2A */
5f754f58 3590 {
592d1631 3591 { Bad_Opcode },
c0f3af97 3592 { VEX_LEN_TABLE (VEX_LEN_2A_P_1) },
592d1631 3593 { Bad_Opcode },
c0f3af97 3594 { VEX_LEN_TABLE (VEX_LEN_2A_P_3) },
5f754f58 3595 },
7c52e0e8 3596
c0f3af97 3597 /* PREFIX_VEX_2C */
5f754f58 3598 {
592d1631 3599 { Bad_Opcode },
c0f3af97 3600 { VEX_LEN_TABLE (VEX_LEN_2C_P_1) },
592d1631 3601 { Bad_Opcode },
c0f3af97 3602 { VEX_LEN_TABLE (VEX_LEN_2C_P_3) },
5f754f58 3603 },
7c52e0e8 3604
c0f3af97 3605 /* PREFIX_VEX_2D */
7c52e0e8 3606 {
592d1631 3607 { Bad_Opcode },
c0f3af97 3608 { VEX_LEN_TABLE (VEX_LEN_2D_P_1) },
592d1631 3609 { Bad_Opcode },
c0f3af97 3610 { VEX_LEN_TABLE (VEX_LEN_2D_P_3) },
7c52e0e8
L
3611 },
3612
c0f3af97 3613 /* PREFIX_VEX_2E */
7c52e0e8 3614 {
c0f3af97 3615 { VEX_LEN_TABLE (VEX_LEN_2E_P_0) },
592d1631 3616 { Bad_Opcode },
c0f3af97 3617 { VEX_LEN_TABLE (VEX_LEN_2E_P_2) },
7c52e0e8
L
3618 },
3619
c0f3af97 3620 /* PREFIX_VEX_2F */
7c52e0e8 3621 {
c0f3af97 3622 { VEX_LEN_TABLE (VEX_LEN_2F_P_0) },
592d1631 3623 { Bad_Opcode },
c0f3af97 3624 { VEX_LEN_TABLE (VEX_LEN_2F_P_2) },
7c52e0e8
L
3625 },
3626
c0f3af97 3627 /* PREFIX_VEX_51 */
7c52e0e8 3628 {
9e30b8e0 3629 { VEX_W_TABLE (VEX_W_51_P_0) },
c0f3af97 3630 { VEX_LEN_TABLE (VEX_LEN_51_P_1) },
9e30b8e0 3631 { VEX_W_TABLE (VEX_W_51_P_2) },
c0f3af97 3632 { VEX_LEN_TABLE (VEX_LEN_51_P_3) },
7c52e0e8
L
3633 },
3634
c0f3af97 3635 /* PREFIX_VEX_52 */
7c52e0e8 3636 {
9e30b8e0 3637 { VEX_W_TABLE (VEX_W_52_P_0) },
c0f3af97 3638 { VEX_LEN_TABLE (VEX_LEN_52_P_1) },
7c52e0e8
L
3639 },
3640
c0f3af97 3641 /* PREFIX_VEX_53 */
7c52e0e8 3642 {
9e30b8e0 3643 { VEX_W_TABLE (VEX_W_53_P_0) },
c0f3af97 3644 { VEX_LEN_TABLE (VEX_LEN_53_P_1) },
7c52e0e8
L
3645 },
3646
c0f3af97 3647 /* PREFIX_VEX_58 */
7c52e0e8 3648 {
9e30b8e0 3649 { VEX_W_TABLE (VEX_W_58_P_0) },
c0f3af97 3650 { VEX_LEN_TABLE (VEX_LEN_58_P_1) },
9e30b8e0 3651 { VEX_W_TABLE (VEX_W_58_P_2) },
c0f3af97 3652 { VEX_LEN_TABLE (VEX_LEN_58_P_3) },
7c52e0e8
L
3653 },
3654
c0f3af97 3655 /* PREFIX_VEX_59 */
7c52e0e8 3656 {
9e30b8e0 3657 { VEX_W_TABLE (VEX_W_59_P_0) },
c0f3af97 3658 { VEX_LEN_TABLE (VEX_LEN_59_P_1) },
9e30b8e0 3659 { VEX_W_TABLE (VEX_W_59_P_2) },
c0f3af97 3660 { VEX_LEN_TABLE (VEX_LEN_59_P_3) },
7c52e0e8
L
3661 },
3662
c0f3af97 3663 /* PREFIX_VEX_5A */
7c52e0e8 3664 {
9e30b8e0 3665 { VEX_W_TABLE (VEX_W_5A_P_0) },
c0f3af97
L
3666 { VEX_LEN_TABLE (VEX_LEN_5A_P_1) },
3667 { "vcvtpd2ps%XY", { XMM, EXx } },
3668 { VEX_LEN_TABLE (VEX_LEN_5A_P_3) },
7c52e0e8
L
3669 },
3670
c0f3af97 3671 /* PREFIX_VEX_5B */
7c52e0e8 3672 {
9e30b8e0
L
3673 { VEX_W_TABLE (VEX_W_5B_P_0) },
3674 { VEX_W_TABLE (VEX_W_5B_P_1) },
3675 { VEX_W_TABLE (VEX_W_5B_P_2) },
7c52e0e8
L
3676 },
3677
c0f3af97 3678 /* PREFIX_VEX_5C */
7c52e0e8 3679 {
9e30b8e0 3680 { VEX_W_TABLE (VEX_W_5C_P_0) },
c0f3af97 3681 { VEX_LEN_TABLE (VEX_LEN_5C_P_1) },
9e30b8e0 3682 { VEX_W_TABLE (VEX_W_5C_P_2) },
c0f3af97 3683 { VEX_LEN_TABLE (VEX_LEN_5C_P_3) },
7c52e0e8
L
3684 },
3685
c0f3af97 3686 /* PREFIX_VEX_5D */
7c52e0e8 3687 {
9e30b8e0 3688 { VEX_W_TABLE (VEX_W_5D_P_0) },
c0f3af97 3689 { VEX_LEN_TABLE (VEX_LEN_5D_P_1) },
9e30b8e0 3690 { VEX_W_TABLE (VEX_W_5D_P_2) },
c0f3af97 3691 { VEX_LEN_TABLE (VEX_LEN_5D_P_3) },
7c52e0e8
L
3692 },
3693
c0f3af97 3694 /* PREFIX_VEX_5E */
7c52e0e8 3695 {
9e30b8e0 3696 { VEX_W_TABLE (VEX_W_5E_P_0) },
c0f3af97 3697 { VEX_LEN_TABLE (VEX_LEN_5E_P_1) },
9e30b8e0 3698 { VEX_W_TABLE (VEX_W_5E_P_2) },
c0f3af97 3699 { VEX_LEN_TABLE (VEX_LEN_5E_P_3) },
7c52e0e8
L
3700 },
3701
c0f3af97 3702 /* PREFIX_VEX_5F */
7c52e0e8 3703 {
9e30b8e0 3704 { VEX_W_TABLE (VEX_W_5F_P_0) },
c0f3af97 3705 { VEX_LEN_TABLE (VEX_LEN_5F_P_1) },
9e30b8e0 3706 { VEX_W_TABLE (VEX_W_5F_P_2) },
c0f3af97 3707 { VEX_LEN_TABLE (VEX_LEN_5F_P_3) },
7c52e0e8
L
3708 },
3709
c0f3af97 3710 /* PREFIX_VEX_60 */
7c52e0e8 3711 {
592d1631
L
3712 { Bad_Opcode },
3713 { Bad_Opcode },
c0f3af97 3714 { VEX_LEN_TABLE (VEX_LEN_60_P_2) },
7c52e0e8
L
3715 },
3716
c0f3af97 3717 /* PREFIX_VEX_61 */
7c52e0e8 3718 {
592d1631
L
3719 { Bad_Opcode },
3720 { Bad_Opcode },
c0f3af97 3721 { VEX_LEN_TABLE (VEX_LEN_61_P_2) },
7c52e0e8
L
3722 },
3723
c0f3af97 3724 /* PREFIX_VEX_62 */
7c52e0e8 3725 {
592d1631
L
3726 { Bad_Opcode },
3727 { Bad_Opcode },
c0f3af97 3728 { VEX_LEN_TABLE (VEX_LEN_62_P_2) },
7c52e0e8
L
3729 },
3730
c0f3af97 3731 /* PREFIX_VEX_63 */
7c52e0e8 3732 {
592d1631
L
3733 { Bad_Opcode },
3734 { Bad_Opcode },
c0f3af97 3735 { VEX_LEN_TABLE (VEX_LEN_63_P_2) },
7c52e0e8
L
3736 },
3737
c0f3af97 3738 /* PREFIX_VEX_64 */
7c52e0e8 3739 {
592d1631
L
3740 { Bad_Opcode },
3741 { Bad_Opcode },
c0f3af97 3742 { VEX_LEN_TABLE (VEX_LEN_64_P_2) },
7c52e0e8
L
3743 },
3744
c0f3af97 3745 /* PREFIX_VEX_65 */
7c52e0e8 3746 {
592d1631
L
3747 { Bad_Opcode },
3748 { Bad_Opcode },
c0f3af97 3749 { VEX_LEN_TABLE (VEX_LEN_65_P_2) },
7c52e0e8
L
3750 },
3751
c0f3af97 3752 /* PREFIX_VEX_66 */
7c52e0e8 3753 {
592d1631
L
3754 { Bad_Opcode },
3755 { Bad_Opcode },
c0f3af97 3756 { VEX_LEN_TABLE (VEX_LEN_66_P_2) },
7c52e0e8 3757 },
6439fc28 3758
c0f3af97 3759 /* PREFIX_VEX_67 */
331d2d0d 3760 {
592d1631
L
3761 { Bad_Opcode },
3762 { Bad_Opcode },
c0f3af97 3763 { VEX_LEN_TABLE (VEX_LEN_67_P_2) },
c0f3af97
L
3764 },
3765
3766 /* PREFIX_VEX_68 */
3767 {
592d1631
L
3768 { Bad_Opcode },
3769 { Bad_Opcode },
c0f3af97 3770 { VEX_LEN_TABLE (VEX_LEN_68_P_2) },
c0f3af97
L
3771 },
3772
3773 /* PREFIX_VEX_69 */
3774 {
592d1631
L
3775 { Bad_Opcode },
3776 { Bad_Opcode },
c0f3af97 3777 { VEX_LEN_TABLE (VEX_LEN_69_P_2) },
c0f3af97
L
3778 },
3779
3780 /* PREFIX_VEX_6A */
3781 {
592d1631
L
3782 { Bad_Opcode },
3783 { Bad_Opcode },
c0f3af97 3784 { VEX_LEN_TABLE (VEX_LEN_6A_P_2) },
c0f3af97
L
3785 },
3786
3787 /* PREFIX_VEX_6B */
3788 {
592d1631
L
3789 { Bad_Opcode },
3790 { Bad_Opcode },
c0f3af97 3791 { VEX_LEN_TABLE (VEX_LEN_6B_P_2) },
c0f3af97
L
3792 },
3793
3794 /* PREFIX_VEX_6C */
3795 {
592d1631
L
3796 { Bad_Opcode },
3797 { Bad_Opcode },
c0f3af97 3798 { VEX_LEN_TABLE (VEX_LEN_6C_P_2) },
c0f3af97
L
3799 },
3800
3801 /* PREFIX_VEX_6D */
3802 {
592d1631
L
3803 { Bad_Opcode },
3804 { Bad_Opcode },
c0f3af97 3805 { VEX_LEN_TABLE (VEX_LEN_6D_P_2) },
c0f3af97
L
3806 },
3807
3808 /* PREFIX_VEX_6E */
3809 {
592d1631
L
3810 { Bad_Opcode },
3811 { Bad_Opcode },
c0f3af97 3812 { VEX_LEN_TABLE (VEX_LEN_6E_P_2) },
c0f3af97
L
3813 },
3814
3815 /* PREFIX_VEX_6F */
3816 {
592d1631 3817 { Bad_Opcode },
9e30b8e0
L
3818 { VEX_W_TABLE (VEX_W_6F_P_1) },
3819 { VEX_W_TABLE (VEX_W_6F_P_2) },
c0f3af97
L
3820 },
3821
3822 /* PREFIX_VEX_70 */
3823 {
592d1631 3824 { Bad_Opcode },
c0f3af97
L
3825 { VEX_LEN_TABLE (VEX_LEN_70_P_1) },
3826 { VEX_LEN_TABLE (VEX_LEN_70_P_2) },
3827 { VEX_LEN_TABLE (VEX_LEN_70_P_3) },
3828 },
3829
3830 /* PREFIX_VEX_71_REG_2 */
3831 {
592d1631
L
3832 { Bad_Opcode },
3833 { Bad_Opcode },
c0f3af97 3834 { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) },
c0f3af97
L
3835 },
3836
3837 /* PREFIX_VEX_71_REG_4 */
3838 {
592d1631
L
3839 { Bad_Opcode },
3840 { Bad_Opcode },
c0f3af97 3841 { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) },
c0f3af97
L
3842 },
3843
3844 /* PREFIX_VEX_71_REG_6 */
3845 {
592d1631
L
3846 { Bad_Opcode },
3847 { Bad_Opcode },
c0f3af97 3848 { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) },
c0f3af97
L
3849 },
3850
3851 /* PREFIX_VEX_72_REG_2 */
3852 {
592d1631
L
3853 { Bad_Opcode },
3854 { Bad_Opcode },
c0f3af97 3855 { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) },
c0f3af97
L
3856 },
3857
3858 /* PREFIX_VEX_72_REG_4 */
3859 {
592d1631
L
3860 { Bad_Opcode },
3861 { Bad_Opcode },
c0f3af97 3862 { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) },
c0f3af97
L
3863 },
3864
3865 /* PREFIX_VEX_72_REG_6 */
3866 {
592d1631
L
3867 { Bad_Opcode },
3868 { Bad_Opcode },
c0f3af97 3869 { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) },
c0f3af97
L
3870 },
3871
3872 /* PREFIX_VEX_73_REG_2 */
3873 {
592d1631
L
3874 { Bad_Opcode },
3875 { Bad_Opcode },
c0f3af97 3876 { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) },
c0f3af97
L
3877 },
3878
3879 /* PREFIX_VEX_73_REG_3 */
3880 {
592d1631
L
3881 { Bad_Opcode },
3882 { Bad_Opcode },
c0f3af97 3883 { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) },
c0f3af97
L
3884 },
3885
3886 /* PREFIX_VEX_73_REG_6 */
3887 {
592d1631
L
3888 { Bad_Opcode },
3889 { Bad_Opcode },
c0f3af97 3890 { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) },
c0f3af97
L
3891 },
3892
3893 /* PREFIX_VEX_73_REG_7 */
3894 {
592d1631
L
3895 { Bad_Opcode },
3896 { Bad_Opcode },
c0f3af97 3897 { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) },
c0f3af97
L
3898 },
3899
3900 /* PREFIX_VEX_74 */
3901 {
592d1631
L
3902 { Bad_Opcode },
3903 { Bad_Opcode },
c0f3af97 3904 { VEX_LEN_TABLE (VEX_LEN_74_P_2) },
c0f3af97
L
3905 },
3906
3907 /* PREFIX_VEX_75 */
3908 {
592d1631
L
3909 { Bad_Opcode },
3910 { Bad_Opcode },
c0f3af97 3911 { VEX_LEN_TABLE (VEX_LEN_75_P_2) },
c0f3af97
L
3912 },
3913
3914 /* PREFIX_VEX_76 */
3915 {
592d1631
L
3916 { Bad_Opcode },
3917 { Bad_Opcode },
c0f3af97 3918 { VEX_LEN_TABLE (VEX_LEN_76_P_2) },
c0f3af97
L
3919 },
3920
3921 /* PREFIX_VEX_77 */
3922 {
9e30b8e0 3923 { VEX_W_TABLE (VEX_W_77_P_0) },
c0f3af97
L
3924 },
3925
3926 /* PREFIX_VEX_7C */
3927 {
592d1631
L
3928 { Bad_Opcode },
3929 { Bad_Opcode },
9e30b8e0
L
3930 { VEX_W_TABLE (VEX_W_7C_P_2) },
3931 { VEX_W_TABLE (VEX_W_7C_P_3) },
c0f3af97
L
3932 },
3933
3934 /* PREFIX_VEX_7D */
3935 {
592d1631
L
3936 { Bad_Opcode },
3937 { Bad_Opcode },
9e30b8e0
L
3938 { VEX_W_TABLE (VEX_W_7D_P_2) },
3939 { VEX_W_TABLE (VEX_W_7D_P_3) },
c0f3af97
L
3940 },
3941
3942 /* PREFIX_VEX_7E */
3943 {
592d1631 3944 { Bad_Opcode },
c0f3af97
L
3945 { VEX_LEN_TABLE (VEX_LEN_7E_P_1) },
3946 { VEX_LEN_TABLE (VEX_LEN_7E_P_2) },
c0f3af97
L
3947 },
3948
3949 /* PREFIX_VEX_7F */
3950 {
592d1631 3951 { Bad_Opcode },
9e30b8e0
L
3952 { VEX_W_TABLE (VEX_W_7F_P_1) },
3953 { VEX_W_TABLE (VEX_W_7F_P_2) },
c0f3af97
L
3954 },
3955
3956 /* PREFIX_VEX_C2 */
3957 {
9e30b8e0 3958 { VEX_W_TABLE (VEX_W_C2_P_0) },
c0f3af97 3959 { VEX_LEN_TABLE (VEX_LEN_C2_P_1) },
9e30b8e0 3960 { VEX_W_TABLE (VEX_W_C2_P_2) },
c0f3af97
L
3961 { VEX_LEN_TABLE (VEX_LEN_C2_P_3) },
3962 },
3963
3964 /* PREFIX_VEX_C4 */
3965 {
592d1631
L
3966 { Bad_Opcode },
3967 { Bad_Opcode },
c0f3af97 3968 { VEX_LEN_TABLE (VEX_LEN_C4_P_2) },
c0f3af97
L
3969 },
3970
3971 /* PREFIX_VEX_C5 */
3972 {
592d1631
L
3973 { Bad_Opcode },
3974 { Bad_Opcode },
c0f3af97 3975 { VEX_LEN_TABLE (VEX_LEN_C5_P_2) },
c0f3af97
L
3976 },
3977
3978 /* PREFIX_VEX_D0 */
3979 {
592d1631
L
3980 { Bad_Opcode },
3981 { Bad_Opcode },
9e30b8e0
L
3982 { VEX_W_TABLE (VEX_W_D0_P_2) },
3983 { VEX_W_TABLE (VEX_W_D0_P_3) },
c0f3af97
L
3984 },
3985
3986 /* PREFIX_VEX_D1 */
3987 {
592d1631
L
3988 { Bad_Opcode },
3989 { Bad_Opcode },
c0f3af97 3990 { VEX_LEN_TABLE (VEX_LEN_D1_P_2) },
c0f3af97
L
3991 },
3992
3993 /* PREFIX_VEX_D2 */
3994 {
592d1631
L
3995 { Bad_Opcode },
3996 { Bad_Opcode },
c0f3af97 3997 { VEX_LEN_TABLE (VEX_LEN_D2_P_2) },
c0f3af97
L
3998 },
3999
4000 /* PREFIX_VEX_D3 */
4001 {
592d1631
L
4002 { Bad_Opcode },
4003 { Bad_Opcode },
c0f3af97 4004 { VEX_LEN_TABLE (VEX_LEN_D3_P_2) },
c0f3af97
L
4005 },
4006
4007 /* PREFIX_VEX_D4 */
4008 {
592d1631
L
4009 { Bad_Opcode },
4010 { Bad_Opcode },
c0f3af97 4011 { VEX_LEN_TABLE (VEX_LEN_D4_P_2) },
c0f3af97
L
4012 },
4013
4014 /* PREFIX_VEX_D5 */
4015 {
592d1631
L
4016 { Bad_Opcode },
4017 { Bad_Opcode },
c0f3af97 4018 { VEX_LEN_TABLE (VEX_LEN_D5_P_2) },
c0f3af97
L
4019 },
4020
4021 /* PREFIX_VEX_D6 */
4022 {
592d1631
L
4023 { Bad_Opcode },
4024 { Bad_Opcode },
c0f3af97 4025 { VEX_LEN_TABLE (VEX_LEN_D6_P_2) },
c0f3af97
L
4026 },
4027
4028 /* PREFIX_VEX_D7 */
4029 {
592d1631
L
4030 { Bad_Opcode },
4031 { Bad_Opcode },
c0f3af97 4032 { MOD_TABLE (MOD_VEX_D7_PREFIX_2) },
c0f3af97
L
4033 },
4034
4035 /* PREFIX_VEX_D8 */
4036 {
592d1631
L
4037 { Bad_Opcode },
4038 { Bad_Opcode },
c0f3af97 4039 { VEX_LEN_TABLE (VEX_LEN_D8_P_2) },
c0f3af97
L
4040 },
4041
4042 /* PREFIX_VEX_D9 */
4043 {
592d1631
L
4044 { Bad_Opcode },
4045 { Bad_Opcode },
c0f3af97 4046 { VEX_LEN_TABLE (VEX_LEN_D9_P_2) },
c0f3af97
L
4047 },
4048
4049 /* PREFIX_VEX_DA */
4050 {
592d1631
L
4051 { Bad_Opcode },
4052 { Bad_Opcode },
c0f3af97 4053 { VEX_LEN_TABLE (VEX_LEN_DA_P_2) },
c0f3af97
L
4054 },
4055
4056 /* PREFIX_VEX_DB */
4057 {
592d1631
L
4058 { Bad_Opcode },
4059 { Bad_Opcode },
c0f3af97 4060 { VEX_LEN_TABLE (VEX_LEN_DB_P_2) },
c0f3af97
L
4061 },
4062
4063 /* PREFIX_VEX_DC */
4064 {
592d1631
L
4065 { Bad_Opcode },
4066 { Bad_Opcode },
c0f3af97 4067 { VEX_LEN_TABLE (VEX_LEN_DC_P_2) },
c0f3af97
L
4068 },
4069
4070 /* PREFIX_VEX_DD */
4071 {
592d1631
L
4072 { Bad_Opcode },
4073 { Bad_Opcode },
c0f3af97 4074 { VEX_LEN_TABLE (VEX_LEN_DD_P_2) },
c0f3af97
L
4075 },
4076
4077 /* PREFIX_VEX_DE */
4078 {
592d1631
L
4079 { Bad_Opcode },
4080 { Bad_Opcode },
c0f3af97 4081 { VEX_LEN_TABLE (VEX_LEN_DE_P_2) },
c0f3af97
L
4082 },
4083
4084 /* PREFIX_VEX_DF */
4085 {
592d1631
L
4086 { Bad_Opcode },
4087 { Bad_Opcode },
c0f3af97 4088 { VEX_LEN_TABLE (VEX_LEN_DF_P_2) },
c0f3af97
L
4089 },
4090
4091 /* PREFIX_VEX_E0 */
4092 {
592d1631
L
4093 { Bad_Opcode },
4094 { Bad_Opcode },
c0f3af97 4095 { VEX_LEN_TABLE (VEX_LEN_E0_P_2) },
c0f3af97
L
4096 },
4097
4098 /* PREFIX_VEX_E1 */
4099 {
592d1631
L
4100 { Bad_Opcode },
4101 { Bad_Opcode },
c0f3af97 4102 { VEX_LEN_TABLE (VEX_LEN_E1_P_2) },
c0f3af97
L
4103 },
4104
4105 /* PREFIX_VEX_E2 */
4106 {
592d1631
L
4107 { Bad_Opcode },
4108 { Bad_Opcode },
c0f3af97 4109 { VEX_LEN_TABLE (VEX_LEN_E2_P_2) },
c0f3af97
L
4110 },
4111
4112 /* PREFIX_VEX_E3 */
4113 {
592d1631
L
4114 { Bad_Opcode },
4115 { Bad_Opcode },
c0f3af97 4116 { VEX_LEN_TABLE (VEX_LEN_E3_P_2) },
c0f3af97
L
4117 },
4118
4119 /* PREFIX_VEX_E4 */
4120 {
592d1631
L
4121 { Bad_Opcode },
4122 { Bad_Opcode },
c0f3af97 4123 { VEX_LEN_TABLE (VEX_LEN_E4_P_2) },
c0f3af97
L
4124 },
4125
4126 /* PREFIX_VEX_E5 */
4127 {
592d1631
L
4128 { Bad_Opcode },
4129 { Bad_Opcode },
c0f3af97 4130 { VEX_LEN_TABLE (VEX_LEN_E5_P_2) },
c0f3af97
L
4131 },
4132
4133 /* PREFIX_VEX_E6 */
4134 {
592d1631 4135 { Bad_Opcode },
9e30b8e0
L
4136 { VEX_W_TABLE (VEX_W_E6_P_1) },
4137 { VEX_W_TABLE (VEX_W_E6_P_2) },
4138 { VEX_W_TABLE (VEX_W_E6_P_3) },
c0f3af97
L
4139 },
4140
4141 /* PREFIX_VEX_E7 */
4142 {
592d1631
L
4143 { Bad_Opcode },
4144 { Bad_Opcode },
c0f3af97 4145 { MOD_TABLE (MOD_VEX_E7_PREFIX_2) },
c0f3af97
L
4146 },
4147
4148 /* PREFIX_VEX_E8 */
4149 {
592d1631
L
4150 { Bad_Opcode },
4151 { Bad_Opcode },
c0f3af97 4152 { VEX_LEN_TABLE (VEX_LEN_E8_P_2) },
c0f3af97
L
4153 },
4154
4155 /* PREFIX_VEX_E9 */
4156 {
592d1631
L
4157 { Bad_Opcode },
4158 { Bad_Opcode },
c0f3af97 4159 { VEX_LEN_TABLE (VEX_LEN_E9_P_2) },
c0f3af97
L
4160 },
4161
4162 /* PREFIX_VEX_EA */
4163 {
592d1631
L
4164 { Bad_Opcode },
4165 { Bad_Opcode },
c0f3af97 4166 { VEX_LEN_TABLE (VEX_LEN_EA_P_2) },
c0f3af97
L
4167 },
4168
4169 /* PREFIX_VEX_EB */
4170 {
592d1631
L
4171 { Bad_Opcode },
4172 { Bad_Opcode },
c0f3af97 4173 { VEX_LEN_TABLE (VEX_LEN_EB_P_2) },
c0f3af97
L
4174 },
4175
4176 /* PREFIX_VEX_EC */
4177 {
592d1631
L
4178 { Bad_Opcode },
4179 { Bad_Opcode },
c0f3af97 4180 { VEX_LEN_TABLE (VEX_LEN_EC_P_2) },
c0f3af97
L
4181 },
4182
4183 /* PREFIX_VEX_ED */
4184 {
592d1631
L
4185 { Bad_Opcode },
4186 { Bad_Opcode },
c0f3af97 4187 { VEX_LEN_TABLE (VEX_LEN_ED_P_2) },
c0f3af97
L
4188 },
4189
4190 /* PREFIX_VEX_EE */
4191 {
592d1631
L
4192 { Bad_Opcode },
4193 { Bad_Opcode },
c0f3af97 4194 { VEX_LEN_TABLE (VEX_LEN_EE_P_2) },
c0f3af97
L
4195 },
4196
4197 /* PREFIX_VEX_EF */
4198 {
592d1631
L
4199 { Bad_Opcode },
4200 { Bad_Opcode },
c0f3af97 4201 { VEX_LEN_TABLE (VEX_LEN_EF_P_2) },
c0f3af97
L
4202 },
4203
4204 /* PREFIX_VEX_F0 */
4205 {
592d1631
L
4206 { Bad_Opcode },
4207 { Bad_Opcode },
4208 { Bad_Opcode },
c0f3af97
L
4209 { MOD_TABLE (MOD_VEX_F0_PREFIX_3) },
4210 },
4211
4212 /* PREFIX_VEX_F1 */
4213 {
592d1631
L
4214 { Bad_Opcode },
4215 { Bad_Opcode },
c0f3af97 4216 { VEX_LEN_TABLE (VEX_LEN_F1_P_2) },
c0f3af97
L
4217 },
4218
4219 /* PREFIX_VEX_F2 */
4220 {
592d1631
L
4221 { Bad_Opcode },
4222 { Bad_Opcode },
c0f3af97 4223 { VEX_LEN_TABLE (VEX_LEN_F2_P_2) },
c0f3af97
L
4224 },
4225
4226 /* PREFIX_VEX_F3 */
4227 {
592d1631
L
4228 { Bad_Opcode },
4229 { Bad_Opcode },
c0f3af97 4230 { VEX_LEN_TABLE (VEX_LEN_F3_P_2) },
c0f3af97
L
4231 },
4232
4233 /* PREFIX_VEX_F4 */
4234 {
592d1631
L
4235 { Bad_Opcode },
4236 { Bad_Opcode },
c0f3af97 4237 { VEX_LEN_TABLE (VEX_LEN_F4_P_2) },
c0f3af97
L
4238 },
4239
4240 /* PREFIX_VEX_F5 */
4241 {
592d1631
L
4242 { Bad_Opcode },
4243 { Bad_Opcode },
c0f3af97 4244 { VEX_LEN_TABLE (VEX_LEN_F5_P_2) },
c0f3af97
L
4245 },
4246
4247 /* PREFIX_VEX_F6 */
4248 {
592d1631
L
4249 { Bad_Opcode },
4250 { Bad_Opcode },
c0f3af97 4251 { VEX_LEN_TABLE (VEX_LEN_F6_P_2) },
c0f3af97
L
4252 },
4253
4254 /* PREFIX_VEX_F7 */
4255 {
592d1631
L
4256 { Bad_Opcode },
4257 { Bad_Opcode },
c0f3af97 4258 { VEX_LEN_TABLE (VEX_LEN_F7_P_2) },
c0f3af97
L
4259 },
4260
4261 /* PREFIX_VEX_F8 */
4262 {
592d1631
L
4263 { Bad_Opcode },
4264 { Bad_Opcode },
c0f3af97 4265 { VEX_LEN_TABLE (VEX_LEN_F8_P_2) },
c0f3af97
L
4266 },
4267
4268 /* PREFIX_VEX_F9 */
4269 {
592d1631
L
4270 { Bad_Opcode },
4271 { Bad_Opcode },
c0f3af97 4272 { VEX_LEN_TABLE (VEX_LEN_F9_P_2) },
c0f3af97
L
4273 },
4274
4275 /* PREFIX_VEX_FA */
4276 {
592d1631
L
4277 { Bad_Opcode },
4278 { Bad_Opcode },
c0f3af97 4279 { VEX_LEN_TABLE (VEX_LEN_FA_P_2) },
c0f3af97
L
4280 },
4281
4282 /* PREFIX_VEX_FB */
4283 {
592d1631
L
4284 { Bad_Opcode },
4285 { Bad_Opcode },
c0f3af97 4286 { VEX_LEN_TABLE (VEX_LEN_FB_P_2) },
c0f3af97
L
4287 },
4288
4289 /* PREFIX_VEX_FC */
4290 {
592d1631
L
4291 { Bad_Opcode },
4292 { Bad_Opcode },
c0f3af97 4293 { VEX_LEN_TABLE (VEX_LEN_FC_P_2) },
c0f3af97
L
4294 },
4295
4296 /* PREFIX_VEX_FD */
4297 {
592d1631
L
4298 { Bad_Opcode },
4299 { Bad_Opcode },
c0f3af97 4300 { VEX_LEN_TABLE (VEX_LEN_FD_P_2) },
c0f3af97
L
4301 },
4302
4303 /* PREFIX_VEX_FE */
4304 {
592d1631
L
4305 { Bad_Opcode },
4306 { Bad_Opcode },
c0f3af97 4307 { VEX_LEN_TABLE (VEX_LEN_FE_P_2) },
c0f3af97
L
4308 },
4309
4310 /* PREFIX_VEX_3800 */
4311 {
592d1631
L
4312 { Bad_Opcode },
4313 { Bad_Opcode },
c0f3af97 4314 { VEX_LEN_TABLE (VEX_LEN_3800_P_2) },
c0f3af97
L
4315 },
4316
4317 /* PREFIX_VEX_3801 */
4318 {
592d1631
L
4319 { Bad_Opcode },
4320 { Bad_Opcode },
c0f3af97 4321 { VEX_LEN_TABLE (VEX_LEN_3801_P_2) },
c0f3af97
L
4322 },
4323
4324 /* PREFIX_VEX_3802 */
4325 {
592d1631
L
4326 { Bad_Opcode },
4327 { Bad_Opcode },
c0f3af97 4328 { VEX_LEN_TABLE (VEX_LEN_3802_P_2) },
c0f3af97
L
4329 },
4330
4331 /* PREFIX_VEX_3803 */
4332 {
592d1631
L
4333 { Bad_Opcode },
4334 { Bad_Opcode },
c0f3af97 4335 { VEX_LEN_TABLE (VEX_LEN_3803_P_2) },
c0f3af97
L
4336 },
4337
4338 /* PREFIX_VEX_3804 */
4339 {
592d1631
L
4340 { Bad_Opcode },
4341 { Bad_Opcode },
c0f3af97 4342 { VEX_LEN_TABLE (VEX_LEN_3804_P_2) },
c0f3af97
L
4343 },
4344
4345 /* PREFIX_VEX_3805 */
4346 {
592d1631
L
4347 { Bad_Opcode },
4348 { Bad_Opcode },
c0f3af97 4349 { VEX_LEN_TABLE (VEX_LEN_3805_P_2) },
c0f3af97
L
4350 },
4351
4352 /* PREFIX_VEX_3806 */
4353 {
592d1631
L
4354 { Bad_Opcode },
4355 { Bad_Opcode },
c0f3af97 4356 { VEX_LEN_TABLE (VEX_LEN_3806_P_2) },
c0f3af97
L
4357 },
4358
4359 /* PREFIX_VEX_3807 */
4360 {
592d1631
L
4361 { Bad_Opcode },
4362 { Bad_Opcode },
c0f3af97 4363 { VEX_LEN_TABLE (VEX_LEN_3807_P_2) },
c0f3af97
L
4364 },
4365
4366 /* PREFIX_VEX_3808 */
4367 {
592d1631
L
4368 { Bad_Opcode },
4369 { Bad_Opcode },
c0f3af97 4370 { VEX_LEN_TABLE (VEX_LEN_3808_P_2) },
c0f3af97
L
4371 },
4372
4373 /* PREFIX_VEX_3809 */
4374 {
592d1631
L
4375 { Bad_Opcode },
4376 { Bad_Opcode },
c0f3af97 4377 { VEX_LEN_TABLE (VEX_LEN_3809_P_2) },
c0f3af97
L
4378 },
4379
4380 /* PREFIX_VEX_380A */
4381 {
592d1631
L
4382 { Bad_Opcode },
4383 { Bad_Opcode },
c0f3af97 4384 { VEX_LEN_TABLE (VEX_LEN_380A_P_2) },
c0f3af97
L
4385 },
4386
4387 /* PREFIX_VEX_380B */
4388 {
592d1631
L
4389 { Bad_Opcode },
4390 { Bad_Opcode },
c0f3af97 4391 { VEX_LEN_TABLE (VEX_LEN_380B_P_2) },
c0f3af97
L
4392 },
4393
4394 /* PREFIX_VEX_380C */
4395 {
592d1631
L
4396 { Bad_Opcode },
4397 { Bad_Opcode },
9e30b8e0 4398 { VEX_W_TABLE (VEX_W_380C_P_2) },
c0f3af97
L
4399 },
4400
4401 /* PREFIX_VEX_380D */
4402 {
592d1631
L
4403 { Bad_Opcode },
4404 { Bad_Opcode },
9e30b8e0 4405 { VEX_W_TABLE (VEX_W_380D_P_2) },
c0f3af97
L
4406 },
4407
4408 /* PREFIX_VEX_380E */
4409 {
592d1631
L
4410 { Bad_Opcode },
4411 { Bad_Opcode },
9e30b8e0 4412 { VEX_W_TABLE (VEX_W_380E_P_2) },
c0f3af97
L
4413 },
4414
4415 /* PREFIX_VEX_380F */
4416 {
592d1631
L
4417 { Bad_Opcode },
4418 { Bad_Opcode },
9e30b8e0 4419 { VEX_W_TABLE (VEX_W_380F_P_2) },
c0f3af97
L
4420 },
4421
4422 /* PREFIX_VEX_3817 */
4423 {
592d1631
L
4424 { Bad_Opcode },
4425 { Bad_Opcode },
9e30b8e0 4426 { VEX_W_TABLE (VEX_W_3817_P_2) },
c0f3af97
L
4427 },
4428
4429 /* PREFIX_VEX_3818 */
4430 {
592d1631
L
4431 { Bad_Opcode },
4432 { Bad_Opcode },
c0f3af97 4433 { MOD_TABLE (MOD_VEX_3818_PREFIX_2) },
c0f3af97
L
4434 },
4435
4436 /* PREFIX_VEX_3819 */
4437 {
592d1631
L
4438 { Bad_Opcode },
4439 { Bad_Opcode },
c0f3af97 4440 { MOD_TABLE (MOD_VEX_3819_PREFIX_2) },
c0f3af97
L
4441 },
4442
4443 /* PREFIX_VEX_381A */
4444 {
592d1631
L
4445 { Bad_Opcode },
4446 { Bad_Opcode },
c0f3af97 4447 { MOD_TABLE (MOD_VEX_381A_PREFIX_2) },
c0f3af97
L
4448 },
4449
4450 /* PREFIX_VEX_381C */
4451 {
592d1631
L
4452 { Bad_Opcode },
4453 { Bad_Opcode },
c0f3af97 4454 { VEX_LEN_TABLE (VEX_LEN_381C_P_2) },
c0f3af97
L
4455 },
4456
4457 /* PREFIX_VEX_381D */
4458 {
592d1631
L
4459 { Bad_Opcode },
4460 { Bad_Opcode },
c0f3af97 4461 { VEX_LEN_TABLE (VEX_LEN_381D_P_2) },
c0f3af97
L
4462 },
4463
4464 /* PREFIX_VEX_381E */
4465 {
592d1631
L
4466 { Bad_Opcode },
4467 { Bad_Opcode },
c0f3af97 4468 { VEX_LEN_TABLE (VEX_LEN_381E_P_2) },
c0f3af97
L
4469 },
4470
4471 /* PREFIX_VEX_3820 */
4472 {
592d1631
L
4473 { Bad_Opcode },
4474 { Bad_Opcode },
c0f3af97 4475 { VEX_LEN_TABLE (VEX_LEN_3820_P_2) },
c0f3af97
L
4476 },
4477
4478 /* PREFIX_VEX_3821 */
4479 {
592d1631
L
4480 { Bad_Opcode },
4481 { Bad_Opcode },
c0f3af97 4482 { VEX_LEN_TABLE (VEX_LEN_3821_P_2) },
c0f3af97
L
4483 },
4484
4485 /* PREFIX_VEX_3822 */
4486 {
592d1631
L
4487 { Bad_Opcode },
4488 { Bad_Opcode },
c0f3af97 4489 { VEX_LEN_TABLE (VEX_LEN_3822_P_2) },
c0f3af97
L
4490 },
4491
4492 /* PREFIX_VEX_3823 */
4493 {
592d1631
L
4494 { Bad_Opcode },
4495 { Bad_Opcode },
c0f3af97 4496 { VEX_LEN_TABLE (VEX_LEN_3823_P_2) },
c0f3af97
L
4497 },
4498
4499 /* PREFIX_VEX_3824 */
4500 {
592d1631
L
4501 { Bad_Opcode },
4502 { Bad_Opcode },
c0f3af97 4503 { VEX_LEN_TABLE (VEX_LEN_3824_P_2) },
c0f3af97
L
4504 },
4505
4506 /* PREFIX_VEX_3825 */
4507 {
592d1631
L
4508 { Bad_Opcode },
4509 { Bad_Opcode },
c0f3af97 4510 { VEX_LEN_TABLE (VEX_LEN_3825_P_2) },
c0f3af97
L
4511 },
4512
4513 /* PREFIX_VEX_3828 */
4514 {
592d1631
L
4515 { Bad_Opcode },
4516 { Bad_Opcode },
c0f3af97 4517 { VEX_LEN_TABLE (VEX_LEN_3828_P_2) },
c0f3af97
L
4518 },
4519
4520 /* PREFIX_VEX_3829 */
4521 {
592d1631
L
4522 { Bad_Opcode },
4523 { Bad_Opcode },
c0f3af97 4524 { VEX_LEN_TABLE (VEX_LEN_3829_P_2) },
c0f3af97
L
4525 },
4526
4527 /* PREFIX_VEX_382A */
4528 {
592d1631
L
4529 { Bad_Opcode },
4530 { Bad_Opcode },
c0f3af97 4531 { MOD_TABLE (MOD_VEX_382A_PREFIX_2) },
c0f3af97
L
4532 },
4533
4534 /* PREFIX_VEX_382B */
4535 {
592d1631
L
4536 { Bad_Opcode },
4537 { Bad_Opcode },
c0f3af97 4538 { VEX_LEN_TABLE (VEX_LEN_382B_P_2) },
c0f3af97
L
4539 },
4540
4541 /* PREFIX_VEX_382C */
4542 {
592d1631
L
4543 { Bad_Opcode },
4544 { Bad_Opcode },
c0f3af97 4545 { MOD_TABLE (MOD_VEX_382C_PREFIX_2) },
c0f3af97
L
4546 },
4547
4548 /* PREFIX_VEX_382D */
4549 {
592d1631
L
4550 { Bad_Opcode },
4551 { Bad_Opcode },
c0f3af97 4552 { MOD_TABLE (MOD_VEX_382D_PREFIX_2) },
c0f3af97
L
4553 },
4554
4555 /* PREFIX_VEX_382E */
4556 {
592d1631
L
4557 { Bad_Opcode },
4558 { Bad_Opcode },
c0f3af97 4559 { MOD_TABLE (MOD_VEX_382E_PREFIX_2) },
c0f3af97
L
4560 },
4561
4562 /* PREFIX_VEX_382F */
4563 {
592d1631
L
4564 { Bad_Opcode },
4565 { Bad_Opcode },
c0f3af97 4566 { MOD_TABLE (MOD_VEX_382F_PREFIX_2) },
c0f3af97
L
4567 },
4568
4569 /* PREFIX_VEX_3830 */
4570 {
592d1631
L
4571 { Bad_Opcode },
4572 { Bad_Opcode },
c0f3af97 4573 { VEX_LEN_TABLE (VEX_LEN_3830_P_2) },
c0f3af97
L
4574 },
4575
4576 /* PREFIX_VEX_3831 */
4577 {
592d1631
L
4578 { Bad_Opcode },
4579 { Bad_Opcode },
c0f3af97 4580 { VEX_LEN_TABLE (VEX_LEN_3831_P_2) },
c0f3af97
L
4581 },
4582
4583 /* PREFIX_VEX_3832 */
4584 {
592d1631
L
4585 { Bad_Opcode },
4586 { Bad_Opcode },
c0f3af97 4587 { VEX_LEN_TABLE (VEX_LEN_3832_P_2) },
c0f3af97
L
4588 },
4589
4590 /* PREFIX_VEX_3833 */
4591 {
592d1631
L
4592 { Bad_Opcode },
4593 { Bad_Opcode },
c0f3af97 4594 { VEX_LEN_TABLE (VEX_LEN_3833_P_2) },
c0f3af97
L
4595 },
4596
4597 /* PREFIX_VEX_3834 */
4598 {
592d1631
L
4599 { Bad_Opcode },
4600 { Bad_Opcode },
c0f3af97 4601 { VEX_LEN_TABLE (VEX_LEN_3834_P_2) },
c0f3af97
L
4602 },
4603
4604 /* PREFIX_VEX_3835 */
4605 {
592d1631
L
4606 { Bad_Opcode },
4607 { Bad_Opcode },
c0f3af97 4608 { VEX_LEN_TABLE (VEX_LEN_3835_P_2) },
c0f3af97
L
4609 },
4610
4611 /* PREFIX_VEX_3837 */
4612 {
592d1631
L
4613 { Bad_Opcode },
4614 { Bad_Opcode },
c0f3af97 4615 { VEX_LEN_TABLE (VEX_LEN_3837_P_2) },
c0f3af97
L
4616 },
4617
4618 /* PREFIX_VEX_3838 */
4619 {
592d1631
L
4620 { Bad_Opcode },
4621 { Bad_Opcode },
c0f3af97 4622 { VEX_LEN_TABLE (VEX_LEN_3838_P_2) },
c0f3af97
L
4623 },
4624
4625 /* PREFIX_VEX_3839 */
4626 {
592d1631
L
4627 { Bad_Opcode },
4628 { Bad_Opcode },
c0f3af97 4629 { VEX_LEN_TABLE (VEX_LEN_3839_P_2) },
c0f3af97
L
4630 },
4631
4632 /* PREFIX_VEX_383A */
4633 {
592d1631
L
4634 { Bad_Opcode },
4635 { Bad_Opcode },
c0f3af97 4636 { VEX_LEN_TABLE (VEX_LEN_383A_P_2) },
c0f3af97
L
4637 },
4638
4639 /* PREFIX_VEX_383B */
4640 {
592d1631
L
4641 { Bad_Opcode },
4642 { Bad_Opcode },
c0f3af97 4643 { VEX_LEN_TABLE (VEX_LEN_383B_P_2) },
c0f3af97
L
4644 },
4645
4646 /* PREFIX_VEX_383C */
4647 {
592d1631
L
4648 { Bad_Opcode },
4649 { Bad_Opcode },
c0f3af97 4650 { VEX_LEN_TABLE (VEX_LEN_383C_P_2) },
c0f3af97
L
4651 },
4652
4653 /* PREFIX_VEX_383D */
4654 {
592d1631
L
4655 { Bad_Opcode },
4656 { Bad_Opcode },
c0f3af97 4657 { VEX_LEN_TABLE (VEX_LEN_383D_P_2) },
c0f3af97
L
4658 },
4659
4660 /* PREFIX_VEX_383E */
4661 {
592d1631
L
4662 { Bad_Opcode },
4663 { Bad_Opcode },
c0f3af97 4664 { VEX_LEN_TABLE (VEX_LEN_383E_P_2) },
c0f3af97
L
4665 },
4666
4667 /* PREFIX_VEX_383F */
4668 {
592d1631
L
4669 { Bad_Opcode },
4670 { Bad_Opcode },
c0f3af97 4671 { VEX_LEN_TABLE (VEX_LEN_383F_P_2) },
c0f3af97
L
4672 },
4673
4674 /* PREFIX_VEX_3840 */
4675 {
592d1631
L
4676 { Bad_Opcode },
4677 { Bad_Opcode },
c0f3af97 4678 { VEX_LEN_TABLE (VEX_LEN_3840_P_2) },
c0f3af97
L
4679 },
4680
4681 /* PREFIX_VEX_3841 */
4682 {
592d1631
L
4683 { Bad_Opcode },
4684 { Bad_Opcode },
c0f3af97 4685 { VEX_LEN_TABLE (VEX_LEN_3841_P_2) },
c0f3af97
L
4686 },
4687
0bfee649 4688 /* PREFIX_VEX_3896 */
a5ff0eb2 4689 {
592d1631
L
4690 { Bad_Opcode },
4691 { Bad_Opcode },
0bfee649 4692 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4693 },
4694
0bfee649 4695 /* PREFIX_VEX_3897 */
a5ff0eb2 4696 {
592d1631
L
4697 { Bad_Opcode },
4698 { Bad_Opcode },
0bfee649 4699 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4700 },
4701
0bfee649 4702 /* PREFIX_VEX_3898 */
a5ff0eb2 4703 {
592d1631
L
4704 { Bad_Opcode },
4705 { Bad_Opcode },
0bfee649 4706 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4707 },
4708
0bfee649 4709 /* PREFIX_VEX_3899 */
a5ff0eb2 4710 {
592d1631
L
4711 { Bad_Opcode },
4712 { Bad_Opcode },
1c480963 4713 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
4714 },
4715
0bfee649 4716 /* PREFIX_VEX_389A */
a5ff0eb2 4717 {
592d1631
L
4718 { Bad_Opcode },
4719 { Bad_Opcode },
0bfee649 4720 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
4721 },
4722
0bfee649 4723 /* PREFIX_VEX_389B */
c0f3af97 4724 {
592d1631
L
4725 { Bad_Opcode },
4726 { Bad_Opcode },
1c480963 4727 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4728 },
4729
0bfee649 4730 /* PREFIX_VEX_389C */
c0f3af97 4731 {
592d1631
L
4732 { Bad_Opcode },
4733 { Bad_Opcode },
0bfee649 4734 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4735 },
4736
0bfee649 4737 /* PREFIX_VEX_389D */
c0f3af97 4738 {
592d1631
L
4739 { Bad_Opcode },
4740 { Bad_Opcode },
1c480963 4741 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4742 },
4743
0bfee649 4744 /* PREFIX_VEX_389E */
c0f3af97 4745 {
592d1631
L
4746 { Bad_Opcode },
4747 { Bad_Opcode },
0bfee649 4748 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
4749 },
4750
0bfee649 4751 /* PREFIX_VEX_389F */
c0f3af97 4752 {
592d1631
L
4753 { Bad_Opcode },
4754 { Bad_Opcode },
1c480963 4755 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4756 },
4757
0bfee649 4758 /* PREFIX_VEX_38A6 */
c0f3af97 4759 {
592d1631
L
4760 { Bad_Opcode },
4761 { Bad_Opcode },
0bfee649 4762 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 4763 { Bad_Opcode },
c0f3af97
L
4764 },
4765
0bfee649 4766 /* PREFIX_VEX_38A7 */
c0f3af97 4767 {
592d1631
L
4768 { Bad_Opcode },
4769 { Bad_Opcode },
0bfee649 4770 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4771 },
4772
0bfee649 4773 /* PREFIX_VEX_38A8 */
c0f3af97 4774 {
592d1631
L
4775 { Bad_Opcode },
4776 { Bad_Opcode },
0bfee649 4777 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4778 },
4779
0bfee649 4780 /* PREFIX_VEX_38A9 */
c0f3af97 4781 {
592d1631
L
4782 { Bad_Opcode },
4783 { Bad_Opcode },
1c480963 4784 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4785 },
4786
0bfee649 4787 /* PREFIX_VEX_38AA */
c0f3af97 4788 {
592d1631
L
4789 { Bad_Opcode },
4790 { Bad_Opcode },
0bfee649 4791 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4792 },
4793
0bfee649 4794 /* PREFIX_VEX_38AB */
c0f3af97 4795 {
592d1631
L
4796 { Bad_Opcode },
4797 { Bad_Opcode },
1c480963 4798 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4799 },
4800
0bfee649 4801 /* PREFIX_VEX_38AC */
c0f3af97 4802 {
592d1631
L
4803 { Bad_Opcode },
4804 { Bad_Opcode },
0bfee649 4805 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4806 },
4807
0bfee649 4808 /* PREFIX_VEX_38AD */
c0f3af97 4809 {
592d1631
L
4810 { Bad_Opcode },
4811 { Bad_Opcode },
1c480963 4812 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4813 },
4814
0bfee649 4815 /* PREFIX_VEX_38AE */
c0f3af97 4816 {
592d1631
L
4817 { Bad_Opcode },
4818 { Bad_Opcode },
0bfee649 4819 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
4820 },
4821
0bfee649 4822 /* PREFIX_VEX_38AF */
c0f3af97 4823 {
592d1631
L
4824 { Bad_Opcode },
4825 { Bad_Opcode },
1c480963 4826 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4827 },
4828
0bfee649 4829 /* PREFIX_VEX_38B6 */
c0f3af97 4830 {
592d1631
L
4831 { Bad_Opcode },
4832 { Bad_Opcode },
0bfee649 4833 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4834 },
4835
0bfee649 4836 /* PREFIX_VEX_38B7 */
c0f3af97 4837 {
592d1631
L
4838 { Bad_Opcode },
4839 { Bad_Opcode },
0bfee649 4840 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4841 },
4842
0bfee649 4843 /* PREFIX_VEX_38B8 */
c0f3af97 4844 {
592d1631
L
4845 { Bad_Opcode },
4846 { Bad_Opcode },
0bfee649 4847 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4848 },
4849
0bfee649 4850 /* PREFIX_VEX_38B9 */
c0f3af97 4851 {
592d1631
L
4852 { Bad_Opcode },
4853 { Bad_Opcode },
1c480963 4854 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4855 },
4856
0bfee649 4857 /* PREFIX_VEX_38BA */
c0f3af97 4858 {
592d1631
L
4859 { Bad_Opcode },
4860 { Bad_Opcode },
0bfee649 4861 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4862 },
4863
0bfee649 4864 /* PREFIX_VEX_38BB */
c0f3af97 4865 {
592d1631
L
4866 { Bad_Opcode },
4867 { Bad_Opcode },
1c480963 4868 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4869 },
4870
0bfee649 4871 /* PREFIX_VEX_38BC */
c0f3af97 4872 {
592d1631
L
4873 { Bad_Opcode },
4874 { Bad_Opcode },
0bfee649 4875 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4876 },
4877
0bfee649 4878 /* PREFIX_VEX_38BD */
c0f3af97 4879 {
592d1631
L
4880 { Bad_Opcode },
4881 { Bad_Opcode },
1c480963 4882 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4883 },
4884
0bfee649 4885 /* PREFIX_VEX_38BE */
c0f3af97 4886 {
592d1631
L
4887 { Bad_Opcode },
4888 { Bad_Opcode },
0bfee649 4889 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
4890 },
4891
0bfee649 4892 /* PREFIX_VEX_38BF */
c0f3af97 4893 {
592d1631
L
4894 { Bad_Opcode },
4895 { Bad_Opcode },
1c480963 4896 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
4897 },
4898
0bfee649 4899 /* PREFIX_VEX_38DB */
c0f3af97 4900 {
592d1631
L
4901 { Bad_Opcode },
4902 { Bad_Opcode },
0bfee649 4903 { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) },
c0f3af97
L
4904 },
4905
0bfee649 4906 /* PREFIX_VEX_38DC */
c0f3af97 4907 {
592d1631
L
4908 { Bad_Opcode },
4909 { Bad_Opcode },
0bfee649 4910 { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) },
c0f3af97
L
4911 },
4912
0bfee649 4913 /* PREFIX_VEX_38DD */
c0f3af97 4914 {
592d1631
L
4915 { Bad_Opcode },
4916 { Bad_Opcode },
0bfee649 4917 { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) },
c0f3af97
L
4918 },
4919
0bfee649 4920 /* PREFIX_VEX_38DE */
c0f3af97 4921 {
592d1631
L
4922 { Bad_Opcode },
4923 { Bad_Opcode },
0bfee649 4924 { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) },
c0f3af97
L
4925 },
4926
0bfee649 4927 /* PREFIX_VEX_38DF */
c0f3af97 4928 {
592d1631
L
4929 { Bad_Opcode },
4930 { Bad_Opcode },
0bfee649 4931 { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) },
c0f3af97
L
4932 },
4933
0bfee649 4934 /* PREFIX_VEX_3A04 */
c0f3af97 4935 {
592d1631
L
4936 { Bad_Opcode },
4937 { Bad_Opcode },
9e30b8e0 4938 { VEX_W_TABLE (VEX_W_3A04_P_2) },
c0f3af97
L
4939 },
4940
0bfee649 4941 /* PREFIX_VEX_3A05 */
c0f3af97 4942 {
592d1631
L
4943 { Bad_Opcode },
4944 { Bad_Opcode },
9e30b8e0 4945 { VEX_W_TABLE (VEX_W_3A05_P_2) },
c0f3af97
L
4946 },
4947
0bfee649 4948 /* PREFIX_VEX_3A06 */
c0f3af97 4949 {
592d1631
L
4950 { Bad_Opcode },
4951 { Bad_Opcode },
0bfee649 4952 { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) },
c0f3af97
L
4953 },
4954
0bfee649 4955 /* PREFIX_VEX_3A08 */
c0f3af97 4956 {
592d1631
L
4957 { Bad_Opcode },
4958 { Bad_Opcode },
9e30b8e0 4959 { VEX_W_TABLE (VEX_W_3A08_P_2) },
c0f3af97
L
4960 },
4961
0bfee649 4962 /* PREFIX_VEX_3A09 */
c0f3af97 4963 {
592d1631
L
4964 { Bad_Opcode },
4965 { Bad_Opcode },
9e30b8e0 4966 { VEX_W_TABLE (VEX_W_3A09_P_2) },
c0f3af97
L
4967 },
4968
0bfee649 4969 /* PREFIX_VEX_3A0A */
c0f3af97 4970 {
592d1631
L
4971 { Bad_Opcode },
4972 { Bad_Opcode },
0bfee649 4973 { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) },
0bfee649
L
4974 },
4975
4976 /* PREFIX_VEX_3A0B */
4977 {
592d1631
L
4978 { Bad_Opcode },
4979 { Bad_Opcode },
0bfee649 4980 { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) },
0bfee649
L
4981 },
4982
4983 /* PREFIX_VEX_3A0C */
4984 {
592d1631
L
4985 { Bad_Opcode },
4986 { Bad_Opcode },
9e30b8e0 4987 { VEX_W_TABLE (VEX_W_3A0C_P_2) },
0bfee649
L
4988 },
4989
4990 /* PREFIX_VEX_3A0D */
4991 {
592d1631
L
4992 { Bad_Opcode },
4993 { Bad_Opcode },
9e30b8e0 4994 { VEX_W_TABLE (VEX_W_3A0D_P_2) },
c0f3af97
L
4995 },
4996
0bfee649
L
4997 /* PREFIX_VEX_3A0E */
4998 {
592d1631
L
4999 { Bad_Opcode },
5000 { Bad_Opcode },
0bfee649 5001 { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) },
0bfee649
L
5002 },
5003
5004 /* PREFIX_VEX_3A0F */
5005 {
592d1631
L
5006 { Bad_Opcode },
5007 { Bad_Opcode },
0bfee649 5008 { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) },
0bfee649
L
5009 },
5010
5011 /* PREFIX_VEX_3A14 */
5012 {
592d1631
L
5013 { Bad_Opcode },
5014 { Bad_Opcode },
0bfee649 5015 { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) },
0bfee649
L
5016 },
5017
5018 /* PREFIX_VEX_3A15 */
5019 {
592d1631
L
5020 { Bad_Opcode },
5021 { Bad_Opcode },
0bfee649 5022 { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) },
0bfee649
L
5023 },
5024
5025 /* PREFIX_VEX_3A16 */
c0f3af97 5026 {
592d1631
L
5027 { Bad_Opcode },
5028 { Bad_Opcode },
0bfee649 5029 { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) },
c0f3af97
L
5030 },
5031
0bfee649 5032 /* PREFIX_VEX_3A17 */
c0f3af97 5033 {
592d1631
L
5034 { Bad_Opcode },
5035 { Bad_Opcode },
0bfee649 5036 { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) },
c0f3af97
L
5037 },
5038
0bfee649 5039 /* PREFIX_VEX_3A18 */
c0f3af97 5040 {
592d1631
L
5041 { Bad_Opcode },
5042 { Bad_Opcode },
0bfee649 5043 { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) },
c0f3af97
L
5044 },
5045
0bfee649 5046 /* PREFIX_VEX_3A19 */
c0f3af97 5047 {
592d1631
L
5048 { Bad_Opcode },
5049 { Bad_Opcode },
0bfee649 5050 { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) },
c0f3af97
L
5051 },
5052
0bfee649 5053 /* PREFIX_VEX_3A20 */
c0f3af97 5054 {
592d1631
L
5055 { Bad_Opcode },
5056 { Bad_Opcode },
0bfee649 5057 { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) },
c0f3af97
L
5058 },
5059
0bfee649 5060 /* PREFIX_VEX_3A21 */
c0f3af97 5061 {
592d1631
L
5062 { Bad_Opcode },
5063 { Bad_Opcode },
0bfee649 5064 { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) },
c0f3af97
L
5065 },
5066
0bfee649
L
5067 /* PREFIX_VEX_3A22 */
5068 {
592d1631
L
5069 { Bad_Opcode },
5070 { Bad_Opcode },
0bfee649 5071 { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) },
0bfee649
L
5072 },
5073
5074 /* PREFIX_VEX_3A40 */
c0f3af97 5075 {
592d1631
L
5076 { Bad_Opcode },
5077 { Bad_Opcode },
9e30b8e0 5078 { VEX_W_TABLE (VEX_W_3A40_P_2) },
c0f3af97
L
5079 },
5080
0bfee649 5081 /* PREFIX_VEX_3A41 */
c0f3af97 5082 {
592d1631
L
5083 { Bad_Opcode },
5084 { Bad_Opcode },
0bfee649 5085 { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) },
c0f3af97
L
5086 },
5087
0bfee649 5088 /* PREFIX_VEX_3A42 */
c0f3af97 5089 {
592d1631
L
5090 { Bad_Opcode },
5091 { Bad_Opcode },
0bfee649 5092 { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) },
c0f3af97
L
5093 },
5094
ce2f5b3c
L
5095 /* PREFIX_VEX_3A44 */
5096 {
592d1631
L
5097 { Bad_Opcode },
5098 { Bad_Opcode },
ce2f5b3c 5099 { VEX_LEN_TABLE (VEX_LEN_3A44_P_2) },
ce2f5b3c
L
5100 },
5101
a683cc34
SP
5102 /* PREFIX_VEX_3A48 */
5103 {
5104 { Bad_Opcode },
5105 { Bad_Opcode },
5106 { VEX_W_TABLE (VEX_W_3A48_P_2) },
5107 },
5108
5109 /* PREFIX_VEX_3A49 */
5110 {
5111 { Bad_Opcode },
5112 { Bad_Opcode },
5113 { VEX_W_TABLE (VEX_W_3A49_P_2) },
5114 },
5115
0bfee649 5116 /* PREFIX_VEX_3A4A */
c0f3af97 5117 {
592d1631
L
5118 { Bad_Opcode },
5119 { Bad_Opcode },
9e30b8e0 5120 { VEX_W_TABLE (VEX_W_3A4A_P_2) },
c0f3af97
L
5121 },
5122
0bfee649 5123 /* PREFIX_VEX_3A4B */
c0f3af97 5124 {
592d1631
L
5125 { Bad_Opcode },
5126 { Bad_Opcode },
9e30b8e0 5127 { VEX_W_TABLE (VEX_W_3A4B_P_2) },
c0f3af97
L
5128 },
5129
0bfee649 5130 /* PREFIX_VEX_3A4C */
c0f3af97 5131 {
592d1631
L
5132 { Bad_Opcode },
5133 { Bad_Opcode },
0bfee649 5134 { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) },
c0f3af97
L
5135 },
5136
922d8de8
DR
5137 /* PREFIX_VEX_3A5C */
5138 {
592d1631
L
5139 { Bad_Opcode },
5140 { Bad_Opcode },
206c2556 5141 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5142 },
5143
5144 /* PREFIX_VEX_3A5D */
5145 {
592d1631
L
5146 { Bad_Opcode },
5147 { Bad_Opcode },
206c2556 5148 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5149 },
5150
5151 /* PREFIX_VEX_3A5E */
5152 {
592d1631
L
5153 { Bad_Opcode },
5154 { Bad_Opcode },
206c2556 5155 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5156 },
5157
5158 /* PREFIX_VEX_3A5F */
5159 {
592d1631
L
5160 { Bad_Opcode },
5161 { Bad_Opcode },
206c2556 5162 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5163 },
5164
0bfee649 5165 /* PREFIX_VEX_3A60 */
c0f3af97 5166 {
592d1631
L
5167 { Bad_Opcode },
5168 { Bad_Opcode },
0bfee649 5169 { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) },
592d1631 5170 { Bad_Opcode },
c0f3af97
L
5171 },
5172
0bfee649 5173 /* PREFIX_VEX_3A61 */
c0f3af97 5174 {
592d1631
L
5175 { Bad_Opcode },
5176 { Bad_Opcode },
0bfee649 5177 { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) },
c0f3af97
L
5178 },
5179
0bfee649 5180 /* PREFIX_VEX_3A62 */
c0f3af97 5181 {
592d1631
L
5182 { Bad_Opcode },
5183 { Bad_Opcode },
0bfee649 5184 { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) },
c0f3af97
L
5185 },
5186
0bfee649 5187 /* PREFIX_VEX_3A63 */
c0f3af97 5188 {
592d1631
L
5189 { Bad_Opcode },
5190 { Bad_Opcode },
0bfee649 5191 { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) },
c0f3af97 5192 },
a5ff0eb2 5193
922d8de8
DR
5194 /* PREFIX_VEX_3A68 */
5195 {
592d1631
L
5196 { Bad_Opcode },
5197 { Bad_Opcode },
206c2556 5198 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5199 },
5200
5201 /* PREFIX_VEX_3A69 */
5202 {
592d1631
L
5203 { Bad_Opcode },
5204 { Bad_Opcode },
206c2556 5205 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5206 },
5207
5208 /* PREFIX_VEX_3A6A */
5209 {
592d1631
L
5210 { Bad_Opcode },
5211 { Bad_Opcode },
922d8de8 5212 { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2) },
922d8de8
DR
5213 },
5214
5215 /* PREFIX_VEX_3A6B */
5216 {
592d1631
L
5217 { Bad_Opcode },
5218 { Bad_Opcode },
922d8de8 5219 { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2) },
922d8de8
DR
5220 },
5221
5222 /* PREFIX_VEX_3A6C */
5223 {
592d1631
L
5224 { Bad_Opcode },
5225 { Bad_Opcode },
206c2556 5226 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5227 },
5228
5229 /* PREFIX_VEX_3A6D */
5230 {
592d1631
L
5231 { Bad_Opcode },
5232 { Bad_Opcode },
206c2556 5233 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5234 },
5235
5236 /* PREFIX_VEX_3A6E */
5237 {
592d1631
L
5238 { Bad_Opcode },
5239 { Bad_Opcode },
922d8de8 5240 { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2) },
922d8de8
DR
5241 },
5242
5243 /* PREFIX_VEX_3A6F */
5244 {
592d1631
L
5245 { Bad_Opcode },
5246 { Bad_Opcode },
922d8de8 5247 { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2) },
922d8de8
DR
5248 },
5249
5250 /* PREFIX_VEX_3A78 */
5251 {
592d1631
L
5252 { Bad_Opcode },
5253 { Bad_Opcode },
206c2556 5254 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5255 },
5256
5257 /* PREFIX_VEX_3A79 */
5258 {
592d1631
L
5259 { Bad_Opcode },
5260 { Bad_Opcode },
206c2556 5261 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5262 },
5263
5264 /* PREFIX_VEX_3A7A */
5265 {
592d1631
L
5266 { Bad_Opcode },
5267 { Bad_Opcode },
922d8de8 5268 { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2) },
922d8de8
DR
5269 },
5270
5271 /* PREFIX_VEX_3A7B */
5272 {
592d1631
L
5273 { Bad_Opcode },
5274 { Bad_Opcode },
922d8de8 5275 { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2) },
922d8de8
DR
5276 },
5277
5278 /* PREFIX_VEX_3A7C */
5279 {
592d1631
L
5280 { Bad_Opcode },
5281 { Bad_Opcode },
206c2556 5282 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 5283 { Bad_Opcode },
922d8de8
DR
5284 },
5285
5286 /* PREFIX_VEX_3A7D */
5287 {
592d1631
L
5288 { Bad_Opcode },
5289 { Bad_Opcode },
206c2556 5290 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
5291 },
5292
5293 /* PREFIX_VEX_3A7E */
5294 {
592d1631
L
5295 { Bad_Opcode },
5296 { Bad_Opcode },
922d8de8 5297 { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2) },
922d8de8
DR
5298 },
5299
5300 /* PREFIX_VEX_3A7F */
5301 {
592d1631
L
5302 { Bad_Opcode },
5303 { Bad_Opcode },
922d8de8 5304 { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) },
922d8de8
DR
5305 },
5306
a5ff0eb2
L
5307 /* PREFIX_VEX_3ADF */
5308 {
592d1631
L
5309 { Bad_Opcode },
5310 { Bad_Opcode },
a5ff0eb2 5311 { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) },
a5ff0eb2 5312 },
c0f3af97
L
5313};
5314
5315static const struct dis386 x86_64_table[][2] = {
5316 /* X86_64_06 */
5317 {
5318 { "push{T|}", { es } },
c0f3af97
L
5319 },
5320
5321 /* X86_64_07 */
5322 {
5323 { "pop{T|}", { es } },
c0f3af97
L
5324 },
5325
5326 /* X86_64_0D */
5327 {
5328 { "push{T|}", { cs } },
c0f3af97
L
5329 },
5330
5331 /* X86_64_16 */
5332 {
5333 { "push{T|}", { ss } },
c0f3af97
L
5334 },
5335
5336 /* X86_64_17 */
5337 {
5338 { "pop{T|}", { ss } },
c0f3af97
L
5339 },
5340
5341 /* X86_64_1E */
5342 {
5343 { "push{T|}", { ds } },
c0f3af97
L
5344 },
5345
5346 /* X86_64_1F */
5347 {
5348 { "pop{T|}", { ds } },
c0f3af97
L
5349 },
5350
5351 /* X86_64_27 */
5352 {
5353 { "daa", { XX } },
c0f3af97
L
5354 },
5355
5356 /* X86_64_2F */
5357 {
5358 { "das", { XX } },
c0f3af97
L
5359 },
5360
5361 /* X86_64_37 */
5362 {
5363 { "aaa", { XX } },
c0f3af97
L
5364 },
5365
5366 /* X86_64_3F */
5367 {
5368 { "aas", { XX } },
c0f3af97
L
5369 },
5370
5371 /* X86_64_60 */
5372 {
5373 { "pusha{P|}", { XX } },
c0f3af97
L
5374 },
5375
5376 /* X86_64_61 */
5377 {
5378 { "popa{P|}", { XX } },
c0f3af97
L
5379 },
5380
5381 /* X86_64_62 */
5382 {
5383 { MOD_TABLE (MOD_62_32BIT) },
c0f3af97
L
5384 },
5385
5386 /* X86_64_63 */
5387 {
5388 { "arpl", { Ew, Gw } },
5389 { "movs{lq|xd}", { Gv, Ed } },
5390 },
5391
5392 /* X86_64_6D */
5393 {
5394 { "ins{R|}", { Yzr, indirDX } },
5395 { "ins{G|}", { Yzr, indirDX } },
5396 },
5397
5398 /* X86_64_6F */
5399 {
5400 { "outs{R|}", { indirDXr, Xz } },
5401 { "outs{G|}", { indirDXr, Xz } },
5402 },
5403
5404 /* X86_64_9A */
5405 {
5406 { "Jcall{T|}", { Ap } },
c0f3af97
L
5407 },
5408
5409 /* X86_64_C4 */
5410 {
5411 { MOD_TABLE (MOD_C4_32BIT) },
5412 { VEX_C4_TABLE (VEX_0F) },
5413 },
5414
5415 /* X86_64_C5 */
5416 {
5417 { MOD_TABLE (MOD_C5_32BIT) },
5418 { VEX_C5_TABLE (VEX_0F) },
5419 },
5420
5421 /* X86_64_CE */
5422 {
5423 { "into", { XX } },
c0f3af97
L
5424 },
5425
5426 /* X86_64_D4 */
5427 {
5428 { "aam", { sIb } },
c0f3af97
L
5429 },
5430
5431 /* X86_64_D5 */
5432 {
5433 { "aad", { sIb } },
c0f3af97
L
5434 },
5435
5436 /* X86_64_EA */
5437 {
5438 { "Jjmp{T|}", { Ap } },
c0f3af97
L
5439 },
5440
5441 /* X86_64_0F01_REG_0 */
5442 {
5443 { "sgdt{Q|IQ}", { M } },
5444 { "sgdt", { M } },
5445 },
5446
5447 /* X86_64_0F01_REG_1 */
5448 {
5449 { "sidt{Q|IQ}", { M } },
5450 { "sidt", { M } },
5451 },
5452
5453 /* X86_64_0F01_REG_2 */
5454 {
5455 { "lgdt{Q|Q}", { M } },
5456 { "lgdt", { M } },
5457 },
5458
5459 /* X86_64_0F01_REG_3 */
5460 {
5461 { "lidt{Q|Q}", { M } },
5462 { "lidt", { M } },
5463 },
5464};
5465
5466static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
5467
5468 /* THREE_BYTE_0F38 */
c0f3af97
L
5469 {
5470 /* 00 */
c1e679ec
DR
5471 { "pshufb", { MX, EM } },
5472 { "phaddw", { MX, EM } },
5473 { "phaddd", { MX, EM } },
5474 { "phaddsw", { MX, EM } },
5475 { "pmaddubsw", { MX, EM } },
5476 { "phsubw", { MX, EM } },
5477 { "phsubd", { MX, EM } },
5478 { "phsubsw", { MX, EM } },
c0f3af97 5479 /* 08 */
c1e679ec
DR
5480 { "psignb", { MX, EM } },
5481 { "psignw", { MX, EM } },
5482 { "psignd", { MX, EM } },
5483 { "pmulhrsw", { MX, EM } },
592d1631
L
5484 { Bad_Opcode },
5485 { Bad_Opcode },
5486 { Bad_Opcode },
5487 { Bad_Opcode },
f88c9eb0
SP
5488 /* 10 */
5489 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
5490 { Bad_Opcode },
5491 { Bad_Opcode },
5492 { Bad_Opcode },
f88c9eb0
SP
5493 { PREFIX_TABLE (PREFIX_0F3814) },
5494 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 5495 { Bad_Opcode },
f88c9eb0
SP
5496 { PREFIX_TABLE (PREFIX_0F3817) },
5497 /* 18 */
592d1631
L
5498 { Bad_Opcode },
5499 { Bad_Opcode },
5500 { Bad_Opcode },
5501 { Bad_Opcode },
f88c9eb0
SP
5502 { "pabsb", { MX, EM } },
5503 { "pabsw", { MX, EM } },
5504 { "pabsd", { MX, EM } },
592d1631 5505 { Bad_Opcode },
f88c9eb0
SP
5506 /* 20 */
5507 { PREFIX_TABLE (PREFIX_0F3820) },
5508 { PREFIX_TABLE (PREFIX_0F3821) },
5509 { PREFIX_TABLE (PREFIX_0F3822) },
5510 { PREFIX_TABLE (PREFIX_0F3823) },
5511 { PREFIX_TABLE (PREFIX_0F3824) },
5512 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
5513 { Bad_Opcode },
5514 { Bad_Opcode },
f88c9eb0
SP
5515 /* 28 */
5516 { PREFIX_TABLE (PREFIX_0F3828) },
5517 { PREFIX_TABLE (PREFIX_0F3829) },
5518 { PREFIX_TABLE (PREFIX_0F382A) },
5519 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
5520 { Bad_Opcode },
5521 { Bad_Opcode },
5522 { Bad_Opcode },
5523 { Bad_Opcode },
f88c9eb0
SP
5524 /* 30 */
5525 { PREFIX_TABLE (PREFIX_0F3830) },
5526 { PREFIX_TABLE (PREFIX_0F3831) },
5527 { PREFIX_TABLE (PREFIX_0F3832) },
5528 { PREFIX_TABLE (PREFIX_0F3833) },
5529 { PREFIX_TABLE (PREFIX_0F3834) },
5530 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 5531 { Bad_Opcode },
f88c9eb0
SP
5532 { PREFIX_TABLE (PREFIX_0F3837) },
5533 /* 38 */
5534 { PREFIX_TABLE (PREFIX_0F3838) },
5535 { PREFIX_TABLE (PREFIX_0F3839) },
5536 { PREFIX_TABLE (PREFIX_0F383A) },
5537 { PREFIX_TABLE (PREFIX_0F383B) },
5538 { PREFIX_TABLE (PREFIX_0F383C) },
5539 { PREFIX_TABLE (PREFIX_0F383D) },
5540 { PREFIX_TABLE (PREFIX_0F383E) },
5541 { PREFIX_TABLE (PREFIX_0F383F) },
5542 /* 40 */
5543 { PREFIX_TABLE (PREFIX_0F3840) },
5544 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
5545 { Bad_Opcode },
5546 { Bad_Opcode },
5547 { Bad_Opcode },
5548 { Bad_Opcode },
5549 { Bad_Opcode },
5550 { Bad_Opcode },
f88c9eb0 5551 /* 48 */
592d1631
L
5552 { Bad_Opcode },
5553 { Bad_Opcode },
5554 { Bad_Opcode },
5555 { Bad_Opcode },
5556 { Bad_Opcode },
5557 { Bad_Opcode },
5558 { Bad_Opcode },
5559 { Bad_Opcode },
f88c9eb0 5560 /* 50 */
592d1631
L
5561 { Bad_Opcode },
5562 { Bad_Opcode },
5563 { Bad_Opcode },
5564 { Bad_Opcode },
5565 { Bad_Opcode },
5566 { Bad_Opcode },
5567 { Bad_Opcode },
5568 { Bad_Opcode },
f88c9eb0 5569 /* 58 */
592d1631
L
5570 { Bad_Opcode },
5571 { Bad_Opcode },
5572 { Bad_Opcode },
5573 { Bad_Opcode },
5574 { Bad_Opcode },
5575 { Bad_Opcode },
5576 { Bad_Opcode },
5577 { Bad_Opcode },
f88c9eb0 5578 /* 60 */
592d1631
L
5579 { Bad_Opcode },
5580 { Bad_Opcode },
5581 { Bad_Opcode },
5582 { Bad_Opcode },
5583 { Bad_Opcode },
5584 { Bad_Opcode },
5585 { Bad_Opcode },
5586 { Bad_Opcode },
f88c9eb0 5587 /* 68 */
592d1631
L
5588 { Bad_Opcode },
5589 { Bad_Opcode },
5590 { Bad_Opcode },
5591 { Bad_Opcode },
5592 { Bad_Opcode },
5593 { Bad_Opcode },
5594 { Bad_Opcode },
5595 { Bad_Opcode },
f88c9eb0 5596 /* 70 */
592d1631
L
5597 { Bad_Opcode },
5598 { Bad_Opcode },
5599 { Bad_Opcode },
5600 { Bad_Opcode },
5601 { Bad_Opcode },
5602 { Bad_Opcode },
5603 { Bad_Opcode },
5604 { Bad_Opcode },
f88c9eb0 5605 /* 78 */
592d1631
L
5606 { Bad_Opcode },
5607 { Bad_Opcode },
5608 { Bad_Opcode },
5609 { Bad_Opcode },
5610 { Bad_Opcode },
5611 { Bad_Opcode },
5612 { Bad_Opcode },
5613 { Bad_Opcode },
f88c9eb0
SP
5614 /* 80 */
5615 { PREFIX_TABLE (PREFIX_0F3880) },
5616 { PREFIX_TABLE (PREFIX_0F3881) },
592d1631
L
5617 { Bad_Opcode },
5618 { Bad_Opcode },
5619 { Bad_Opcode },
5620 { Bad_Opcode },
5621 { Bad_Opcode },
5622 { Bad_Opcode },
f88c9eb0 5623 /* 88 */
592d1631
L
5624 { Bad_Opcode },
5625 { Bad_Opcode },
5626 { Bad_Opcode },
5627 { Bad_Opcode },
5628 { Bad_Opcode },
5629 { Bad_Opcode },
5630 { Bad_Opcode },
5631 { Bad_Opcode },
f88c9eb0 5632 /* 90 */
592d1631
L
5633 { Bad_Opcode },
5634 { Bad_Opcode },
5635 { Bad_Opcode },
5636 { Bad_Opcode },
5637 { Bad_Opcode },
5638 { Bad_Opcode },
5639 { Bad_Opcode },
5640 { Bad_Opcode },
f88c9eb0 5641 /* 98 */
592d1631
L
5642 { Bad_Opcode },
5643 { Bad_Opcode },
5644 { Bad_Opcode },
5645 { Bad_Opcode },
5646 { Bad_Opcode },
5647 { Bad_Opcode },
5648 { Bad_Opcode },
5649 { Bad_Opcode },
f88c9eb0 5650 /* a0 */
592d1631
L
5651 { Bad_Opcode },
5652 { Bad_Opcode },
5653 { Bad_Opcode },
5654 { Bad_Opcode },
5655 { Bad_Opcode },
5656 { Bad_Opcode },
5657 { Bad_Opcode },
5658 { Bad_Opcode },
f88c9eb0 5659 /* a8 */
592d1631
L
5660 { Bad_Opcode },
5661 { Bad_Opcode },
5662 { Bad_Opcode },
5663 { Bad_Opcode },
5664 { Bad_Opcode },
5665 { Bad_Opcode },
5666 { Bad_Opcode },
5667 { Bad_Opcode },
f88c9eb0 5668 /* b0 */
592d1631
L
5669 { Bad_Opcode },
5670 { Bad_Opcode },
5671 { Bad_Opcode },
5672 { Bad_Opcode },
5673 { Bad_Opcode },
5674 { Bad_Opcode },
5675 { Bad_Opcode },
5676 { Bad_Opcode },
f88c9eb0 5677 /* b8 */
592d1631
L
5678 { Bad_Opcode },
5679 { Bad_Opcode },
5680 { Bad_Opcode },
5681 { Bad_Opcode },
5682 { Bad_Opcode },
5683 { Bad_Opcode },
5684 { Bad_Opcode },
5685 { Bad_Opcode },
f88c9eb0 5686 /* c0 */
592d1631
L
5687 { Bad_Opcode },
5688 { Bad_Opcode },
5689 { Bad_Opcode },
5690 { Bad_Opcode },
5691 { Bad_Opcode },
5692 { Bad_Opcode },
5693 { Bad_Opcode },
5694 { Bad_Opcode },
f88c9eb0 5695 /* c8 */
592d1631
L
5696 { Bad_Opcode },
5697 { Bad_Opcode },
5698 { Bad_Opcode },
5699 { Bad_Opcode },
5700 { Bad_Opcode },
5701 { Bad_Opcode },
5702 { Bad_Opcode },
5703 { Bad_Opcode },
f88c9eb0 5704 /* d0 */
592d1631
L
5705 { Bad_Opcode },
5706 { Bad_Opcode },
5707 { Bad_Opcode },
5708 { Bad_Opcode },
5709 { Bad_Opcode },
5710 { Bad_Opcode },
5711 { Bad_Opcode },
5712 { Bad_Opcode },
f88c9eb0 5713 /* d8 */
592d1631
L
5714 { Bad_Opcode },
5715 { Bad_Opcode },
5716 { Bad_Opcode },
f88c9eb0
SP
5717 { PREFIX_TABLE (PREFIX_0F38DB) },
5718 { PREFIX_TABLE (PREFIX_0F38DC) },
5719 { PREFIX_TABLE (PREFIX_0F38DD) },
5720 { PREFIX_TABLE (PREFIX_0F38DE) },
5721 { PREFIX_TABLE (PREFIX_0F38DF) },
5722 /* e0 */
592d1631
L
5723 { Bad_Opcode },
5724 { Bad_Opcode },
5725 { Bad_Opcode },
5726 { Bad_Opcode },
5727 { Bad_Opcode },
5728 { Bad_Opcode },
5729 { Bad_Opcode },
5730 { Bad_Opcode },
f88c9eb0 5731 /* e8 */
592d1631
L
5732 { Bad_Opcode },
5733 { Bad_Opcode },
5734 { Bad_Opcode },
5735 { Bad_Opcode },
5736 { Bad_Opcode },
5737 { Bad_Opcode },
5738 { Bad_Opcode },
5739 { Bad_Opcode },
f88c9eb0
SP
5740 /* f0 */
5741 { PREFIX_TABLE (PREFIX_0F38F0) },
5742 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
5743 { Bad_Opcode },
5744 { Bad_Opcode },
5745 { Bad_Opcode },
5746 { Bad_Opcode },
5747 { Bad_Opcode },
5748 { Bad_Opcode },
f88c9eb0 5749 /* f8 */
592d1631
L
5750 { Bad_Opcode },
5751 { Bad_Opcode },
5752 { Bad_Opcode },
5753 { Bad_Opcode },
5754 { Bad_Opcode },
5755 { Bad_Opcode },
5756 { Bad_Opcode },
5757 { Bad_Opcode },
f88c9eb0
SP
5758 },
5759 /* THREE_BYTE_0F3A */
5760 {
5761 /* 00 */
592d1631
L
5762 { Bad_Opcode },
5763 { Bad_Opcode },
5764 { Bad_Opcode },
5765 { Bad_Opcode },
5766 { Bad_Opcode },
5767 { Bad_Opcode },
5768 { Bad_Opcode },
5769 { Bad_Opcode },
f88c9eb0
SP
5770 /* 08 */
5771 { PREFIX_TABLE (PREFIX_0F3A08) },
5772 { PREFIX_TABLE (PREFIX_0F3A09) },
5773 { PREFIX_TABLE (PREFIX_0F3A0A) },
5774 { PREFIX_TABLE (PREFIX_0F3A0B) },
5775 { PREFIX_TABLE (PREFIX_0F3A0C) },
5776 { PREFIX_TABLE (PREFIX_0F3A0D) },
5777 { PREFIX_TABLE (PREFIX_0F3A0E) },
5778 { "palignr", { MX, EM, Ib } },
5779 /* 10 */
592d1631
L
5780 { Bad_Opcode },
5781 { Bad_Opcode },
5782 { Bad_Opcode },
5783 { Bad_Opcode },
f88c9eb0
SP
5784 { PREFIX_TABLE (PREFIX_0F3A14) },
5785 { PREFIX_TABLE (PREFIX_0F3A15) },
5786 { PREFIX_TABLE (PREFIX_0F3A16) },
5787 { PREFIX_TABLE (PREFIX_0F3A17) },
5788 /* 18 */
592d1631
L
5789 { Bad_Opcode },
5790 { Bad_Opcode },
5791 { Bad_Opcode },
5792 { Bad_Opcode },
5793 { Bad_Opcode },
5794 { Bad_Opcode },
5795 { Bad_Opcode },
5796 { Bad_Opcode },
f88c9eb0
SP
5797 /* 20 */
5798 { PREFIX_TABLE (PREFIX_0F3A20) },
5799 { PREFIX_TABLE (PREFIX_0F3A21) },
5800 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
5801 { Bad_Opcode },
5802 { Bad_Opcode },
5803 { Bad_Opcode },
5804 { Bad_Opcode },
5805 { Bad_Opcode },
f88c9eb0 5806 /* 28 */
592d1631
L
5807 { Bad_Opcode },
5808 { Bad_Opcode },
5809 { Bad_Opcode },
5810 { Bad_Opcode },
5811 { Bad_Opcode },
5812 { Bad_Opcode },
5813 { Bad_Opcode },
5814 { Bad_Opcode },
f88c9eb0 5815 /* 30 */
592d1631
L
5816 { Bad_Opcode },
5817 { Bad_Opcode },
5818 { Bad_Opcode },
5819 { Bad_Opcode },
5820 { Bad_Opcode },
5821 { Bad_Opcode },
5822 { Bad_Opcode },
5823 { Bad_Opcode },
f88c9eb0 5824 /* 38 */
592d1631
L
5825 { Bad_Opcode },
5826 { Bad_Opcode },
5827 { Bad_Opcode },
5828 { Bad_Opcode },
5829 { Bad_Opcode },
5830 { Bad_Opcode },
5831 { Bad_Opcode },
5832 { Bad_Opcode },
f88c9eb0
SP
5833 /* 40 */
5834 { PREFIX_TABLE (PREFIX_0F3A40) },
5835 { PREFIX_TABLE (PREFIX_0F3A41) },
5836 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 5837 { Bad_Opcode },
f88c9eb0 5838 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
5839 { Bad_Opcode },
5840 { Bad_Opcode },
5841 { Bad_Opcode },
f88c9eb0 5842 /* 48 */
592d1631
L
5843 { Bad_Opcode },
5844 { Bad_Opcode },
5845 { Bad_Opcode },
5846 { Bad_Opcode },
5847 { Bad_Opcode },
5848 { Bad_Opcode },
5849 { Bad_Opcode },
5850 { Bad_Opcode },
f88c9eb0 5851 /* 50 */
592d1631
L
5852 { Bad_Opcode },
5853 { Bad_Opcode },
5854 { Bad_Opcode },
5855 { Bad_Opcode },
5856 { Bad_Opcode },
5857 { Bad_Opcode },
5858 { Bad_Opcode },
5859 { Bad_Opcode },
f88c9eb0 5860 /* 58 */
592d1631
L
5861 { Bad_Opcode },
5862 { Bad_Opcode },
5863 { Bad_Opcode },
5864 { Bad_Opcode },
5865 { Bad_Opcode },
5866 { Bad_Opcode },
5867 { Bad_Opcode },
5868 { Bad_Opcode },
f88c9eb0
SP
5869 /* 60 */
5870 { PREFIX_TABLE (PREFIX_0F3A60) },
5871 { PREFIX_TABLE (PREFIX_0F3A61) },
5872 { PREFIX_TABLE (PREFIX_0F3A62) },
5873 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
5874 { Bad_Opcode },
5875 { Bad_Opcode },
5876 { Bad_Opcode },
5877 { Bad_Opcode },
f88c9eb0 5878 /* 68 */
592d1631
L
5879 { Bad_Opcode },
5880 { Bad_Opcode },
5881 { Bad_Opcode },
5882 { Bad_Opcode },
5883 { Bad_Opcode },
5884 { Bad_Opcode },
5885 { Bad_Opcode },
5886 { Bad_Opcode },
f88c9eb0 5887 /* 70 */
592d1631
L
5888 { Bad_Opcode },
5889 { Bad_Opcode },
5890 { Bad_Opcode },
5891 { Bad_Opcode },
5892 { Bad_Opcode },
5893 { Bad_Opcode },
5894 { Bad_Opcode },
5895 { Bad_Opcode },
f88c9eb0 5896 /* 78 */
592d1631
L
5897 { Bad_Opcode },
5898 { Bad_Opcode },
5899 { Bad_Opcode },
5900 { Bad_Opcode },
5901 { Bad_Opcode },
5902 { Bad_Opcode },
5903 { Bad_Opcode },
5904 { Bad_Opcode },
f88c9eb0 5905 /* 80 */
592d1631
L
5906 { Bad_Opcode },
5907 { Bad_Opcode },
5908 { Bad_Opcode },
5909 { Bad_Opcode },
5910 { Bad_Opcode },
5911 { Bad_Opcode },
5912 { Bad_Opcode },
5913 { Bad_Opcode },
f88c9eb0 5914 /* 88 */
592d1631
L
5915 { Bad_Opcode },
5916 { Bad_Opcode },
5917 { Bad_Opcode },
5918 { Bad_Opcode },
5919 { Bad_Opcode },
5920 { Bad_Opcode },
5921 { Bad_Opcode },
5922 { Bad_Opcode },
f88c9eb0 5923 /* 90 */
592d1631
L
5924 { Bad_Opcode },
5925 { Bad_Opcode },
5926 { Bad_Opcode },
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { Bad_Opcode },
5931 { Bad_Opcode },
f88c9eb0 5932 /* 98 */
592d1631
L
5933 { Bad_Opcode },
5934 { Bad_Opcode },
5935 { Bad_Opcode },
5936 { Bad_Opcode },
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { Bad_Opcode },
f88c9eb0 5941 /* a0 */
592d1631
L
5942 { Bad_Opcode },
5943 { Bad_Opcode },
5944 { Bad_Opcode },
5945 { Bad_Opcode },
5946 { Bad_Opcode },
5947 { Bad_Opcode },
5948 { Bad_Opcode },
5949 { Bad_Opcode },
f88c9eb0 5950 /* a8 */
592d1631
L
5951 { Bad_Opcode },
5952 { Bad_Opcode },
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { Bad_Opcode },
5956 { Bad_Opcode },
5957 { Bad_Opcode },
5958 { Bad_Opcode },
f88c9eb0 5959 /* b0 */
592d1631
L
5960 { Bad_Opcode },
5961 { Bad_Opcode },
5962 { Bad_Opcode },
5963 { Bad_Opcode },
5964 { Bad_Opcode },
5965 { Bad_Opcode },
5966 { Bad_Opcode },
5967 { Bad_Opcode },
f88c9eb0 5968 /* b8 */
592d1631
L
5969 { Bad_Opcode },
5970 { Bad_Opcode },
5971 { Bad_Opcode },
5972 { Bad_Opcode },
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { Bad_Opcode },
5976 { Bad_Opcode },
f88c9eb0 5977 /* c0 */
592d1631
L
5978 { Bad_Opcode },
5979 { Bad_Opcode },
5980 { Bad_Opcode },
5981 { Bad_Opcode },
5982 { Bad_Opcode },
5983 { Bad_Opcode },
5984 { Bad_Opcode },
5985 { Bad_Opcode },
f88c9eb0 5986 /* c8 */
592d1631
L
5987 { Bad_Opcode },
5988 { Bad_Opcode },
5989 { Bad_Opcode },
5990 { Bad_Opcode },
5991 { Bad_Opcode },
5992 { Bad_Opcode },
5993 { Bad_Opcode },
5994 { Bad_Opcode },
f88c9eb0 5995 /* d0 */
592d1631
L
5996 { Bad_Opcode },
5997 { Bad_Opcode },
5998 { Bad_Opcode },
5999 { Bad_Opcode },
6000 { Bad_Opcode },
6001 { Bad_Opcode },
6002 { Bad_Opcode },
6003 { Bad_Opcode },
f88c9eb0 6004 /* d8 */
592d1631
L
6005 { Bad_Opcode },
6006 { Bad_Opcode },
6007 { Bad_Opcode },
6008 { Bad_Opcode },
6009 { Bad_Opcode },
6010 { Bad_Opcode },
6011 { Bad_Opcode },
f88c9eb0
SP
6012 { PREFIX_TABLE (PREFIX_0F3ADF) },
6013 /* e0 */
592d1631
L
6014 { Bad_Opcode },
6015 { Bad_Opcode },
6016 { Bad_Opcode },
6017 { Bad_Opcode },
6018 { Bad_Opcode },
6019 { Bad_Opcode },
6020 { Bad_Opcode },
6021 { Bad_Opcode },
f88c9eb0 6022 /* e8 */
592d1631
L
6023 { Bad_Opcode },
6024 { Bad_Opcode },
6025 { Bad_Opcode },
6026 { Bad_Opcode },
6027 { Bad_Opcode },
6028 { Bad_Opcode },
6029 { Bad_Opcode },
6030 { Bad_Opcode },
f88c9eb0 6031 /* f0 */
592d1631
L
6032 { Bad_Opcode },
6033 { Bad_Opcode },
6034 { Bad_Opcode },
6035 { Bad_Opcode },
6036 { Bad_Opcode },
6037 { Bad_Opcode },
6038 { Bad_Opcode },
6039 { Bad_Opcode },
f88c9eb0 6040 /* f8 */
592d1631
L
6041 { Bad_Opcode },
6042 { Bad_Opcode },
6043 { Bad_Opcode },
6044 { Bad_Opcode },
6045 { Bad_Opcode },
6046 { Bad_Opcode },
6047 { Bad_Opcode },
6048 { Bad_Opcode },
f88c9eb0
SP
6049 },
6050
6051 /* THREE_BYTE_0F7A */
6052 {
6053 /* 00 */
592d1631
L
6054 { Bad_Opcode },
6055 { Bad_Opcode },
6056 { Bad_Opcode },
6057 { Bad_Opcode },
6058 { Bad_Opcode },
6059 { Bad_Opcode },
6060 { Bad_Opcode },
6061 { Bad_Opcode },
f88c9eb0 6062 /* 08 */
592d1631
L
6063 { Bad_Opcode },
6064 { Bad_Opcode },
6065 { Bad_Opcode },
6066 { Bad_Opcode },
6067 { Bad_Opcode },
6068 { Bad_Opcode },
6069 { Bad_Opcode },
6070 { Bad_Opcode },
f88c9eb0 6071 /* 10 */
592d1631
L
6072 { Bad_Opcode },
6073 { Bad_Opcode },
6074 { Bad_Opcode },
6075 { Bad_Opcode },
6076 { Bad_Opcode },
6077 { Bad_Opcode },
6078 { Bad_Opcode },
6079 { Bad_Opcode },
f88c9eb0 6080 /* 18 */
592d1631
L
6081 { Bad_Opcode },
6082 { Bad_Opcode },
6083 { Bad_Opcode },
6084 { Bad_Opcode },
6085 { Bad_Opcode },
6086 { Bad_Opcode },
6087 { Bad_Opcode },
6088 { Bad_Opcode },
f88c9eb0
SP
6089 /* 20 */
6090 { "ptest", { XX } },
592d1631
L
6091 { Bad_Opcode },
6092 { Bad_Opcode },
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { Bad_Opcode },
6096 { Bad_Opcode },
6097 { Bad_Opcode },
f88c9eb0 6098 /* 28 */
592d1631
L
6099 { Bad_Opcode },
6100 { Bad_Opcode },
6101 { Bad_Opcode },
6102 { Bad_Opcode },
6103 { Bad_Opcode },
6104 { Bad_Opcode },
6105 { Bad_Opcode },
6106 { Bad_Opcode },
f88c9eb0 6107 /* 30 */
592d1631
L
6108 { Bad_Opcode },
6109 { Bad_Opcode },
6110 { Bad_Opcode },
6111 { Bad_Opcode },
6112 { Bad_Opcode },
6113 { Bad_Opcode },
6114 { Bad_Opcode },
6115 { Bad_Opcode },
f88c9eb0 6116 /* 38 */
592d1631
L
6117 { Bad_Opcode },
6118 { Bad_Opcode },
6119 { Bad_Opcode },
6120 { Bad_Opcode },
6121 { Bad_Opcode },
6122 { Bad_Opcode },
6123 { Bad_Opcode },
6124 { Bad_Opcode },
f88c9eb0 6125 /* 40 */
592d1631 6126 { Bad_Opcode },
f88c9eb0
SP
6127 { "phaddbw", { XM, EXq } },
6128 { "phaddbd", { XM, EXq } },
6129 { "phaddbq", { XM, EXq } },
592d1631
L
6130 { Bad_Opcode },
6131 { Bad_Opcode },
f88c9eb0
SP
6132 { "phaddwd", { XM, EXq } },
6133 { "phaddwq", { XM, EXq } },
6134 /* 48 */
592d1631
L
6135 { Bad_Opcode },
6136 { Bad_Opcode },
6137 { Bad_Opcode },
f88c9eb0 6138 { "phadddq", { XM, EXq } },
592d1631
L
6139 { Bad_Opcode },
6140 { Bad_Opcode },
6141 { Bad_Opcode },
6142 { Bad_Opcode },
f88c9eb0 6143 /* 50 */
592d1631 6144 { Bad_Opcode },
f88c9eb0
SP
6145 { "phaddubw", { XM, EXq } },
6146 { "phaddubd", { XM, EXq } },
6147 { "phaddubq", { XM, EXq } },
592d1631
L
6148 { Bad_Opcode },
6149 { Bad_Opcode },
f88c9eb0
SP
6150 { "phadduwd", { XM, EXq } },
6151 { "phadduwq", { XM, EXq } },
6152 /* 58 */
592d1631
L
6153 { Bad_Opcode },
6154 { Bad_Opcode },
6155 { Bad_Opcode },
f88c9eb0 6156 { "phaddudq", { XM, EXq } },
592d1631
L
6157 { Bad_Opcode },
6158 { Bad_Opcode },
6159 { Bad_Opcode },
6160 { Bad_Opcode },
f88c9eb0 6161 /* 60 */
592d1631 6162 { Bad_Opcode },
f88c9eb0
SP
6163 { "phsubbw", { XM, EXq } },
6164 { "phsubbd", { XM, EXq } },
6165 { "phsubbq", { XM, EXq } },
592d1631
L
6166 { Bad_Opcode },
6167 { Bad_Opcode },
6168 { Bad_Opcode },
6169 { Bad_Opcode },
4e7d34a6 6170 /* 68 */
592d1631
L
6171 { Bad_Opcode },
6172 { Bad_Opcode },
6173 { Bad_Opcode },
6174 { Bad_Opcode },
6175 { Bad_Opcode },
6176 { Bad_Opcode },
6177 { Bad_Opcode },
6178 { Bad_Opcode },
85f10a01 6179 /* 70 */
592d1631
L
6180 { Bad_Opcode },
6181 { Bad_Opcode },
6182 { Bad_Opcode },
6183 { Bad_Opcode },
6184 { Bad_Opcode },
6185 { Bad_Opcode },
6186 { Bad_Opcode },
6187 { Bad_Opcode },
85f10a01 6188 /* 78 */
592d1631
L
6189 { Bad_Opcode },
6190 { Bad_Opcode },
6191 { Bad_Opcode },
6192 { Bad_Opcode },
6193 { Bad_Opcode },
6194 { Bad_Opcode },
6195 { Bad_Opcode },
6196 { Bad_Opcode },
85f10a01 6197 /* 80 */
592d1631
L
6198 { Bad_Opcode },
6199 { Bad_Opcode },
6200 { Bad_Opcode },
6201 { Bad_Opcode },
6202 { Bad_Opcode },
6203 { Bad_Opcode },
6204 { Bad_Opcode },
6205 { Bad_Opcode },
85f10a01 6206 /* 88 */
592d1631
L
6207 { Bad_Opcode },
6208 { Bad_Opcode },
6209 { Bad_Opcode },
6210 { Bad_Opcode },
6211 { Bad_Opcode },
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6214 { Bad_Opcode },
85f10a01 6215 /* 90 */
592d1631
L
6216 { Bad_Opcode },
6217 { Bad_Opcode },
6218 { Bad_Opcode },
6219 { Bad_Opcode },
6220 { Bad_Opcode },
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { Bad_Opcode },
85f10a01 6224 /* 98 */
592d1631
L
6225 { Bad_Opcode },
6226 { Bad_Opcode },
6227 { Bad_Opcode },
6228 { Bad_Opcode },
6229 { Bad_Opcode },
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { Bad_Opcode },
85f10a01 6233 /* a0 */
592d1631
L
6234 { Bad_Opcode },
6235 { Bad_Opcode },
6236 { Bad_Opcode },
6237 { Bad_Opcode },
6238 { Bad_Opcode },
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { Bad_Opcode },
85f10a01 6242 /* a8 */
592d1631
L
6243 { Bad_Opcode },
6244 { Bad_Opcode },
6245 { Bad_Opcode },
6246 { Bad_Opcode },
6247 { Bad_Opcode },
6248 { Bad_Opcode },
6249 { Bad_Opcode },
6250 { Bad_Opcode },
85f10a01 6251 /* b0 */
592d1631
L
6252 { Bad_Opcode },
6253 { Bad_Opcode },
6254 { Bad_Opcode },
6255 { Bad_Opcode },
6256 { Bad_Opcode },
6257 { Bad_Opcode },
6258 { Bad_Opcode },
6259 { Bad_Opcode },
85f10a01 6260 /* b8 */
592d1631
L
6261 { Bad_Opcode },
6262 { Bad_Opcode },
6263 { Bad_Opcode },
6264 { Bad_Opcode },
6265 { Bad_Opcode },
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { Bad_Opcode },
85f10a01 6269 /* c0 */
592d1631
L
6270 { Bad_Opcode },
6271 { Bad_Opcode },
6272 { Bad_Opcode },
6273 { Bad_Opcode },
6274 { Bad_Opcode },
6275 { Bad_Opcode },
6276 { Bad_Opcode },
6277 { Bad_Opcode },
85f10a01 6278 /* c8 */
592d1631
L
6279 { Bad_Opcode },
6280 { Bad_Opcode },
6281 { Bad_Opcode },
6282 { Bad_Opcode },
6283 { Bad_Opcode },
6284 { Bad_Opcode },
6285 { Bad_Opcode },
6286 { Bad_Opcode },
85f10a01 6287 /* d0 */
592d1631
L
6288 { Bad_Opcode },
6289 { Bad_Opcode },
6290 { Bad_Opcode },
6291 { Bad_Opcode },
6292 { Bad_Opcode },
6293 { Bad_Opcode },
6294 { Bad_Opcode },
6295 { Bad_Opcode },
85f10a01 6296 /* d8 */
592d1631
L
6297 { Bad_Opcode },
6298 { Bad_Opcode },
6299 { Bad_Opcode },
6300 { Bad_Opcode },
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { Bad_Opcode },
6304 { Bad_Opcode },
85f10a01 6305 /* e0 */
592d1631
L
6306 { Bad_Opcode },
6307 { Bad_Opcode },
6308 { Bad_Opcode },
6309 { Bad_Opcode },
6310 { Bad_Opcode },
6311 { Bad_Opcode },
6312 { Bad_Opcode },
6313 { Bad_Opcode },
85f10a01 6314 /* e8 */
592d1631
L
6315 { Bad_Opcode },
6316 { Bad_Opcode },
6317 { Bad_Opcode },
6318 { Bad_Opcode },
6319 { Bad_Opcode },
6320 { Bad_Opcode },
6321 { Bad_Opcode },
6322 { Bad_Opcode },
85f10a01 6323 /* f0 */
592d1631
L
6324 { Bad_Opcode },
6325 { Bad_Opcode },
6326 { Bad_Opcode },
6327 { Bad_Opcode },
6328 { Bad_Opcode },
6329 { Bad_Opcode },
6330 { Bad_Opcode },
6331 { Bad_Opcode },
85f10a01 6332 /* f8 */
592d1631
L
6333 { Bad_Opcode },
6334 { Bad_Opcode },
6335 { Bad_Opcode },
6336 { Bad_Opcode },
6337 { Bad_Opcode },
6338 { Bad_Opcode },
6339 { Bad_Opcode },
6340 { Bad_Opcode },
85f10a01 6341 },
f88c9eb0
SP
6342};
6343
6344static const struct dis386 xop_table[][256] = {
5dd85c99 6345 /* XOP_08 */
85f10a01
MM
6346 {
6347 /* 00 */
592d1631
L
6348 { Bad_Opcode },
6349 { Bad_Opcode },
6350 { Bad_Opcode },
6351 { Bad_Opcode },
6352 { Bad_Opcode },
6353 { Bad_Opcode },
6354 { Bad_Opcode },
6355 { Bad_Opcode },
85f10a01 6356 /* 08 */
592d1631
L
6357 { Bad_Opcode },
6358 { Bad_Opcode },
6359 { Bad_Opcode },
6360 { Bad_Opcode },
6361 { Bad_Opcode },
6362 { Bad_Opcode },
6363 { Bad_Opcode },
6364 { Bad_Opcode },
85f10a01 6365 /* 10 */
592d1631
L
6366 { Bad_Opcode },
6367 { Bad_Opcode },
6368 { Bad_Opcode },
6369 { Bad_Opcode },
6370 { Bad_Opcode },
6371 { Bad_Opcode },
6372 { Bad_Opcode },
6373 { Bad_Opcode },
85f10a01 6374 /* 18 */
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
6377 { Bad_Opcode },
6378 { Bad_Opcode },
6379 { Bad_Opcode },
6380 { Bad_Opcode },
6381 { Bad_Opcode },
6382 { Bad_Opcode },
85f10a01 6383 /* 20 */
592d1631
L
6384 { Bad_Opcode },
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { Bad_Opcode },
6388 { Bad_Opcode },
6389 { Bad_Opcode },
6390 { Bad_Opcode },
6391 { Bad_Opcode },
85f10a01 6392 /* 28 */
592d1631
L
6393 { Bad_Opcode },
6394 { Bad_Opcode },
6395 { Bad_Opcode },
6396 { Bad_Opcode },
6397 { Bad_Opcode },
6398 { Bad_Opcode },
6399 { Bad_Opcode },
6400 { Bad_Opcode },
c0f3af97 6401 /* 30 */
592d1631
L
6402 { Bad_Opcode },
6403 { Bad_Opcode },
6404 { Bad_Opcode },
6405 { Bad_Opcode },
6406 { Bad_Opcode },
6407 { Bad_Opcode },
6408 { Bad_Opcode },
6409 { Bad_Opcode },
c0f3af97 6410 /* 38 */
592d1631
L
6411 { Bad_Opcode },
6412 { Bad_Opcode },
6413 { Bad_Opcode },
6414 { Bad_Opcode },
6415 { Bad_Opcode },
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { Bad_Opcode },
c0f3af97 6419 /* 40 */
592d1631
L
6420 { Bad_Opcode },
6421 { Bad_Opcode },
6422 { Bad_Opcode },
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6425 { Bad_Opcode },
6426 { Bad_Opcode },
6427 { Bad_Opcode },
85f10a01 6428 /* 48 */
592d1631
L
6429 { Bad_Opcode },
6430 { Bad_Opcode },
6431 { Bad_Opcode },
6432 { Bad_Opcode },
6433 { Bad_Opcode },
6434 { Bad_Opcode },
6435 { Bad_Opcode },
6436 { Bad_Opcode },
c0f3af97 6437 /* 50 */
592d1631
L
6438 { Bad_Opcode },
6439 { Bad_Opcode },
6440 { Bad_Opcode },
6441 { Bad_Opcode },
6442 { Bad_Opcode },
6443 { Bad_Opcode },
6444 { Bad_Opcode },
6445 { Bad_Opcode },
85f10a01 6446 /* 58 */
592d1631
L
6447 { Bad_Opcode },
6448 { Bad_Opcode },
6449 { Bad_Opcode },
6450 { Bad_Opcode },
6451 { Bad_Opcode },
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { Bad_Opcode },
c1e679ec 6455 /* 60 */
592d1631
L
6456 { Bad_Opcode },
6457 { Bad_Opcode },
6458 { Bad_Opcode },
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { Bad_Opcode },
6462 { Bad_Opcode },
6463 { Bad_Opcode },
c0f3af97 6464 /* 68 */
592d1631
L
6465 { Bad_Opcode },
6466 { Bad_Opcode },
6467 { Bad_Opcode },
6468 { Bad_Opcode },
6469 { Bad_Opcode },
6470 { Bad_Opcode },
6471 { Bad_Opcode },
6472 { Bad_Opcode },
85f10a01 6473 /* 70 */
592d1631
L
6474 { Bad_Opcode },
6475 { Bad_Opcode },
6476 { Bad_Opcode },
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { Bad_Opcode },
6480 { Bad_Opcode },
6481 { Bad_Opcode },
85f10a01 6482 /* 78 */
592d1631
L
6483 { Bad_Opcode },
6484 { Bad_Opcode },
6485 { Bad_Opcode },
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { Bad_Opcode },
6490 { Bad_Opcode },
85f10a01 6491 /* 80 */
592d1631
L
6492 { Bad_Opcode },
6493 { Bad_Opcode },
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { Bad_Opcode },
5dd85c99
SP
6497 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6498 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6499 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6500 /* 88 */
592d1631
L
6501 { Bad_Opcode },
6502 { Bad_Opcode },
6503 { Bad_Opcode },
6504 { Bad_Opcode },
6505 { Bad_Opcode },
6506 { Bad_Opcode },
5dd85c99
SP
6507 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6508 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6509 /* 90 */
592d1631
L
6510 { Bad_Opcode },
6511 { Bad_Opcode },
6512 { Bad_Opcode },
6513 { Bad_Opcode },
6514 { Bad_Opcode },
5dd85c99
SP
6515 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6516 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6517 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6518 /* 98 */
592d1631
L
6519 { Bad_Opcode },
6520 { Bad_Opcode },
6521 { Bad_Opcode },
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { Bad_Opcode },
5dd85c99
SP
6525 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6526 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6527 /* a0 */
592d1631
L
6528 { Bad_Opcode },
6529 { Bad_Opcode },
5dd85c99
SP
6530 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6531 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
6532 { Bad_Opcode },
6533 { Bad_Opcode },
5dd85c99 6534 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6535 { Bad_Opcode },
5dd85c99 6536 /* a8 */
592d1631
L
6537 { Bad_Opcode },
6538 { Bad_Opcode },
6539 { Bad_Opcode },
6540 { Bad_Opcode },
6541 { Bad_Opcode },
6542 { Bad_Opcode },
6543 { Bad_Opcode },
6544 { Bad_Opcode },
5dd85c99 6545 /* b0 */
592d1631
L
6546 { Bad_Opcode },
6547 { Bad_Opcode },
6548 { Bad_Opcode },
6549 { Bad_Opcode },
6550 { Bad_Opcode },
6551 { Bad_Opcode },
5dd85c99 6552 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6553 { Bad_Opcode },
5dd85c99 6554 /* b8 */
592d1631
L
6555 { Bad_Opcode },
6556 { Bad_Opcode },
6557 { Bad_Opcode },
6558 { Bad_Opcode },
6559 { Bad_Opcode },
6560 { Bad_Opcode },
6561 { Bad_Opcode },
6562 { Bad_Opcode },
5dd85c99
SP
6563 /* c0 */
6564 { "vprotb", { XM, Vex_2src_1, Ib } },
6565 { "vprotw", { XM, Vex_2src_1, Ib } },
6566 { "vprotd", { XM, Vex_2src_1, Ib } },
6567 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
6568 { Bad_Opcode },
6569 { Bad_Opcode },
6570 { Bad_Opcode },
6571 { Bad_Opcode },
5dd85c99 6572 /* c8 */
592d1631
L
6573 { Bad_Opcode },
6574 { Bad_Opcode },
6575 { Bad_Opcode },
6576 { Bad_Opcode },
5dd85c99
SP
6577 { "vpcomb", { XM, Vex128, EXx, Ib } },
6578 { "vpcomw", { XM, Vex128, EXx, Ib } },
6579 { "vpcomd", { XM, Vex128, EXx, Ib } },
6580 { "vpcomq", { XM, Vex128, EXx, Ib } },
6581 /* d0 */
592d1631
L
6582 { Bad_Opcode },
6583 { Bad_Opcode },
6584 { Bad_Opcode },
6585 { Bad_Opcode },
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6588 { Bad_Opcode },
6589 { Bad_Opcode },
5dd85c99 6590 /* d8 */
592d1631
L
6591 { Bad_Opcode },
6592 { Bad_Opcode },
6593 { Bad_Opcode },
6594 { Bad_Opcode },
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6597 { Bad_Opcode },
6598 { Bad_Opcode },
5dd85c99 6599 /* e0 */
592d1631
L
6600 { Bad_Opcode },
6601 { Bad_Opcode },
6602 { Bad_Opcode },
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
6606 { Bad_Opcode },
6607 { Bad_Opcode },
5dd85c99 6608 /* e8 */
592d1631
L
6609 { Bad_Opcode },
6610 { Bad_Opcode },
6611 { Bad_Opcode },
6612 { Bad_Opcode },
5dd85c99
SP
6613 { "vpcomub", { XM, Vex128, EXx, Ib } },
6614 { "vpcomuw", { XM, Vex128, EXx, Ib } },
6615 { "vpcomud", { XM, Vex128, EXx, Ib } },
6616 { "vpcomuq", { XM, Vex128, EXx, Ib } },
6617 /* f0 */
592d1631
L
6618 { Bad_Opcode },
6619 { Bad_Opcode },
6620 { Bad_Opcode },
6621 { Bad_Opcode },
6622 { Bad_Opcode },
6623 { Bad_Opcode },
6624 { Bad_Opcode },
6625 { Bad_Opcode },
5dd85c99 6626 /* f8 */
592d1631
L
6627 { Bad_Opcode },
6628 { Bad_Opcode },
6629 { Bad_Opcode },
6630 { Bad_Opcode },
6631 { Bad_Opcode },
6632 { Bad_Opcode },
6633 { Bad_Opcode },
6634 { Bad_Opcode },
5dd85c99
SP
6635 },
6636 /* XOP_09 */
6637 {
6638 /* 00 */
592d1631
L
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { Bad_Opcode },
6642 { Bad_Opcode },
6643 { Bad_Opcode },
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
5dd85c99 6647 /* 08 */
592d1631
L
6648 { Bad_Opcode },
6649 { Bad_Opcode },
6650 { Bad_Opcode },
6651 { Bad_Opcode },
6652 { Bad_Opcode },
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { Bad_Opcode },
5dd85c99 6656 /* 10 */
592d1631
L
6657 { Bad_Opcode },
6658 { Bad_Opcode },
5dd85c99 6659 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
6660 { Bad_Opcode },
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
6664 { Bad_Opcode },
5dd85c99 6665 /* 18 */
592d1631
L
6666 { Bad_Opcode },
6667 { Bad_Opcode },
6668 { Bad_Opcode },
6669 { Bad_Opcode },
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
5dd85c99 6674 /* 20 */
592d1631
L
6675 { Bad_Opcode },
6676 { Bad_Opcode },
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
5dd85c99 6683 /* 28 */
592d1631
L
6684 { Bad_Opcode },
6685 { Bad_Opcode },
6686 { Bad_Opcode },
6687 { Bad_Opcode },
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6690 { Bad_Opcode },
6691 { Bad_Opcode },
5dd85c99 6692 /* 30 */
592d1631
L
6693 { Bad_Opcode },
6694 { Bad_Opcode },
6695 { Bad_Opcode },
6696 { Bad_Opcode },
6697 { Bad_Opcode },
6698 { Bad_Opcode },
6699 { Bad_Opcode },
6700 { Bad_Opcode },
5dd85c99 6701 /* 38 */
592d1631
L
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { Bad_Opcode },
6705 { Bad_Opcode },
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { Bad_Opcode },
6709 { Bad_Opcode },
5dd85c99 6710 /* 40 */
592d1631
L
6711 { Bad_Opcode },
6712 { Bad_Opcode },
6713 { Bad_Opcode },
6714 { Bad_Opcode },
6715 { Bad_Opcode },
6716 { Bad_Opcode },
6717 { Bad_Opcode },
6718 { Bad_Opcode },
5dd85c99 6719 /* 48 */
592d1631
L
6720 { Bad_Opcode },
6721 { Bad_Opcode },
6722 { Bad_Opcode },
6723 { Bad_Opcode },
6724 { Bad_Opcode },
6725 { Bad_Opcode },
6726 { Bad_Opcode },
6727 { Bad_Opcode },
5dd85c99 6728 /* 50 */
592d1631
L
6729 { Bad_Opcode },
6730 { Bad_Opcode },
6731 { Bad_Opcode },
6732 { Bad_Opcode },
6733 { Bad_Opcode },
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { Bad_Opcode },
5dd85c99 6737 /* 58 */
592d1631
L
6738 { Bad_Opcode },
6739 { Bad_Opcode },
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { Bad_Opcode },
6743 { Bad_Opcode },
6744 { Bad_Opcode },
6745 { Bad_Opcode },
5dd85c99 6746 /* 60 */
592d1631
L
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { Bad_Opcode },
6754 { Bad_Opcode },
5dd85c99 6755 /* 68 */
592d1631
L
6756 { Bad_Opcode },
6757 { Bad_Opcode },
6758 { Bad_Opcode },
6759 { Bad_Opcode },
6760 { Bad_Opcode },
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { Bad_Opcode },
5dd85c99 6764 /* 70 */
592d1631
L
6765 { Bad_Opcode },
6766 { Bad_Opcode },
6767 { Bad_Opcode },
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { Bad_Opcode },
5dd85c99 6773 /* 78 */
592d1631
L
6774 { Bad_Opcode },
6775 { Bad_Opcode },
6776 { Bad_Opcode },
6777 { Bad_Opcode },
6778 { Bad_Opcode },
6779 { Bad_Opcode },
6780 { Bad_Opcode },
6781 { Bad_Opcode },
5dd85c99
SP
6782 /* 80 */
6783 { VEX_LEN_TABLE (VEX_LEN_XOP_09_80) },
6784 { VEX_LEN_TABLE (VEX_LEN_XOP_09_81) },
6785 { "vfrczss", { XM, EXd } },
6786 { "vfrczsd", { XM, EXq } },
592d1631
L
6787 { Bad_Opcode },
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { Bad_Opcode },
5dd85c99 6791 /* 88 */
592d1631
L
6792 { Bad_Opcode },
6793 { Bad_Opcode },
6794 { Bad_Opcode },
6795 { Bad_Opcode },
6796 { Bad_Opcode },
6797 { Bad_Opcode },
6798 { Bad_Opcode },
6799 { Bad_Opcode },
5dd85c99
SP
6800 /* 90 */
6801 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
6802 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
6803 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
6804 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
6805 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
6806 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
6807 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
6808 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
6809 /* 98 */
6810 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
6811 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
6812 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
6813 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
6817 { Bad_Opcode },
5dd85c99 6818 /* a0 */
592d1631
L
6819 { Bad_Opcode },
6820 { Bad_Opcode },
6821 { Bad_Opcode },
6822 { Bad_Opcode },
6823 { Bad_Opcode },
6824 { Bad_Opcode },
6825 { Bad_Opcode },
6826 { Bad_Opcode },
5dd85c99 6827 /* a8 */
592d1631
L
6828 { Bad_Opcode },
6829 { Bad_Opcode },
6830 { Bad_Opcode },
6831 { Bad_Opcode },
6832 { Bad_Opcode },
6833 { Bad_Opcode },
6834 { Bad_Opcode },
6835 { Bad_Opcode },
5dd85c99 6836 /* b0 */
592d1631
L
6837 { Bad_Opcode },
6838 { Bad_Opcode },
6839 { Bad_Opcode },
6840 { Bad_Opcode },
6841 { Bad_Opcode },
6842 { Bad_Opcode },
6843 { Bad_Opcode },
6844 { Bad_Opcode },
5dd85c99 6845 /* b8 */
592d1631
L
6846 { Bad_Opcode },
6847 { Bad_Opcode },
6848 { Bad_Opcode },
6849 { Bad_Opcode },
6850 { Bad_Opcode },
6851 { Bad_Opcode },
6852 { Bad_Opcode },
6853 { Bad_Opcode },
5dd85c99 6854 /* c0 */
592d1631 6855 { Bad_Opcode },
5dd85c99
SP
6856 { "vphaddbw", { XM, EXxmm } },
6857 { "vphaddbd", { XM, EXxmm } },
6858 { "vphaddbq", { XM, EXxmm } },
592d1631
L
6859 { Bad_Opcode },
6860 { Bad_Opcode },
5dd85c99
SP
6861 { "vphaddwd", { XM, EXxmm } },
6862 { "vphaddwq", { XM, EXxmm } },
6863 /* c8 */
592d1631
L
6864 { Bad_Opcode },
6865 { Bad_Opcode },
6866 { Bad_Opcode },
5dd85c99 6867 { "vphadddq", { XM, EXxmm } },
592d1631
L
6868 { Bad_Opcode },
6869 { Bad_Opcode },
6870 { Bad_Opcode },
6871 { Bad_Opcode },
5dd85c99 6872 /* d0 */
592d1631 6873 { Bad_Opcode },
5dd85c99
SP
6874 { "vphaddubw", { XM, EXxmm } },
6875 { "vphaddubd", { XM, EXxmm } },
6876 { "vphaddubq", { XM, EXxmm } },
592d1631
L
6877 { Bad_Opcode },
6878 { Bad_Opcode },
5dd85c99
SP
6879 { "vphadduwd", { XM, EXxmm } },
6880 { "vphadduwq", { XM, EXxmm } },
6881 /* d8 */
592d1631
L
6882 { Bad_Opcode },
6883 { Bad_Opcode },
6884 { Bad_Opcode },
5dd85c99 6885 { "vphaddudq", { XM, EXxmm } },
592d1631
L
6886 { Bad_Opcode },
6887 { Bad_Opcode },
6888 { Bad_Opcode },
6889 { Bad_Opcode },
5dd85c99 6890 /* e0 */
592d1631 6891 { Bad_Opcode },
5dd85c99
SP
6892 { "vphsubbw", { XM, EXxmm } },
6893 { "vphsubwd", { XM, EXxmm } },
6894 { "vphsubdq", { XM, EXxmm } },
592d1631
L
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { Bad_Opcode },
6898 { Bad_Opcode },
4e7d34a6 6899 /* e8 */
592d1631
L
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
6905 { Bad_Opcode },
6906 { Bad_Opcode },
6907 { Bad_Opcode },
4e7d34a6 6908 /* f0 */
592d1631
L
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
6915 { Bad_Opcode },
6916 { Bad_Opcode },
4e7d34a6 6917 /* f8 */
592d1631
L
6918 { Bad_Opcode },
6919 { Bad_Opcode },
6920 { Bad_Opcode },
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
6924 { Bad_Opcode },
6925 { Bad_Opcode },
4e7d34a6 6926 },
f88c9eb0 6927 /* XOP_0A */
4e7d34a6
L
6928 {
6929 /* 00 */
592d1631
L
6930 { Bad_Opcode },
6931 { Bad_Opcode },
6932 { Bad_Opcode },
6933 { Bad_Opcode },
6934 { Bad_Opcode },
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
4e7d34a6 6938 /* 08 */
592d1631
L
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
6942 { Bad_Opcode },
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { Bad_Opcode },
4e7d34a6 6947 /* 10 */
592d1631
L
6948 { Bad_Opcode },
6949 { Bad_Opcode },
f88c9eb0 6950 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
6955 { Bad_Opcode },
4e7d34a6 6956 /* 18 */
592d1631
L
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
4e7d34a6 6965 /* 20 */
592d1631
L
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
4e7d34a6 6974 /* 28 */
592d1631
L
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
4e7d34a6 6983 /* 30 */
592d1631
L
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
c0f3af97 6992 /* 38 */
592d1631
L
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
c0f3af97 7001 /* 40 */
592d1631
L
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
c1e679ec 7010 /* 48 */
592d1631
L
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
c1e679ec 7019 /* 50 */
592d1631
L
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
4e7d34a6 7028 /* 58 */
592d1631
L
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
4e7d34a6 7037 /* 60 */
592d1631
L
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
4e7d34a6 7046 /* 68 */
592d1631
L
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
4e7d34a6 7055 /* 70 */
592d1631
L
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
4e7d34a6 7064 /* 78 */
592d1631
L
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
4e7d34a6 7073 /* 80 */
592d1631
L
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
4e7d34a6 7082 /* 88 */
592d1631
L
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
4e7d34a6 7091 /* 90 */
592d1631
L
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
4e7d34a6 7100 /* 98 */
592d1631
L
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
4e7d34a6 7109 /* a0 */
592d1631
L
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
4e7d34a6 7118 /* a8 */
592d1631
L
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
d5d7db8e 7127 /* b0 */
592d1631
L
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
85f10a01 7136 /* b8 */
592d1631
L
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
85f10a01 7145 /* c0 */
592d1631
L
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
85f10a01 7154 /* c8 */
592d1631
L
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
85f10a01 7163 /* d0 */
592d1631
L
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
85f10a01 7172 /* d8 */
592d1631
L
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
85f10a01 7181 /* e0 */
592d1631
L
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
85f10a01 7190 /* e8 */
592d1631
L
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
85f10a01 7199 /* f0 */
592d1631
L
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
85f10a01 7208 /* f8 */
592d1631
L
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
85f10a01 7217 },
c0f3af97
L
7218};
7219
7220static const struct dis386 vex_table[][256] = {
7221 /* VEX_0F */
85f10a01
MM
7222 {
7223 /* 00 */
592d1631
L
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
85f10a01 7232 /* 08 */
592d1631
L
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
c0f3af97
L
7241 /* 10 */
7242 { PREFIX_TABLE (PREFIX_VEX_10) },
7243 { PREFIX_TABLE (PREFIX_VEX_11) },
7244 { PREFIX_TABLE (PREFIX_VEX_12) },
7245 { MOD_TABLE (MOD_VEX_13) },
9e30b8e0
L
7246 { VEX_W_TABLE (VEX_W_14) },
7247 { VEX_W_TABLE (VEX_W_15) },
c0f3af97
L
7248 { PREFIX_TABLE (PREFIX_VEX_16) },
7249 { MOD_TABLE (MOD_VEX_17) },
7250 /* 18 */
592d1631
L
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
c0f3af97 7259 /* 20 */
592d1631
L
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
c0f3af97 7268 /* 28 */
9e30b8e0
L
7269 { VEX_W_TABLE (VEX_W_28) },
7270 { VEX_W_TABLE (VEX_W_29) },
c0f3af97
L
7271 { PREFIX_TABLE (PREFIX_VEX_2A) },
7272 { MOD_TABLE (MOD_VEX_2B) },
7273 { PREFIX_TABLE (PREFIX_VEX_2C) },
7274 { PREFIX_TABLE (PREFIX_VEX_2D) },
7275 { PREFIX_TABLE (PREFIX_VEX_2E) },
7276 { PREFIX_TABLE (PREFIX_VEX_2F) },
85f10a01 7277 /* 30 */
592d1631
L
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
4e7d34a6 7286 /* 38 */
592d1631
L
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
d5d7db8e 7295 /* 40 */
592d1631
L
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
85f10a01 7304 /* 48 */
592d1631
L
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
d5d7db8e 7313 /* 50 */
976f1fde 7314 { MOD_TABLE (MOD_VEX_50) },
c0f3af97
L
7315 { PREFIX_TABLE (PREFIX_VEX_51) },
7316 { PREFIX_TABLE (PREFIX_VEX_52) },
7317 { PREFIX_TABLE (PREFIX_VEX_53) },
7318 { "vandpX", { XM, Vex, EXx } },
7319 { "vandnpX", { XM, Vex, EXx } },
7320 { "vorpX", { XM, Vex, EXx } },
7321 { "vxorpX", { XM, Vex, EXx } },
7322 /* 58 */
7323 { PREFIX_TABLE (PREFIX_VEX_58) },
7324 { PREFIX_TABLE (PREFIX_VEX_59) },
7325 { PREFIX_TABLE (PREFIX_VEX_5A) },
7326 { PREFIX_TABLE (PREFIX_VEX_5B) },
7327 { PREFIX_TABLE (PREFIX_VEX_5C) },
7328 { PREFIX_TABLE (PREFIX_VEX_5D) },
7329 { PREFIX_TABLE (PREFIX_VEX_5E) },
7330 { PREFIX_TABLE (PREFIX_VEX_5F) },
7331 /* 60 */
7332 { PREFIX_TABLE (PREFIX_VEX_60) },
7333 { PREFIX_TABLE (PREFIX_VEX_61) },
7334 { PREFIX_TABLE (PREFIX_VEX_62) },
7335 { PREFIX_TABLE (PREFIX_VEX_63) },
7336 { PREFIX_TABLE (PREFIX_VEX_64) },
7337 { PREFIX_TABLE (PREFIX_VEX_65) },
7338 { PREFIX_TABLE (PREFIX_VEX_66) },
7339 { PREFIX_TABLE (PREFIX_VEX_67) },
7340 /* 68 */
7341 { PREFIX_TABLE (PREFIX_VEX_68) },
7342 { PREFIX_TABLE (PREFIX_VEX_69) },
7343 { PREFIX_TABLE (PREFIX_VEX_6A) },
7344 { PREFIX_TABLE (PREFIX_VEX_6B) },
7345 { PREFIX_TABLE (PREFIX_VEX_6C) },
7346 { PREFIX_TABLE (PREFIX_VEX_6D) },
7347 { PREFIX_TABLE (PREFIX_VEX_6E) },
7348 { PREFIX_TABLE (PREFIX_VEX_6F) },
7349 /* 70 */
7350 { PREFIX_TABLE (PREFIX_VEX_70) },
7351 { REG_TABLE (REG_VEX_71) },
7352 { REG_TABLE (REG_VEX_72) },
7353 { REG_TABLE (REG_VEX_73) },
7354 { PREFIX_TABLE (PREFIX_VEX_74) },
7355 { PREFIX_TABLE (PREFIX_VEX_75) },
7356 { PREFIX_TABLE (PREFIX_VEX_76) },
7357 { PREFIX_TABLE (PREFIX_VEX_77) },
7358 /* 78 */
592d1631
L
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
c0f3af97
L
7363 { PREFIX_TABLE (PREFIX_VEX_7C) },
7364 { PREFIX_TABLE (PREFIX_VEX_7D) },
7365 { PREFIX_TABLE (PREFIX_VEX_7E) },
7366 { PREFIX_TABLE (PREFIX_VEX_7F) },
7367 /* 80 */
592d1631
L
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
c0f3af97 7376 /* 88 */
592d1631
L
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
c0f3af97 7385 /* 90 */
592d1631
L
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
c0f3af97 7394 /* 98 */
592d1631
L
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
c0f3af97 7403 /* a0 */
592d1631
L
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
c0f3af97 7412 /* a8 */
592d1631
L
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
c0f3af97 7419 { REG_TABLE (REG_VEX_AE) },
592d1631 7420 { Bad_Opcode },
c0f3af97 7421 /* b0 */
592d1631
L
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
c0f3af97 7430 /* b8 */
592d1631
L
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
c0f3af97 7439 /* c0 */
592d1631
L
7440 { Bad_Opcode },
7441 { Bad_Opcode },
c0f3af97 7442 { PREFIX_TABLE (PREFIX_VEX_C2) },
592d1631 7443 { Bad_Opcode },
c0f3af97
L
7444 { PREFIX_TABLE (PREFIX_VEX_C4) },
7445 { PREFIX_TABLE (PREFIX_VEX_C5) },
7446 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 7447 { Bad_Opcode },
c0f3af97 7448 /* c8 */
592d1631
L
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
c0f3af97
L
7457 /* d0 */
7458 { PREFIX_TABLE (PREFIX_VEX_D0) },
7459 { PREFIX_TABLE (PREFIX_VEX_D1) },
7460 { PREFIX_TABLE (PREFIX_VEX_D2) },
7461 { PREFIX_TABLE (PREFIX_VEX_D3) },
7462 { PREFIX_TABLE (PREFIX_VEX_D4) },
7463 { PREFIX_TABLE (PREFIX_VEX_D5) },
7464 { PREFIX_TABLE (PREFIX_VEX_D6) },
7465 { PREFIX_TABLE (PREFIX_VEX_D7) },
7466 /* d8 */
7467 { PREFIX_TABLE (PREFIX_VEX_D8) },
7468 { PREFIX_TABLE (PREFIX_VEX_D9) },
7469 { PREFIX_TABLE (PREFIX_VEX_DA) },
7470 { PREFIX_TABLE (PREFIX_VEX_DB) },
7471 { PREFIX_TABLE (PREFIX_VEX_DC) },
7472 { PREFIX_TABLE (PREFIX_VEX_DD) },
7473 { PREFIX_TABLE (PREFIX_VEX_DE) },
7474 { PREFIX_TABLE (PREFIX_VEX_DF) },
7475 /* e0 */
7476 { PREFIX_TABLE (PREFIX_VEX_E0) },
7477 { PREFIX_TABLE (PREFIX_VEX_E1) },
7478 { PREFIX_TABLE (PREFIX_VEX_E2) },
7479 { PREFIX_TABLE (PREFIX_VEX_E3) },
7480 { PREFIX_TABLE (PREFIX_VEX_E4) },
7481 { PREFIX_TABLE (PREFIX_VEX_E5) },
7482 { PREFIX_TABLE (PREFIX_VEX_E6) },
7483 { PREFIX_TABLE (PREFIX_VEX_E7) },
7484 /* e8 */
7485 { PREFIX_TABLE (PREFIX_VEX_E8) },
7486 { PREFIX_TABLE (PREFIX_VEX_E9) },
7487 { PREFIX_TABLE (PREFIX_VEX_EA) },
7488 { PREFIX_TABLE (PREFIX_VEX_EB) },
7489 { PREFIX_TABLE (PREFIX_VEX_EC) },
7490 { PREFIX_TABLE (PREFIX_VEX_ED) },
7491 { PREFIX_TABLE (PREFIX_VEX_EE) },
7492 { PREFIX_TABLE (PREFIX_VEX_EF) },
7493 /* f0 */
7494 { PREFIX_TABLE (PREFIX_VEX_F0) },
7495 { PREFIX_TABLE (PREFIX_VEX_F1) },
7496 { PREFIX_TABLE (PREFIX_VEX_F2) },
7497 { PREFIX_TABLE (PREFIX_VEX_F3) },
7498 { PREFIX_TABLE (PREFIX_VEX_F4) },
7499 { PREFIX_TABLE (PREFIX_VEX_F5) },
7500 { PREFIX_TABLE (PREFIX_VEX_F6) },
7501 { PREFIX_TABLE (PREFIX_VEX_F7) },
7502 /* f8 */
7503 { PREFIX_TABLE (PREFIX_VEX_F8) },
7504 { PREFIX_TABLE (PREFIX_VEX_F9) },
7505 { PREFIX_TABLE (PREFIX_VEX_FA) },
7506 { PREFIX_TABLE (PREFIX_VEX_FB) },
7507 { PREFIX_TABLE (PREFIX_VEX_FC) },
7508 { PREFIX_TABLE (PREFIX_VEX_FD) },
7509 { PREFIX_TABLE (PREFIX_VEX_FE) },
592d1631 7510 { Bad_Opcode },
c0f3af97
L
7511 },
7512 /* VEX_0F38 */
7513 {
7514 /* 00 */
7515 { PREFIX_TABLE (PREFIX_VEX_3800) },
7516 { PREFIX_TABLE (PREFIX_VEX_3801) },
7517 { PREFIX_TABLE (PREFIX_VEX_3802) },
7518 { PREFIX_TABLE (PREFIX_VEX_3803) },
7519 { PREFIX_TABLE (PREFIX_VEX_3804) },
7520 { PREFIX_TABLE (PREFIX_VEX_3805) },
7521 { PREFIX_TABLE (PREFIX_VEX_3806) },
7522 { PREFIX_TABLE (PREFIX_VEX_3807) },
7523 /* 08 */
7524 { PREFIX_TABLE (PREFIX_VEX_3808) },
7525 { PREFIX_TABLE (PREFIX_VEX_3809) },
7526 { PREFIX_TABLE (PREFIX_VEX_380A) },
7527 { PREFIX_TABLE (PREFIX_VEX_380B) },
7528 { PREFIX_TABLE (PREFIX_VEX_380C) },
7529 { PREFIX_TABLE (PREFIX_VEX_380D) },
7530 { PREFIX_TABLE (PREFIX_VEX_380E) },
7531 { PREFIX_TABLE (PREFIX_VEX_380F) },
7532 /* 10 */
592d1631
L
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
c0f3af97
L
7540 { PREFIX_TABLE (PREFIX_VEX_3817) },
7541 /* 18 */
7542 { PREFIX_TABLE (PREFIX_VEX_3818) },
7543 { PREFIX_TABLE (PREFIX_VEX_3819) },
7544 { PREFIX_TABLE (PREFIX_VEX_381A) },
592d1631 7545 { Bad_Opcode },
c0f3af97
L
7546 { PREFIX_TABLE (PREFIX_VEX_381C) },
7547 { PREFIX_TABLE (PREFIX_VEX_381D) },
7548 { PREFIX_TABLE (PREFIX_VEX_381E) },
592d1631 7549 { Bad_Opcode },
c0f3af97
L
7550 /* 20 */
7551 { PREFIX_TABLE (PREFIX_VEX_3820) },
7552 { PREFIX_TABLE (PREFIX_VEX_3821) },
7553 { PREFIX_TABLE (PREFIX_VEX_3822) },
7554 { PREFIX_TABLE (PREFIX_VEX_3823) },
7555 { PREFIX_TABLE (PREFIX_VEX_3824) },
7556 { PREFIX_TABLE (PREFIX_VEX_3825) },
592d1631
L
7557 { Bad_Opcode },
7558 { Bad_Opcode },
c0f3af97
L
7559 /* 28 */
7560 { PREFIX_TABLE (PREFIX_VEX_3828) },
7561 { PREFIX_TABLE (PREFIX_VEX_3829) },
7562 { PREFIX_TABLE (PREFIX_VEX_382A) },
7563 { PREFIX_TABLE (PREFIX_VEX_382B) },
7564 { PREFIX_TABLE (PREFIX_VEX_382C) },
7565 { PREFIX_TABLE (PREFIX_VEX_382D) },
7566 { PREFIX_TABLE (PREFIX_VEX_382E) },
7567 { PREFIX_TABLE (PREFIX_VEX_382F) },
7568 /* 30 */
7569 { PREFIX_TABLE (PREFIX_VEX_3830) },
7570 { PREFIX_TABLE (PREFIX_VEX_3831) },
7571 { PREFIX_TABLE (PREFIX_VEX_3832) },
7572 { PREFIX_TABLE (PREFIX_VEX_3833) },
7573 { PREFIX_TABLE (PREFIX_VEX_3834) },
7574 { PREFIX_TABLE (PREFIX_VEX_3835) },
592d1631 7575 { Bad_Opcode },
c0f3af97
L
7576 { PREFIX_TABLE (PREFIX_VEX_3837) },
7577 /* 38 */
7578 { PREFIX_TABLE (PREFIX_VEX_3838) },
7579 { PREFIX_TABLE (PREFIX_VEX_3839) },
7580 { PREFIX_TABLE (PREFIX_VEX_383A) },
7581 { PREFIX_TABLE (PREFIX_VEX_383B) },
7582 { PREFIX_TABLE (PREFIX_VEX_383C) },
7583 { PREFIX_TABLE (PREFIX_VEX_383D) },
7584 { PREFIX_TABLE (PREFIX_VEX_383E) },
7585 { PREFIX_TABLE (PREFIX_VEX_383F) },
7586 /* 40 */
7587 { PREFIX_TABLE (PREFIX_VEX_3840) },
7588 { PREFIX_TABLE (PREFIX_VEX_3841) },
592d1631
L
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
c0f3af97 7595 /* 48 */
592d1631
L
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
c0f3af97 7604 /* 50 */
592d1631
L
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
c0f3af97 7613 /* 58 */
592d1631
L
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
c0f3af97 7622 /* 60 */
592d1631
L
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
c0f3af97 7631 /* 68 */
592d1631
L
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
c0f3af97 7640 /* 70 */
592d1631
L
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
c0f3af97 7649 /* 78 */
592d1631
L
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
c0f3af97 7658 /* 80 */
592d1631
L
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
c0f3af97 7667 /* 88 */
592d1631
L
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
c0f3af97 7676 /* 90 */
592d1631
L
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
0bfee649
L
7683 { PREFIX_TABLE (PREFIX_VEX_3896) },
7684 { PREFIX_TABLE (PREFIX_VEX_3897) },
c0f3af97 7685 /* 98 */
0bfee649
L
7686 { PREFIX_TABLE (PREFIX_VEX_3898) },
7687 { PREFIX_TABLE (PREFIX_VEX_3899) },
7688 { PREFIX_TABLE (PREFIX_VEX_389A) },
7689 { PREFIX_TABLE (PREFIX_VEX_389B) },
7690 { PREFIX_TABLE (PREFIX_VEX_389C) },
7691 { PREFIX_TABLE (PREFIX_VEX_389D) },
7692 { PREFIX_TABLE (PREFIX_VEX_389E) },
7693 { PREFIX_TABLE (PREFIX_VEX_389F) },
c0f3af97 7694 /* a0 */
592d1631
L
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
0bfee649
L
7701 { PREFIX_TABLE (PREFIX_VEX_38A6) },
7702 { PREFIX_TABLE (PREFIX_VEX_38A7) },
c0f3af97 7703 /* a8 */
0bfee649
L
7704 { PREFIX_TABLE (PREFIX_VEX_38A8) },
7705 { PREFIX_TABLE (PREFIX_VEX_38A9) },
7706 { PREFIX_TABLE (PREFIX_VEX_38AA) },
7707 { PREFIX_TABLE (PREFIX_VEX_38AB) },
7708 { PREFIX_TABLE (PREFIX_VEX_38AC) },
7709 { PREFIX_TABLE (PREFIX_VEX_38AD) },
7710 { PREFIX_TABLE (PREFIX_VEX_38AE) },
7711 { PREFIX_TABLE (PREFIX_VEX_38AF) },
c0f3af97 7712 /* b0 */
592d1631
L
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
0bfee649
L
7719 { PREFIX_TABLE (PREFIX_VEX_38B6) },
7720 { PREFIX_TABLE (PREFIX_VEX_38B7) },
c0f3af97 7721 /* b8 */
0bfee649
L
7722 { PREFIX_TABLE (PREFIX_VEX_38B8) },
7723 { PREFIX_TABLE (PREFIX_VEX_38B9) },
7724 { PREFIX_TABLE (PREFIX_VEX_38BA) },
7725 { PREFIX_TABLE (PREFIX_VEX_38BB) },
7726 { PREFIX_TABLE (PREFIX_VEX_38BC) },
7727 { PREFIX_TABLE (PREFIX_VEX_38BD) },
7728 { PREFIX_TABLE (PREFIX_VEX_38BE) },
7729 { PREFIX_TABLE (PREFIX_VEX_38BF) },
c0f3af97 7730 /* c0 */
592d1631
L
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
c0f3af97 7739 /* c8 */
592d1631
L
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
c0f3af97 7748 /* d0 */
592d1631
L
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
c0f3af97 7757 /* d8 */
592d1631
L
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
a5ff0eb2
L
7761 { PREFIX_TABLE (PREFIX_VEX_38DB) },
7762 { PREFIX_TABLE (PREFIX_VEX_38DC) },
7763 { PREFIX_TABLE (PREFIX_VEX_38DD) },
7764 { PREFIX_TABLE (PREFIX_VEX_38DE) },
7765 { PREFIX_TABLE (PREFIX_VEX_38DF) },
c0f3af97 7766 /* e0 */
592d1631
L
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
c0f3af97 7775 /* e8 */
592d1631
L
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
c0f3af97 7784 /* f0 */
592d1631
L
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
c0f3af97 7793 /* f8 */
592d1631
L
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
c0f3af97
L
7802 },
7803 /* VEX_0F3A */
7804 {
7805 /* 00 */
592d1631
L
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
c0f3af97
L
7810 { PREFIX_TABLE (PREFIX_VEX_3A04) },
7811 { PREFIX_TABLE (PREFIX_VEX_3A05) },
7812 { PREFIX_TABLE (PREFIX_VEX_3A06) },
592d1631 7813 { Bad_Opcode },
c0f3af97
L
7814 /* 08 */
7815 { PREFIX_TABLE (PREFIX_VEX_3A08) },
7816 { PREFIX_TABLE (PREFIX_VEX_3A09) },
7817 { PREFIX_TABLE (PREFIX_VEX_3A0A) },
7818 { PREFIX_TABLE (PREFIX_VEX_3A0B) },
7819 { PREFIX_TABLE (PREFIX_VEX_3A0C) },
7820 { PREFIX_TABLE (PREFIX_VEX_3A0D) },
7821 { PREFIX_TABLE (PREFIX_VEX_3A0E) },
7822 { PREFIX_TABLE (PREFIX_VEX_3A0F) },
7823 /* 10 */
592d1631
L
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
c0f3af97
L
7828 { PREFIX_TABLE (PREFIX_VEX_3A14) },
7829 { PREFIX_TABLE (PREFIX_VEX_3A15) },
7830 { PREFIX_TABLE (PREFIX_VEX_3A16) },
7831 { PREFIX_TABLE (PREFIX_VEX_3A17) },
7832 /* 18 */
7833 { PREFIX_TABLE (PREFIX_VEX_3A18) },
7834 { PREFIX_TABLE (PREFIX_VEX_3A19) },
592d1631
L
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
c0f3af97
L
7841 /* 20 */
7842 { PREFIX_TABLE (PREFIX_VEX_3A20) },
7843 { PREFIX_TABLE (PREFIX_VEX_3A21) },
7844 { PREFIX_TABLE (PREFIX_VEX_3A22) },
592d1631
L
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
c0f3af97 7850 /* 28 */
592d1631
L
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
c0f3af97 7859 /* 30 */
592d1631
L
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
c0f3af97 7868 /* 38 */
592d1631
L
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
c0f3af97
L
7877 /* 40 */
7878 { PREFIX_TABLE (PREFIX_VEX_3A40) },
7879 { PREFIX_TABLE (PREFIX_VEX_3A41) },
7880 { PREFIX_TABLE (PREFIX_VEX_3A42) },
592d1631 7881 { Bad_Opcode },
ce2f5b3c 7882 { PREFIX_TABLE (PREFIX_VEX_3A44) },
592d1631
L
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
c0f3af97 7886 /* 48 */
a683cc34
SP
7887 { PREFIX_TABLE (PREFIX_VEX_3A48) },
7888 { PREFIX_TABLE (PREFIX_VEX_3A49) },
c0f3af97
L
7889 { PREFIX_TABLE (PREFIX_VEX_3A4A) },
7890 { PREFIX_TABLE (PREFIX_VEX_3A4B) },
7891 { PREFIX_TABLE (PREFIX_VEX_3A4C) },
592d1631
L
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
c0f3af97 7895 /* 50 */
592d1631
L
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
c0f3af97 7904 /* 58 */
592d1631
L
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
922d8de8
DR
7909 { PREFIX_TABLE (PREFIX_VEX_3A5C) },
7910 { PREFIX_TABLE (PREFIX_VEX_3A5D) },
7911 { PREFIX_TABLE (PREFIX_VEX_3A5E) },
7912 { PREFIX_TABLE (PREFIX_VEX_3A5F) },
c0f3af97
L
7913 /* 60 */
7914 { PREFIX_TABLE (PREFIX_VEX_3A60) },
7915 { PREFIX_TABLE (PREFIX_VEX_3A61) },
7916 { PREFIX_TABLE (PREFIX_VEX_3A62) },
7917 { PREFIX_TABLE (PREFIX_VEX_3A63) },
592d1631
L
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
c0f3af97 7922 /* 68 */
922d8de8
DR
7923 { PREFIX_TABLE (PREFIX_VEX_3A68) },
7924 { PREFIX_TABLE (PREFIX_VEX_3A69) },
7925 { PREFIX_TABLE (PREFIX_VEX_3A6A) },
7926 { PREFIX_TABLE (PREFIX_VEX_3A6B) },
7927 { PREFIX_TABLE (PREFIX_VEX_3A6C) },
7928 { PREFIX_TABLE (PREFIX_VEX_3A6D) },
7929 { PREFIX_TABLE (PREFIX_VEX_3A6E) },
7930 { PREFIX_TABLE (PREFIX_VEX_3A6F) },
c0f3af97 7931 /* 70 */
592d1631
L
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
c0f3af97 7940 /* 78 */
922d8de8
DR
7941 { PREFIX_TABLE (PREFIX_VEX_3A78) },
7942 { PREFIX_TABLE (PREFIX_VEX_3A79) },
7943 { PREFIX_TABLE (PREFIX_VEX_3A7A) },
7944 { PREFIX_TABLE (PREFIX_VEX_3A7B) },
7945 { PREFIX_TABLE (PREFIX_VEX_3A7C) },
7946 { PREFIX_TABLE (PREFIX_VEX_3A7D) },
7947 { PREFIX_TABLE (PREFIX_VEX_3A7E) },
7948 { PREFIX_TABLE (PREFIX_VEX_3A7F) },
c0f3af97 7949 /* 80 */
592d1631
L
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
c0f3af97 7958 /* 88 */
592d1631
L
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
c0f3af97 7967 /* 90 */
592d1631
L
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
c0f3af97 7976 /* 98 */
592d1631
L
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
c0f3af97 7985 /* a0 */
592d1631
L
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
c0f3af97 7994 /* a8 */
592d1631
L
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
c0f3af97 8003 /* b0 */
592d1631
L
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
c0f3af97 8012 /* b8 */
592d1631
L
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
c0f3af97 8021 /* c0 */
592d1631
L
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
c0f3af97 8030 /* c8 */
592d1631
L
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
c0f3af97 8039 /* d0 */
592d1631
L
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
c0f3af97 8048 /* d8 */
592d1631
L
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
a5ff0eb2 8056 { PREFIX_TABLE (PREFIX_VEX_3ADF) },
c0f3af97 8057 /* e0 */
592d1631
L
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
c0f3af97 8066 /* e8 */
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
c0f3af97 8075 /* f0 */
592d1631
L
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
c0f3af97 8084 /* f8 */
592d1631
L
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
c0f3af97
L
8093 },
8094};
8095
8096static const struct dis386 vex_len_table[][2] = {
8097 /* VEX_LEN_10_P_1 */
8098 {
9e30b8e0 8099 { VEX_W_TABLE (VEX_W_10_P_1) },
539f890d 8100 { VEX_W_TABLE (VEX_W_10_P_1) },
c0f3af97
L
8101 },
8102
8103 /* VEX_LEN_10_P_3 */
8104 {
9e30b8e0 8105 { VEX_W_TABLE (VEX_W_10_P_3) },
539f890d 8106 { VEX_W_TABLE (VEX_W_10_P_3) },
c0f3af97
L
8107 },
8108
8109 /* VEX_LEN_11_P_1 */
8110 {
9e30b8e0 8111 { VEX_W_TABLE (VEX_W_11_P_1) },
539f890d 8112 { VEX_W_TABLE (VEX_W_11_P_1) },
c0f3af97
L
8113 },
8114
8115 /* VEX_LEN_11_P_3 */
8116 {
9e30b8e0 8117 { VEX_W_TABLE (VEX_W_11_P_3) },
539f890d 8118 { VEX_W_TABLE (VEX_W_11_P_3) },
c0f3af97
L
8119 },
8120
8121 /* VEX_LEN_12_P_0_M_0 */
8122 {
9e30b8e0 8123 { VEX_W_TABLE (VEX_W_12_P_0_M_0) },
c0f3af97
L
8124 },
8125
8126 /* VEX_LEN_12_P_0_M_1 */
8127 {
9e30b8e0 8128 { VEX_W_TABLE (VEX_W_12_P_0_M_1) },
c0f3af97
L
8129 },
8130
8131 /* VEX_LEN_12_P_2 */
8132 {
9e30b8e0 8133 { VEX_W_TABLE (VEX_W_12_P_2) },
c0f3af97
L
8134 },
8135
8136 /* VEX_LEN_13_M_0 */
8137 {
9e30b8e0 8138 { VEX_W_TABLE (VEX_W_13_M_0) },
c0f3af97
L
8139 },
8140
8141 /* VEX_LEN_16_P_0_M_0 */
8142 {
9e30b8e0 8143 { VEX_W_TABLE (VEX_W_16_P_0_M_0) },
c0f3af97
L
8144 },
8145
8146 /* VEX_LEN_16_P_0_M_1 */
8147 {
9e30b8e0 8148 { VEX_W_TABLE (VEX_W_16_P_0_M_1) },
c0f3af97
L
8149 },
8150
8151 /* VEX_LEN_16_P_2 */
8152 {
9e30b8e0 8153 { VEX_W_TABLE (VEX_W_16_P_2) },
c0f3af97
L
8154 },
8155
8156 /* VEX_LEN_17_M_0 */
8157 {
9e30b8e0 8158 { VEX_W_TABLE (VEX_W_17_M_0) },
c0f3af97
L
8159 },
8160
8161 /* VEX_LEN_2A_P_1 */
8162 {
539f890d
L
8163 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8164 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8165 },
8166
8167 /* VEX_LEN_2A_P_3 */
8168 {
539f890d
L
8169 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8170 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
8171 },
8172
c0f3af97
L
8173 /* VEX_LEN_2C_P_1 */
8174 {
539f890d
L
8175 { "vcvttss2siY", { Gv, EXdScalar } },
8176 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
8177 },
8178
8179 /* VEX_LEN_2C_P_3 */
8180 {
539f890d
L
8181 { "vcvttsd2siY", { Gv, EXqScalar } },
8182 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8183 },
8184
8185 /* VEX_LEN_2D_P_1 */
8186 {
539f890d
L
8187 { "vcvtss2siY", { Gv, EXdScalar } },
8188 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
8189 },
8190
8191 /* VEX_LEN_2D_P_3 */
8192 {
539f890d
L
8193 { "vcvtsd2siY", { Gv, EXqScalar } },
8194 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
8195 },
8196
8197 /* VEX_LEN_2E_P_0 */
8198 {
9e30b8e0 8199 { VEX_W_TABLE (VEX_W_2E_P_0) },
539f890d 8200 { VEX_W_TABLE (VEX_W_2E_P_0) },
c0f3af97
L
8201 },
8202
8203 /* VEX_LEN_2E_P_2 */
8204 {
9e30b8e0 8205 { VEX_W_TABLE (VEX_W_2E_P_2) },
539f890d 8206 { VEX_W_TABLE (VEX_W_2E_P_2) },
c0f3af97
L
8207 },
8208
8209 /* VEX_LEN_2F_P_0 */
8210 {
9e30b8e0 8211 { VEX_W_TABLE (VEX_W_2F_P_0) },
539f890d 8212 { VEX_W_TABLE (VEX_W_2F_P_0) },
c0f3af97
L
8213 },
8214
8215 /* VEX_LEN_2F_P_2 */
8216 {
9e30b8e0 8217 { VEX_W_TABLE (VEX_W_2F_P_2) },
539f890d 8218 { VEX_W_TABLE (VEX_W_2F_P_2) },
c0f3af97
L
8219 },
8220
8221 /* VEX_LEN_51_P_1 */
8222 {
9e30b8e0 8223 { VEX_W_TABLE (VEX_W_51_P_1) },
539f890d 8224 { VEX_W_TABLE (VEX_W_51_P_1) },
c0f3af97
L
8225 },
8226
8227 /* VEX_LEN_51_P_3 */
8228 {
9e30b8e0 8229 { VEX_W_TABLE (VEX_W_51_P_3) },
539f890d 8230 { VEX_W_TABLE (VEX_W_51_P_3) },
c0f3af97
L
8231 },
8232
8233 /* VEX_LEN_52_P_1 */
8234 {
9e30b8e0 8235 { VEX_W_TABLE (VEX_W_52_P_1) },
539f890d 8236 { VEX_W_TABLE (VEX_W_52_P_1) },
c0f3af97
L
8237 },
8238
8239 /* VEX_LEN_53_P_1 */
8240 {
9e30b8e0 8241 { VEX_W_TABLE (VEX_W_53_P_1) },
539f890d 8242 { VEX_W_TABLE (VEX_W_53_P_1) },
c0f3af97
L
8243 },
8244
8245 /* VEX_LEN_58_P_1 */
8246 {
9e30b8e0 8247 { VEX_W_TABLE (VEX_W_58_P_1) },
539f890d 8248 { VEX_W_TABLE (VEX_W_58_P_1) },
c0f3af97
L
8249 },
8250
8251 /* VEX_LEN_58_P_3 */
8252 {
9e30b8e0 8253 { VEX_W_TABLE (VEX_W_58_P_3) },
539f890d 8254 { VEX_W_TABLE (VEX_W_58_P_3) },
c0f3af97
L
8255 },
8256
8257 /* VEX_LEN_59_P_1 */
8258 {
9e30b8e0 8259 { VEX_W_TABLE (VEX_W_59_P_1) },
539f890d 8260 { VEX_W_TABLE (VEX_W_59_P_1) },
c0f3af97
L
8261 },
8262
8263 /* VEX_LEN_59_P_3 */
8264 {
9e30b8e0 8265 { VEX_W_TABLE (VEX_W_59_P_3) },
539f890d 8266 { VEX_W_TABLE (VEX_W_59_P_3) },
c0f3af97
L
8267 },
8268
8269 /* VEX_LEN_5A_P_1 */
8270 {
9e30b8e0 8271 { VEX_W_TABLE (VEX_W_5A_P_1) },
539f890d 8272 { VEX_W_TABLE (VEX_W_5A_P_1) },
c0f3af97
L
8273 },
8274
8275 /* VEX_LEN_5A_P_3 */
8276 {
9e30b8e0 8277 { VEX_W_TABLE (VEX_W_5A_P_3) },
539f890d 8278 { VEX_W_TABLE (VEX_W_5A_P_3) },
c0f3af97
L
8279 },
8280
8281 /* VEX_LEN_5C_P_1 */
8282 {
9e30b8e0 8283 { VEX_W_TABLE (VEX_W_5C_P_1) },
539f890d 8284 { VEX_W_TABLE (VEX_W_5C_P_1) },
c0f3af97
L
8285 },
8286
8287 /* VEX_LEN_5C_P_3 */
8288 {
9e30b8e0 8289 { VEX_W_TABLE (VEX_W_5C_P_3) },
539f890d 8290 { VEX_W_TABLE (VEX_W_5C_P_3) },
c0f3af97
L
8291 },
8292
8293 /* VEX_LEN_5D_P_1 */
8294 {
9e30b8e0 8295 { VEX_W_TABLE (VEX_W_5D_P_1) },
539f890d 8296 { VEX_W_TABLE (VEX_W_5D_P_1) },
c0f3af97
L
8297 },
8298
8299 /* VEX_LEN_5D_P_3 */
8300 {
9e30b8e0 8301 { VEX_W_TABLE (VEX_W_5D_P_3) },
539f890d 8302 { VEX_W_TABLE (VEX_W_5D_P_3) },
c0f3af97
L
8303 },
8304
8305 /* VEX_LEN_5E_P_1 */
8306 {
9e30b8e0 8307 { VEX_W_TABLE (VEX_W_5E_P_1) },
539f890d 8308 { VEX_W_TABLE (VEX_W_5E_P_1) },
c0f3af97
L
8309 },
8310
8311 /* VEX_LEN_5E_P_3 */
8312 {
9e30b8e0 8313 { VEX_W_TABLE (VEX_W_5E_P_3) },
539f890d 8314 { VEX_W_TABLE (VEX_W_5E_P_3) },
c0f3af97
L
8315 },
8316
8317 /* VEX_LEN_5F_P_1 */
8318 {
9e30b8e0 8319 { VEX_W_TABLE (VEX_W_5F_P_1) },
539f890d 8320 { VEX_W_TABLE (VEX_W_5F_P_1) },
c0f3af97
L
8321 },
8322
8323 /* VEX_LEN_5F_P_3 */
8324 {
9e30b8e0 8325 { VEX_W_TABLE (VEX_W_5F_P_3) },
539f890d 8326 { VEX_W_TABLE (VEX_W_5F_P_3) },
c0f3af97
L
8327 },
8328
8329 /* VEX_LEN_60_P_2 */
8330 {
9e30b8e0 8331 { VEX_W_TABLE (VEX_W_60_P_2) },
c0f3af97
L
8332 },
8333
8334 /* VEX_LEN_61_P_2 */
8335 {
9e30b8e0 8336 { VEX_W_TABLE (VEX_W_61_P_2) },
c0f3af97
L
8337 },
8338
8339 /* VEX_LEN_62_P_2 */
8340 {
9e30b8e0 8341 { VEX_W_TABLE (VEX_W_62_P_2) },
c0f3af97
L
8342 },
8343
8344 /* VEX_LEN_63_P_2 */
8345 {
9e30b8e0 8346 { VEX_W_TABLE (VEX_W_63_P_2) },
c0f3af97
L
8347 },
8348
8349 /* VEX_LEN_64_P_2 */
8350 {
9e30b8e0 8351 { VEX_W_TABLE (VEX_W_64_P_2) },
c0f3af97
L
8352 },
8353
8354 /* VEX_LEN_65_P_2 */
8355 {
9e30b8e0 8356 { VEX_W_TABLE (VEX_W_65_P_2) },
c0f3af97
L
8357 },
8358
8359 /* VEX_LEN_66_P_2 */
8360 {
9e30b8e0 8361 { VEX_W_TABLE (VEX_W_66_P_2) },
c0f3af97
L
8362 },
8363
8364 /* VEX_LEN_67_P_2 */
8365 {
9e30b8e0 8366 { VEX_W_TABLE (VEX_W_67_P_2) },
c0f3af97
L
8367 },
8368
8369 /* VEX_LEN_68_P_2 */
8370 {
9e30b8e0 8371 { VEX_W_TABLE (VEX_W_68_P_2) },
c0f3af97
L
8372 },
8373
8374 /* VEX_LEN_69_P_2 */
8375 {
9e30b8e0 8376 { VEX_W_TABLE (VEX_W_69_P_2) },
c0f3af97
L
8377 },
8378
8379 /* VEX_LEN_6A_P_2 */
8380 {
9e30b8e0 8381 { VEX_W_TABLE (VEX_W_6A_P_2) },
c0f3af97
L
8382 },
8383
8384 /* VEX_LEN_6B_P_2 */
8385 {
9e30b8e0 8386 { VEX_W_TABLE (VEX_W_6B_P_2) },
c0f3af97
L
8387 },
8388
8389 /* VEX_LEN_6C_P_2 */
8390 {
9e30b8e0 8391 { VEX_W_TABLE (VEX_W_6C_P_2) },
c0f3af97
L
8392 },
8393
8394 /* VEX_LEN_6D_P_2 */
8395 {
9e30b8e0 8396 { VEX_W_TABLE (VEX_W_6D_P_2) },
c0f3af97
L
8397 },
8398
8399 /* VEX_LEN_6E_P_2 */
8400 {
539f890d
L
8401 { "vmovK", { XMScalar, Edq } },
8402 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
8403 },
8404
8405 /* VEX_LEN_70_P_1 */
8406 {
9e30b8e0 8407 { VEX_W_TABLE (VEX_W_70_P_1) },
c0f3af97
L
8408 },
8409
8410 /* VEX_LEN_70_P_2 */
8411 {
9e30b8e0 8412 { VEX_W_TABLE (VEX_W_70_P_2) },
c0f3af97
L
8413 },
8414
8415 /* VEX_LEN_70_P_3 */
8416 {
9e30b8e0 8417 { VEX_W_TABLE (VEX_W_70_P_3) },
c0f3af97
L
8418 },
8419
8420 /* VEX_LEN_71_R_2_P_2 */
8421 {
9e30b8e0 8422 { VEX_W_TABLE (VEX_W_71_R_2_P_2) },
c0f3af97
L
8423 },
8424
8425 /* VEX_LEN_71_R_4_P_2 */
8426 {
9e30b8e0 8427 { VEX_W_TABLE (VEX_W_71_R_4_P_2) },
c0f3af97
L
8428 },
8429
8430 /* VEX_LEN_71_R_6_P_2 */
8431 {
9e30b8e0 8432 { VEX_W_TABLE (VEX_W_71_R_6_P_2) },
c0f3af97
L
8433 },
8434
8435 /* VEX_LEN_72_R_2_P_2 */
8436 {
9e30b8e0 8437 { VEX_W_TABLE (VEX_W_72_R_2_P_2) },
c0f3af97
L
8438 },
8439
8440 /* VEX_LEN_72_R_4_P_2 */
8441 {
9e30b8e0 8442 { VEX_W_TABLE (VEX_W_72_R_4_P_2) },
c0f3af97
L
8443 },
8444
8445 /* VEX_LEN_72_R_6_P_2 */
8446 {
9e30b8e0 8447 { VEX_W_TABLE (VEX_W_72_R_6_P_2) },
c0f3af97
L
8448 },
8449
8450 /* VEX_LEN_73_R_2_P_2 */
8451 {
9e30b8e0 8452 { VEX_W_TABLE (VEX_W_73_R_2_P_2) },
c0f3af97
L
8453 },
8454
8455 /* VEX_LEN_73_R_3_P_2 */
8456 {
9e30b8e0 8457 { VEX_W_TABLE (VEX_W_73_R_3_P_2) },
c0f3af97
L
8458 },
8459
8460 /* VEX_LEN_73_R_6_P_2 */
8461 {
9e30b8e0 8462 { VEX_W_TABLE (VEX_W_73_R_6_P_2) },
c0f3af97
L
8463 },
8464
8465 /* VEX_LEN_73_R_7_P_2 */
8466 {
9e30b8e0 8467 { VEX_W_TABLE (VEX_W_73_R_7_P_2) },
c0f3af97
L
8468 },
8469
8470 /* VEX_LEN_74_P_2 */
8471 {
9e30b8e0 8472 { VEX_W_TABLE (VEX_W_74_P_2) },
c0f3af97
L
8473 },
8474
8475 /* VEX_LEN_75_P_2 */
8476 {
9e30b8e0 8477 { VEX_W_TABLE (VEX_W_75_P_2) },
c0f3af97
L
8478 },
8479
8480 /* VEX_LEN_76_P_2 */
8481 {
9e30b8e0 8482 { VEX_W_TABLE (VEX_W_76_P_2) },
c0f3af97
L
8483 },
8484
8485 /* VEX_LEN_7E_P_1 */
8486 {
9e30b8e0 8487 { VEX_W_TABLE (VEX_W_7E_P_1) },
539f890d 8488 { VEX_W_TABLE (VEX_W_7E_P_1) },
c0f3af97
L
8489 },
8490
8491 /* VEX_LEN_7E_P_2 */
8492 {
539f890d
L
8493 { "vmovK", { Edq, XMScalar } },
8494 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
8495 },
8496
9daa0d29 8497 /* VEX_LEN_AE_R_2_M_0 */
c0f3af97 8498 {
9e30b8e0 8499 { VEX_W_TABLE (VEX_W_AE_R_2_M_0) },
c0f3af97
L
8500 },
8501
9daa0d29 8502 /* VEX_LEN_AE_R_3_M_0 */
c0f3af97 8503 {
9e30b8e0 8504 { VEX_W_TABLE (VEX_W_AE_R_3_M_0) },
c0f3af97
L
8505 },
8506
8507 /* VEX_LEN_C2_P_1 */
8508 {
9e30b8e0 8509 { VEX_W_TABLE (VEX_W_C2_P_1) },
539f890d 8510 { VEX_W_TABLE (VEX_W_C2_P_1) },
c0f3af97
L
8511 },
8512
8513 /* VEX_LEN_C2_P_3 */
8514 {
9e30b8e0 8515 { VEX_W_TABLE (VEX_W_C2_P_3) },
539f890d 8516 { VEX_W_TABLE (VEX_W_C2_P_3) },
c0f3af97
L
8517 },
8518
8519 /* VEX_LEN_C4_P_2 */
8520 {
9e30b8e0 8521 { VEX_W_TABLE (VEX_W_C4_P_2) },
c0f3af97
L
8522 },
8523
8524 /* VEX_LEN_C5_P_2 */
8525 {
9e30b8e0 8526 { VEX_W_TABLE (VEX_W_C5_P_2) },
c0f3af97
L
8527 },
8528
8529 /* VEX_LEN_D1_P_2 */
8530 {
9e30b8e0 8531 { VEX_W_TABLE (VEX_W_D1_P_2) },
c0f3af97
L
8532 },
8533
8534 /* VEX_LEN_D2_P_2 */
8535 {
9e30b8e0 8536 { VEX_W_TABLE (VEX_W_D2_P_2) },
c0f3af97
L
8537 },
8538
8539 /* VEX_LEN_D3_P_2 */
8540 {
9e30b8e0 8541 { VEX_W_TABLE (VEX_W_D3_P_2) },
c0f3af97
L
8542 },
8543
8544 /* VEX_LEN_D4_P_2 */
8545 {
9e30b8e0 8546 { VEX_W_TABLE (VEX_W_D4_P_2) },
c0f3af97
L
8547 },
8548
8549 /* VEX_LEN_D5_P_2 */
8550 {
9e30b8e0 8551 { VEX_W_TABLE (VEX_W_D5_P_2) },
c0f3af97
L
8552 },
8553
8554 /* VEX_LEN_D6_P_2 */
8555 {
9e30b8e0 8556 { VEX_W_TABLE (VEX_W_D6_P_2) },
539f890d 8557 { VEX_W_TABLE (VEX_W_D6_P_2) },
c0f3af97
L
8558 },
8559
8560 /* VEX_LEN_D7_P_2_M_1 */
8561 {
9e30b8e0 8562 { VEX_W_TABLE (VEX_W_D7_P_2_M_1) },
c0f3af97
L
8563 },
8564
8565 /* VEX_LEN_D8_P_2 */
8566 {
9e30b8e0 8567 { VEX_W_TABLE (VEX_W_D8_P_2) },
c0f3af97
L
8568 },
8569
8570 /* VEX_LEN_D9_P_2 */
8571 {
9e30b8e0 8572 { VEX_W_TABLE (VEX_W_D9_P_2) },
c0f3af97
L
8573 },
8574
8575 /* VEX_LEN_DA_P_2 */
8576 {
9e30b8e0 8577 { VEX_W_TABLE (VEX_W_DA_P_2) },
c0f3af97
L
8578 },
8579
8580 /* VEX_LEN_DB_P_2 */
8581 {
9e30b8e0 8582 { VEX_W_TABLE (VEX_W_DB_P_2) },
c0f3af97
L
8583 },
8584
8585 /* VEX_LEN_DC_P_2 */
8586 {
9e30b8e0 8587 { VEX_W_TABLE (VEX_W_DC_P_2) },
c0f3af97
L
8588 },
8589
8590 /* VEX_LEN_DD_P_2 */
8591 {
9e30b8e0 8592 { VEX_W_TABLE (VEX_W_DD_P_2) },
c0f3af97
L
8593 },
8594
8595 /* VEX_LEN_DE_P_2 */
8596 {
9e30b8e0 8597 { VEX_W_TABLE (VEX_W_DE_P_2) },
c0f3af97
L
8598 },
8599
8600 /* VEX_LEN_DF_P_2 */
8601 {
9e30b8e0 8602 { VEX_W_TABLE (VEX_W_DF_P_2) },
c0f3af97
L
8603 },
8604
8605 /* VEX_LEN_E0_P_2 */
8606 {
9e30b8e0 8607 { VEX_W_TABLE (VEX_W_E0_P_2) },
c0f3af97
L
8608 },
8609
8610 /* VEX_LEN_E1_P_2 */
8611 {
9e30b8e0 8612 { VEX_W_TABLE (VEX_W_E1_P_2) },
c0f3af97
L
8613 },
8614
8615 /* VEX_LEN_E2_P_2 */
8616 {
9e30b8e0 8617 { VEX_W_TABLE (VEX_W_E2_P_2) },
c0f3af97
L
8618 },
8619
8620 /* VEX_LEN_E3_P_2 */
8621 {
9e30b8e0 8622 { VEX_W_TABLE (VEX_W_E3_P_2) },
c0f3af97
L
8623 },
8624
8625 /* VEX_LEN_E4_P_2 */
8626 {
9e30b8e0 8627 { VEX_W_TABLE (VEX_W_E4_P_2) },
c0f3af97
L
8628 },
8629
8630 /* VEX_LEN_E5_P_2 */
8631 {
9e30b8e0 8632 { VEX_W_TABLE (VEX_W_E5_P_2) },
c0f3af97
L
8633 },
8634
c0f3af97
L
8635 /* VEX_LEN_E8_P_2 */
8636 {
9e30b8e0 8637 { VEX_W_TABLE (VEX_W_E8_P_2) },
c0f3af97
L
8638 },
8639
8640 /* VEX_LEN_E9_P_2 */
8641 {
9e30b8e0 8642 { VEX_W_TABLE (VEX_W_E9_P_2) },
c0f3af97
L
8643 },
8644
8645 /* VEX_LEN_EA_P_2 */
8646 {
9e30b8e0 8647 { VEX_W_TABLE (VEX_W_EA_P_2) },
c0f3af97
L
8648 },
8649
8650 /* VEX_LEN_EB_P_2 */
8651 {
9e30b8e0 8652 { VEX_W_TABLE (VEX_W_EB_P_2) },
c0f3af97
L
8653 },
8654
8655 /* VEX_LEN_EC_P_2 */
8656 {
9e30b8e0 8657 { VEX_W_TABLE (VEX_W_EC_P_2) },
c0f3af97
L
8658 },
8659
8660 /* VEX_LEN_ED_P_2 */
8661 {
9e30b8e0 8662 { VEX_W_TABLE (VEX_W_ED_P_2) },
c0f3af97
L
8663 },
8664
8665 /* VEX_LEN_EE_P_2 */
8666 {
9e30b8e0 8667 { VEX_W_TABLE (VEX_W_EE_P_2) },
c0f3af97
L
8668 },
8669
8670 /* VEX_LEN_EF_P_2 */
8671 {
9e30b8e0 8672 { VEX_W_TABLE (VEX_W_EF_P_2) },
c0f3af97
L
8673 },
8674
8675 /* VEX_LEN_F1_P_2 */
8676 {
9e30b8e0 8677 { VEX_W_TABLE (VEX_W_F1_P_2) },
c0f3af97
L
8678 },
8679
8680 /* VEX_LEN_F2_P_2 */
8681 {
9e30b8e0 8682 { VEX_W_TABLE (VEX_W_F2_P_2) },
c0f3af97
L
8683 },
8684
8685 /* VEX_LEN_F3_P_2 */
8686 {
9e30b8e0 8687 { VEX_W_TABLE (VEX_W_F3_P_2) },
c0f3af97
L
8688 },
8689
8690 /* VEX_LEN_F4_P_2 */
8691 {
9e30b8e0 8692 { VEX_W_TABLE (VEX_W_F4_P_2) },
c0f3af97
L
8693 },
8694
8695 /* VEX_LEN_F5_P_2 */
8696 {
9e30b8e0 8697 { VEX_W_TABLE (VEX_W_F5_P_2) },
c0f3af97
L
8698 },
8699
8700 /* VEX_LEN_F6_P_2 */
8701 {
9e30b8e0 8702 { VEX_W_TABLE (VEX_W_F6_P_2) },
c0f3af97
L
8703 },
8704
8705 /* VEX_LEN_F7_P_2 */
8706 {
9e30b8e0 8707 { VEX_W_TABLE (VEX_W_F7_P_2) },
c0f3af97
L
8708 },
8709
8710 /* VEX_LEN_F8_P_2 */
8711 {
9e30b8e0 8712 { VEX_W_TABLE (VEX_W_F8_P_2) },
c0f3af97
L
8713 },
8714
8715 /* VEX_LEN_F9_P_2 */
8716 {
9e30b8e0 8717 { VEX_W_TABLE (VEX_W_F9_P_2) },
c0f3af97
L
8718 },
8719
8720 /* VEX_LEN_FA_P_2 */
8721 {
9e30b8e0 8722 { VEX_W_TABLE (VEX_W_FA_P_2) },
c0f3af97
L
8723 },
8724
8725 /* VEX_LEN_FB_P_2 */
8726 {
9e30b8e0 8727 { VEX_W_TABLE (VEX_W_FB_P_2) },
c0f3af97
L
8728 },
8729
8730 /* VEX_LEN_FC_P_2 */
8731 {
9e30b8e0 8732 { VEX_W_TABLE (VEX_W_FC_P_2) },
c0f3af97
L
8733 },
8734
8735 /* VEX_LEN_FD_P_2 */
8736 {
9e30b8e0 8737 { VEX_W_TABLE (VEX_W_FD_P_2) },
c0f3af97
L
8738 },
8739
8740 /* VEX_LEN_FE_P_2 */
8741 {
9e30b8e0 8742 { VEX_W_TABLE (VEX_W_FE_P_2) },
c0f3af97
L
8743 },
8744
8745 /* VEX_LEN_3800_P_2 */
8746 {
9e30b8e0 8747 { VEX_W_TABLE (VEX_W_3800_P_2) },
c0f3af97
L
8748 },
8749
8750 /* VEX_LEN_3801_P_2 */
8751 {
9e30b8e0 8752 { VEX_W_TABLE (VEX_W_3801_P_2) },
c0f3af97
L
8753 },
8754
8755 /* VEX_LEN_3802_P_2 */
8756 {
9e30b8e0 8757 { VEX_W_TABLE (VEX_W_3802_P_2) },
c0f3af97
L
8758 },
8759
8760 /* VEX_LEN_3803_P_2 */
8761 {
9e30b8e0 8762 { VEX_W_TABLE (VEX_W_3803_P_2) },
c0f3af97
L
8763 },
8764
8765 /* VEX_LEN_3804_P_2 */
8766 {
9e30b8e0 8767 { VEX_W_TABLE (VEX_W_3804_P_2) },
c0f3af97
L
8768 },
8769
8770 /* VEX_LEN_3805_P_2 */
8771 {
9e30b8e0 8772 { VEX_W_TABLE (VEX_W_3805_P_2) },
c0f3af97
L
8773 },
8774
8775 /* VEX_LEN_3806_P_2 */
8776 {
9e30b8e0 8777 { VEX_W_TABLE (VEX_W_3806_P_2) },
c0f3af97
L
8778 },
8779
8780 /* VEX_LEN_3807_P_2 */
8781 {
9e30b8e0 8782 { VEX_W_TABLE (VEX_W_3807_P_2) },
c0f3af97
L
8783 },
8784
8785 /* VEX_LEN_3808_P_2 */
8786 {
9e30b8e0 8787 { VEX_W_TABLE (VEX_W_3808_P_2) },
c0f3af97
L
8788 },
8789
8790 /* VEX_LEN_3809_P_2 */
8791 {
9e30b8e0 8792 { VEX_W_TABLE (VEX_W_3809_P_2) },
c0f3af97
L
8793 },
8794
8795 /* VEX_LEN_380A_P_2 */
8796 {
9e30b8e0 8797 { VEX_W_TABLE (VEX_W_380A_P_2) },
c0f3af97
L
8798 },
8799
8800 /* VEX_LEN_380B_P_2 */
8801 {
9e30b8e0 8802 { VEX_W_TABLE (VEX_W_380B_P_2) },
c0f3af97
L
8803 },
8804
8805 /* VEX_LEN_3819_P_2_M_0 */
8806 {
592d1631 8807 { Bad_Opcode },
9e30b8e0 8808 { VEX_W_TABLE (VEX_W_3819_P_2_M_0) },
c0f3af97
L
8809 },
8810
8811 /* VEX_LEN_381A_P_2_M_0 */
8812 {
592d1631 8813 { Bad_Opcode },
9e30b8e0 8814 { VEX_W_TABLE (VEX_W_381A_P_2_M_0) },
c0f3af97
L
8815 },
8816
8817 /* VEX_LEN_381C_P_2 */
8818 {
9e30b8e0 8819 { VEX_W_TABLE (VEX_W_381C_P_2) },
c0f3af97
L
8820 },
8821
8822 /* VEX_LEN_381D_P_2 */
8823 {
9e30b8e0 8824 { VEX_W_TABLE (VEX_W_381D_P_2) },
c0f3af97
L
8825 },
8826
8827 /* VEX_LEN_381E_P_2 */
8828 {
9e30b8e0 8829 { VEX_W_TABLE (VEX_W_381E_P_2) },
c0f3af97
L
8830 },
8831
8832 /* VEX_LEN_3820_P_2 */
8833 {
9e30b8e0 8834 { VEX_W_TABLE (VEX_W_3820_P_2) },
c0f3af97
L
8835 },
8836
8837 /* VEX_LEN_3821_P_2 */
8838 {
9e30b8e0 8839 { VEX_W_TABLE (VEX_W_3821_P_2) },
c0f3af97
L
8840 },
8841
8842 /* VEX_LEN_3822_P_2 */
8843 {
9e30b8e0 8844 { VEX_W_TABLE (VEX_W_3822_P_2) },
c0f3af97
L
8845 },
8846
8847 /* VEX_LEN_3823_P_2 */
8848 {
9e30b8e0 8849 { VEX_W_TABLE (VEX_W_3823_P_2) },
c0f3af97
L
8850 },
8851
8852 /* VEX_LEN_3824_P_2 */
8853 {
9e30b8e0 8854 { VEX_W_TABLE (VEX_W_3824_P_2) },
c0f3af97
L
8855 },
8856
8857 /* VEX_LEN_3825_P_2 */
8858 {
9e30b8e0 8859 { VEX_W_TABLE (VEX_W_3825_P_2) },
c0f3af97
L
8860 },
8861
8862 /* VEX_LEN_3828_P_2 */
8863 {
9e30b8e0 8864 { VEX_W_TABLE (VEX_W_3828_P_2) },
c0f3af97
L
8865 },
8866
8867 /* VEX_LEN_3829_P_2 */
8868 {
9e30b8e0 8869 { VEX_W_TABLE (VEX_W_3829_P_2) },
c0f3af97
L
8870 },
8871
8872 /* VEX_LEN_382A_P_2_M_0 */
8873 {
9e30b8e0 8874 { VEX_W_TABLE (VEX_W_382A_P_2_M_0) },
c0f3af97
L
8875 },
8876
8877 /* VEX_LEN_382B_P_2 */
8878 {
9e30b8e0 8879 { VEX_W_TABLE (VEX_W_382B_P_2) },
c0f3af97
L
8880 },
8881
8882 /* VEX_LEN_3830_P_2 */
8883 {
9e30b8e0 8884 { VEX_W_TABLE (VEX_W_3830_P_2) },
c0f3af97
L
8885 },
8886
8887 /* VEX_LEN_3831_P_2 */
8888 {
9e30b8e0 8889 { VEX_W_TABLE (VEX_W_3831_P_2) },
c0f3af97
L
8890 },
8891
8892 /* VEX_LEN_3832_P_2 */
8893 {
9e30b8e0 8894 { VEX_W_TABLE (VEX_W_3832_P_2) },
c0f3af97
L
8895 },
8896
8897 /* VEX_LEN_3833_P_2 */
8898 {
9e30b8e0 8899 { VEX_W_TABLE (VEX_W_3833_P_2) },
c0f3af97
L
8900 },
8901
8902 /* VEX_LEN_3834_P_2 */
8903 {
9e30b8e0 8904 { VEX_W_TABLE (VEX_W_3834_P_2) },
c0f3af97
L
8905 },
8906
8907 /* VEX_LEN_3835_P_2 */
8908 {
9e30b8e0 8909 { VEX_W_TABLE (VEX_W_3835_P_2) },
c0f3af97
L
8910 },
8911
8912 /* VEX_LEN_3837_P_2 */
8913 {
9e30b8e0 8914 { VEX_W_TABLE (VEX_W_3837_P_2) },
c0f3af97
L
8915 },
8916
8917 /* VEX_LEN_3838_P_2 */
8918 {
9e30b8e0 8919 { VEX_W_TABLE (VEX_W_3838_P_2) },
c0f3af97
L
8920 },
8921
8922 /* VEX_LEN_3839_P_2 */
8923 {
9e30b8e0 8924 { VEX_W_TABLE (VEX_W_3839_P_2) },
c0f3af97
L
8925 },
8926
8927 /* VEX_LEN_383A_P_2 */
8928 {
9e30b8e0 8929 { VEX_W_TABLE (VEX_W_383A_P_2) },
c0f3af97
L
8930 },
8931
8932 /* VEX_LEN_383B_P_2 */
8933 {
9e30b8e0 8934 { VEX_W_TABLE (VEX_W_383B_P_2) },
c0f3af97
L
8935 },
8936
8937 /* VEX_LEN_383C_P_2 */
8938 {
9e30b8e0 8939 { VEX_W_TABLE (VEX_W_383C_P_2) },
c0f3af97
L
8940 },
8941
8942 /* VEX_LEN_383D_P_2 */
8943 {
9e30b8e0 8944 { VEX_W_TABLE (VEX_W_383D_P_2) },
c0f3af97
L
8945 },
8946
8947 /* VEX_LEN_383E_P_2 */
8948 {
9e30b8e0 8949 { VEX_W_TABLE (VEX_W_383E_P_2) },
c0f3af97
L
8950 },
8951
8952 /* VEX_LEN_383F_P_2 */
8953 {
9e30b8e0 8954 { VEX_W_TABLE (VEX_W_383F_P_2) },
c0f3af97
L
8955 },
8956
8957 /* VEX_LEN_3840_P_2 */
8958 {
9e30b8e0 8959 { VEX_W_TABLE (VEX_W_3840_P_2) },
c0f3af97
L
8960 },
8961
8962 /* VEX_LEN_3841_P_2 */
8963 {
9e30b8e0 8964 { VEX_W_TABLE (VEX_W_3841_P_2) },
c0f3af97
L
8965 },
8966
a5ff0eb2
L
8967 /* VEX_LEN_38DB_P_2 */
8968 {
9e30b8e0 8969 { VEX_W_TABLE (VEX_W_38DB_P_2) },
a5ff0eb2
L
8970 },
8971
8972 /* VEX_LEN_38DC_P_2 */
8973 {
9e30b8e0 8974 { VEX_W_TABLE (VEX_W_38DC_P_2) },
a5ff0eb2
L
8975 },
8976
8977 /* VEX_LEN_38DD_P_2 */
8978 {
9e30b8e0 8979 { VEX_W_TABLE (VEX_W_38DD_P_2) },
a5ff0eb2
L
8980 },
8981
8982 /* VEX_LEN_38DE_P_2 */
8983 {
9e30b8e0 8984 { VEX_W_TABLE (VEX_W_38DE_P_2) },
a5ff0eb2
L
8985 },
8986
8987 /* VEX_LEN_38DF_P_2 */
8988 {
9e30b8e0 8989 { VEX_W_TABLE (VEX_W_38DF_P_2) },
a5ff0eb2
L
8990 },
8991
c0f3af97
L
8992 /* VEX_LEN_3A06_P_2 */
8993 {
592d1631 8994 { Bad_Opcode },
9e30b8e0 8995 { VEX_W_TABLE (VEX_W_3A06_P_2) },
c0f3af97
L
8996 },
8997
8998 /* VEX_LEN_3A0A_P_2 */
8999 {
9e30b8e0 9000 { VEX_W_TABLE (VEX_W_3A0A_P_2) },
539f890d 9001 { VEX_W_TABLE (VEX_W_3A0A_P_2) },
c0f3af97
L
9002 },
9003
9004 /* VEX_LEN_3A0B_P_2 */
9005 {
9e30b8e0 9006 { VEX_W_TABLE (VEX_W_3A0B_P_2) },
539f890d 9007 { VEX_W_TABLE (VEX_W_3A0B_P_2) },
c0f3af97
L
9008 },
9009
9010 /* VEX_LEN_3A0E_P_2 */
9011 {
9e30b8e0 9012 { VEX_W_TABLE (VEX_W_3A0E_P_2) },
c0f3af97
L
9013 },
9014
9015 /* VEX_LEN_3A0F_P_2 */
9016 {
9e30b8e0 9017 { VEX_W_TABLE (VEX_W_3A0F_P_2) },
c0f3af97
L
9018 },
9019
9020 /* VEX_LEN_3A14_P_2 */
9021 {
9e30b8e0 9022 { VEX_W_TABLE (VEX_W_3A14_P_2) },
c0f3af97
L
9023 },
9024
9025 /* VEX_LEN_3A15_P_2 */
9026 {
9e30b8e0 9027 { VEX_W_TABLE (VEX_W_3A15_P_2) },
c0f3af97
L
9028 },
9029
9030 /* VEX_LEN_3A16_P_2 */
9031 {
9032 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
9033 },
9034
9035 /* VEX_LEN_3A17_P_2 */
9036 {
9037 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
9038 },
9039
9040 /* VEX_LEN_3A18_P_2 */
9041 {
592d1631 9042 { Bad_Opcode },
9e30b8e0 9043 { VEX_W_TABLE (VEX_W_3A18_P_2) },
c0f3af97
L
9044 },
9045
9046 /* VEX_LEN_3A19_P_2 */
9047 {
592d1631 9048 { Bad_Opcode },
9e30b8e0 9049 { VEX_W_TABLE (VEX_W_3A19_P_2) },
c0f3af97
L
9050 },
9051
9052 /* VEX_LEN_3A20_P_2 */
9053 {
9e30b8e0 9054 { VEX_W_TABLE (VEX_W_3A20_P_2) },
c0f3af97
L
9055 },
9056
9057 /* VEX_LEN_3A21_P_2 */
9058 {
9e30b8e0 9059 { VEX_W_TABLE (VEX_W_3A21_P_2) },
c0f3af97
L
9060 },
9061
9062 /* VEX_LEN_3A22_P_2 */
9063 {
9064 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
9065 },
9066
9067 /* VEX_LEN_3A41_P_2 */
9068 {
9e30b8e0 9069 { VEX_W_TABLE (VEX_W_3A41_P_2) },
c0f3af97
L
9070 },
9071
9072 /* VEX_LEN_3A42_P_2 */
9073 {
9e30b8e0 9074 { VEX_W_TABLE (VEX_W_3A42_P_2) },
c0f3af97
L
9075 },
9076
ce2f5b3c
L
9077 /* VEX_LEN_3A44_P_2 */
9078 {
9e30b8e0 9079 { VEX_W_TABLE (VEX_W_3A44_P_2) },
ce2f5b3c
L
9080 },
9081
c0f3af97
L
9082 /* VEX_LEN_3A4C_P_2 */
9083 {
9e30b8e0 9084 { VEX_W_TABLE (VEX_W_3A4C_P_2) },
c0f3af97
L
9085 },
9086
9087 /* VEX_LEN_3A60_P_2 */
9088 {
9e30b8e0 9089 { VEX_W_TABLE (VEX_W_3A60_P_2) },
c0f3af97
L
9090 },
9091
9092 /* VEX_LEN_3A61_P_2 */
9093 {
9e30b8e0 9094 { VEX_W_TABLE (VEX_W_3A61_P_2) },
c0f3af97
L
9095 },
9096
9097 /* VEX_LEN_3A62_P_2 */
9098 {
9e30b8e0 9099 { VEX_W_TABLE (VEX_W_3A62_P_2) },
c0f3af97
L
9100 },
9101
9102 /* VEX_LEN_3A63_P_2 */
9103 {
9e30b8e0 9104 { VEX_W_TABLE (VEX_W_3A63_P_2) },
c0f3af97
L
9105 },
9106
922d8de8
DR
9107 /* VEX_LEN_3A6A_P_2 */
9108 {
206c2556 9109 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9110 },
9111
9112 /* VEX_LEN_3A6B_P_2 */
9113 {
206c2556 9114 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9115 },
9116
9117 /* VEX_LEN_3A6E_P_2 */
9118 {
206c2556 9119 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9120 },
9121
9122 /* VEX_LEN_3A6F_P_2 */
9123 {
206c2556 9124 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9125 },
9126
9127 /* VEX_LEN_3A7A_P_2 */
9128 {
206c2556 9129 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9130 },
9131
9132 /* VEX_LEN_3A7B_P_2 */
9133 {
206c2556 9134 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9135 },
9136
9137 /* VEX_LEN_3A7E_P_2 */
9138 {
206c2556 9139 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9140 },
9141
9142 /* VEX_LEN_3A7F_P_2 */
9143 {
206c2556 9144 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9145 },
9146
a5ff0eb2
L
9147 /* VEX_LEN_3ADF_P_2 */
9148 {
9e30b8e0 9149 { VEX_W_TABLE (VEX_W_3ADF_P_2) },
a5ff0eb2 9150 },
4c807e72 9151
5dd85c99
SP
9152 /* VEX_LEN_XOP_09_80 */
9153 {
4c807e72
L
9154 { "vfrczps", { XM, EXxmm } },
9155 { "vfrczps", { XM, EXymmq } },
5dd85c99 9156 },
4c807e72 9157
5dd85c99
SP
9158 /* VEX_LEN_XOP_09_81 */
9159 {
4c807e72
L
9160 { "vfrczpd", { XM, EXxmm } },
9161 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9162 },
331d2d0d
L
9163};
9164
9e30b8e0 9165static const struct dis386 vex_w_table[][2] = {
b844680a 9166 {
9e30b8e0
L
9167 /* VEX_W_10_P_0 */
9168 { "vmovups", { XM, EXx } },
d8faab4e
L
9169 },
9170 {
9e30b8e0 9171 /* VEX_W_10_P_1 */
539f890d 9172 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9173 },
9174 {
9e30b8e0
L
9175 /* VEX_W_10_P_2 */
9176 { "vmovupd", { XM, EXx } },
d8faab4e
L
9177 },
9178 {
9e30b8e0 9179 /* VEX_W_10_P_3 */
539f890d 9180 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9181 },
9182 {
9e30b8e0
L
9183 /* VEX_W_11_P_0 */
9184 { "vmovups", { EXxS, XM } },
d8faab4e
L
9185 },
9186 {
9e30b8e0 9187 /* VEX_W_11_P_1 */
539f890d 9188 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9189 },
9190 {
9e30b8e0
L
9191 /* VEX_W_11_P_2 */
9192 { "vmovupd", { EXxS, XM } },
b844680a
L
9193 },
9194 {
9e30b8e0 9195 /* VEX_W_11_P_3 */
539f890d 9196 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9197 },
9198 {
9e30b8e0
L
9199 /* VEX_W_12_P_0_M_0 */
9200 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9201 },
9202 {
9e30b8e0
L
9203 /* VEX_W_12_P_0_M_1 */
9204 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9205 },
9206 {
9e30b8e0
L
9207 /* VEX_W_12_P_1 */
9208 { "vmovsldup", { XM, EXx } },
b844680a
L
9209 },
9210 {
9e30b8e0
L
9211 /* VEX_W_12_P_2 */
9212 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9213 },
9214 {
9e30b8e0
L
9215 /* VEX_W_12_P_3 */
9216 { "vmovddup", { XM, EXymmq } },
b844680a
L
9217 },
9218 {
9e30b8e0
L
9219 /* VEX_W_13_M_0 */
9220 { "vmovlpX", { EXq, XM } },
b844680a
L
9221 },
9222 {
9e30b8e0
L
9223 /* VEX_W_14 */
9224 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9225 },
9226 {
9e30b8e0
L
9227 /* VEX_W_15 */
9228 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9229 },
9230 {
9e30b8e0
L
9231 /* VEX_W_16_P_0_M_0 */
9232 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9233 },
9234 {
9235 /* VEX_W_16_P_0_M_1 */
9236 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9237 },
9238 {
9239 /* VEX_W_16_P_1 */
9240 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9241 },
9242 {
9243 /* VEX_W_16_P_2 */
9244 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9245 },
9246 {
9247 /* VEX_W_17_M_0 */
9248 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9249 },
9250 {
9251 /* VEX_W_28 */
9252 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9253 },
9254 {
9255 /* VEX_W_29 */
9256 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9257 },
9258 {
9259 /* VEX_W_2B_M_0 */
9260 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9261 },
9262 {
9263 /* VEX_W_2E_P_0 */
539f890d 9264 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9265 },
9266 {
9267 /* VEX_W_2E_P_2 */
539f890d 9268 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9269 },
9270 {
9271 /* VEX_W_2F_P_0 */
539f890d 9272 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9273 },
9274 {
9275 /* VEX_W_2F_P_2 */
539f890d 9276 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9277 },
9278 {
9279 /* VEX_W_50_M_0 */
9280 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
9281 },
9282 {
9283 /* VEX_W_51_P_0 */
9284 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
9285 },
9286 {
9287 /* VEX_W_51_P_1 */
539f890d 9288 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9289 },
9290 {
9291 /* VEX_W_51_P_2 */
9292 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
9293 },
9294 {
9295 /* VEX_W_51_P_3 */
539f890d 9296 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9297 },
9298 {
9299 /* VEX_W_52_P_0 */
9300 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
9301 },
9302 {
9303 /* VEX_W_52_P_1 */
539f890d 9304 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9305 },
9306 {
9307 /* VEX_W_53_P_0 */
9308 { "vrcpps", { XM, EXx } },
9e30b8e0
L
9309 },
9310 {
9311 /* VEX_W_53_P_1 */
539f890d 9312 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9313 },
9314 {
9315 /* VEX_W_58_P_0 */
9316 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
9317 },
9318 {
9319 /* VEX_W_58_P_1 */
539f890d 9320 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9321 },
9322 {
9323 /* VEX_W_58_P_2 */
9324 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9325 },
9326 {
9327 /* VEX_W_58_P_3 */
539f890d 9328 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9329 },
9330 {
9331 /* VEX_W_59_P_0 */
9332 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
9333 },
9334 {
9335 /* VEX_W_59_P_1 */
539f890d 9336 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9337 },
9338 {
9339 /* VEX_W_59_P_2 */
9340 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
9341 },
9342 {
9343 /* VEX_W_59_P_3 */
539f890d 9344 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9345 },
9346 {
9347 /* VEX_W_5A_P_0 */
9348 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
9349 },
9350 {
9351 /* VEX_W_5A_P_1 */
539f890d 9352 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9353 },
9354 {
9355 /* VEX_W_5A_P_3 */
539f890d 9356 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9357 },
9358 {
9359 /* VEX_W_5B_P_0 */
9360 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
9361 },
9362 {
9363 /* VEX_W_5B_P_1 */
9364 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
9365 },
9366 {
9367 /* VEX_W_5B_P_2 */
9368 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
9369 },
9370 {
9371 /* VEX_W_5C_P_0 */
9372 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
9373 },
9374 {
9375 /* VEX_W_5C_P_1 */
539f890d 9376 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9377 },
9378 {
9379 /* VEX_W_5C_P_2 */
9380 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9381 },
9382 {
9383 /* VEX_W_5C_P_3 */
539f890d 9384 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9385 },
9386 {
9387 /* VEX_W_5D_P_0 */
9388 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
9389 },
9390 {
9391 /* VEX_W_5D_P_1 */
539f890d 9392 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9393 },
9394 {
9395 /* VEX_W_5D_P_2 */
9396 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
9397 },
9398 {
9399 /* VEX_W_5D_P_3 */
539f890d 9400 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9401 },
9402 {
9403 /* VEX_W_5E_P_0 */
9404 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
9405 },
9406 {
9407 /* VEX_W_5E_P_1 */
539f890d 9408 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9409 },
9410 {
9411 /* VEX_W_5E_P_2 */
9412 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
9413 },
9414 {
9415 /* VEX_W_5E_P_3 */
539f890d 9416 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9417 },
9418 {
9419 /* VEX_W_5F_P_0 */
9420 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
9421 },
9422 {
9423 /* VEX_W_5F_P_1 */
539f890d 9424 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
9425 },
9426 {
9427 /* VEX_W_5F_P_2 */
9428 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
9429 },
9430 {
9431 /* VEX_W_5F_P_3 */
539f890d 9432 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
9433 },
9434 {
9435 /* VEX_W_60_P_2 */
9436 { "vpunpcklbw", { XM, Vex128, EXx } },
9e30b8e0
L
9437 },
9438 {
9439 /* VEX_W_61_P_2 */
9440 { "vpunpcklwd", { XM, Vex128, EXx } },
9e30b8e0
L
9441 },
9442 {
9443 /* VEX_W_62_P_2 */
9444 { "vpunpckldq", { XM, Vex128, EXx } },
9e30b8e0
L
9445 },
9446 {
9447 /* VEX_W_63_P_2 */
9448 { "vpacksswb", { XM, Vex128, EXx } },
9e30b8e0
L
9449 },
9450 {
9451 /* VEX_W_64_P_2 */
9452 { "vpcmpgtb", { XM, Vex128, EXx } },
9e30b8e0
L
9453 },
9454 {
9455 /* VEX_W_65_P_2 */
9456 { "vpcmpgtw", { XM, Vex128, EXx } },
9e30b8e0
L
9457 },
9458 {
9459 /* VEX_W_66_P_2 */
9460 { "vpcmpgtd", { XM, Vex128, EXx } },
9e30b8e0
L
9461 },
9462 {
9463 /* VEX_W_67_P_2 */
9464 { "vpackuswb", { XM, Vex128, EXx } },
9e30b8e0
L
9465 },
9466 {
9467 /* VEX_W_68_P_2 */
9468 { "vpunpckhbw", { XM, Vex128, EXx } },
9e30b8e0
L
9469 },
9470 {
9471 /* VEX_W_69_P_2 */
9472 { "vpunpckhwd", { XM, Vex128, EXx } },
9e30b8e0
L
9473 },
9474 {
9475 /* VEX_W_6A_P_2 */
9476 { "vpunpckhdq", { XM, Vex128, EXx } },
9e30b8e0
L
9477 },
9478 {
9479 /* VEX_W_6B_P_2 */
9480 { "vpackssdw", { XM, Vex128, EXx } },
9e30b8e0
L
9481 },
9482 {
9483 /* VEX_W_6C_P_2 */
9484 { "vpunpcklqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9485 },
9486 {
9487 /* VEX_W_6D_P_2 */
9488 { "vpunpckhqdq", { XM, Vex128, EXx } },
9e30b8e0
L
9489 },
9490 {
9491 /* VEX_W_6F_P_1 */
efdb52b7 9492 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
9493 },
9494 {
9495 /* VEX_W_6F_P_2 */
efdb52b7 9496 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
9497 },
9498 {
9499 /* VEX_W_70_P_1 */
9500 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
9501 },
9502 {
9503 /* VEX_W_70_P_2 */
9504 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
9505 },
9506 {
9507 /* VEX_W_70_P_3 */
9508 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
9509 },
9510 {
9511 /* VEX_W_71_R_2_P_2 */
9512 { "vpsrlw", { Vex128, XS, Ib } },
9e30b8e0
L
9513 },
9514 {
9515 /* VEX_W_71_R_4_P_2 */
9516 { "vpsraw", { Vex128, XS, Ib } },
9e30b8e0
L
9517 },
9518 {
9519 /* VEX_W_71_R_6_P_2 */
9520 { "vpsllw", { Vex128, XS, Ib } },
9e30b8e0
L
9521 },
9522 {
9523 /* VEX_W_72_R_2_P_2 */
9524 { "vpsrld", { Vex128, XS, Ib } },
9e30b8e0
L
9525 },
9526 {
9527 /* VEX_W_72_R_4_P_2 */
9528 { "vpsrad", { Vex128, XS, Ib } },
9e30b8e0
L
9529 },
9530 {
9531 /* VEX_W_72_R_6_P_2 */
9532 { "vpslld", { Vex128, XS, Ib } },
9e30b8e0
L
9533 },
9534 {
9535 /* VEX_W_73_R_2_P_2 */
9536 { "vpsrlq", { Vex128, XS, Ib } },
9e30b8e0
L
9537 },
9538 {
9539 /* VEX_W_73_R_3_P_2 */
9540 { "vpsrldq", { Vex128, XS, Ib } },
9e30b8e0
L
9541 },
9542 {
9543 /* VEX_W_73_R_6_P_2 */
9544 { "vpsllq", { Vex128, XS, Ib } },
9e30b8e0
L
9545 },
9546 {
9547 /* VEX_W_73_R_7_P_2 */
9548 { "vpslldq", { Vex128, XS, Ib } },
9e30b8e0
L
9549 },
9550 {
9551 /* VEX_W_74_P_2 */
9552 { "vpcmpeqb", { XM, Vex128, EXx } },
9e30b8e0
L
9553 },
9554 {
9555 /* VEX_W_75_P_2 */
9556 { "vpcmpeqw", { XM, Vex128, EXx } },
9e30b8e0
L
9557 },
9558 {
9559 /* VEX_W_76_P_2 */
9560 { "vpcmpeqd", { XM, Vex128, EXx } },
9e30b8e0
L
9561 },
9562 {
9563 /* VEX_W_77_P_0 */
9564 { "", { VZERO } },
9e30b8e0
L
9565 },
9566 {
9567 /* VEX_W_7C_P_2 */
9568 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
9569 },
9570 {
9571 /* VEX_W_7C_P_3 */
9572 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
9573 },
9574 {
9575 /* VEX_W_7D_P_2 */
9576 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9577 },
9578 {
9579 /* VEX_W_7D_P_3 */
9580 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
9581 },
9582 {
9583 /* VEX_W_7E_P_1 */
539f890d 9584 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
9585 },
9586 {
9587 /* VEX_W_7F_P_1 */
9588 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
9589 },
9590 {
9591 /* VEX_W_7F_P_2 */
9592 { "vmovdqa", { EXxS, XM } },
9e30b8e0
L
9593 },
9594 {
9595 /* VEX_W_AE_R_2_M_0 */
9596 { "vldmxcsr", { Md } },
9e30b8e0
L
9597 },
9598 {
9599 /* VEX_W_AE_R_3_M_0 */
9600 { "vstmxcsr", { Md } },
9e30b8e0
L
9601 },
9602 {
9603 /* VEX_W_C2_P_0 */
9604 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9605 },
9606 {
9607 /* VEX_W_C2_P_1 */
539f890d 9608 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
9609 },
9610 {
9611 /* VEX_W_C2_P_2 */
9612 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
9613 },
9614 {
9615 /* VEX_W_C2_P_3 */
539f890d 9616 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
9617 },
9618 {
9619 /* VEX_W_C4_P_2 */
9620 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
9621 },
9622 {
9623 /* VEX_W_C5_P_2 */
9624 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
9625 },
9626 {
9627 /* VEX_W_D0_P_2 */
9628 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
9629 },
9630 {
9631 /* VEX_W_D0_P_3 */
9632 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
9633 },
9634 {
9635 /* VEX_W_D1_P_2 */
9636 { "vpsrlw", { XM, Vex128, EXx } },
9e30b8e0
L
9637 },
9638 {
9639 /* VEX_W_D2_P_2 */
9640 { "vpsrld", { XM, Vex128, EXx } },
9e30b8e0
L
9641 },
9642 {
9643 /* VEX_W_D3_P_2 */
9644 { "vpsrlq", { XM, Vex128, EXx } },
9e30b8e0
L
9645 },
9646 {
9647 /* VEX_W_D4_P_2 */
9648 { "vpaddq", { XM, Vex128, EXx } },
9e30b8e0
L
9649 },
9650 {
9651 /* VEX_W_D5_P_2 */
9652 { "vpmullw", { XM, Vex128, EXx } },
9e30b8e0
L
9653 },
9654 {
9655 /* VEX_W_D6_P_2 */
539f890d 9656 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
9657 },
9658 {
9659 /* VEX_W_D7_P_2_M_1 */
9660 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
9661 },
9662 {
9663 /* VEX_W_D8_P_2 */
9664 { "vpsubusb", { XM, Vex128, EXx } },
9e30b8e0
L
9665 },
9666 {
9667 /* VEX_W_D9_P_2 */
9668 { "vpsubusw", { XM, Vex128, EXx } },
9e30b8e0
L
9669 },
9670 {
9671 /* VEX_W_DA_P_2 */
9672 { "vpminub", { XM, Vex128, EXx } },
9e30b8e0
L
9673 },
9674 {
9675 /* VEX_W_DB_P_2 */
9676 { "vpand", { XM, Vex128, EXx } },
9e30b8e0
L
9677 },
9678 {
9679 /* VEX_W_DC_P_2 */
9680 { "vpaddusb", { XM, Vex128, EXx } },
9e30b8e0
L
9681 },
9682 {
9683 /* VEX_W_DD_P_2 */
9684 { "vpaddusw", { XM, Vex128, EXx } },
9e30b8e0
L
9685 },
9686 {
9687 /* VEX_W_DE_P_2 */
9688 { "vpmaxub", { XM, Vex128, EXx } },
9e30b8e0
L
9689 },
9690 {
9691 /* VEX_W_DF_P_2 */
9692 { "vpandn", { XM, Vex128, EXx } },
9e30b8e0
L
9693 },
9694 {
9695 /* VEX_W_E0_P_2 */
9696 { "vpavgb", { XM, Vex128, EXx } },
9e30b8e0
L
9697 },
9698 {
9699 /* VEX_W_E1_P_2 */
9700 { "vpsraw", { XM, Vex128, EXx } },
9e30b8e0
L
9701 },
9702 {
9703 /* VEX_W_E2_P_2 */
9704 { "vpsrad", { XM, Vex128, EXx } },
9e30b8e0
L
9705 },
9706 {
9707 /* VEX_W_E3_P_2 */
9708 { "vpavgw", { XM, Vex128, EXx } },
9e30b8e0
L
9709 },
9710 {
9711 /* VEX_W_E4_P_2 */
9712 { "vpmulhuw", { XM, Vex128, EXx } },
9e30b8e0
L
9713 },
9714 {
9715 /* VEX_W_E5_P_2 */
9716 { "vpmulhw", { XM, Vex128, EXx } },
9e30b8e0
L
9717 },
9718 {
9719 /* VEX_W_E6_P_1 */
efdb52b7 9720 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
9721 },
9722 {
9723 /* VEX_W_E6_P_2 */
a179a9fd 9724 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9725 },
9726 {
9727 /* VEX_W_E6_P_3 */
a179a9fd 9728 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
9729 },
9730 {
9731 /* VEX_W_E7_P_2_M_0 */
9732 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
9733 },
9734 {
9735 /* VEX_W_E8_P_2 */
9736 { "vpsubsb", { XM, Vex128, EXx } },
9e30b8e0
L
9737 },
9738 {
9739 /* VEX_W_E9_P_2 */
9740 { "vpsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9741 },
9742 {
9743 /* VEX_W_EA_P_2 */
9744 { "vpminsw", { XM, Vex128, EXx } },
9e30b8e0
L
9745 },
9746 {
9747 /* VEX_W_EB_P_2 */
9748 { "vpor", { XM, Vex128, EXx } },
9e30b8e0
L
9749 },
9750 {
9751 /* VEX_W_EC_P_2 */
9752 { "vpaddsb", { XM, Vex128, EXx } },
9e30b8e0
L
9753 },
9754 {
9755 /* VEX_W_ED_P_2 */
9756 { "vpaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9757 },
9758 {
9759 /* VEX_W_EE_P_2 */
9760 { "vpmaxsw", { XM, Vex128, EXx } },
9e30b8e0
L
9761 },
9762 {
9763 /* VEX_W_EF_P_2 */
9764 { "vpxor", { XM, Vex128, EXx } },
9e30b8e0
L
9765 },
9766 {
9767 /* VEX_W_F0_P_3_M_0 */
9768 { "vlddqu", { XM, M } },
9e30b8e0
L
9769 },
9770 {
9771 /* VEX_W_F1_P_2 */
9772 { "vpsllw", { XM, Vex128, EXx } },
9e30b8e0
L
9773 },
9774 {
9775 /* VEX_W_F2_P_2 */
9776 { "vpslld", { XM, Vex128, EXx } },
9e30b8e0
L
9777 },
9778 {
9779 /* VEX_W_F3_P_2 */
9780 { "vpsllq", { XM, Vex128, EXx } },
9e30b8e0
L
9781 },
9782 {
9783 /* VEX_W_F4_P_2 */
9784 { "vpmuludq", { XM, Vex128, EXx } },
9e30b8e0
L
9785 },
9786 {
9787 /* VEX_W_F5_P_2 */
9788 { "vpmaddwd", { XM, Vex128, EXx } },
9e30b8e0
L
9789 },
9790 {
9791 /* VEX_W_F6_P_2 */
9792 { "vpsadbw", { XM, Vex128, EXx } },
9e30b8e0
L
9793 },
9794 {
9795 /* VEX_W_F7_P_2 */
9796 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
9797 },
9798 {
9799 /* VEX_W_F8_P_2 */
9800 { "vpsubb", { XM, Vex128, EXx } },
9e30b8e0
L
9801 },
9802 {
9803 /* VEX_W_F9_P_2 */
9804 { "vpsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9805 },
9806 {
9807 /* VEX_W_FA_P_2 */
9808 { "vpsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9809 },
9810 {
9811 /* VEX_W_FB_P_2 */
9812 { "vpsubq", { XM, Vex128, EXx } },
9e30b8e0
L
9813 },
9814 {
9815 /* VEX_W_FC_P_2 */
9816 { "vpaddb", { XM, Vex128, EXx } },
9e30b8e0
L
9817 },
9818 {
9819 /* VEX_W_FD_P_2 */
9820 { "vpaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9821 },
9822 {
9823 /* VEX_W_FE_P_2 */
9824 { "vpaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9825 },
9826 {
9827 /* VEX_W_3800_P_2 */
9828 { "vpshufb", { XM, Vex128, EXx } },
9e30b8e0
L
9829 },
9830 {
9831 /* VEX_W_3801_P_2 */
9832 { "vphaddw", { XM, Vex128, EXx } },
9e30b8e0
L
9833 },
9834 {
9835 /* VEX_W_3802_P_2 */
9836 { "vphaddd", { XM, Vex128, EXx } },
9e30b8e0
L
9837 },
9838 {
9839 /* VEX_W_3803_P_2 */
9840 { "vphaddsw", { XM, Vex128, EXx } },
9e30b8e0
L
9841 },
9842 {
9843 /* VEX_W_3804_P_2 */
9844 { "vpmaddubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9845 },
9846 {
9847 /* VEX_W_3805_P_2 */
9848 { "vphsubw", { XM, Vex128, EXx } },
9e30b8e0
L
9849 },
9850 {
9851 /* VEX_W_3806_P_2 */
9852 { "vphsubd", { XM, Vex128, EXx } },
9e30b8e0
L
9853 },
9854 {
9855 /* VEX_W_3807_P_2 */
9856 { "vphsubsw", { XM, Vex128, EXx } },
9e30b8e0
L
9857 },
9858 {
9859 /* VEX_W_3808_P_2 */
9860 { "vpsignb", { XM, Vex128, EXx } },
9e30b8e0
L
9861 },
9862 {
9863 /* VEX_W_3809_P_2 */
9864 { "vpsignw", { XM, Vex128, EXx } },
9e30b8e0
L
9865 },
9866 {
9867 /* VEX_W_380A_P_2 */
9868 { "vpsignd", { XM, Vex128, EXx } },
9e30b8e0
L
9869 },
9870 {
9871 /* VEX_W_380B_P_2 */
9872 { "vpmulhrsw", { XM, Vex128, EXx } },
9e30b8e0
L
9873 },
9874 {
9875 /* VEX_W_380C_P_2 */
9876 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
9877 },
9878 {
9879 /* VEX_W_380D_P_2 */
9880 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
9881 },
9882 {
9883 /* VEX_W_380E_P_2 */
9884 { "vtestps", { XM, EXx } },
9e30b8e0
L
9885 },
9886 {
9887 /* VEX_W_380F_P_2 */
9888 { "vtestpd", { XM, EXx } },
9e30b8e0
L
9889 },
9890 {
9891 /* VEX_W_3817_P_2 */
9892 { "vptest", { XM, EXx } },
9e30b8e0 9893 },
bcf2684f
L
9894 {
9895 /* VEX_W_3818_P_2_M_0 */
9896 { "vbroadcastss", { XM, Md } },
bcf2684f 9897 },
9e30b8e0
L
9898 {
9899 /* VEX_W_3819_P_2_M_0 */
9900 { "vbroadcastsd", { XM, Mq } },
9e30b8e0
L
9901 },
9902 {
9903 /* VEX_W_381A_P_2_M_0 */
9904 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
9905 },
9906 {
9907 /* VEX_W_381C_P_2 */
9908 { "vpabsb", { XM, EXx } },
9e30b8e0
L
9909 },
9910 {
9911 /* VEX_W_381D_P_2 */
9912 { "vpabsw", { XM, EXx } },
9e30b8e0
L
9913 },
9914 {
9915 /* VEX_W_381E_P_2 */
9916 { "vpabsd", { XM, EXx } },
9e30b8e0
L
9917 },
9918 {
9919 /* VEX_W_3820_P_2 */
9920 { "vpmovsxbw", { XM, EXq } },
9e30b8e0
L
9921 },
9922 {
9923 /* VEX_W_3821_P_2 */
9924 { "vpmovsxbd", { XM, EXd } },
9e30b8e0
L
9925 },
9926 {
9927 /* VEX_W_3822_P_2 */
9928 { "vpmovsxbq", { XM, EXw } },
9e30b8e0
L
9929 },
9930 {
9931 /* VEX_W_3823_P_2 */
9932 { "vpmovsxwd", { XM, EXq } },
9e30b8e0
L
9933 },
9934 {
9935 /* VEX_W_3824_P_2 */
9936 { "vpmovsxwq", { XM, EXd } },
9e30b8e0
L
9937 },
9938 {
9939 /* VEX_W_3825_P_2 */
9940 { "vpmovsxdq", { XM, EXq } },
9e30b8e0
L
9941 },
9942 {
9943 /* VEX_W_3828_P_2 */
9944 { "vpmuldq", { XM, Vex128, EXx } },
9e30b8e0
L
9945 },
9946 {
9947 /* VEX_W_3829_P_2 */
9948 { "vpcmpeqq", { XM, Vex128, EXx } },
9e30b8e0
L
9949 },
9950 {
9951 /* VEX_W_382A_P_2_M_0 */
9952 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
9953 },
9954 {
9955 /* VEX_W_382B_P_2 */
9956 { "vpackusdw", { XM, Vex128, EXx } },
9e30b8e0 9957 },
53aa04a0
L
9958 {
9959 /* VEX_W_382C_P_2_M_0 */
9960 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
9961 },
9962 {
9963 /* VEX_W_382D_P_2_M_0 */
9964 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
9965 },
9966 {
9967 /* VEX_W_382E_P_2_M_0 */
9968 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
9969 },
9970 {
9971 /* VEX_W_382F_P_2_M_0 */
9972 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 9973 },
9e30b8e0
L
9974 {
9975 /* VEX_W_3830_P_2 */
9976 { "vpmovzxbw", { XM, EXq } },
9e30b8e0
L
9977 },
9978 {
9979 /* VEX_W_3831_P_2 */
9980 { "vpmovzxbd", { XM, EXd } },
9e30b8e0
L
9981 },
9982 {
9983 /* VEX_W_3832_P_2 */
9984 { "vpmovzxbq", { XM, EXw } },
9e30b8e0
L
9985 },
9986 {
9987 /* VEX_W_3833_P_2 */
9988 { "vpmovzxwd", { XM, EXq } },
9e30b8e0
L
9989 },
9990 {
9991 /* VEX_W_3834_P_2 */
9992 { "vpmovzxwq", { XM, EXd } },
9e30b8e0
L
9993 },
9994 {
9995 /* VEX_W_3835_P_2 */
9996 { "vpmovzxdq", { XM, EXq } },
9e30b8e0
L
9997 },
9998 {
9999 /* VEX_W_3837_P_2 */
10000 { "vpcmpgtq", { XM, Vex128, EXx } },
9e30b8e0
L
10001 },
10002 {
10003 /* VEX_W_3838_P_2 */
10004 { "vpminsb", { XM, Vex128, EXx } },
9e30b8e0
L
10005 },
10006 {
10007 /* VEX_W_3839_P_2 */
10008 { "vpminsd", { XM, Vex128, EXx } },
9e30b8e0
L
10009 },
10010 {
10011 /* VEX_W_383A_P_2 */
10012 { "vpminuw", { XM, Vex128, EXx } },
9e30b8e0
L
10013 },
10014 {
10015 /* VEX_W_383B_P_2 */
10016 { "vpminud", { XM, Vex128, EXx } },
9e30b8e0
L
10017 },
10018 {
10019 /* VEX_W_383C_P_2 */
10020 { "vpmaxsb", { XM, Vex128, EXx } },
9e30b8e0
L
10021 },
10022 {
10023 /* VEX_W_383D_P_2 */
10024 { "vpmaxsd", { XM, Vex128, EXx } },
9e30b8e0
L
10025 },
10026 {
10027 /* VEX_W_383E_P_2 */
10028 { "vpmaxuw", { XM, Vex128, EXx } },
9e30b8e0
L
10029 },
10030 {
10031 /* VEX_W_383F_P_2 */
10032 { "vpmaxud", { XM, Vex128, EXx } },
9e30b8e0
L
10033 },
10034 {
10035 /* VEX_W_3840_P_2 */
10036 { "vpmulld", { XM, Vex128, EXx } },
9e30b8e0
L
10037 },
10038 {
10039 /* VEX_W_3841_P_2 */
10040 { "vphminposuw", { XM, EXx } },
9e30b8e0
L
10041 },
10042 {
10043 /* VEX_W_38DB_P_2 */
10044 { "vaesimc", { XM, EXx } },
9e30b8e0
L
10045 },
10046 {
10047 /* VEX_W_38DC_P_2 */
10048 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
10049 },
10050 {
10051 /* VEX_W_38DD_P_2 */
10052 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10053 },
10054 {
10055 /* VEX_W_38DE_P_2 */
10056 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10057 },
10058 {
10059 /* VEX_W_38DF_P_2 */
10060 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0
L
10061 },
10062 {
10063 /* VEX_W_3A04_P_2 */
10064 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10065 },
10066 {
10067 /* VEX_W_3A05_P_2 */
10068 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10069 },
10070 {
10071 /* VEX_W_3A06_P_2 */
10072 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10073 },
10074 {
10075 /* VEX_W_3A08_P_2 */
10076 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10077 },
10078 {
10079 /* VEX_W_3A09_P_2 */
10080 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10081 },
10082 {
10083 /* VEX_W_3A0A_P_2 */
539f890d 10084 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10085 },
10086 {
10087 /* VEX_W_3A0B_P_2 */
539f890d 10088 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10089 },
10090 {
10091 /* VEX_W_3A0C_P_2 */
10092 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10093 },
10094 {
10095 /* VEX_W_3A0D_P_2 */
10096 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10097 },
10098 {
10099 /* VEX_W_3A0E_P_2 */
10100 { "vpblendw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10101 },
10102 {
10103 /* VEX_W_3A0F_P_2 */
10104 { "vpalignr", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10105 },
10106 {
10107 /* VEX_W_3A14_P_2 */
10108 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10109 },
10110 {
10111 /* VEX_W_3A15_P_2 */
10112 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10113 },
10114 {
10115 /* VEX_W_3A18_P_2 */
10116 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10117 },
10118 {
10119 /* VEX_W_3A19_P_2 */
10120 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10121 },
10122 {
10123 /* VEX_W_3A20_P_2 */
10124 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10125 },
10126 {
10127 /* VEX_W_3A21_P_2 */
10128 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0
L
10129 },
10130 {
10131 /* VEX_W_3A40_P_2 */
10132 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10133 },
10134 {
10135 /* VEX_W_3A41_P_2 */
10136 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10137 },
10138 {
10139 /* VEX_W_3A42_P_2 */
10140 { "vmpsadbw", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10141 },
10142 {
10143 /* VEX_W_3A44_P_2 */
10144 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10145 },
a683cc34
SP
10146 {
10147 /* VEX_W_3A48_P_2 */
10148 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10149 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10150 },
10151 {
10152 /* VEX_W_3A49_P_2 */
10153 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10154 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10155 },
9e30b8e0
L
10156 {
10157 /* VEX_W_3A4A_P_2 */
10158 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10159 },
10160 {
10161 /* VEX_W_3A4B_P_2 */
10162 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
10163 },
10164 {
10165 /* VEX_W_3A4C_P_2 */
10166 { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } },
9e30b8e0
L
10167 },
10168 {
10169 /* VEX_W_3A60_P_2 */
10170 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
10171 },
10172 {
10173 /* VEX_W_3A61_P_2 */
10174 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
10175 },
10176 {
10177 /* VEX_W_3A62_P_2 */
10178 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
10179 },
10180 {
10181 /* VEX_W_3A63_P_2 */
10182 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
10183 },
10184 {
10185 /* VEX_W_3ADF_P_2 */
10186 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0
L
10187 },
10188};
10189
10190static const struct dis386 mod_table[][2] = {
10191 {
10192 /* MOD_8D */
10193 { "leaS", { Gv, M } },
9e30b8e0
L
10194 },
10195 {
10196 /* MOD_0F01_REG_0 */
10197 { X86_64_TABLE (X86_64_0F01_REG_0) },
10198 { RM_TABLE (RM_0F01_REG_0) },
10199 },
10200 {
10201 /* MOD_0F01_REG_1 */
10202 { X86_64_TABLE (X86_64_0F01_REG_1) },
10203 { RM_TABLE (RM_0F01_REG_1) },
10204 },
10205 {
10206 /* MOD_0F01_REG_2 */
10207 { X86_64_TABLE (X86_64_0F01_REG_2) },
10208 { RM_TABLE (RM_0F01_REG_2) },
10209 },
10210 {
10211 /* MOD_0F01_REG_3 */
10212 { X86_64_TABLE (X86_64_0F01_REG_3) },
10213 { RM_TABLE (RM_0F01_REG_3) },
10214 },
10215 {
10216 /* MOD_0F01_REG_7 */
10217 { "invlpg", { Mb } },
10218 { RM_TABLE (RM_0F01_REG_7) },
10219 },
10220 {
10221 /* MOD_0F12_PREFIX_0 */
10222 { "movlps", { XM, EXq } },
10223 { "movhlps", { XM, EXq } },
10224 },
10225 {
10226 /* MOD_0F13 */
10227 { "movlpX", { EXq, XM } },
9e30b8e0
L
10228 },
10229 {
10230 /* MOD_0F16_PREFIX_0 */
10231 { "movhps", { XM, EXq } },
10232 { "movlhps", { XM, EXq } },
10233 },
10234 {
10235 /* MOD_0F17 */
10236 { "movhpX", { EXq, XM } },
9e30b8e0
L
10237 },
10238 {
10239 /* MOD_0F18_REG_0 */
10240 { "prefetchnta", { Mb } },
9e30b8e0
L
10241 },
10242 {
10243 /* MOD_0F18_REG_1 */
10244 { "prefetcht0", { Mb } },
9e30b8e0
L
10245 },
10246 {
10247 /* MOD_0F18_REG_2 */
10248 { "prefetcht1", { Mb } },
9e30b8e0
L
10249 },
10250 {
10251 /* MOD_0F18_REG_3 */
10252 { "prefetcht2", { Mb } },
9e30b8e0
L
10253 },
10254 {
10255 /* MOD_0F20 */
592d1631 10256 { Bad_Opcode },
9e30b8e0
L
10257 { "movZ", { Rm, Cm } },
10258 },
10259 {
10260 /* MOD_0F21 */
592d1631 10261 { Bad_Opcode },
9e30b8e0
L
10262 { "movZ", { Rm, Dm } },
10263 },
10264 {
10265 /* MOD_0F22 */
592d1631 10266 { Bad_Opcode },
9e30b8e0 10267 { "movZ", { Cm, Rm } },
b844680a
L
10268 },
10269 {
92fddf8e 10270 /* MOD_0F23 */
592d1631 10271 { Bad_Opcode },
92fddf8e 10272 { "movZ", { Dm, Rm } },
b844680a
L
10273 },
10274 {
92fddf8e 10275 /* MOD_0F24 */
592d1631 10276 { Bad_Opcode },
92fddf8e 10277 { "movL", { Rd, Td } },
b844680a
L
10278 },
10279 {
92fddf8e 10280 /* MOD_0F26 */
592d1631 10281 { Bad_Opcode },
92fddf8e 10282 { "movL", { Td, Rd } },
b844680a 10283 },
75c135a8
L
10284 {
10285 /* MOD_0F2B_PREFIX_0 */
4ee52178 10286 {"movntps", { Mx, XM } },
75c135a8
L
10287 },
10288 {
10289 /* MOD_0F2B_PREFIX_1 */
4ee52178 10290 {"movntss", { Md, XM } },
75c135a8
L
10291 },
10292 {
10293 /* MOD_0F2B_PREFIX_2 */
4ee52178 10294 {"movntpd", { Mx, XM } },
75c135a8
L
10295 },
10296 {
10297 /* MOD_0F2B_PREFIX_3 */
4ee52178 10298 {"movntsd", { Mq, XM } },
75c135a8
L
10299 },
10300 {
10301 /* MOD_0F51 */
592d1631 10302 { Bad_Opcode },
75c135a8
L
10303 { "movmskpX", { Gdq, XS } },
10304 },
b844680a 10305 {
1ceb70f8 10306 /* MOD_0F71_REG_2 */
592d1631 10307 { Bad_Opcode },
4e7d34a6 10308 { "psrlw", { MS, Ib } },
b844680a
L
10309 },
10310 {
1ceb70f8 10311 /* MOD_0F71_REG_4 */
592d1631 10312 { Bad_Opcode },
4e7d34a6 10313 { "psraw", { MS, Ib } },
b844680a
L
10314 },
10315 {
1ceb70f8 10316 /* MOD_0F71_REG_6 */
592d1631 10317 { Bad_Opcode },
4e7d34a6 10318 { "psllw", { MS, Ib } },
b844680a
L
10319 },
10320 {
1ceb70f8 10321 /* MOD_0F72_REG_2 */
592d1631 10322 { Bad_Opcode },
4e7d34a6 10323 { "psrld", { MS, Ib } },
b844680a
L
10324 },
10325 {
1ceb70f8 10326 /* MOD_0F72_REG_4 */
592d1631 10327 { Bad_Opcode },
4e7d34a6 10328 { "psrad", { MS, Ib } },
b844680a
L
10329 },
10330 {
1ceb70f8 10331 /* MOD_0F72_REG_6 */
592d1631 10332 { Bad_Opcode },
4e7d34a6 10333 { "pslld", { MS, Ib } },
b844680a
L
10334 },
10335 {
1ceb70f8 10336 /* MOD_0F73_REG_2 */
592d1631 10337 { Bad_Opcode },
4e7d34a6 10338 { "psrlq", { MS, Ib } },
b844680a
L
10339 },
10340 {
1ceb70f8 10341 /* MOD_0F73_REG_3 */
592d1631 10342 { Bad_Opcode },
c0f3af97
L
10343 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10344 },
10345 {
10346 /* MOD_0F73_REG_6 */
592d1631 10347 { Bad_Opcode },
c0f3af97
L
10348 { "psllq", { MS, Ib } },
10349 },
10350 {
10351 /* MOD_0F73_REG_7 */
592d1631 10352 { Bad_Opcode },
c0f3af97
L
10353 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10354 },
10355 {
10356 /* MOD_0FAE_REG_0 */
eacc9c89 10357 { "fxsave", { FXSAVE } },
c0f3af97
L
10358 },
10359 {
10360 /* MOD_0FAE_REG_1 */
eacc9c89 10361 { "fxrstor", { FXSAVE } },
c0f3af97
L
10362 },
10363 {
10364 /* MOD_0FAE_REG_2 */
10365 { "ldmxcsr", { Md } },
c0f3af97
L
10366 },
10367 {
10368 /* MOD_0FAE_REG_3 */
10369 { "stmxcsr", { Md } },
c0f3af97
L
10370 },
10371 {
10372 /* MOD_0FAE_REG_4 */
73bb6729 10373 { "xsave", { FXSAVE } },
c0f3af97
L
10374 },
10375 {
10376 /* MOD_0FAE_REG_5 */
73bb6729 10377 { "xrstor", { FXSAVE } },
c0f3af97
L
10378 { RM_TABLE (RM_0FAE_REG_5) },
10379 },
10380 {
10381 /* MOD_0FAE_REG_6 */
592d1631 10382 { Bad_Opcode },
c0f3af97
L
10383 { RM_TABLE (RM_0FAE_REG_6) },
10384 },
10385 {
10386 /* MOD_0FAE_REG_7 */
10387 { "clflush", { Mb } },
10388 { RM_TABLE (RM_0FAE_REG_7) },
10389 },
10390 {
10391 /* MOD_0FB2 */
10392 { "lssS", { Gv, Mp } },
c0f3af97
L
10393 },
10394 {
10395 /* MOD_0FB4 */
10396 { "lfsS", { Gv, Mp } },
c0f3af97
L
10397 },
10398 {
10399 /* MOD_0FB5 */
10400 { "lgsS", { Gv, Mp } },
c0f3af97
L
10401 },
10402 {
10403 /* MOD_0FC7_REG_6 */
10404 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
c0f3af97
L
10405 },
10406 {
10407 /* MOD_0FC7_REG_7 */
10408 { "vmptrst", { Mq } },
c0f3af97
L
10409 },
10410 {
10411 /* MOD_0FD7 */
592d1631 10412 { Bad_Opcode },
c0f3af97
L
10413 { "pmovmskb", { Gdq, MS } },
10414 },
10415 {
10416 /* MOD_0FE7_PREFIX_2 */
10417 { "movntdq", { Mx, XM } },
c0f3af97
L
10418 },
10419 {
10420 /* MOD_0FF0_PREFIX_3 */
10421 { "lddqu", { XM, M } },
c0f3af97
L
10422 },
10423 {
10424 /* MOD_0F382A_PREFIX_2 */
10425 { "movntdqa", { XM, Mx } },
c0f3af97
L
10426 },
10427 {
10428 /* MOD_62_32BIT */
10429 { "bound{S|}", { Gv, Ma } },
c0f3af97
L
10430 },
10431 {
10432 /* MOD_C4_32BIT */
10433 { "lesS", { Gv, Mp } },
10434 { VEX_C4_TABLE (VEX_0F) },
10435 },
10436 {
10437 /* MOD_C5_32BIT */
10438 { "ldsS", { Gv, Mp } },
10439 { VEX_C5_TABLE (VEX_0F) },
10440 },
10441 {
10442 /* MOD_VEX_12_PREFIX_0 */
10443 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) },
10444 { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) },
10445 },
10446 {
10447 /* MOD_VEX_13 */
10448 { VEX_LEN_TABLE (VEX_LEN_13_M_0) },
c0f3af97
L
10449 },
10450 {
10451 /* MOD_VEX_16_PREFIX_0 */
10452 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) },
10453 { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) },
10454 },
10455 {
10456 /* MOD_VEX_17 */
10457 { VEX_LEN_TABLE (VEX_LEN_17_M_0) },
c0f3af97
L
10458 },
10459 {
10460 /* MOD_VEX_2B */
9e30b8e0 10461 { VEX_W_TABLE (VEX_W_2B_M_0) },
c0f3af97
L
10462 },
10463 {
976f1fde 10464 /* MOD_VEX_50 */
592d1631 10465 { Bad_Opcode },
9e30b8e0 10466 { VEX_W_TABLE (VEX_W_50_M_0) },
c0f3af97
L
10467 },
10468 {
10469 /* MOD_VEX_71_REG_2 */
592d1631 10470 { Bad_Opcode },
c0f3af97 10471 { PREFIX_TABLE (PREFIX_VEX_71_REG_2) },
b844680a
L
10472 },
10473 {
c0f3af97 10474 /* MOD_VEX_71_REG_4 */
592d1631 10475 { Bad_Opcode },
c0f3af97 10476 { PREFIX_TABLE (PREFIX_VEX_71_REG_4) },
b844680a
L
10477 },
10478 {
c0f3af97 10479 /* MOD_VEX_71_REG_6 */
592d1631 10480 { Bad_Opcode },
c0f3af97 10481 { PREFIX_TABLE (PREFIX_VEX_71_REG_6) },
b844680a
L
10482 },
10483 {
c0f3af97 10484 /* MOD_VEX_72_REG_2 */
592d1631 10485 { Bad_Opcode },
c0f3af97 10486 { PREFIX_TABLE (PREFIX_VEX_72_REG_2) },
b844680a 10487 },
d8faab4e 10488 {
c0f3af97 10489 /* MOD_VEX_72_REG_4 */
592d1631 10490 { Bad_Opcode },
c0f3af97 10491 { PREFIX_TABLE (PREFIX_VEX_72_REG_4) },
d8faab4e
L
10492 },
10493 {
c0f3af97 10494 /* MOD_VEX_72_REG_6 */
592d1631 10495 { Bad_Opcode },
c0f3af97 10496 { PREFIX_TABLE (PREFIX_VEX_72_REG_6) },
d8faab4e 10497 },
876d4bfa 10498 {
c0f3af97 10499 /* MOD_VEX_73_REG_2 */
592d1631 10500 { Bad_Opcode },
c0f3af97 10501 { PREFIX_TABLE (PREFIX_VEX_73_REG_2) },
876d4bfa
L
10502 },
10503 {
c0f3af97 10504 /* MOD_VEX_73_REG_3 */
592d1631 10505 { Bad_Opcode },
c0f3af97 10506 { PREFIX_TABLE (PREFIX_VEX_73_REG_3) },
475a2301
L
10507 },
10508 {
c0f3af97 10509 /* MOD_VEX_73_REG_6 */
592d1631 10510 { Bad_Opcode },
c0f3af97 10511 { PREFIX_TABLE (PREFIX_VEX_73_REG_6) },
876d4bfa
L
10512 },
10513 {
c0f3af97 10514 /* MOD_VEX_73_REG_7 */
592d1631 10515 { Bad_Opcode },
c0f3af97 10516 { PREFIX_TABLE (PREFIX_VEX_73_REG_7) },
876d4bfa
L
10517 },
10518 {
c0f3af97
L
10519 /* MOD_VEX_AE_REG_2 */
10520 { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) },
876d4bfa 10521 },
bbedc832 10522 {
c0f3af97
L
10523 /* MOD_VEX_AE_REG_3 */
10524 { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) },
bbedc832 10525 },
144c41d9 10526 {
c0f3af97 10527 /* MOD_VEX_D7_PREFIX_2 */
592d1631 10528 { Bad_Opcode },
c0f3af97 10529 { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) },
144c41d9 10530 },
1afd85e3 10531 {
c0f3af97 10532 /* MOD_VEX_E7_PREFIX_2 */
9e30b8e0 10533 { VEX_W_TABLE (VEX_W_E7_P_2_M_0) },
1afd85e3
L
10534 },
10535 {
c0f3af97 10536 /* MOD_VEX_F0_PREFIX_3 */
9e30b8e0 10537 { VEX_W_TABLE (VEX_W_F0_P_3_M_0) },
92fddf8e
L
10538 },
10539 {
c0f3af97 10540 /* MOD_VEX_3818_PREFIX_2 */
bcf2684f 10541 { VEX_W_TABLE (VEX_W_3818_P_2_M_0) },
1afd85e3 10542 },
75c135a8 10543 {
c0f3af97
L
10544 /* MOD_VEX_3819_PREFIX_2 */
10545 { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) },
75c135a8
L
10546 },
10547 {
c0f3af97
L
10548 /* MOD_VEX_381A_PREFIX_2 */
10549 { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) },
75c135a8 10550 },
1afd85e3 10551 {
c0f3af97
L
10552 /* MOD_VEX_382A_PREFIX_2 */
10553 { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) },
1afd85e3 10554 },
75c135a8 10555 {
c0f3af97 10556 /* MOD_VEX_382C_PREFIX_2 */
53aa04a0 10557 { VEX_W_TABLE (VEX_W_382C_P_2_M_0) },
75c135a8 10558 },
1afd85e3 10559 {
c0f3af97 10560 /* MOD_VEX_382D_PREFIX_2 */
53aa04a0 10561 { VEX_W_TABLE (VEX_W_382D_P_2_M_0) },
1afd85e3
L
10562 },
10563 {
c0f3af97 10564 /* MOD_VEX_382E_PREFIX_2 */
53aa04a0 10565 { VEX_W_TABLE (VEX_W_382E_P_2_M_0) },
1afd85e3
L
10566 },
10567 {
c0f3af97 10568 /* MOD_VEX_382F_PREFIX_2 */
53aa04a0 10569 { VEX_W_TABLE (VEX_W_382F_P_2_M_0) },
1afd85e3 10570 },
b844680a
L
10571};
10572
1ceb70f8 10573static const struct dis386 rm_table[][8] = {
b844680a 10574 {
1ceb70f8 10575 /* RM_0F01_REG_0 */
592d1631 10576 { Bad_Opcode },
b844680a
L
10577 { "vmcall", { Skip_MODRM } },
10578 { "vmlaunch", { Skip_MODRM } },
10579 { "vmresume", { Skip_MODRM } },
10580 { "vmxoff", { Skip_MODRM } },
b844680a
L
10581 },
10582 {
1ceb70f8 10583 /* RM_0F01_REG_1 */
b844680a
L
10584 { "monitor", { { OP_Monitor, 0 } } },
10585 { "mwait", { { OP_Mwait, 0 } } },
b844680a 10586 },
475a2301
L
10587 {
10588 /* RM_0F01_REG_2 */
10589 { "xgetbv", { Skip_MODRM } },
10590 { "xsetbv", { Skip_MODRM } },
475a2301 10591 },
b844680a 10592 {
1ceb70f8 10593 /* RM_0F01_REG_3 */
4e7d34a6
L
10594 { "vmrun", { Skip_MODRM } },
10595 { "vmmcall", { Skip_MODRM } },
10596 { "vmload", { Skip_MODRM } },
10597 { "vmsave", { Skip_MODRM } },
10598 { "stgi", { Skip_MODRM } },
10599 { "clgi", { Skip_MODRM } },
10600 { "skinit", { Skip_MODRM } },
10601 { "invlpga", { Skip_MODRM } },
10602 },
10603 {
1ceb70f8 10604 /* RM_0F01_REG_7 */
4e7d34a6
L
10605 { "swapgs", { Skip_MODRM } },
10606 { "rdtscp", { Skip_MODRM } },
b844680a
L
10607 },
10608 {
1ceb70f8 10609 /* RM_0FAE_REG_5 */
4e7d34a6 10610 { "lfence", { Skip_MODRM } },
b844680a
L
10611 },
10612 {
1ceb70f8 10613 /* RM_0FAE_REG_6 */
4e7d34a6 10614 { "mfence", { Skip_MODRM } },
b844680a 10615 },
bbedc832 10616 {
1ceb70f8 10617 /* RM_0FAE_REG_7 */
4e7d34a6 10618 { "sfence", { Skip_MODRM } },
144c41d9 10619 },
b844680a
L
10620};
10621
c608c12e
AM
10622#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10623
f16cd0d5
L
10624/* We use the high bit to indicate different name for the same
10625 prefix. */
10626#define ADDR16_PREFIX (0x67 | 0x100)
10627#define ADDR32_PREFIX (0x67 | 0x200)
10628#define DATA16_PREFIX (0x66 | 0x100)
10629#define DATA32_PREFIX (0x66 | 0x200)
10630#define REP_PREFIX (0xf3 | 0x100)
10631
10632static int
26ca5450 10633ckprefix (void)
252b5132 10634{
f16cd0d5 10635 int newrex, i, length;
52b15da3 10636 rex = 0;
c0f3af97 10637 rex_ignored = 0;
252b5132 10638 prefixes = 0;
7d421014 10639 used_prefixes = 0;
52b15da3 10640 rex_used = 0;
f16cd0d5
L
10641 last_lock_prefix = -1;
10642 last_repz_prefix = -1;
10643 last_repnz_prefix = -1;
10644 last_data_prefix = -1;
10645 last_addr_prefix = -1;
10646 last_rex_prefix = -1;
10647 last_seg_prefix = -1;
f310f33d
L
10648 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10649 all_prefixes[i] = 0;
10650 i = 0;
f16cd0d5
L
10651 length = 0;
10652 /* The maximum instruction length is 15bytes. */
10653 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
10654 {
10655 FETCH_DATA (the_info, codep + 1);
52b15da3 10656 newrex = 0;
252b5132
RH
10657 switch (*codep)
10658 {
52b15da3
JH
10659 /* REX prefixes family. */
10660 case 0x40:
10661 case 0x41:
10662 case 0x42:
10663 case 0x43:
10664 case 0x44:
10665 case 0x45:
10666 case 0x46:
10667 case 0x47:
10668 case 0x48:
10669 case 0x49:
10670 case 0x4a:
10671 case 0x4b:
10672 case 0x4c:
10673 case 0x4d:
10674 case 0x4e:
10675 case 0x4f:
f16cd0d5
L
10676 if (address_mode == mode_64bit)
10677 newrex = *codep;
10678 else
10679 return 1;
10680 last_rex_prefix = i;
52b15da3 10681 break;
252b5132
RH
10682 case 0xf3:
10683 prefixes |= PREFIX_REPZ;
f16cd0d5 10684 last_repz_prefix = i;
252b5132
RH
10685 break;
10686 case 0xf2:
10687 prefixes |= PREFIX_REPNZ;
f16cd0d5 10688 last_repnz_prefix = i;
252b5132
RH
10689 break;
10690 case 0xf0:
10691 prefixes |= PREFIX_LOCK;
f16cd0d5 10692 last_lock_prefix = i;
252b5132
RH
10693 break;
10694 case 0x2e:
10695 prefixes |= PREFIX_CS;
f16cd0d5 10696 last_seg_prefix = i;
252b5132
RH
10697 break;
10698 case 0x36:
10699 prefixes |= PREFIX_SS;
f16cd0d5 10700 last_seg_prefix = i;
252b5132
RH
10701 break;
10702 case 0x3e:
10703 prefixes |= PREFIX_DS;
f16cd0d5 10704 last_seg_prefix = i;
252b5132
RH
10705 break;
10706 case 0x26:
10707 prefixes |= PREFIX_ES;
f16cd0d5 10708 last_seg_prefix = i;
252b5132
RH
10709 break;
10710 case 0x64:
10711 prefixes |= PREFIX_FS;
f16cd0d5 10712 last_seg_prefix = i;
252b5132
RH
10713 break;
10714 case 0x65:
10715 prefixes |= PREFIX_GS;
f16cd0d5 10716 last_seg_prefix = i;
252b5132
RH
10717 break;
10718 case 0x66:
10719 prefixes |= PREFIX_DATA;
f16cd0d5 10720 last_data_prefix = i;
252b5132
RH
10721 break;
10722 case 0x67:
10723 prefixes |= PREFIX_ADDR;
f16cd0d5 10724 last_addr_prefix = i;
252b5132 10725 break;
5076851f 10726 case FWAIT_OPCODE:
252b5132
RH
10727 /* fwait is really an instruction. If there are prefixes
10728 before the fwait, they belong to the fwait, *not* to the
10729 following instruction. */
3e7d61b2 10730 if (prefixes || rex)
252b5132
RH
10731 {
10732 prefixes |= PREFIX_FWAIT;
10733 codep++;
f16cd0d5 10734 return 1;
252b5132
RH
10735 }
10736 prefixes = PREFIX_FWAIT;
10737 break;
10738 default:
f16cd0d5 10739 return 1;
252b5132 10740 }
52b15da3
JH
10741 /* Rex is ignored when followed by another prefix. */
10742 if (rex)
10743 {
3e7d61b2 10744 rex_used = rex;
f16cd0d5 10745 return 1;
52b15da3 10746 }
f16cd0d5
L
10747 if (*codep != FWAIT_OPCODE)
10748 all_prefixes[i++] = *codep;
52b15da3 10749 rex = newrex;
252b5132 10750 codep++;
f16cd0d5
L
10751 length++;
10752 }
10753 return 0;
10754}
10755
10756static int
10757seg_prefix (int pref)
10758{
10759 switch (pref)
10760 {
10761 case 0x2e:
10762 return PREFIX_CS;
10763 case 0x36:
10764 return PREFIX_SS;
10765 case 0x3e:
10766 return PREFIX_DS;
10767 case 0x26:
10768 return PREFIX_ES;
10769 case 0x64:
10770 return PREFIX_FS;
10771 case 0x65:
10772 return PREFIX_GS;
10773 default:
10774 return 0;
252b5132
RH
10775 }
10776}
10777
7d421014
ILT
10778/* Return the name of the prefix byte PREF, or NULL if PREF is not a
10779 prefix byte. */
10780
10781static const char *
26ca5450 10782prefix_name (int pref, int sizeflag)
7d421014 10783{
0003779b
L
10784 static const char *rexes [16] =
10785 {
10786 "rex", /* 0x40 */
10787 "rex.B", /* 0x41 */
10788 "rex.X", /* 0x42 */
10789 "rex.XB", /* 0x43 */
10790 "rex.R", /* 0x44 */
10791 "rex.RB", /* 0x45 */
10792 "rex.RX", /* 0x46 */
10793 "rex.RXB", /* 0x47 */
10794 "rex.W", /* 0x48 */
10795 "rex.WB", /* 0x49 */
10796 "rex.WX", /* 0x4a */
10797 "rex.WXB", /* 0x4b */
10798 "rex.WR", /* 0x4c */
10799 "rex.WRB", /* 0x4d */
10800 "rex.WRX", /* 0x4e */
10801 "rex.WRXB", /* 0x4f */
10802 };
10803
7d421014
ILT
10804 switch (pref)
10805 {
52b15da3
JH
10806 /* REX prefixes family. */
10807 case 0x40:
52b15da3 10808 case 0x41:
52b15da3 10809 case 0x42:
52b15da3 10810 case 0x43:
52b15da3 10811 case 0x44:
52b15da3 10812 case 0x45:
52b15da3 10813 case 0x46:
52b15da3 10814 case 0x47:
52b15da3 10815 case 0x48:
52b15da3 10816 case 0x49:
52b15da3 10817 case 0x4a:
52b15da3 10818 case 0x4b:
52b15da3 10819 case 0x4c:
52b15da3 10820 case 0x4d:
52b15da3 10821 case 0x4e:
52b15da3 10822 case 0x4f:
0003779b 10823 return rexes [pref - 0x40];
7d421014
ILT
10824 case 0xf3:
10825 return "repz";
10826 case 0xf2:
10827 return "repnz";
10828 case 0xf0:
10829 return "lock";
10830 case 0x2e:
10831 return "cs";
10832 case 0x36:
10833 return "ss";
10834 case 0x3e:
10835 return "ds";
10836 case 0x26:
10837 return "es";
10838 case 0x64:
10839 return "fs";
10840 case 0x65:
10841 return "gs";
10842 case 0x66:
10843 return (sizeflag & DFLAG) ? "data16" : "data32";
10844 case 0x67:
cb712a9e 10845 if (address_mode == mode_64bit)
db6eb5be 10846 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 10847 else
2888cb7a 10848 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
10849 case FWAIT_OPCODE:
10850 return "fwait";
f16cd0d5
L
10851 case ADDR16_PREFIX:
10852 return "addr16";
10853 case ADDR32_PREFIX:
10854 return "addr32";
10855 case DATA16_PREFIX:
10856 return "data16";
10857 case DATA32_PREFIX:
10858 return "data32";
10859 case REP_PREFIX:
10860 return "rep";
7d421014
ILT
10861 default:
10862 return NULL;
10863 }
10864}
10865
ce518a5f
L
10866static char op_out[MAX_OPERANDS][100];
10867static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 10868static int two_source_ops;
ce518a5f
L
10869static bfd_vma op_address[MAX_OPERANDS];
10870static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 10871static bfd_vma start_pc;
ce518a5f 10872
252b5132
RH
10873/*
10874 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10875 * (see topic "Redundant prefixes" in the "Differences from 8086"
10876 * section of the "Virtual 8086 Mode" chapter.)
10877 * 'pc' should be the address of this instruction, it will
10878 * be used to print the target address if this is a relative jump or call
10879 * The function returns the length of this instruction in bytes.
10880 */
10881
252b5132 10882static char intel_syntax;
9d141669 10883static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
10884static char open_char;
10885static char close_char;
10886static char separator_char;
10887static char scale_char;
10888
e396998b
AM
10889/* Here for backwards compatibility. When gdb stops using
10890 print_insn_i386_att and print_insn_i386_intel these functions can
10891 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 10892int
26ca5450 10893print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
10894{
10895 intel_syntax = 0;
e396998b
AM
10896
10897 return print_insn (pc, info);
252b5132
RH
10898}
10899
10900int
26ca5450 10901print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
10902{
10903 intel_syntax = 1;
e396998b
AM
10904
10905 return print_insn (pc, info);
252b5132
RH
10906}
10907
e396998b 10908int
26ca5450 10909print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
10910{
10911 intel_syntax = -1;
10912
10913 return print_insn (pc, info);
10914}
10915
f59a29b9
L
10916void
10917print_i386_disassembler_options (FILE *stream)
10918{
10919 fprintf (stream, _("\n\
10920The following i386/x86-64 specific disassembler options are supported for use\n\
10921with the -M switch (multiple options should be separated by commas):\n"));
10922
10923 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10924 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10925 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10926 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10927 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
10928 fprintf (stream, _(" att-mnemonic\n"
10929 " Display instruction in AT&T mnemonic\n"));
10930 fprintf (stream, _(" intel-mnemonic\n"
10931 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
10932 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10933 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10934 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10935 fprintf (stream, _(" data32 Assume 32bit data size\n"));
10936 fprintf (stream, _(" data16 Assume 16bit data size\n"));
10937 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10938}
10939
592d1631
L
10940/* Bad opcode. */
10941static const struct dis386 bad_opcode = { "(bad)", { XX } };
10942
b844680a
L
10943/* Get a pointer to struct dis386 with a valid name. */
10944
10945static const struct dis386 *
8bb15339 10946get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 10947{
91d6fa6a 10948 int vindex, vex_table_index;
b844680a
L
10949
10950 if (dp->name != NULL)
10951 return dp;
10952
10953 switch (dp->op[0].bytemode)
10954 {
1ceb70f8
L
10955 case USE_REG_TABLE:
10956 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
10957 break;
10958
10959 case USE_MOD_TABLE:
91d6fa6a
NC
10960 vindex = modrm.mod == 0x3 ? 1 : 0;
10961 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
10962 break;
10963
10964 case USE_RM_TABLE:
10965 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
10966 break;
10967
4e7d34a6 10968 case USE_PREFIX_TABLE:
c0f3af97 10969 if (need_vex)
b844680a 10970 {
c0f3af97
L
10971 /* The prefix in VEX is implicit. */
10972 switch (vex.prefix)
10973 {
10974 case 0:
91d6fa6a 10975 vindex = 0;
c0f3af97
L
10976 break;
10977 case REPE_PREFIX_OPCODE:
91d6fa6a 10978 vindex = 1;
c0f3af97
L
10979 break;
10980 case DATA_PREFIX_OPCODE:
91d6fa6a 10981 vindex = 2;
c0f3af97
L
10982 break;
10983 case REPNE_PREFIX_OPCODE:
91d6fa6a 10984 vindex = 3;
c0f3af97
L
10985 break;
10986 default:
10987 abort ();
10988 break;
10989 }
b844680a 10990 }
c0f3af97 10991 else
b844680a 10992 {
91d6fa6a 10993 vindex = 0;
c0f3af97
L
10994 used_prefixes |= (prefixes & PREFIX_REPZ);
10995 if (prefixes & PREFIX_REPZ)
b844680a 10996 {
91d6fa6a 10997 vindex = 1;
f16cd0d5 10998 all_prefixes[last_repz_prefix] = 0;
b844680a
L
10999 }
11000 else
11001 {
c0f3af97
L
11002 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11003 PREFIX_DATA. */
11004 used_prefixes |= (prefixes & PREFIX_REPNZ);
11005 if (prefixes & PREFIX_REPNZ)
11006 {
91d6fa6a 11007 vindex = 3;
f16cd0d5 11008 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11009 }
11010 else
b844680a 11011 {
c0f3af97
L
11012 used_prefixes |= (prefixes & PREFIX_DATA);
11013 if (prefixes & PREFIX_DATA)
11014 {
91d6fa6a 11015 vindex = 2;
f16cd0d5 11016 all_prefixes[last_data_prefix] = 0;
c0f3af97 11017 }
b844680a
L
11018 }
11019 }
11020 }
91d6fa6a 11021 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11022 break;
11023
4e7d34a6 11024 case USE_X86_64_TABLE:
91d6fa6a
NC
11025 vindex = address_mode == mode_64bit ? 1 : 0;
11026 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11027 break;
11028
4e7d34a6 11029 case USE_3BYTE_TABLE:
8bb15339 11030 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11031 vindex = *codep++;
11032 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
11033 modrm.mod = (*codep >> 6) & 3;
11034 modrm.reg = (*codep >> 3) & 7;
11035 modrm.rm = *codep & 7;
11036 break;
11037
c0f3af97
L
11038 case USE_VEX_LEN_TABLE:
11039 if (!need_vex)
11040 abort ();
11041
11042 switch (vex.length)
11043 {
11044 case 128:
91d6fa6a 11045 vindex = 0;
c0f3af97
L
11046 break;
11047 case 256:
91d6fa6a 11048 vindex = 1;
c0f3af97
L
11049 break;
11050 default:
11051 abort ();
11052 break;
11053 }
11054
91d6fa6a 11055 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11056 break;
11057
f88c9eb0
SP
11058 case USE_XOP_8F_TABLE:
11059 FETCH_DATA (info, codep + 3);
11060 /* All bits in the REX prefix are ignored. */
11061 rex_ignored = rex;
11062 rex = ~(*codep >> 5) & 0x7;
11063
11064 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11065 switch ((*codep & 0x1f))
11066 {
11067 default:
f07af43e
L
11068 dp = &bad_opcode;
11069 return dp;
5dd85c99
SP
11070 case 0x8:
11071 vex_table_index = XOP_08;
11072 break;
f88c9eb0
SP
11073 case 0x9:
11074 vex_table_index = XOP_09;
11075 break;
11076 case 0xa:
11077 vex_table_index = XOP_0A;
11078 break;
11079 }
11080 codep++;
11081 vex.w = *codep & 0x80;
11082 if (vex.w && address_mode == mode_64bit)
11083 rex |= REX_W;
11084
11085 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11086 if (address_mode != mode_64bit
11087 && vex.register_specifier > 0x7)
f07af43e
L
11088 {
11089 dp = &bad_opcode;
11090 return dp;
11091 }
f88c9eb0
SP
11092
11093 vex.length = (*codep & 0x4) ? 256 : 128;
11094 switch ((*codep & 0x3))
11095 {
11096 case 0:
11097 vex.prefix = 0;
11098 break;
11099 case 1:
11100 vex.prefix = DATA_PREFIX_OPCODE;
11101 break;
11102 case 2:
11103 vex.prefix = REPE_PREFIX_OPCODE;
11104 break;
11105 case 3:
11106 vex.prefix = REPNE_PREFIX_OPCODE;
11107 break;
11108 }
11109 need_vex = 1;
11110 need_vex_reg = 1;
11111 codep++;
91d6fa6a
NC
11112 vindex = *codep++;
11113 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
11114
11115 FETCH_DATA (info, codep + 1);
11116 modrm.mod = (*codep >> 6) & 3;
11117 modrm.reg = (*codep >> 3) & 7;
11118 modrm.rm = *codep & 7;
f88c9eb0
SP
11119 break;
11120
c0f3af97
L
11121 case USE_VEX_C4_TABLE:
11122 FETCH_DATA (info, codep + 3);
11123 /* All bits in the REX prefix are ignored. */
11124 rex_ignored = rex;
11125 rex = ~(*codep >> 5) & 0x7;
11126 switch ((*codep & 0x1f))
11127 {
11128 default:
f07af43e
L
11129 dp = &bad_opcode;
11130 return dp;
c0f3af97 11131 case 0x1:
f88c9eb0 11132 vex_table_index = VEX_0F;
c0f3af97
L
11133 break;
11134 case 0x2:
f88c9eb0 11135 vex_table_index = VEX_0F38;
c0f3af97
L
11136 break;
11137 case 0x3:
f88c9eb0 11138 vex_table_index = VEX_0F3A;
c0f3af97
L
11139 break;
11140 }
11141 codep++;
11142 vex.w = *codep & 0x80;
11143 if (vex.w && address_mode == mode_64bit)
11144 rex |= REX_W;
11145
11146 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11147 if (address_mode != mode_64bit
11148 && vex.register_specifier > 0x7)
f07af43e
L
11149 {
11150 dp = &bad_opcode;
11151 return dp;
11152 }
c0f3af97
L
11153
11154 vex.length = (*codep & 0x4) ? 256 : 128;
11155 switch ((*codep & 0x3))
11156 {
11157 case 0:
11158 vex.prefix = 0;
11159 break;
11160 case 1:
11161 vex.prefix = DATA_PREFIX_OPCODE;
11162 break;
11163 case 2:
11164 vex.prefix = REPE_PREFIX_OPCODE;
11165 break;
11166 case 3:
11167 vex.prefix = REPNE_PREFIX_OPCODE;
11168 break;
11169 }
11170 need_vex = 1;
11171 need_vex_reg = 1;
11172 codep++;
91d6fa6a
NC
11173 vindex = *codep++;
11174 dp = &vex_table[vex_table_index][vindex];
c0f3af97 11175 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11176 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11177 {
11178 FETCH_DATA (info, codep + 1);
11179 modrm.mod = (*codep >> 6) & 3;
11180 modrm.reg = (*codep >> 3) & 7;
11181 modrm.rm = *codep & 7;
11182 }
11183 break;
11184
11185 case USE_VEX_C5_TABLE:
11186 FETCH_DATA (info, codep + 2);
11187 /* All bits in the REX prefix are ignored. */
11188 rex_ignored = rex;
11189 rex = (*codep & 0x80) ? 0 : REX_R;
11190
11191 vex.register_specifier = (~(*codep >> 3)) & 0xf;
11192 if (address_mode != mode_64bit
11193 && vex.register_specifier > 0x7)
f07af43e
L
11194 {
11195 dp = &bad_opcode;
11196 return dp;
11197 }
c0f3af97 11198
759a05ce
L
11199 vex.w = 0;
11200
c0f3af97
L
11201 vex.length = (*codep & 0x4) ? 256 : 128;
11202 switch ((*codep & 0x3))
11203 {
11204 case 0:
11205 vex.prefix = 0;
11206 break;
11207 case 1:
11208 vex.prefix = DATA_PREFIX_OPCODE;
11209 break;
11210 case 2:
11211 vex.prefix = REPE_PREFIX_OPCODE;
11212 break;
11213 case 3:
11214 vex.prefix = REPNE_PREFIX_OPCODE;
11215 break;
11216 }
11217 need_vex = 1;
11218 need_vex_reg = 1;
11219 codep++;
91d6fa6a
NC
11220 vindex = *codep++;
11221 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 11222 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 11223 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
11224 {
11225 FETCH_DATA (info, codep + 1);
11226 modrm.mod = (*codep >> 6) & 3;
11227 modrm.reg = (*codep >> 3) & 7;
11228 modrm.rm = *codep & 7;
11229 }
11230 break;
11231
9e30b8e0
L
11232 case USE_VEX_W_TABLE:
11233 if (!need_vex)
11234 abort ();
11235
11236 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11237 break;
11238
592d1631
L
11239 case 0:
11240 dp = &bad_opcode;
11241 break;
11242
b844680a 11243 default:
d34b5006 11244 abort ();
b844680a
L
11245 }
11246
11247 if (dp->name != NULL)
11248 return dp;
11249 else
8bb15339 11250 return get_valid_dis386 (dp, info);
b844680a
L
11251}
11252
dfc8cf43
L
11253static void
11254get_sib (disassemble_info *info)
11255{
11256 /* If modrm.mod == 3, operand must be register. */
11257 if (need_modrm
11258 && address_mode != mode_16bit
11259 && modrm.mod != 3
11260 && modrm.rm == 4)
11261 {
11262 FETCH_DATA (info, codep + 2);
11263 sib.index = (codep [1] >> 3) & 7;
11264 sib.scale = (codep [1] >> 6) & 3;
11265 sib.base = codep [1] & 7;
11266 }
11267}
11268
e396998b 11269static int
26ca5450 11270print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11271{
2da11e11 11272 const struct dis386 *dp;
252b5132 11273 int i;
ce518a5f 11274 char *op_txt[MAX_OPERANDS];
252b5132 11275 int needcomma;
e396998b
AM
11276 int sizeflag;
11277 const char *p;
252b5132 11278 struct dis_private priv;
f16cd0d5
L
11279 int prefix_length;
11280 int default_prefixes;
252b5132 11281
cb712a9e 11282 if (info->mach == bfd_mach_x86_64_intel_syntax
8a9036a4
L
11283 || info->mach == bfd_mach_x86_64
11284 || info->mach == bfd_mach_l1om
11285 || info->mach == bfd_mach_l1om_intel_syntax)
cb712a9e
L
11286 address_mode = mode_64bit;
11287 else
11288 address_mode = mode_32bit;
52b15da3 11289
8373f971 11290 if (intel_syntax == (char) -1)
e396998b 11291 intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
11292 || info->mach == bfd_mach_x86_64_intel_syntax
11293 || info->mach == bfd_mach_l1om_intel_syntax);
e396998b 11294
2da11e11 11295 if (info->mach == bfd_mach_i386_i386
52b15da3 11296 || info->mach == bfd_mach_x86_64
8a9036a4 11297 || info->mach == bfd_mach_l1om
52b15da3 11298 || info->mach == bfd_mach_i386_i386_intel_syntax
8a9036a4
L
11299 || info->mach == bfd_mach_x86_64_intel_syntax
11300 || info->mach == bfd_mach_l1om_intel_syntax)
e396998b 11301 priv.orig_sizeflag = AFLAG | DFLAG;
2da11e11 11302 else if (info->mach == bfd_mach_i386_i8086)
e396998b 11303 priv.orig_sizeflag = 0;
2da11e11
AM
11304 else
11305 abort ();
e396998b
AM
11306
11307 for (p = info->disassembler_options; p != NULL; )
11308 {
0112cd26 11309 if (CONST_STRNEQ (p, "x86-64"))
e396998b 11310 {
cb712a9e 11311 address_mode = mode_64bit;
e396998b
AM
11312 priv.orig_sizeflag = AFLAG | DFLAG;
11313 }
0112cd26 11314 else if (CONST_STRNEQ (p, "i386"))
e396998b 11315 {
cb712a9e 11316 address_mode = mode_32bit;
e396998b
AM
11317 priv.orig_sizeflag = AFLAG | DFLAG;
11318 }
0112cd26 11319 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11320 {
cb712a9e 11321 address_mode = mode_16bit;
e396998b
AM
11322 priv.orig_sizeflag = 0;
11323 }
0112cd26 11324 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11325 {
11326 intel_syntax = 1;
9d141669
L
11327 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11328 intel_mnemonic = 1;
e396998b 11329 }
0112cd26 11330 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11331 {
11332 intel_syntax = 0;
9d141669
L
11333 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11334 intel_mnemonic = 0;
e396998b 11335 }
0112cd26 11336 else if (CONST_STRNEQ (p, "addr"))
e396998b 11337 {
f59a29b9
L
11338 if (address_mode == mode_64bit)
11339 {
11340 if (p[4] == '3' && p[5] == '2')
11341 priv.orig_sizeflag &= ~AFLAG;
11342 else if (p[4] == '6' && p[5] == '4')
11343 priv.orig_sizeflag |= AFLAG;
11344 }
11345 else
11346 {
11347 if (p[4] == '1' && p[5] == '6')
11348 priv.orig_sizeflag &= ~AFLAG;
11349 else if (p[4] == '3' && p[5] == '2')
11350 priv.orig_sizeflag |= AFLAG;
11351 }
e396998b 11352 }
0112cd26 11353 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11354 {
11355 if (p[4] == '1' && p[5] == '6')
11356 priv.orig_sizeflag &= ~DFLAG;
11357 else if (p[4] == '3' && p[5] == '2')
11358 priv.orig_sizeflag |= DFLAG;
11359 }
0112cd26 11360 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11361 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11362
11363 p = strchr (p, ',');
11364 if (p != NULL)
11365 p++;
11366 }
11367
11368 if (intel_syntax)
11369 {
11370 names64 = intel_names64;
11371 names32 = intel_names32;
11372 names16 = intel_names16;
11373 names8 = intel_names8;
11374 names8rex = intel_names8rex;
11375 names_seg = intel_names_seg;
b9733481
L
11376 names_mm = intel_names_mm;
11377 names_xmm = intel_names_xmm;
11378 names_ymm = intel_names_ymm;
db51cc60
L
11379 index64 = intel_index64;
11380 index32 = intel_index32;
e396998b
AM
11381 index16 = intel_index16;
11382 open_char = '[';
11383 close_char = ']';
11384 separator_char = '+';
11385 scale_char = '*';
11386 }
11387 else
11388 {
11389 names64 = att_names64;
11390 names32 = att_names32;
11391 names16 = att_names16;
11392 names8 = att_names8;
11393 names8rex = att_names8rex;
11394 names_seg = att_names_seg;
b9733481
L
11395 names_mm = att_names_mm;
11396 names_xmm = att_names_xmm;
11397 names_ymm = att_names_ymm;
db51cc60
L
11398 index64 = att_index64;
11399 index32 = att_index32;
e396998b
AM
11400 index16 = att_index16;
11401 open_char = '(';
11402 close_char = ')';
11403 separator_char = ',';
11404 scale_char = ',';
11405 }
2da11e11 11406
4fe53c98 11407 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11408 puts most long word instructions on a single line. Use 8 bytes
11409 for Intel L1OM. */
11410 if (info->mach == bfd_mach_l1om
11411 || info->mach == bfd_mach_l1om_intel_syntax)
11412 info->bytes_per_line = 8;
11413 else
11414 info->bytes_per_line = 7;
252b5132 11415
26ca5450 11416 info->private_data = &priv;
252b5132
RH
11417 priv.max_fetched = priv.the_buffer;
11418 priv.insn_start = pc;
252b5132
RH
11419
11420 obuf[0] = 0;
ce518a5f
L
11421 for (i = 0; i < MAX_OPERANDS; ++i)
11422 {
11423 op_out[i][0] = 0;
11424 op_index[i] = -1;
11425 }
252b5132
RH
11426
11427 the_info = info;
11428 start_pc = pc;
e396998b
AM
11429 start_codep = priv.the_buffer;
11430 codep = priv.the_buffer;
252b5132 11431
5076851f
ILT
11432 if (setjmp (priv.bailout) != 0)
11433 {
7d421014
ILT
11434 const char *name;
11435
5076851f 11436 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
11437 means we have an incomplete instruction of some sort. Just
11438 print the first byte as a prefix or a .byte pseudo-op. */
11439 if (codep > priv.the_buffer)
5076851f 11440 {
e396998b 11441 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
11442 if (name != NULL)
11443 (*info->fprintf_func) (info->stream, "%s", name);
11444 else
5076851f 11445 {
7d421014
ILT
11446 /* Just print the first byte as a .byte instruction. */
11447 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 11448 (unsigned int) priv.the_buffer[0]);
5076851f 11449 }
5076851f 11450
7d421014 11451 return 1;
5076851f
ILT
11452 }
11453
11454 return -1;
11455 }
11456
52b15da3 11457 obufp = obuf;
f16cd0d5
L
11458 sizeflag = priv.orig_sizeflag;
11459
11460 if (!ckprefix () || rex_used)
11461 {
11462 /* Too many prefixes or unused REX prefixes. */
11463 for (i = 0;
11464 all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes);
11465 i++)
11466 (*info->fprintf_func) (info->stream, "%s",
11467 prefix_name (all_prefixes[i], sizeflag));
11468 return 1;
11469 }
252b5132
RH
11470
11471 insn_codep = codep;
11472
11473 FETCH_DATA (info, codep + 1);
11474 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11475
3e7d61b2 11476 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 11477 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 11478 {
f16cd0d5 11479 (*info->fprintf_func) (info->stream, "fwait");
7d421014 11480 return 1;
252b5132
RH
11481 }
11482
252b5132
RH
11483 if (*codep == 0x0f)
11484 {
eec0f4ca 11485 unsigned char threebyte;
252b5132 11486 FETCH_DATA (info, codep + 2);
eec0f4ca
L
11487 threebyte = *++codep;
11488 dp = &dis386_twobyte[threebyte];
252b5132 11489 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 11490 codep++;
252b5132
RH
11491 }
11492 else
11493 {
6439fc28 11494 dp = &dis386[*codep];
252b5132 11495 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 11496 codep++;
252b5132 11497 }
246c51aa 11498
b844680a 11499 if ((prefixes & PREFIX_REPZ))
f16cd0d5 11500 used_prefixes |= PREFIX_REPZ;
b844680a 11501 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 11502 used_prefixes |= PREFIX_REPNZ;
b844680a 11503 if ((prefixes & PREFIX_LOCK))
f16cd0d5 11504 used_prefixes |= PREFIX_LOCK;
c608c12e 11505
f16cd0d5 11506 default_prefixes = 0;
c608c12e
AM
11507 if (prefixes & PREFIX_ADDR)
11508 {
11509 sizeflag ^= AFLAG;
ce518a5f 11510 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 11511 {
cb712a9e 11512 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 11513 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 11514 else
f16cd0d5
L
11515 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11516 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
11517 }
11518 }
11519
b844680a 11520 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
11521 {
11522 sizeflag ^= DFLAG;
ce518a5f
L
11523 if (dp->op[2].bytemode == cond_jump_mode
11524 && dp->op[0].bytemode == v_mode
6439fc28 11525 && !intel_syntax)
3ffd33cf
AM
11526 {
11527 if (sizeflag & DFLAG)
f16cd0d5 11528 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 11529 else
f16cd0d5
L
11530 all_prefixes[last_data_prefix] = DATA16_PREFIX;
11531 default_prefixes |= PREFIX_DATA;
11532 }
11533 else if (rex & REX_W)
11534 {
11535 /* REX_W will override PREFIX_DATA. */
11536 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
11537 }
11538 }
11539
8bb15339 11540 if (need_modrm)
252b5132
RH
11541 {
11542 FETCH_DATA (info, codep + 1);
7967e09e
L
11543 modrm.mod = (*codep >> 6) & 3;
11544 modrm.reg = (*codep >> 3) & 7;
11545 modrm.rm = *codep & 7;
252b5132
RH
11546 }
11547
55b126d4
L
11548 need_vex = 0;
11549 need_vex_reg = 0;
11550 vex_w_done = 0;
11551
ce518a5f 11552 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 11553 {
dfc8cf43 11554 get_sib (info);
252b5132
RH
11555 dofloat (sizeflag);
11556 }
11557 else
11558 {
8bb15339 11559 dp = get_valid_dis386 (dp, info);
b844680a 11560 if (dp != NULL && putop (dp->name, sizeflag) == 0)
ce518a5f 11561 {
dfc8cf43 11562 get_sib (info);
ce518a5f
L
11563 for (i = 0; i < MAX_OPERANDS; ++i)
11564 {
246c51aa 11565 obufp = op_out[i];
ce518a5f
L
11566 op_ad = MAX_OPERANDS - 1 - i;
11567 if (dp->op[i].rtn)
11568 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11569 }
6439fc28 11570 }
252b5132
RH
11571 }
11572
7d421014
ILT
11573 /* See if any prefixes were not used. If so, print the first one
11574 separately. If we don't do this, we'll wind up printing an
11575 instruction stream which does not precisely correspond to the
11576 bytes we are disassembling. */
f16cd0d5 11577 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 11578 {
f16cd0d5
L
11579 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11580 if (all_prefixes[i])
11581 {
11582 const char *name;
11583 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11584 if (name == NULL)
11585 name = INTERNAL_DISASSEMBLER_ERROR;
11586 (*info->fprintf_func) (info->stream, "%s", name);
11587 return 1;
11588 }
52b15da3 11589 }
7d421014 11590
d869730d 11591 /* Check if the REX prefix is used. */
2a70cca4 11592 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
11593 all_prefixes[last_rex_prefix] = 0;
11594
5e6718e4 11595 /* Check if the SEG prefix is used. */
f16cd0d5
L
11596 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11597 | PREFIX_FS | PREFIX_GS)) != 0
11598 && (used_prefixes
11599 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11600 all_prefixes[last_seg_prefix] = 0;
11601
5e6718e4 11602 /* Check if the ADDR prefix is used. */
f16cd0d5
L
11603 if ((prefixes & PREFIX_ADDR) != 0
11604 && (used_prefixes & PREFIX_ADDR) != 0)
11605 all_prefixes[last_addr_prefix] = 0;
11606
5e6718e4 11607 /* Check if the DATA prefix is used. */
f16cd0d5
L
11608 if ((prefixes & PREFIX_DATA) != 0
11609 && (used_prefixes & PREFIX_DATA) != 0)
11610 all_prefixes[last_data_prefix] = 0;
11611
11612 prefix_length = 0;
f310f33d 11613 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
11614 if (all_prefixes[i])
11615 {
11616 const char *name;
11617 name = prefix_name (all_prefixes[i], sizeflag);
11618 if (name == NULL)
11619 abort ();
11620 prefix_length += strlen (name) + 1;
11621 (*info->fprintf_func) (info->stream, "%s ", name);
11622 }
b844680a 11623
f16cd0d5
L
11624 /* Check maximum code length. */
11625 if ((codep - start_codep) > MAX_CODE_LENGTH)
11626 {
11627 (*info->fprintf_func) (info->stream, "(bad)");
11628 return MAX_CODE_LENGTH;
11629 }
b844680a 11630
ea397f5b 11631 obufp = mnemonicendp;
f16cd0d5 11632 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
11633 oappend (" ");
11634 oappend (" ");
11635 (*info->fprintf_func) (info->stream, "%s", obuf);
11636
11637 /* The enter and bound instructions are printed with operands in the same
11638 order as the intel book; everything else is printed in reverse order. */
2da11e11 11639 if (intel_syntax || two_source_ops)
252b5132 11640 {
185b1163
L
11641 bfd_vma riprel;
11642
ce518a5f
L
11643 for (i = 0; i < MAX_OPERANDS; ++i)
11644 op_txt[i] = op_out[i];
246c51aa 11645
ce518a5f
L
11646 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11647 {
11648 op_ad = op_index[i];
11649 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11650 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
11651 riprel = op_riprel[i];
11652 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11653 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 11654 }
252b5132
RH
11655 }
11656 else
11657 {
ce518a5f
L
11658 for (i = 0; i < MAX_OPERANDS; ++i)
11659 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
11660 }
11661
ce518a5f
L
11662 needcomma = 0;
11663 for (i = 0; i < MAX_OPERANDS; ++i)
11664 if (*op_txt[i])
11665 {
11666 if (needcomma)
11667 (*info->fprintf_func) (info->stream, ",");
11668 if (op_index[i] != -1 && !op_riprel[i])
11669 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11670 else
11671 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11672 needcomma = 1;
11673 }
050dfa73 11674
ce518a5f 11675 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
11676 if (op_index[i] != -1 && op_riprel[i])
11677 {
11678 (*info->fprintf_func) (info->stream, " # ");
11679 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11680 + op_address[op_index[i]]), info);
185b1163 11681 break;
52b15da3 11682 }
e396998b 11683 return codep - priv.the_buffer;
252b5132
RH
11684}
11685
6439fc28 11686static const char *float_mem[] = {
252b5132 11687 /* d8 */
7c52e0e8
L
11688 "fadd{s|}",
11689 "fmul{s|}",
11690 "fcom{s|}",
11691 "fcomp{s|}",
11692 "fsub{s|}",
11693 "fsubr{s|}",
11694 "fdiv{s|}",
11695 "fdivr{s|}",
db6eb5be 11696 /* d9 */
7c52e0e8 11697 "fld{s|}",
252b5132 11698 "(bad)",
7c52e0e8
L
11699 "fst{s|}",
11700 "fstp{s|}",
9306ca4a 11701 "fldenvIC",
252b5132 11702 "fldcw",
9306ca4a 11703 "fNstenvIC",
252b5132
RH
11704 "fNstcw",
11705 /* da */
7c52e0e8
L
11706 "fiadd{l|}",
11707 "fimul{l|}",
11708 "ficom{l|}",
11709 "ficomp{l|}",
11710 "fisub{l|}",
11711 "fisubr{l|}",
11712 "fidiv{l|}",
11713 "fidivr{l|}",
252b5132 11714 /* db */
7c52e0e8
L
11715 "fild{l|}",
11716 "fisttp{l|}",
11717 "fist{l|}",
11718 "fistp{l|}",
252b5132 11719 "(bad)",
6439fc28 11720 "fld{t||t|}",
252b5132 11721 "(bad)",
6439fc28 11722 "fstp{t||t|}",
252b5132 11723 /* dc */
7c52e0e8
L
11724 "fadd{l|}",
11725 "fmul{l|}",
11726 "fcom{l|}",
11727 "fcomp{l|}",
11728 "fsub{l|}",
11729 "fsubr{l|}",
11730 "fdiv{l|}",
11731 "fdivr{l|}",
252b5132 11732 /* dd */
7c52e0e8
L
11733 "fld{l|}",
11734 "fisttp{ll|}",
11735 "fst{l||}",
11736 "fstp{l|}",
9306ca4a 11737 "frstorIC",
252b5132 11738 "(bad)",
9306ca4a 11739 "fNsaveIC",
252b5132
RH
11740 "fNstsw",
11741 /* de */
11742 "fiadd",
11743 "fimul",
11744 "ficom",
11745 "ficomp",
11746 "fisub",
11747 "fisubr",
11748 "fidiv",
11749 "fidivr",
11750 /* df */
11751 "fild",
ca164297 11752 "fisttp",
252b5132
RH
11753 "fist",
11754 "fistp",
11755 "fbld",
7c52e0e8 11756 "fild{ll|}",
252b5132 11757 "fbstp",
7c52e0e8 11758 "fistp{ll|}",
1d9f512f
AM
11759};
11760
11761static const unsigned char float_mem_mode[] = {
11762 /* d8 */
11763 d_mode,
11764 d_mode,
11765 d_mode,
11766 d_mode,
11767 d_mode,
11768 d_mode,
11769 d_mode,
11770 d_mode,
11771 /* d9 */
11772 d_mode,
11773 0,
11774 d_mode,
11775 d_mode,
11776 0,
11777 w_mode,
11778 0,
11779 w_mode,
11780 /* da */
11781 d_mode,
11782 d_mode,
11783 d_mode,
11784 d_mode,
11785 d_mode,
11786 d_mode,
11787 d_mode,
11788 d_mode,
11789 /* db */
11790 d_mode,
11791 d_mode,
11792 d_mode,
11793 d_mode,
11794 0,
9306ca4a 11795 t_mode,
1d9f512f 11796 0,
9306ca4a 11797 t_mode,
1d9f512f
AM
11798 /* dc */
11799 q_mode,
11800 q_mode,
11801 q_mode,
11802 q_mode,
11803 q_mode,
11804 q_mode,
11805 q_mode,
11806 q_mode,
11807 /* dd */
11808 q_mode,
11809 q_mode,
11810 q_mode,
11811 q_mode,
11812 0,
11813 0,
11814 0,
11815 w_mode,
11816 /* de */
11817 w_mode,
11818 w_mode,
11819 w_mode,
11820 w_mode,
11821 w_mode,
11822 w_mode,
11823 w_mode,
11824 w_mode,
11825 /* df */
11826 w_mode,
11827 w_mode,
11828 w_mode,
11829 w_mode,
9306ca4a 11830 t_mode,
1d9f512f 11831 q_mode,
9306ca4a 11832 t_mode,
1d9f512f 11833 q_mode
252b5132
RH
11834};
11835
ce518a5f
L
11836#define ST { OP_ST, 0 }
11837#define STi { OP_STi, 0 }
252b5132 11838
4efba78c
L
11839#define FGRPd9_2 NULL, { { NULL, 0 } }
11840#define FGRPd9_4 NULL, { { NULL, 1 } }
11841#define FGRPd9_5 NULL, { { NULL, 2 } }
11842#define FGRPd9_6 NULL, { { NULL, 3 } }
11843#define FGRPd9_7 NULL, { { NULL, 4 } }
11844#define FGRPda_5 NULL, { { NULL, 5 } }
11845#define FGRPdb_4 NULL, { { NULL, 6 } }
11846#define FGRPde_3 NULL, { { NULL, 7 } }
11847#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 11848
2da11e11 11849static const struct dis386 float_reg[][8] = {
252b5132
RH
11850 /* d8 */
11851 {
ce518a5f
L
11852 { "fadd", { ST, STi } },
11853 { "fmul", { ST, STi } },
11854 { "fcom", { STi } },
11855 { "fcomp", { STi } },
11856 { "fsub", { ST, STi } },
11857 { "fsubr", { ST, STi } },
11858 { "fdiv", { ST, STi } },
11859 { "fdivr", { ST, STi } },
252b5132
RH
11860 },
11861 /* d9 */
11862 {
ce518a5f
L
11863 { "fld", { STi } },
11864 { "fxch", { STi } },
252b5132 11865 { FGRPd9_2 },
592d1631 11866 { Bad_Opcode },
252b5132
RH
11867 { FGRPd9_4 },
11868 { FGRPd9_5 },
11869 { FGRPd9_6 },
11870 { FGRPd9_7 },
11871 },
11872 /* da */
11873 {
ce518a5f
L
11874 { "fcmovb", { ST, STi } },
11875 { "fcmove", { ST, STi } },
11876 { "fcmovbe",{ ST, STi } },
11877 { "fcmovu", { ST, STi } },
592d1631 11878 { Bad_Opcode },
252b5132 11879 { FGRPda_5 },
592d1631
L
11880 { Bad_Opcode },
11881 { Bad_Opcode },
252b5132
RH
11882 },
11883 /* db */
11884 {
ce518a5f
L
11885 { "fcmovnb",{ ST, STi } },
11886 { "fcmovne",{ ST, STi } },
11887 { "fcmovnbe",{ ST, STi } },
11888 { "fcmovnu",{ ST, STi } },
252b5132 11889 { FGRPdb_4 },
ce518a5f
L
11890 { "fucomi", { ST, STi } },
11891 { "fcomi", { ST, STi } },
592d1631 11892 { Bad_Opcode },
252b5132
RH
11893 },
11894 /* dc */
11895 {
ce518a5f
L
11896 { "fadd", { STi, ST } },
11897 { "fmul", { STi, ST } },
592d1631
L
11898 { Bad_Opcode },
11899 { Bad_Opcode },
9d141669
L
11900 { "fsub!M", { STi, ST } },
11901 { "fsubM", { STi, ST } },
11902 { "fdiv!M", { STi, ST } },
11903 { "fdivM", { STi, ST } },
252b5132
RH
11904 },
11905 /* dd */
11906 {
ce518a5f 11907 { "ffree", { STi } },
592d1631 11908 { Bad_Opcode },
ce518a5f
L
11909 { "fst", { STi } },
11910 { "fstp", { STi } },
11911 { "fucom", { STi } },
11912 { "fucomp", { STi } },
592d1631
L
11913 { Bad_Opcode },
11914 { Bad_Opcode },
252b5132
RH
11915 },
11916 /* de */
11917 {
ce518a5f
L
11918 { "faddp", { STi, ST } },
11919 { "fmulp", { STi, ST } },
592d1631 11920 { Bad_Opcode },
252b5132 11921 { FGRPde_3 },
9d141669
L
11922 { "fsub!Mp", { STi, ST } },
11923 { "fsubMp", { STi, ST } },
11924 { "fdiv!Mp", { STi, ST } },
11925 { "fdivMp", { STi, ST } },
252b5132
RH
11926 },
11927 /* df */
11928 {
ce518a5f 11929 { "ffreep", { STi } },
592d1631
L
11930 { Bad_Opcode },
11931 { Bad_Opcode },
11932 { Bad_Opcode },
252b5132 11933 { FGRPdf_4 },
ce518a5f
L
11934 { "fucomip", { ST, STi } },
11935 { "fcomip", { ST, STi } },
592d1631 11936 { Bad_Opcode },
252b5132
RH
11937 },
11938};
11939
252b5132
RH
11940static char *fgrps[][8] = {
11941 /* d9_2 0 */
11942 {
11943 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11944 },
11945
11946 /* d9_4 1 */
11947 {
11948 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11949 },
11950
11951 /* d9_5 2 */
11952 {
11953 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11954 },
11955
11956 /* d9_6 3 */
11957 {
11958 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11959 },
11960
11961 /* d9_7 4 */
11962 {
11963 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11964 },
11965
11966 /* da_5 5 */
11967 {
11968 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11969 },
11970
11971 /* db_4 6 */
11972 {
309d3373
JB
11973 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11974 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
11975 },
11976
11977 /* de_3 7 */
11978 {
11979 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11980 },
11981
11982 /* df_4 8 */
11983 {
11984 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11985 },
11986};
11987
b6169b20
L
11988static void
11989swap_operand (void)
11990{
11991 mnemonicendp[0] = '.';
11992 mnemonicendp[1] = 's';
11993 mnemonicendp += 2;
11994}
11995
b844680a
L
11996static void
11997OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
11998 int sizeflag ATTRIBUTE_UNUSED)
11999{
12000 /* Skip mod/rm byte. */
12001 MODRM_CHECK;
12002 codep++;
12003}
12004
252b5132 12005static void
26ca5450 12006dofloat (int sizeflag)
252b5132 12007{
2da11e11 12008 const struct dis386 *dp;
252b5132
RH
12009 unsigned char floatop;
12010
12011 floatop = codep[-1];
12012
7967e09e 12013 if (modrm.mod != 3)
252b5132 12014 {
7967e09e 12015 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12016
12017 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12018 obufp = op_out[0];
6e50d963 12019 op_ad = 2;
1d9f512f 12020 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12021 return;
12022 }
6608db57 12023 /* Skip mod/rm byte. */
4bba6815 12024 MODRM_CHECK;
252b5132
RH
12025 codep++;
12026
7967e09e 12027 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12028 if (dp->name == NULL)
12029 {
7967e09e 12030 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12031
6608db57 12032 /* Instruction fnstsw is only one with strange arg. */
252b5132 12033 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12034 strcpy (op_out[0], names16[0]);
252b5132
RH
12035 }
12036 else
12037 {
12038 putop (dp->name, sizeflag);
12039
ce518a5f 12040 obufp = op_out[0];
6e50d963 12041 op_ad = 2;
ce518a5f
L
12042 if (dp->op[0].rtn)
12043 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12044
ce518a5f 12045 obufp = op_out[1];
6e50d963 12046 op_ad = 1;
ce518a5f
L
12047 if (dp->op[1].rtn)
12048 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12049 }
12050}
12051
252b5132 12052static void
26ca5450 12053OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12054{
422673a9 12055 oappend ("%st" + intel_syntax);
252b5132
RH
12056}
12057
252b5132 12058static void
26ca5450 12059OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12060{
7967e09e 12061 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 12062 oappend (scratchbuf + intel_syntax);
252b5132
RH
12063}
12064
6608db57 12065/* Capital letters in template are macros. */
6439fc28 12066static int
d3ce72d0 12067putop (const char *in_template, int sizeflag)
252b5132 12068{
2da11e11 12069 const char *p;
9306ca4a 12070 int alt = 0;
9d141669 12071 int cond = 1;
98b528ac
L
12072 unsigned int l = 0, len = 1;
12073 char last[4];
12074
12075#define SAVE_LAST(c) \
12076 if (l < len && l < sizeof (last)) \
12077 last[l++] = c; \
12078 else \
12079 abort ();
252b5132 12080
d3ce72d0 12081 for (p = in_template; *p; p++)
252b5132
RH
12082 {
12083 switch (*p)
12084 {
12085 default:
12086 *obufp++ = *p;
12087 break;
98b528ac
L
12088 case '%':
12089 len++;
12090 break;
9d141669
L
12091 case '!':
12092 cond = 0;
12093 break;
6439fc28
AM
12094 case '{':
12095 alt = 0;
12096 if (intel_syntax)
6439fc28
AM
12097 {
12098 while (*++p != '|')
7c52e0e8
L
12099 if (*p == '}' || *p == '\0')
12100 abort ();
6439fc28 12101 }
9306ca4a
JB
12102 /* Fall through. */
12103 case 'I':
12104 alt = 1;
12105 continue;
6439fc28
AM
12106 case '|':
12107 while (*++p != '}')
12108 {
12109 if (*p == '\0')
12110 abort ();
12111 }
12112 break;
12113 case '}':
12114 break;
252b5132 12115 case 'A':
db6eb5be
AM
12116 if (intel_syntax)
12117 break;
7967e09e 12118 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12119 *obufp++ = 'b';
12120 break;
12121 case 'B':
4b06377f
L
12122 if (l == 0 && len == 1)
12123 {
12124case_B:
12125 if (intel_syntax)
12126 break;
12127 if (sizeflag & SUFFIX_ALWAYS)
12128 *obufp++ = 'b';
12129 }
12130 else
12131 {
12132 if (l != 1
12133 || len != 2
12134 || last[0] != 'L')
12135 {
12136 SAVE_LAST (*p);
12137 break;
12138 }
12139
12140 if (address_mode == mode_64bit
12141 && !(prefixes & PREFIX_ADDR))
12142 {
12143 *obufp++ = 'a';
12144 *obufp++ = 'b';
12145 *obufp++ = 's';
12146 }
12147
12148 goto case_B;
12149 }
252b5132 12150 break;
9306ca4a
JB
12151 case 'C':
12152 if (intel_syntax && !alt)
12153 break;
12154 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12155 {
12156 if (sizeflag & DFLAG)
12157 *obufp++ = intel_syntax ? 'd' : 'l';
12158 else
12159 *obufp++ = intel_syntax ? 'w' : 's';
12160 used_prefixes |= (prefixes & PREFIX_DATA);
12161 }
12162 break;
ed7841b3
JB
12163 case 'D':
12164 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12165 break;
161a04f6 12166 USED_REX (REX_W);
7967e09e 12167 if (modrm.mod == 3)
ed7841b3 12168 {
161a04f6 12169 if (rex & REX_W)
ed7841b3 12170 *obufp++ = 'q';
ed7841b3 12171 else
f16cd0d5
L
12172 {
12173 if (sizeflag & DFLAG)
12174 *obufp++ = intel_syntax ? 'd' : 'l';
12175 else
12176 *obufp++ = 'w';
12177 used_prefixes |= (prefixes & PREFIX_DATA);
12178 }
ed7841b3
JB
12179 }
12180 else
12181 *obufp++ = 'w';
12182 break;
252b5132 12183 case 'E': /* For jcxz/jecxz */
cb712a9e 12184 if (address_mode == mode_64bit)
c1a64871
JH
12185 {
12186 if (sizeflag & AFLAG)
12187 *obufp++ = 'r';
12188 else
12189 *obufp++ = 'e';
12190 }
12191 else
12192 if (sizeflag & AFLAG)
12193 *obufp++ = 'e';
3ffd33cf
AM
12194 used_prefixes |= (prefixes & PREFIX_ADDR);
12195 break;
12196 case 'F':
db6eb5be
AM
12197 if (intel_syntax)
12198 break;
e396998b 12199 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12200 {
12201 if (sizeflag & AFLAG)
cb712a9e 12202 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12203 else
cb712a9e 12204 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12205 used_prefixes |= (prefixes & PREFIX_ADDR);
12206 }
252b5132 12207 break;
52fd6d94
JB
12208 case 'G':
12209 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12210 break;
161a04f6 12211 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12212 *obufp++ = 'l';
12213 else
12214 *obufp++ = 'w';
161a04f6 12215 if (!(rex & REX_W))
52fd6d94
JB
12216 used_prefixes |= (prefixes & PREFIX_DATA);
12217 break;
5dd0794d 12218 case 'H':
db6eb5be
AM
12219 if (intel_syntax)
12220 break;
5dd0794d
AM
12221 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12222 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12223 {
12224 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12225 *obufp++ = ',';
12226 *obufp++ = 'p';
12227 if (prefixes & PREFIX_DS)
12228 *obufp++ = 't';
12229 else
12230 *obufp++ = 'n';
12231 }
12232 break;
9306ca4a
JB
12233 case 'J':
12234 if (intel_syntax)
12235 break;
12236 *obufp++ = 'l';
12237 break;
42903f7f
L
12238 case 'K':
12239 USED_REX (REX_W);
12240 if (rex & REX_W)
12241 *obufp++ = 'q';
12242 else
12243 *obufp++ = 'd';
12244 break;
6dd5059a
L
12245 case 'Z':
12246 if (intel_syntax)
12247 break;
12248 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12249 {
12250 *obufp++ = 'q';
12251 break;
12252 }
12253 /* Fall through. */
98b528ac 12254 goto case_L;
252b5132 12255 case 'L':
98b528ac
L
12256 if (l != 0 || len != 1)
12257 {
12258 SAVE_LAST (*p);
12259 break;
12260 }
12261case_L:
db6eb5be
AM
12262 if (intel_syntax)
12263 break;
252b5132
RH
12264 if (sizeflag & SUFFIX_ALWAYS)
12265 *obufp++ = 'l';
252b5132 12266 break;
9d141669
L
12267 case 'M':
12268 if (intel_mnemonic != cond)
12269 *obufp++ = 'r';
12270 break;
252b5132
RH
12271 case 'N':
12272 if ((prefixes & PREFIX_FWAIT) == 0)
12273 *obufp++ = 'n';
7d421014
ILT
12274 else
12275 used_prefixes |= PREFIX_FWAIT;
252b5132 12276 break;
52b15da3 12277 case 'O':
161a04f6
L
12278 USED_REX (REX_W);
12279 if (rex & REX_W)
6439fc28 12280 *obufp++ = 'o';
a35ca55a
JB
12281 else if (intel_syntax && (sizeflag & DFLAG))
12282 *obufp++ = 'q';
52b15da3
JH
12283 else
12284 *obufp++ = 'd';
161a04f6 12285 if (!(rex & REX_W))
a35ca55a 12286 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12287 break;
6439fc28 12288 case 'T':
db6eb5be
AM
12289 if (intel_syntax)
12290 break;
cb712a9e 12291 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
12292 {
12293 *obufp++ = 'q';
12294 break;
12295 }
6608db57 12296 /* Fall through. */
252b5132 12297 case 'P':
db6eb5be
AM
12298 if (intel_syntax)
12299 break;
252b5132 12300 if ((prefixes & PREFIX_DATA)
161a04f6 12301 || (rex & REX_W)
e396998b 12302 || (sizeflag & SUFFIX_ALWAYS))
252b5132 12303 {
161a04f6
L
12304 USED_REX (REX_W);
12305 if (rex & REX_W)
52b15da3 12306 *obufp++ = 'q';
c2419411 12307 else
52b15da3
JH
12308 {
12309 if (sizeflag & DFLAG)
12310 *obufp++ = 'l';
12311 else
12312 *obufp++ = 'w';
f16cd0d5 12313 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12314 }
252b5132
RH
12315 }
12316 break;
6439fc28 12317 case 'U':
db6eb5be
AM
12318 if (intel_syntax)
12319 break;
cb712a9e 12320 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28 12321 {
7967e09e 12322 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12323 *obufp++ = 'q';
6439fc28
AM
12324 break;
12325 }
6608db57 12326 /* Fall through. */
98b528ac 12327 goto case_Q;
252b5132 12328 case 'Q':
98b528ac 12329 if (l == 0 && len == 1)
252b5132 12330 {
98b528ac
L
12331case_Q:
12332 if (intel_syntax && !alt)
12333 break;
12334 USED_REX (REX_W);
12335 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12336 {
98b528ac
L
12337 if (rex & REX_W)
12338 *obufp++ = 'q';
52b15da3 12339 else
98b528ac
L
12340 {
12341 if (sizeflag & DFLAG)
12342 *obufp++ = intel_syntax ? 'd' : 'l';
12343 else
12344 *obufp++ = 'w';
f16cd0d5 12345 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 12346 }
52b15da3 12347 }
98b528ac
L
12348 }
12349 else
12350 {
12351 if (l != 1 || len != 2 || last[0] != 'L')
12352 {
12353 SAVE_LAST (*p);
12354 break;
12355 }
12356 if (intel_syntax
12357 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12358 break;
12359 if ((rex & REX_W))
12360 {
12361 USED_REX (REX_W);
12362 *obufp++ = 'q';
12363 }
12364 else
12365 *obufp++ = 'l';
252b5132
RH
12366 }
12367 break;
12368 case 'R':
161a04f6
L
12369 USED_REX (REX_W);
12370 if (rex & REX_W)
a35ca55a
JB
12371 *obufp++ = 'q';
12372 else if (sizeflag & DFLAG)
c608c12e 12373 {
a35ca55a 12374 if (intel_syntax)
c608c12e 12375 *obufp++ = 'd';
c608c12e 12376 else
a35ca55a 12377 *obufp++ = 'l';
c608c12e 12378 }
252b5132 12379 else
a35ca55a
JB
12380 *obufp++ = 'w';
12381 if (intel_syntax && !p[1]
161a04f6 12382 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 12383 *obufp++ = 'e';
161a04f6 12384 if (!(rex & REX_W))
52b15da3 12385 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 12386 break;
1a114b12 12387 case 'V':
4b06377f 12388 if (l == 0 && len == 1)
1a114b12 12389 {
4b06377f
L
12390 if (intel_syntax)
12391 break;
12392 if (address_mode == mode_64bit && (sizeflag & DFLAG))
12393 {
12394 if (sizeflag & SUFFIX_ALWAYS)
12395 *obufp++ = 'q';
12396 break;
12397 }
12398 }
12399 else
12400 {
12401 if (l != 1
12402 || len != 2
12403 || last[0] != 'L')
12404 {
12405 SAVE_LAST (*p);
12406 break;
12407 }
12408
12409 if (rex & REX_W)
12410 {
12411 *obufp++ = 'a';
12412 *obufp++ = 'b';
12413 *obufp++ = 's';
12414 }
1a114b12
JB
12415 }
12416 /* Fall through. */
4b06377f 12417 goto case_S;
252b5132 12418 case 'S':
4b06377f 12419 if (l == 0 && len == 1)
252b5132 12420 {
4b06377f
L
12421case_S:
12422 if (intel_syntax)
12423 break;
12424 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 12425 {
4b06377f
L
12426 if (rex & REX_W)
12427 *obufp++ = 'q';
52b15da3 12428 else
4b06377f
L
12429 {
12430 if (sizeflag & DFLAG)
12431 *obufp++ = 'l';
12432 else
12433 *obufp++ = 'w';
12434 used_prefixes |= (prefixes & PREFIX_DATA);
12435 }
12436 }
12437 }
12438 else
12439 {
12440 if (l != 1
12441 || len != 2
12442 || last[0] != 'L')
12443 {
12444 SAVE_LAST (*p);
12445 break;
52b15da3 12446 }
4b06377f
L
12447
12448 if (address_mode == mode_64bit
12449 && !(prefixes & PREFIX_ADDR))
12450 {
12451 *obufp++ = 'a';
12452 *obufp++ = 'b';
12453 *obufp++ = 's';
12454 }
12455
12456 goto case_S;
252b5132 12457 }
252b5132 12458 break;
041bd2e0 12459 case 'X':
c0f3af97
L
12460 if (l != 0 || len != 1)
12461 {
12462 SAVE_LAST (*p);
12463 break;
12464 }
12465 if (need_vex && vex.prefix)
12466 {
12467 if (vex.prefix == DATA_PREFIX_OPCODE)
12468 *obufp++ = 'd';
12469 else
12470 *obufp++ = 's';
12471 }
041bd2e0 12472 else
f16cd0d5
L
12473 {
12474 if (prefixes & PREFIX_DATA)
12475 *obufp++ = 'd';
12476 else
12477 *obufp++ = 's';
12478 used_prefixes |= (prefixes & PREFIX_DATA);
12479 }
041bd2e0 12480 break;
76f227a5 12481 case 'Y':
c0f3af97 12482 if (l == 0 && len == 1)
76f227a5 12483 {
c0f3af97
L
12484 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12485 break;
12486 if (rex & REX_W)
12487 {
12488 USED_REX (REX_W);
12489 *obufp++ = 'q';
12490 }
12491 break;
12492 }
12493 else
12494 {
12495 if (l != 1 || len != 2 || last[0] != 'X')
12496 {
12497 SAVE_LAST (*p);
12498 break;
12499 }
12500 if (!need_vex)
12501 abort ();
12502 if (intel_syntax
12503 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12504 break;
12505 switch (vex.length)
12506 {
12507 case 128:
12508 *obufp++ = 'x';
12509 break;
12510 case 256:
12511 *obufp++ = 'y';
12512 break;
12513 default:
12514 abort ();
12515 }
76f227a5
JH
12516 }
12517 break;
252b5132 12518 case 'W':
0bfee649 12519 if (l == 0 && len == 1)
a35ca55a 12520 {
0bfee649
L
12521 /* operand size flag for cwtl, cbtw */
12522 USED_REX (REX_W);
12523 if (rex & REX_W)
12524 {
12525 if (intel_syntax)
12526 *obufp++ = 'd';
12527 else
12528 *obufp++ = 'l';
12529 }
12530 else if (sizeflag & DFLAG)
12531 *obufp++ = 'w';
a35ca55a 12532 else
0bfee649
L
12533 *obufp++ = 'b';
12534 if (!(rex & REX_W))
12535 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 12536 }
252b5132 12537 else
0bfee649
L
12538 {
12539 if (l != 1 || len != 2 || last[0] != 'X')
12540 {
12541 SAVE_LAST (*p);
12542 break;
12543 }
12544 if (!need_vex)
12545 abort ();
12546 *obufp++ = vex.w ? 'd': 's';
12547 }
252b5132
RH
12548 break;
12549 }
9306ca4a 12550 alt = 0;
252b5132
RH
12551 }
12552 *obufp = 0;
ea397f5b 12553 mnemonicendp = obufp;
6439fc28 12554 return 0;
252b5132
RH
12555}
12556
12557static void
26ca5450 12558oappend (const char *s)
252b5132 12559{
ea397f5b 12560 obufp = stpcpy (obufp, s);
252b5132
RH
12561}
12562
12563static void
26ca5450 12564append_seg (void)
252b5132
RH
12565{
12566 if (prefixes & PREFIX_CS)
7d421014 12567 {
7d421014 12568 used_prefixes |= PREFIX_CS;
d708bcba 12569 oappend ("%cs:" + intel_syntax);
7d421014 12570 }
252b5132 12571 if (prefixes & PREFIX_DS)
7d421014 12572 {
7d421014 12573 used_prefixes |= PREFIX_DS;
d708bcba 12574 oappend ("%ds:" + intel_syntax);
7d421014 12575 }
252b5132 12576 if (prefixes & PREFIX_SS)
7d421014 12577 {
7d421014 12578 used_prefixes |= PREFIX_SS;
d708bcba 12579 oappend ("%ss:" + intel_syntax);
7d421014 12580 }
252b5132 12581 if (prefixes & PREFIX_ES)
7d421014 12582 {
7d421014 12583 used_prefixes |= PREFIX_ES;
d708bcba 12584 oappend ("%es:" + intel_syntax);
7d421014 12585 }
252b5132 12586 if (prefixes & PREFIX_FS)
7d421014 12587 {
7d421014 12588 used_prefixes |= PREFIX_FS;
d708bcba 12589 oappend ("%fs:" + intel_syntax);
7d421014 12590 }
252b5132 12591 if (prefixes & PREFIX_GS)
7d421014 12592 {
7d421014 12593 used_prefixes |= PREFIX_GS;
d708bcba 12594 oappend ("%gs:" + intel_syntax);
7d421014 12595 }
252b5132
RH
12596}
12597
12598static void
26ca5450 12599OP_indirE (int bytemode, int sizeflag)
252b5132
RH
12600{
12601 if (!intel_syntax)
12602 oappend ("*");
12603 OP_E (bytemode, sizeflag);
12604}
12605
52b15da3 12606static void
26ca5450 12607print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 12608{
cb712a9e 12609 if (address_mode == mode_64bit)
52b15da3
JH
12610 {
12611 if (hex)
12612 {
12613 char tmp[30];
12614 int i;
12615 buf[0] = '0';
12616 buf[1] = 'x';
12617 sprintf_vma (tmp, disp);
6608db57 12618 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
12619 strcpy (buf + 2, tmp + i);
12620 }
12621 else
12622 {
12623 bfd_signed_vma v = disp;
12624 char tmp[30];
12625 int i;
12626 if (v < 0)
12627 {
12628 *(buf++) = '-';
12629 v = -disp;
6608db57 12630 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
12631 if (v < 0)
12632 {
12633 strcpy (buf, "9223372036854775808");
12634 return;
12635 }
12636 }
12637 if (!v)
12638 {
12639 strcpy (buf, "0");
12640 return;
12641 }
12642
12643 i = 0;
12644 tmp[29] = 0;
12645 while (v)
12646 {
6608db57 12647 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
12648 v /= 10;
12649 i++;
12650 }
12651 strcpy (buf, tmp + 29 - i);
12652 }
12653 }
12654 else
12655 {
12656 if (hex)
12657 sprintf (buf, "0x%x", (unsigned int) disp);
12658 else
12659 sprintf (buf, "%d", (int) disp);
12660 }
12661}
12662
5d669648
L
12663/* Put DISP in BUF as signed hex number. */
12664
12665static void
12666print_displacement (char *buf, bfd_vma disp)
12667{
12668 bfd_signed_vma val = disp;
12669 char tmp[30];
12670 int i, j = 0;
12671
12672 if (val < 0)
12673 {
12674 buf[j++] = '-';
12675 val = -disp;
12676
12677 /* Check for possible overflow. */
12678 if (val < 0)
12679 {
12680 switch (address_mode)
12681 {
12682 case mode_64bit:
12683 strcpy (buf + j, "0x8000000000000000");
12684 break;
12685 case mode_32bit:
12686 strcpy (buf + j, "0x80000000");
12687 break;
12688 case mode_16bit:
12689 strcpy (buf + j, "0x8000");
12690 break;
12691 }
12692 return;
12693 }
12694 }
12695
12696 buf[j++] = '0';
12697 buf[j++] = 'x';
12698
0af1713e 12699 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
12700 for (i = 0; tmp[i] == '0'; i++)
12701 continue;
12702 if (tmp[i] == '\0')
12703 i--;
12704 strcpy (buf + j, tmp + i);
12705}
12706
3f31e633
JB
12707static void
12708intel_operand_size (int bytemode, int sizeflag)
12709{
12710 switch (bytemode)
12711 {
12712 case b_mode:
b6169b20 12713 case b_swap_mode:
42903f7f 12714 case dqb_mode:
3f31e633
JB
12715 oappend ("BYTE PTR ");
12716 break;
12717 case w_mode:
12718 case dqw_mode:
12719 oappend ("WORD PTR ");
12720 break;
1a114b12 12721 case stack_v_mode:
cb712a9e 12722 if (address_mode == mode_64bit && (sizeflag & DFLAG))
3f31e633
JB
12723 {
12724 oappend ("QWORD PTR ");
3f31e633
JB
12725 break;
12726 }
12727 /* FALLTHRU */
12728 case v_mode:
b6169b20 12729 case v_swap_mode:
3f31e633 12730 case dq_mode:
161a04f6
L
12731 USED_REX (REX_W);
12732 if (rex & REX_W)
3f31e633 12733 oappend ("QWORD PTR ");
3f31e633 12734 else
f16cd0d5
L
12735 {
12736 if ((sizeflag & DFLAG) || bytemode == dq_mode)
12737 oappend ("DWORD PTR ");
12738 else
12739 oappend ("WORD PTR ");
12740 used_prefixes |= (prefixes & PREFIX_DATA);
12741 }
3f31e633 12742 break;
52fd6d94 12743 case z_mode:
161a04f6 12744 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12745 *obufp++ = 'D';
12746 oappend ("WORD PTR ");
161a04f6 12747 if (!(rex & REX_W))
52fd6d94
JB
12748 used_prefixes |= (prefixes & PREFIX_DATA);
12749 break;
34b772a6
JB
12750 case a_mode:
12751 if (sizeflag & DFLAG)
12752 oappend ("QWORD PTR ");
12753 else
12754 oappend ("DWORD PTR ");
12755 used_prefixes |= (prefixes & PREFIX_DATA);
12756 break;
3f31e633 12757 case d_mode:
539f890d
L
12758 case d_scalar_mode:
12759 case d_scalar_swap_mode:
fa99fab2 12760 case d_swap_mode:
42903f7f 12761 case dqd_mode:
3f31e633
JB
12762 oappend ("DWORD PTR ");
12763 break;
12764 case q_mode:
539f890d
L
12765 case q_scalar_mode:
12766 case q_scalar_swap_mode:
b6169b20 12767 case q_swap_mode:
3f31e633
JB
12768 oappend ("QWORD PTR ");
12769 break;
12770 case m_mode:
cb712a9e 12771 if (address_mode == mode_64bit)
3f31e633
JB
12772 oappend ("QWORD PTR ");
12773 else
12774 oappend ("DWORD PTR ");
12775 break;
12776 case f_mode:
12777 if (sizeflag & DFLAG)
12778 oappend ("FWORD PTR ");
12779 else
12780 oappend ("DWORD PTR ");
12781 used_prefixes |= (prefixes & PREFIX_DATA);
12782 break;
12783 case t_mode:
12784 oappend ("TBYTE PTR ");
12785 break;
12786 case x_mode:
b6169b20 12787 case x_swap_mode:
c0f3af97
L
12788 if (need_vex)
12789 {
12790 switch (vex.length)
12791 {
12792 case 128:
12793 oappend ("XMMWORD PTR ");
12794 break;
12795 case 256:
12796 oappend ("YMMWORD PTR ");
12797 break;
12798 default:
12799 abort ();
12800 }
12801 }
12802 else
12803 oappend ("XMMWORD PTR ");
12804 break;
12805 case xmm_mode:
3f31e633
JB
12806 oappend ("XMMWORD PTR ");
12807 break;
c0f3af97
L
12808 case xmmq_mode:
12809 if (!need_vex)
12810 abort ();
12811
12812 switch (vex.length)
12813 {
12814 case 128:
12815 oappend ("QWORD PTR ");
12816 break;
12817 case 256:
12818 oappend ("XMMWORD PTR ");
12819 break;
12820 default:
12821 abort ();
12822 }
12823 break;
12824 case ymmq_mode:
12825 if (!need_vex)
12826 abort ();
12827
12828 switch (vex.length)
12829 {
12830 case 128:
12831 oappend ("QWORD PTR ");
12832 break;
12833 case 256:
12834 oappend ("YMMWORD PTR ");
12835 break;
12836 default:
12837 abort ();
12838 }
12839 break;
fb9c77c7
L
12840 case o_mode:
12841 oappend ("OWORD PTR ");
12842 break;
0bfee649 12843 case vex_w_dq_mode:
1c480963 12844 case vex_scalar_w_dq_mode:
0bfee649
L
12845 if (!need_vex)
12846 abort ();
12847
12848 if (vex.w)
12849 oappend ("QWORD PTR ");
12850 else
12851 oappend ("DWORD PTR ");
12852 break;
3f31e633
JB
12853 default:
12854 break;
12855 }
12856}
12857
252b5132 12858static void
c0f3af97 12859OP_E_register (int bytemode, int sizeflag)
252b5132 12860{
c0f3af97
L
12861 int reg = modrm.rm;
12862 const char **names;
252b5132 12863
c0f3af97
L
12864 USED_REX (REX_B);
12865 if ((rex & REX_B))
12866 reg += 8;
252b5132 12867
b6169b20
L
12868 if ((sizeflag & SUFFIX_ALWAYS)
12869 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
12870 swap_operand ();
12871
c0f3af97 12872 switch (bytemode)
252b5132 12873 {
c0f3af97 12874 case b_mode:
b6169b20 12875 case b_swap_mode:
c0f3af97
L
12876 USED_REX (0);
12877 if (rex)
12878 names = names8rex;
12879 else
12880 names = names8;
12881 break;
12882 case w_mode:
12883 names = names16;
12884 break;
12885 case d_mode:
12886 names = names32;
12887 break;
12888 case q_mode:
12889 names = names64;
12890 break;
12891 case m_mode:
12892 names = address_mode == mode_64bit ? names64 : names32;
12893 break;
12894 case stack_v_mode:
12895 if (address_mode == mode_64bit && (sizeflag & DFLAG))
252b5132 12896 {
c0f3af97 12897 names = names64;
252b5132 12898 break;
252b5132 12899 }
c0f3af97
L
12900 bytemode = v_mode;
12901 /* FALLTHRU */
12902 case v_mode:
b6169b20 12903 case v_swap_mode:
c0f3af97
L
12904 case dq_mode:
12905 case dqb_mode:
12906 case dqd_mode:
12907 case dqw_mode:
12908 USED_REX (REX_W);
12909 if (rex & REX_W)
12910 names = names64;
c0f3af97 12911 else
f16cd0d5
L
12912 {
12913 if ((sizeflag & DFLAG)
12914 || (bytemode != v_mode
12915 && bytemode != v_swap_mode))
12916 names = names32;
12917 else
12918 names = names16;
12919 used_prefixes |= (prefixes & PREFIX_DATA);
12920 }
c0f3af97
L
12921 break;
12922 case 0:
12923 return;
12924 default:
12925 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
12926 return;
12927 }
c0f3af97
L
12928 oappend (names[reg]);
12929}
12930
12931static void
c1e679ec 12932OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
12933{
12934 bfd_vma disp = 0;
12935 int add = (rex & REX_B) ? 8 : 0;
12936 int riprel = 0;
252b5132 12937
c0f3af97 12938 USED_REX (REX_B);
3f31e633
JB
12939 if (intel_syntax)
12940 intel_operand_size (bytemode, sizeflag);
252b5132
RH
12941 append_seg ();
12942
5d669648 12943 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 12944 {
5d669648
L
12945 /* 32/64 bit address mode */
12946 int havedisp;
252b5132
RH
12947 int havesib;
12948 int havebase;
0f7da397 12949 int haveindex;
20afcfb7 12950 int needindex;
82c18208 12951 int base, rbase;
91d6fa6a 12952 int vindex = 0;
252b5132
RH
12953 int scale = 0;
12954
12955 havesib = 0;
12956 havebase = 1;
0f7da397 12957 haveindex = 0;
7967e09e 12958 base = modrm.rm;
252b5132
RH
12959
12960 if (base == 4)
12961 {
12962 havesib = 1;
dfc8cf43
L
12963 vindex = sib.index;
12964 scale = sib.scale;
12965 base = sib.base;
161a04f6
L
12966 USED_REX (REX_X);
12967 if (rex & REX_X)
91d6fa6a
NC
12968 vindex += 8;
12969 haveindex = vindex != 4;
252b5132
RH
12970 codep++;
12971 }
82c18208 12972 rbase = base + add;
252b5132 12973
7967e09e 12974 switch (modrm.mod)
252b5132
RH
12975 {
12976 case 0:
82c18208 12977 if (base == 5)
252b5132
RH
12978 {
12979 havebase = 0;
cb712a9e 12980 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
12981 riprel = 1;
12982 disp = get32s ();
252b5132
RH
12983 }
12984 break;
12985 case 1:
12986 FETCH_DATA (the_info, codep + 1);
12987 disp = *codep++;
12988 if ((disp & 0x80) != 0)
12989 disp -= 0x100;
12990 break;
12991 case 2:
52b15da3 12992 disp = get32s ();
252b5132
RH
12993 break;
12994 }
12995
20afcfb7
L
12996 /* In 32bit mode, we need index register to tell [offset] from
12997 [eiz*1 + offset]. */
12998 needindex = (havesib
12999 && !havebase
13000 && !haveindex
13001 && address_mode == mode_32bit);
13002 havedisp = (havebase
13003 || needindex
13004 || (havesib && (haveindex || scale != 0)));
5d669648 13005
252b5132 13006 if (!intel_syntax)
82c18208 13007 if (modrm.mod != 0 || base == 5)
db6eb5be 13008 {
5d669648
L
13009 if (havedisp || riprel)
13010 print_displacement (scratchbuf, disp);
13011 else
13012 print_operand_value (scratchbuf, 1, disp);
db6eb5be 13013 oappend (scratchbuf);
52b15da3
JH
13014 if (riprel)
13015 {
13016 set_op (disp, 1);
87767711 13017 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 13018 }
db6eb5be 13019 }
2da11e11 13020
87767711
JB
13021 if (havebase || haveindex || riprel)
13022 used_prefixes |= PREFIX_ADDR;
13023
5d669648 13024 if (havedisp || (intel_syntax && riprel))
252b5132 13025 {
252b5132 13026 *obufp++ = open_char;
52b15da3 13027 if (intel_syntax && riprel)
185b1163
L
13028 {
13029 set_op (disp, 1);
87767711 13030 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 13031 }
db6eb5be 13032 *obufp = '\0';
252b5132 13033 if (havebase)
cb712a9e 13034 oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
82c18208 13035 ? names64[rbase] : names32[rbase]);
252b5132
RH
13036 if (havesib)
13037 {
db51cc60
L
13038 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
13039 print index to tell base + index from base. */
13040 if (scale != 0
20afcfb7 13041 || needindex
db51cc60
L
13042 || haveindex
13043 || (havebase && base != ESP_REG_NUM))
252b5132 13044 {
9306ca4a 13045 if (!intel_syntax || havebase)
db6eb5be 13046 {
9306ca4a
JB
13047 *obufp++ = separator_char;
13048 *obufp = '\0';
db6eb5be 13049 }
db51cc60
L
13050 if (haveindex)
13051 oappend (address_mode == mode_64bit
13052 && (sizeflag & AFLAG)
91d6fa6a 13053 ? names64[vindex] : names32[vindex]);
db51cc60
L
13054 else
13055 oappend (address_mode == mode_64bit
13056 && (sizeflag & AFLAG)
13057 ? index64 : index32);
13058
db6eb5be
AM
13059 *obufp++ = scale_char;
13060 *obufp = '\0';
13061 sprintf (scratchbuf, "%d", 1 << scale);
13062 oappend (scratchbuf);
13063 }
252b5132 13064 }
185b1163 13065 if (intel_syntax
82c18208 13066 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 13067 {
db51cc60 13068 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
13069 {
13070 *obufp++ = '+';
13071 *obufp = '\0';
13072 }
05203043 13073 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
13074 {
13075 *obufp++ = '-';
13076 *obufp = '\0';
13077 disp = - (bfd_signed_vma) disp;
13078 }
13079
db51cc60
L
13080 if (havedisp)
13081 print_displacement (scratchbuf, disp);
13082 else
13083 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
13084 oappend (scratchbuf);
13085 }
252b5132
RH
13086
13087 *obufp++ = close_char;
db6eb5be 13088 *obufp = '\0';
252b5132
RH
13089 }
13090 else if (intel_syntax)
db6eb5be 13091 {
82c18208 13092 if (modrm.mod != 0 || base == 5)
db6eb5be 13093 {
252b5132
RH
13094 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13095 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13096 ;
13097 else
13098 {
d708bcba 13099 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13100 oappend (":");
13101 }
52b15da3 13102 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
13103 oappend (scratchbuf);
13104 }
13105 }
252b5132
RH
13106 }
13107 else
f16cd0d5
L
13108 {
13109 /* 16 bit address mode */
13110 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 13111 switch (modrm.mod)
252b5132
RH
13112 {
13113 case 0:
7967e09e 13114 if (modrm.rm == 6)
252b5132
RH
13115 {
13116 disp = get16 ();
13117 if ((disp & 0x8000) != 0)
13118 disp -= 0x10000;
13119 }
13120 break;
13121 case 1:
13122 FETCH_DATA (the_info, codep + 1);
13123 disp = *codep++;
13124 if ((disp & 0x80) != 0)
13125 disp -= 0x100;
13126 break;
13127 case 2:
13128 disp = get16 ();
13129 if ((disp & 0x8000) != 0)
13130 disp -= 0x10000;
13131 break;
13132 }
13133
13134 if (!intel_syntax)
7967e09e 13135 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 13136 {
5d669648 13137 print_displacement (scratchbuf, disp);
db6eb5be
AM
13138 oappend (scratchbuf);
13139 }
252b5132 13140
7967e09e 13141 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
13142 {
13143 *obufp++ = open_char;
db6eb5be 13144 *obufp = '\0';
7967e09e 13145 oappend (index16[modrm.rm]);
5d669648
L
13146 if (intel_syntax
13147 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 13148 {
5d669648 13149 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
13150 {
13151 *obufp++ = '+';
13152 *obufp = '\0';
13153 }
7967e09e 13154 else if (modrm.mod != 1)
3d456fa1
JB
13155 {
13156 *obufp++ = '-';
13157 *obufp = '\0';
13158 disp = - (bfd_signed_vma) disp;
13159 }
13160
5d669648 13161 print_displacement (scratchbuf, disp);
3d456fa1
JB
13162 oappend (scratchbuf);
13163 }
13164
db6eb5be
AM
13165 *obufp++ = close_char;
13166 *obufp = '\0';
252b5132 13167 }
3d456fa1
JB
13168 else if (intel_syntax)
13169 {
13170 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13171 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13172 ;
13173 else
13174 {
13175 oappend (names_seg[ds_reg - es_reg]);
13176 oappend (":");
13177 }
13178 print_operand_value (scratchbuf, 1, disp & 0xffff);
13179 oappend (scratchbuf);
13180 }
252b5132
RH
13181 }
13182}
13183
c0f3af97 13184static void
8b3f93e7 13185OP_E (int bytemode, int sizeflag)
c0f3af97
L
13186{
13187 /* Skip mod/rm byte. */
13188 MODRM_CHECK;
13189 codep++;
13190
13191 if (modrm.mod == 3)
13192 OP_E_register (bytemode, sizeflag);
13193 else
c1e679ec 13194 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
13195}
13196
252b5132 13197static void
26ca5450 13198OP_G (int bytemode, int sizeflag)
252b5132 13199{
52b15da3 13200 int add = 0;
161a04f6
L
13201 USED_REX (REX_R);
13202 if (rex & REX_R)
52b15da3 13203 add += 8;
252b5132
RH
13204 switch (bytemode)
13205 {
13206 case b_mode:
52b15da3
JH
13207 USED_REX (0);
13208 if (rex)
7967e09e 13209 oappend (names8rex[modrm.reg + add]);
52b15da3 13210 else
7967e09e 13211 oappend (names8[modrm.reg + add]);
252b5132
RH
13212 break;
13213 case w_mode:
7967e09e 13214 oappend (names16[modrm.reg + add]);
252b5132
RH
13215 break;
13216 case d_mode:
7967e09e 13217 oappend (names32[modrm.reg + add]);
52b15da3
JH
13218 break;
13219 case q_mode:
7967e09e 13220 oappend (names64[modrm.reg + add]);
252b5132
RH
13221 break;
13222 case v_mode:
9306ca4a 13223 case dq_mode:
42903f7f
L
13224 case dqb_mode:
13225 case dqd_mode:
9306ca4a 13226 case dqw_mode:
161a04f6
L
13227 USED_REX (REX_W);
13228 if (rex & REX_W)
7967e09e 13229 oappend (names64[modrm.reg + add]);
252b5132 13230 else
f16cd0d5
L
13231 {
13232 if ((sizeflag & DFLAG) || bytemode != v_mode)
13233 oappend (names32[modrm.reg + add]);
13234 else
13235 oappend (names16[modrm.reg + add]);
13236 used_prefixes |= (prefixes & PREFIX_DATA);
13237 }
252b5132 13238 break;
90700ea2 13239 case m_mode:
cb712a9e 13240 if (address_mode == mode_64bit)
7967e09e 13241 oappend (names64[modrm.reg + add]);
90700ea2 13242 else
7967e09e 13243 oappend (names32[modrm.reg + add]);
90700ea2 13244 break;
252b5132
RH
13245 default:
13246 oappend (INTERNAL_DISASSEMBLER_ERROR);
13247 break;
13248 }
13249}
13250
52b15da3 13251static bfd_vma
26ca5450 13252get64 (void)
52b15da3 13253{
5dd0794d 13254 bfd_vma x;
52b15da3 13255#ifdef BFD64
5dd0794d
AM
13256 unsigned int a;
13257 unsigned int b;
13258
52b15da3
JH
13259 FETCH_DATA (the_info, codep + 8);
13260 a = *codep++ & 0xff;
13261 a |= (*codep++ & 0xff) << 8;
13262 a |= (*codep++ & 0xff) << 16;
13263 a |= (*codep++ & 0xff) << 24;
5dd0794d 13264 b = *codep++ & 0xff;
52b15da3
JH
13265 b |= (*codep++ & 0xff) << 8;
13266 b |= (*codep++ & 0xff) << 16;
13267 b |= (*codep++ & 0xff) << 24;
13268 x = a + ((bfd_vma) b << 32);
13269#else
6608db57 13270 abort ();
5dd0794d 13271 x = 0;
52b15da3
JH
13272#endif
13273 return x;
13274}
13275
13276static bfd_signed_vma
26ca5450 13277get32 (void)
252b5132 13278{
52b15da3 13279 bfd_signed_vma x = 0;
252b5132
RH
13280
13281 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
13282 x = *codep++ & (bfd_signed_vma) 0xff;
13283 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13284 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13285 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13286 return x;
13287}
13288
13289static bfd_signed_vma
26ca5450 13290get32s (void)
52b15da3
JH
13291{
13292 bfd_signed_vma x = 0;
13293
13294 FETCH_DATA (the_info, codep + 4);
13295 x = *codep++ & (bfd_signed_vma) 0xff;
13296 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13297 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13298 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13299
13300 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13301
252b5132
RH
13302 return x;
13303}
13304
13305static int
26ca5450 13306get16 (void)
252b5132
RH
13307{
13308 int x = 0;
13309
13310 FETCH_DATA (the_info, codep + 2);
13311 x = *codep++ & 0xff;
13312 x |= (*codep++ & 0xff) << 8;
13313 return x;
13314}
13315
13316static void
26ca5450 13317set_op (bfd_vma op, int riprel)
252b5132
RH
13318{
13319 op_index[op_ad] = op_ad;
cb712a9e 13320 if (address_mode == mode_64bit)
7081ff04
AJ
13321 {
13322 op_address[op_ad] = op;
13323 op_riprel[op_ad] = riprel;
13324 }
13325 else
13326 {
13327 /* Mask to get a 32-bit address. */
13328 op_address[op_ad] = op & 0xffffffff;
13329 op_riprel[op_ad] = riprel & 0xffffffff;
13330 }
252b5132
RH
13331}
13332
13333static void
26ca5450 13334OP_REG (int code, int sizeflag)
252b5132 13335{
2da11e11 13336 const char *s;
9b60702d 13337 int add;
161a04f6
L
13338 USED_REX (REX_B);
13339 if (rex & REX_B)
52b15da3 13340 add = 8;
9b60702d
L
13341 else
13342 add = 0;
52b15da3
JH
13343
13344 switch (code)
13345 {
52b15da3
JH
13346 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13347 case sp_reg: case bp_reg: case si_reg: case di_reg:
13348 s = names16[code - ax_reg + add];
13349 break;
13350 case es_reg: case ss_reg: case cs_reg:
13351 case ds_reg: case fs_reg: case gs_reg:
13352 s = names_seg[code - es_reg + add];
13353 break;
13354 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13355 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13356 USED_REX (0);
13357 if (rex)
13358 s = names8rex[code - al_reg + add];
13359 else
13360 s = names8[code - al_reg];
13361 break;
6439fc28
AM
13362 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13363 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
cb712a9e 13364 if (address_mode == mode_64bit && (sizeflag & DFLAG))
6439fc28
AM
13365 {
13366 s = names64[code - rAX_reg + add];
13367 break;
13368 }
13369 code += eAX_reg - rAX_reg;
6608db57 13370 /* Fall through. */
52b15da3
JH
13371 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13372 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13373 USED_REX (REX_W);
13374 if (rex & REX_W)
52b15da3 13375 s = names64[code - eAX_reg + add];
52b15da3 13376 else
f16cd0d5
L
13377 {
13378 if (sizeflag & DFLAG)
13379 s = names32[code - eAX_reg + add];
13380 else
13381 s = names16[code - eAX_reg + add];
13382 used_prefixes |= (prefixes & PREFIX_DATA);
13383 }
52b15da3 13384 break;
52b15da3
JH
13385 default:
13386 s = INTERNAL_DISASSEMBLER_ERROR;
13387 break;
13388 }
13389 oappend (s);
13390}
13391
13392static void
26ca5450 13393OP_IMREG (int code, int sizeflag)
52b15da3
JH
13394{
13395 const char *s;
252b5132
RH
13396
13397 switch (code)
13398 {
13399 case indir_dx_reg:
d708bcba 13400 if (intel_syntax)
52fd6d94 13401 s = "dx";
d708bcba 13402 else
db6eb5be 13403 s = "(%dx)";
252b5132
RH
13404 break;
13405 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13406 case sp_reg: case bp_reg: case si_reg: case di_reg:
13407 s = names16[code - ax_reg];
13408 break;
13409 case es_reg: case ss_reg: case cs_reg:
13410 case ds_reg: case fs_reg: case gs_reg:
13411 s = names_seg[code - es_reg];
13412 break;
13413 case al_reg: case ah_reg: case cl_reg: case ch_reg:
13414 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
13415 USED_REX (0);
13416 if (rex)
13417 s = names8rex[code - al_reg];
13418 else
13419 s = names8[code - al_reg];
252b5132
RH
13420 break;
13421 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13422 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
13423 USED_REX (REX_W);
13424 if (rex & REX_W)
52b15da3 13425 s = names64[code - eAX_reg];
252b5132 13426 else
f16cd0d5
L
13427 {
13428 if (sizeflag & DFLAG)
13429 s = names32[code - eAX_reg];
13430 else
13431 s = names16[code - eAX_reg];
13432 used_prefixes |= (prefixes & PREFIX_DATA);
13433 }
252b5132 13434 break;
52fd6d94 13435 case z_mode_ax_reg:
161a04f6 13436 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13437 s = *names32;
13438 else
13439 s = *names16;
161a04f6 13440 if (!(rex & REX_W))
52fd6d94
JB
13441 used_prefixes |= (prefixes & PREFIX_DATA);
13442 break;
252b5132
RH
13443 default:
13444 s = INTERNAL_DISASSEMBLER_ERROR;
13445 break;
13446 }
13447 oappend (s);
13448}
13449
13450static void
26ca5450 13451OP_I (int bytemode, int sizeflag)
252b5132 13452{
52b15da3
JH
13453 bfd_signed_vma op;
13454 bfd_signed_vma mask = -1;
252b5132
RH
13455
13456 switch (bytemode)
13457 {
13458 case b_mode:
13459 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
13460 op = *codep++;
13461 mask = 0xff;
13462 break;
13463 case q_mode:
cb712a9e 13464 if (address_mode == mode_64bit)
6439fc28
AM
13465 {
13466 op = get32s ();
13467 break;
13468 }
6608db57 13469 /* Fall through. */
252b5132 13470 case v_mode:
161a04f6
L
13471 USED_REX (REX_W);
13472 if (rex & REX_W)
52b15da3 13473 op = get32s ();
252b5132 13474 else
52b15da3 13475 {
f16cd0d5
L
13476 if (sizeflag & DFLAG)
13477 {
13478 op = get32 ();
13479 mask = 0xffffffff;
13480 }
13481 else
13482 {
13483 op = get16 ();
13484 mask = 0xfffff;
13485 }
13486 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13487 }
252b5132
RH
13488 break;
13489 case w_mode:
52b15da3 13490 mask = 0xfffff;
252b5132
RH
13491 op = get16 ();
13492 break;
9306ca4a
JB
13493 case const_1_mode:
13494 if (intel_syntax)
13495 oappend ("1");
13496 return;
252b5132
RH
13497 default:
13498 oappend (INTERNAL_DISASSEMBLER_ERROR);
13499 return;
13500 }
13501
52b15da3
JH
13502 op &= mask;
13503 scratchbuf[0] = '$';
d708bcba
AM
13504 print_operand_value (scratchbuf + 1, 1, op);
13505 oappend (scratchbuf + intel_syntax);
52b15da3
JH
13506 scratchbuf[0] = '\0';
13507}
13508
13509static void
26ca5450 13510OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
13511{
13512 bfd_signed_vma op;
13513 bfd_signed_vma mask = -1;
13514
cb712a9e 13515 if (address_mode != mode_64bit)
6439fc28
AM
13516 {
13517 OP_I (bytemode, sizeflag);
13518 return;
13519 }
13520
52b15da3
JH
13521 switch (bytemode)
13522 {
13523 case b_mode:
13524 FETCH_DATA (the_info, codep + 1);
13525 op = *codep++;
13526 mask = 0xff;
13527 break;
13528 case v_mode:
161a04f6
L
13529 USED_REX (REX_W);
13530 if (rex & REX_W)
52b15da3 13531 op = get64 ();
52b15da3
JH
13532 else
13533 {
f16cd0d5
L
13534 if (sizeflag & DFLAG)
13535 {
13536 op = get32 ();
13537 mask = 0xffffffff;
13538 }
13539 else
13540 {
13541 op = get16 ();
13542 mask = 0xfffff;
13543 }
13544 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13545 }
52b15da3
JH
13546 break;
13547 case w_mode:
13548 mask = 0xfffff;
13549 op = get16 ();
13550 break;
13551 default:
13552 oappend (INTERNAL_DISASSEMBLER_ERROR);
13553 return;
13554 }
13555
13556 op &= mask;
13557 scratchbuf[0] = '$';
d708bcba
AM
13558 print_operand_value (scratchbuf + 1, 1, op);
13559 oappend (scratchbuf + intel_syntax);
252b5132
RH
13560 scratchbuf[0] = '\0';
13561}
13562
13563static void
26ca5450 13564OP_sI (int bytemode, int sizeflag)
252b5132 13565{
52b15da3 13566 bfd_signed_vma op;
252b5132
RH
13567
13568 switch (bytemode)
13569 {
13570 case b_mode:
13571 FETCH_DATA (the_info, codep + 1);
13572 op = *codep++;
13573 if ((op & 0x80) != 0)
13574 op -= 0x100;
13575 break;
13576 case v_mode:
161a04f6
L
13577 USED_REX (REX_W);
13578 if (rex & REX_W)
52b15da3 13579 op = get32s ();
252b5132
RH
13580 else
13581 {
f16cd0d5
L
13582 if (sizeflag & DFLAG)
13583 {
13584 op = get32s ();
f16cd0d5
L
13585 }
13586 else
13587 {
f16cd0d5
L
13588 op = get16 ();
13589 if ((op & 0x8000) != 0)
13590 op -= 0x10000;
13591 }
13592 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13593 }
13594 break;
13595 case w_mode:
13596 op = get16 ();
13597 if ((op & 0x8000) != 0)
13598 op -= 0x10000;
13599 break;
13600 default:
13601 oappend (INTERNAL_DISASSEMBLER_ERROR);
13602 return;
13603 }
52b15da3
JH
13604
13605 scratchbuf[0] = '$';
13606 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 13607 oappend (scratchbuf + intel_syntax);
252b5132
RH
13608}
13609
13610static void
26ca5450 13611OP_J (int bytemode, int sizeflag)
252b5132 13612{
52b15da3 13613 bfd_vma disp;
7081ff04 13614 bfd_vma mask = -1;
65ca155d 13615 bfd_vma segment = 0;
252b5132
RH
13616
13617 switch (bytemode)
13618 {
13619 case b_mode:
13620 FETCH_DATA (the_info, codep + 1);
13621 disp = *codep++;
13622 if ((disp & 0x80) != 0)
13623 disp -= 0x100;
13624 break;
13625 case v_mode:
f16cd0d5 13626 USED_REX (REX_W);
161a04f6 13627 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 13628 disp = get32s ();
252b5132
RH
13629 else
13630 {
13631 disp = get16 ();
206717e8
L
13632 if ((disp & 0x8000) != 0)
13633 disp -= 0x10000;
65ca155d
L
13634 /* In 16bit mode, address is wrapped around at 64k within
13635 the same segment. Otherwise, a data16 prefix on a jump
13636 instruction means that the pc is masked to 16 bits after
13637 the displacement is added! */
13638 mask = 0xffff;
13639 if ((prefixes & PREFIX_DATA) == 0)
13640 segment = ((start_pc + codep - start_codep)
13641 & ~((bfd_vma) 0xffff));
252b5132 13642 }
f16cd0d5
L
13643 if (!(rex & REX_W))
13644 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
13645 break;
13646 default:
13647 oappend (INTERNAL_DISASSEMBLER_ERROR);
13648 return;
13649 }
65ca155d 13650 disp = ((start_pc + codep - start_codep + disp) & mask) | segment;
52b15da3
JH
13651 set_op (disp, 0);
13652 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
13653 oappend (scratchbuf);
13654}
13655
252b5132 13656static void
ed7841b3 13657OP_SEG (int bytemode, int sizeflag)
252b5132 13658{
ed7841b3 13659 if (bytemode == w_mode)
7967e09e 13660 oappend (names_seg[modrm.reg]);
ed7841b3 13661 else
7967e09e 13662 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
13663}
13664
13665static void
26ca5450 13666OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
13667{
13668 int seg, offset;
13669
c608c12e 13670 if (sizeflag & DFLAG)
252b5132 13671 {
c608c12e
AM
13672 offset = get32 ();
13673 seg = get16 ();
252b5132 13674 }
c608c12e
AM
13675 else
13676 {
13677 offset = get16 ();
13678 seg = get16 ();
13679 }
7d421014 13680 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 13681 if (intel_syntax)
3f31e633 13682 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
13683 else
13684 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 13685 oappend (scratchbuf);
252b5132
RH
13686}
13687
252b5132 13688static void
3f31e633 13689OP_OFF (int bytemode, int sizeflag)
252b5132 13690{
52b15da3 13691 bfd_vma off;
252b5132 13692
3f31e633
JB
13693 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13694 intel_operand_size (bytemode, sizeflag);
252b5132
RH
13695 append_seg ();
13696
cb712a9e 13697 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
13698 off = get32 ();
13699 else
13700 off = get16 ();
13701
13702 if (intel_syntax)
13703 {
13704 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13705 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 13706 {
d708bcba 13707 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
13708 oappend (":");
13709 }
13710 }
52b15da3
JH
13711 print_operand_value (scratchbuf, 1, off);
13712 oappend (scratchbuf);
13713}
6439fc28 13714
52b15da3 13715static void
3f31e633 13716OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
13717{
13718 bfd_vma off;
13719
539e75ad
L
13720 if (address_mode != mode_64bit
13721 || (prefixes & PREFIX_ADDR))
6439fc28
AM
13722 {
13723 OP_OFF (bytemode, sizeflag);
13724 return;
13725 }
13726
3f31e633
JB
13727 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13728 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
13729 append_seg ();
13730
6608db57 13731 off = get64 ();
52b15da3
JH
13732
13733 if (intel_syntax)
13734 {
13735 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 13736 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 13737 {
d708bcba 13738 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
13739 oappend (":");
13740 }
13741 }
13742 print_operand_value (scratchbuf, 1, off);
252b5132
RH
13743 oappend (scratchbuf);
13744}
13745
13746static void
26ca5450 13747ptr_reg (int code, int sizeflag)
252b5132 13748{
2da11e11 13749 const char *s;
d708bcba 13750
1d9f512f 13751 *obufp++ = open_char;
20f0a1fc 13752 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 13753 if (address_mode == mode_64bit)
c1a64871
JH
13754 {
13755 if (!(sizeflag & AFLAG))
db6eb5be 13756 s = names32[code - eAX_reg];
c1a64871 13757 else
db6eb5be 13758 s = names64[code - eAX_reg];
c1a64871 13759 }
52b15da3 13760 else if (sizeflag & AFLAG)
252b5132
RH
13761 s = names32[code - eAX_reg];
13762 else
13763 s = names16[code - eAX_reg];
13764 oappend (s);
1d9f512f
AM
13765 *obufp++ = close_char;
13766 *obufp = 0;
252b5132
RH
13767}
13768
13769static void
26ca5450 13770OP_ESreg (int code, int sizeflag)
252b5132 13771{
9306ca4a 13772 if (intel_syntax)
52fd6d94
JB
13773 {
13774 switch (codep[-1])
13775 {
13776 case 0x6d: /* insw/insl */
13777 intel_operand_size (z_mode, sizeflag);
13778 break;
13779 case 0xa5: /* movsw/movsl/movsq */
13780 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13781 case 0xab: /* stosw/stosl */
13782 case 0xaf: /* scasw/scasl */
13783 intel_operand_size (v_mode, sizeflag);
13784 break;
13785 default:
13786 intel_operand_size (b_mode, sizeflag);
13787 }
13788 }
d708bcba 13789 oappend ("%es:" + intel_syntax);
252b5132
RH
13790 ptr_reg (code, sizeflag);
13791}
13792
13793static void
26ca5450 13794OP_DSreg (int code, int sizeflag)
252b5132 13795{
9306ca4a 13796 if (intel_syntax)
52fd6d94
JB
13797 {
13798 switch (codep[-1])
13799 {
13800 case 0x6f: /* outsw/outsl */
13801 intel_operand_size (z_mode, sizeflag);
13802 break;
13803 case 0xa5: /* movsw/movsl/movsq */
13804 case 0xa7: /* cmpsw/cmpsl/cmpsq */
13805 case 0xad: /* lodsw/lodsl/lodsq */
13806 intel_operand_size (v_mode, sizeflag);
13807 break;
13808 default:
13809 intel_operand_size (b_mode, sizeflag);
13810 }
13811 }
252b5132
RH
13812 if ((prefixes
13813 & (PREFIX_CS
13814 | PREFIX_DS
13815 | PREFIX_SS
13816 | PREFIX_ES
13817 | PREFIX_FS
13818 | PREFIX_GS)) == 0)
13819 prefixes |= PREFIX_DS;
6608db57 13820 append_seg ();
252b5132
RH
13821 ptr_reg (code, sizeflag);
13822}
13823
252b5132 13824static void
26ca5450 13825OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13826{
9b60702d 13827 int add;
161a04f6 13828 if (rex & REX_R)
c4a530c5 13829 {
161a04f6 13830 USED_REX (REX_R);
c4a530c5
JB
13831 add = 8;
13832 }
cb712a9e 13833 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 13834 {
f16cd0d5 13835 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
13836 used_prefixes |= PREFIX_LOCK;
13837 add = 8;
13838 }
9b60702d
L
13839 else
13840 add = 0;
7967e09e 13841 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 13842 oappend (scratchbuf + intel_syntax);
252b5132
RH
13843}
13844
252b5132 13845static void
26ca5450 13846OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13847{
9b60702d 13848 int add;
161a04f6
L
13849 USED_REX (REX_R);
13850 if (rex & REX_R)
52b15da3 13851 add = 8;
9b60702d
L
13852 else
13853 add = 0;
d708bcba 13854 if (intel_syntax)
7967e09e 13855 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 13856 else
7967e09e 13857 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
13858 oappend (scratchbuf);
13859}
13860
252b5132 13861static void
26ca5450 13862OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13863{
7967e09e 13864 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 13865 oappend (scratchbuf + intel_syntax);
252b5132
RH
13866}
13867
13868static void
6f74c397 13869OP_R (int bytemode, int sizeflag)
252b5132 13870{
7967e09e 13871 if (modrm.mod == 3)
2da11e11
AM
13872 OP_E (bytemode, sizeflag);
13873 else
6608db57 13874 BadOp ();
252b5132
RH
13875}
13876
13877static void
26ca5450 13878OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13879{
b9733481
L
13880 int reg = modrm.reg;
13881 const char **names;
13882
041bd2e0
JH
13883 used_prefixes |= (prefixes & PREFIX_DATA);
13884 if (prefixes & PREFIX_DATA)
20f0a1fc 13885 {
b9733481 13886 names = names_xmm;
161a04f6
L
13887 USED_REX (REX_R);
13888 if (rex & REX_R)
b9733481 13889 reg += 8;
20f0a1fc 13890 }
041bd2e0 13891 else
b9733481
L
13892 names = names_mm;
13893 oappend (names[reg]);
252b5132
RH
13894}
13895
c608c12e 13896static void
c0f3af97 13897OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 13898{
b9733481
L
13899 int reg = modrm.reg;
13900 const char **names;
13901
161a04f6
L
13902 USED_REX (REX_R);
13903 if (rex & REX_R)
b9733481 13904 reg += 8;
539f890d
L
13905 if (need_vex
13906 && bytemode != xmm_mode
13907 && bytemode != scalar_mode)
c0f3af97
L
13908 {
13909 switch (vex.length)
13910 {
13911 case 128:
b9733481 13912 names = names_xmm;
c0f3af97
L
13913 break;
13914 case 256:
b9733481 13915 names = names_ymm;
c0f3af97
L
13916 break;
13917 default:
13918 abort ();
13919 }
13920 }
13921 else
b9733481
L
13922 names = names_xmm;
13923 oappend (names[reg]);
c608c12e
AM
13924}
13925
252b5132 13926static void
26ca5450 13927OP_EM (int bytemode, int sizeflag)
252b5132 13928{
b9733481
L
13929 int reg;
13930 const char **names;
13931
7967e09e 13932 if (modrm.mod != 3)
252b5132 13933 {
b6169b20
L
13934 if (intel_syntax
13935 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
13936 {
13937 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13938 used_prefixes |= (prefixes & PREFIX_DATA);
13939 }
252b5132
RH
13940 OP_E (bytemode, sizeflag);
13941 return;
13942 }
13943
b6169b20
L
13944 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
13945 swap_operand ();
13946
6608db57 13947 /* Skip mod/rm byte. */
4bba6815 13948 MODRM_CHECK;
252b5132 13949 codep++;
041bd2e0 13950 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13951 reg = modrm.rm;
041bd2e0 13952 if (prefixes & PREFIX_DATA)
20f0a1fc 13953 {
b9733481 13954 names = names_xmm;
161a04f6
L
13955 USED_REX (REX_B);
13956 if (rex & REX_B)
b9733481 13957 reg += 8;
20f0a1fc 13958 }
041bd2e0 13959 else
b9733481
L
13960 names = names_mm;
13961 oappend (names[reg]);
252b5132
RH
13962}
13963
246c51aa
L
13964/* cvt* are the only instructions in sse2 which have
13965 both SSE and MMX operands and also have 0x66 prefix
13966 in their opcode. 0x66 was originally used to differentiate
13967 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
13968 cvt* separately using OP_EMC and OP_MXC */
13969static void
13970OP_EMC (int bytemode, int sizeflag)
13971{
7967e09e 13972 if (modrm.mod != 3)
4d9567e0
MM
13973 {
13974 if (intel_syntax && bytemode == v_mode)
13975 {
13976 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
13977 used_prefixes |= (prefixes & PREFIX_DATA);
13978 }
13979 OP_E (bytemode, sizeflag);
13980 return;
13981 }
246c51aa 13982
4d9567e0
MM
13983 /* Skip mod/rm byte. */
13984 MODRM_CHECK;
13985 codep++;
13986 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13987 oappend (names_mm[modrm.rm]);
4d9567e0
MM
13988}
13989
13990static void
13991OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13992{
13993 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 13994 oappend (names_mm[modrm.reg]);
4d9567e0
MM
13995}
13996
c608c12e 13997static void
26ca5450 13998OP_EX (int bytemode, int sizeflag)
c608c12e 13999{
b9733481
L
14000 int reg;
14001 const char **names;
d6f574e0
L
14002
14003 /* Skip mod/rm byte. */
14004 MODRM_CHECK;
14005 codep++;
14006
7967e09e 14007 if (modrm.mod != 3)
c608c12e 14008 {
c1e679ec 14009 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
14010 return;
14011 }
d6f574e0 14012
b9733481 14013 reg = modrm.rm;
161a04f6
L
14014 USED_REX (REX_B);
14015 if (rex & REX_B)
b9733481 14016 reg += 8;
c608c12e 14017
b6169b20 14018 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
14019 && (bytemode == x_swap_mode
14020 || bytemode == d_swap_mode
539f890d
L
14021 || bytemode == d_scalar_swap_mode
14022 || bytemode == q_swap_mode
14023 || bytemode == q_scalar_swap_mode))
b6169b20
L
14024 swap_operand ();
14025
c0f3af97
L
14026 if (need_vex
14027 && bytemode != xmm_mode
539f890d
L
14028 && bytemode != xmmq_mode
14029 && bytemode != d_scalar_mode
14030 && bytemode != d_scalar_swap_mode
14031 && bytemode != q_scalar_mode
1c480963
L
14032 && bytemode != q_scalar_swap_mode
14033 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
14034 {
14035 switch (vex.length)
14036 {
14037 case 128:
b9733481 14038 names = names_xmm;
c0f3af97
L
14039 break;
14040 case 256:
b9733481 14041 names = names_ymm;
c0f3af97
L
14042 break;
14043 default:
14044 abort ();
14045 }
14046 }
14047 else
b9733481
L
14048 names = names_xmm;
14049 oappend (names[reg]);
c608c12e
AM
14050}
14051
252b5132 14052static void
26ca5450 14053OP_MS (int bytemode, int sizeflag)
252b5132 14054{
7967e09e 14055 if (modrm.mod == 3)
2da11e11
AM
14056 OP_EM (bytemode, sizeflag);
14057 else
6608db57 14058 BadOp ();
252b5132
RH
14059}
14060
992aaec9 14061static void
26ca5450 14062OP_XS (int bytemode, int sizeflag)
992aaec9 14063{
7967e09e 14064 if (modrm.mod == 3)
992aaec9
AM
14065 OP_EX (bytemode, sizeflag);
14066 else
6608db57 14067 BadOp ();
992aaec9
AM
14068}
14069
cc0ec051
AM
14070static void
14071OP_M (int bytemode, int sizeflag)
14072{
7967e09e 14073 if (modrm.mod == 3)
75413a22
L
14074 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14075 BadOp ();
cc0ec051
AM
14076 else
14077 OP_E (bytemode, sizeflag);
14078}
14079
14080static void
14081OP_0f07 (int bytemode, int sizeflag)
14082{
7967e09e 14083 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
14084 BadOp ();
14085 else
14086 OP_E (bytemode, sizeflag);
14087}
14088
46e883c5 14089/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 14090 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 14091
cc0ec051 14092static void
46e883c5 14093NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 14094{
8b38ad71
L
14095 if ((prefixes & PREFIX_DATA) != 0
14096 || (rex != 0
14097 && rex != 0x48
14098 && address_mode == mode_64bit))
46e883c5
L
14099 OP_REG (bytemode, sizeflag);
14100 else
14101 strcpy (obuf, "nop");
14102}
14103
14104static void
14105NOP_Fixup2 (int bytemode, int sizeflag)
14106{
8b38ad71
L
14107 if ((prefixes & PREFIX_DATA) != 0
14108 || (rex != 0
14109 && rex != 0x48
14110 && address_mode == mode_64bit))
46e883c5 14111 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
14112}
14113
84037f8c 14114static const char *const Suffix3DNow[] = {
252b5132
RH
14115/* 00 */ NULL, NULL, NULL, NULL,
14116/* 04 */ NULL, NULL, NULL, NULL,
14117/* 08 */ NULL, NULL, NULL, NULL,
9e525108 14118/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
14119/* 10 */ NULL, NULL, NULL, NULL,
14120/* 14 */ NULL, NULL, NULL, NULL,
14121/* 18 */ NULL, NULL, NULL, NULL,
9e525108 14122/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
14123/* 20 */ NULL, NULL, NULL, NULL,
14124/* 24 */ NULL, NULL, NULL, NULL,
14125/* 28 */ NULL, NULL, NULL, NULL,
14126/* 2C */ NULL, NULL, NULL, NULL,
14127/* 30 */ NULL, NULL, NULL, NULL,
14128/* 34 */ NULL, NULL, NULL, NULL,
14129/* 38 */ NULL, NULL, NULL, NULL,
14130/* 3C */ NULL, NULL, NULL, NULL,
14131/* 40 */ NULL, NULL, NULL, NULL,
14132/* 44 */ NULL, NULL, NULL, NULL,
14133/* 48 */ NULL, NULL, NULL, NULL,
14134/* 4C */ NULL, NULL, NULL, NULL,
14135/* 50 */ NULL, NULL, NULL, NULL,
14136/* 54 */ NULL, NULL, NULL, NULL,
14137/* 58 */ NULL, NULL, NULL, NULL,
14138/* 5C */ NULL, NULL, NULL, NULL,
14139/* 60 */ NULL, NULL, NULL, NULL,
14140/* 64 */ NULL, NULL, NULL, NULL,
14141/* 68 */ NULL, NULL, NULL, NULL,
14142/* 6C */ NULL, NULL, NULL, NULL,
14143/* 70 */ NULL, NULL, NULL, NULL,
14144/* 74 */ NULL, NULL, NULL, NULL,
14145/* 78 */ NULL, NULL, NULL, NULL,
14146/* 7C */ NULL, NULL, NULL, NULL,
14147/* 80 */ NULL, NULL, NULL, NULL,
14148/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
14149/* 88 */ NULL, NULL, "pfnacc", NULL,
14150/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
14151/* 90 */ "pfcmpge", NULL, NULL, NULL,
14152/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14153/* 98 */ NULL, NULL, "pfsub", NULL,
14154/* 9C */ NULL, NULL, "pfadd", NULL,
14155/* A0 */ "pfcmpgt", NULL, NULL, NULL,
14156/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14157/* A8 */ NULL, NULL, "pfsubr", NULL,
14158/* AC */ NULL, NULL, "pfacc", NULL,
14159/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 14160/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 14161/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
14162/* BC */ NULL, NULL, NULL, "pavgusb",
14163/* C0 */ NULL, NULL, NULL, NULL,
14164/* C4 */ NULL, NULL, NULL, NULL,
14165/* C8 */ NULL, NULL, NULL, NULL,
14166/* CC */ NULL, NULL, NULL, NULL,
14167/* D0 */ NULL, NULL, NULL, NULL,
14168/* D4 */ NULL, NULL, NULL, NULL,
14169/* D8 */ NULL, NULL, NULL, NULL,
14170/* DC */ NULL, NULL, NULL, NULL,
14171/* E0 */ NULL, NULL, NULL, NULL,
14172/* E4 */ NULL, NULL, NULL, NULL,
14173/* E8 */ NULL, NULL, NULL, NULL,
14174/* EC */ NULL, NULL, NULL, NULL,
14175/* F0 */ NULL, NULL, NULL, NULL,
14176/* F4 */ NULL, NULL, NULL, NULL,
14177/* F8 */ NULL, NULL, NULL, NULL,
14178/* FC */ NULL, NULL, NULL, NULL,
14179};
14180
14181static void
26ca5450 14182OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
14183{
14184 const char *mnemonic;
14185
14186 FETCH_DATA (the_info, codep + 1);
14187 /* AMD 3DNow! instructions are specified by an opcode suffix in the
14188 place where an 8-bit immediate would normally go. ie. the last
14189 byte of the instruction. */
ea397f5b 14190 obufp = mnemonicendp;
c608c12e 14191 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 14192 if (mnemonic)
2da11e11 14193 oappend (mnemonic);
252b5132
RH
14194 else
14195 {
14196 /* Since a variable sized modrm/sib chunk is between the start
14197 of the opcode (0x0f0f) and the opcode suffix, we need to do
14198 all the modrm processing first, and don't know until now that
14199 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
14200 op_out[0][0] = '\0';
14201 op_out[1][0] = '\0';
6608db57 14202 BadOp ();
252b5132 14203 }
ea397f5b 14204 mnemonicendp = obufp;
252b5132 14205}
c608c12e 14206
ea397f5b
L
14207static struct op simd_cmp_op[] =
14208{
14209 { STRING_COMMA_LEN ("eq") },
14210 { STRING_COMMA_LEN ("lt") },
14211 { STRING_COMMA_LEN ("le") },
14212 { STRING_COMMA_LEN ("unord") },
14213 { STRING_COMMA_LEN ("neq") },
14214 { STRING_COMMA_LEN ("nlt") },
14215 { STRING_COMMA_LEN ("nle") },
14216 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
14217};
14218
14219static void
ad19981d 14220CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
14221{
14222 unsigned int cmp_type;
14223
14224 FETCH_DATA (the_info, codep + 1);
14225 cmp_type = *codep++ & 0xff;
c0f3af97 14226 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 14227 {
ad19981d 14228 char suffix [3];
ea397f5b 14229 char *p = mnemonicendp - 2;
ad19981d
L
14230 suffix[0] = p[0];
14231 suffix[1] = p[1];
14232 suffix[2] = '\0';
ea397f5b
L
14233 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14234 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
14235 }
14236 else
14237 {
ad19981d
L
14238 /* We have a reserved extension byte. Output it directly. */
14239 scratchbuf[0] = '$';
14240 print_operand_value (scratchbuf + 1, 1, cmp_type);
14241 oappend (scratchbuf + intel_syntax);
14242 scratchbuf[0] = '\0';
c608c12e
AM
14243 }
14244}
14245
ca164297 14246static void
b844680a
L
14247OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14248 int sizeflag ATTRIBUTE_UNUSED)
14249{
14250 /* mwait %eax,%ecx */
14251 if (!intel_syntax)
14252 {
14253 const char **names = (address_mode == mode_64bit
14254 ? names64 : names32);
14255 strcpy (op_out[0], names[0]);
14256 strcpy (op_out[1], names[1]);
14257 two_source_ops = 1;
14258 }
14259 /* Skip mod/rm byte. */
14260 MODRM_CHECK;
14261 codep++;
14262}
14263
14264static void
14265OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14266 int sizeflag ATTRIBUTE_UNUSED)
ca164297 14267{
b844680a
L
14268 /* monitor %eax,%ecx,%edx" */
14269 if (!intel_syntax)
ca164297 14270 {
b844680a 14271 const char **op1_names;
cb712a9e
L
14272 const char **names = (address_mode == mode_64bit
14273 ? names64 : names32);
1d9f512f 14274
b844680a
L
14275 if (!(prefixes & PREFIX_ADDR))
14276 op1_names = (address_mode == mode_16bit
14277 ? names16 : names);
ca164297
L
14278 else
14279 {
b844680a 14280 /* Remove "addr16/addr32". */
f16cd0d5 14281 all_prefixes[last_addr_prefix] = 0;
b844680a
L
14282 op1_names = (address_mode != mode_32bit
14283 ? names32 : names16);
14284 used_prefixes |= PREFIX_ADDR;
ca164297 14285 }
b844680a
L
14286 strcpy (op_out[0], op1_names[0]);
14287 strcpy (op_out[1], names[1]);
14288 strcpy (op_out[2], names[2]);
14289 two_source_ops = 1;
ca164297 14290 }
b844680a
L
14291 /* Skip mod/rm byte. */
14292 MODRM_CHECK;
14293 codep++;
30123838
JB
14294}
14295
6608db57
KH
14296static void
14297BadOp (void)
2da11e11 14298{
6608db57
KH
14299 /* Throw away prefixes and 1st. opcode byte. */
14300 codep = insn_codep + 1;
2da11e11
AM
14301 oappend ("(bad)");
14302}
4cc91dba 14303
35c52694
L
14304static void
14305REP_Fixup (int bytemode, int sizeflag)
14306{
14307 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14308 lods and stos. */
35c52694 14309 if (prefixes & PREFIX_REPZ)
f16cd0d5 14310 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
14311
14312 switch (bytemode)
14313 {
14314 case al_reg:
14315 case eAX_reg:
14316 case indir_dx_reg:
14317 OP_IMREG (bytemode, sizeflag);
14318 break;
14319 case eDI_reg:
14320 OP_ESreg (bytemode, sizeflag);
14321 break;
14322 case eSI_reg:
14323 OP_DSreg (bytemode, sizeflag);
14324 break;
14325 default:
14326 abort ();
14327 break;
14328 }
14329}
f5804c90
L
14330
14331static void
14332CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14333{
161a04f6
L
14334 USED_REX (REX_W);
14335 if (rex & REX_W)
f5804c90
L
14336 {
14337 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
14338 char *p = mnemonicendp - 2;
14339 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 14340 bytemode = o_mode;
f5804c90
L
14341 }
14342 OP_M (bytemode, sizeflag);
14343}
42903f7f
L
14344
14345static void
14346XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14347{
b9733481
L
14348 const char **names;
14349
c0f3af97
L
14350 if (need_vex)
14351 {
14352 switch (vex.length)
14353 {
14354 case 128:
b9733481 14355 names = names_xmm;
c0f3af97
L
14356 break;
14357 case 256:
b9733481 14358 names = names_ymm;
c0f3af97
L
14359 break;
14360 default:
14361 abort ();
14362 }
14363 }
14364 else
b9733481
L
14365 names = names_xmm;
14366 oappend (names[reg]);
42903f7f 14367}
381d071f
L
14368
14369static void
14370CRC32_Fixup (int bytemode, int sizeflag)
14371{
14372 /* Add proper suffix to "crc32". */
ea397f5b 14373 char *p = mnemonicendp;
381d071f
L
14374
14375 switch (bytemode)
14376 {
14377 case b_mode:
20592a94 14378 if (intel_syntax)
ea397f5b 14379 goto skip;
20592a94 14380
381d071f
L
14381 *p++ = 'b';
14382 break;
14383 case v_mode:
20592a94 14384 if (intel_syntax)
ea397f5b 14385 goto skip;
20592a94 14386
381d071f
L
14387 USED_REX (REX_W);
14388 if (rex & REX_W)
14389 *p++ = 'q';
f16cd0d5
L
14390 else
14391 {
14392 if (sizeflag & DFLAG)
14393 *p++ = 'l';
14394 else
14395 *p++ = 'w';
14396 used_prefixes |= (prefixes & PREFIX_DATA);
14397 }
381d071f
L
14398 break;
14399 default:
14400 oappend (INTERNAL_DISASSEMBLER_ERROR);
14401 break;
14402 }
ea397f5b 14403 mnemonicendp = p;
381d071f
L
14404 *p = '\0';
14405
ea397f5b 14406skip:
381d071f
L
14407 if (modrm.mod == 3)
14408 {
14409 int add;
14410
14411 /* Skip mod/rm byte. */
14412 MODRM_CHECK;
14413 codep++;
14414
14415 USED_REX (REX_B);
14416 add = (rex & REX_B) ? 8 : 0;
14417 if (bytemode == b_mode)
14418 {
14419 USED_REX (0);
14420 if (rex)
14421 oappend (names8rex[modrm.rm + add]);
14422 else
14423 oappend (names8[modrm.rm + add]);
14424 }
14425 else
14426 {
14427 USED_REX (REX_W);
14428 if (rex & REX_W)
14429 oappend (names64[modrm.rm + add]);
14430 else if ((prefixes & PREFIX_DATA))
14431 oappend (names16[modrm.rm + add]);
14432 else
14433 oappend (names32[modrm.rm + add]);
14434 }
14435 }
14436 else
9344ff29 14437 OP_E (bytemode, sizeflag);
381d071f 14438}
85f10a01 14439
eacc9c89
L
14440static void
14441FXSAVE_Fixup (int bytemode, int sizeflag)
14442{
14443 /* Add proper suffix to "fxsave" and "fxrstor". */
14444 USED_REX (REX_W);
14445 if (rex & REX_W)
14446 {
14447 char *p = mnemonicendp;
14448 *p++ = '6';
14449 *p++ = '4';
14450 *p = '\0';
14451 mnemonicendp = p;
14452 }
14453 OP_M (bytemode, sizeflag);
14454}
14455
c0f3af97
L
14456/* Display the destination register operand for instructions with
14457 VEX. */
14458
14459static void
14460OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14461{
539f890d 14462 int reg;
b9733481
L
14463 const char **names;
14464
c0f3af97
L
14465 if (!need_vex)
14466 abort ();
14467
14468 if (!need_vex_reg)
14469 return;
14470
539f890d
L
14471 reg = vex.register_specifier;
14472 if (bytemode == vex_scalar_mode)
14473 {
14474 oappend (names_xmm[reg]);
14475 return;
14476 }
14477
c0f3af97
L
14478 switch (vex.length)
14479 {
14480 case 128:
14481 switch (bytemode)
14482 {
14483 case vex_mode:
14484 case vex128_mode:
14485 break;
14486 default:
14487 abort ();
14488 return;
14489 }
14490
b9733481 14491 names = names_xmm;
c0f3af97
L
14492 break;
14493 case 256:
14494 switch (bytemode)
14495 {
14496 case vex_mode:
14497 case vex256_mode:
14498 break;
14499 default:
14500 abort ();
14501 return;
14502 }
14503
b9733481 14504 names = names_ymm;
c0f3af97
L
14505 break;
14506 default:
14507 abort ();
14508 break;
14509 }
539f890d 14510 oappend (names[reg]);
c0f3af97
L
14511}
14512
922d8de8
DR
14513/* Get the VEX immediate byte without moving codep. */
14514
14515static unsigned char
ccc5981b 14516get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
14517{
14518 int bytes_before_imm = 0;
14519
922d8de8
DR
14520 if (modrm.mod != 3)
14521 {
14522 /* There are SIB/displacement bytes. */
14523 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
02e647f9 14524 {
922d8de8 14525 /* 32/64 bit address mode */
02e647f9 14526 int base = modrm.rm;
922d8de8
DR
14527
14528 /* Check SIB byte. */
02e647f9
SP
14529 if (base == 4)
14530 {
14531 FETCH_DATA (the_info, codep + 1);
14532 base = *codep & 7;
14533 /* When decoding the third source, don't increase
14534 bytes_before_imm as this has already been incremented
14535 by one in OP_E_memory while decoding the second
14536 source operand. */
ccc5981b
SP
14537 if (opnum == 0)
14538 bytes_before_imm++;
02e647f9
SP
14539 }
14540
14541 /* Don't increase bytes_before_imm when decoding the third source,
14542 it has already been incremented by OP_E_memory while decoding
14543 the second source operand. */
14544 if (opnum == 0)
14545 {
14546 switch (modrm.mod)
14547 {
14548 case 0:
14549 /* When modrm.rm == 5 or modrm.rm == 4 and base in
14550 SIB == 5, there is a 4 byte displacement. */
14551 if (base != 5)
14552 /* No displacement. */
14553 break;
14554 case 2:
14555 /* 4 byte displacement. */
14556 bytes_before_imm += 4;
14557 break;
14558 case 1:
14559 /* 1 byte displacement. */
14560 bytes_before_imm++;
14561 break;
14562 }
14563 }
14564 }
922d8de8 14565 else
02e647f9
SP
14566 {
14567 /* 16 bit address mode */
14568 /* Don't increase bytes_before_imm when decoding the third source,
14569 it has already been incremented by OP_E_memory while decoding
14570 the second source operand. */
14571 if (opnum == 0)
14572 {
14573 switch (modrm.mod)
14574 {
14575 case 0:
14576 /* When modrm.rm == 6, there is a 2 byte displacement. */
14577 if (modrm.rm != 6)
14578 /* No displacement. */
14579 break;
14580 case 2:
14581 /* 2 byte displacement. */
14582 bytes_before_imm += 2;
14583 break;
14584 case 1:
14585 /* 1 byte displacement: when decoding the third source,
14586 don't increase bytes_before_imm as this has already
14587 been incremented by one in OP_E_memory while decoding
14588 the second source operand. */
14589 if (opnum == 0)
14590 bytes_before_imm++;
ccc5981b 14591
02e647f9
SP
14592 break;
14593 }
922d8de8
DR
14594 }
14595 }
14596 }
14597
14598 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14599 return codep [bytes_before_imm];
14600}
14601
14602static void
14603OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14604{
b9733481
L
14605 const char **names;
14606
922d8de8
DR
14607 if (reg == -1 && modrm.mod != 3)
14608 {
14609 OP_E_memory (bytemode, sizeflag);
14610 return;
14611 }
14612 else
14613 {
14614 if (reg == -1)
14615 {
14616 reg = modrm.rm;
14617 USED_REX (REX_B);
14618 if (rex & REX_B)
14619 reg += 8;
14620 }
14621 else if (reg > 7 && address_mode != mode_64bit)
14622 BadOp ();
14623 }
14624
14625 switch (vex.length)
14626 {
14627 case 128:
b9733481 14628 names = names_xmm;
922d8de8
DR
14629 break;
14630 case 256:
b9733481 14631 names = names_ymm;
922d8de8
DR
14632 break;
14633 default:
14634 abort ();
14635 }
b9733481 14636 oappend (names[reg]);
922d8de8
DR
14637}
14638
a683cc34
SP
14639static void
14640OP_EX_VexImmW (int bytemode, int sizeflag)
14641{
14642 int reg = -1;
14643 static unsigned char vex_imm8;
14644
14645 if (vex_w_done == 0)
14646 {
14647 vex_w_done = 1;
14648
14649 /* Skip mod/rm byte. */
14650 MODRM_CHECK;
14651 codep++;
14652
14653 vex_imm8 = get_vex_imm8 (sizeflag, 0);
14654
14655 if (vex.w)
14656 reg = vex_imm8 >> 4;
14657
14658 OP_EX_VexReg (bytemode, sizeflag, reg);
14659 }
14660 else if (vex_w_done == 1)
14661 {
14662 vex_w_done = 2;
14663
14664 if (!vex.w)
14665 reg = vex_imm8 >> 4;
14666
14667 OP_EX_VexReg (bytemode, sizeflag, reg);
14668 }
14669 else
14670 {
14671 /* Output the imm8 directly. */
14672 scratchbuf[0] = '$';
14673 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14674 oappend (scratchbuf + intel_syntax);
14675 scratchbuf[0] = '\0';
14676 codep++;
14677 }
14678}
14679
5dd85c99
SP
14680static void
14681OP_Vex_2src (int bytemode, int sizeflag)
14682{
14683 if (modrm.mod == 3)
14684 {
b9733481 14685 int reg = modrm.rm;
5dd85c99 14686 USED_REX (REX_B);
b9733481
L
14687 if (rex & REX_B)
14688 reg += 8;
14689 oappend (names_xmm[reg]);
5dd85c99
SP
14690 }
14691 else
14692 {
14693 if (intel_syntax
14694 && (bytemode == v_mode || bytemode == v_swap_mode))
14695 {
14696 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14697 used_prefixes |= (prefixes & PREFIX_DATA);
14698 }
14699 OP_E (bytemode, sizeflag);
14700 }
14701}
14702
14703static void
14704OP_Vex_2src_1 (int bytemode, int sizeflag)
14705{
14706 if (modrm.mod == 3)
14707 {
14708 /* Skip mod/rm byte. */
14709 MODRM_CHECK;
14710 codep++;
14711 }
14712
14713 if (vex.w)
b9733481 14714 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14715 else
14716 OP_Vex_2src (bytemode, sizeflag);
14717}
14718
14719static void
14720OP_Vex_2src_2 (int bytemode, int sizeflag)
14721{
14722 if (vex.w)
14723 OP_Vex_2src (bytemode, sizeflag);
14724 else
b9733481 14725 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
14726}
14727
922d8de8
DR
14728static void
14729OP_EX_VexW (int bytemode, int sizeflag)
14730{
14731 int reg = -1;
14732
14733 if (!vex_w_done)
14734 {
14735 vex_w_done = 1;
41effecb
SP
14736
14737 /* Skip mod/rm byte. */
14738 MODRM_CHECK;
14739 codep++;
14740
922d8de8 14741 if (vex.w)
ccc5981b 14742 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
14743 }
14744 else
14745 {
14746 if (!vex.w)
ccc5981b 14747 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
14748 }
14749
14750 OP_EX_VexReg (bytemode, sizeflag, reg);
14751}
14752
922d8de8
DR
14753static void
14754VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
14755 int sizeflag ATTRIBUTE_UNUSED)
14756{
14757 /* Skip the immediate byte and check for invalid bits. */
14758 FETCH_DATA (the_info, codep + 1);
14759 if (*codep++ & 0xf)
14760 BadOp ();
14761}
14762
c0f3af97
L
14763static void
14764OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14765{
14766 int reg;
b9733481
L
14767 const char **names;
14768
c0f3af97
L
14769 FETCH_DATA (the_info, codep + 1);
14770 reg = *codep++;
14771
14772 if (bytemode != x_mode)
14773 abort ();
14774
14775 if (reg & 0xf)
14776 BadOp ();
14777
14778 reg >>= 4;
dae39acc
L
14779 if (reg > 7 && address_mode != mode_64bit)
14780 BadOp ();
14781
c0f3af97
L
14782 switch (vex.length)
14783 {
14784 case 128:
b9733481 14785 names = names_xmm;
c0f3af97
L
14786 break;
14787 case 256:
b9733481 14788 names = names_ymm;
c0f3af97
L
14789 break;
14790 default:
14791 abort ();
14792 }
b9733481 14793 oappend (names[reg]);
c0f3af97
L
14794}
14795
922d8de8
DR
14796static void
14797OP_XMM_VexW (int bytemode, int sizeflag)
14798{
14799 /* Turn off the REX.W bit since it is used for swapping operands
14800 now. */
14801 rex &= ~REX_W;
14802 OP_XMM (bytemode, sizeflag);
14803}
14804
c0f3af97
L
14805static void
14806OP_EX_Vex (int bytemode, int sizeflag)
14807{
14808 if (modrm.mod != 3)
14809 {
14810 if (vex.register_specifier != 0)
14811 BadOp ();
14812 need_vex_reg = 0;
14813 }
14814 OP_EX (bytemode, sizeflag);
14815}
14816
14817static void
14818OP_XMM_Vex (int bytemode, int sizeflag)
14819{
14820 if (modrm.mod != 3)
14821 {
14822 if (vex.register_specifier != 0)
14823 BadOp ();
14824 need_vex_reg = 0;
14825 }
14826 OP_XMM (bytemode, sizeflag);
14827}
14828
14829static void
14830VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14831{
14832 switch (vex.length)
14833 {
14834 case 128:
ea397f5b 14835 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
14836 break;
14837 case 256:
ea397f5b 14838 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
14839 break;
14840 default:
14841 abort ();
14842 }
14843}
14844
ea397f5b
L
14845static struct op vex_cmp_op[] =
14846{
14847 { STRING_COMMA_LEN ("eq") },
14848 { STRING_COMMA_LEN ("lt") },
14849 { STRING_COMMA_LEN ("le") },
14850 { STRING_COMMA_LEN ("unord") },
14851 { STRING_COMMA_LEN ("neq") },
14852 { STRING_COMMA_LEN ("nlt") },
14853 { STRING_COMMA_LEN ("nle") },
14854 { STRING_COMMA_LEN ("ord") },
14855 { STRING_COMMA_LEN ("eq_uq") },
14856 { STRING_COMMA_LEN ("nge") },
14857 { STRING_COMMA_LEN ("ngt") },
14858 { STRING_COMMA_LEN ("false") },
14859 { STRING_COMMA_LEN ("neq_oq") },
14860 { STRING_COMMA_LEN ("ge") },
14861 { STRING_COMMA_LEN ("gt") },
14862 { STRING_COMMA_LEN ("true") },
14863 { STRING_COMMA_LEN ("eq_os") },
14864 { STRING_COMMA_LEN ("lt_oq") },
14865 { STRING_COMMA_LEN ("le_oq") },
14866 { STRING_COMMA_LEN ("unord_s") },
14867 { STRING_COMMA_LEN ("neq_us") },
14868 { STRING_COMMA_LEN ("nlt_uq") },
14869 { STRING_COMMA_LEN ("nle_uq") },
14870 { STRING_COMMA_LEN ("ord_s") },
14871 { STRING_COMMA_LEN ("eq_us") },
14872 { STRING_COMMA_LEN ("nge_uq") },
14873 { STRING_COMMA_LEN ("ngt_uq") },
14874 { STRING_COMMA_LEN ("false_os") },
14875 { STRING_COMMA_LEN ("neq_os") },
14876 { STRING_COMMA_LEN ("ge_oq") },
14877 { STRING_COMMA_LEN ("gt_oq") },
14878 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
14879};
14880
14881static void
14882VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14883{
14884 unsigned int cmp_type;
14885
14886 FETCH_DATA (the_info, codep + 1);
14887 cmp_type = *codep++ & 0xff;
14888 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
14889 {
14890 char suffix [3];
ea397f5b 14891 char *p = mnemonicendp - 2;
c0f3af97
L
14892 suffix[0] = p[0];
14893 suffix[1] = p[1];
14894 suffix[2] = '\0';
ea397f5b
L
14895 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
14896 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
14897 }
14898 else
14899 {
14900 /* We have a reserved extension byte. Output it directly. */
14901 scratchbuf[0] = '$';
14902 print_operand_value (scratchbuf + 1, 1, cmp_type);
14903 oappend (scratchbuf + intel_syntax);
14904 scratchbuf[0] = '\0';
14905 }
14906}
14907
ea397f5b
L
14908static const struct op pclmul_op[] =
14909{
14910 { STRING_COMMA_LEN ("lql") },
14911 { STRING_COMMA_LEN ("hql") },
14912 { STRING_COMMA_LEN ("lqh") },
14913 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
14914};
14915
14916static void
14917PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
14918 int sizeflag ATTRIBUTE_UNUSED)
14919{
14920 unsigned int pclmul_type;
14921
14922 FETCH_DATA (the_info, codep + 1);
14923 pclmul_type = *codep++ & 0xff;
14924 switch (pclmul_type)
14925 {
14926 case 0x10:
14927 pclmul_type = 2;
14928 break;
14929 case 0x11:
14930 pclmul_type = 3;
14931 break;
14932 default:
14933 break;
14934 }
14935 if (pclmul_type < ARRAY_SIZE (pclmul_op))
14936 {
14937 char suffix [4];
ea397f5b 14938 char *p = mnemonicendp - 3;
c0f3af97
L
14939 suffix[0] = p[0];
14940 suffix[1] = p[1];
14941 suffix[2] = p[2];
14942 suffix[3] = '\0';
ea397f5b
L
14943 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
14944 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
14945 }
14946 else
14947 {
14948 /* We have a reserved extension byte. Output it directly. */
14949 scratchbuf[0] = '$';
14950 print_operand_value (scratchbuf + 1, 1, pclmul_type);
14951 oappend (scratchbuf + intel_syntax);
14952 scratchbuf[0] = '\0';
14953 }
14954}
14955
f1f8f695
L
14956static void
14957MOVBE_Fixup (int bytemode, int sizeflag)
14958{
14959 /* Add proper suffix to "movbe". */
ea397f5b 14960 char *p = mnemonicendp;
f1f8f695
L
14961
14962 switch (bytemode)
14963 {
14964 case v_mode:
14965 if (intel_syntax)
ea397f5b 14966 goto skip;
f1f8f695
L
14967
14968 USED_REX (REX_W);
14969 if (sizeflag & SUFFIX_ALWAYS)
14970 {
14971 if (rex & REX_W)
14972 *p++ = 'q';
f1f8f695 14973 else
f16cd0d5
L
14974 {
14975 if (sizeflag & DFLAG)
14976 *p++ = 'l';
14977 else
14978 *p++ = 'w';
14979 used_prefixes |= (prefixes & PREFIX_DATA);
14980 }
f1f8f695 14981 }
f1f8f695
L
14982 break;
14983 default:
14984 oappend (INTERNAL_DISASSEMBLER_ERROR);
14985 break;
14986 }
ea397f5b 14987 mnemonicendp = p;
f1f8f695
L
14988 *p = '\0';
14989
ea397f5b 14990skip:
f1f8f695
L
14991 OP_M (bytemode, sizeflag);
14992}
f88c9eb0
SP
14993
14994static void
14995OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14996{
14997 int reg;
14998 const char **names;
14999
15000 /* Skip mod/rm byte. */
15001 MODRM_CHECK;
15002 codep++;
15003
15004 if (vex.w)
15005 names = names64;
f88c9eb0 15006 else
ce7d077e 15007 names = names32;
f88c9eb0
SP
15008
15009 reg = modrm.rm;
15010 USED_REX (REX_B);
15011 if (rex & REX_B)
15012 reg += 8;
15013
15014 oappend (names[reg]);
15015}
15016
15017static void
15018OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15019{
15020 const char **names;
15021
15022 if (vex.w)
15023 names = names64;
f88c9eb0 15024 else
ce7d077e 15025 names = names32;
f88c9eb0
SP
15026
15027 oappend (names[vex.register_specifier]);
15028}
15029
This page took 1.481923 seconds and 4 git commands to generate.