daily update
[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,
7bb15c6f 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
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);
43234a1e 97static void OP_Rounding (int, int);
c0f3af97
L
98static void OP_REG_VexI4 (int, int);
99static void PCLMUL_Fixup (int, int);
922d8de8 100static void VEXI4_Fixup (int, int);
c0f3af97
L
101static void VZERO_Fixup (int, int);
102static void VCMP_Fixup (int, int);
43234a1e 103static void VPCMP_Fixup (int, int);
cc0ec051 104static void OP_0f07 (int, int);
b844680a
L
105static void OP_Monitor (int, int);
106static void OP_Mwait (int, int);
46e883c5
L
107static void NOP_Fixup1 (int, int);
108static void NOP_Fixup2 (int, int);
26ca5450 109static void OP_3DNowSuffix (int, int);
ad19981d 110static void CMP_Fixup (int, int);
26ca5450 111static void BadOp (void);
35c52694 112static void REP_Fixup (int, int);
7e8b059b 113static void BND_Fixup (int, int);
42164a71
L
114static void HLE_Fixup1 (int, int);
115static void HLE_Fixup2 (int, int);
116static void HLE_Fixup3 (int, int);
f5804c90 117static void CMPXCHG8B_Fixup (int, int);
42903f7f 118static void XMM_Fixup (int, int);
381d071f 119static void CRC32_Fixup (int, int);
eacc9c89 120static void FXSAVE_Fixup (int, int);
f88c9eb0
SP
121static void OP_LWPCB_E (int, int);
122static void OP_LWP_E (int, int);
5dd85c99
SP
123static void OP_Vex_2src_1 (int, int);
124static void OP_Vex_2src_2 (int, int);
c1e679ec 125
f1f8f695 126static void MOVBE_Fixup (int, int);
252b5132 127
43234a1e
L
128static void OP_Mask (int, int);
129
6608db57 130struct dis_private {
252b5132
RH
131 /* Points to first byte not fetched. */
132 bfd_byte *max_fetched;
0b1cf022 133 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 134 bfd_vma insn_start;
e396998b 135 int orig_sizeflag;
252b5132
RH
136 jmp_buf bailout;
137};
138
cb712a9e
L
139enum address_mode
140{
141 mode_16bit,
142 mode_32bit,
143 mode_64bit
144};
145
146enum address_mode address_mode;
52b15da3 147
5076851f
ILT
148/* Flags for the prefixes for the current instruction. See below. */
149static int prefixes;
150
52b15da3
JH
151/* REX prefix the current instruction. See below. */
152static int rex;
153/* Bits of REX we've already used. */
154static int rex_used;
d869730d 155/* REX bits in original REX prefix ignored. */
c0f3af97 156static int rex_ignored;
52b15da3
JH
157/* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161#define USED_REX(value) \
162 { \
163 if (value) \
161a04f6
L
164 { \
165 if ((rex & value)) \
166 rex_used |= (value) | REX_OPCODE; \
167 } \
52b15da3 168 else \
161a04f6 169 rex_used |= REX_OPCODE; \
52b15da3
JH
170 }
171
7d421014
ILT
172/* Flags for prefixes which we somehow handled when printing the
173 current instruction. */
174static int used_prefixes;
175
5076851f
ILT
176/* Flags stored in PREFIXES. */
177#define PREFIX_REPZ 1
178#define PREFIX_REPNZ 2
179#define PREFIX_LOCK 4
180#define PREFIX_CS 8
181#define PREFIX_SS 0x10
182#define PREFIX_DS 0x20
183#define PREFIX_ES 0x40
184#define PREFIX_FS 0x80
185#define PREFIX_GS 0x100
186#define PREFIX_DATA 0x200
187#define PREFIX_ADDR 0x400
188#define PREFIX_FWAIT 0x800
189
252b5132
RH
190/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 on error. */
193#define FETCH_DATA(info, addr) \
6608db57 194 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
195 ? 1 : fetch_data ((info), (addr)))
196
197static int
26ca5450 198fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
199{
200 int status;
6608db57 201 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
202 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203
0b1cf022 204 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
205 status = (*info->read_memory_func) (start,
206 priv->max_fetched,
207 addr - priv->max_fetched,
208 info);
209 else
210 status = -1;
252b5132
RH
211 if (status != 0)
212 {
7d421014 213 /* If we did manage to read at least one byte, then
db6eb5be
AM
214 print_insn_i386 will do something sensible. Otherwise, print
215 an error. We do that here because this is where we know
216 STATUS. */
7d421014 217 if (priv->max_fetched == priv->the_buffer)
5076851f 218 (*info->memory_error_func) (status, start, info);
252b5132
RH
219 longjmp (priv->bailout, 1);
220 }
221 else
222 priv->max_fetched = addr;
223 return 1;
224}
225
ce518a5f 226#define XX { NULL, 0 }
592d1631 227#define Bad_Opcode NULL, { { NULL, 0 } }
ce518a5f
L
228
229#define Eb { OP_E, b_mode }
7e8b059b 230#define Ebnd { OP_E, bnd_mode }
b6169b20 231#define EbS { OP_E, b_swap_mode }
ce518a5f 232#define Ev { OP_E, v_mode }
7e8b059b 233#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 234#define EvS { OP_E, v_swap_mode }
ce518a5f
L
235#define Ed { OP_E, d_mode }
236#define Edq { OP_E, dq_mode }
237#define Edqw { OP_E, dqw_mode }
42903f7f
L
238#define Edqb { OP_E, dqb_mode }
239#define Edqd { OP_E, dqd_mode }
09335d05 240#define Eq { OP_E, q_mode }
ce518a5f
L
241#define indirEv { OP_indirE, stack_v_mode }
242#define indirEp { OP_indirE, f_mode }
243#define stackEv { OP_E, stack_v_mode }
244#define Em { OP_E, m_mode }
245#define Ew { OP_E, w_mode }
246#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 247#define Ma { OP_M, a_mode }
b844680a 248#define Mb { OP_M, b_mode }
d9a5e5e5 249#define Md { OP_M, d_mode }
f1f8f695 250#define Mo { OP_M, o_mode }
ce518a5f
L
251#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
252#define Mq { OP_M, q_mode }
4ee52178 253#define Mx { OP_M, x_mode }
c0f3af97 254#define Mxmm { OP_M, xmm_mode }
ce518a5f 255#define Gb { OP_G, b_mode }
7e8b059b 256#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
257#define Gv { OP_G, v_mode }
258#define Gd { OP_G, d_mode }
259#define Gdq { OP_G, dq_mode }
260#define Gm { OP_G, m_mode }
261#define Gw { OP_G, w_mode }
6f74c397 262#define Rd { OP_R, d_mode }
43234a1e 263#define Rdq { OP_R, dq_mode }
6f74c397 264#define Rm { OP_R, m_mode }
ce518a5f
L
265#define Ib { OP_I, b_mode }
266#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 267#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 268#define Iv { OP_I, v_mode }
7bb15c6f 269#define sIv { OP_sI, v_mode }
ce518a5f
L
270#define Iq { OP_I, q_mode }
271#define Iv64 { OP_I64, v_mode }
272#define Iw { OP_I, w_mode }
273#define I1 { OP_I, const_1_mode }
274#define Jb { OP_J, b_mode }
275#define Jv { OP_J, v_mode }
276#define Cm { OP_C, m_mode }
277#define Dm { OP_D, m_mode }
278#define Td { OP_T, d_mode }
b844680a 279#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
280
281#define RMeAX { OP_REG, eAX_reg }
282#define RMeBX { OP_REG, eBX_reg }
283#define RMeCX { OP_REG, eCX_reg }
284#define RMeDX { OP_REG, eDX_reg }
285#define RMeSP { OP_REG, eSP_reg }
286#define RMeBP { OP_REG, eBP_reg }
287#define RMeSI { OP_REG, eSI_reg }
288#define RMeDI { OP_REG, eDI_reg }
289#define RMrAX { OP_REG, rAX_reg }
290#define RMrBX { OP_REG, rBX_reg }
291#define RMrCX { OP_REG, rCX_reg }
292#define RMrDX { OP_REG, rDX_reg }
293#define RMrSP { OP_REG, rSP_reg }
294#define RMrBP { OP_REG, rBP_reg }
295#define RMrSI { OP_REG, rSI_reg }
296#define RMrDI { OP_REG, rDI_reg }
297#define RMAL { OP_REG, al_reg }
ce518a5f
L
298#define RMCL { OP_REG, cl_reg }
299#define RMDL { OP_REG, dl_reg }
300#define RMBL { OP_REG, bl_reg }
301#define RMAH { OP_REG, ah_reg }
302#define RMCH { OP_REG, ch_reg }
303#define RMDH { OP_REG, dh_reg }
304#define RMBH { OP_REG, bh_reg }
305#define RMAX { OP_REG, ax_reg }
306#define RMDX { OP_REG, dx_reg }
307
308#define eAX { OP_IMREG, eAX_reg }
309#define eBX { OP_IMREG, eBX_reg }
310#define eCX { OP_IMREG, eCX_reg }
311#define eDX { OP_IMREG, eDX_reg }
312#define eSP { OP_IMREG, eSP_reg }
313#define eBP { OP_IMREG, eBP_reg }
314#define eSI { OP_IMREG, eSI_reg }
315#define eDI { OP_IMREG, eDI_reg }
316#define AL { OP_IMREG, al_reg }
317#define CL { OP_IMREG, cl_reg }
318#define DL { OP_IMREG, dl_reg }
319#define BL { OP_IMREG, bl_reg }
320#define AH { OP_IMREG, ah_reg }
321#define CH { OP_IMREG, ch_reg }
322#define DH { OP_IMREG, dh_reg }
323#define BH { OP_IMREG, bh_reg }
324#define AX { OP_IMREG, ax_reg }
325#define DX { OP_IMREG, dx_reg }
326#define zAX { OP_IMREG, z_mode_ax_reg }
327#define indirDX { OP_IMREG, indir_dx_reg }
328
329#define Sw { OP_SEG, w_mode }
330#define Sv { OP_SEG, v_mode }
331#define Ap { OP_DIR, 0 }
332#define Ob { OP_OFF64, b_mode }
333#define Ov { OP_OFF64, v_mode }
334#define Xb { OP_DSreg, eSI_reg }
335#define Xv { OP_DSreg, eSI_reg }
336#define Xz { OP_DSreg, eSI_reg }
337#define Yb { OP_ESreg, eDI_reg }
338#define Yv { OP_ESreg, eDI_reg }
339#define DSBX { OP_DSreg, eBX_reg }
340
341#define es { OP_REG, es_reg }
342#define ss { OP_REG, ss_reg }
343#define cs { OP_REG, cs_reg }
344#define ds { OP_REG, ds_reg }
345#define fs { OP_REG, fs_reg }
346#define gs { OP_REG, gs_reg }
347
348#define MX { OP_MMX, 0 }
349#define XM { OP_XMM, 0 }
539f890d 350#define XMScalar { OP_XMM, scalar_mode }
6c30d220 351#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 352#define XMM { OP_XMM, xmm_mode }
43234a1e 353#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 354#define EM { OP_EM, v_mode }
b6169b20 355#define EMS { OP_EM, v_swap_mode }
09a2c6cf 356#define EMd { OP_EM, d_mode }
14051056 357#define EMx { OP_EM, x_mode }
8976381e 358#define EXw { OP_EX, w_mode }
09a2c6cf 359#define EXd { OP_EX, d_mode }
539f890d 360#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 361#define EXdS { OP_EX, d_swap_mode }
43234a1e 362#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 363#define EXq { OP_EX, q_mode }
539f890d
L
364#define EXqScalar { OP_EX, q_scalar_mode }
365#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 366#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 367#define EXx { OP_EX, x_mode }
b6169b20 368#define EXxS { OP_EX, x_swap_mode }
c0f3af97 369#define EXxmm { OP_EX, xmm_mode }
43234a1e 370#define EXymm { OP_EX, ymm_mode }
c0f3af97 371#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 372#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
373#define EXxmm_mb { OP_EX, xmm_mb_mode }
374#define EXxmm_mw { OP_EX, xmm_mw_mode }
375#define EXxmm_md { OP_EX, xmm_md_mode }
376#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 377#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
378#define EXxmmdw { OP_EX, xmmdw_mode }
379#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 380#define EXymmq { OP_EX, ymmq_mode }
0bfee649 381#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 382#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
383#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
384#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
385#define MS { OP_MS, v_mode }
386#define XS { OP_XS, v_mode }
09335d05 387#define EMCq { OP_EMC, q_mode }
ce518a5f 388#define MXC { OP_MXC, 0 }
ce518a5f 389#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 390#define CMP { CMP_Fixup, 0 }
42903f7f 391#define XMM0 { XMM_Fixup, 0 }
eacc9c89 392#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
393#define Vex_2src_1 { OP_Vex_2src_1, 0 }
394#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 395
c0f3af97 396#define Vex { OP_VEX, vex_mode }
539f890d 397#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 398#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
399#define Vex128 { OP_VEX, vex128_mode }
400#define Vex256 { OP_VEX, vex256_mode }
cb21baef 401#define VexGdq { OP_VEX, dq_mode }
922d8de8 402#define VexI4 { VEXI4_Fixup, 0}
c0f3af97 403#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 404#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 405#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 406#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 407#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 408#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
409#define EXVexW { OP_EX_VexW, x_mode }
410#define EXdVexW { OP_EX_VexW, d_mode }
411#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 412#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 413#define XMVex { OP_XMM_Vex, 0 }
539f890d 414#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 415#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
416#define XMVexI4 { OP_REG_VexI4, x_mode }
417#define PCLMUL { PCLMUL_Fixup, 0 }
418#define VZERO { VZERO_Fixup, 0 }
419#define VCMP { VCMP_Fixup, 0 }
43234a1e
L
420#define VPCMP { VPCMP_Fixup, 0 }
421
422#define EXxEVexR { OP_Rounding, evex_rounding_mode }
423#define EXxEVexS { OP_Rounding, evex_sae_mode }
424
425#define XMask { OP_Mask, mask_mode }
426#define MaskG { OP_G, mask_mode }
427#define MaskE { OP_E, mask_mode }
428#define MaskR { OP_R, mask_mode }
429#define MaskVex { OP_VEX, mask_mode }
c0f3af97 430
6c30d220
L
431#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
432#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
433
35c52694 434/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
435#define Xbr { REP_Fixup, eSI_reg }
436#define Xvr { REP_Fixup, eSI_reg }
437#define Ybr { REP_Fixup, eDI_reg }
438#define Yvr { REP_Fixup, eDI_reg }
439#define Yzr { REP_Fixup, eDI_reg }
440#define indirDXr { REP_Fixup, indir_dx_reg }
441#define ALr { REP_Fixup, al_reg }
442#define eAXr { REP_Fixup, eAX_reg }
443
42164a71
L
444/* Used handle HLE prefix for lockable instructions. */
445#define Ebh1 { HLE_Fixup1, b_mode }
446#define Evh1 { HLE_Fixup1, v_mode }
447#define Ebh2 { HLE_Fixup2, b_mode }
448#define Evh2 { HLE_Fixup2, v_mode }
449#define Ebh3 { HLE_Fixup3, b_mode }
450#define Evh3 { HLE_Fixup3, v_mode }
451
7e8b059b
L
452#define BND { BND_Fixup, 0 }
453
ce518a5f
L
454#define cond_jump_flag { NULL, cond_jump_mode }
455#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 456
252b5132 457/* bits in sizeflag */
252b5132 458#define SUFFIX_ALWAYS 4
252b5132
RH
459#define AFLAG 2
460#define DFLAG 1
461
51e7da1b
L
462enum
463{
464 /* byte operand */
465 b_mode = 1,
466 /* byte operand with operand swapped */
3873ba12 467 b_swap_mode,
e3949f17
L
468 /* byte operand, sign extend like 'T' suffix */
469 b_T_mode,
51e7da1b 470 /* operand size depends on prefixes */
3873ba12 471 v_mode,
51e7da1b 472 /* operand size depends on prefixes with operand swapped */
3873ba12 473 v_swap_mode,
51e7da1b 474 /* word operand */
3873ba12 475 w_mode,
51e7da1b 476 /* double word operand */
3873ba12 477 d_mode,
51e7da1b 478 /* double word operand with operand swapped */
3873ba12 479 d_swap_mode,
51e7da1b 480 /* quad word operand */
3873ba12 481 q_mode,
51e7da1b 482 /* quad word operand with operand swapped */
3873ba12 483 q_swap_mode,
51e7da1b 484 /* ten-byte operand */
3873ba12 485 t_mode,
43234a1e
L
486 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
487 broadcast enabled. */
3873ba12 488 x_mode,
43234a1e
L
489 /* Similar to x_mode, but with different EVEX mem shifts. */
490 evex_x_gscat_mode,
491 /* Similar to x_mode, but with disabled broadcast. */
492 evex_x_nobcst_mode,
493 /* Similar to x_mode, but with operands swapped and disabled broadcast
494 in EVEX. */
3873ba12 495 x_swap_mode,
51e7da1b 496 /* 16-byte XMM operand */
3873ba12 497 xmm_mode,
43234a1e
L
498 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
499 memory operand (depending on vector length). Broadcast isn't
500 allowed. */
3873ba12 501 xmmq_mode,
43234a1e
L
502 /* Same as xmmq_mode, but broadcast is allowed. */
503 evex_half_bcst_xmmq_mode,
6c30d220
L
504 /* XMM register or byte memory operand */
505 xmm_mb_mode,
506 /* XMM register or word memory operand */
507 xmm_mw_mode,
508 /* XMM register or double word memory operand */
509 xmm_md_mode,
510 /* XMM register or quad word memory operand */
511 xmm_mq_mode,
43234a1e
L
512 /* XMM register or double/quad word memory operand, depending on
513 VEX.W. */
514 xmm_mdq_mode,
515 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 516 xmmdw_mode,
43234a1e 517 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 518 xmmqd_mode,
43234a1e
L
519 /* 32-byte YMM operand */
520 ymm_mode,
521 /* quad word, ymmword or zmmword memory operand. */
3873ba12 522 ymmq_mode,
6c30d220
L
523 /* 32-byte YMM or 16-byte word operand */
524 ymmxmm_mode,
51e7da1b 525 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 526 m_mode,
51e7da1b 527 /* pair of v_mode operands */
3873ba12
L
528 a_mode,
529 cond_jump_mode,
530 loop_jcxz_mode,
7e8b059b 531 v_bnd_mode,
51e7da1b 532 /* operand size depends on REX prefixes. */
3873ba12 533 dq_mode,
51e7da1b 534 /* registers like dq_mode, memory like w_mode. */
3873ba12 535 dqw_mode,
7e8b059b 536 bnd_mode,
51e7da1b 537 /* 4- or 6-byte pointer operand */
3873ba12
L
538 f_mode,
539 const_1_mode,
51e7da1b 540 /* v_mode for stack-related opcodes. */
3873ba12 541 stack_v_mode,
51e7da1b 542 /* non-quad operand size depends on prefixes */
3873ba12 543 z_mode,
51e7da1b 544 /* 16-byte operand */
3873ba12 545 o_mode,
51e7da1b 546 /* registers like dq_mode, memory like b_mode. */
3873ba12 547 dqb_mode,
51e7da1b 548 /* registers like dq_mode, memory like d_mode. */
3873ba12 549 dqd_mode,
51e7da1b 550 /* normal vex mode */
3873ba12 551 vex_mode,
51e7da1b 552 /* 128bit vex mode */
3873ba12 553 vex128_mode,
51e7da1b 554 /* 256bit vex mode */
3873ba12 555 vex256_mode,
51e7da1b 556 /* operand size depends on the VEX.W bit. */
3873ba12 557 vex_w_dq_mode,
d55ee72f 558
6c30d220
L
559 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
560 vex_vsib_d_w_dq_mode,
561 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
562 vex_vsib_q_w_dq_mode,
563
539f890d
L
564 /* scalar, ignore vector length. */
565 scalar_mode,
566 /* like d_mode, ignore vector length. */
567 d_scalar_mode,
568 /* like d_swap_mode, ignore vector length. */
569 d_scalar_swap_mode,
570 /* like q_mode, ignore vector length. */
571 q_scalar_mode,
572 /* like q_swap_mode, ignore vector length. */
573 q_scalar_swap_mode,
574 /* like vex_mode, ignore vector length. */
575 vex_scalar_mode,
1c480963
L
576 /* like vex_w_dq_mode, ignore vector length. */
577 vex_scalar_w_dq_mode,
539f890d 578
43234a1e
L
579 /* Static rounding. */
580 evex_rounding_mode,
581 /* Supress all exceptions. */
582 evex_sae_mode,
583
584 /* Mask register operand. */
585 mask_mode,
586
3873ba12
L
587 es_reg,
588 cs_reg,
589 ss_reg,
590 ds_reg,
591 fs_reg,
592 gs_reg,
d55ee72f 593
3873ba12
L
594 eAX_reg,
595 eCX_reg,
596 eDX_reg,
597 eBX_reg,
598 eSP_reg,
599 eBP_reg,
600 eSI_reg,
601 eDI_reg,
d55ee72f 602
3873ba12
L
603 al_reg,
604 cl_reg,
605 dl_reg,
606 bl_reg,
607 ah_reg,
608 ch_reg,
609 dh_reg,
610 bh_reg,
d55ee72f 611
3873ba12
L
612 ax_reg,
613 cx_reg,
614 dx_reg,
615 bx_reg,
616 sp_reg,
617 bp_reg,
618 si_reg,
619 di_reg,
d55ee72f 620
3873ba12
L
621 rAX_reg,
622 rCX_reg,
623 rDX_reg,
624 rBX_reg,
625 rSP_reg,
626 rBP_reg,
627 rSI_reg,
628 rDI_reg,
d55ee72f 629
3873ba12
L
630 z_mode_ax_reg,
631 indir_dx_reg
51e7da1b 632};
252b5132 633
51e7da1b
L
634enum
635{
636 FLOATCODE = 1,
3873ba12
L
637 USE_REG_TABLE,
638 USE_MOD_TABLE,
639 USE_RM_TABLE,
640 USE_PREFIX_TABLE,
641 USE_X86_64_TABLE,
642 USE_3BYTE_TABLE,
f88c9eb0 643 USE_XOP_8F_TABLE,
3873ba12
L
644 USE_VEX_C4_TABLE,
645 USE_VEX_C5_TABLE,
9e30b8e0 646 USE_VEX_LEN_TABLE,
43234a1e
L
647 USE_VEX_W_TABLE,
648 USE_EVEX_TABLE
51e7da1b 649};
6439fc28 650
1ceb70f8 651#define FLOAT NULL, { { NULL, FLOATCODE } }
4efba78c 652
4e7d34a6 653#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
1ceb70f8
L
654#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
655#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
656#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
657#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
658#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
659#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
f88c9eb0 660#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
661#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
662#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
663#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 664#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 665#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 666
51e7da1b
L
667enum
668{
669 REG_80 = 0,
3873ba12
L
670 REG_81,
671 REG_82,
672 REG_8F,
673 REG_C0,
674 REG_C1,
675 REG_C6,
676 REG_C7,
677 REG_D0,
678 REG_D1,
679 REG_D2,
680 REG_D3,
681 REG_F6,
682 REG_F7,
683 REG_FE,
684 REG_FF,
685 REG_0F00,
686 REG_0F01,
687 REG_0F0D,
688 REG_0F18,
689 REG_0F71,
690 REG_0F72,
691 REG_0F73,
692 REG_0FA6,
693 REG_0FA7,
694 REG_0FAE,
695 REG_0FBA,
696 REG_0FC7,
592a252b
L
697 REG_VEX_0F71,
698 REG_VEX_0F72,
699 REG_VEX_0F73,
700 REG_VEX_0FAE,
f12dc422 701 REG_VEX_0F38F3,
f88c9eb0 702 REG_XOP_LWPCB,
2a2a0f38
QN
703 REG_XOP_LWP,
704 REG_XOP_TBM_01,
43234a1e
L
705 REG_XOP_TBM_02,
706
707 REG_EVEX_0F72,
708 REG_EVEX_0F73,
709 REG_EVEX_0F38C6,
710 REG_EVEX_0F38C7
51e7da1b 711};
1ceb70f8 712
51e7da1b
L
713enum
714{
715 MOD_8D = 0,
42164a71
L
716 MOD_C6_REG_7,
717 MOD_C7_REG_7,
3873ba12
L
718 MOD_0F01_REG_0,
719 MOD_0F01_REG_1,
720 MOD_0F01_REG_2,
721 MOD_0F01_REG_3,
722 MOD_0F01_REG_7,
723 MOD_0F12_PREFIX_0,
724 MOD_0F13,
725 MOD_0F16_PREFIX_0,
726 MOD_0F17,
727 MOD_0F18_REG_0,
728 MOD_0F18_REG_1,
729 MOD_0F18_REG_2,
730 MOD_0F18_REG_3,
d7189fa5
RM
731 MOD_0F18_REG_4,
732 MOD_0F18_REG_5,
733 MOD_0F18_REG_6,
734 MOD_0F18_REG_7,
7e8b059b
L
735 MOD_0F1A_PREFIX_0,
736 MOD_0F1B_PREFIX_0,
737 MOD_0F1B_PREFIX_1,
3873ba12
L
738 MOD_0F20,
739 MOD_0F21,
740 MOD_0F22,
741 MOD_0F23,
742 MOD_0F24,
743 MOD_0F26,
744 MOD_0F2B_PREFIX_0,
745 MOD_0F2B_PREFIX_1,
746 MOD_0F2B_PREFIX_2,
747 MOD_0F2B_PREFIX_3,
748 MOD_0F51,
749 MOD_0F71_REG_2,
750 MOD_0F71_REG_4,
751 MOD_0F71_REG_6,
752 MOD_0F72_REG_2,
753 MOD_0F72_REG_4,
754 MOD_0F72_REG_6,
755 MOD_0F73_REG_2,
756 MOD_0F73_REG_3,
757 MOD_0F73_REG_6,
758 MOD_0F73_REG_7,
759 MOD_0FAE_REG_0,
760 MOD_0FAE_REG_1,
761 MOD_0FAE_REG_2,
762 MOD_0FAE_REG_3,
763 MOD_0FAE_REG_4,
764 MOD_0FAE_REG_5,
765 MOD_0FAE_REG_6,
766 MOD_0FAE_REG_7,
767 MOD_0FB2,
768 MOD_0FB4,
769 MOD_0FB5,
770 MOD_0FC7_REG_6,
771 MOD_0FC7_REG_7,
772 MOD_0FD7,
773 MOD_0FE7_PREFIX_2,
774 MOD_0FF0_PREFIX_3,
775 MOD_0F382A_PREFIX_2,
776 MOD_62_32BIT,
777 MOD_C4_32BIT,
778 MOD_C5_32BIT,
592a252b
L
779 MOD_VEX_0F12_PREFIX_0,
780 MOD_VEX_0F13,
781 MOD_VEX_0F16_PREFIX_0,
782 MOD_VEX_0F17,
783 MOD_VEX_0F2B,
784 MOD_VEX_0F50,
785 MOD_VEX_0F71_REG_2,
786 MOD_VEX_0F71_REG_4,
787 MOD_VEX_0F71_REG_6,
788 MOD_VEX_0F72_REG_2,
789 MOD_VEX_0F72_REG_4,
790 MOD_VEX_0F72_REG_6,
791 MOD_VEX_0F73_REG_2,
792 MOD_VEX_0F73_REG_3,
793 MOD_VEX_0F73_REG_6,
794 MOD_VEX_0F73_REG_7,
795 MOD_VEX_0FAE_REG_2,
796 MOD_VEX_0FAE_REG_3,
797 MOD_VEX_0FD7_PREFIX_2,
798 MOD_VEX_0FE7_PREFIX_2,
799 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
800 MOD_VEX_0F381A_PREFIX_2,
801 MOD_VEX_0F382A_PREFIX_2,
802 MOD_VEX_0F382C_PREFIX_2,
803 MOD_VEX_0F382D_PREFIX_2,
804 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
805 MOD_VEX_0F382F_PREFIX_2,
806 MOD_VEX_0F385A_PREFIX_2,
807 MOD_VEX_0F388C_PREFIX_2,
808 MOD_VEX_0F388E_PREFIX_2,
43234a1e
L
809
810 MOD_EVEX_0F10_PREFIX_1,
811 MOD_EVEX_0F10_PREFIX_3,
812 MOD_EVEX_0F11_PREFIX_1,
813 MOD_EVEX_0F11_PREFIX_3,
814 MOD_EVEX_0F12_PREFIX_0,
815 MOD_EVEX_0F16_PREFIX_0,
816 MOD_EVEX_0F38C6_REG_1,
817 MOD_EVEX_0F38C6_REG_2,
818 MOD_EVEX_0F38C6_REG_5,
819 MOD_EVEX_0F38C6_REG_6,
820 MOD_EVEX_0F38C7_REG_1,
821 MOD_EVEX_0F38C7_REG_2,
822 MOD_EVEX_0F38C7_REG_5,
823 MOD_EVEX_0F38C7_REG_6
51e7da1b 824};
1ceb70f8 825
51e7da1b
L
826enum
827{
42164a71
L
828 RM_C6_REG_7 = 0,
829 RM_C7_REG_7,
830 RM_0F01_REG_0,
3873ba12
L
831 RM_0F01_REG_1,
832 RM_0F01_REG_2,
833 RM_0F01_REG_3,
834 RM_0F01_REG_7,
835 RM_0FAE_REG_5,
836 RM_0FAE_REG_6,
837 RM_0FAE_REG_7
51e7da1b 838};
1ceb70f8 839
51e7da1b
L
840enum
841{
842 PREFIX_90 = 0,
3873ba12
L
843 PREFIX_0F10,
844 PREFIX_0F11,
845 PREFIX_0F12,
846 PREFIX_0F16,
7e8b059b
L
847 PREFIX_0F1A,
848 PREFIX_0F1B,
3873ba12
L
849 PREFIX_0F2A,
850 PREFIX_0F2B,
851 PREFIX_0F2C,
852 PREFIX_0F2D,
853 PREFIX_0F2E,
854 PREFIX_0F2F,
855 PREFIX_0F51,
856 PREFIX_0F52,
857 PREFIX_0F53,
858 PREFIX_0F58,
859 PREFIX_0F59,
860 PREFIX_0F5A,
861 PREFIX_0F5B,
862 PREFIX_0F5C,
863 PREFIX_0F5D,
864 PREFIX_0F5E,
865 PREFIX_0F5F,
866 PREFIX_0F60,
867 PREFIX_0F61,
868 PREFIX_0F62,
869 PREFIX_0F6C,
870 PREFIX_0F6D,
871 PREFIX_0F6F,
872 PREFIX_0F70,
873 PREFIX_0F73_REG_3,
874 PREFIX_0F73_REG_7,
875 PREFIX_0F78,
876 PREFIX_0F79,
877 PREFIX_0F7C,
878 PREFIX_0F7D,
879 PREFIX_0F7E,
880 PREFIX_0F7F,
c7b8aa3a
L
881 PREFIX_0FAE_REG_0,
882 PREFIX_0FAE_REG_1,
883 PREFIX_0FAE_REG_2,
884 PREFIX_0FAE_REG_3,
3873ba12 885 PREFIX_0FB8,
f12dc422 886 PREFIX_0FBC,
3873ba12
L
887 PREFIX_0FBD,
888 PREFIX_0FC2,
889 PREFIX_0FC3,
890 PREFIX_0FC7_REG_6,
891 PREFIX_0FD0,
892 PREFIX_0FD6,
893 PREFIX_0FE6,
894 PREFIX_0FE7,
895 PREFIX_0FF0,
896 PREFIX_0FF7,
897 PREFIX_0F3810,
898 PREFIX_0F3814,
899 PREFIX_0F3815,
900 PREFIX_0F3817,
901 PREFIX_0F3820,
902 PREFIX_0F3821,
903 PREFIX_0F3822,
904 PREFIX_0F3823,
905 PREFIX_0F3824,
906 PREFIX_0F3825,
907 PREFIX_0F3828,
908 PREFIX_0F3829,
909 PREFIX_0F382A,
910 PREFIX_0F382B,
911 PREFIX_0F3830,
912 PREFIX_0F3831,
913 PREFIX_0F3832,
914 PREFIX_0F3833,
915 PREFIX_0F3834,
916 PREFIX_0F3835,
917 PREFIX_0F3837,
918 PREFIX_0F3838,
919 PREFIX_0F3839,
920 PREFIX_0F383A,
921 PREFIX_0F383B,
922 PREFIX_0F383C,
923 PREFIX_0F383D,
924 PREFIX_0F383E,
925 PREFIX_0F383F,
926 PREFIX_0F3840,
927 PREFIX_0F3841,
928 PREFIX_0F3880,
929 PREFIX_0F3881,
6c30d220 930 PREFIX_0F3882,
a0046408
L
931 PREFIX_0F38C8,
932 PREFIX_0F38C9,
933 PREFIX_0F38CA,
934 PREFIX_0F38CB,
935 PREFIX_0F38CC,
936 PREFIX_0F38CD,
3873ba12
L
937 PREFIX_0F38DB,
938 PREFIX_0F38DC,
939 PREFIX_0F38DD,
940 PREFIX_0F38DE,
941 PREFIX_0F38DF,
942 PREFIX_0F38F0,
943 PREFIX_0F38F1,
e2e1fcde 944 PREFIX_0F38F6,
3873ba12
L
945 PREFIX_0F3A08,
946 PREFIX_0F3A09,
947 PREFIX_0F3A0A,
948 PREFIX_0F3A0B,
949 PREFIX_0F3A0C,
950 PREFIX_0F3A0D,
951 PREFIX_0F3A0E,
952 PREFIX_0F3A14,
953 PREFIX_0F3A15,
954 PREFIX_0F3A16,
955 PREFIX_0F3A17,
956 PREFIX_0F3A20,
957 PREFIX_0F3A21,
958 PREFIX_0F3A22,
959 PREFIX_0F3A40,
960 PREFIX_0F3A41,
961 PREFIX_0F3A42,
962 PREFIX_0F3A44,
963 PREFIX_0F3A60,
964 PREFIX_0F3A61,
965 PREFIX_0F3A62,
966 PREFIX_0F3A63,
a0046408 967 PREFIX_0F3ACC,
3873ba12 968 PREFIX_0F3ADF,
592a252b
L
969 PREFIX_VEX_0F10,
970 PREFIX_VEX_0F11,
971 PREFIX_VEX_0F12,
972 PREFIX_VEX_0F16,
973 PREFIX_VEX_0F2A,
974 PREFIX_VEX_0F2C,
975 PREFIX_VEX_0F2D,
976 PREFIX_VEX_0F2E,
977 PREFIX_VEX_0F2F,
43234a1e
L
978 PREFIX_VEX_0F41,
979 PREFIX_VEX_0F42,
980 PREFIX_VEX_0F44,
981 PREFIX_VEX_0F45,
982 PREFIX_VEX_0F46,
983 PREFIX_VEX_0F47,
984 PREFIX_VEX_0F4B,
592a252b
L
985 PREFIX_VEX_0F51,
986 PREFIX_VEX_0F52,
987 PREFIX_VEX_0F53,
988 PREFIX_VEX_0F58,
989 PREFIX_VEX_0F59,
990 PREFIX_VEX_0F5A,
991 PREFIX_VEX_0F5B,
992 PREFIX_VEX_0F5C,
993 PREFIX_VEX_0F5D,
994 PREFIX_VEX_0F5E,
995 PREFIX_VEX_0F5F,
996 PREFIX_VEX_0F60,
997 PREFIX_VEX_0F61,
998 PREFIX_VEX_0F62,
999 PREFIX_VEX_0F63,
1000 PREFIX_VEX_0F64,
1001 PREFIX_VEX_0F65,
1002 PREFIX_VEX_0F66,
1003 PREFIX_VEX_0F67,
1004 PREFIX_VEX_0F68,
1005 PREFIX_VEX_0F69,
1006 PREFIX_VEX_0F6A,
1007 PREFIX_VEX_0F6B,
1008 PREFIX_VEX_0F6C,
1009 PREFIX_VEX_0F6D,
1010 PREFIX_VEX_0F6E,
1011 PREFIX_VEX_0F6F,
1012 PREFIX_VEX_0F70,
1013 PREFIX_VEX_0F71_REG_2,
1014 PREFIX_VEX_0F71_REG_4,
1015 PREFIX_VEX_0F71_REG_6,
1016 PREFIX_VEX_0F72_REG_2,
1017 PREFIX_VEX_0F72_REG_4,
1018 PREFIX_VEX_0F72_REG_6,
1019 PREFIX_VEX_0F73_REG_2,
1020 PREFIX_VEX_0F73_REG_3,
1021 PREFIX_VEX_0F73_REG_6,
1022 PREFIX_VEX_0F73_REG_7,
1023 PREFIX_VEX_0F74,
1024 PREFIX_VEX_0F75,
1025 PREFIX_VEX_0F76,
1026 PREFIX_VEX_0F77,
1027 PREFIX_VEX_0F7C,
1028 PREFIX_VEX_0F7D,
1029 PREFIX_VEX_0F7E,
1030 PREFIX_VEX_0F7F,
43234a1e
L
1031 PREFIX_VEX_0F90,
1032 PREFIX_VEX_0F91,
1033 PREFIX_VEX_0F92,
1034 PREFIX_VEX_0F93,
1035 PREFIX_VEX_0F98,
592a252b
L
1036 PREFIX_VEX_0FC2,
1037 PREFIX_VEX_0FC4,
1038 PREFIX_VEX_0FC5,
1039 PREFIX_VEX_0FD0,
1040 PREFIX_VEX_0FD1,
1041 PREFIX_VEX_0FD2,
1042 PREFIX_VEX_0FD3,
1043 PREFIX_VEX_0FD4,
1044 PREFIX_VEX_0FD5,
1045 PREFIX_VEX_0FD6,
1046 PREFIX_VEX_0FD7,
1047 PREFIX_VEX_0FD8,
1048 PREFIX_VEX_0FD9,
1049 PREFIX_VEX_0FDA,
1050 PREFIX_VEX_0FDB,
1051 PREFIX_VEX_0FDC,
1052 PREFIX_VEX_0FDD,
1053 PREFIX_VEX_0FDE,
1054 PREFIX_VEX_0FDF,
1055 PREFIX_VEX_0FE0,
1056 PREFIX_VEX_0FE1,
1057 PREFIX_VEX_0FE2,
1058 PREFIX_VEX_0FE3,
1059 PREFIX_VEX_0FE4,
1060 PREFIX_VEX_0FE5,
1061 PREFIX_VEX_0FE6,
1062 PREFIX_VEX_0FE7,
1063 PREFIX_VEX_0FE8,
1064 PREFIX_VEX_0FE9,
1065 PREFIX_VEX_0FEA,
1066 PREFIX_VEX_0FEB,
1067 PREFIX_VEX_0FEC,
1068 PREFIX_VEX_0FED,
1069 PREFIX_VEX_0FEE,
1070 PREFIX_VEX_0FEF,
1071 PREFIX_VEX_0FF0,
1072 PREFIX_VEX_0FF1,
1073 PREFIX_VEX_0FF2,
1074 PREFIX_VEX_0FF3,
1075 PREFIX_VEX_0FF4,
1076 PREFIX_VEX_0FF5,
1077 PREFIX_VEX_0FF6,
1078 PREFIX_VEX_0FF7,
1079 PREFIX_VEX_0FF8,
1080 PREFIX_VEX_0FF9,
1081 PREFIX_VEX_0FFA,
1082 PREFIX_VEX_0FFB,
1083 PREFIX_VEX_0FFC,
1084 PREFIX_VEX_0FFD,
1085 PREFIX_VEX_0FFE,
1086 PREFIX_VEX_0F3800,
1087 PREFIX_VEX_0F3801,
1088 PREFIX_VEX_0F3802,
1089 PREFIX_VEX_0F3803,
1090 PREFIX_VEX_0F3804,
1091 PREFIX_VEX_0F3805,
1092 PREFIX_VEX_0F3806,
1093 PREFIX_VEX_0F3807,
1094 PREFIX_VEX_0F3808,
1095 PREFIX_VEX_0F3809,
1096 PREFIX_VEX_0F380A,
1097 PREFIX_VEX_0F380B,
1098 PREFIX_VEX_0F380C,
1099 PREFIX_VEX_0F380D,
1100 PREFIX_VEX_0F380E,
1101 PREFIX_VEX_0F380F,
1102 PREFIX_VEX_0F3813,
6c30d220 1103 PREFIX_VEX_0F3816,
592a252b
L
1104 PREFIX_VEX_0F3817,
1105 PREFIX_VEX_0F3818,
1106 PREFIX_VEX_0F3819,
1107 PREFIX_VEX_0F381A,
1108 PREFIX_VEX_0F381C,
1109 PREFIX_VEX_0F381D,
1110 PREFIX_VEX_0F381E,
1111 PREFIX_VEX_0F3820,
1112 PREFIX_VEX_0F3821,
1113 PREFIX_VEX_0F3822,
1114 PREFIX_VEX_0F3823,
1115 PREFIX_VEX_0F3824,
1116 PREFIX_VEX_0F3825,
1117 PREFIX_VEX_0F3828,
1118 PREFIX_VEX_0F3829,
1119 PREFIX_VEX_0F382A,
1120 PREFIX_VEX_0F382B,
1121 PREFIX_VEX_0F382C,
1122 PREFIX_VEX_0F382D,
1123 PREFIX_VEX_0F382E,
1124 PREFIX_VEX_0F382F,
1125 PREFIX_VEX_0F3830,
1126 PREFIX_VEX_0F3831,
1127 PREFIX_VEX_0F3832,
1128 PREFIX_VEX_0F3833,
1129 PREFIX_VEX_0F3834,
1130 PREFIX_VEX_0F3835,
6c30d220 1131 PREFIX_VEX_0F3836,
592a252b
L
1132 PREFIX_VEX_0F3837,
1133 PREFIX_VEX_0F3838,
1134 PREFIX_VEX_0F3839,
1135 PREFIX_VEX_0F383A,
1136 PREFIX_VEX_0F383B,
1137 PREFIX_VEX_0F383C,
1138 PREFIX_VEX_0F383D,
1139 PREFIX_VEX_0F383E,
1140 PREFIX_VEX_0F383F,
1141 PREFIX_VEX_0F3840,
1142 PREFIX_VEX_0F3841,
6c30d220
L
1143 PREFIX_VEX_0F3845,
1144 PREFIX_VEX_0F3846,
1145 PREFIX_VEX_0F3847,
1146 PREFIX_VEX_0F3858,
1147 PREFIX_VEX_0F3859,
1148 PREFIX_VEX_0F385A,
1149 PREFIX_VEX_0F3878,
1150 PREFIX_VEX_0F3879,
1151 PREFIX_VEX_0F388C,
1152 PREFIX_VEX_0F388E,
1153 PREFIX_VEX_0F3890,
1154 PREFIX_VEX_0F3891,
1155 PREFIX_VEX_0F3892,
1156 PREFIX_VEX_0F3893,
592a252b
L
1157 PREFIX_VEX_0F3896,
1158 PREFIX_VEX_0F3897,
1159 PREFIX_VEX_0F3898,
1160 PREFIX_VEX_0F3899,
1161 PREFIX_VEX_0F389A,
1162 PREFIX_VEX_0F389B,
1163 PREFIX_VEX_0F389C,
1164 PREFIX_VEX_0F389D,
1165 PREFIX_VEX_0F389E,
1166 PREFIX_VEX_0F389F,
1167 PREFIX_VEX_0F38A6,
1168 PREFIX_VEX_0F38A7,
1169 PREFIX_VEX_0F38A8,
1170 PREFIX_VEX_0F38A9,
1171 PREFIX_VEX_0F38AA,
1172 PREFIX_VEX_0F38AB,
1173 PREFIX_VEX_0F38AC,
1174 PREFIX_VEX_0F38AD,
1175 PREFIX_VEX_0F38AE,
1176 PREFIX_VEX_0F38AF,
1177 PREFIX_VEX_0F38B6,
1178 PREFIX_VEX_0F38B7,
1179 PREFIX_VEX_0F38B8,
1180 PREFIX_VEX_0F38B9,
1181 PREFIX_VEX_0F38BA,
1182 PREFIX_VEX_0F38BB,
1183 PREFIX_VEX_0F38BC,
1184 PREFIX_VEX_0F38BD,
1185 PREFIX_VEX_0F38BE,
1186 PREFIX_VEX_0F38BF,
1187 PREFIX_VEX_0F38DB,
1188 PREFIX_VEX_0F38DC,
1189 PREFIX_VEX_0F38DD,
1190 PREFIX_VEX_0F38DE,
1191 PREFIX_VEX_0F38DF,
f12dc422
L
1192 PREFIX_VEX_0F38F2,
1193 PREFIX_VEX_0F38F3_REG_1,
1194 PREFIX_VEX_0F38F3_REG_2,
1195 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1196 PREFIX_VEX_0F38F5,
1197 PREFIX_VEX_0F38F6,
f12dc422 1198 PREFIX_VEX_0F38F7,
6c30d220
L
1199 PREFIX_VEX_0F3A00,
1200 PREFIX_VEX_0F3A01,
1201 PREFIX_VEX_0F3A02,
592a252b
L
1202 PREFIX_VEX_0F3A04,
1203 PREFIX_VEX_0F3A05,
1204 PREFIX_VEX_0F3A06,
1205 PREFIX_VEX_0F3A08,
1206 PREFIX_VEX_0F3A09,
1207 PREFIX_VEX_0F3A0A,
1208 PREFIX_VEX_0F3A0B,
1209 PREFIX_VEX_0F3A0C,
1210 PREFIX_VEX_0F3A0D,
1211 PREFIX_VEX_0F3A0E,
1212 PREFIX_VEX_0F3A0F,
1213 PREFIX_VEX_0F3A14,
1214 PREFIX_VEX_0F3A15,
1215 PREFIX_VEX_0F3A16,
1216 PREFIX_VEX_0F3A17,
1217 PREFIX_VEX_0F3A18,
1218 PREFIX_VEX_0F3A19,
1219 PREFIX_VEX_0F3A1D,
1220 PREFIX_VEX_0F3A20,
1221 PREFIX_VEX_0F3A21,
1222 PREFIX_VEX_0F3A22,
43234a1e
L
1223 PREFIX_VEX_0F3A30,
1224 PREFIX_VEX_0F3A32,
6c30d220
L
1225 PREFIX_VEX_0F3A38,
1226 PREFIX_VEX_0F3A39,
592a252b
L
1227 PREFIX_VEX_0F3A40,
1228 PREFIX_VEX_0F3A41,
1229 PREFIX_VEX_0F3A42,
1230 PREFIX_VEX_0F3A44,
6c30d220 1231 PREFIX_VEX_0F3A46,
592a252b
L
1232 PREFIX_VEX_0F3A48,
1233 PREFIX_VEX_0F3A49,
1234 PREFIX_VEX_0F3A4A,
1235 PREFIX_VEX_0F3A4B,
1236 PREFIX_VEX_0F3A4C,
1237 PREFIX_VEX_0F3A5C,
1238 PREFIX_VEX_0F3A5D,
1239 PREFIX_VEX_0F3A5E,
1240 PREFIX_VEX_0F3A5F,
1241 PREFIX_VEX_0F3A60,
1242 PREFIX_VEX_0F3A61,
1243 PREFIX_VEX_0F3A62,
1244 PREFIX_VEX_0F3A63,
1245 PREFIX_VEX_0F3A68,
1246 PREFIX_VEX_0F3A69,
1247 PREFIX_VEX_0F3A6A,
1248 PREFIX_VEX_0F3A6B,
1249 PREFIX_VEX_0F3A6C,
1250 PREFIX_VEX_0F3A6D,
1251 PREFIX_VEX_0F3A6E,
1252 PREFIX_VEX_0F3A6F,
1253 PREFIX_VEX_0F3A78,
1254 PREFIX_VEX_0F3A79,
1255 PREFIX_VEX_0F3A7A,
1256 PREFIX_VEX_0F3A7B,
1257 PREFIX_VEX_0F3A7C,
1258 PREFIX_VEX_0F3A7D,
1259 PREFIX_VEX_0F3A7E,
1260 PREFIX_VEX_0F3A7F,
6c30d220 1261 PREFIX_VEX_0F3ADF,
43234a1e
L
1262 PREFIX_VEX_0F3AF0,
1263
1264 PREFIX_EVEX_0F10,
1265 PREFIX_EVEX_0F11,
1266 PREFIX_EVEX_0F12,
1267 PREFIX_EVEX_0F13,
1268 PREFIX_EVEX_0F14,
1269 PREFIX_EVEX_0F15,
1270 PREFIX_EVEX_0F16,
1271 PREFIX_EVEX_0F17,
1272 PREFIX_EVEX_0F28,
1273 PREFIX_EVEX_0F29,
1274 PREFIX_EVEX_0F2A,
1275 PREFIX_EVEX_0F2B,
1276 PREFIX_EVEX_0F2C,
1277 PREFIX_EVEX_0F2D,
1278 PREFIX_EVEX_0F2E,
1279 PREFIX_EVEX_0F2F,
1280 PREFIX_EVEX_0F51,
1281 PREFIX_EVEX_0F58,
1282 PREFIX_EVEX_0F59,
1283 PREFIX_EVEX_0F5A,
1284 PREFIX_EVEX_0F5B,
1285 PREFIX_EVEX_0F5C,
1286 PREFIX_EVEX_0F5D,
1287 PREFIX_EVEX_0F5E,
1288 PREFIX_EVEX_0F5F,
1289 PREFIX_EVEX_0F62,
1290 PREFIX_EVEX_0F66,
1291 PREFIX_EVEX_0F6A,
1292 PREFIX_EVEX_0F6C,
1293 PREFIX_EVEX_0F6D,
1294 PREFIX_EVEX_0F6E,
1295 PREFIX_EVEX_0F6F,
1296 PREFIX_EVEX_0F70,
1297 PREFIX_EVEX_0F72_REG_0,
1298 PREFIX_EVEX_0F72_REG_1,
1299 PREFIX_EVEX_0F72_REG_2,
1300 PREFIX_EVEX_0F72_REG_4,
1301 PREFIX_EVEX_0F72_REG_6,
1302 PREFIX_EVEX_0F73_REG_2,
1303 PREFIX_EVEX_0F73_REG_6,
1304 PREFIX_EVEX_0F76,
1305 PREFIX_EVEX_0F78,
1306 PREFIX_EVEX_0F79,
1307 PREFIX_EVEX_0F7A,
1308 PREFIX_EVEX_0F7B,
1309 PREFIX_EVEX_0F7E,
1310 PREFIX_EVEX_0F7F,
1311 PREFIX_EVEX_0FC2,
1312 PREFIX_EVEX_0FC6,
1313 PREFIX_EVEX_0FD2,
1314 PREFIX_EVEX_0FD3,
1315 PREFIX_EVEX_0FD4,
1316 PREFIX_EVEX_0FD6,
1317 PREFIX_EVEX_0FDB,
1318 PREFIX_EVEX_0FDF,
1319 PREFIX_EVEX_0FE2,
1320 PREFIX_EVEX_0FE6,
1321 PREFIX_EVEX_0FE7,
1322 PREFIX_EVEX_0FEB,
1323 PREFIX_EVEX_0FEF,
1324 PREFIX_EVEX_0FF2,
1325 PREFIX_EVEX_0FF3,
1326 PREFIX_EVEX_0FF4,
1327 PREFIX_EVEX_0FFA,
1328 PREFIX_EVEX_0FFB,
1329 PREFIX_EVEX_0FFE,
1330 PREFIX_EVEX_0F380C,
1331 PREFIX_EVEX_0F380D,
1332 PREFIX_EVEX_0F3811,
1333 PREFIX_EVEX_0F3812,
1334 PREFIX_EVEX_0F3813,
1335 PREFIX_EVEX_0F3814,
1336 PREFIX_EVEX_0F3815,
1337 PREFIX_EVEX_0F3816,
1338 PREFIX_EVEX_0F3818,
1339 PREFIX_EVEX_0F3819,
1340 PREFIX_EVEX_0F381A,
1341 PREFIX_EVEX_0F381B,
1342 PREFIX_EVEX_0F381E,
1343 PREFIX_EVEX_0F381F,
1344 PREFIX_EVEX_0F3821,
1345 PREFIX_EVEX_0F3822,
1346 PREFIX_EVEX_0F3823,
1347 PREFIX_EVEX_0F3824,
1348 PREFIX_EVEX_0F3825,
1349 PREFIX_EVEX_0F3827,
1350 PREFIX_EVEX_0F3828,
1351 PREFIX_EVEX_0F3829,
1352 PREFIX_EVEX_0F382A,
1353 PREFIX_EVEX_0F382C,
1354 PREFIX_EVEX_0F382D,
1355 PREFIX_EVEX_0F3831,
1356 PREFIX_EVEX_0F3832,
1357 PREFIX_EVEX_0F3833,
1358 PREFIX_EVEX_0F3834,
1359 PREFIX_EVEX_0F3835,
1360 PREFIX_EVEX_0F3836,
1361 PREFIX_EVEX_0F3837,
1362 PREFIX_EVEX_0F3839,
1363 PREFIX_EVEX_0F383A,
1364 PREFIX_EVEX_0F383B,
1365 PREFIX_EVEX_0F383D,
1366 PREFIX_EVEX_0F383F,
1367 PREFIX_EVEX_0F3840,
1368 PREFIX_EVEX_0F3842,
1369 PREFIX_EVEX_0F3843,
1370 PREFIX_EVEX_0F3844,
1371 PREFIX_EVEX_0F3845,
1372 PREFIX_EVEX_0F3846,
1373 PREFIX_EVEX_0F3847,
1374 PREFIX_EVEX_0F384C,
1375 PREFIX_EVEX_0F384D,
1376 PREFIX_EVEX_0F384E,
1377 PREFIX_EVEX_0F384F,
1378 PREFIX_EVEX_0F3858,
1379 PREFIX_EVEX_0F3859,
1380 PREFIX_EVEX_0F385A,
1381 PREFIX_EVEX_0F385B,
1382 PREFIX_EVEX_0F3864,
1383 PREFIX_EVEX_0F3865,
1384 PREFIX_EVEX_0F3876,
1385 PREFIX_EVEX_0F3877,
1386 PREFIX_EVEX_0F387C,
1387 PREFIX_EVEX_0F387E,
1388 PREFIX_EVEX_0F387F,
1389 PREFIX_EVEX_0F3888,
1390 PREFIX_EVEX_0F3889,
1391 PREFIX_EVEX_0F388A,
1392 PREFIX_EVEX_0F388B,
1393 PREFIX_EVEX_0F3890,
1394 PREFIX_EVEX_0F3891,
1395 PREFIX_EVEX_0F3892,
1396 PREFIX_EVEX_0F3893,
1397 PREFIX_EVEX_0F3896,
1398 PREFIX_EVEX_0F3897,
1399 PREFIX_EVEX_0F3898,
1400 PREFIX_EVEX_0F3899,
1401 PREFIX_EVEX_0F389A,
1402 PREFIX_EVEX_0F389B,
1403 PREFIX_EVEX_0F389C,
1404 PREFIX_EVEX_0F389D,
1405 PREFIX_EVEX_0F389E,
1406 PREFIX_EVEX_0F389F,
1407 PREFIX_EVEX_0F38A0,
1408 PREFIX_EVEX_0F38A1,
1409 PREFIX_EVEX_0F38A2,
1410 PREFIX_EVEX_0F38A3,
1411 PREFIX_EVEX_0F38A6,
1412 PREFIX_EVEX_0F38A7,
1413 PREFIX_EVEX_0F38A8,
1414 PREFIX_EVEX_0F38A9,
1415 PREFIX_EVEX_0F38AA,
1416 PREFIX_EVEX_0F38AB,
1417 PREFIX_EVEX_0F38AC,
1418 PREFIX_EVEX_0F38AD,
1419 PREFIX_EVEX_0F38AE,
1420 PREFIX_EVEX_0F38AF,
1421 PREFIX_EVEX_0F38B6,
1422 PREFIX_EVEX_0F38B7,
1423 PREFIX_EVEX_0F38B8,
1424 PREFIX_EVEX_0F38B9,
1425 PREFIX_EVEX_0F38BA,
1426 PREFIX_EVEX_0F38BB,
1427 PREFIX_EVEX_0F38BC,
1428 PREFIX_EVEX_0F38BD,
1429 PREFIX_EVEX_0F38BE,
1430 PREFIX_EVEX_0F38BF,
1431 PREFIX_EVEX_0F38C4,
1432 PREFIX_EVEX_0F38C6_REG_1,
1433 PREFIX_EVEX_0F38C6_REG_2,
1434 PREFIX_EVEX_0F38C6_REG_5,
1435 PREFIX_EVEX_0F38C6_REG_6,
1436 PREFIX_EVEX_0F38C7_REG_1,
1437 PREFIX_EVEX_0F38C7_REG_2,
1438 PREFIX_EVEX_0F38C7_REG_5,
1439 PREFIX_EVEX_0F38C7_REG_6,
1440 PREFIX_EVEX_0F38C8,
1441 PREFIX_EVEX_0F38CA,
1442 PREFIX_EVEX_0F38CB,
1443 PREFIX_EVEX_0F38CC,
1444 PREFIX_EVEX_0F38CD,
1445
1446 PREFIX_EVEX_0F3A00,
1447 PREFIX_EVEX_0F3A01,
1448 PREFIX_EVEX_0F3A03,
1449 PREFIX_EVEX_0F3A04,
1450 PREFIX_EVEX_0F3A05,
1451 PREFIX_EVEX_0F3A08,
1452 PREFIX_EVEX_0F3A09,
1453 PREFIX_EVEX_0F3A0A,
1454 PREFIX_EVEX_0F3A0B,
1455 PREFIX_EVEX_0F3A17,
1456 PREFIX_EVEX_0F3A18,
1457 PREFIX_EVEX_0F3A19,
1458 PREFIX_EVEX_0F3A1A,
1459 PREFIX_EVEX_0F3A1B,
1460 PREFIX_EVEX_0F3A1D,
1461 PREFIX_EVEX_0F3A1E,
1462 PREFIX_EVEX_0F3A1F,
1463 PREFIX_EVEX_0F3A21,
1464 PREFIX_EVEX_0F3A23,
1465 PREFIX_EVEX_0F3A25,
1466 PREFIX_EVEX_0F3A26,
1467 PREFIX_EVEX_0F3A27,
1468 PREFIX_EVEX_0F3A38,
1469 PREFIX_EVEX_0F3A39,
1470 PREFIX_EVEX_0F3A3A,
1471 PREFIX_EVEX_0F3A3B,
43234a1e
L
1472 PREFIX_EVEX_0F3A43,
1473 PREFIX_EVEX_0F3A54,
1474 PREFIX_EVEX_0F3A55,
51e7da1b 1475};
4e7d34a6 1476
51e7da1b
L
1477enum
1478{
1479 X86_64_06 = 0,
3873ba12
L
1480 X86_64_07,
1481 X86_64_0D,
1482 X86_64_16,
1483 X86_64_17,
1484 X86_64_1E,
1485 X86_64_1F,
1486 X86_64_27,
1487 X86_64_2F,
1488 X86_64_37,
1489 X86_64_3F,
1490 X86_64_60,
1491 X86_64_61,
1492 X86_64_62,
1493 X86_64_63,
1494 X86_64_6D,
1495 X86_64_6F,
1496 X86_64_9A,
1497 X86_64_C4,
1498 X86_64_C5,
1499 X86_64_CE,
1500 X86_64_D4,
1501 X86_64_D5,
1502 X86_64_EA,
1503 X86_64_0F01_REG_0,
1504 X86_64_0F01_REG_1,
1505 X86_64_0F01_REG_2,
1506 X86_64_0F01_REG_3
51e7da1b 1507};
4e7d34a6 1508
51e7da1b
L
1509enum
1510{
1511 THREE_BYTE_0F38 = 0,
3873ba12
L
1512 THREE_BYTE_0F3A,
1513 THREE_BYTE_0F7A
51e7da1b 1514};
4e7d34a6 1515
f88c9eb0
SP
1516enum
1517{
5dd85c99
SP
1518 XOP_08 = 0,
1519 XOP_09,
f88c9eb0
SP
1520 XOP_0A
1521};
1522
51e7da1b
L
1523enum
1524{
1525 VEX_0F = 0,
3873ba12
L
1526 VEX_0F38,
1527 VEX_0F3A
51e7da1b 1528};
c0f3af97 1529
43234a1e
L
1530enum
1531{
1532 EVEX_0F = 0,
1533 EVEX_0F38,
1534 EVEX_0F3A
1535};
1536
51e7da1b
L
1537enum
1538{
592a252b
L
1539 VEX_LEN_0F10_P_1 = 0,
1540 VEX_LEN_0F10_P_3,
1541 VEX_LEN_0F11_P_1,
1542 VEX_LEN_0F11_P_3,
1543 VEX_LEN_0F12_P_0_M_0,
1544 VEX_LEN_0F12_P_0_M_1,
1545 VEX_LEN_0F12_P_2,
1546 VEX_LEN_0F13_M_0,
1547 VEX_LEN_0F16_P_0_M_0,
1548 VEX_LEN_0F16_P_0_M_1,
1549 VEX_LEN_0F16_P_2,
1550 VEX_LEN_0F17_M_0,
1551 VEX_LEN_0F2A_P_1,
1552 VEX_LEN_0F2A_P_3,
1553 VEX_LEN_0F2C_P_1,
1554 VEX_LEN_0F2C_P_3,
1555 VEX_LEN_0F2D_P_1,
1556 VEX_LEN_0F2D_P_3,
1557 VEX_LEN_0F2E_P_0,
1558 VEX_LEN_0F2E_P_2,
1559 VEX_LEN_0F2F_P_0,
1560 VEX_LEN_0F2F_P_2,
43234a1e
L
1561 VEX_LEN_0F41_P_0,
1562 VEX_LEN_0F42_P_0,
1563 VEX_LEN_0F44_P_0,
1564 VEX_LEN_0F45_P_0,
1565 VEX_LEN_0F46_P_0,
1566 VEX_LEN_0F47_P_0,
1567 VEX_LEN_0F4B_P_2,
592a252b
L
1568 VEX_LEN_0F51_P_1,
1569 VEX_LEN_0F51_P_3,
1570 VEX_LEN_0F52_P_1,
1571 VEX_LEN_0F53_P_1,
1572 VEX_LEN_0F58_P_1,
1573 VEX_LEN_0F58_P_3,
1574 VEX_LEN_0F59_P_1,
1575 VEX_LEN_0F59_P_3,
1576 VEX_LEN_0F5A_P_1,
1577 VEX_LEN_0F5A_P_3,
1578 VEX_LEN_0F5C_P_1,
1579 VEX_LEN_0F5C_P_3,
1580 VEX_LEN_0F5D_P_1,
1581 VEX_LEN_0F5D_P_3,
1582 VEX_LEN_0F5E_P_1,
1583 VEX_LEN_0F5E_P_3,
1584 VEX_LEN_0F5F_P_1,
1585 VEX_LEN_0F5F_P_3,
592a252b 1586 VEX_LEN_0F6E_P_2,
592a252b
L
1587 VEX_LEN_0F7E_P_1,
1588 VEX_LEN_0F7E_P_2,
43234a1e
L
1589 VEX_LEN_0F90_P_0,
1590 VEX_LEN_0F91_P_0,
1591 VEX_LEN_0F92_P_0,
1592 VEX_LEN_0F93_P_0,
1593 VEX_LEN_0F98_P_0,
592a252b
L
1594 VEX_LEN_0FAE_R_2_M_0,
1595 VEX_LEN_0FAE_R_3_M_0,
1596 VEX_LEN_0FC2_P_1,
1597 VEX_LEN_0FC2_P_3,
1598 VEX_LEN_0FC4_P_2,
1599 VEX_LEN_0FC5_P_2,
592a252b 1600 VEX_LEN_0FD6_P_2,
592a252b 1601 VEX_LEN_0FF7_P_2,
6c30d220
L
1602 VEX_LEN_0F3816_P_2,
1603 VEX_LEN_0F3819_P_2,
592a252b 1604 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1605 VEX_LEN_0F3836_P_2,
592a252b 1606 VEX_LEN_0F3841_P_2,
6c30d220 1607 VEX_LEN_0F385A_P_2_M_0,
592a252b
L
1608 VEX_LEN_0F38DB_P_2,
1609 VEX_LEN_0F38DC_P_2,
1610 VEX_LEN_0F38DD_P_2,
1611 VEX_LEN_0F38DE_P_2,
1612 VEX_LEN_0F38DF_P_2,
f12dc422
L
1613 VEX_LEN_0F38F2_P_0,
1614 VEX_LEN_0F38F3_R_1_P_0,
1615 VEX_LEN_0F38F3_R_2_P_0,
1616 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1617 VEX_LEN_0F38F5_P_0,
1618 VEX_LEN_0F38F5_P_1,
1619 VEX_LEN_0F38F5_P_3,
1620 VEX_LEN_0F38F6_P_3,
f12dc422 1621 VEX_LEN_0F38F7_P_0,
6c30d220
L
1622 VEX_LEN_0F38F7_P_1,
1623 VEX_LEN_0F38F7_P_2,
1624 VEX_LEN_0F38F7_P_3,
1625 VEX_LEN_0F3A00_P_2,
1626 VEX_LEN_0F3A01_P_2,
592a252b
L
1627 VEX_LEN_0F3A06_P_2,
1628 VEX_LEN_0F3A0A_P_2,
1629 VEX_LEN_0F3A0B_P_2,
592a252b
L
1630 VEX_LEN_0F3A14_P_2,
1631 VEX_LEN_0F3A15_P_2,
1632 VEX_LEN_0F3A16_P_2,
1633 VEX_LEN_0F3A17_P_2,
1634 VEX_LEN_0F3A18_P_2,
1635 VEX_LEN_0F3A19_P_2,
1636 VEX_LEN_0F3A20_P_2,
1637 VEX_LEN_0F3A21_P_2,
1638 VEX_LEN_0F3A22_P_2,
43234a1e
L
1639 VEX_LEN_0F3A30_P_2,
1640 VEX_LEN_0F3A32_P_2,
6c30d220
L
1641 VEX_LEN_0F3A38_P_2,
1642 VEX_LEN_0F3A39_P_2,
592a252b 1643 VEX_LEN_0F3A41_P_2,
592a252b 1644 VEX_LEN_0F3A44_P_2,
6c30d220 1645 VEX_LEN_0F3A46_P_2,
592a252b
L
1646 VEX_LEN_0F3A60_P_2,
1647 VEX_LEN_0F3A61_P_2,
1648 VEX_LEN_0F3A62_P_2,
1649 VEX_LEN_0F3A63_P_2,
1650 VEX_LEN_0F3A6A_P_2,
1651 VEX_LEN_0F3A6B_P_2,
1652 VEX_LEN_0F3A6E_P_2,
1653 VEX_LEN_0F3A6F_P_2,
1654 VEX_LEN_0F3A7A_P_2,
1655 VEX_LEN_0F3A7B_P_2,
1656 VEX_LEN_0F3A7E_P_2,
1657 VEX_LEN_0F3A7F_P_2,
1658 VEX_LEN_0F3ADF_P_2,
6c30d220 1659 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1660 VEX_LEN_0FXOP_08_CC,
1661 VEX_LEN_0FXOP_08_CD,
1662 VEX_LEN_0FXOP_08_CE,
1663 VEX_LEN_0FXOP_08_CF,
1664 VEX_LEN_0FXOP_08_EC,
1665 VEX_LEN_0FXOP_08_ED,
1666 VEX_LEN_0FXOP_08_EE,
1667 VEX_LEN_0FXOP_08_EF,
592a252b
L
1668 VEX_LEN_0FXOP_09_80,
1669 VEX_LEN_0FXOP_09_81
51e7da1b 1670};
c0f3af97 1671
9e30b8e0
L
1672enum
1673{
592a252b
L
1674 VEX_W_0F10_P_0 = 0,
1675 VEX_W_0F10_P_1,
1676 VEX_W_0F10_P_2,
1677 VEX_W_0F10_P_3,
1678 VEX_W_0F11_P_0,
1679 VEX_W_0F11_P_1,
1680 VEX_W_0F11_P_2,
1681 VEX_W_0F11_P_3,
1682 VEX_W_0F12_P_0_M_0,
1683 VEX_W_0F12_P_0_M_1,
1684 VEX_W_0F12_P_1,
1685 VEX_W_0F12_P_2,
1686 VEX_W_0F12_P_3,
1687 VEX_W_0F13_M_0,
1688 VEX_W_0F14,
1689 VEX_W_0F15,
1690 VEX_W_0F16_P_0_M_0,
1691 VEX_W_0F16_P_0_M_1,
1692 VEX_W_0F16_P_1,
1693 VEX_W_0F16_P_2,
1694 VEX_W_0F17_M_0,
1695 VEX_W_0F28,
1696 VEX_W_0F29,
1697 VEX_W_0F2B_M_0,
1698 VEX_W_0F2E_P_0,
1699 VEX_W_0F2E_P_2,
1700 VEX_W_0F2F_P_0,
1701 VEX_W_0F2F_P_2,
43234a1e
L
1702 VEX_W_0F41_P_0_LEN_1,
1703 VEX_W_0F42_P_0_LEN_1,
1704 VEX_W_0F44_P_0_LEN_0,
1705 VEX_W_0F45_P_0_LEN_1,
1706 VEX_W_0F46_P_0_LEN_1,
1707 VEX_W_0F47_P_0_LEN_1,
1708 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1709 VEX_W_0F50_M_0,
1710 VEX_W_0F51_P_0,
1711 VEX_W_0F51_P_1,
1712 VEX_W_0F51_P_2,
1713 VEX_W_0F51_P_3,
1714 VEX_W_0F52_P_0,
1715 VEX_W_0F52_P_1,
1716 VEX_W_0F53_P_0,
1717 VEX_W_0F53_P_1,
1718 VEX_W_0F58_P_0,
1719 VEX_W_0F58_P_1,
1720 VEX_W_0F58_P_2,
1721 VEX_W_0F58_P_3,
1722 VEX_W_0F59_P_0,
1723 VEX_W_0F59_P_1,
1724 VEX_W_0F59_P_2,
1725 VEX_W_0F59_P_3,
1726 VEX_W_0F5A_P_0,
1727 VEX_W_0F5A_P_1,
1728 VEX_W_0F5A_P_3,
1729 VEX_W_0F5B_P_0,
1730 VEX_W_0F5B_P_1,
1731 VEX_W_0F5B_P_2,
1732 VEX_W_0F5C_P_0,
1733 VEX_W_0F5C_P_1,
1734 VEX_W_0F5C_P_2,
1735 VEX_W_0F5C_P_3,
1736 VEX_W_0F5D_P_0,
1737 VEX_W_0F5D_P_1,
1738 VEX_W_0F5D_P_2,
1739 VEX_W_0F5D_P_3,
1740 VEX_W_0F5E_P_0,
1741 VEX_W_0F5E_P_1,
1742 VEX_W_0F5E_P_2,
1743 VEX_W_0F5E_P_3,
1744 VEX_W_0F5F_P_0,
1745 VEX_W_0F5F_P_1,
1746 VEX_W_0F5F_P_2,
1747 VEX_W_0F5F_P_3,
1748 VEX_W_0F60_P_2,
1749 VEX_W_0F61_P_2,
1750 VEX_W_0F62_P_2,
1751 VEX_W_0F63_P_2,
1752 VEX_W_0F64_P_2,
1753 VEX_W_0F65_P_2,
1754 VEX_W_0F66_P_2,
1755 VEX_W_0F67_P_2,
1756 VEX_W_0F68_P_2,
1757 VEX_W_0F69_P_2,
1758 VEX_W_0F6A_P_2,
1759 VEX_W_0F6B_P_2,
1760 VEX_W_0F6C_P_2,
1761 VEX_W_0F6D_P_2,
1762 VEX_W_0F6F_P_1,
1763 VEX_W_0F6F_P_2,
1764 VEX_W_0F70_P_1,
1765 VEX_W_0F70_P_2,
1766 VEX_W_0F70_P_3,
1767 VEX_W_0F71_R_2_P_2,
1768 VEX_W_0F71_R_4_P_2,
1769 VEX_W_0F71_R_6_P_2,
1770 VEX_W_0F72_R_2_P_2,
1771 VEX_W_0F72_R_4_P_2,
1772 VEX_W_0F72_R_6_P_2,
1773 VEX_W_0F73_R_2_P_2,
1774 VEX_W_0F73_R_3_P_2,
1775 VEX_W_0F73_R_6_P_2,
1776 VEX_W_0F73_R_7_P_2,
1777 VEX_W_0F74_P_2,
1778 VEX_W_0F75_P_2,
1779 VEX_W_0F76_P_2,
1780 VEX_W_0F77_P_0,
1781 VEX_W_0F7C_P_2,
1782 VEX_W_0F7C_P_3,
1783 VEX_W_0F7D_P_2,
1784 VEX_W_0F7D_P_3,
1785 VEX_W_0F7E_P_1,
1786 VEX_W_0F7F_P_1,
1787 VEX_W_0F7F_P_2,
43234a1e
L
1788 VEX_W_0F90_P_0_LEN_0,
1789 VEX_W_0F91_P_0_LEN_0,
1790 VEX_W_0F92_P_0_LEN_0,
1791 VEX_W_0F93_P_0_LEN_0,
1792 VEX_W_0F98_P_0_LEN_0,
592a252b
L
1793 VEX_W_0FAE_R_2_M_0,
1794 VEX_W_0FAE_R_3_M_0,
1795 VEX_W_0FC2_P_0,
1796 VEX_W_0FC2_P_1,
1797 VEX_W_0FC2_P_2,
1798 VEX_W_0FC2_P_3,
1799 VEX_W_0FC4_P_2,
1800 VEX_W_0FC5_P_2,
1801 VEX_W_0FD0_P_2,
1802 VEX_W_0FD0_P_3,
1803 VEX_W_0FD1_P_2,
1804 VEX_W_0FD2_P_2,
1805 VEX_W_0FD3_P_2,
1806 VEX_W_0FD4_P_2,
1807 VEX_W_0FD5_P_2,
1808 VEX_W_0FD6_P_2,
1809 VEX_W_0FD7_P_2_M_1,
1810 VEX_W_0FD8_P_2,
1811 VEX_W_0FD9_P_2,
1812 VEX_W_0FDA_P_2,
1813 VEX_W_0FDB_P_2,
1814 VEX_W_0FDC_P_2,
1815 VEX_W_0FDD_P_2,
1816 VEX_W_0FDE_P_2,
1817 VEX_W_0FDF_P_2,
1818 VEX_W_0FE0_P_2,
1819 VEX_W_0FE1_P_2,
1820 VEX_W_0FE2_P_2,
1821 VEX_W_0FE3_P_2,
1822 VEX_W_0FE4_P_2,
1823 VEX_W_0FE5_P_2,
1824 VEX_W_0FE6_P_1,
1825 VEX_W_0FE6_P_2,
1826 VEX_W_0FE6_P_3,
1827 VEX_W_0FE7_P_2_M_0,
1828 VEX_W_0FE8_P_2,
1829 VEX_W_0FE9_P_2,
1830 VEX_W_0FEA_P_2,
1831 VEX_W_0FEB_P_2,
1832 VEX_W_0FEC_P_2,
1833 VEX_W_0FED_P_2,
1834 VEX_W_0FEE_P_2,
1835 VEX_W_0FEF_P_2,
1836 VEX_W_0FF0_P_3_M_0,
1837 VEX_W_0FF1_P_2,
1838 VEX_W_0FF2_P_2,
1839 VEX_W_0FF3_P_2,
1840 VEX_W_0FF4_P_2,
1841 VEX_W_0FF5_P_2,
1842 VEX_W_0FF6_P_2,
1843 VEX_W_0FF7_P_2,
1844 VEX_W_0FF8_P_2,
1845 VEX_W_0FF9_P_2,
1846 VEX_W_0FFA_P_2,
1847 VEX_W_0FFB_P_2,
1848 VEX_W_0FFC_P_2,
1849 VEX_W_0FFD_P_2,
1850 VEX_W_0FFE_P_2,
1851 VEX_W_0F3800_P_2,
1852 VEX_W_0F3801_P_2,
1853 VEX_W_0F3802_P_2,
1854 VEX_W_0F3803_P_2,
1855 VEX_W_0F3804_P_2,
1856 VEX_W_0F3805_P_2,
1857 VEX_W_0F3806_P_2,
1858 VEX_W_0F3807_P_2,
1859 VEX_W_0F3808_P_2,
1860 VEX_W_0F3809_P_2,
1861 VEX_W_0F380A_P_2,
1862 VEX_W_0F380B_P_2,
1863 VEX_W_0F380C_P_2,
1864 VEX_W_0F380D_P_2,
1865 VEX_W_0F380E_P_2,
1866 VEX_W_0F380F_P_2,
6c30d220 1867 VEX_W_0F3816_P_2,
592a252b 1868 VEX_W_0F3817_P_2,
6c30d220
L
1869 VEX_W_0F3818_P_2,
1870 VEX_W_0F3819_P_2,
592a252b
L
1871 VEX_W_0F381A_P_2_M_0,
1872 VEX_W_0F381C_P_2,
1873 VEX_W_0F381D_P_2,
1874 VEX_W_0F381E_P_2,
1875 VEX_W_0F3820_P_2,
1876 VEX_W_0F3821_P_2,
1877 VEX_W_0F3822_P_2,
1878 VEX_W_0F3823_P_2,
1879 VEX_W_0F3824_P_2,
1880 VEX_W_0F3825_P_2,
1881 VEX_W_0F3828_P_2,
1882 VEX_W_0F3829_P_2,
1883 VEX_W_0F382A_P_2_M_0,
1884 VEX_W_0F382B_P_2,
1885 VEX_W_0F382C_P_2_M_0,
1886 VEX_W_0F382D_P_2_M_0,
1887 VEX_W_0F382E_P_2_M_0,
1888 VEX_W_0F382F_P_2_M_0,
1889 VEX_W_0F3830_P_2,
1890 VEX_W_0F3831_P_2,
1891 VEX_W_0F3832_P_2,
1892 VEX_W_0F3833_P_2,
1893 VEX_W_0F3834_P_2,
1894 VEX_W_0F3835_P_2,
6c30d220 1895 VEX_W_0F3836_P_2,
592a252b
L
1896 VEX_W_0F3837_P_2,
1897 VEX_W_0F3838_P_2,
1898 VEX_W_0F3839_P_2,
1899 VEX_W_0F383A_P_2,
1900 VEX_W_0F383B_P_2,
1901 VEX_W_0F383C_P_2,
1902 VEX_W_0F383D_P_2,
1903 VEX_W_0F383E_P_2,
1904 VEX_W_0F383F_P_2,
1905 VEX_W_0F3840_P_2,
1906 VEX_W_0F3841_P_2,
6c30d220
L
1907 VEX_W_0F3846_P_2,
1908 VEX_W_0F3858_P_2,
1909 VEX_W_0F3859_P_2,
1910 VEX_W_0F385A_P_2_M_0,
1911 VEX_W_0F3878_P_2,
1912 VEX_W_0F3879_P_2,
592a252b
L
1913 VEX_W_0F38DB_P_2,
1914 VEX_W_0F38DC_P_2,
1915 VEX_W_0F38DD_P_2,
1916 VEX_W_0F38DE_P_2,
1917 VEX_W_0F38DF_P_2,
6c30d220
L
1918 VEX_W_0F3A00_P_2,
1919 VEX_W_0F3A01_P_2,
1920 VEX_W_0F3A02_P_2,
592a252b
L
1921 VEX_W_0F3A04_P_2,
1922 VEX_W_0F3A05_P_2,
1923 VEX_W_0F3A06_P_2,
1924 VEX_W_0F3A08_P_2,
1925 VEX_W_0F3A09_P_2,
1926 VEX_W_0F3A0A_P_2,
1927 VEX_W_0F3A0B_P_2,
1928 VEX_W_0F3A0C_P_2,
1929 VEX_W_0F3A0D_P_2,
1930 VEX_W_0F3A0E_P_2,
1931 VEX_W_0F3A0F_P_2,
1932 VEX_W_0F3A14_P_2,
1933 VEX_W_0F3A15_P_2,
1934 VEX_W_0F3A18_P_2,
1935 VEX_W_0F3A19_P_2,
1936 VEX_W_0F3A20_P_2,
1937 VEX_W_0F3A21_P_2,
43234a1e
L
1938 VEX_W_0F3A30_P_2_LEN_0,
1939 VEX_W_0F3A32_P_2_LEN_0,
6c30d220
L
1940 VEX_W_0F3A38_P_2,
1941 VEX_W_0F3A39_P_2,
592a252b
L
1942 VEX_W_0F3A40_P_2,
1943 VEX_W_0F3A41_P_2,
1944 VEX_W_0F3A42_P_2,
1945 VEX_W_0F3A44_P_2,
6c30d220 1946 VEX_W_0F3A46_P_2,
592a252b
L
1947 VEX_W_0F3A48_P_2,
1948 VEX_W_0F3A49_P_2,
1949 VEX_W_0F3A4A_P_2,
1950 VEX_W_0F3A4B_P_2,
1951 VEX_W_0F3A4C_P_2,
1952 VEX_W_0F3A60_P_2,
1953 VEX_W_0F3A61_P_2,
1954 VEX_W_0F3A62_P_2,
1955 VEX_W_0F3A63_P_2,
43234a1e
L
1956 VEX_W_0F3ADF_P_2,
1957
1958 EVEX_W_0F10_P_0,
1959 EVEX_W_0F10_P_1_M_0,
1960 EVEX_W_0F10_P_1_M_1,
1961 EVEX_W_0F10_P_2,
1962 EVEX_W_0F10_P_3_M_0,
1963 EVEX_W_0F10_P_3_M_1,
1964 EVEX_W_0F11_P_0,
1965 EVEX_W_0F11_P_1_M_0,
1966 EVEX_W_0F11_P_1_M_1,
1967 EVEX_W_0F11_P_2,
1968 EVEX_W_0F11_P_3_M_0,
1969 EVEX_W_0F11_P_3_M_1,
1970 EVEX_W_0F12_P_0_M_0,
1971 EVEX_W_0F12_P_0_M_1,
1972 EVEX_W_0F12_P_1,
1973 EVEX_W_0F12_P_2,
1974 EVEX_W_0F12_P_3,
1975 EVEX_W_0F13_P_0,
1976 EVEX_W_0F13_P_2,
1977 EVEX_W_0F14_P_0,
1978 EVEX_W_0F14_P_2,
1979 EVEX_W_0F15_P_0,
1980 EVEX_W_0F15_P_2,
1981 EVEX_W_0F16_P_0_M_0,
1982 EVEX_W_0F16_P_0_M_1,
1983 EVEX_W_0F16_P_1,
1984 EVEX_W_0F16_P_2,
1985 EVEX_W_0F17_P_0,
1986 EVEX_W_0F17_P_2,
1987 EVEX_W_0F28_P_0,
1988 EVEX_W_0F28_P_2,
1989 EVEX_W_0F29_P_0,
1990 EVEX_W_0F29_P_2,
1991 EVEX_W_0F2A_P_1,
1992 EVEX_W_0F2A_P_3,
1993 EVEX_W_0F2B_P_0,
1994 EVEX_W_0F2B_P_2,
1995 EVEX_W_0F2E_P_0,
1996 EVEX_W_0F2E_P_2,
1997 EVEX_W_0F2F_P_0,
1998 EVEX_W_0F2F_P_2,
1999 EVEX_W_0F51_P_0,
2000 EVEX_W_0F51_P_1,
2001 EVEX_W_0F51_P_2,
2002 EVEX_W_0F51_P_3,
2003 EVEX_W_0F58_P_0,
2004 EVEX_W_0F58_P_1,
2005 EVEX_W_0F58_P_2,
2006 EVEX_W_0F58_P_3,
2007 EVEX_W_0F59_P_0,
2008 EVEX_W_0F59_P_1,
2009 EVEX_W_0F59_P_2,
2010 EVEX_W_0F59_P_3,
2011 EVEX_W_0F5A_P_0,
2012 EVEX_W_0F5A_P_1,
2013 EVEX_W_0F5A_P_2,
2014 EVEX_W_0F5A_P_3,
2015 EVEX_W_0F5B_P_0,
2016 EVEX_W_0F5B_P_1,
2017 EVEX_W_0F5B_P_2,
2018 EVEX_W_0F5C_P_0,
2019 EVEX_W_0F5C_P_1,
2020 EVEX_W_0F5C_P_2,
2021 EVEX_W_0F5C_P_3,
2022 EVEX_W_0F5D_P_0,
2023 EVEX_W_0F5D_P_1,
2024 EVEX_W_0F5D_P_2,
2025 EVEX_W_0F5D_P_3,
2026 EVEX_W_0F5E_P_0,
2027 EVEX_W_0F5E_P_1,
2028 EVEX_W_0F5E_P_2,
2029 EVEX_W_0F5E_P_3,
2030 EVEX_W_0F5F_P_0,
2031 EVEX_W_0F5F_P_1,
2032 EVEX_W_0F5F_P_2,
2033 EVEX_W_0F5F_P_3,
2034 EVEX_W_0F62_P_2,
2035 EVEX_W_0F66_P_2,
2036 EVEX_W_0F6A_P_2,
2037 EVEX_W_0F6C_P_2,
2038 EVEX_W_0F6D_P_2,
2039 EVEX_W_0F6E_P_2,
2040 EVEX_W_0F6F_P_1,
2041 EVEX_W_0F6F_P_2,
2042 EVEX_W_0F70_P_2,
2043 EVEX_W_0F72_R_2_P_2,
2044 EVEX_W_0F72_R_6_P_2,
2045 EVEX_W_0F73_R_2_P_2,
2046 EVEX_W_0F73_R_6_P_2,
2047 EVEX_W_0F76_P_2,
2048 EVEX_W_0F78_P_0,
2049 EVEX_W_0F79_P_0,
2050 EVEX_W_0F7A_P_1,
2051 EVEX_W_0F7A_P_3,
2052 EVEX_W_0F7B_P_1,
2053 EVEX_W_0F7B_P_3,
2054 EVEX_W_0F7E_P_1,
2055 EVEX_W_0F7E_P_2,
2056 EVEX_W_0F7F_P_1,
2057 EVEX_W_0F7F_P_2,
2058 EVEX_W_0FC2_P_0,
2059 EVEX_W_0FC2_P_1,
2060 EVEX_W_0FC2_P_2,
2061 EVEX_W_0FC2_P_3,
2062 EVEX_W_0FC6_P_0,
2063 EVEX_W_0FC6_P_2,
2064 EVEX_W_0FD2_P_2,
2065 EVEX_W_0FD3_P_2,
2066 EVEX_W_0FD4_P_2,
2067 EVEX_W_0FD6_P_2,
2068 EVEX_W_0FE6_P_1,
2069 EVEX_W_0FE6_P_2,
2070 EVEX_W_0FE6_P_3,
2071 EVEX_W_0FE7_P_2,
2072 EVEX_W_0FF2_P_2,
2073 EVEX_W_0FF3_P_2,
2074 EVEX_W_0FF4_P_2,
2075 EVEX_W_0FFA_P_2,
2076 EVEX_W_0FFB_P_2,
2077 EVEX_W_0FFE_P_2,
2078 EVEX_W_0F380C_P_2,
2079 EVEX_W_0F380D_P_2,
2080 EVEX_W_0F3811_P_1,
2081 EVEX_W_0F3812_P_1,
2082 EVEX_W_0F3813_P_1,
2083 EVEX_W_0F3813_P_2,
2084 EVEX_W_0F3814_P_1,
2085 EVEX_W_0F3815_P_1,
2086 EVEX_W_0F3818_P_2,
2087 EVEX_W_0F3819_P_2,
2088 EVEX_W_0F381A_P_2,
2089 EVEX_W_0F381B_P_2,
2090 EVEX_W_0F381E_P_2,
2091 EVEX_W_0F381F_P_2,
2092 EVEX_W_0F3821_P_1,
2093 EVEX_W_0F3822_P_1,
2094 EVEX_W_0F3823_P_1,
2095 EVEX_W_0F3824_P_1,
2096 EVEX_W_0F3825_P_1,
2097 EVEX_W_0F3825_P_2,
2098 EVEX_W_0F3828_P_2,
2099 EVEX_W_0F3829_P_2,
2100 EVEX_W_0F382A_P_1,
2101 EVEX_W_0F382A_P_2,
2102 EVEX_W_0F3831_P_1,
2103 EVEX_W_0F3832_P_1,
2104 EVEX_W_0F3833_P_1,
2105 EVEX_W_0F3834_P_1,
2106 EVEX_W_0F3835_P_1,
2107 EVEX_W_0F3835_P_2,
2108 EVEX_W_0F3837_P_2,
2109 EVEX_W_0F383A_P_1,
2110 EVEX_W_0F3840_P_2,
2111 EVEX_W_0F3858_P_2,
2112 EVEX_W_0F3859_P_2,
2113 EVEX_W_0F385A_P_2,
2114 EVEX_W_0F385B_P_2,
2115 EVEX_W_0F3891_P_2,
2116 EVEX_W_0F3893_P_2,
2117 EVEX_W_0F38A1_P_2,
2118 EVEX_W_0F38A3_P_2,
2119 EVEX_W_0F38C7_R_1_P_2,
2120 EVEX_W_0F38C7_R_2_P_2,
2121 EVEX_W_0F38C7_R_5_P_2,
2122 EVEX_W_0F38C7_R_6_P_2,
2123
2124 EVEX_W_0F3A00_P_2,
2125 EVEX_W_0F3A01_P_2,
2126 EVEX_W_0F3A04_P_2,
2127 EVEX_W_0F3A05_P_2,
2128 EVEX_W_0F3A08_P_2,
2129 EVEX_W_0F3A09_P_2,
2130 EVEX_W_0F3A0A_P_2,
2131 EVEX_W_0F3A0B_P_2,
2132 EVEX_W_0F3A18_P_2,
2133 EVEX_W_0F3A19_P_2,
2134 EVEX_W_0F3A1A_P_2,
2135 EVEX_W_0F3A1B_P_2,
2136 EVEX_W_0F3A1D_P_2,
2137 EVEX_W_0F3A21_P_2,
2138 EVEX_W_0F3A23_P_2,
2139 EVEX_W_0F3A38_P_2,
2140 EVEX_W_0F3A39_P_2,
2141 EVEX_W_0F3A3A_P_2,
2142 EVEX_W_0F3A3B_P_2,
2143 EVEX_W_0F3A43_P_2,
9e30b8e0
L
2144};
2145
26ca5450 2146typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2147
2148struct dis386 {
2da11e11 2149 const char *name;
ce518a5f
L
2150 struct
2151 {
2152 op_rtn rtn;
2153 int bytemode;
2154 } op[MAX_OPERANDS];
252b5132
RH
2155};
2156
2157/* Upper case letters in the instruction names here are macros.
2158 'A' => print 'b' if no register operands or suffix_always is true
2159 'B' => print 'b' if suffix_always is true
9306ca4a 2160 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2161 size prefix
ed7841b3 2162 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2163 suffix_always is true
252b5132 2164 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2165 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2166 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2167 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2168 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2169 for some of the macro letters)
9306ca4a 2170 'J' => print 'l'
42903f7f 2171 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2172 'L' => print 'l' if suffix_always is true
9d141669 2173 'M' => print 'r' if intel_mnemonic is false.
252b5132 2174 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2175 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2176 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2177 or suffix_always is true. print 'q' if rex prefix is present.
2178 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2179 is true
a35ca55a 2180 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2181 'S' => print 'w', 'l' or 'q' if suffix_always is true
6439fc28
AM
2182 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2183 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1a114b12 2184 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
a35ca55a 2185 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2186 'X' => print 's', 'd' depending on data16 prefix (for XMM)
8a72226a
L
2187 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2188 suffix_always is true.
6dd5059a 2189 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2190 '!' => change condition from true to false or from false to true.
98b528ac
L
2191 '%' => add 1 upper case letter to the macro.
2192
2193 2 upper case letter macros:
c0f3af97
L
2194 "XY" => print 'x' or 'y' if no register operands or suffix_always
2195 is true.
4b06377f
L
2196 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2197 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2198 or suffix_always is true
4b06377f
L
2199 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2200 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2201 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2202 "LW" => print 'd', 'q' depending on the VEX.W bit
52b15da3 2203
6439fc28
AM
2204 Many of the above letters print nothing in Intel mode. See "putop"
2205 for the details.
52b15da3 2206
6439fc28 2207 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2208 mnemonic strings for AT&T and Intel. */
252b5132 2209
6439fc28 2210static const struct dis386 dis386[] = {
252b5132 2211 /* 00 */
42164a71
L
2212 { "addB", { Ebh1, Gb } },
2213 { "addS", { Evh1, Gv } },
c7532693
L
2214 { "addB", { Gb, EbS } },
2215 { "addS", { Gv, EvS } },
ce518a5f
L
2216 { "addB", { AL, Ib } },
2217 { "addS", { eAX, Iv } },
4e7d34a6
L
2218 { X86_64_TABLE (X86_64_06) },
2219 { X86_64_TABLE (X86_64_07) },
252b5132 2220 /* 08 */
42164a71
L
2221 { "orB", { Ebh1, Gb } },
2222 { "orS", { Evh1, Gv } },
c7532693
L
2223 { "orB", { Gb, EbS } },
2224 { "orS", { Gv, EvS } },
ce518a5f
L
2225 { "orB", { AL, Ib } },
2226 { "orS", { eAX, Iv } },
4e7d34a6 2227 { X86_64_TABLE (X86_64_0D) },
592d1631 2228 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2229 /* 10 */
42164a71
L
2230 { "adcB", { Ebh1, Gb } },
2231 { "adcS", { Evh1, Gv } },
c7532693
L
2232 { "adcB", { Gb, EbS } },
2233 { "adcS", { Gv, EvS } },
ce518a5f
L
2234 { "adcB", { AL, Ib } },
2235 { "adcS", { eAX, Iv } },
4e7d34a6
L
2236 { X86_64_TABLE (X86_64_16) },
2237 { X86_64_TABLE (X86_64_17) },
252b5132 2238 /* 18 */
42164a71
L
2239 { "sbbB", { Ebh1, Gb } },
2240 { "sbbS", { Evh1, Gv } },
c7532693
L
2241 { "sbbB", { Gb, EbS } },
2242 { "sbbS", { Gv, EvS } },
ce518a5f
L
2243 { "sbbB", { AL, Ib } },
2244 { "sbbS", { eAX, Iv } },
4e7d34a6
L
2245 { X86_64_TABLE (X86_64_1E) },
2246 { X86_64_TABLE (X86_64_1F) },
252b5132 2247 /* 20 */
42164a71
L
2248 { "andB", { Ebh1, Gb } },
2249 { "andS", { Evh1, Gv } },
c7532693
L
2250 { "andB", { Gb, EbS } },
2251 { "andS", { Gv, EvS } },
ce518a5f
L
2252 { "andB", { AL, Ib } },
2253 { "andS", { eAX, Iv } },
592d1631 2254 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2255 { X86_64_TABLE (X86_64_27) },
252b5132 2256 /* 28 */
42164a71
L
2257 { "subB", { Ebh1, Gb } },
2258 { "subS", { Evh1, Gv } },
c7532693
L
2259 { "subB", { Gb, EbS } },
2260 { "subS", { Gv, EvS } },
ce518a5f
L
2261 { "subB", { AL, Ib } },
2262 { "subS", { eAX, Iv } },
592d1631 2263 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2264 { X86_64_TABLE (X86_64_2F) },
252b5132 2265 /* 30 */
42164a71
L
2266 { "xorB", { Ebh1, Gb } },
2267 { "xorS", { Evh1, Gv } },
c7532693
L
2268 { "xorB", { Gb, EbS } },
2269 { "xorS", { Gv, EvS } },
ce518a5f
L
2270 { "xorB", { AL, Ib } },
2271 { "xorS", { eAX, Iv } },
592d1631 2272 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2273 { X86_64_TABLE (X86_64_37) },
252b5132 2274 /* 38 */
ce518a5f
L
2275 { "cmpB", { Eb, Gb } },
2276 { "cmpS", { Ev, Gv } },
c7532693
L
2277 { "cmpB", { Gb, EbS } },
2278 { "cmpS", { Gv, EvS } },
ce518a5f
L
2279 { "cmpB", { AL, Ib } },
2280 { "cmpS", { eAX, Iv } },
592d1631 2281 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2282 { X86_64_TABLE (X86_64_3F) },
252b5132 2283 /* 40 */
ce518a5f
L
2284 { "inc{S|}", { RMeAX } },
2285 { "inc{S|}", { RMeCX } },
2286 { "inc{S|}", { RMeDX } },
2287 { "inc{S|}", { RMeBX } },
2288 { "inc{S|}", { RMeSP } },
2289 { "inc{S|}", { RMeBP } },
2290 { "inc{S|}", { RMeSI } },
2291 { "inc{S|}", { RMeDI } },
252b5132 2292 /* 48 */
ce518a5f
L
2293 { "dec{S|}", { RMeAX } },
2294 { "dec{S|}", { RMeCX } },
2295 { "dec{S|}", { RMeDX } },
2296 { "dec{S|}", { RMeBX } },
2297 { "dec{S|}", { RMeSP } },
2298 { "dec{S|}", { RMeBP } },
2299 { "dec{S|}", { RMeSI } },
2300 { "dec{S|}", { RMeDI } },
252b5132 2301 /* 50 */
ce518a5f
L
2302 { "pushV", { RMrAX } },
2303 { "pushV", { RMrCX } },
2304 { "pushV", { RMrDX } },
2305 { "pushV", { RMrBX } },
2306 { "pushV", { RMrSP } },
2307 { "pushV", { RMrBP } },
2308 { "pushV", { RMrSI } },
2309 { "pushV", { RMrDI } },
252b5132 2310 /* 58 */
ce518a5f
L
2311 { "popV", { RMrAX } },
2312 { "popV", { RMrCX } },
2313 { "popV", { RMrDX } },
2314 { "popV", { RMrBX } },
2315 { "popV", { RMrSP } },
2316 { "popV", { RMrBP } },
2317 { "popV", { RMrSI } },
2318 { "popV", { RMrDI } },
252b5132 2319 /* 60 */
4e7d34a6
L
2320 { X86_64_TABLE (X86_64_60) },
2321 { X86_64_TABLE (X86_64_61) },
2322 { X86_64_TABLE (X86_64_62) },
2323 { X86_64_TABLE (X86_64_63) },
592d1631
L
2324 { Bad_Opcode }, /* seg fs */
2325 { Bad_Opcode }, /* seg gs */
2326 { Bad_Opcode }, /* op size prefix */
2327 { Bad_Opcode }, /* adr size prefix */
252b5132 2328 /* 68 */
d9e3625e 2329 { "pushT", { sIv } },
ce518a5f 2330 { "imulS", { Gv, Ev, Iv } },
e3949f17 2331 { "pushT", { sIbT } },
ce518a5f 2332 { "imulS", { Gv, Ev, sIb } },
7c52e0e8 2333 { "ins{b|}", { Ybr, indirDX } },
4e7d34a6 2334 { X86_64_TABLE (X86_64_6D) },
7c52e0e8 2335 { "outs{b|}", { indirDXr, Xb } },
4e7d34a6 2336 { X86_64_TABLE (X86_64_6F) },
252b5132 2337 /* 70 */
7e8b059b
L
2338 { "joH", { Jb, BND, cond_jump_flag } },
2339 { "jnoH", { Jb, BND, cond_jump_flag } },
2340 { "jbH", { Jb, BND, cond_jump_flag } },
2341 { "jaeH", { Jb, BND, cond_jump_flag } },
2342 { "jeH", { Jb, BND, cond_jump_flag } },
2343 { "jneH", { Jb, BND, cond_jump_flag } },
2344 { "jbeH", { Jb, BND, cond_jump_flag } },
2345 { "jaH", { Jb, BND, cond_jump_flag } },
252b5132 2346 /* 78 */
7e8b059b
L
2347 { "jsH", { Jb, BND, cond_jump_flag } },
2348 { "jnsH", { Jb, BND, cond_jump_flag } },
2349 { "jpH", { Jb, BND, cond_jump_flag } },
2350 { "jnpH", { Jb, BND, cond_jump_flag } },
2351 { "jlH", { Jb, BND, cond_jump_flag } },
2352 { "jgeH", { Jb, BND, cond_jump_flag } },
2353 { "jleH", { Jb, BND, cond_jump_flag } },
2354 { "jgH", { Jb, BND, cond_jump_flag } },
252b5132 2355 /* 80 */
1ceb70f8
L
2356 { REG_TABLE (REG_80) },
2357 { REG_TABLE (REG_81) },
592d1631 2358 { Bad_Opcode },
1ceb70f8 2359 { REG_TABLE (REG_82) },
ce518a5f
L
2360 { "testB", { Eb, Gb } },
2361 { "testS", { Ev, Gv } },
42164a71
L
2362 { "xchgB", { Ebh2, Gb } },
2363 { "xchgS", { Evh2, Gv } },
252b5132 2364 /* 88 */
42164a71
L
2365 { "movB", { Ebh3, Gb } },
2366 { "movS", { Evh3, Gv } },
b6169b20
L
2367 { "movB", { Gb, EbS } },
2368 { "movS", { Gv, EvS } },
ce518a5f 2369 { "movD", { Sv, Sw } },
1ceb70f8 2370 { MOD_TABLE (MOD_8D) },
ce518a5f 2371 { "movD", { Sw, Sv } },
1ceb70f8 2372 { REG_TABLE (REG_8F) },
252b5132 2373 /* 90 */
1ceb70f8 2374 { PREFIX_TABLE (PREFIX_90) },
ce518a5f
L
2375 { "xchgS", { RMeCX, eAX } },
2376 { "xchgS", { RMeDX, eAX } },
2377 { "xchgS", { RMeBX, eAX } },
2378 { "xchgS", { RMeSP, eAX } },
2379 { "xchgS", { RMeBP, eAX } },
2380 { "xchgS", { RMeSI, eAX } },
2381 { "xchgS", { RMeDI, eAX } },
252b5132 2382 /* 98 */
7c52e0e8
L
2383 { "cW{t|}R", { XX } },
2384 { "cR{t|}O", { XX } },
4e7d34a6 2385 { X86_64_TABLE (X86_64_9A) },
592d1631 2386 { Bad_Opcode }, /* fwait */
ce518a5f
L
2387 { "pushfT", { XX } },
2388 { "popfT", { XX } },
7c52e0e8
L
2389 { "sahf", { XX } },
2390 { "lahf", { XX } },
252b5132 2391 /* a0 */
4b06377f
L
2392 { "mov%LB", { AL, Ob } },
2393 { "mov%LS", { eAX, Ov } },
2394 { "mov%LB", { Ob, AL } },
2395 { "mov%LS", { Ov, eAX } },
7c52e0e8
L
2396 { "movs{b|}", { Ybr, Xb } },
2397 { "movs{R|}", { Yvr, Xv } },
2398 { "cmps{b|}", { Xb, Yb } },
2399 { "cmps{R|}", { Xv, Yv } },
252b5132 2400 /* a8 */
ce518a5f
L
2401 { "testB", { AL, Ib } },
2402 { "testS", { eAX, Iv } },
2403 { "stosB", { Ybr, AL } },
2404 { "stosS", { Yvr, eAX } },
2405 { "lodsB", { ALr, Xb } },
2406 { "lodsS", { eAXr, Xv } },
2407 { "scasB", { AL, Yb } },
2408 { "scasS", { eAX, Yv } },
252b5132 2409 /* b0 */
ce518a5f
L
2410 { "movB", { RMAL, Ib } },
2411 { "movB", { RMCL, Ib } },
2412 { "movB", { RMDL, Ib } },
2413 { "movB", { RMBL, Ib } },
2414 { "movB", { RMAH, Ib } },
2415 { "movB", { RMCH, Ib } },
2416 { "movB", { RMDH, Ib } },
2417 { "movB", { RMBH, Ib } },
252b5132 2418 /* b8 */
4b06377f
L
2419 { "mov%LV", { RMeAX, Iv64 } },
2420 { "mov%LV", { RMeCX, Iv64 } },
2421 { "mov%LV", { RMeDX, Iv64 } },
2422 { "mov%LV", { RMeBX, Iv64 } },
2423 { "mov%LV", { RMeSP, Iv64 } },
2424 { "mov%LV", { RMeBP, Iv64 } },
2425 { "mov%LV", { RMeSI, Iv64 } },
2426 { "mov%LV", { RMeDI, Iv64 } },
252b5132 2427 /* c0 */
1ceb70f8
L
2428 { REG_TABLE (REG_C0) },
2429 { REG_TABLE (REG_C1) },
7e8b059b
L
2430 { "retT", { Iw, BND } },
2431 { "retT", { BND } },
4e7d34a6
L
2432 { X86_64_TABLE (X86_64_C4) },
2433 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2434 { REG_TABLE (REG_C6) },
2435 { REG_TABLE (REG_C7) },
252b5132 2436 /* c8 */
ce518a5f
L
2437 { "enterT", { Iw, Ib } },
2438 { "leaveT", { XX } },
ddab3d59
JB
2439 { "Jret{|f}P", { Iw } },
2440 { "Jret{|f}P", { XX } },
ce518a5f
L
2441 { "int3", { XX } },
2442 { "int", { Ib } },
4e7d34a6 2443 { X86_64_TABLE (X86_64_CE) },
ce518a5f 2444 { "iretP", { XX } },
252b5132 2445 /* d0 */
1ceb70f8
L
2446 { REG_TABLE (REG_D0) },
2447 { REG_TABLE (REG_D1) },
2448 { REG_TABLE (REG_D2) },
2449 { REG_TABLE (REG_D3) },
4e7d34a6
L
2450 { X86_64_TABLE (X86_64_D4) },
2451 { X86_64_TABLE (X86_64_D5) },
592d1631 2452 { Bad_Opcode },
ce518a5f 2453 { "xlat", { DSBX } },
252b5132
RH
2454 /* d8 */
2455 { FLOAT },
2456 { FLOAT },
2457 { FLOAT },
2458 { FLOAT },
2459 { FLOAT },
2460 { FLOAT },
2461 { FLOAT },
2462 { FLOAT },
2463 /* e0 */
ce518a5f
L
2464 { "loopneFH", { Jb, XX, loop_jcxz_flag } },
2465 { "loopeFH", { Jb, XX, loop_jcxz_flag } },
2466 { "loopFH", { Jb, XX, loop_jcxz_flag } },
2467 { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
2468 { "inB", { AL, Ib } },
2469 { "inG", { zAX, Ib } },
2470 { "outB", { Ib, AL } },
2471 { "outG", { Ib, zAX } },
252b5132 2472 /* e8 */
7e8b059b
L
2473 { "callT", { Jv, BND } },
2474 { "jmpT", { Jv, BND } },
4e7d34a6 2475 { X86_64_TABLE (X86_64_EA) },
7e8b059b 2476 { "jmp", { Jb, BND } },
ce518a5f
L
2477 { "inB", { AL, indirDX } },
2478 { "inG", { zAX, indirDX } },
2479 { "outB", { indirDX, AL } },
2480 { "outG", { indirDX, zAX } },
252b5132 2481 /* f0 */
592d1631 2482 { Bad_Opcode }, /* lock prefix */
ce518a5f 2483 { "icebp", { XX } },
592d1631
L
2484 { Bad_Opcode }, /* repne */
2485 { Bad_Opcode }, /* repz */
ce518a5f
L
2486 { "hlt", { XX } },
2487 { "cmc", { XX } },
1ceb70f8
L
2488 { REG_TABLE (REG_F6) },
2489 { REG_TABLE (REG_F7) },
252b5132 2490 /* f8 */
ce518a5f
L
2491 { "clc", { XX } },
2492 { "stc", { XX } },
2493 { "cli", { XX } },
2494 { "sti", { XX } },
2495 { "cld", { XX } },
2496 { "std", { XX } },
1ceb70f8
L
2497 { REG_TABLE (REG_FE) },
2498 { REG_TABLE (REG_FF) },
252b5132
RH
2499};
2500
6439fc28 2501static const struct dis386 dis386_twobyte[] = {
252b5132 2502 /* 00 */
1ceb70f8
L
2503 { REG_TABLE (REG_0F00 ) },
2504 { REG_TABLE (REG_0F01 ) },
ce518a5f
L
2505 { "larS", { Gv, Ew } },
2506 { "lslS", { Gv, Ew } },
592d1631 2507 { Bad_Opcode },
ce518a5f
L
2508 { "syscall", { XX } },
2509 { "clts", { XX } },
2510 { "sysretP", { XX } },
252b5132 2511 /* 08 */
ce518a5f
L
2512 { "invd", { XX } },
2513 { "wbinvd", { XX } },
592d1631 2514 { Bad_Opcode },
b414985b 2515 { "ud2", { XX } },
592d1631 2516 { Bad_Opcode },
b5b1fc4f 2517 { REG_TABLE (REG_0F0D) },
ce518a5f
L
2518 { "femms", { XX } },
2519 { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
252b5132 2520 /* 10 */
1ceb70f8
L
2521 { PREFIX_TABLE (PREFIX_0F10) },
2522 { PREFIX_TABLE (PREFIX_0F11) },
2523 { PREFIX_TABLE (PREFIX_0F12) },
2524 { MOD_TABLE (MOD_0F13) },
f2a421c4
L
2525 { "unpcklpX", { XM, EXx } },
2526 { "unpckhpX", { XM, EXx } },
1ceb70f8
L
2527 { PREFIX_TABLE (PREFIX_0F16) },
2528 { MOD_TABLE (MOD_0F17) },
252b5132 2529 /* 18 */
1ceb70f8 2530 { REG_TABLE (REG_0F18) },
b5b1fc4f 2531 { "nopQ", { Ev } },
7e8b059b
L
2532 { PREFIX_TABLE (PREFIX_0F1A) },
2533 { PREFIX_TABLE (PREFIX_0F1B) },
b5b1fc4f
L
2534 { "nopQ", { Ev } },
2535 { "nopQ", { Ev } },
2536 { "nopQ", { Ev } },
ce518a5f 2537 { "nopQ", { Ev } },
252b5132 2538 /* 20 */
1ceb70f8
L
2539 { MOD_TABLE (MOD_0F20) },
2540 { MOD_TABLE (MOD_0F21) },
2541 { MOD_TABLE (MOD_0F22) },
2542 { MOD_TABLE (MOD_0F23) },
2543 { MOD_TABLE (MOD_0F24) },
592d1631 2544 { Bad_Opcode },
1ceb70f8 2545 { MOD_TABLE (MOD_0F26) },
592d1631 2546 { Bad_Opcode },
252b5132 2547 /* 28 */
09a2c6cf 2548 { "movapX", { XM, EXx } },
b6169b20 2549 { "movapX", { EXxS, XM } },
1ceb70f8
L
2550 { PREFIX_TABLE (PREFIX_0F2A) },
2551 { PREFIX_TABLE (PREFIX_0F2B) },
2552 { PREFIX_TABLE (PREFIX_0F2C) },
2553 { PREFIX_TABLE (PREFIX_0F2D) },
2554 { PREFIX_TABLE (PREFIX_0F2E) },
2555 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2556 /* 30 */
ce518a5f
L
2557 { "wrmsr", { XX } },
2558 { "rdtsc", { XX } },
2559 { "rdmsr", { XX } },
2560 { "rdpmc", { XX } },
2561 { "sysenter", { XX } },
2562 { "sysexit", { XX } },
592d1631 2563 { Bad_Opcode },
47dd174c 2564 { "getsec", { XX } },
252b5132 2565 /* 38 */
4e7d34a6 2566 { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
592d1631 2567 { Bad_Opcode },
4e7d34a6 2568 { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
592d1631
L
2569 { Bad_Opcode },
2570 { Bad_Opcode },
2571 { Bad_Opcode },
2572 { Bad_Opcode },
2573 { Bad_Opcode },
252b5132 2574 /* 40 */
b19d5385
JB
2575 { "cmovoS", { Gv, Ev } },
2576 { "cmovnoS", { Gv, Ev } },
2577 { "cmovbS", { Gv, Ev } },
2578 { "cmovaeS", { Gv, Ev } },
2579 { "cmoveS", { Gv, Ev } },
2580 { "cmovneS", { Gv, Ev } },
2581 { "cmovbeS", { Gv, Ev } },
2582 { "cmovaS", { Gv, Ev } },
252b5132 2583 /* 48 */
b19d5385
JB
2584 { "cmovsS", { Gv, Ev } },
2585 { "cmovnsS", { Gv, Ev } },
2586 { "cmovpS", { Gv, Ev } },
2587 { "cmovnpS", { Gv, Ev } },
2588 { "cmovlS", { Gv, Ev } },
2589 { "cmovgeS", { Gv, Ev } },
2590 { "cmovleS", { Gv, Ev } },
2591 { "cmovgS", { Gv, Ev } },
252b5132 2592 /* 50 */
75c135a8 2593 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2594 { PREFIX_TABLE (PREFIX_0F51) },
2595 { PREFIX_TABLE (PREFIX_0F52) },
2596 { PREFIX_TABLE (PREFIX_0F53) },
09a2c6cf
L
2597 { "andpX", { XM, EXx } },
2598 { "andnpX", { XM, EXx } },
2599 { "orpX", { XM, EXx } },
2600 { "xorpX", { XM, EXx } },
252b5132 2601 /* 58 */
1ceb70f8
L
2602 { PREFIX_TABLE (PREFIX_0F58) },
2603 { PREFIX_TABLE (PREFIX_0F59) },
2604 { PREFIX_TABLE (PREFIX_0F5A) },
2605 { PREFIX_TABLE (PREFIX_0F5B) },
2606 { PREFIX_TABLE (PREFIX_0F5C) },
2607 { PREFIX_TABLE (PREFIX_0F5D) },
2608 { PREFIX_TABLE (PREFIX_0F5E) },
2609 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2610 /* 60 */
1ceb70f8
L
2611 { PREFIX_TABLE (PREFIX_0F60) },
2612 { PREFIX_TABLE (PREFIX_0F61) },
2613 { PREFIX_TABLE (PREFIX_0F62) },
ce518a5f
L
2614 { "packsswb", { MX, EM } },
2615 { "pcmpgtb", { MX, EM } },
2616 { "pcmpgtw", { MX, EM } },
2617 { "pcmpgtd", { MX, EM } },
2618 { "packuswb", { MX, EM } },
252b5132 2619 /* 68 */
ce518a5f
L
2620 { "punpckhbw", { MX, EM } },
2621 { "punpckhwd", { MX, EM } },
2622 { "punpckhdq", { MX, EM } },
2623 { "packssdw", { MX, EM } },
1ceb70f8
L
2624 { PREFIX_TABLE (PREFIX_0F6C) },
2625 { PREFIX_TABLE (PREFIX_0F6D) },
231af070 2626 { "movK", { MX, Edq } },
1ceb70f8 2627 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2628 /* 70 */
1ceb70f8
L
2629 { PREFIX_TABLE (PREFIX_0F70) },
2630 { REG_TABLE (REG_0F71) },
2631 { REG_TABLE (REG_0F72) },
2632 { REG_TABLE (REG_0F73) },
ce518a5f
L
2633 { "pcmpeqb", { MX, EM } },
2634 { "pcmpeqw", { MX, EM } },
2635 { "pcmpeqd", { MX, EM } },
2636 { "emms", { XX } },
252b5132 2637 /* 78 */
1ceb70f8
L
2638 { PREFIX_TABLE (PREFIX_0F78) },
2639 { PREFIX_TABLE (PREFIX_0F79) },
4e7d34a6 2640 { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
592d1631 2641 { Bad_Opcode },
1ceb70f8
L
2642 { PREFIX_TABLE (PREFIX_0F7C) },
2643 { PREFIX_TABLE (PREFIX_0F7D) },
2644 { PREFIX_TABLE (PREFIX_0F7E) },
2645 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2646 /* 80 */
7e8b059b
L
2647 { "joH", { Jv, BND, cond_jump_flag } },
2648 { "jnoH", { Jv, BND, cond_jump_flag } },
2649 { "jbH", { Jv, BND, cond_jump_flag } },
2650 { "jaeH", { Jv, BND, cond_jump_flag } },
2651 { "jeH", { Jv, BND, cond_jump_flag } },
2652 { "jneH", { Jv, BND, cond_jump_flag } },
2653 { "jbeH", { Jv, BND, cond_jump_flag } },
2654 { "jaH", { Jv, BND, cond_jump_flag } },
252b5132 2655 /* 88 */
7e8b059b
L
2656 { "jsH", { Jv, BND, cond_jump_flag } },
2657 { "jnsH", { Jv, BND, cond_jump_flag } },
2658 { "jpH", { Jv, BND, cond_jump_flag } },
2659 { "jnpH", { Jv, BND, cond_jump_flag } },
2660 { "jlH", { Jv, BND, cond_jump_flag } },
2661 { "jgeH", { Jv, BND, cond_jump_flag } },
2662 { "jleH", { Jv, BND, cond_jump_flag } },
2663 { "jgH", { Jv, BND, cond_jump_flag } },
252b5132 2664 /* 90 */
ce518a5f
L
2665 { "seto", { Eb } },
2666 { "setno", { Eb } },
2667 { "setb", { Eb } },
2668 { "setae", { Eb } },
2669 { "sete", { Eb } },
2670 { "setne", { Eb } },
2671 { "setbe", { Eb } },
2672 { "seta", { Eb } },
252b5132 2673 /* 98 */
ce518a5f
L
2674 { "sets", { Eb } },
2675 { "setns", { Eb } },
2676 { "setp", { Eb } },
2677 { "setnp", { Eb } },
2678 { "setl", { Eb } },
2679 { "setge", { Eb } },
2680 { "setle", { Eb } },
2681 { "setg", { Eb } },
252b5132 2682 /* a0 */
ce518a5f
L
2683 { "pushT", { fs } },
2684 { "popT", { fs } },
2685 { "cpuid", { XX } },
2686 { "btS", { Ev, Gv } },
2687 { "shldS", { Ev, Gv, Ib } },
2688 { "shldS", { Ev, Gv, CL } },
1ceb70f8
L
2689 { REG_TABLE (REG_0FA6) },
2690 { REG_TABLE (REG_0FA7) },
252b5132 2691 /* a8 */
ce518a5f
L
2692 { "pushT", { gs } },
2693 { "popT", { gs } },
2694 { "rsm", { XX } },
42164a71 2695 { "btsS", { Evh1, Gv } },
ce518a5f
L
2696 { "shrdS", { Ev, Gv, Ib } },
2697 { "shrdS", { Ev, Gv, CL } },
1ceb70f8 2698 { REG_TABLE (REG_0FAE) },
ce518a5f 2699 { "imulS", { Gv, Ev } },
252b5132 2700 /* b0 */
42164a71
L
2701 { "cmpxchgB", { Ebh1, Gb } },
2702 { "cmpxchgS", { Evh1, Gv } },
1ceb70f8 2703 { MOD_TABLE (MOD_0FB2) },
42164a71 2704 { "btrS", { Evh1, Gv } },
1ceb70f8
L
2705 { MOD_TABLE (MOD_0FB4) },
2706 { MOD_TABLE (MOD_0FB5) },
7c52e0e8
L
2707 { "movz{bR|x}", { Gv, Eb } },
2708 { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
252b5132 2709 /* b8 */
1ceb70f8 2710 { PREFIX_TABLE (PREFIX_0FB8) },
b414985b 2711 { "ud1", { XX } },
1ceb70f8 2712 { REG_TABLE (REG_0FBA) },
42164a71 2713 { "btcS", { Evh1, Gv } },
f12dc422 2714 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2715 { PREFIX_TABLE (PREFIX_0FBD) },
7c52e0e8
L
2716 { "movs{bR|x}", { Gv, Eb } },
2717 { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
252b5132 2718 /* c0 */
42164a71
L
2719 { "xaddB", { Ebh1, Gb } },
2720 { "xaddS", { Evh1, Gv } },
1ceb70f8 2721 { PREFIX_TABLE (PREFIX_0FC2) },
4ee52178 2722 { PREFIX_TABLE (PREFIX_0FC3) },
ce518a5f
L
2723 { "pinsrw", { MX, Edqw, Ib } },
2724 { "pextrw", { Gdq, MS, Ib } },
09a2c6cf 2725 { "shufpX", { XM, EXx, Ib } },
1ceb70f8 2726 { REG_TABLE (REG_0FC7) },
252b5132 2727 /* c8 */
ce518a5f
L
2728 { "bswap", { RMeAX } },
2729 { "bswap", { RMeCX } },
2730 { "bswap", { RMeDX } },
2731 { "bswap", { RMeBX } },
2732 { "bswap", { RMeSP } },
2733 { "bswap", { RMeBP } },
2734 { "bswap", { RMeSI } },
2735 { "bswap", { RMeDI } },
252b5132 2736 /* d0 */
1ceb70f8 2737 { PREFIX_TABLE (PREFIX_0FD0) },
ce518a5f
L
2738 { "psrlw", { MX, EM } },
2739 { "psrld", { MX, EM } },
2740 { "psrlq", { MX, EM } },
2741 { "paddq", { MX, EM } },
2742 { "pmullw", { MX, EM } },
1ceb70f8 2743 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2744 { MOD_TABLE (MOD_0FD7) },
252b5132 2745 /* d8 */
ce518a5f
L
2746 { "psubusb", { MX, EM } },
2747 { "psubusw", { MX, EM } },
2748 { "pminub", { MX, EM } },
2749 { "pand", { MX, EM } },
2750 { "paddusb", { MX, EM } },
2751 { "paddusw", { MX, EM } },
2752 { "pmaxub", { MX, EM } },
2753 { "pandn", { MX, EM } },
252b5132 2754 /* e0 */
ce518a5f
L
2755 { "pavgb", { MX, EM } },
2756 { "psraw", { MX, EM } },
2757 { "psrad", { MX, EM } },
2758 { "pavgw", { MX, EM } },
2759 { "pmulhuw", { MX, EM } },
2760 { "pmulhw", { MX, EM } },
1ceb70f8
L
2761 { PREFIX_TABLE (PREFIX_0FE6) },
2762 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2763 /* e8 */
ce518a5f
L
2764 { "psubsb", { MX, EM } },
2765 { "psubsw", { MX, EM } },
2766 { "pminsw", { MX, EM } },
2767 { "por", { MX, EM } },
2768 { "paddsb", { MX, EM } },
2769 { "paddsw", { MX, EM } },
2770 { "pmaxsw", { MX, EM } },
2771 { "pxor", { MX, EM } },
252b5132 2772 /* f0 */
1ceb70f8 2773 { PREFIX_TABLE (PREFIX_0FF0) },
ce518a5f
L
2774 { "psllw", { MX, EM } },
2775 { "pslld", { MX, EM } },
2776 { "psllq", { MX, EM } },
2777 { "pmuludq", { MX, EM } },
2778 { "pmaddwd", { MX, EM } },
2779 { "psadbw", { MX, EM } },
1ceb70f8 2780 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2781 /* f8 */
ce518a5f
L
2782 { "psubb", { MX, EM } },
2783 { "psubw", { MX, EM } },
2784 { "psubd", { MX, EM } },
2785 { "psubq", { MX, EM } },
2786 { "paddb", { MX, EM } },
2787 { "paddw", { MX, EM } },
2788 { "paddd", { MX, EM } },
592d1631 2789 { Bad_Opcode },
252b5132
RH
2790};
2791
2792static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2793 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2794 /* ------------------------------- */
2795 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2796 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2797 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2798 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2799 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2800 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2801 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2802 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2803 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2804 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2805 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2806 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2807 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2808 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2809 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2810 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2811 /* ------------------------------- */
2812 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2813};
2814
2815static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2816 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2817 /* ------------------------------- */
252b5132 2818 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2819 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2820 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2821 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2822 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2823 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2824 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2825 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2826 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2827 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2828 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
050dfa73 2829 /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
252b5132 2830 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2831 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2832 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
ca164297 2833 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
c608c12e
AM
2834 /* ------------------------------- */
2835 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2836};
2837
252b5132
RH
2838static char obuf[100];
2839static char *obufp;
ea397f5b 2840static char *mnemonicendp;
252b5132
RH
2841static char scratchbuf[100];
2842static unsigned char *start_codep;
2843static unsigned char *insn_codep;
2844static unsigned char *codep;
f16cd0d5
L
2845static int last_lock_prefix;
2846static int last_repz_prefix;
2847static int last_repnz_prefix;
2848static int last_data_prefix;
2849static int last_addr_prefix;
2850static int last_rex_prefix;
2851static int last_seg_prefix;
2852#define MAX_CODE_LENGTH 15
2853/* We can up to 14 prefixes since the maximum instruction length is
2854 15bytes. */
2855static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2856static disassemble_info *the_info;
7967e09e
L
2857static struct
2858 {
2859 int mod;
7967e09e 2860 int reg;
484c222e 2861 int rm;
7967e09e
L
2862 }
2863modrm;
4bba6815 2864static unsigned char need_modrm;
dfc8cf43
L
2865static struct
2866 {
2867 int scale;
2868 int index;
2869 int base;
2870 }
2871sib;
c0f3af97
L
2872static struct
2873 {
2874 int register_specifier;
2875 int length;
2876 int prefix;
2877 int w;
43234a1e
L
2878 int evex;
2879 int r;
2880 int v;
2881 int mask_register_specifier;
2882 int zeroing;
2883 int ll;
2884 int b;
c0f3af97
L
2885 }
2886vex;
2887static unsigned char need_vex;
2888static unsigned char need_vex_reg;
dae39acc 2889static unsigned char vex_w_done;
252b5132 2890
ea397f5b
L
2891struct op
2892 {
2893 const char *name;
2894 unsigned int len;
2895 };
2896
4bba6815
AM
2897/* If we are accessing mod/rm/reg without need_modrm set, then the
2898 values are stale. Hitting this abort likely indicates that you
2899 need to update onebyte_has_modrm or twobyte_has_modrm. */
2900#define MODRM_CHECK if (!need_modrm) abort ()
2901
d708bcba
AM
2902static const char **names64;
2903static const char **names32;
2904static const char **names16;
2905static const char **names8;
2906static const char **names8rex;
2907static const char **names_seg;
db51cc60
L
2908static const char *index64;
2909static const char *index32;
d708bcba 2910static const char **index16;
7e8b059b 2911static const char **names_bnd;
d708bcba
AM
2912
2913static const char *intel_names64[] = {
2914 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2915 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2916};
2917static const char *intel_names32[] = {
2918 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2919 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2920};
2921static const char *intel_names16[] = {
2922 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2923 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2924};
2925static const char *intel_names8[] = {
2926 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2927};
2928static const char *intel_names8rex[] = {
2929 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2930 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2931};
2932static const char *intel_names_seg[] = {
2933 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2934};
db51cc60
L
2935static const char *intel_index64 = "riz";
2936static const char *intel_index32 = "eiz";
d708bcba
AM
2937static const char *intel_index16[] = {
2938 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2939};
2940
2941static const char *att_names64[] = {
2942 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
2943 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2944};
d708bcba
AM
2945static const char *att_names32[] = {
2946 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 2947 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 2948};
d708bcba
AM
2949static const char *att_names16[] = {
2950 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 2951 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 2952};
d708bcba
AM
2953static const char *att_names8[] = {
2954 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 2955};
d708bcba
AM
2956static const char *att_names8rex[] = {
2957 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
2958 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2959};
d708bcba
AM
2960static const char *att_names_seg[] = {
2961 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 2962};
db51cc60
L
2963static const char *att_index64 = "%riz";
2964static const char *att_index32 = "%eiz";
d708bcba
AM
2965static const char *att_index16[] = {
2966 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
2967};
2968
b9733481
L
2969static const char **names_mm;
2970static const char *intel_names_mm[] = {
2971 "mm0", "mm1", "mm2", "mm3",
2972 "mm4", "mm5", "mm6", "mm7"
2973};
2974static const char *att_names_mm[] = {
2975 "%mm0", "%mm1", "%mm2", "%mm3",
2976 "%mm4", "%mm5", "%mm6", "%mm7"
2977};
2978
7e8b059b
L
2979static const char *intel_names_bnd[] = {
2980 "bnd0", "bnd1", "bnd2", "bnd3"
2981};
2982
2983static const char *att_names_bnd[] = {
2984 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
2985};
2986
b9733481
L
2987static const char **names_xmm;
2988static const char *intel_names_xmm[] = {
2989 "xmm0", "xmm1", "xmm2", "xmm3",
2990 "xmm4", "xmm5", "xmm6", "xmm7",
2991 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
2992 "xmm12", "xmm13", "xmm14", "xmm15",
2993 "xmm16", "xmm17", "xmm18", "xmm19",
2994 "xmm20", "xmm21", "xmm22", "xmm23",
2995 "xmm24", "xmm25", "xmm26", "xmm27",
2996 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
2997};
2998static const char *att_names_xmm[] = {
2999 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3000 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3001 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3002 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3003 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3004 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3005 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3006 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3007};
3008
3009static const char **names_ymm;
3010static const char *intel_names_ymm[] = {
3011 "ymm0", "ymm1", "ymm2", "ymm3",
3012 "ymm4", "ymm5", "ymm6", "ymm7",
3013 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3014 "ymm12", "ymm13", "ymm14", "ymm15",
3015 "ymm16", "ymm17", "ymm18", "ymm19",
3016 "ymm20", "ymm21", "ymm22", "ymm23",
3017 "ymm24", "ymm25", "ymm26", "ymm27",
3018 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3019};
3020static const char *att_names_ymm[] = {
3021 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3022 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3023 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3024 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3025 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3026 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3027 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3028 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3029};
3030
3031static const char **names_zmm;
3032static const char *intel_names_zmm[] = {
3033 "zmm0", "zmm1", "zmm2", "zmm3",
3034 "zmm4", "zmm5", "zmm6", "zmm7",
3035 "zmm8", "zmm9", "zmm10", "zmm11",
3036 "zmm12", "zmm13", "zmm14", "zmm15",
3037 "zmm16", "zmm17", "zmm18", "zmm19",
3038 "zmm20", "zmm21", "zmm22", "zmm23",
3039 "zmm24", "zmm25", "zmm26", "zmm27",
3040 "zmm28", "zmm29", "zmm30", "zmm31"
3041};
3042static const char *att_names_zmm[] = {
3043 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3044 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3045 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3046 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3047 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3048 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3049 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3050 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3051};
3052
3053static const char **names_mask;
3054static const char *intel_names_mask[] = {
3055 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3056};
3057static const char *att_names_mask[] = {
3058 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3059};
3060
3061static const char *names_rounding[] =
3062{
3063 "{rn-sae}",
3064 "{rd-sae}",
3065 "{ru-sae}",
3066 "{rz-sae}"
b9733481
L
3067};
3068
1ceb70f8
L
3069static const struct dis386 reg_table[][8] = {
3070 /* REG_80 */
252b5132 3071 {
42164a71
L
3072 { "addA", { Ebh1, Ib } },
3073 { "orA", { Ebh1, Ib } },
3074 { "adcA", { Ebh1, Ib } },
3075 { "sbbA", { Ebh1, Ib } },
3076 { "andA", { Ebh1, Ib } },
3077 { "subA", { Ebh1, Ib } },
3078 { "xorA", { Ebh1, Ib } },
ce518a5f 3079 { "cmpA", { Eb, Ib } },
252b5132 3080 },
1ceb70f8 3081 /* REG_81 */
252b5132 3082 {
42164a71
L
3083 { "addQ", { Evh1, Iv } },
3084 { "orQ", { Evh1, Iv } },
3085 { "adcQ", { Evh1, Iv } },
3086 { "sbbQ", { Evh1, Iv } },
3087 { "andQ", { Evh1, Iv } },
3088 { "subQ", { Evh1, Iv } },
3089 { "xorQ", { Evh1, Iv } },
ce518a5f 3090 { "cmpQ", { Ev, Iv } },
252b5132 3091 },
1ceb70f8 3092 /* REG_82 */
252b5132 3093 {
42164a71
L
3094 { "addQ", { Evh1, sIb } },
3095 { "orQ", { Evh1, sIb } },
3096 { "adcQ", { Evh1, sIb } },
3097 { "sbbQ", { Evh1, sIb } },
3098 { "andQ", { Evh1, sIb } },
3099 { "subQ", { Evh1, sIb } },
3100 { "xorQ", { Evh1, sIb } },
ce518a5f 3101 { "cmpQ", { Ev, sIb } },
252b5132 3102 },
1ceb70f8 3103 /* REG_8F */
4e7d34a6
L
3104 {
3105 { "popU", { stackEv } },
c48244a5 3106 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3107 { Bad_Opcode },
3108 { Bad_Opcode },
3109 { Bad_Opcode },
f88c9eb0 3110 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3111 },
1ceb70f8 3112 /* REG_C0 */
252b5132 3113 {
ce518a5f
L
3114 { "rolA", { Eb, Ib } },
3115 { "rorA", { Eb, Ib } },
3116 { "rclA", { Eb, Ib } },
3117 { "rcrA", { Eb, Ib } },
3118 { "shlA", { Eb, Ib } },
3119 { "shrA", { Eb, Ib } },
592d1631 3120 { Bad_Opcode },
ce518a5f 3121 { "sarA", { Eb, Ib } },
252b5132 3122 },
1ceb70f8 3123 /* REG_C1 */
252b5132 3124 {
ce518a5f
L
3125 { "rolQ", { Ev, Ib } },
3126 { "rorQ", { Ev, Ib } },
3127 { "rclQ", { Ev, Ib } },
3128 { "rcrQ", { Ev, Ib } },
3129 { "shlQ", { Ev, Ib } },
3130 { "shrQ", { Ev, Ib } },
592d1631 3131 { Bad_Opcode },
ce518a5f 3132 { "sarQ", { Ev, Ib } },
252b5132 3133 },
1ceb70f8 3134 /* REG_C6 */
4e7d34a6 3135 {
42164a71
L
3136 { "movA", { Ebh3, Ib } },
3137 { Bad_Opcode },
3138 { Bad_Opcode },
3139 { Bad_Opcode },
3140 { Bad_Opcode },
3141 { Bad_Opcode },
3142 { Bad_Opcode },
3143 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3144 },
1ceb70f8 3145 /* REG_C7 */
4e7d34a6 3146 {
42164a71
L
3147 { "movQ", { Evh3, Iv } },
3148 { Bad_Opcode },
3149 { Bad_Opcode },
3150 { Bad_Opcode },
3151 { Bad_Opcode },
3152 { Bad_Opcode },
3153 { Bad_Opcode },
3154 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3155 },
1ceb70f8 3156 /* REG_D0 */
252b5132 3157 {
ce518a5f
L
3158 { "rolA", { Eb, I1 } },
3159 { "rorA", { Eb, I1 } },
3160 { "rclA", { Eb, I1 } },
3161 { "rcrA", { Eb, I1 } },
3162 { "shlA", { Eb, I1 } },
3163 { "shrA", { Eb, I1 } },
592d1631 3164 { Bad_Opcode },
ce518a5f 3165 { "sarA", { Eb, I1 } },
252b5132 3166 },
1ceb70f8 3167 /* REG_D1 */
252b5132 3168 {
ce518a5f
L
3169 { "rolQ", { Ev, I1 } },
3170 { "rorQ", { Ev, I1 } },
3171 { "rclQ", { Ev, I1 } },
3172 { "rcrQ", { Ev, I1 } },
3173 { "shlQ", { Ev, I1 } },
3174 { "shrQ", { Ev, I1 } },
592d1631 3175 { Bad_Opcode },
ce518a5f 3176 { "sarQ", { Ev, I1 } },
252b5132 3177 },
1ceb70f8 3178 /* REG_D2 */
252b5132 3179 {
ce518a5f
L
3180 { "rolA", { Eb, CL } },
3181 { "rorA", { Eb, CL } },
3182 { "rclA", { Eb, CL } },
3183 { "rcrA", { Eb, CL } },
3184 { "shlA", { Eb, CL } },
3185 { "shrA", { Eb, CL } },
592d1631 3186 { Bad_Opcode },
ce518a5f 3187 { "sarA", { Eb, CL } },
252b5132 3188 },
1ceb70f8 3189 /* REG_D3 */
252b5132 3190 {
ce518a5f
L
3191 { "rolQ", { Ev, CL } },
3192 { "rorQ", { Ev, CL } },
3193 { "rclQ", { Ev, CL } },
3194 { "rcrQ", { Ev, CL } },
3195 { "shlQ", { Ev, CL } },
3196 { "shrQ", { Ev, CL } },
592d1631 3197 { Bad_Opcode },
ce518a5f 3198 { "sarQ", { Ev, CL } },
252b5132 3199 },
1ceb70f8 3200 /* REG_F6 */
252b5132 3201 {
ce518a5f 3202 { "testA", { Eb, Ib } },
592d1631 3203 { Bad_Opcode },
42164a71
L
3204 { "notA", { Ebh1 } },
3205 { "negA", { Ebh1 } },
ce518a5f
L
3206 { "mulA", { Eb } }, /* Don't print the implicit %al register, */
3207 { "imulA", { Eb } }, /* to distinguish these opcodes from other */
3208 { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
3209 { "idivA", { Eb } }, /* and idiv for consistency. */
252b5132 3210 },
1ceb70f8 3211 /* REG_F7 */
252b5132 3212 {
ce518a5f 3213 { "testQ", { Ev, Iv } },
592d1631 3214 { Bad_Opcode },
42164a71
L
3215 { "notQ", { Evh1 } },
3216 { "negQ", { Evh1 } },
ce518a5f
L
3217 { "mulQ", { Ev } }, /* Don't print the implicit register. */
3218 { "imulQ", { Ev } },
3219 { "divQ", { Ev } },
3220 { "idivQ", { Ev } },
252b5132 3221 },
1ceb70f8 3222 /* REG_FE */
252b5132 3223 {
42164a71
L
3224 { "incA", { Ebh1 } },
3225 { "decA", { Ebh1 } },
252b5132 3226 },
1ceb70f8 3227 /* REG_FF */
252b5132 3228 {
42164a71
L
3229 { "incQ", { Evh1 } },
3230 { "decQ", { Evh1 } },
7e8b059b 3231 { "call{T|}", { indirEv, BND } },
d9e3625e 3232 { "Jcall{T|}", { indirEp } },
7e8b059b 3233 { "jmp{T|}", { indirEv, BND } },
d9e3625e 3234 { "Jjmp{T|}", { indirEp } },
ce518a5f 3235 { "pushU", { stackEv } },
592d1631 3236 { Bad_Opcode },
252b5132 3237 },
1ceb70f8 3238 /* REG_0F00 */
252b5132 3239 {
ce518a5f
L
3240 { "sldtD", { Sv } },
3241 { "strD", { Sv } },
3242 { "lldt", { Ew } },
3243 { "ltr", { Ew } },
3244 { "verr", { Ew } },
3245 { "verw", { Ew } },
592d1631
L
3246 { Bad_Opcode },
3247 { Bad_Opcode },
252b5132 3248 },
1ceb70f8 3249 /* REG_0F01 */
252b5132 3250 {
1ceb70f8
L
3251 { MOD_TABLE (MOD_0F01_REG_0) },
3252 { MOD_TABLE (MOD_0F01_REG_1) },
3253 { MOD_TABLE (MOD_0F01_REG_2) },
3254 { MOD_TABLE (MOD_0F01_REG_3) },
ce518a5f 3255 { "smswD", { Sv } },
592d1631 3256 { Bad_Opcode },
ce518a5f 3257 { "lmsw", { Ew } },
1ceb70f8 3258 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3259 },
b5b1fc4f 3260 /* REG_0F0D */
252b5132 3261 {
1ab03f4b
L
3262 { "prefetch", { Mb } },
3263 { "prefetchw", { Mb } },
43234a1e 3264 { "prefetchwt1", { Mb } },
d7189fa5
RM
3265 { "prefetch", { Mb } },
3266 { "prefetch", { Mb } },
3267 { "prefetch", { Mb } },
3268 { "prefetch", { Mb } },
3269 { "prefetch", { Mb } },
252b5132 3270 },
1ceb70f8 3271 /* REG_0F18 */
252b5132 3272 {
1ceb70f8
L
3273 { MOD_TABLE (MOD_0F18_REG_0) },
3274 { MOD_TABLE (MOD_0F18_REG_1) },
3275 { MOD_TABLE (MOD_0F18_REG_2) },
3276 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3277 { MOD_TABLE (MOD_0F18_REG_4) },
3278 { MOD_TABLE (MOD_0F18_REG_5) },
3279 { MOD_TABLE (MOD_0F18_REG_6) },
3280 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3281 },
1ceb70f8 3282 /* REG_0F71 */
a6bd098c 3283 {
592d1631
L
3284 { Bad_Opcode },
3285 { Bad_Opcode },
1ceb70f8 3286 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3287 { Bad_Opcode },
1ceb70f8 3288 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3289 { Bad_Opcode },
1ceb70f8 3290 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3291 },
1ceb70f8 3292 /* REG_0F72 */
a6bd098c 3293 {
592d1631
L
3294 { Bad_Opcode },
3295 { Bad_Opcode },
1ceb70f8 3296 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3297 { Bad_Opcode },
1ceb70f8 3298 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3299 { Bad_Opcode },
1ceb70f8 3300 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3301 },
1ceb70f8 3302 /* REG_0F73 */
252b5132 3303 {
592d1631
L
3304 { Bad_Opcode },
3305 { Bad_Opcode },
1ceb70f8
L
3306 { MOD_TABLE (MOD_0F73_REG_2) },
3307 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3308 { Bad_Opcode },
3309 { Bad_Opcode },
1ceb70f8
L
3310 { MOD_TABLE (MOD_0F73_REG_6) },
3311 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3312 },
1ceb70f8 3313 /* REG_0FA6 */
252b5132 3314 {
4e7d34a6
L
3315 { "montmul", { { OP_0f07, 0 } } },
3316 { "xsha1", { { OP_0f07, 0 } } },
3317 { "xsha256", { { OP_0f07, 0 } } },
4e7d34a6 3318 },
1ceb70f8 3319 /* REG_0FA7 */
4e7d34a6
L
3320 {
3321 { "xstore-rng", { { OP_0f07, 0 } } },
3322 { "xcrypt-ecb", { { OP_0f07, 0 } } },
3323 { "xcrypt-cbc", { { OP_0f07, 0 } } },
3324 { "xcrypt-ctr", { { OP_0f07, 0 } } },
3325 { "xcrypt-cfb", { { OP_0f07, 0 } } },
3326 { "xcrypt-ofb", { { OP_0f07, 0 } } },
4e7d34a6 3327 },
1ceb70f8 3328 /* REG_0FAE */
4e7d34a6 3329 {
1ceb70f8
L
3330 { MOD_TABLE (MOD_0FAE_REG_0) },
3331 { MOD_TABLE (MOD_0FAE_REG_1) },
3332 { MOD_TABLE (MOD_0FAE_REG_2) },
3333 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3334 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3335 { MOD_TABLE (MOD_0FAE_REG_5) },
3336 { MOD_TABLE (MOD_0FAE_REG_6) },
3337 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3338 },
1ceb70f8 3339 /* REG_0FBA */
252b5132 3340 {
592d1631
L
3341 { Bad_Opcode },
3342 { Bad_Opcode },
3343 { Bad_Opcode },
3344 { Bad_Opcode },
4e7d34a6 3345 { "btQ", { Ev, Ib } },
42164a71
L
3346 { "btsQ", { Evh1, Ib } },
3347 { "btrQ", { Evh1, Ib } },
3348 { "btcQ", { Evh1, Ib } },
c608c12e 3349 },
1ceb70f8 3350 /* REG_0FC7 */
c608c12e 3351 {
592d1631 3352 { Bad_Opcode },
4e7d34a6 3353 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
592d1631
L
3354 { Bad_Opcode },
3355 { Bad_Opcode },
3356 { Bad_Opcode },
3357 { Bad_Opcode },
1ceb70f8
L
3358 { MOD_TABLE (MOD_0FC7_REG_6) },
3359 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3360 },
592a252b 3361 /* REG_VEX_0F71 */
c0f3af97 3362 {
592d1631
L
3363 { Bad_Opcode },
3364 { Bad_Opcode },
592a252b 3365 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3366 { Bad_Opcode },
592a252b 3367 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3368 { Bad_Opcode },
592a252b 3369 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3370 },
592a252b 3371 /* REG_VEX_0F72 */
c0f3af97 3372 {
592d1631
L
3373 { Bad_Opcode },
3374 { Bad_Opcode },
592a252b 3375 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3376 { Bad_Opcode },
592a252b 3377 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3378 { Bad_Opcode },
592a252b 3379 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3380 },
592a252b 3381 /* REG_VEX_0F73 */
c0f3af97 3382 {
592d1631
L
3383 { Bad_Opcode },
3384 { Bad_Opcode },
592a252b
L
3385 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3386 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3387 { Bad_Opcode },
3388 { Bad_Opcode },
592a252b
L
3389 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3390 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3391 },
592a252b 3392 /* REG_VEX_0FAE */
c0f3af97 3393 {
592d1631
L
3394 { Bad_Opcode },
3395 { Bad_Opcode },
592a252b
L
3396 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3397 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3398 },
f12dc422
L
3399 /* REG_VEX_0F38F3 */
3400 {
3401 { Bad_Opcode },
3402 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3403 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3404 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3405 },
f88c9eb0
SP
3406 /* REG_XOP_LWPCB */
3407 {
3408 { "llwpcb", { { OP_LWPCB_E, 0 } } },
3409 { "slwpcb", { { OP_LWPCB_E, 0 } } },
f88c9eb0
SP
3410 },
3411 /* REG_XOP_LWP */
3412 {
ce7d077e
SP
3413 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
3414 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
f88c9eb0 3415 },
2a2a0f38
QN
3416 /* REG_XOP_TBM_01 */
3417 {
3418 { Bad_Opcode },
3419 { "blcfill", { { OP_LWP_E, 0 }, Ev } },
3420 { "blsfill", { { OP_LWP_E, 0 }, Ev } },
3421 { "blcs", { { OP_LWP_E, 0 }, Ev } },
3422 { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
3423 { "blcic", { { OP_LWP_E, 0 }, Ev } },
3424 { "blsic", { { OP_LWP_E, 0 }, Ev } },
3425 { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
3426 },
3427 /* REG_XOP_TBM_02 */
3428 {
3429 { Bad_Opcode },
3430 { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
3431 { Bad_Opcode },
3432 { Bad_Opcode },
3433 { Bad_Opcode },
3434 { Bad_Opcode },
3435 { "blci", { { OP_LWP_E, 0 }, Ev } },
3436 },
43234a1e
L
3437#define NEED_REG_TABLE
3438#include "i386-dis-evex.h"
3439#undef NEED_REG_TABLE
4e7d34a6
L
3440};
3441
1ceb70f8
L
3442static const struct dis386 prefix_table[][4] = {
3443 /* PREFIX_90 */
252b5132 3444 {
4e7d34a6
L
3445 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3446 { "pause", { XX } },
3447 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
0f10071e 3448 },
4e7d34a6 3449
1ceb70f8 3450 /* PREFIX_0F10 */
cc0ec051 3451 {
4e7d34a6
L
3452 { "movups", { XM, EXx } },
3453 { "movss", { XM, EXd } },
3454 { "movupd", { XM, EXx } },
3455 { "movsd", { XM, EXq } },
30d1c836 3456 },
4e7d34a6 3457
1ceb70f8 3458 /* PREFIX_0F11 */
30d1c836 3459 {
b6169b20 3460 { "movups", { EXxS, XM } },
fa99fab2 3461 { "movss", { EXdS, XM } },
b6169b20 3462 { "movupd", { EXxS, XM } },
fa99fab2 3463 { "movsd", { EXqS, XM } },
4e7d34a6 3464 },
252b5132 3465
1ceb70f8 3466 /* PREFIX_0F12 */
c608c12e 3467 {
1ceb70f8 3468 { MOD_TABLE (MOD_0F12_PREFIX_0) },
4e7d34a6
L
3469 { "movsldup", { XM, EXx } },
3470 { "movlpd", { XM, EXq } },
3471 { "movddup", { XM, EXq } },
c608c12e 3472 },
4e7d34a6 3473
1ceb70f8 3474 /* PREFIX_0F16 */
c608c12e 3475 {
1ceb70f8 3476 { MOD_TABLE (MOD_0F16_PREFIX_0) },
4e7d34a6
L
3477 { "movshdup", { XM, EXx } },
3478 { "movhpd", { XM, EXq } },
c608c12e 3479 },
4e7d34a6 3480
7e8b059b
L
3481 /* PREFIX_0F1A */
3482 {
3483 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3484 { "bndcl", { Gbnd, Ev_bnd } },
3485 { "bndmov", { Gbnd, Ebnd } },
3486 { "bndcu", { Gbnd, Ev_bnd } },
3487 },
3488
3489 /* PREFIX_0F1B */
3490 {
3491 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3492 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3493 { "bndmov", { Ebnd, Gbnd } },
3494 { "bndcn", { Gbnd, Ev_bnd } },
3495 },
3496
1ceb70f8 3497 /* PREFIX_0F2A */
c608c12e 3498 {
09335d05 3499 { "cvtpi2ps", { XM, EMCq } },
98b528ac 3500 { "cvtsi2ss%LQ", { XM, Ev } },
09335d05 3501 { "cvtpi2pd", { XM, EMCq } },
98b528ac 3502 { "cvtsi2sd%LQ", { XM, Ev } },
c608c12e 3503 },
4e7d34a6 3504
1ceb70f8 3505 /* PREFIX_0F2B */
c608c12e 3506 {
75c135a8
L
3507 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3508 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3509 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3510 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3511 },
4e7d34a6 3512
1ceb70f8 3513 /* PREFIX_0F2C */
c608c12e 3514 {
09335d05
L
3515 { "cvttps2pi", { MXC, EXq } },
3516 { "cvttss2siY", { Gv, EXd } },
09a2c6cf 3517 { "cvttpd2pi", { MXC, EXx } },
09335d05 3518 { "cvttsd2siY", { Gv, EXq } },
c608c12e 3519 },
4e7d34a6 3520
1ceb70f8 3521 /* PREFIX_0F2D */
c608c12e 3522 {
4e7d34a6
L
3523 { "cvtps2pi", { MXC, EXq } },
3524 { "cvtss2siY", { Gv, EXd } },
3525 { "cvtpd2pi", { MXC, EXx } },
3526 { "cvtsd2siY", { Gv, EXq } },
c608c12e 3527 },
4e7d34a6 3528
1ceb70f8 3529 /* PREFIX_0F2E */
c608c12e 3530 {
7bb15c6f 3531 { "ucomiss",{ XM, EXd } },
592d1631 3532 { Bad_Opcode },
7bb15c6f 3533 { "ucomisd",{ XM, EXq } },
c608c12e 3534 },
4e7d34a6 3535
1ceb70f8 3536 /* PREFIX_0F2F */
c608c12e 3537 {
4e7d34a6 3538 { "comiss", { XM, EXd } },
592d1631 3539 { Bad_Opcode },
4e7d34a6 3540 { "comisd", { XM, EXq } },
c608c12e 3541 },
4e7d34a6 3542
1ceb70f8 3543 /* PREFIX_0F51 */
c608c12e 3544 {
4e7d34a6
L
3545 { "sqrtps", { XM, EXx } },
3546 { "sqrtss", { XM, EXd } },
3547 { "sqrtpd", { XM, EXx } },
3548 { "sqrtsd", { XM, EXq } },
c608c12e 3549 },
4e7d34a6 3550
1ceb70f8 3551 /* PREFIX_0F52 */
c608c12e 3552 {
4e7d34a6
L
3553 { "rsqrtps",{ XM, EXx } },
3554 { "rsqrtss",{ XM, EXd } },
c608c12e 3555 },
4e7d34a6 3556
1ceb70f8 3557 /* PREFIX_0F53 */
c608c12e 3558 {
4e7d34a6
L
3559 { "rcpps", { XM, EXx } },
3560 { "rcpss", { XM, EXd } },
c608c12e 3561 },
4e7d34a6 3562
1ceb70f8 3563 /* PREFIX_0F58 */
c608c12e 3564 {
4e7d34a6
L
3565 { "addps", { XM, EXx } },
3566 { "addss", { XM, EXd } },
3567 { "addpd", { XM, EXx } },
3568 { "addsd", { XM, EXq } },
c608c12e 3569 },
4e7d34a6 3570
1ceb70f8 3571 /* PREFIX_0F59 */
c608c12e 3572 {
4e7d34a6
L
3573 { "mulps", { XM, EXx } },
3574 { "mulss", { XM, EXd } },
3575 { "mulpd", { XM, EXx } },
3576 { "mulsd", { XM, EXq } },
041bd2e0 3577 },
4e7d34a6 3578
1ceb70f8 3579 /* PREFIX_0F5A */
041bd2e0 3580 {
4e7d34a6
L
3581 { "cvtps2pd", { XM, EXq } },
3582 { "cvtss2sd", { XM, EXd } },
3583 { "cvtpd2ps", { XM, EXx } },
3584 { "cvtsd2ss", { XM, EXq } },
041bd2e0 3585 },
4e7d34a6 3586
1ceb70f8 3587 /* PREFIX_0F5B */
041bd2e0 3588 {
09a2c6cf
L
3589 { "cvtdq2ps", { XM, EXx } },
3590 { "cvttps2dq", { XM, EXx } },
3591 { "cvtps2dq", { XM, EXx } },
041bd2e0 3592 },
4e7d34a6 3593
1ceb70f8 3594 /* PREFIX_0F5C */
041bd2e0 3595 {
4e7d34a6
L
3596 { "subps", { XM, EXx } },
3597 { "subss", { XM, EXd } },
3598 { "subpd", { XM, EXx } },
3599 { "subsd", { XM, EXq } },
041bd2e0 3600 },
4e7d34a6 3601
1ceb70f8 3602 /* PREFIX_0F5D */
041bd2e0 3603 {
4e7d34a6
L
3604 { "minps", { XM, EXx } },
3605 { "minss", { XM, EXd } },
3606 { "minpd", { XM, EXx } },
3607 { "minsd", { XM, EXq } },
041bd2e0 3608 },
4e7d34a6 3609
1ceb70f8 3610 /* PREFIX_0F5E */
041bd2e0 3611 {
4e7d34a6
L
3612 { "divps", { XM, EXx } },
3613 { "divss", { XM, EXd } },
3614 { "divpd", { XM, EXx } },
3615 { "divsd", { XM, EXq } },
041bd2e0 3616 },
4e7d34a6 3617
1ceb70f8 3618 /* PREFIX_0F5F */
041bd2e0 3619 {
4e7d34a6
L
3620 { "maxps", { XM, EXx } },
3621 { "maxss", { XM, EXd } },
3622 { "maxpd", { XM, EXx } },
3623 { "maxsd", { XM, EXq } },
041bd2e0 3624 },
4e7d34a6 3625
1ceb70f8 3626 /* PREFIX_0F60 */
041bd2e0 3627 {
4e7d34a6 3628 { "punpcklbw",{ MX, EMd } },
592d1631 3629 { Bad_Opcode },
4e7d34a6 3630 { "punpcklbw",{ MX, EMx } },
041bd2e0 3631 },
4e7d34a6 3632
1ceb70f8 3633 /* PREFIX_0F61 */
041bd2e0 3634 {
4e7d34a6 3635 { "punpcklwd",{ MX, EMd } },
592d1631 3636 { Bad_Opcode },
4e7d34a6 3637 { "punpcklwd",{ MX, EMx } },
041bd2e0 3638 },
4e7d34a6 3639
1ceb70f8 3640 /* PREFIX_0F62 */
041bd2e0 3641 {
4e7d34a6 3642 { "punpckldq",{ MX, EMd } },
592d1631 3643 { Bad_Opcode },
4e7d34a6 3644 { "punpckldq",{ MX, EMx } },
041bd2e0 3645 },
4e7d34a6 3646
1ceb70f8 3647 /* PREFIX_0F6C */
041bd2e0 3648 {
592d1631
L
3649 { Bad_Opcode },
3650 { Bad_Opcode },
4e7d34a6 3651 { "punpcklqdq", { XM, EXx } },
0f17484f 3652 },
4e7d34a6 3653
1ceb70f8 3654 /* PREFIX_0F6D */
0f17484f 3655 {
592d1631
L
3656 { Bad_Opcode },
3657 { Bad_Opcode },
4e7d34a6 3658 { "punpckhqdq", { XM, EXx } },
041bd2e0 3659 },
4e7d34a6 3660
1ceb70f8 3661 /* PREFIX_0F6F */
ca164297 3662 {
4e7d34a6
L
3663 { "movq", { MX, EM } },
3664 { "movdqu", { XM, EXx } },
3665 { "movdqa", { XM, EXx } },
ca164297 3666 },
4e7d34a6 3667
1ceb70f8 3668 /* PREFIX_0F70 */
4e7d34a6
L
3669 {
3670 { "pshufw", { MX, EM, Ib } },
3671 { "pshufhw",{ XM, EXx, Ib } },
3672 { "pshufd", { XM, EXx, Ib } },
3673 { "pshuflw",{ XM, EXx, Ib } },
3674 },
3675
92fddf8e
L
3676 /* PREFIX_0F73_REG_3 */
3677 {
592d1631
L
3678 { Bad_Opcode },
3679 { Bad_Opcode },
92fddf8e 3680 { "psrldq", { XS, Ib } },
92fddf8e
L
3681 },
3682
3683 /* PREFIX_0F73_REG_7 */
3684 {
592d1631
L
3685 { Bad_Opcode },
3686 { Bad_Opcode },
92fddf8e 3687 { "pslldq", { XS, Ib } },
92fddf8e
L
3688 },
3689
1ceb70f8 3690 /* PREFIX_0F78 */
4e7d34a6
L
3691 {
3692 {"vmread", { Em, Gm } },
592d1631 3693 { Bad_Opcode },
4e7d34a6
L
3694 {"extrq", { XS, Ib, Ib } },
3695 {"insertq", { XM, XS, Ib, Ib } },
3696 },
3697
1ceb70f8 3698 /* PREFIX_0F79 */
4e7d34a6
L
3699 {
3700 {"vmwrite", { Gm, Em } },
592d1631 3701 { Bad_Opcode },
4e7d34a6
L
3702 {"extrq", { XM, XS } },
3703 {"insertq", { XM, XS } },
3704 },
3705
1ceb70f8 3706 /* PREFIX_0F7C */
ca164297 3707 {
592d1631
L
3708 { Bad_Opcode },
3709 { Bad_Opcode },
09a2c6cf
L
3710 { "haddpd", { XM, EXx } },
3711 { "haddps", { XM, EXx } },
ca164297 3712 },
4e7d34a6 3713
1ceb70f8 3714 /* PREFIX_0F7D */
ca164297 3715 {
592d1631
L
3716 { Bad_Opcode },
3717 { Bad_Opcode },
09a2c6cf
L
3718 { "hsubpd", { XM, EXx } },
3719 { "hsubps", { XM, EXx } },
ca164297 3720 },
4e7d34a6 3721
1ceb70f8 3722 /* PREFIX_0F7E */
ca164297 3723 {
4e7d34a6
L
3724 { "movK", { Edq, MX } },
3725 { "movq", { XM, EXq } },
3726 { "movK", { Edq, XM } },
ca164297 3727 },
4e7d34a6 3728
1ceb70f8 3729 /* PREFIX_0F7F */
ca164297 3730 {
b6169b20
L
3731 { "movq", { EMS, MX } },
3732 { "movdqu", { EXxS, XM } },
3733 { "movdqa", { EXxS, XM } },
ca164297 3734 },
4e7d34a6 3735
c7b8aa3a
L
3736 /* PREFIX_0FAE_REG_0 */
3737 {
3738 { Bad_Opcode },
3739 { "rdfsbase", { Ev } },
3740 },
3741
3742 /* PREFIX_0FAE_REG_1 */
3743 {
3744 { Bad_Opcode },
3745 { "rdgsbase", { Ev } },
3746 },
3747
3748 /* PREFIX_0FAE_REG_2 */
3749 {
3750 { Bad_Opcode },
3751 { "wrfsbase", { Ev } },
3752 },
3753
3754 /* PREFIX_0FAE_REG_3 */
3755 {
3756 { Bad_Opcode },
3757 { "wrgsbase", { Ev } },
3758 },
3759
1ceb70f8 3760 /* PREFIX_0FB8 */
ca164297 3761 {
592d1631 3762 { Bad_Opcode },
4e7d34a6 3763 { "popcntS", { Gv, Ev } },
ca164297 3764 },
4e7d34a6 3765
f12dc422
L
3766 /* PREFIX_0FBC */
3767 {
3768 { "bsfS", { Gv, Ev } },
3769 { "tzcntS", { Gv, Ev } },
3770 { "bsfS", { Gv, Ev } },
3771 },
3772
1ceb70f8 3773 /* PREFIX_0FBD */
050dfa73 3774 {
4e7d34a6
L
3775 { "bsrS", { Gv, Ev } },
3776 { "lzcntS", { Gv, Ev } },
3777 { "bsrS", { Gv, Ev } },
050dfa73
MM
3778 },
3779
1ceb70f8 3780 /* PREFIX_0FC2 */
050dfa73 3781 {
ad19981d
L
3782 { "cmpps", { XM, EXx, CMP } },
3783 { "cmpss", { XM, EXd, CMP } },
3784 { "cmppd", { XM, EXx, CMP } },
3785 { "cmpsd", { XM, EXq, CMP } },
050dfa73 3786 },
246c51aa 3787
4ee52178
L
3788 /* PREFIX_0FC3 */
3789 {
3790 { "movntiS", { Ma, Gv } },
4ee52178
L
3791 },
3792
92fddf8e
L
3793 /* PREFIX_0FC7_REG_6 */
3794 {
3795 { "vmptrld",{ Mq } },
3796 { "vmxon", { Mq } },
3797 { "vmclear",{ Mq } },
92fddf8e
L
3798 },
3799
1ceb70f8 3800 /* PREFIX_0FD0 */
050dfa73 3801 {
592d1631
L
3802 { Bad_Opcode },
3803 { Bad_Opcode },
4e7d34a6
L
3804 { "addsubpd", { XM, EXx } },
3805 { "addsubps", { XM, EXx } },
246c51aa 3806 },
050dfa73 3807
1ceb70f8 3808 /* PREFIX_0FD6 */
050dfa73 3809 {
592d1631 3810 { Bad_Opcode },
4e7d34a6 3811 { "movq2dq",{ XM, MS } },
b6169b20 3812 { "movq", { EXqS, XM } },
4e7d34a6 3813 { "movdq2q",{ MX, XS } },
050dfa73
MM
3814 },
3815
1ceb70f8 3816 /* PREFIX_0FE6 */
7918206c 3817 {
592d1631 3818 { Bad_Opcode },
4e7d34a6
L
3819 { "cvtdq2pd", { XM, EXq } },
3820 { "cvttpd2dq", { XM, EXx } },
3821 { "cvtpd2dq", { XM, EXx } },
7918206c 3822 },
8b38ad71 3823
1ceb70f8 3824 /* PREFIX_0FE7 */
8b38ad71 3825 {
4ee52178 3826 { "movntq", { Mq, MX } },
592d1631 3827 { Bad_Opcode },
75c135a8 3828 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
3829 },
3830
1ceb70f8 3831 /* PREFIX_0FF0 */
4e7d34a6 3832 {
592d1631
L
3833 { Bad_Opcode },
3834 { Bad_Opcode },
3835 { Bad_Opcode },
1ceb70f8 3836 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
3837 },
3838
1ceb70f8 3839 /* PREFIX_0FF7 */
4e7d34a6
L
3840 {
3841 { "maskmovq", { MX, MS } },
592d1631 3842 { Bad_Opcode },
4e7d34a6 3843 { "maskmovdqu", { XM, XS } },
8b38ad71 3844 },
42903f7f 3845
1ceb70f8 3846 /* PREFIX_0F3810 */
42903f7f 3847 {
592d1631
L
3848 { Bad_Opcode },
3849 { Bad_Opcode },
88a94849 3850 { "pblendvb", { XM, EXx, XMM0 } },
42903f7f
L
3851 },
3852
1ceb70f8 3853 /* PREFIX_0F3814 */
42903f7f 3854 {
592d1631
L
3855 { Bad_Opcode },
3856 { Bad_Opcode },
88a94849 3857 { "blendvps", { XM, EXx, XMM0 } },
42903f7f
L
3858 },
3859
1ceb70f8 3860 /* PREFIX_0F3815 */
42903f7f 3861 {
592d1631
L
3862 { Bad_Opcode },
3863 { Bad_Opcode },
09a2c6cf 3864 { "blendvpd", { XM, EXx, XMM0 } },
42903f7f
L
3865 },
3866
1ceb70f8 3867 /* PREFIX_0F3817 */
42903f7f 3868 {
592d1631
L
3869 { Bad_Opcode },
3870 { Bad_Opcode },
09a2c6cf 3871 { "ptest", { XM, EXx } },
42903f7f
L
3872 },
3873
1ceb70f8 3874 /* PREFIX_0F3820 */
42903f7f 3875 {
592d1631
L
3876 { Bad_Opcode },
3877 { Bad_Opcode },
8976381e 3878 { "pmovsxbw", { XM, EXq } },
42903f7f
L
3879 },
3880
1ceb70f8 3881 /* PREFIX_0F3821 */
42903f7f 3882 {
592d1631
L
3883 { Bad_Opcode },
3884 { Bad_Opcode },
8976381e 3885 { "pmovsxbd", { XM, EXd } },
42903f7f
L
3886 },
3887
1ceb70f8 3888 /* PREFIX_0F3822 */
42903f7f 3889 {
592d1631
L
3890 { Bad_Opcode },
3891 { Bad_Opcode },
8976381e 3892 { "pmovsxbq", { XM, EXw } },
42903f7f
L
3893 },
3894
1ceb70f8 3895 /* PREFIX_0F3823 */
42903f7f 3896 {
592d1631
L
3897 { Bad_Opcode },
3898 { Bad_Opcode },
8976381e 3899 { "pmovsxwd", { XM, EXq } },
42903f7f
L
3900 },
3901
1ceb70f8 3902 /* PREFIX_0F3824 */
42903f7f 3903 {
592d1631
L
3904 { Bad_Opcode },
3905 { Bad_Opcode },
8976381e 3906 { "pmovsxwq", { XM, EXd } },
42903f7f
L
3907 },
3908
1ceb70f8 3909 /* PREFIX_0F3825 */
42903f7f 3910 {
592d1631
L
3911 { Bad_Opcode },
3912 { Bad_Opcode },
8976381e 3913 { "pmovsxdq", { XM, EXq } },
42903f7f
L
3914 },
3915
1ceb70f8 3916 /* PREFIX_0F3828 */
42903f7f 3917 {
592d1631
L
3918 { Bad_Opcode },
3919 { Bad_Opcode },
09a2c6cf 3920 { "pmuldq", { XM, EXx } },
42903f7f
L
3921 },
3922
1ceb70f8 3923 /* PREFIX_0F3829 */
42903f7f 3924 {
592d1631
L
3925 { Bad_Opcode },
3926 { Bad_Opcode },
09a2c6cf 3927 { "pcmpeqq", { XM, EXx } },
42903f7f
L
3928 },
3929
1ceb70f8 3930 /* PREFIX_0F382A */
42903f7f 3931 {
592d1631
L
3932 { Bad_Opcode },
3933 { Bad_Opcode },
75c135a8 3934 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
3935 },
3936
1ceb70f8 3937 /* PREFIX_0F382B */
42903f7f 3938 {
592d1631
L
3939 { Bad_Opcode },
3940 { Bad_Opcode },
09a2c6cf 3941 { "packusdw", { XM, EXx } },
42903f7f
L
3942 },
3943
1ceb70f8 3944 /* PREFIX_0F3830 */
42903f7f 3945 {
592d1631
L
3946 { Bad_Opcode },
3947 { Bad_Opcode },
8976381e 3948 { "pmovzxbw", { XM, EXq } },
42903f7f
L
3949 },
3950
1ceb70f8 3951 /* PREFIX_0F3831 */
42903f7f 3952 {
592d1631
L
3953 { Bad_Opcode },
3954 { Bad_Opcode },
8976381e 3955 { "pmovzxbd", { XM, EXd } },
42903f7f
L
3956 },
3957
1ceb70f8 3958 /* PREFIX_0F3832 */
42903f7f 3959 {
592d1631
L
3960 { Bad_Opcode },
3961 { Bad_Opcode },
8976381e 3962 { "pmovzxbq", { XM, EXw } },
42903f7f
L
3963 },
3964
1ceb70f8 3965 /* PREFIX_0F3833 */
42903f7f 3966 {
592d1631
L
3967 { Bad_Opcode },
3968 { Bad_Opcode },
8976381e 3969 { "pmovzxwd", { XM, EXq } },
42903f7f
L
3970 },
3971
1ceb70f8 3972 /* PREFIX_0F3834 */
42903f7f 3973 {
592d1631
L
3974 { Bad_Opcode },
3975 { Bad_Opcode },
8976381e 3976 { "pmovzxwq", { XM, EXd } },
42903f7f
L
3977 },
3978
1ceb70f8 3979 /* PREFIX_0F3835 */
42903f7f 3980 {
592d1631
L
3981 { Bad_Opcode },
3982 { Bad_Opcode },
8976381e 3983 { "pmovzxdq", { XM, EXq } },
42903f7f
L
3984 },
3985
1ceb70f8 3986 /* PREFIX_0F3837 */
4e7d34a6 3987 {
592d1631
L
3988 { Bad_Opcode },
3989 { Bad_Opcode },
4e7d34a6 3990 { "pcmpgtq", { XM, EXx } },
4e7d34a6
L
3991 },
3992
1ceb70f8 3993 /* PREFIX_0F3838 */
42903f7f 3994 {
592d1631
L
3995 { Bad_Opcode },
3996 { Bad_Opcode },
09a2c6cf 3997 { "pminsb", { XM, EXx } },
42903f7f
L
3998 },
3999
1ceb70f8 4000 /* PREFIX_0F3839 */
42903f7f 4001 {
592d1631
L
4002 { Bad_Opcode },
4003 { Bad_Opcode },
09a2c6cf 4004 { "pminsd", { XM, EXx } },
42903f7f
L
4005 },
4006
1ceb70f8 4007 /* PREFIX_0F383A */
42903f7f 4008 {
592d1631
L
4009 { Bad_Opcode },
4010 { Bad_Opcode },
09a2c6cf 4011 { "pminuw", { XM, EXx } },
42903f7f
L
4012 },
4013
1ceb70f8 4014 /* PREFIX_0F383B */
42903f7f 4015 {
592d1631
L
4016 { Bad_Opcode },
4017 { Bad_Opcode },
09a2c6cf 4018 { "pminud", { XM, EXx } },
42903f7f
L
4019 },
4020
1ceb70f8 4021 /* PREFIX_0F383C */
42903f7f 4022 {
592d1631
L
4023 { Bad_Opcode },
4024 { Bad_Opcode },
09a2c6cf 4025 { "pmaxsb", { XM, EXx } },
42903f7f
L
4026 },
4027
1ceb70f8 4028 /* PREFIX_0F383D */
42903f7f 4029 {
592d1631
L
4030 { Bad_Opcode },
4031 { Bad_Opcode },
09a2c6cf 4032 { "pmaxsd", { XM, EXx } },
42903f7f
L
4033 },
4034
1ceb70f8 4035 /* PREFIX_0F383E */
42903f7f 4036 {
592d1631
L
4037 { Bad_Opcode },
4038 { Bad_Opcode },
09a2c6cf 4039 { "pmaxuw", { XM, EXx } },
42903f7f
L
4040 },
4041
1ceb70f8 4042 /* PREFIX_0F383F */
42903f7f 4043 {
592d1631
L
4044 { Bad_Opcode },
4045 { Bad_Opcode },
09a2c6cf 4046 { "pmaxud", { XM, EXx } },
42903f7f
L
4047 },
4048
1ceb70f8 4049 /* PREFIX_0F3840 */
42903f7f 4050 {
592d1631
L
4051 { Bad_Opcode },
4052 { Bad_Opcode },
09a2c6cf 4053 { "pmulld", { XM, EXx } },
42903f7f
L
4054 },
4055
1ceb70f8 4056 /* PREFIX_0F3841 */
42903f7f 4057 {
592d1631
L
4058 { Bad_Opcode },
4059 { Bad_Opcode },
09a2c6cf 4060 { "phminposuw", { XM, EXx } },
42903f7f
L
4061 },
4062
f1f8f695
L
4063 /* PREFIX_0F3880 */
4064 {
592d1631
L
4065 { Bad_Opcode },
4066 { Bad_Opcode },
f1f8f695 4067 { "invept", { Gm, Mo } },
f1f8f695
L
4068 },
4069
4070 /* PREFIX_0F3881 */
4071 {
592d1631
L
4072 { Bad_Opcode },
4073 { Bad_Opcode },
f1f8f695 4074 { "invvpid", { Gm, Mo } },
f1f8f695
L
4075 },
4076
6c30d220
L
4077 /* PREFIX_0F3882 */
4078 {
4079 { Bad_Opcode },
4080 { Bad_Opcode },
4081 { "invpcid", { Gm, M } },
4082 },
4083
a0046408
L
4084 /* PREFIX_0F38C8 */
4085 {
4086 { "sha1nexte", { XM, EXxmm } },
4087 },
4088
4089 /* PREFIX_0F38C9 */
4090 {
4091 { "sha1msg1", { XM, EXxmm } },
4092 },
4093
4094 /* PREFIX_0F38CA */
4095 {
4096 { "sha1msg2", { XM, EXxmm } },
4097 },
4098
4099 /* PREFIX_0F38CB */
4100 {
4101 { "sha256rnds2", { XM, EXxmm, XMM0 } },
4102 },
4103
4104 /* PREFIX_0F38CC */
4105 {
4106 { "sha256msg1", { XM, EXxmm } },
4107 },
4108
4109 /* PREFIX_0F38CD */
4110 {
4111 { "sha256msg2", { XM, EXxmm } },
4112 },
4113
c0f3af97
L
4114 /* PREFIX_0F38DB */
4115 {
592d1631
L
4116 { Bad_Opcode },
4117 { Bad_Opcode },
c0f3af97 4118 { "aesimc", { XM, EXx } },
c0f3af97
L
4119 },
4120
4121 /* PREFIX_0F38DC */
4122 {
592d1631
L
4123 { Bad_Opcode },
4124 { Bad_Opcode },
c0f3af97 4125 { "aesenc", { XM, EXx } },
c0f3af97
L
4126 },
4127
4128 /* PREFIX_0F38DD */
4129 {
592d1631
L
4130 { Bad_Opcode },
4131 { Bad_Opcode },
c0f3af97 4132 { "aesenclast", { XM, EXx } },
c0f3af97
L
4133 },
4134
4135 /* PREFIX_0F38DE */
4136 {
592d1631
L
4137 { Bad_Opcode },
4138 { Bad_Opcode },
c0f3af97 4139 { "aesdec", { XM, EXx } },
c0f3af97
L
4140 },
4141
4142 /* PREFIX_0F38DF */
4143 {
592d1631
L
4144 { Bad_Opcode },
4145 { Bad_Opcode },
c0f3af97 4146 { "aesdeclast", { XM, EXx } },
c0f3af97
L
4147 },
4148
1ceb70f8 4149 /* PREFIX_0F38F0 */
4e7d34a6 4150 {
f1f8f695 4151 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
592d1631 4152 { Bad_Opcode },
f1f8f695 4153 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
7bb15c6f 4154 { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4e7d34a6
L
4155 },
4156
1ceb70f8 4157 /* PREFIX_0F38F1 */
4e7d34a6 4158 {
f1f8f695 4159 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
592d1631 4160 { Bad_Opcode },
f1f8f695 4161 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
7bb15c6f 4162 { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4e7d34a6
L
4163 },
4164
e2e1fcde
L
4165 /* PREFIX_0F38F6 */
4166 {
4167 { Bad_Opcode },
4168 { "adoxS", { Gdq, Edq} },
4169 { "adcxS", { Gdq, Edq} },
4170 { Bad_Opcode },
4171 },
4172
1ceb70f8 4173 /* PREFIX_0F3A08 */
42903f7f 4174 {
592d1631
L
4175 { Bad_Opcode },
4176 { Bad_Opcode },
09a2c6cf 4177 { "roundps", { XM, EXx, Ib } },
42903f7f
L
4178 },
4179
1ceb70f8 4180 /* PREFIX_0F3A09 */
42903f7f 4181 {
592d1631
L
4182 { Bad_Opcode },
4183 { Bad_Opcode },
09a2c6cf 4184 { "roundpd", { XM, EXx, Ib } },
42903f7f
L
4185 },
4186
1ceb70f8 4187 /* PREFIX_0F3A0A */
42903f7f 4188 {
592d1631
L
4189 { Bad_Opcode },
4190 { Bad_Opcode },
09335d05 4191 { "roundss", { XM, EXd, Ib } },
42903f7f
L
4192 },
4193
1ceb70f8 4194 /* PREFIX_0F3A0B */
42903f7f 4195 {
592d1631
L
4196 { Bad_Opcode },
4197 { Bad_Opcode },
09335d05 4198 { "roundsd", { XM, EXq, Ib } },
42903f7f
L
4199 },
4200
1ceb70f8 4201 /* PREFIX_0F3A0C */
42903f7f 4202 {
592d1631
L
4203 { Bad_Opcode },
4204 { Bad_Opcode },
09a2c6cf 4205 { "blendps", { XM, EXx, Ib } },
42903f7f
L
4206 },
4207
1ceb70f8 4208 /* PREFIX_0F3A0D */
42903f7f 4209 {
592d1631
L
4210 { Bad_Opcode },
4211 { Bad_Opcode },
09a2c6cf 4212 { "blendpd", { XM, EXx, Ib } },
42903f7f
L
4213 },
4214
1ceb70f8 4215 /* PREFIX_0F3A0E */
42903f7f 4216 {
592d1631
L
4217 { Bad_Opcode },
4218 { Bad_Opcode },
09a2c6cf 4219 { "pblendw", { XM, EXx, Ib } },
42903f7f
L
4220 },
4221
1ceb70f8 4222 /* PREFIX_0F3A14 */
42903f7f 4223 {
592d1631
L
4224 { Bad_Opcode },
4225 { Bad_Opcode },
42903f7f 4226 { "pextrb", { Edqb, XM, Ib } },
42903f7f
L
4227 },
4228
1ceb70f8 4229 /* PREFIX_0F3A15 */
42903f7f 4230 {
592d1631
L
4231 { Bad_Opcode },
4232 { Bad_Opcode },
42903f7f 4233 { "pextrw", { Edqw, XM, Ib } },
42903f7f
L
4234 },
4235
1ceb70f8 4236 /* PREFIX_0F3A16 */
42903f7f 4237 {
592d1631
L
4238 { Bad_Opcode },
4239 { Bad_Opcode },
42903f7f 4240 { "pextrK", { Edq, XM, Ib } },
42903f7f
L
4241 },
4242
1ceb70f8 4243 /* PREFIX_0F3A17 */
42903f7f 4244 {
592d1631
L
4245 { Bad_Opcode },
4246 { Bad_Opcode },
42903f7f 4247 { "extractps", { Edqd, XM, Ib } },
42903f7f
L
4248 },
4249
1ceb70f8 4250 /* PREFIX_0F3A20 */
42903f7f 4251 {
592d1631
L
4252 { Bad_Opcode },
4253 { Bad_Opcode },
42903f7f 4254 { "pinsrb", { XM, Edqb, Ib } },
42903f7f
L
4255 },
4256
1ceb70f8 4257 /* PREFIX_0F3A21 */
42903f7f 4258 {
592d1631
L
4259 { Bad_Opcode },
4260 { Bad_Opcode },
8976381e 4261 { "insertps", { XM, EXd, Ib } },
42903f7f
L
4262 },
4263
1ceb70f8 4264 /* PREFIX_0F3A22 */
42903f7f 4265 {
592d1631
L
4266 { Bad_Opcode },
4267 { Bad_Opcode },
42903f7f 4268 { "pinsrK", { XM, Edq, Ib } },
42903f7f
L
4269 },
4270
1ceb70f8 4271 /* PREFIX_0F3A40 */
42903f7f 4272 {
592d1631
L
4273 { Bad_Opcode },
4274 { Bad_Opcode },
09a2c6cf 4275 { "dpps", { XM, EXx, Ib } },
42903f7f
L
4276 },
4277
1ceb70f8 4278 /* PREFIX_0F3A41 */
42903f7f 4279 {
592d1631
L
4280 { Bad_Opcode },
4281 { Bad_Opcode },
09a2c6cf 4282 { "dppd", { XM, EXx, Ib } },
42903f7f
L
4283 },
4284
1ceb70f8 4285 /* PREFIX_0F3A42 */
42903f7f 4286 {
592d1631
L
4287 { Bad_Opcode },
4288 { Bad_Opcode },
09a2c6cf 4289 { "mpsadbw", { XM, EXx, Ib } },
42903f7f 4290 },
381d071f 4291
c0f3af97
L
4292 /* PREFIX_0F3A44 */
4293 {
592d1631
L
4294 { Bad_Opcode },
4295 { Bad_Opcode },
c0f3af97 4296 { "pclmulqdq", { XM, EXx, PCLMUL } },
c0f3af97
L
4297 },
4298
1ceb70f8 4299 /* PREFIX_0F3A60 */
381d071f 4300 {
592d1631
L
4301 { Bad_Opcode },
4302 { Bad_Opcode },
4e7d34a6 4303 { "pcmpestrm", { XM, EXx, Ib } },
381d071f
L
4304 },
4305
1ceb70f8 4306 /* PREFIX_0F3A61 */
381d071f 4307 {
592d1631
L
4308 { Bad_Opcode },
4309 { Bad_Opcode },
4e7d34a6 4310 { "pcmpestri", { XM, EXx, Ib } },
381d071f
L
4311 },
4312
1ceb70f8 4313 /* PREFIX_0F3A62 */
381d071f 4314 {
592d1631
L
4315 { Bad_Opcode },
4316 { Bad_Opcode },
4e7d34a6 4317 { "pcmpistrm", { XM, EXx, Ib } },
381d071f
L
4318 },
4319
1ceb70f8 4320 /* PREFIX_0F3A63 */
381d071f 4321 {
592d1631
L
4322 { Bad_Opcode },
4323 { Bad_Opcode },
4e7d34a6 4324 { "pcmpistri", { XM, EXx, Ib } },
381d071f 4325 },
09a2c6cf 4326
a0046408
L
4327 /* PREFIX_0F3ACC */
4328 {
4329 { "sha1rnds4", { XM, EXxmm, Ib } },
4330 },
4331
c0f3af97 4332 /* PREFIX_0F3ADF */
09a2c6cf 4333 {
592d1631
L
4334 { Bad_Opcode },
4335 { Bad_Opcode },
c0f3af97 4336 { "aeskeygenassist", { XM, EXx, Ib } },
09a2c6cf
L
4337 },
4338
592a252b 4339 /* PREFIX_VEX_0F10 */
09a2c6cf 4340 {
592a252b
L
4341 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4342 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4343 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4344 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4345 },
4346
592a252b 4347 /* PREFIX_VEX_0F11 */
09a2c6cf 4348 {
592a252b
L
4349 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4350 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4351 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4352 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4353 },
4354
592a252b 4355 /* PREFIX_VEX_0F12 */
09a2c6cf 4356 {
592a252b
L
4357 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4358 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4359 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4360 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4361 },
4362
592a252b 4363 /* PREFIX_VEX_0F16 */
09a2c6cf 4364 {
592a252b
L
4365 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4366 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4367 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4368 },
7c52e0e8 4369
592a252b 4370 /* PREFIX_VEX_0F2A */
5f754f58 4371 {
592d1631 4372 { Bad_Opcode },
592a252b 4373 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4374 { Bad_Opcode },
592a252b 4375 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4376 },
7c52e0e8 4377
592a252b 4378 /* PREFIX_VEX_0F2C */
5f754f58 4379 {
592d1631 4380 { Bad_Opcode },
592a252b 4381 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4382 { Bad_Opcode },
592a252b 4383 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4384 },
7c52e0e8 4385
592a252b 4386 /* PREFIX_VEX_0F2D */
7c52e0e8 4387 {
592d1631 4388 { Bad_Opcode },
592a252b 4389 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4390 { Bad_Opcode },
592a252b 4391 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4392 },
4393
592a252b 4394 /* PREFIX_VEX_0F2E */
7c52e0e8 4395 {
592a252b 4396 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4397 { Bad_Opcode },
592a252b 4398 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4399 },
4400
592a252b 4401 /* PREFIX_VEX_0F2F */
7c52e0e8 4402 {
592a252b 4403 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4404 { Bad_Opcode },
592a252b 4405 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4406 },
4407
43234a1e
L
4408 /* PREFIX_VEX_0F41 */
4409 {
4410 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
4411 },
4412
4413 /* PREFIX_VEX_0F42 */
4414 {
4415 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
4416 },
4417
4418 /* PREFIX_VEX_0F44 */
4419 {
4420 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
4421 },
4422
4423 /* PREFIX_VEX_0F45 */
4424 {
4425 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
4426 },
4427
4428 /* PREFIX_VEX_0F46 */
4429 {
4430 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
4431 },
4432
4433 /* PREFIX_VEX_0F47 */
4434 {
4435 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
4436 },
4437
4438 /* PREFIX_VEX_0F4B */
4439 {
4440 { Bad_Opcode },
4441 { Bad_Opcode },
4442 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4443 },
4444
592a252b 4445 /* PREFIX_VEX_0F51 */
7c52e0e8 4446 {
592a252b
L
4447 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4448 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4449 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4450 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4451 },
4452
592a252b 4453 /* PREFIX_VEX_0F52 */
7c52e0e8 4454 {
592a252b
L
4455 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4456 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
4457 },
4458
592a252b 4459 /* PREFIX_VEX_0F53 */
7c52e0e8 4460 {
592a252b
L
4461 { VEX_W_TABLE (VEX_W_0F53_P_0) },
4462 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
4463 },
4464
592a252b 4465 /* PREFIX_VEX_0F58 */
7c52e0e8 4466 {
592a252b
L
4467 { VEX_W_TABLE (VEX_W_0F58_P_0) },
4468 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4469 { VEX_W_TABLE (VEX_W_0F58_P_2) },
4470 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
4471 },
4472
592a252b 4473 /* PREFIX_VEX_0F59 */
7c52e0e8 4474 {
592a252b
L
4475 { VEX_W_TABLE (VEX_W_0F59_P_0) },
4476 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4477 { VEX_W_TABLE (VEX_W_0F59_P_2) },
4478 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
4479 },
4480
592a252b 4481 /* PREFIX_VEX_0F5A */
7c52e0e8 4482 {
592a252b
L
4483 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4484 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
c0f3af97 4485 { "vcvtpd2ps%XY", { XMM, EXx } },
592a252b 4486 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
4487 },
4488
592a252b 4489 /* PREFIX_VEX_0F5B */
7c52e0e8 4490 {
592a252b
L
4491 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4492 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4493 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
4494 },
4495
592a252b 4496 /* PREFIX_VEX_0F5C */
7c52e0e8 4497 {
592a252b
L
4498 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4499 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4500 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4501 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
4502 },
4503
592a252b 4504 /* PREFIX_VEX_0F5D */
7c52e0e8 4505 {
592a252b
L
4506 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4507 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4508 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4509 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
4510 },
4511
592a252b 4512 /* PREFIX_VEX_0F5E */
7c52e0e8 4513 {
592a252b
L
4514 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4515 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4516 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4517 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
4518 },
4519
592a252b 4520 /* PREFIX_VEX_0F5F */
7c52e0e8 4521 {
592a252b
L
4522 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4523 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4524 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4525 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
4526 },
4527
592a252b 4528 /* PREFIX_VEX_0F60 */
7c52e0e8 4529 {
592d1631
L
4530 { Bad_Opcode },
4531 { Bad_Opcode },
6c30d220 4532 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
4533 },
4534
592a252b 4535 /* PREFIX_VEX_0F61 */
7c52e0e8 4536 {
592d1631
L
4537 { Bad_Opcode },
4538 { Bad_Opcode },
6c30d220 4539 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
4540 },
4541
592a252b 4542 /* PREFIX_VEX_0F62 */
7c52e0e8 4543 {
592d1631
L
4544 { Bad_Opcode },
4545 { Bad_Opcode },
6c30d220 4546 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
4547 },
4548
592a252b 4549 /* PREFIX_VEX_0F63 */
7c52e0e8 4550 {
592d1631
L
4551 { Bad_Opcode },
4552 { Bad_Opcode },
6c30d220 4553 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
4554 },
4555
592a252b 4556 /* PREFIX_VEX_0F64 */
7c52e0e8 4557 {
592d1631
L
4558 { Bad_Opcode },
4559 { Bad_Opcode },
6c30d220 4560 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
4561 },
4562
592a252b 4563 /* PREFIX_VEX_0F65 */
7c52e0e8 4564 {
592d1631
L
4565 { Bad_Opcode },
4566 { Bad_Opcode },
6c30d220 4567 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
4568 },
4569
592a252b 4570 /* PREFIX_VEX_0F66 */
7c52e0e8 4571 {
592d1631
L
4572 { Bad_Opcode },
4573 { Bad_Opcode },
6c30d220 4574 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 4575 },
6439fc28 4576
592a252b 4577 /* PREFIX_VEX_0F67 */
331d2d0d 4578 {
592d1631
L
4579 { Bad_Opcode },
4580 { Bad_Opcode },
6c30d220 4581 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
4582 },
4583
592a252b 4584 /* PREFIX_VEX_0F68 */
c0f3af97 4585 {
592d1631
L
4586 { Bad_Opcode },
4587 { Bad_Opcode },
6c30d220 4588 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
4589 },
4590
592a252b 4591 /* PREFIX_VEX_0F69 */
c0f3af97 4592 {
592d1631
L
4593 { Bad_Opcode },
4594 { Bad_Opcode },
6c30d220 4595 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
4596 },
4597
592a252b 4598 /* PREFIX_VEX_0F6A */
c0f3af97 4599 {
592d1631
L
4600 { Bad_Opcode },
4601 { Bad_Opcode },
6c30d220 4602 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
4603 },
4604
592a252b 4605 /* PREFIX_VEX_0F6B */
c0f3af97 4606 {
592d1631
L
4607 { Bad_Opcode },
4608 { Bad_Opcode },
6c30d220 4609 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
4610 },
4611
592a252b 4612 /* PREFIX_VEX_0F6C */
c0f3af97 4613 {
592d1631
L
4614 { Bad_Opcode },
4615 { Bad_Opcode },
6c30d220 4616 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
4617 },
4618
592a252b 4619 /* PREFIX_VEX_0F6D */
c0f3af97 4620 {
592d1631
L
4621 { Bad_Opcode },
4622 { Bad_Opcode },
6c30d220 4623 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
4624 },
4625
592a252b 4626 /* PREFIX_VEX_0F6E */
c0f3af97 4627 {
592d1631
L
4628 { Bad_Opcode },
4629 { Bad_Opcode },
592a252b 4630 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4631 },
4632
592a252b 4633 /* PREFIX_VEX_0F6F */
c0f3af97 4634 {
592d1631 4635 { Bad_Opcode },
592a252b
L
4636 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4637 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
4638 },
4639
592a252b 4640 /* PREFIX_VEX_0F70 */
c0f3af97 4641 {
592d1631 4642 { Bad_Opcode },
6c30d220
L
4643 { VEX_W_TABLE (VEX_W_0F70_P_1) },
4644 { VEX_W_TABLE (VEX_W_0F70_P_2) },
4645 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
4646 },
4647
592a252b 4648 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4649 {
592d1631
L
4650 { Bad_Opcode },
4651 { Bad_Opcode },
6c30d220 4652 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
4653 },
4654
592a252b 4655 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4656 {
592d1631
L
4657 { Bad_Opcode },
4658 { Bad_Opcode },
6c30d220 4659 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
4660 },
4661
592a252b 4662 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4663 {
592d1631
L
4664 { Bad_Opcode },
4665 { Bad_Opcode },
6c30d220 4666 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
4667 },
4668
592a252b 4669 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4670 {
592d1631
L
4671 { Bad_Opcode },
4672 { Bad_Opcode },
6c30d220 4673 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
4674 },
4675
592a252b 4676 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4677 {
592d1631
L
4678 { Bad_Opcode },
4679 { Bad_Opcode },
6c30d220 4680 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
4681 },
4682
592a252b 4683 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4684 {
592d1631
L
4685 { Bad_Opcode },
4686 { Bad_Opcode },
6c30d220 4687 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
4688 },
4689
592a252b 4690 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 4691 {
592d1631
L
4692 { Bad_Opcode },
4693 { Bad_Opcode },
6c30d220 4694 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
4695 },
4696
592a252b 4697 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 4698 {
592d1631
L
4699 { Bad_Opcode },
4700 { Bad_Opcode },
6c30d220 4701 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
4702 },
4703
592a252b 4704 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 4705 {
592d1631
L
4706 { Bad_Opcode },
4707 { Bad_Opcode },
6c30d220 4708 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
4709 },
4710
592a252b 4711 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 4712 {
592d1631
L
4713 { Bad_Opcode },
4714 { Bad_Opcode },
6c30d220 4715 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
4716 },
4717
592a252b 4718 /* PREFIX_VEX_0F74 */
c0f3af97 4719 {
592d1631
L
4720 { Bad_Opcode },
4721 { Bad_Opcode },
6c30d220 4722 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
4723 },
4724
592a252b 4725 /* PREFIX_VEX_0F75 */
c0f3af97 4726 {
592d1631
L
4727 { Bad_Opcode },
4728 { Bad_Opcode },
6c30d220 4729 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
4730 },
4731
592a252b 4732 /* PREFIX_VEX_0F76 */
c0f3af97 4733 {
592d1631
L
4734 { Bad_Opcode },
4735 { Bad_Opcode },
6c30d220 4736 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
4737 },
4738
592a252b 4739 /* PREFIX_VEX_0F77 */
c0f3af97 4740 {
592a252b 4741 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
4742 },
4743
592a252b 4744 /* PREFIX_VEX_0F7C */
c0f3af97 4745 {
592d1631
L
4746 { Bad_Opcode },
4747 { Bad_Opcode },
592a252b
L
4748 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4749 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
4750 },
4751
592a252b 4752 /* PREFIX_VEX_0F7D */
c0f3af97 4753 {
592d1631
L
4754 { Bad_Opcode },
4755 { Bad_Opcode },
592a252b
L
4756 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4757 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
4758 },
4759
592a252b 4760 /* PREFIX_VEX_0F7E */
c0f3af97 4761 {
592d1631 4762 { Bad_Opcode },
592a252b
L
4763 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4764 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
4765 },
4766
592a252b 4767 /* PREFIX_VEX_0F7F */
c0f3af97 4768 {
592d1631 4769 { Bad_Opcode },
592a252b
L
4770 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4771 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
4772 },
4773
43234a1e
L
4774 /* PREFIX_VEX_0F90 */
4775 {
4776 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
4777 },
4778
4779 /* PREFIX_VEX_0F91 */
4780 {
4781 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
4782 },
4783
4784 /* PREFIX_VEX_0F92 */
4785 {
4786 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
4787 },
4788
4789 /* PREFIX_VEX_0F93 */
4790 {
4791 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
4792 },
4793
4794 /* PREFIX_VEX_0F98 */
4795 {
4796 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
4797 },
4798
592a252b 4799 /* PREFIX_VEX_0FC2 */
c0f3af97 4800 {
592a252b
L
4801 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4802 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4803 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4804 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
4805 },
4806
592a252b 4807 /* PREFIX_VEX_0FC4 */
c0f3af97 4808 {
592d1631
L
4809 { Bad_Opcode },
4810 { Bad_Opcode },
592a252b 4811 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
4812 },
4813
592a252b 4814 /* PREFIX_VEX_0FC5 */
c0f3af97 4815 {
592d1631
L
4816 { Bad_Opcode },
4817 { Bad_Opcode },
592a252b 4818 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
4819 },
4820
592a252b 4821 /* PREFIX_VEX_0FD0 */
c0f3af97 4822 {
592d1631
L
4823 { Bad_Opcode },
4824 { Bad_Opcode },
592a252b
L
4825 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4826 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
4827 },
4828
592a252b 4829 /* PREFIX_VEX_0FD1 */
c0f3af97 4830 {
592d1631
L
4831 { Bad_Opcode },
4832 { Bad_Opcode },
6c30d220 4833 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
4834 },
4835
592a252b 4836 /* PREFIX_VEX_0FD2 */
c0f3af97 4837 {
592d1631
L
4838 { Bad_Opcode },
4839 { Bad_Opcode },
6c30d220 4840 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
4841 },
4842
592a252b 4843 /* PREFIX_VEX_0FD3 */
c0f3af97 4844 {
592d1631
L
4845 { Bad_Opcode },
4846 { Bad_Opcode },
6c30d220 4847 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
4848 },
4849
592a252b 4850 /* PREFIX_VEX_0FD4 */
c0f3af97 4851 {
592d1631
L
4852 { Bad_Opcode },
4853 { Bad_Opcode },
6c30d220 4854 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
4855 },
4856
592a252b 4857 /* PREFIX_VEX_0FD5 */
c0f3af97 4858 {
592d1631
L
4859 { Bad_Opcode },
4860 { Bad_Opcode },
6c30d220 4861 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
4862 },
4863
592a252b 4864 /* PREFIX_VEX_0FD6 */
c0f3af97 4865 {
592d1631
L
4866 { Bad_Opcode },
4867 { Bad_Opcode },
592a252b 4868 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
4869 },
4870
592a252b 4871 /* PREFIX_VEX_0FD7 */
c0f3af97 4872 {
592d1631
L
4873 { Bad_Opcode },
4874 { Bad_Opcode },
592a252b 4875 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
4876 },
4877
592a252b 4878 /* PREFIX_VEX_0FD8 */
c0f3af97 4879 {
592d1631
L
4880 { Bad_Opcode },
4881 { Bad_Opcode },
6c30d220 4882 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
4883 },
4884
592a252b 4885 /* PREFIX_VEX_0FD9 */
c0f3af97 4886 {
592d1631
L
4887 { Bad_Opcode },
4888 { Bad_Opcode },
6c30d220 4889 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
4890 },
4891
592a252b 4892 /* PREFIX_VEX_0FDA */
c0f3af97 4893 {
592d1631
L
4894 { Bad_Opcode },
4895 { Bad_Opcode },
6c30d220 4896 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
4897 },
4898
592a252b 4899 /* PREFIX_VEX_0FDB */
c0f3af97 4900 {
592d1631
L
4901 { Bad_Opcode },
4902 { Bad_Opcode },
6c30d220 4903 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
4904 },
4905
592a252b 4906 /* PREFIX_VEX_0FDC */
c0f3af97 4907 {
592d1631
L
4908 { Bad_Opcode },
4909 { Bad_Opcode },
6c30d220 4910 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
4911 },
4912
592a252b 4913 /* PREFIX_VEX_0FDD */
c0f3af97 4914 {
592d1631
L
4915 { Bad_Opcode },
4916 { Bad_Opcode },
6c30d220 4917 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
4918 },
4919
592a252b 4920 /* PREFIX_VEX_0FDE */
c0f3af97 4921 {
592d1631
L
4922 { Bad_Opcode },
4923 { Bad_Opcode },
6c30d220 4924 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
4925 },
4926
592a252b 4927 /* PREFIX_VEX_0FDF */
c0f3af97 4928 {
592d1631
L
4929 { Bad_Opcode },
4930 { Bad_Opcode },
6c30d220 4931 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
4932 },
4933
592a252b 4934 /* PREFIX_VEX_0FE0 */
c0f3af97 4935 {
592d1631
L
4936 { Bad_Opcode },
4937 { Bad_Opcode },
6c30d220 4938 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
4939 },
4940
592a252b 4941 /* PREFIX_VEX_0FE1 */
c0f3af97 4942 {
592d1631
L
4943 { Bad_Opcode },
4944 { Bad_Opcode },
6c30d220 4945 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
4946 },
4947
592a252b 4948 /* PREFIX_VEX_0FE2 */
c0f3af97 4949 {
592d1631
L
4950 { Bad_Opcode },
4951 { Bad_Opcode },
6c30d220 4952 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
4953 },
4954
592a252b 4955 /* PREFIX_VEX_0FE3 */
c0f3af97 4956 {
592d1631
L
4957 { Bad_Opcode },
4958 { Bad_Opcode },
6c30d220 4959 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
4960 },
4961
592a252b 4962 /* PREFIX_VEX_0FE4 */
c0f3af97 4963 {
592d1631
L
4964 { Bad_Opcode },
4965 { Bad_Opcode },
6c30d220 4966 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
4967 },
4968
592a252b 4969 /* PREFIX_VEX_0FE5 */
c0f3af97 4970 {
592d1631
L
4971 { Bad_Opcode },
4972 { Bad_Opcode },
6c30d220 4973 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
4974 },
4975
592a252b 4976 /* PREFIX_VEX_0FE6 */
c0f3af97 4977 {
592d1631 4978 { Bad_Opcode },
592a252b
L
4979 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4980 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4981 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
4982 },
4983
592a252b 4984 /* PREFIX_VEX_0FE7 */
c0f3af97 4985 {
592d1631
L
4986 { Bad_Opcode },
4987 { Bad_Opcode },
592a252b 4988 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
4989 },
4990
592a252b 4991 /* PREFIX_VEX_0FE8 */
c0f3af97 4992 {
592d1631
L
4993 { Bad_Opcode },
4994 { Bad_Opcode },
6c30d220 4995 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
4996 },
4997
592a252b 4998 /* PREFIX_VEX_0FE9 */
c0f3af97 4999 {
592d1631
L
5000 { Bad_Opcode },
5001 { Bad_Opcode },
6c30d220 5002 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5003 },
5004
592a252b 5005 /* PREFIX_VEX_0FEA */
c0f3af97 5006 {
592d1631
L
5007 { Bad_Opcode },
5008 { Bad_Opcode },
6c30d220 5009 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5010 },
5011
592a252b 5012 /* PREFIX_VEX_0FEB */
c0f3af97 5013 {
592d1631
L
5014 { Bad_Opcode },
5015 { Bad_Opcode },
6c30d220 5016 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5017 },
5018
592a252b 5019 /* PREFIX_VEX_0FEC */
c0f3af97 5020 {
592d1631
L
5021 { Bad_Opcode },
5022 { Bad_Opcode },
6c30d220 5023 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5024 },
5025
592a252b 5026 /* PREFIX_VEX_0FED */
c0f3af97 5027 {
592d1631
L
5028 { Bad_Opcode },
5029 { Bad_Opcode },
6c30d220 5030 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5031 },
5032
592a252b 5033 /* PREFIX_VEX_0FEE */
c0f3af97 5034 {
592d1631
L
5035 { Bad_Opcode },
5036 { Bad_Opcode },
6c30d220 5037 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5038 },
5039
592a252b 5040 /* PREFIX_VEX_0FEF */
c0f3af97 5041 {
592d1631
L
5042 { Bad_Opcode },
5043 { Bad_Opcode },
6c30d220 5044 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5045 },
5046
592a252b 5047 /* PREFIX_VEX_0FF0 */
c0f3af97 5048 {
592d1631
L
5049 { Bad_Opcode },
5050 { Bad_Opcode },
5051 { Bad_Opcode },
592a252b 5052 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5053 },
5054
592a252b 5055 /* PREFIX_VEX_0FF1 */
c0f3af97 5056 {
592d1631
L
5057 { Bad_Opcode },
5058 { Bad_Opcode },
6c30d220 5059 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5060 },
5061
592a252b 5062 /* PREFIX_VEX_0FF2 */
c0f3af97 5063 {
592d1631
L
5064 { Bad_Opcode },
5065 { Bad_Opcode },
6c30d220 5066 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5067 },
5068
592a252b 5069 /* PREFIX_VEX_0FF3 */
c0f3af97 5070 {
592d1631
L
5071 { Bad_Opcode },
5072 { Bad_Opcode },
6c30d220 5073 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5074 },
5075
592a252b 5076 /* PREFIX_VEX_0FF4 */
c0f3af97 5077 {
592d1631
L
5078 { Bad_Opcode },
5079 { Bad_Opcode },
6c30d220 5080 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0FF5 */
c0f3af97 5084 {
592d1631
L
5085 { Bad_Opcode },
5086 { Bad_Opcode },
6c30d220 5087 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5088 },
5089
592a252b 5090 /* PREFIX_VEX_0FF6 */
c0f3af97 5091 {
592d1631
L
5092 { Bad_Opcode },
5093 { Bad_Opcode },
6c30d220 5094 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5095 },
5096
592a252b 5097 /* PREFIX_VEX_0FF7 */
c0f3af97 5098 {
592d1631
L
5099 { Bad_Opcode },
5100 { Bad_Opcode },
592a252b 5101 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5102 },
5103
592a252b 5104 /* PREFIX_VEX_0FF8 */
c0f3af97 5105 {
592d1631
L
5106 { Bad_Opcode },
5107 { Bad_Opcode },
6c30d220 5108 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5109 },
5110
592a252b 5111 /* PREFIX_VEX_0FF9 */
c0f3af97 5112 {
592d1631
L
5113 { Bad_Opcode },
5114 { Bad_Opcode },
6c30d220 5115 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5116 },
5117
592a252b 5118 /* PREFIX_VEX_0FFA */
c0f3af97 5119 {
592d1631
L
5120 { Bad_Opcode },
5121 { Bad_Opcode },
6c30d220 5122 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5123 },
5124
592a252b 5125 /* PREFIX_VEX_0FFB */
c0f3af97 5126 {
592d1631
L
5127 { Bad_Opcode },
5128 { Bad_Opcode },
6c30d220 5129 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5130 },
5131
592a252b 5132 /* PREFIX_VEX_0FFC */
c0f3af97 5133 {
592d1631
L
5134 { Bad_Opcode },
5135 { Bad_Opcode },
6c30d220 5136 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5137 },
5138
592a252b 5139 /* PREFIX_VEX_0FFD */
c0f3af97 5140 {
592d1631
L
5141 { Bad_Opcode },
5142 { Bad_Opcode },
6c30d220 5143 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5144 },
5145
592a252b 5146 /* PREFIX_VEX_0FFE */
c0f3af97 5147 {
592d1631
L
5148 { Bad_Opcode },
5149 { Bad_Opcode },
6c30d220 5150 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5151 },
5152
592a252b 5153 /* PREFIX_VEX_0F3800 */
c0f3af97 5154 {
592d1631
L
5155 { Bad_Opcode },
5156 { Bad_Opcode },
6c30d220 5157 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5158 },
5159
592a252b 5160 /* PREFIX_VEX_0F3801 */
c0f3af97 5161 {
592d1631
L
5162 { Bad_Opcode },
5163 { Bad_Opcode },
6c30d220 5164 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5165 },
5166
592a252b 5167 /* PREFIX_VEX_0F3802 */
c0f3af97 5168 {
592d1631
L
5169 { Bad_Opcode },
5170 { Bad_Opcode },
6c30d220 5171 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5172 },
5173
592a252b 5174 /* PREFIX_VEX_0F3803 */
c0f3af97 5175 {
592d1631
L
5176 { Bad_Opcode },
5177 { Bad_Opcode },
6c30d220 5178 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5179 },
5180
592a252b 5181 /* PREFIX_VEX_0F3804 */
c0f3af97 5182 {
592d1631
L
5183 { Bad_Opcode },
5184 { Bad_Opcode },
6c30d220 5185 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5186 },
5187
592a252b 5188 /* PREFIX_VEX_0F3805 */
c0f3af97 5189 {
592d1631
L
5190 { Bad_Opcode },
5191 { Bad_Opcode },
6c30d220 5192 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5193 },
5194
592a252b 5195 /* PREFIX_VEX_0F3806 */
c0f3af97 5196 {
592d1631
L
5197 { Bad_Opcode },
5198 { Bad_Opcode },
6c30d220 5199 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5200 },
5201
592a252b 5202 /* PREFIX_VEX_0F3807 */
c0f3af97 5203 {
592d1631
L
5204 { Bad_Opcode },
5205 { Bad_Opcode },
6c30d220 5206 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5207 },
5208
592a252b 5209 /* PREFIX_VEX_0F3808 */
c0f3af97 5210 {
592d1631
L
5211 { Bad_Opcode },
5212 { Bad_Opcode },
6c30d220 5213 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5214 },
5215
592a252b 5216 /* PREFIX_VEX_0F3809 */
c0f3af97 5217 {
592d1631
L
5218 { Bad_Opcode },
5219 { Bad_Opcode },
6c30d220 5220 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5221 },
5222
592a252b 5223 /* PREFIX_VEX_0F380A */
c0f3af97 5224 {
592d1631
L
5225 { Bad_Opcode },
5226 { Bad_Opcode },
6c30d220 5227 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5228 },
5229
592a252b 5230 /* PREFIX_VEX_0F380B */
c0f3af97 5231 {
592d1631
L
5232 { Bad_Opcode },
5233 { Bad_Opcode },
6c30d220 5234 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5235 },
5236
592a252b 5237 /* PREFIX_VEX_0F380C */
c0f3af97 5238 {
592d1631
L
5239 { Bad_Opcode },
5240 { Bad_Opcode },
592a252b 5241 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5242 },
5243
592a252b 5244 /* PREFIX_VEX_0F380D */
c0f3af97 5245 {
592d1631
L
5246 { Bad_Opcode },
5247 { Bad_Opcode },
592a252b 5248 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5249 },
5250
592a252b 5251 /* PREFIX_VEX_0F380E */
c0f3af97 5252 {
592d1631
L
5253 { Bad_Opcode },
5254 { Bad_Opcode },
592a252b 5255 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5256 },
5257
592a252b 5258 /* PREFIX_VEX_0F380F */
c0f3af97 5259 {
592d1631
L
5260 { Bad_Opcode },
5261 { Bad_Opcode },
592a252b 5262 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5263 },
5264
592a252b 5265 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5266 {
5267 { Bad_Opcode },
5268 { Bad_Opcode },
5269 { "vcvtph2ps", { XM, EXxmmq } },
5270 },
5271
6c30d220
L
5272 /* PREFIX_VEX_0F3816 */
5273 {
5274 { Bad_Opcode },
5275 { Bad_Opcode },
5276 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5277 },
5278
592a252b 5279 /* PREFIX_VEX_0F3817 */
c0f3af97 5280 {
592d1631
L
5281 { Bad_Opcode },
5282 { Bad_Opcode },
592a252b 5283 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5284 },
5285
592a252b 5286 /* PREFIX_VEX_0F3818 */
c0f3af97 5287 {
592d1631
L
5288 { Bad_Opcode },
5289 { Bad_Opcode },
6c30d220 5290 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5291 },
5292
592a252b 5293 /* PREFIX_VEX_0F3819 */
c0f3af97 5294 {
592d1631
L
5295 { Bad_Opcode },
5296 { Bad_Opcode },
6c30d220 5297 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5298 },
5299
592a252b 5300 /* PREFIX_VEX_0F381A */
c0f3af97 5301 {
592d1631
L
5302 { Bad_Opcode },
5303 { Bad_Opcode },
592a252b 5304 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5305 },
5306
592a252b 5307 /* PREFIX_VEX_0F381C */
c0f3af97 5308 {
592d1631
L
5309 { Bad_Opcode },
5310 { Bad_Opcode },
6c30d220 5311 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5312 },
5313
592a252b 5314 /* PREFIX_VEX_0F381D */
c0f3af97 5315 {
592d1631
L
5316 { Bad_Opcode },
5317 { Bad_Opcode },
6c30d220 5318 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5319 },
5320
592a252b 5321 /* PREFIX_VEX_0F381E */
c0f3af97 5322 {
592d1631
L
5323 { Bad_Opcode },
5324 { Bad_Opcode },
6c30d220 5325 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5326 },
5327
592a252b 5328 /* PREFIX_VEX_0F3820 */
c0f3af97 5329 {
592d1631
L
5330 { Bad_Opcode },
5331 { Bad_Opcode },
6c30d220 5332 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5333 },
5334
592a252b 5335 /* PREFIX_VEX_0F3821 */
c0f3af97 5336 {
592d1631
L
5337 { Bad_Opcode },
5338 { Bad_Opcode },
6c30d220 5339 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5340 },
5341
592a252b 5342 /* PREFIX_VEX_0F3822 */
c0f3af97 5343 {
592d1631
L
5344 { Bad_Opcode },
5345 { Bad_Opcode },
6c30d220 5346 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5347 },
5348
592a252b 5349 /* PREFIX_VEX_0F3823 */
c0f3af97 5350 {
592d1631
L
5351 { Bad_Opcode },
5352 { Bad_Opcode },
6c30d220 5353 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5354 },
5355
592a252b 5356 /* PREFIX_VEX_0F3824 */
c0f3af97 5357 {
592d1631
L
5358 { Bad_Opcode },
5359 { Bad_Opcode },
6c30d220 5360 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5361 },
5362
592a252b 5363 /* PREFIX_VEX_0F3825 */
c0f3af97 5364 {
592d1631
L
5365 { Bad_Opcode },
5366 { Bad_Opcode },
6c30d220 5367 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5368 },
5369
592a252b 5370 /* PREFIX_VEX_0F3828 */
c0f3af97 5371 {
592d1631
L
5372 { Bad_Opcode },
5373 { Bad_Opcode },
6c30d220 5374 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5375 },
5376
592a252b 5377 /* PREFIX_VEX_0F3829 */
c0f3af97 5378 {
592d1631
L
5379 { Bad_Opcode },
5380 { Bad_Opcode },
6c30d220 5381 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5382 },
5383
592a252b 5384 /* PREFIX_VEX_0F382A */
c0f3af97 5385 {
592d1631
L
5386 { Bad_Opcode },
5387 { Bad_Opcode },
592a252b 5388 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5389 },
5390
592a252b 5391 /* PREFIX_VEX_0F382B */
c0f3af97 5392 {
592d1631
L
5393 { Bad_Opcode },
5394 { Bad_Opcode },
6c30d220 5395 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5396 },
5397
592a252b 5398 /* PREFIX_VEX_0F382C */
c0f3af97 5399 {
592d1631
L
5400 { Bad_Opcode },
5401 { Bad_Opcode },
592a252b 5402 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5403 },
5404
592a252b 5405 /* PREFIX_VEX_0F382D */
c0f3af97 5406 {
592d1631
L
5407 { Bad_Opcode },
5408 { Bad_Opcode },
592a252b 5409 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5410 },
5411
592a252b 5412 /* PREFIX_VEX_0F382E */
c0f3af97 5413 {
592d1631
L
5414 { Bad_Opcode },
5415 { Bad_Opcode },
592a252b 5416 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5417 },
5418
592a252b 5419 /* PREFIX_VEX_0F382F */
c0f3af97 5420 {
592d1631
L
5421 { Bad_Opcode },
5422 { Bad_Opcode },
592a252b 5423 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5424 },
5425
592a252b 5426 /* PREFIX_VEX_0F3830 */
c0f3af97 5427 {
592d1631
L
5428 { Bad_Opcode },
5429 { Bad_Opcode },
6c30d220 5430 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5431 },
5432
592a252b 5433 /* PREFIX_VEX_0F3831 */
c0f3af97 5434 {
592d1631
L
5435 { Bad_Opcode },
5436 { Bad_Opcode },
6c30d220 5437 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
5438 },
5439
592a252b 5440 /* PREFIX_VEX_0F3832 */
c0f3af97 5441 {
592d1631
L
5442 { Bad_Opcode },
5443 { Bad_Opcode },
6c30d220 5444 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
5445 },
5446
592a252b 5447 /* PREFIX_VEX_0F3833 */
c0f3af97 5448 {
592d1631
L
5449 { Bad_Opcode },
5450 { Bad_Opcode },
6c30d220 5451 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
5452 },
5453
592a252b 5454 /* PREFIX_VEX_0F3834 */
c0f3af97 5455 {
592d1631
L
5456 { Bad_Opcode },
5457 { Bad_Opcode },
6c30d220 5458 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
5459 },
5460
592a252b 5461 /* PREFIX_VEX_0F3835 */
c0f3af97 5462 {
592d1631
L
5463 { Bad_Opcode },
5464 { Bad_Opcode },
6c30d220
L
5465 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5466 },
5467
5468 /* PREFIX_VEX_0F3836 */
5469 {
5470 { Bad_Opcode },
5471 { Bad_Opcode },
5472 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5473 },
5474
592a252b 5475 /* PREFIX_VEX_0F3837 */
c0f3af97 5476 {
592d1631
L
5477 { Bad_Opcode },
5478 { Bad_Opcode },
6c30d220 5479 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
5480 },
5481
592a252b 5482 /* PREFIX_VEX_0F3838 */
c0f3af97 5483 {
592d1631
L
5484 { Bad_Opcode },
5485 { Bad_Opcode },
6c30d220 5486 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
5487 },
5488
592a252b 5489 /* PREFIX_VEX_0F3839 */
c0f3af97 5490 {
592d1631
L
5491 { Bad_Opcode },
5492 { Bad_Opcode },
6c30d220 5493 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
5494 },
5495
592a252b 5496 /* PREFIX_VEX_0F383A */
c0f3af97 5497 {
592d1631
L
5498 { Bad_Opcode },
5499 { Bad_Opcode },
6c30d220 5500 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
5501 },
5502
592a252b 5503 /* PREFIX_VEX_0F383B */
c0f3af97 5504 {
592d1631
L
5505 { Bad_Opcode },
5506 { Bad_Opcode },
6c30d220 5507 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
5508 },
5509
592a252b 5510 /* PREFIX_VEX_0F383C */
c0f3af97 5511 {
592d1631
L
5512 { Bad_Opcode },
5513 { Bad_Opcode },
6c30d220 5514 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
5515 },
5516
592a252b 5517 /* PREFIX_VEX_0F383D */
c0f3af97 5518 {
592d1631
L
5519 { Bad_Opcode },
5520 { Bad_Opcode },
6c30d220 5521 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
5522 },
5523
592a252b 5524 /* PREFIX_VEX_0F383E */
c0f3af97 5525 {
592d1631
L
5526 { Bad_Opcode },
5527 { Bad_Opcode },
6c30d220 5528 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
5529 },
5530
592a252b 5531 /* PREFIX_VEX_0F383F */
c0f3af97 5532 {
592d1631
L
5533 { Bad_Opcode },
5534 { Bad_Opcode },
6c30d220 5535 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
5536 },
5537
592a252b 5538 /* PREFIX_VEX_0F3840 */
c0f3af97 5539 {
592d1631
L
5540 { Bad_Opcode },
5541 { Bad_Opcode },
6c30d220 5542 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
5543 },
5544
592a252b 5545 /* PREFIX_VEX_0F3841 */
c0f3af97 5546 {
592d1631
L
5547 { Bad_Opcode },
5548 { Bad_Opcode },
592a252b 5549 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5550 },
5551
6c30d220
L
5552 /* PREFIX_VEX_0F3845 */
5553 {
5554 { Bad_Opcode },
5555 { Bad_Opcode },
5556 { "vpsrlv%LW", { XM, Vex, EXx } },
5557 },
5558
5559 /* PREFIX_VEX_0F3846 */
5560 {
5561 { Bad_Opcode },
5562 { Bad_Opcode },
5563 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5564 },
5565
5566 /* PREFIX_VEX_0F3847 */
5567 {
5568 { Bad_Opcode },
5569 { Bad_Opcode },
5570 { "vpsllv%LW", { XM, Vex, EXx } },
5571 },
5572
5573 /* PREFIX_VEX_0F3858 */
5574 {
5575 { Bad_Opcode },
5576 { Bad_Opcode },
5577 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5578 },
5579
5580 /* PREFIX_VEX_0F3859 */
5581 {
5582 { Bad_Opcode },
5583 { Bad_Opcode },
5584 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5585 },
5586
5587 /* PREFIX_VEX_0F385A */
5588 {
5589 { Bad_Opcode },
5590 { Bad_Opcode },
5591 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5592 },
5593
5594 /* PREFIX_VEX_0F3878 */
5595 {
5596 { Bad_Opcode },
5597 { Bad_Opcode },
5598 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5599 },
5600
5601 /* PREFIX_VEX_0F3879 */
5602 {
5603 { Bad_Opcode },
5604 { Bad_Opcode },
5605 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5606 },
5607
5608 /* PREFIX_VEX_0F388C */
5609 {
5610 { Bad_Opcode },
5611 { Bad_Opcode },
f7002f42 5612 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5613 },
5614
5615 /* PREFIX_VEX_0F388E */
5616 {
5617 { Bad_Opcode },
5618 { Bad_Opcode },
f7002f42 5619 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5620 },
5621
5622 /* PREFIX_VEX_0F3890 */
5623 {
5624 { Bad_Opcode },
5625 { Bad_Opcode },
5626 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
5627 },
5628
5629 /* PREFIX_VEX_0F3891 */
5630 {
5631 { Bad_Opcode },
5632 { Bad_Opcode },
5633 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5634 },
5635
5636 /* PREFIX_VEX_0F3892 */
5637 {
5638 { Bad_Opcode },
5639 { Bad_Opcode },
5640 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
5641 },
5642
5643 /* PREFIX_VEX_0F3893 */
5644 {
5645 { Bad_Opcode },
5646 { Bad_Opcode },
5647 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5648 },
5649
592a252b 5650 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5651 {
592d1631
L
5652 { Bad_Opcode },
5653 { Bad_Opcode },
0bfee649 5654 { "vfmaddsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5655 },
5656
592a252b 5657 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5658 {
592d1631
L
5659 { Bad_Opcode },
5660 { Bad_Opcode },
0bfee649 5661 { "vfmsubadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5662 },
5663
592a252b 5664 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5665 {
592d1631
L
5666 { Bad_Opcode },
5667 { Bad_Opcode },
0bfee649 5668 { "vfmadd132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5669 },
5670
592a252b 5671 /* PREFIX_VEX_0F3899 */
a5ff0eb2 5672 {
592d1631
L
5673 { Bad_Opcode },
5674 { Bad_Opcode },
1c480963 5675 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
a5ff0eb2
L
5676 },
5677
592a252b 5678 /* PREFIX_VEX_0F389A */
a5ff0eb2 5679 {
592d1631
L
5680 { Bad_Opcode },
5681 { Bad_Opcode },
0bfee649 5682 { "vfmsub132p%XW", { XM, Vex, EXx } },
a5ff0eb2
L
5683 },
5684
592a252b 5685 /* PREFIX_VEX_0F389B */
c0f3af97 5686 {
592d1631
L
5687 { Bad_Opcode },
5688 { Bad_Opcode },
1c480963 5689 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5690 },
5691
592a252b 5692 /* PREFIX_VEX_0F389C */
c0f3af97 5693 {
592d1631
L
5694 { Bad_Opcode },
5695 { Bad_Opcode },
0bfee649 5696 { "vfnmadd132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5697 },
5698
592a252b 5699 /* PREFIX_VEX_0F389D */
c0f3af97 5700 {
592d1631
L
5701 { Bad_Opcode },
5702 { Bad_Opcode },
1c480963 5703 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5704 },
5705
592a252b 5706 /* PREFIX_VEX_0F389E */
c0f3af97 5707 {
592d1631
L
5708 { Bad_Opcode },
5709 { Bad_Opcode },
0bfee649 5710 { "vfnmsub132p%XW", { XM, Vex, EXx } },
c0f3af97
L
5711 },
5712
592a252b 5713 /* PREFIX_VEX_0F389F */
c0f3af97 5714 {
592d1631
L
5715 { Bad_Opcode },
5716 { Bad_Opcode },
1c480963 5717 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5718 },
5719
592a252b 5720 /* PREFIX_VEX_0F38A6 */
c0f3af97 5721 {
592d1631
L
5722 { Bad_Opcode },
5723 { Bad_Opcode },
0bfee649 5724 { "vfmaddsub213p%XW", { XM, Vex, EXx } },
592d1631 5725 { Bad_Opcode },
c0f3af97
L
5726 },
5727
592a252b 5728 /* PREFIX_VEX_0F38A7 */
c0f3af97 5729 {
592d1631
L
5730 { Bad_Opcode },
5731 { Bad_Opcode },
0bfee649 5732 { "vfmsubadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5733 },
5734
592a252b 5735 /* PREFIX_VEX_0F38A8 */
c0f3af97 5736 {
592d1631
L
5737 { Bad_Opcode },
5738 { Bad_Opcode },
0bfee649 5739 { "vfmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5740 },
5741
592a252b 5742 /* PREFIX_VEX_0F38A9 */
c0f3af97 5743 {
592d1631
L
5744 { Bad_Opcode },
5745 { Bad_Opcode },
1c480963 5746 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5747 },
5748
592a252b 5749 /* PREFIX_VEX_0F38AA */
c0f3af97 5750 {
592d1631
L
5751 { Bad_Opcode },
5752 { Bad_Opcode },
0bfee649 5753 { "vfmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5754 },
5755
592a252b 5756 /* PREFIX_VEX_0F38AB */
c0f3af97 5757 {
592d1631
L
5758 { Bad_Opcode },
5759 { Bad_Opcode },
1c480963 5760 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5761 },
5762
592a252b 5763 /* PREFIX_VEX_0F38AC */
c0f3af97 5764 {
592d1631
L
5765 { Bad_Opcode },
5766 { Bad_Opcode },
0bfee649 5767 { "vfnmadd213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5768 },
5769
592a252b 5770 /* PREFIX_VEX_0F38AD */
c0f3af97 5771 {
592d1631
L
5772 { Bad_Opcode },
5773 { Bad_Opcode },
1c480963 5774 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5775 },
5776
592a252b 5777 /* PREFIX_VEX_0F38AE */
c0f3af97 5778 {
592d1631
L
5779 { Bad_Opcode },
5780 { Bad_Opcode },
0bfee649 5781 { "vfnmsub213p%XW", { XM, Vex, EXx } },
c0f3af97
L
5782 },
5783
592a252b 5784 /* PREFIX_VEX_0F38AF */
c0f3af97 5785 {
592d1631
L
5786 { Bad_Opcode },
5787 { Bad_Opcode },
1c480963 5788 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5789 },
5790
592a252b 5791 /* PREFIX_VEX_0F38B6 */
c0f3af97 5792 {
592d1631
L
5793 { Bad_Opcode },
5794 { Bad_Opcode },
0bfee649 5795 { "vfmaddsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5796 },
5797
592a252b 5798 /* PREFIX_VEX_0F38B7 */
c0f3af97 5799 {
592d1631
L
5800 { Bad_Opcode },
5801 { Bad_Opcode },
0bfee649 5802 { "vfmsubadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5803 },
5804
592a252b 5805 /* PREFIX_VEX_0F38B8 */
c0f3af97 5806 {
592d1631
L
5807 { Bad_Opcode },
5808 { Bad_Opcode },
0bfee649 5809 { "vfmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5810 },
5811
592a252b 5812 /* PREFIX_VEX_0F38B9 */
c0f3af97 5813 {
592d1631
L
5814 { Bad_Opcode },
5815 { Bad_Opcode },
1c480963 5816 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5817 },
5818
592a252b 5819 /* PREFIX_VEX_0F38BA */
c0f3af97 5820 {
592d1631
L
5821 { Bad_Opcode },
5822 { Bad_Opcode },
0bfee649 5823 { "vfmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5824 },
5825
592a252b 5826 /* PREFIX_VEX_0F38BB */
c0f3af97 5827 {
592d1631
L
5828 { Bad_Opcode },
5829 { Bad_Opcode },
1c480963 5830 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5831 },
5832
592a252b 5833 /* PREFIX_VEX_0F38BC */
c0f3af97 5834 {
592d1631
L
5835 { Bad_Opcode },
5836 { Bad_Opcode },
0bfee649 5837 { "vfnmadd231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5838 },
5839
592a252b 5840 /* PREFIX_VEX_0F38BD */
c0f3af97 5841 {
592d1631
L
5842 { Bad_Opcode },
5843 { Bad_Opcode },
1c480963 5844 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5845 },
5846
592a252b 5847 /* PREFIX_VEX_0F38BE */
c0f3af97 5848 {
592d1631
L
5849 { Bad_Opcode },
5850 { Bad_Opcode },
0bfee649 5851 { "vfnmsub231p%XW", { XM, Vex, EXx } },
c0f3af97
L
5852 },
5853
592a252b 5854 /* PREFIX_VEX_0F38BF */
c0f3af97 5855 {
592d1631
L
5856 { Bad_Opcode },
5857 { Bad_Opcode },
1c480963 5858 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
c0f3af97
L
5859 },
5860
592a252b 5861 /* PREFIX_VEX_0F38DB */
c0f3af97 5862 {
592d1631
L
5863 { Bad_Opcode },
5864 { Bad_Opcode },
592a252b 5865 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
5866 },
5867
592a252b 5868 /* PREFIX_VEX_0F38DC */
c0f3af97 5869 {
592d1631
L
5870 { Bad_Opcode },
5871 { Bad_Opcode },
592a252b 5872 { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
c0f3af97
L
5873 },
5874
592a252b 5875 /* PREFIX_VEX_0F38DD */
c0f3af97 5876 {
592d1631
L
5877 { Bad_Opcode },
5878 { Bad_Opcode },
592a252b 5879 { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
c0f3af97
L
5880 },
5881
592a252b 5882 /* PREFIX_VEX_0F38DE */
c0f3af97 5883 {
592d1631
L
5884 { Bad_Opcode },
5885 { Bad_Opcode },
592a252b 5886 { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
c0f3af97
L
5887 },
5888
592a252b 5889 /* PREFIX_VEX_0F38DF */
c0f3af97 5890 {
592d1631
L
5891 { Bad_Opcode },
5892 { Bad_Opcode },
592a252b 5893 { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
c0f3af97
L
5894 },
5895
f12dc422
L
5896 /* PREFIX_VEX_0F38F2 */
5897 {
5898 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5899 },
5900
5901 /* PREFIX_VEX_0F38F3_REG_1 */
5902 {
5903 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5904 },
5905
5906 /* PREFIX_VEX_0F38F3_REG_2 */
5907 {
5908 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5909 },
5910
5911 /* PREFIX_VEX_0F38F3_REG_3 */
5912 {
5913 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5914 },
5915
6c30d220
L
5916 /* PREFIX_VEX_0F38F5 */
5917 {
5918 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5919 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5920 { Bad_Opcode },
5921 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5922 },
5923
5924 /* PREFIX_VEX_0F38F6 */
5925 {
5926 { Bad_Opcode },
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5930 },
5931
f12dc422
L
5932 /* PREFIX_VEX_0F38F7 */
5933 {
5934 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
5935 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5936 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5937 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5938 },
5939
5940 /* PREFIX_VEX_0F3A00 */
5941 {
5942 { Bad_Opcode },
5943 { Bad_Opcode },
5944 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5945 },
5946
5947 /* PREFIX_VEX_0F3A01 */
5948 {
5949 { Bad_Opcode },
5950 { Bad_Opcode },
5951 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5952 },
5953
5954 /* PREFIX_VEX_0F3A02 */
5955 {
5956 { Bad_Opcode },
5957 { Bad_Opcode },
5958 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
5959 },
5960
592a252b 5961 /* PREFIX_VEX_0F3A04 */
c0f3af97 5962 {
592d1631
L
5963 { Bad_Opcode },
5964 { Bad_Opcode },
592a252b 5965 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
5966 },
5967
592a252b 5968 /* PREFIX_VEX_0F3A05 */
c0f3af97 5969 {
592d1631
L
5970 { Bad_Opcode },
5971 { Bad_Opcode },
592a252b 5972 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
5973 },
5974
592a252b 5975 /* PREFIX_VEX_0F3A06 */
c0f3af97 5976 {
592d1631
L
5977 { Bad_Opcode },
5978 { Bad_Opcode },
592a252b 5979 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
5980 },
5981
592a252b 5982 /* PREFIX_VEX_0F3A08 */
c0f3af97 5983 {
592d1631
L
5984 { Bad_Opcode },
5985 { Bad_Opcode },
592a252b 5986 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
5987 },
5988
592a252b 5989 /* PREFIX_VEX_0F3A09 */
c0f3af97 5990 {
592d1631
L
5991 { Bad_Opcode },
5992 { Bad_Opcode },
592a252b 5993 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
5994 },
5995
592a252b 5996 /* PREFIX_VEX_0F3A0A */
c0f3af97 5997 {
592d1631
L
5998 { Bad_Opcode },
5999 { Bad_Opcode },
592a252b 6000 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6001 },
6002
592a252b 6003 /* PREFIX_VEX_0F3A0B */
0bfee649 6004 {
592d1631
L
6005 { Bad_Opcode },
6006 { Bad_Opcode },
592a252b 6007 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6008 },
6009
592a252b 6010 /* PREFIX_VEX_0F3A0C */
0bfee649 6011 {
592d1631
L
6012 { Bad_Opcode },
6013 { Bad_Opcode },
592a252b 6014 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6015 },
6016
592a252b 6017 /* PREFIX_VEX_0F3A0D */
0bfee649 6018 {
592d1631
L
6019 { Bad_Opcode },
6020 { Bad_Opcode },
592a252b 6021 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6022 },
6023
592a252b 6024 /* PREFIX_VEX_0F3A0E */
0bfee649 6025 {
592d1631
L
6026 { Bad_Opcode },
6027 { Bad_Opcode },
6c30d220 6028 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6029 },
6030
592a252b 6031 /* PREFIX_VEX_0F3A0F */
0bfee649 6032 {
592d1631
L
6033 { Bad_Opcode },
6034 { Bad_Opcode },
6c30d220 6035 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6036 },
6037
592a252b 6038 /* PREFIX_VEX_0F3A14 */
0bfee649 6039 {
592d1631
L
6040 { Bad_Opcode },
6041 { Bad_Opcode },
592a252b 6042 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6043 },
6044
592a252b 6045 /* PREFIX_VEX_0F3A15 */
0bfee649 6046 {
592d1631
L
6047 { Bad_Opcode },
6048 { Bad_Opcode },
592a252b 6049 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6050 },
6051
592a252b 6052 /* PREFIX_VEX_0F3A16 */
c0f3af97 6053 {
592d1631
L
6054 { Bad_Opcode },
6055 { Bad_Opcode },
592a252b 6056 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6057 },
6058
592a252b 6059 /* PREFIX_VEX_0F3A17 */
c0f3af97 6060 {
592d1631
L
6061 { Bad_Opcode },
6062 { Bad_Opcode },
592a252b 6063 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6064 },
6065
592a252b 6066 /* PREFIX_VEX_0F3A18 */
c0f3af97 6067 {
592d1631
L
6068 { Bad_Opcode },
6069 { Bad_Opcode },
592a252b 6070 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6071 },
6072
592a252b 6073 /* PREFIX_VEX_0F3A19 */
c0f3af97 6074 {
592d1631
L
6075 { Bad_Opcode },
6076 { Bad_Opcode },
592a252b 6077 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6078 },
6079
592a252b 6080 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6081 {
6082 { Bad_Opcode },
6083 { Bad_Opcode },
6084 { "vcvtps2ph", { EXxmmq, XM, Ib } },
6085 },
6086
592a252b 6087 /* PREFIX_VEX_0F3A20 */
c0f3af97 6088 {
592d1631
L
6089 { Bad_Opcode },
6090 { Bad_Opcode },
592a252b 6091 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6092 },
6093
592a252b 6094 /* PREFIX_VEX_0F3A21 */
c0f3af97 6095 {
592d1631
L
6096 { Bad_Opcode },
6097 { Bad_Opcode },
592a252b 6098 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6099 },
6100
592a252b 6101 /* PREFIX_VEX_0F3A22 */
0bfee649 6102 {
592d1631
L
6103 { Bad_Opcode },
6104 { Bad_Opcode },
592a252b 6105 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6106 },
6107
43234a1e
L
6108 /* PREFIX_VEX_0F3A30 */
6109 {
6110 { Bad_Opcode },
6111 { Bad_Opcode },
6112 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6113 },
6114
6115 /* PREFIX_VEX_0F3A32 */
6116 {
6117 { Bad_Opcode },
6118 { Bad_Opcode },
6119 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6120 },
6121
6c30d220
L
6122 /* PREFIX_VEX_0F3A38 */
6123 {
6124 { Bad_Opcode },
6125 { Bad_Opcode },
6126 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6127 },
6128
6129 /* PREFIX_VEX_0F3A39 */
6130 {
6131 { Bad_Opcode },
6132 { Bad_Opcode },
6133 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6134 },
6135
592a252b 6136 /* PREFIX_VEX_0F3A40 */
c0f3af97 6137 {
592d1631
L
6138 { Bad_Opcode },
6139 { Bad_Opcode },
592a252b 6140 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6141 },
6142
592a252b 6143 /* PREFIX_VEX_0F3A41 */
c0f3af97 6144 {
592d1631
L
6145 { Bad_Opcode },
6146 { Bad_Opcode },
592a252b 6147 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6148 },
6149
592a252b 6150 /* PREFIX_VEX_0F3A42 */
c0f3af97 6151 {
592d1631
L
6152 { Bad_Opcode },
6153 { Bad_Opcode },
6c30d220 6154 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6155 },
6156
592a252b 6157 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6158 {
592d1631
L
6159 { Bad_Opcode },
6160 { Bad_Opcode },
592a252b 6161 { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
ce2f5b3c
L
6162 },
6163
6c30d220
L
6164 /* PREFIX_VEX_0F3A46 */
6165 {
6166 { Bad_Opcode },
6167 { Bad_Opcode },
6168 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6169 },
6170
592a252b 6171 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6172 {
6173 { Bad_Opcode },
6174 { Bad_Opcode },
592a252b 6175 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6176 },
6177
592a252b 6178 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6179 {
6180 { Bad_Opcode },
6181 { Bad_Opcode },
592a252b 6182 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6183 },
6184
592a252b 6185 /* PREFIX_VEX_0F3A4A */
c0f3af97 6186 {
592d1631
L
6187 { Bad_Opcode },
6188 { Bad_Opcode },
592a252b 6189 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6190 },
6191
592a252b 6192 /* PREFIX_VEX_0F3A4B */
c0f3af97 6193 {
592d1631
L
6194 { Bad_Opcode },
6195 { Bad_Opcode },
592a252b 6196 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6197 },
6198
592a252b 6199 /* PREFIX_VEX_0F3A4C */
c0f3af97 6200 {
592d1631
L
6201 { Bad_Opcode },
6202 { Bad_Opcode },
6c30d220 6203 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6204 },
6205
592a252b 6206 /* PREFIX_VEX_0F3A5C */
922d8de8 6207 {
592d1631
L
6208 { Bad_Opcode },
6209 { Bad_Opcode },
206c2556 6210 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6211 },
6212
592a252b 6213 /* PREFIX_VEX_0F3A5D */
922d8de8 6214 {
592d1631
L
6215 { Bad_Opcode },
6216 { Bad_Opcode },
206c2556 6217 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6218 },
6219
592a252b 6220 /* PREFIX_VEX_0F3A5E */
922d8de8 6221 {
592d1631
L
6222 { Bad_Opcode },
6223 { Bad_Opcode },
206c2556 6224 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6225 },
6226
592a252b 6227 /* PREFIX_VEX_0F3A5F */
922d8de8 6228 {
592d1631
L
6229 { Bad_Opcode },
6230 { Bad_Opcode },
206c2556 6231 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6232 },
6233
592a252b 6234 /* PREFIX_VEX_0F3A60 */
c0f3af97 6235 {
592d1631
L
6236 { Bad_Opcode },
6237 { Bad_Opcode },
592a252b 6238 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6239 { Bad_Opcode },
c0f3af97
L
6240 },
6241
592a252b 6242 /* PREFIX_VEX_0F3A61 */
c0f3af97 6243 {
592d1631
L
6244 { Bad_Opcode },
6245 { Bad_Opcode },
592a252b 6246 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6247 },
6248
592a252b 6249 /* PREFIX_VEX_0F3A62 */
c0f3af97 6250 {
592d1631
L
6251 { Bad_Opcode },
6252 { Bad_Opcode },
592a252b 6253 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6254 },
6255
592a252b 6256 /* PREFIX_VEX_0F3A63 */
c0f3af97 6257 {
592d1631
L
6258 { Bad_Opcode },
6259 { Bad_Opcode },
592a252b 6260 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6261 },
a5ff0eb2 6262
592a252b 6263 /* PREFIX_VEX_0F3A68 */
922d8de8 6264 {
592d1631
L
6265 { Bad_Opcode },
6266 { Bad_Opcode },
206c2556 6267 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6268 },
6269
592a252b 6270 /* PREFIX_VEX_0F3A69 */
922d8de8 6271 {
592d1631
L
6272 { Bad_Opcode },
6273 { Bad_Opcode },
206c2556 6274 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6275 },
6276
592a252b 6277 /* PREFIX_VEX_0F3A6A */
922d8de8 6278 {
592d1631
L
6279 { Bad_Opcode },
6280 { Bad_Opcode },
592a252b 6281 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6282 },
6283
592a252b 6284 /* PREFIX_VEX_0F3A6B */
922d8de8 6285 {
592d1631
L
6286 { Bad_Opcode },
6287 { Bad_Opcode },
592a252b 6288 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6289 },
6290
592a252b 6291 /* PREFIX_VEX_0F3A6C */
922d8de8 6292 {
592d1631
L
6293 { Bad_Opcode },
6294 { Bad_Opcode },
206c2556 6295 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6296 },
6297
592a252b 6298 /* PREFIX_VEX_0F3A6D */
922d8de8 6299 {
592d1631
L
6300 { Bad_Opcode },
6301 { Bad_Opcode },
206c2556 6302 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6303 },
6304
592a252b 6305 /* PREFIX_VEX_0F3A6E */
922d8de8 6306 {
592d1631
L
6307 { Bad_Opcode },
6308 { Bad_Opcode },
592a252b 6309 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6310 },
6311
592a252b 6312 /* PREFIX_VEX_0F3A6F */
922d8de8 6313 {
592d1631
L
6314 { Bad_Opcode },
6315 { Bad_Opcode },
592a252b 6316 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6317 },
6318
592a252b 6319 /* PREFIX_VEX_0F3A78 */
922d8de8 6320 {
592d1631
L
6321 { Bad_Opcode },
6322 { Bad_Opcode },
206c2556 6323 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6324 },
6325
592a252b 6326 /* PREFIX_VEX_0F3A79 */
922d8de8 6327 {
592d1631
L
6328 { Bad_Opcode },
6329 { Bad_Opcode },
206c2556 6330 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6331 },
6332
592a252b 6333 /* PREFIX_VEX_0F3A7A */
922d8de8 6334 {
592d1631
L
6335 { Bad_Opcode },
6336 { Bad_Opcode },
592a252b 6337 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6338 },
6339
592a252b 6340 /* PREFIX_VEX_0F3A7B */
922d8de8 6341 {
592d1631
L
6342 { Bad_Opcode },
6343 { Bad_Opcode },
592a252b 6344 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6345 },
6346
592a252b 6347 /* PREFIX_VEX_0F3A7C */
922d8de8 6348 {
592d1631
L
6349 { Bad_Opcode },
6350 { Bad_Opcode },
206c2556 6351 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 6352 { Bad_Opcode },
922d8de8
DR
6353 },
6354
592a252b 6355 /* PREFIX_VEX_0F3A7D */
922d8de8 6356 {
592d1631
L
6357 { Bad_Opcode },
6358 { Bad_Opcode },
206c2556 6359 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
922d8de8
DR
6360 },
6361
592a252b 6362 /* PREFIX_VEX_0F3A7E */
922d8de8 6363 {
592d1631
L
6364 { Bad_Opcode },
6365 { Bad_Opcode },
592a252b 6366 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6367 },
6368
592a252b 6369 /* PREFIX_VEX_0F3A7F */
922d8de8 6370 {
592d1631
L
6371 { Bad_Opcode },
6372 { Bad_Opcode },
592a252b 6373 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6374 },
6375
592a252b 6376 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6377 {
592d1631
L
6378 { Bad_Opcode },
6379 { Bad_Opcode },
592a252b 6380 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6381 },
6c30d220
L
6382
6383 /* PREFIX_VEX_0F3AF0 */
6384 {
6385 { Bad_Opcode },
6386 { Bad_Opcode },
6387 { Bad_Opcode },
6388 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6389 },
43234a1e
L
6390
6391#define NEED_PREFIX_TABLE
6392#include "i386-dis-evex.h"
6393#undef NEED_PREFIX_TABLE
c0f3af97
L
6394};
6395
6396static const struct dis386 x86_64_table[][2] = {
6397 /* X86_64_06 */
6398 {
d9e3625e 6399 { "pushP", { es } },
c0f3af97
L
6400 },
6401
6402 /* X86_64_07 */
6403 {
d9e3625e 6404 { "popP", { es } },
c0f3af97
L
6405 },
6406
6407 /* X86_64_0D */
6408 {
d9e3625e 6409 { "pushP", { cs } },
c0f3af97
L
6410 },
6411
6412 /* X86_64_16 */
6413 {
d9e3625e 6414 { "pushP", { ss } },
c0f3af97
L
6415 },
6416
6417 /* X86_64_17 */
6418 {
d9e3625e 6419 { "popP", { ss } },
c0f3af97
L
6420 },
6421
6422 /* X86_64_1E */
6423 {
d9e3625e 6424 { "pushP", { ds } },
c0f3af97
L
6425 },
6426
6427 /* X86_64_1F */
6428 {
d9e3625e 6429 { "popP", { ds } },
c0f3af97
L
6430 },
6431
6432 /* X86_64_27 */
6433 {
6434 { "daa", { XX } },
c0f3af97
L
6435 },
6436
6437 /* X86_64_2F */
6438 {
6439 { "das", { XX } },
c0f3af97
L
6440 },
6441
6442 /* X86_64_37 */
6443 {
6444 { "aaa", { XX } },
c0f3af97
L
6445 },
6446
6447 /* X86_64_3F */
6448 {
6449 { "aas", { XX } },
c0f3af97
L
6450 },
6451
6452 /* X86_64_60 */
6453 {
d9e3625e 6454 { "pushaP", { XX } },
c0f3af97
L
6455 },
6456
6457 /* X86_64_61 */
6458 {
d9e3625e 6459 { "popaP", { XX } },
c0f3af97
L
6460 },
6461
6462 /* X86_64_62 */
6463 {
6464 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6465 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6466 },
6467
6468 /* X86_64_63 */
6469 {
6470 { "arpl", { Ew, Gw } },
6471 { "movs{lq|xd}", { Gv, Ed } },
6472 },
6473
6474 /* X86_64_6D */
6475 {
6476 { "ins{R|}", { Yzr, indirDX } },
6477 { "ins{G|}", { Yzr, indirDX } },
6478 },
6479
6480 /* X86_64_6F */
6481 {
6482 { "outs{R|}", { indirDXr, Xz } },
6483 { "outs{G|}", { indirDXr, Xz } },
6484 },
6485
6486 /* X86_64_9A */
6487 {
6488 { "Jcall{T|}", { Ap } },
c0f3af97
L
6489 },
6490
6491 /* X86_64_C4 */
6492 {
6493 { MOD_TABLE (MOD_C4_32BIT) },
6494 { VEX_C4_TABLE (VEX_0F) },
6495 },
6496
6497 /* X86_64_C5 */
6498 {
6499 { MOD_TABLE (MOD_C5_32BIT) },
6500 { VEX_C5_TABLE (VEX_0F) },
6501 },
6502
6503 /* X86_64_CE */
6504 {
6505 { "into", { XX } },
c0f3af97
L
6506 },
6507
6508 /* X86_64_D4 */
6509 {
e3949f17 6510 { "aam", { Ib } },
c0f3af97
L
6511 },
6512
6513 /* X86_64_D5 */
6514 {
e3949f17 6515 { "aad", { Ib } },
c0f3af97
L
6516 },
6517
6518 /* X86_64_EA */
6519 {
6520 { "Jjmp{T|}", { Ap } },
c0f3af97
L
6521 },
6522
6523 /* X86_64_0F01_REG_0 */
6524 {
6525 { "sgdt{Q|IQ}", { M } },
6526 { "sgdt", { M } },
6527 },
6528
6529 /* X86_64_0F01_REG_1 */
6530 {
6531 { "sidt{Q|IQ}", { M } },
6532 { "sidt", { M } },
6533 },
6534
6535 /* X86_64_0F01_REG_2 */
6536 {
6537 { "lgdt{Q|Q}", { M } },
6538 { "lgdt", { M } },
6539 },
6540
6541 /* X86_64_0F01_REG_3 */
6542 {
6543 { "lidt{Q|Q}", { M } },
6544 { "lidt", { M } },
6545 },
6546};
6547
6548static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6549
6550 /* THREE_BYTE_0F38 */
c0f3af97
L
6551 {
6552 /* 00 */
c1e679ec
DR
6553 { "pshufb", { MX, EM } },
6554 { "phaddw", { MX, EM } },
6555 { "phaddd", { MX, EM } },
6556 { "phaddsw", { MX, EM } },
6557 { "pmaddubsw", { MX, EM } },
6558 { "phsubw", { MX, EM } },
6559 { "phsubd", { MX, EM } },
6560 { "phsubsw", { MX, EM } },
c0f3af97 6561 /* 08 */
c1e679ec
DR
6562 { "psignb", { MX, EM } },
6563 { "psignw", { MX, EM } },
6564 { "psignd", { MX, EM } },
6565 { "pmulhrsw", { MX, EM } },
592d1631
L
6566 { Bad_Opcode },
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6569 { Bad_Opcode },
f88c9eb0
SP
6570 /* 10 */
6571 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6572 { Bad_Opcode },
6573 { Bad_Opcode },
6574 { Bad_Opcode },
f88c9eb0
SP
6575 { PREFIX_TABLE (PREFIX_0F3814) },
6576 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6577 { Bad_Opcode },
f88c9eb0
SP
6578 { PREFIX_TABLE (PREFIX_0F3817) },
6579 /* 18 */
592d1631
L
6580 { Bad_Opcode },
6581 { Bad_Opcode },
6582 { Bad_Opcode },
6583 { Bad_Opcode },
f88c9eb0
SP
6584 { "pabsb", { MX, EM } },
6585 { "pabsw", { MX, EM } },
6586 { "pabsd", { MX, EM } },
592d1631 6587 { Bad_Opcode },
f88c9eb0
SP
6588 /* 20 */
6589 { PREFIX_TABLE (PREFIX_0F3820) },
6590 { PREFIX_TABLE (PREFIX_0F3821) },
6591 { PREFIX_TABLE (PREFIX_0F3822) },
6592 { PREFIX_TABLE (PREFIX_0F3823) },
6593 { PREFIX_TABLE (PREFIX_0F3824) },
6594 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6595 { Bad_Opcode },
6596 { Bad_Opcode },
f88c9eb0
SP
6597 /* 28 */
6598 { PREFIX_TABLE (PREFIX_0F3828) },
6599 { PREFIX_TABLE (PREFIX_0F3829) },
6600 { PREFIX_TABLE (PREFIX_0F382A) },
6601 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6602 { Bad_Opcode },
6603 { Bad_Opcode },
6604 { Bad_Opcode },
6605 { Bad_Opcode },
f88c9eb0
SP
6606 /* 30 */
6607 { PREFIX_TABLE (PREFIX_0F3830) },
6608 { PREFIX_TABLE (PREFIX_0F3831) },
6609 { PREFIX_TABLE (PREFIX_0F3832) },
6610 { PREFIX_TABLE (PREFIX_0F3833) },
6611 { PREFIX_TABLE (PREFIX_0F3834) },
6612 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6613 { Bad_Opcode },
f88c9eb0
SP
6614 { PREFIX_TABLE (PREFIX_0F3837) },
6615 /* 38 */
6616 { PREFIX_TABLE (PREFIX_0F3838) },
6617 { PREFIX_TABLE (PREFIX_0F3839) },
6618 { PREFIX_TABLE (PREFIX_0F383A) },
6619 { PREFIX_TABLE (PREFIX_0F383B) },
6620 { PREFIX_TABLE (PREFIX_0F383C) },
6621 { PREFIX_TABLE (PREFIX_0F383D) },
6622 { PREFIX_TABLE (PREFIX_0F383E) },
6623 { PREFIX_TABLE (PREFIX_0F383F) },
6624 /* 40 */
6625 { PREFIX_TABLE (PREFIX_0F3840) },
6626 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
6627 { Bad_Opcode },
6628 { Bad_Opcode },
6629 { Bad_Opcode },
6630 { Bad_Opcode },
6631 { Bad_Opcode },
6632 { Bad_Opcode },
f88c9eb0 6633 /* 48 */
592d1631
L
6634 { Bad_Opcode },
6635 { Bad_Opcode },
6636 { Bad_Opcode },
6637 { Bad_Opcode },
6638 { Bad_Opcode },
6639 { Bad_Opcode },
6640 { Bad_Opcode },
6641 { Bad_Opcode },
f88c9eb0 6642 /* 50 */
592d1631
L
6643 { Bad_Opcode },
6644 { Bad_Opcode },
6645 { Bad_Opcode },
6646 { Bad_Opcode },
6647 { Bad_Opcode },
6648 { Bad_Opcode },
6649 { Bad_Opcode },
6650 { Bad_Opcode },
f88c9eb0 6651 /* 58 */
592d1631
L
6652 { Bad_Opcode },
6653 { Bad_Opcode },
6654 { Bad_Opcode },
6655 { Bad_Opcode },
6656 { Bad_Opcode },
6657 { Bad_Opcode },
6658 { Bad_Opcode },
6659 { Bad_Opcode },
f88c9eb0 6660 /* 60 */
592d1631
L
6661 { Bad_Opcode },
6662 { Bad_Opcode },
6663 { Bad_Opcode },
6664 { Bad_Opcode },
6665 { Bad_Opcode },
6666 { Bad_Opcode },
6667 { Bad_Opcode },
6668 { Bad_Opcode },
f88c9eb0 6669 /* 68 */
592d1631
L
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { Bad_Opcode },
6673 { Bad_Opcode },
6674 { Bad_Opcode },
6675 { Bad_Opcode },
6676 { Bad_Opcode },
6677 { Bad_Opcode },
f88c9eb0 6678 /* 70 */
592d1631
L
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { Bad_Opcode },
6682 { Bad_Opcode },
6683 { Bad_Opcode },
6684 { Bad_Opcode },
6685 { Bad_Opcode },
6686 { Bad_Opcode },
f88c9eb0 6687 /* 78 */
592d1631
L
6688 { Bad_Opcode },
6689 { Bad_Opcode },
6690 { Bad_Opcode },
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { Bad_Opcode },
6694 { Bad_Opcode },
6695 { Bad_Opcode },
f88c9eb0
SP
6696 /* 80 */
6697 { PREFIX_TABLE (PREFIX_0F3880) },
6698 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 6699 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { Bad_Opcode },
6703 { Bad_Opcode },
6704 { Bad_Opcode },
f88c9eb0 6705 /* 88 */
592d1631
L
6706 { Bad_Opcode },
6707 { Bad_Opcode },
6708 { Bad_Opcode },
6709 { Bad_Opcode },
6710 { Bad_Opcode },
6711 { Bad_Opcode },
6712 { Bad_Opcode },
6713 { Bad_Opcode },
f88c9eb0 6714 /* 90 */
592d1631
L
6715 { Bad_Opcode },
6716 { Bad_Opcode },
6717 { Bad_Opcode },
6718 { Bad_Opcode },
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { Bad_Opcode },
6722 { Bad_Opcode },
f88c9eb0 6723 /* 98 */
592d1631
L
6724 { Bad_Opcode },
6725 { Bad_Opcode },
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { Bad_Opcode },
6729 { Bad_Opcode },
6730 { Bad_Opcode },
6731 { Bad_Opcode },
f88c9eb0 6732 /* a0 */
592d1631
L
6733 { Bad_Opcode },
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6737 { Bad_Opcode },
6738 { Bad_Opcode },
6739 { Bad_Opcode },
6740 { Bad_Opcode },
f88c9eb0 6741 /* a8 */
592d1631
L
6742 { Bad_Opcode },
6743 { Bad_Opcode },
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { Bad_Opcode },
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { Bad_Opcode },
f88c9eb0 6750 /* b0 */
592d1631
L
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6757 { Bad_Opcode },
6758 { Bad_Opcode },
f88c9eb0 6759 /* b8 */
592d1631
L
6760 { Bad_Opcode },
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { Bad_Opcode },
6766 { Bad_Opcode },
6767 { Bad_Opcode },
f88c9eb0 6768 /* c0 */
592d1631
L
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { Bad_Opcode },
6773 { Bad_Opcode },
6774 { Bad_Opcode },
6775 { Bad_Opcode },
6776 { Bad_Opcode },
f88c9eb0 6777 /* c8 */
a0046408
L
6778 { PREFIX_TABLE (PREFIX_0F38C8) },
6779 { PREFIX_TABLE (PREFIX_0F38C9) },
6780 { PREFIX_TABLE (PREFIX_0F38CA) },
6781 { PREFIX_TABLE (PREFIX_0F38CB) },
6782 { PREFIX_TABLE (PREFIX_0F38CC) },
6783 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631
L
6784 { Bad_Opcode },
6785 { Bad_Opcode },
f88c9eb0 6786 /* d0 */
592d1631
L
6787 { Bad_Opcode },
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
6793 { Bad_Opcode },
6794 { Bad_Opcode },
f88c9eb0 6795 /* d8 */
592d1631
L
6796 { Bad_Opcode },
6797 { Bad_Opcode },
6798 { Bad_Opcode },
f88c9eb0
SP
6799 { PREFIX_TABLE (PREFIX_0F38DB) },
6800 { PREFIX_TABLE (PREFIX_0F38DC) },
6801 { PREFIX_TABLE (PREFIX_0F38DD) },
6802 { PREFIX_TABLE (PREFIX_0F38DE) },
6803 { PREFIX_TABLE (PREFIX_0F38DF) },
6804 /* e0 */
592d1631
L
6805 { Bad_Opcode },
6806 { Bad_Opcode },
6807 { Bad_Opcode },
6808 { Bad_Opcode },
6809 { Bad_Opcode },
6810 { Bad_Opcode },
6811 { Bad_Opcode },
6812 { Bad_Opcode },
f88c9eb0 6813 /* e8 */
592d1631
L
6814 { Bad_Opcode },
6815 { Bad_Opcode },
6816 { Bad_Opcode },
6817 { Bad_Opcode },
6818 { Bad_Opcode },
6819 { Bad_Opcode },
6820 { Bad_Opcode },
6821 { Bad_Opcode },
f88c9eb0
SP
6822 /* f0 */
6823 { PREFIX_TABLE (PREFIX_0F38F0) },
6824 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
6825 { Bad_Opcode },
6826 { Bad_Opcode },
6827 { Bad_Opcode },
6828 { Bad_Opcode },
e2e1fcde 6829 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 6830 { Bad_Opcode },
f88c9eb0 6831 /* f8 */
592d1631
L
6832 { Bad_Opcode },
6833 { Bad_Opcode },
6834 { Bad_Opcode },
6835 { Bad_Opcode },
6836 { Bad_Opcode },
6837 { Bad_Opcode },
6838 { Bad_Opcode },
6839 { Bad_Opcode },
f88c9eb0
SP
6840 },
6841 /* THREE_BYTE_0F3A */
6842 {
6843 /* 00 */
592d1631
L
6844 { Bad_Opcode },
6845 { Bad_Opcode },
6846 { Bad_Opcode },
6847 { Bad_Opcode },
6848 { Bad_Opcode },
6849 { Bad_Opcode },
6850 { Bad_Opcode },
6851 { Bad_Opcode },
f88c9eb0
SP
6852 /* 08 */
6853 { PREFIX_TABLE (PREFIX_0F3A08) },
6854 { PREFIX_TABLE (PREFIX_0F3A09) },
6855 { PREFIX_TABLE (PREFIX_0F3A0A) },
6856 { PREFIX_TABLE (PREFIX_0F3A0B) },
6857 { PREFIX_TABLE (PREFIX_0F3A0C) },
6858 { PREFIX_TABLE (PREFIX_0F3A0D) },
6859 { PREFIX_TABLE (PREFIX_0F3A0E) },
6860 { "palignr", { MX, EM, Ib } },
6861 /* 10 */
592d1631
L
6862 { Bad_Opcode },
6863 { Bad_Opcode },
6864 { Bad_Opcode },
6865 { Bad_Opcode },
f88c9eb0
SP
6866 { PREFIX_TABLE (PREFIX_0F3A14) },
6867 { PREFIX_TABLE (PREFIX_0F3A15) },
6868 { PREFIX_TABLE (PREFIX_0F3A16) },
6869 { PREFIX_TABLE (PREFIX_0F3A17) },
6870 /* 18 */
592d1631
L
6871 { Bad_Opcode },
6872 { Bad_Opcode },
6873 { Bad_Opcode },
6874 { Bad_Opcode },
6875 { Bad_Opcode },
6876 { Bad_Opcode },
6877 { Bad_Opcode },
6878 { Bad_Opcode },
f88c9eb0
SP
6879 /* 20 */
6880 { PREFIX_TABLE (PREFIX_0F3A20) },
6881 { PREFIX_TABLE (PREFIX_0F3A21) },
6882 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
6883 { Bad_Opcode },
6884 { Bad_Opcode },
6885 { Bad_Opcode },
6886 { Bad_Opcode },
6887 { Bad_Opcode },
f88c9eb0 6888 /* 28 */
592d1631
L
6889 { Bad_Opcode },
6890 { Bad_Opcode },
6891 { Bad_Opcode },
6892 { Bad_Opcode },
6893 { Bad_Opcode },
6894 { Bad_Opcode },
6895 { Bad_Opcode },
6896 { Bad_Opcode },
f88c9eb0 6897 /* 30 */
592d1631
L
6898 { Bad_Opcode },
6899 { Bad_Opcode },
6900 { Bad_Opcode },
6901 { Bad_Opcode },
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { Bad_Opcode },
6905 { Bad_Opcode },
f88c9eb0 6906 /* 38 */
592d1631
L
6907 { Bad_Opcode },
6908 { Bad_Opcode },
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { Bad_Opcode },
6912 { Bad_Opcode },
6913 { Bad_Opcode },
6914 { Bad_Opcode },
f88c9eb0
SP
6915 /* 40 */
6916 { PREFIX_TABLE (PREFIX_0F3A40) },
6917 { PREFIX_TABLE (PREFIX_0F3A41) },
6918 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 6919 { Bad_Opcode },
f88c9eb0 6920 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
6921 { Bad_Opcode },
6922 { Bad_Opcode },
6923 { Bad_Opcode },
f88c9eb0 6924 /* 48 */
592d1631
L
6925 { Bad_Opcode },
6926 { Bad_Opcode },
6927 { Bad_Opcode },
6928 { Bad_Opcode },
6929 { Bad_Opcode },
6930 { Bad_Opcode },
6931 { Bad_Opcode },
6932 { Bad_Opcode },
f88c9eb0 6933 /* 50 */
592d1631
L
6934 { Bad_Opcode },
6935 { Bad_Opcode },
6936 { Bad_Opcode },
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { Bad_Opcode },
6940 { Bad_Opcode },
6941 { Bad_Opcode },
f88c9eb0 6942 /* 58 */
592d1631
L
6943 { Bad_Opcode },
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { Bad_Opcode },
6947 { Bad_Opcode },
6948 { Bad_Opcode },
6949 { Bad_Opcode },
6950 { Bad_Opcode },
f88c9eb0
SP
6951 /* 60 */
6952 { PREFIX_TABLE (PREFIX_0F3A60) },
6953 { PREFIX_TABLE (PREFIX_0F3A61) },
6954 { PREFIX_TABLE (PREFIX_0F3A62) },
6955 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
6956 { Bad_Opcode },
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
f88c9eb0 6960 /* 68 */
592d1631
L
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { Bad_Opcode },
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { Bad_Opcode },
f88c9eb0 6969 /* 70 */
592d1631
L
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
f88c9eb0 6978 /* 78 */
592d1631
L
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
f88c9eb0 6987 /* 80 */
592d1631
L
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
6994 { Bad_Opcode },
6995 { Bad_Opcode },
f88c9eb0 6996 /* 88 */
592d1631
L
6997 { Bad_Opcode },
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
7004 { Bad_Opcode },
f88c9eb0 7005 /* 90 */
592d1631
L
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
f88c9eb0 7014 /* 98 */
592d1631
L
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
f88c9eb0 7023 /* a0 */
592d1631
L
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
f88c9eb0 7032 /* a8 */
592d1631
L
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
f88c9eb0 7041 /* b0 */
592d1631
L
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
f88c9eb0 7050 /* b8 */
592d1631
L
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
f88c9eb0 7059 /* c0 */
592d1631
L
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
f88c9eb0 7068 /* c8 */
592d1631
L
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
a0046408 7073 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631
L
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
f88c9eb0 7077 /* d0 */
592d1631
L
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
f88c9eb0 7086 /* d8 */
592d1631
L
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
f88c9eb0
SP
7094 { PREFIX_TABLE (PREFIX_0F3ADF) },
7095 /* e0 */
592d1631
L
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
f88c9eb0 7104 /* e8 */
592d1631
L
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
f88c9eb0 7113 /* f0 */
592d1631
L
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
f88c9eb0 7122 /* f8 */
592d1631
L
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
f88c9eb0
SP
7131 },
7132
7133 /* THREE_BYTE_0F7A */
7134 {
7135 /* 00 */
592d1631
L
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
f88c9eb0 7144 /* 08 */
592d1631
L
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
f88c9eb0 7153 /* 10 */
592d1631
L
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
f88c9eb0 7162 /* 18 */
592d1631
L
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
f88c9eb0
SP
7171 /* 20 */
7172 { "ptest", { XX } },
592d1631
L
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
f88c9eb0 7180 /* 28 */
592d1631
L
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
f88c9eb0 7189 /* 30 */
592d1631
L
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
f88c9eb0 7198 /* 38 */
592d1631
L
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
f88c9eb0 7207 /* 40 */
592d1631 7208 { Bad_Opcode },
f88c9eb0
SP
7209 { "phaddbw", { XM, EXq } },
7210 { "phaddbd", { XM, EXq } },
7211 { "phaddbq", { XM, EXq } },
592d1631
L
7212 { Bad_Opcode },
7213 { Bad_Opcode },
f88c9eb0
SP
7214 { "phaddwd", { XM, EXq } },
7215 { "phaddwq", { XM, EXq } },
7216 /* 48 */
592d1631
L
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
f88c9eb0 7220 { "phadddq", { XM, EXq } },
592d1631
L
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
f88c9eb0 7225 /* 50 */
592d1631 7226 { Bad_Opcode },
f88c9eb0
SP
7227 { "phaddubw", { XM, EXq } },
7228 { "phaddubd", { XM, EXq } },
7229 { "phaddubq", { XM, EXq } },
592d1631
L
7230 { Bad_Opcode },
7231 { Bad_Opcode },
f88c9eb0
SP
7232 { "phadduwd", { XM, EXq } },
7233 { "phadduwq", { XM, EXq } },
7234 /* 58 */
592d1631
L
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
f88c9eb0 7238 { "phaddudq", { XM, EXq } },
592d1631
L
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
f88c9eb0 7243 /* 60 */
592d1631 7244 { Bad_Opcode },
f88c9eb0
SP
7245 { "phsubbw", { XM, EXq } },
7246 { "phsubbd", { XM, EXq } },
7247 { "phsubbq", { XM, EXq } },
592d1631
L
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
4e7d34a6 7252 /* 68 */
592d1631
L
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
85f10a01 7261 /* 70 */
592d1631
L
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
85f10a01 7270 /* 78 */
592d1631
L
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
85f10a01 7279 /* 80 */
592d1631
L
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
85f10a01 7288 /* 88 */
592d1631
L
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
85f10a01 7297 /* 90 */
592d1631
L
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
85f10a01 7306 /* 98 */
592d1631
L
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
85f10a01 7315 /* a0 */
592d1631
L
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
85f10a01 7324 /* a8 */
592d1631
L
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
85f10a01 7333 /* b0 */
592d1631
L
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
85f10a01 7342 /* b8 */
592d1631
L
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
85f10a01 7351 /* c0 */
592d1631
L
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
85f10a01 7360 /* c8 */
592d1631
L
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
85f10a01 7369 /* d0 */
592d1631
L
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
85f10a01 7378 /* d8 */
592d1631
L
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
85f10a01 7387 /* e0 */
592d1631
L
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
85f10a01 7396 /* e8 */
592d1631
L
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
85f10a01 7405 /* f0 */
592d1631
L
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
85f10a01 7414 /* f8 */
592d1631
L
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
85f10a01 7423 },
f88c9eb0
SP
7424};
7425
7426static const struct dis386 xop_table[][256] = {
5dd85c99 7427 /* XOP_08 */
85f10a01
MM
7428 {
7429 /* 00 */
592d1631
L
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
85f10a01 7438 /* 08 */
592d1631
L
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
85f10a01 7447 /* 10 */
3929df09 7448 { Bad_Opcode },
592d1631
L
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
85f10a01 7456 /* 18 */
592d1631
L
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
85f10a01 7465 /* 20 */
592d1631
L
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
85f10a01 7474 /* 28 */
592d1631
L
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
c0f3af97 7483 /* 30 */
592d1631
L
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
c0f3af97 7492 /* 38 */
592d1631
L
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
c0f3af97 7501 /* 40 */
592d1631
L
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
85f10a01 7510 /* 48 */
592d1631
L
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
c0f3af97 7519 /* 50 */
592d1631
L
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
85f10a01 7528 /* 58 */
592d1631
L
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
c1e679ec 7537 /* 60 */
592d1631
L
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
c0f3af97 7546 /* 68 */
592d1631
L
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
85f10a01 7555 /* 70 */
592d1631
L
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
85f10a01 7564 /* 78 */
592d1631
L
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
85f10a01 7573 /* 80 */
592d1631
L
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
5dd85c99
SP
7579 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7580 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7581 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7582 /* 88 */
592d1631
L
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
5dd85c99
SP
7589 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7590 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7591 /* 90 */
592d1631
L
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
5dd85c99
SP
7597 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7598 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7599 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7600 /* 98 */
592d1631
L
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
5dd85c99
SP
7607 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7608 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7609 /* a0 */
592d1631
L
7610 { Bad_Opcode },
7611 { Bad_Opcode },
5dd85c99
SP
7612 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7613 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631
L
7614 { Bad_Opcode },
7615 { Bad_Opcode },
5dd85c99 7616 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7617 { Bad_Opcode },
5dd85c99 7618 /* a8 */
592d1631
L
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
5dd85c99 7627 /* b0 */
592d1631
L
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
5dd85c99 7634 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
592d1631 7635 { Bad_Opcode },
5dd85c99 7636 /* b8 */
592d1631
L
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
5dd85c99
SP
7645 /* c0 */
7646 { "vprotb", { XM, Vex_2src_1, Ib } },
7647 { "vprotw", { XM, Vex_2src_1, Ib } },
7648 { "vprotd", { XM, Vex_2src_1, Ib } },
7649 { "vprotq", { XM, Vex_2src_1, Ib } },
592d1631
L
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
5dd85c99 7654 /* c8 */
592d1631
L
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
ff688e1f
L
7659 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7660 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7661 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7662 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7663 /* d0 */
592d1631
L
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
5dd85c99 7672 /* d8 */
592d1631
L
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
5dd85c99 7681 /* e0 */
592d1631
L
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
5dd85c99 7690 /* e8 */
592d1631
L
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
ff688e1f
L
7695 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7696 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7697 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7698 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7699 /* f0 */
592d1631
L
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
5dd85c99 7708 /* f8 */
592d1631
L
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
5dd85c99
SP
7717 },
7718 /* XOP_09 */
7719 {
7720 /* 00 */
592d1631 7721 { Bad_Opcode },
2a2a0f38
QN
7722 { REG_TABLE (REG_XOP_TBM_01) },
7723 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
5dd85c99 7729 /* 08 */
592d1631
L
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
5dd85c99 7738 /* 10 */
592d1631
L
7739 { Bad_Opcode },
7740 { Bad_Opcode },
5dd85c99 7741 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
5dd85c99 7747 /* 18 */
592d1631
L
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
5dd85c99 7756 /* 20 */
592d1631
L
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
5dd85c99 7765 /* 28 */
592d1631
L
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
5dd85c99 7774 /* 30 */
592d1631
L
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
5dd85c99 7783 /* 38 */
592d1631
L
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
5dd85c99 7792 /* 40 */
592d1631
L
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
5dd85c99 7801 /* 48 */
592d1631
L
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
5dd85c99 7810 /* 50 */
592d1631
L
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
5dd85c99 7819 /* 58 */
592d1631
L
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
5dd85c99 7828 /* 60 */
592d1631
L
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
5dd85c99 7837 /* 68 */
592d1631
L
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
5dd85c99 7846 /* 70 */
592d1631
L
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
5dd85c99 7855 /* 78 */
592d1631
L
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
5dd85c99 7864 /* 80 */
592a252b
L
7865 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7866 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
5dd85c99
SP
7867 { "vfrczss", { XM, EXd } },
7868 { "vfrczsd", { XM, EXq } },
592d1631
L
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
5dd85c99 7873 /* 88 */
592d1631
L
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
5dd85c99
SP
7882 /* 90 */
7883 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7884 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7885 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7886 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7887 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7888 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7889 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7890 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7891 /* 98 */
7892 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7893 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7894 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7895 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
592d1631
L
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
5dd85c99 7900 /* a0 */
592d1631
L
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
5dd85c99 7909 /* a8 */
592d1631
L
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
5dd85c99 7918 /* b0 */
592d1631
L
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
5dd85c99 7927 /* b8 */
592d1631
L
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
5dd85c99 7936 /* c0 */
592d1631 7937 { Bad_Opcode },
5dd85c99
SP
7938 { "vphaddbw", { XM, EXxmm } },
7939 { "vphaddbd", { XM, EXxmm } },
7940 { "vphaddbq", { XM, EXxmm } },
592d1631
L
7941 { Bad_Opcode },
7942 { Bad_Opcode },
5dd85c99
SP
7943 { "vphaddwd", { XM, EXxmm } },
7944 { "vphaddwq", { XM, EXxmm } },
7945 /* c8 */
592d1631
L
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
5dd85c99 7949 { "vphadddq", { XM, EXxmm } },
592d1631
L
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
5dd85c99 7954 /* d0 */
592d1631 7955 { Bad_Opcode },
5dd85c99
SP
7956 { "vphaddubw", { XM, EXxmm } },
7957 { "vphaddubd", { XM, EXxmm } },
7958 { "vphaddubq", { XM, EXxmm } },
592d1631
L
7959 { Bad_Opcode },
7960 { Bad_Opcode },
5dd85c99
SP
7961 { "vphadduwd", { XM, EXxmm } },
7962 { "vphadduwq", { XM, EXxmm } },
7963 /* d8 */
592d1631
L
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
5dd85c99 7967 { "vphaddudq", { XM, EXxmm } },
592d1631
L
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
5dd85c99 7972 /* e0 */
592d1631 7973 { Bad_Opcode },
5dd85c99
SP
7974 { "vphsubbw", { XM, EXxmm } },
7975 { "vphsubwd", { XM, EXxmm } },
7976 { "vphsubdq", { XM, EXxmm } },
592d1631
L
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
4e7d34a6 7981 /* e8 */
592d1631
L
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
4e7d34a6 7990 /* f0 */
592d1631
L
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
4e7d34a6 7999 /* f8 */
592d1631
L
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
4e7d34a6 8008 },
f88c9eb0 8009 /* XOP_0A */
4e7d34a6
L
8010 {
8011 /* 00 */
592d1631
L
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
4e7d34a6 8020 /* 08 */
592d1631
L
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
4e7d34a6 8029 /* 10 */
2a2a0f38 8030 { "bextr", { Gv, Ev, Iq } },
592d1631 8031 { Bad_Opcode },
f88c9eb0 8032 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
4e7d34a6 8038 /* 18 */
592d1631
L
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
4e7d34a6 8047 /* 20 */
592d1631
L
8048 { Bad_Opcode },
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
4e7d34a6 8056 /* 28 */
592d1631
L
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
4e7d34a6 8065 /* 30 */
592d1631
L
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
c0f3af97 8074 /* 38 */
592d1631
L
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
c0f3af97 8083 /* 40 */
592d1631
L
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
c1e679ec 8092 /* 48 */
592d1631
L
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
c1e679ec 8101 /* 50 */
592d1631
L
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
4e7d34a6 8110 /* 58 */
592d1631
L
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
4e7d34a6 8119 /* 60 */
592d1631
L
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
4e7d34a6 8128 /* 68 */
592d1631
L
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
4e7d34a6 8137 /* 70 */
592d1631
L
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
4e7d34a6 8146 /* 78 */
592d1631
L
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
4e7d34a6 8155 /* 80 */
592d1631
L
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
4e7d34a6 8164 /* 88 */
592d1631
L
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
4e7d34a6 8173 /* 90 */
592d1631
L
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
4e7d34a6 8182 /* 98 */
592d1631
L
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
4e7d34a6 8191 /* a0 */
592d1631
L
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
4e7d34a6 8200 /* a8 */
592d1631
L
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
d5d7db8e 8209 /* b0 */
592d1631
L
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
85f10a01 8218 /* b8 */
592d1631
L
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
85f10a01 8227 /* c0 */
592d1631
L
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
85f10a01 8236 /* c8 */
592d1631
L
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
85f10a01 8245 /* d0 */
592d1631
L
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
85f10a01 8254 /* d8 */
592d1631
L
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
85f10a01 8263 /* e0 */
592d1631
L
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
85f10a01 8272 /* e8 */
592d1631
L
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
85f10a01 8281 /* f0 */
592d1631
L
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
85f10a01 8290 /* f8 */
592d1631
L
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
85f10a01 8299 },
c0f3af97
L
8300};
8301
8302static const struct dis386 vex_table[][256] = {
8303 /* VEX_0F */
85f10a01
MM
8304 {
8305 /* 00 */
592d1631
L
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
85f10a01 8314 /* 08 */
592d1631
L
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
c0f3af97 8323 /* 10 */
592a252b
L
8324 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8325 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8326 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8327 { MOD_TABLE (MOD_VEX_0F13) },
8328 { VEX_W_TABLE (VEX_W_0F14) },
8329 { VEX_W_TABLE (VEX_W_0F15) },
8330 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8331 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8332 /* 18 */
592d1631
L
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
c0f3af97 8341 /* 20 */
592d1631
L
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
c0f3af97 8350 /* 28 */
592a252b
L
8351 { VEX_W_TABLE (VEX_W_0F28) },
8352 { VEX_W_TABLE (VEX_W_0F29) },
8353 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8354 { MOD_TABLE (MOD_VEX_0F2B) },
8355 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8356 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8357 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8358 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8359 /* 30 */
592d1631
L
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
4e7d34a6 8368 /* 38 */
592d1631
L
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
d5d7db8e 8377 /* 40 */
592d1631 8378 { Bad_Opcode },
43234a1e
L
8379 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8380 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8381 { Bad_Opcode },
43234a1e
L
8382 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8383 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8384 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8385 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8386 /* 48 */
592d1631
L
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
43234a1e 8390 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
d5d7db8e 8395 /* 50 */
592a252b
L
8396 { MOD_TABLE (MOD_VEX_0F50) },
8397 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8398 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8399 { PREFIX_TABLE (PREFIX_VEX_0F53) },
c0f3af97
L
8400 { "vandpX", { XM, Vex, EXx } },
8401 { "vandnpX", { XM, Vex, EXx } },
8402 { "vorpX", { XM, Vex, EXx } },
8403 { "vxorpX", { XM, Vex, EXx } },
8404 /* 58 */
592a252b
L
8405 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8406 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8407 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8408 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8409 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8410 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8411 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8412 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8413 /* 60 */
592a252b
L
8414 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8415 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8416 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8417 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8418 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8419 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8420 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8421 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8422 /* 68 */
592a252b
L
8423 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8424 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8425 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8426 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8427 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8428 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8429 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8430 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8431 /* 70 */
592a252b
L
8432 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8433 { REG_TABLE (REG_VEX_0F71) },
8434 { REG_TABLE (REG_VEX_0F72) },
8435 { REG_TABLE (REG_VEX_0F73) },
8436 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8437 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8438 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8439 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8440 /* 78 */
592d1631
L
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
592a252b
L
8445 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8446 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8447 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8448 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8449 /* 80 */
592d1631
L
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
c0f3af97 8458 /* 88 */
592d1631
L
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
c0f3af97 8467 /* 90 */
43234a1e
L
8468 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8469 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8470 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8471 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
c0f3af97 8476 /* 98 */
43234a1e 8477 { PREFIX_TABLE (PREFIX_VEX_0F98) },
592d1631
L
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
c0f3af97 8485 /* a0 */
592d1631
L
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
c0f3af97 8494 /* a8 */
592d1631
L
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
592a252b 8501 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8502 { Bad_Opcode },
c0f3af97 8503 /* b0 */
592d1631
L
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
c0f3af97 8512 /* b8 */
592d1631
L
8513 { Bad_Opcode },
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
c0f3af97 8521 /* c0 */
592d1631
L
8522 { Bad_Opcode },
8523 { Bad_Opcode },
592a252b 8524 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8525 { Bad_Opcode },
592a252b
L
8526 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8527 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
c0f3af97 8528 { "vshufpX", { XM, Vex, EXx, Ib } },
592d1631 8529 { Bad_Opcode },
c0f3af97 8530 /* c8 */
592d1631
L
8531 { Bad_Opcode },
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
c0f3af97 8539 /* d0 */
592a252b
L
8540 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8541 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8542 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8543 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8544 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8545 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8546 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8547 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8548 /* d8 */
592a252b
L
8549 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8550 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8551 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8552 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8553 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8554 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8555 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8556 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8557 /* e0 */
592a252b
L
8558 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8559 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8560 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8561 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8562 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8563 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8564 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8565 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8566 /* e8 */
592a252b
L
8567 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8568 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8569 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8570 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8571 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8572 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8573 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8574 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8575 /* f0 */
592a252b
L
8576 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8577 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8578 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8579 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8580 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8581 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8582 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8583 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8584 /* f8 */
592a252b
L
8585 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8586 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8587 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8588 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8589 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8590 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8591 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8592 { Bad_Opcode },
c0f3af97
L
8593 },
8594 /* VEX_0F38 */
8595 {
8596 /* 00 */
592a252b
L
8597 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8598 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8599 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8600 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8601 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8602 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8603 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8604 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8605 /* 08 */
592a252b
L
8606 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8607 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8608 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8609 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8610 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8611 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8612 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8613 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8614 /* 10 */
592d1631
L
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
592a252b 8618 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8619 { Bad_Opcode },
8620 { Bad_Opcode },
6c30d220 8621 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8622 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8623 /* 18 */
592a252b
L
8624 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8625 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8626 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8627 { Bad_Opcode },
592a252b
L
8628 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8629 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8630 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8631 { Bad_Opcode },
c0f3af97 8632 /* 20 */
592a252b
L
8633 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8634 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8635 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8636 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8637 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8638 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8639 { Bad_Opcode },
8640 { Bad_Opcode },
c0f3af97 8641 /* 28 */
592a252b
L
8642 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8643 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8644 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8645 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8646 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8647 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8648 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8649 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8650 /* 30 */
592a252b
L
8651 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8652 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8653 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8654 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8655 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8656 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8657 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8658 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8659 /* 38 */
592a252b
L
8660 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8661 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8662 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8663 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8664 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8665 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8666 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8667 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8668 /* 40 */
592a252b
L
8669 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8670 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8671 { Bad_Opcode },
8672 { Bad_Opcode },
8673 { Bad_Opcode },
6c30d220
L
8674 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8675 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8676 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8677 /* 48 */
592d1631
L
8678 { Bad_Opcode },
8679 { Bad_Opcode },
8680 { Bad_Opcode },
8681 { Bad_Opcode },
8682 { Bad_Opcode },
8683 { Bad_Opcode },
8684 { Bad_Opcode },
8685 { Bad_Opcode },
c0f3af97 8686 /* 50 */
592d1631
L
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
8691 { Bad_Opcode },
8692 { Bad_Opcode },
8693 { Bad_Opcode },
8694 { Bad_Opcode },
c0f3af97 8695 /* 58 */
6c30d220
L
8696 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8697 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8698 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8699 { Bad_Opcode },
8700 { Bad_Opcode },
8701 { Bad_Opcode },
8702 { Bad_Opcode },
8703 { Bad_Opcode },
c0f3af97 8704 /* 60 */
592d1631
L
8705 { Bad_Opcode },
8706 { Bad_Opcode },
8707 { Bad_Opcode },
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
c0f3af97 8713 /* 68 */
592d1631
L
8714 { Bad_Opcode },
8715 { Bad_Opcode },
8716 { Bad_Opcode },
8717 { Bad_Opcode },
8718 { Bad_Opcode },
8719 { Bad_Opcode },
8720 { Bad_Opcode },
8721 { Bad_Opcode },
c0f3af97 8722 /* 70 */
592d1631
L
8723 { Bad_Opcode },
8724 { Bad_Opcode },
8725 { Bad_Opcode },
8726 { Bad_Opcode },
8727 { Bad_Opcode },
8728 { Bad_Opcode },
8729 { Bad_Opcode },
8730 { Bad_Opcode },
c0f3af97 8731 /* 78 */
6c30d220
L
8732 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8734 { Bad_Opcode },
8735 { Bad_Opcode },
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { Bad_Opcode },
8739 { Bad_Opcode },
c0f3af97 8740 /* 80 */
592d1631
L
8741 { Bad_Opcode },
8742 { Bad_Opcode },
8743 { Bad_Opcode },
8744 { Bad_Opcode },
8745 { Bad_Opcode },
8746 { Bad_Opcode },
8747 { Bad_Opcode },
8748 { Bad_Opcode },
c0f3af97 8749 /* 88 */
592d1631
L
8750 { Bad_Opcode },
8751 { Bad_Opcode },
8752 { Bad_Opcode },
8753 { Bad_Opcode },
6c30d220 8754 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8755 { Bad_Opcode },
6c30d220 8756 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8757 { Bad_Opcode },
c0f3af97 8758 /* 90 */
6c30d220
L
8759 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8763 { Bad_Opcode },
8764 { Bad_Opcode },
592a252b
L
8765 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8767 /* 98 */
592a252b
L
8768 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8774 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8775 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8776 /* a0 */
592d1631
L
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
592a252b
L
8783 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8785 /* a8 */
592a252b
L
8786 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8789 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8790 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8791 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8794 /* b0 */
592d1631
L
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
592a252b
L
8801 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8802 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8803 /* b8 */
592a252b
L
8804 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8805 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8806 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8807 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8808 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8809 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8810 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8811 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8812 /* c0 */
592d1631
L
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
c0f3af97 8821 /* c8 */
592d1631
L
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
c0f3af97 8830 /* d0 */
592d1631
L
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
c0f3af97 8839 /* d8 */
592d1631
L
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
592a252b
L
8843 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8844 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8845 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8846 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8847 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8848 /* e0 */
592d1631
L
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
c0f3af97 8857 /* e8 */
592d1631
L
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
c0f3af97 8866 /* f0 */
592d1631
L
8867 { Bad_Opcode },
8868 { Bad_Opcode },
f12dc422
L
8869 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8870 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8871 { Bad_Opcode },
6c30d220
L
8872 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8873 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8874 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8875 /* f8 */
592d1631
L
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
8880 { Bad_Opcode },
8881 { Bad_Opcode },
8882 { Bad_Opcode },
8883 { Bad_Opcode },
c0f3af97
L
8884 },
8885 /* VEX_0F3A */
8886 {
8887 /* 00 */
6c30d220
L
8888 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8889 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8890 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8891 { Bad_Opcode },
592a252b
L
8892 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8894 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8895 { Bad_Opcode },
c0f3af97 8896 /* 08 */
592a252b
L
8897 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8899 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8903 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8904 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 8905 /* 10 */
592d1631
L
8906 { Bad_Opcode },
8907 { Bad_Opcode },
8908 { Bad_Opcode },
8909 { Bad_Opcode },
592a252b
L
8910 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8912 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 8914 /* 18 */
592a252b
L
8915 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
8917 { Bad_Opcode },
8918 { Bad_Opcode },
8919 { Bad_Opcode },
592a252b 8920 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
8921 { Bad_Opcode },
8922 { Bad_Opcode },
c0f3af97 8923 /* 20 */
592a252b
L
8924 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8925 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8926 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
c0f3af97 8932 /* 28 */
592d1631
L
8933 { Bad_Opcode },
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
c0f3af97 8941 /* 30 */
43234a1e 8942 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
592d1631 8943 { Bad_Opcode },
43234a1e 8944 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
592d1631
L
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
c0f3af97 8950 /* 38 */
6c30d220
L
8951 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
c0f3af97 8959 /* 40 */
592a252b
L
8960 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8961 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8962 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 8963 { Bad_Opcode },
592a252b 8964 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 8965 { Bad_Opcode },
6c30d220 8966 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 8967 { Bad_Opcode },
c0f3af97 8968 /* 48 */
592a252b
L
8969 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8971 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
c0f3af97 8977 /* 50 */
592d1631
L
8978 { Bad_Opcode },
8979 { Bad_Opcode },
8980 { Bad_Opcode },
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
c0f3af97 8986 /* 58 */
592d1631
L
8987 { Bad_Opcode },
8988 { Bad_Opcode },
8989 { Bad_Opcode },
8990 { Bad_Opcode },
592a252b
L
8991 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8993 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8994 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 8995 /* 60 */
592a252b
L
8996 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8997 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
8998 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
8999 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
9003 { Bad_Opcode },
c0f3af97 9004 /* 68 */
592a252b
L
9005 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9011 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9012 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9013 /* 70 */
592d1631
L
9014 { Bad_Opcode },
9015 { Bad_Opcode },
9016 { Bad_Opcode },
9017 { Bad_Opcode },
9018 { Bad_Opcode },
9019 { Bad_Opcode },
9020 { Bad_Opcode },
9021 { Bad_Opcode },
c0f3af97 9022 /* 78 */
592a252b
L
9023 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9024 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9026 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9027 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9028 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9029 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9030 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9031 /* 80 */
592d1631
L
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
9038 { Bad_Opcode },
9039 { Bad_Opcode },
c0f3af97 9040 /* 88 */
592d1631
L
9041 { Bad_Opcode },
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { Bad_Opcode },
c0f3af97 9049 /* 90 */
592d1631
L
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
c0f3af97 9058 /* 98 */
592d1631
L
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
c0f3af97 9067 /* a0 */
592d1631
L
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
c0f3af97 9076 /* a8 */
592d1631
L
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
c0f3af97 9085 /* b0 */
592d1631
L
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
c0f3af97 9094 /* b8 */
592d1631
L
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
c0f3af97 9103 /* c0 */
592d1631
L
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
c0f3af97 9112 /* c8 */
592d1631
L
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { Bad_Opcode },
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
c0f3af97 9121 /* d0 */
592d1631
L
9122 { Bad_Opcode },
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
c0f3af97 9130 /* d8 */
592d1631
L
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
592a252b 9138 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9139 /* e0 */
592d1631
L
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
c0f3af97 9148 /* e8 */
592d1631
L
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
c0f3af97 9157 /* f0 */
6c30d220 9158 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
c0f3af97 9166 /* f8 */
592d1631
L
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
c0f3af97
L
9175 },
9176};
9177
43234a1e
L
9178#define NEED_OPCODE_TABLE
9179#include "i386-dis-evex.h"
9180#undef NEED_OPCODE_TABLE
c0f3af97 9181static const struct dis386 vex_len_table[][2] = {
592a252b 9182 /* VEX_LEN_0F10_P_1 */
c0f3af97 9183 {
592a252b
L
9184 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9185 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9186 },
9187
592a252b 9188 /* VEX_LEN_0F10_P_3 */
c0f3af97 9189 {
592a252b
L
9190 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9191 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9192 },
9193
592a252b 9194 /* VEX_LEN_0F11_P_1 */
c0f3af97 9195 {
592a252b
L
9196 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9197 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9198 },
9199
592a252b 9200 /* VEX_LEN_0F11_P_3 */
c0f3af97 9201 {
592a252b
L
9202 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9203 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9204 },
9205
592a252b 9206 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9207 {
592a252b 9208 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9209 },
9210
592a252b 9211 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9212 {
592a252b 9213 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9214 },
9215
592a252b 9216 /* VEX_LEN_0F12_P_2 */
c0f3af97 9217 {
592a252b 9218 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9219 },
9220
592a252b 9221 /* VEX_LEN_0F13_M_0 */
c0f3af97 9222 {
592a252b 9223 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9224 },
9225
592a252b 9226 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9227 {
592a252b 9228 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9229 },
9230
592a252b 9231 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9232 {
592a252b 9233 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9234 },
9235
592a252b 9236 /* VEX_LEN_0F16_P_2 */
c0f3af97 9237 {
592a252b 9238 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9239 },
9240
592a252b 9241 /* VEX_LEN_0F17_M_0 */
c0f3af97 9242 {
592a252b 9243 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9244 },
9245
592a252b 9246 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9247 {
539f890d
L
9248 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9249 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9250 },
9251
592a252b 9252 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9253 {
539f890d
L
9254 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9255 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
c0f3af97
L
9256 },
9257
592a252b 9258 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9259 {
539f890d
L
9260 { "vcvttss2siY", { Gv, EXdScalar } },
9261 { "vcvttss2siY", { Gv, EXdScalar } },
c0f3af97
L
9262 },
9263
592a252b 9264 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9265 {
539f890d
L
9266 { "vcvttsd2siY", { Gv, EXqScalar } },
9267 { "vcvttsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9268 },
9269
592a252b 9270 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9271 {
539f890d
L
9272 { "vcvtss2siY", { Gv, EXdScalar } },
9273 { "vcvtss2siY", { Gv, EXdScalar } },
c0f3af97
L
9274 },
9275
592a252b 9276 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9277 {
539f890d
L
9278 { "vcvtsd2siY", { Gv, EXqScalar } },
9279 { "vcvtsd2siY", { Gv, EXqScalar } },
c0f3af97
L
9280 },
9281
592a252b 9282 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9283 {
592a252b
L
9284 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9285 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9286 },
9287
592a252b 9288 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9289 {
592a252b
L
9290 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9291 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9292 },
9293
592a252b 9294 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9295 {
592a252b
L
9296 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9297 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9298 },
9299
592a252b 9300 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9301 {
592a252b
L
9302 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9303 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9304 },
9305
43234a1e
L
9306 /* VEX_LEN_0F41_P_0 */
9307 {
9308 { Bad_Opcode },
9309 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9310 },
9311 /* VEX_LEN_0F42_P_0 */
9312 {
9313 { Bad_Opcode },
9314 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9315 },
9316 /* VEX_LEN_0F44_P_0 */
9317 {
9318 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9319 },
9320 /* VEX_LEN_0F45_P_0 */
9321 {
9322 { Bad_Opcode },
9323 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9324 },
9325 /* VEX_LEN_0F46_P_0 */
9326 {
9327 { Bad_Opcode },
9328 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9329 },
9330 /* VEX_LEN_0F47_P_0 */
9331 {
9332 { Bad_Opcode },
9333 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9334 },
9335 /* VEX_LEN_0F4B_P_2 */
9336 {
9337 { Bad_Opcode },
9338 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9339 },
9340
592a252b 9341 /* VEX_LEN_0F51_P_1 */
c0f3af97 9342 {
592a252b
L
9343 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9344 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9345 },
9346
592a252b 9347 /* VEX_LEN_0F51_P_3 */
c0f3af97 9348 {
592a252b
L
9349 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9350 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9351 },
9352
592a252b 9353 /* VEX_LEN_0F52_P_1 */
c0f3af97 9354 {
592a252b
L
9355 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9356 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9357 },
9358
592a252b 9359 /* VEX_LEN_0F53_P_1 */
c0f3af97 9360 {
592a252b
L
9361 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9362 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9363 },
9364
592a252b 9365 /* VEX_LEN_0F58_P_1 */
c0f3af97 9366 {
592a252b
L
9367 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9368 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9369 },
9370
592a252b 9371 /* VEX_LEN_0F58_P_3 */
c0f3af97 9372 {
592a252b
L
9373 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9374 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9375 },
9376
592a252b 9377 /* VEX_LEN_0F59_P_1 */
c0f3af97 9378 {
592a252b
L
9379 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9380 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9381 },
9382
592a252b 9383 /* VEX_LEN_0F59_P_3 */
c0f3af97 9384 {
592a252b
L
9385 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9386 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9387 },
9388
592a252b 9389 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9390 {
592a252b
L
9391 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9392 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9393 },
9394
592a252b 9395 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9396 {
592a252b
L
9397 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9398 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9399 },
9400
592a252b 9401 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9402 {
592a252b
L
9403 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9404 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9405 },
9406
592a252b 9407 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9408 {
592a252b
L
9409 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9410 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9411 },
9412
592a252b 9413 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9414 {
592a252b
L
9415 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9416 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9417 },
9418
592a252b 9419 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9420 {
592a252b
L
9421 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9422 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9423 },
9424
592a252b 9425 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9426 {
592a252b
L
9427 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9428 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9429 },
9430
592a252b 9431 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9432 {
592a252b
L
9433 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9434 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9435 },
9436
592a252b 9437 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9438 {
592a252b
L
9439 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9440 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9441 },
9442
592a252b 9443 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9444 {
592a252b
L
9445 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9446 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9447 },
9448
592a252b 9449 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9450 {
539f890d
L
9451 { "vmovK", { XMScalar, Edq } },
9452 { "vmovK", { XMScalar, Edq } },
c0f3af97
L
9453 },
9454
592a252b 9455 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9456 {
592a252b
L
9457 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9458 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9459 },
9460
592a252b 9461 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9462 {
539f890d 9463 { "vmovK", { Edq, XMScalar } },
6c30d220 9464 { "vmovK", { Edq, XMScalar } },
c0f3af97
L
9465 },
9466
43234a1e
L
9467 /* VEX_LEN_0F90_P_0 */
9468 {
9469 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9470 },
9471
9472 /* VEX_LEN_0F91_P_0 */
9473 {
9474 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9475 },
9476
9477 /* VEX_LEN_0F92_P_0 */
9478 {
9479 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9480 },
9481
9482 /* VEX_LEN_0F93_P_0 */
9483 {
9484 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9485 },
9486
9487 /* VEX_LEN_0F98_P_0 */
9488 {
9489 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9490 },
9491
6c30d220 9492 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9493 {
6c30d220 9494 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9495 },
9496
6c30d220 9497 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9498 {
6c30d220 9499 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9500 },
9501
6c30d220 9502 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9503 {
6c30d220
L
9504 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9505 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9506 },
9507
6c30d220 9508 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9509 {
6c30d220
L
9510 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9511 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9512 },
9513
6c30d220 9514 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9515 {
6c30d220 9516 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9517 },
9518
6c30d220 9519 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9520 {
6c30d220 9521 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9522 },
9523
6c30d220 9524 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9525 {
6c30d220
L
9526 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9527 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9528 },
9529
6c30d220 9530 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9531 {
6c30d220 9532 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9533 },
9534
6c30d220 9535 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9536 {
6c30d220
L
9537 { Bad_Opcode },
9538 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9539 },
9540
6c30d220 9541 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9542 {
6c30d220
L
9543 { Bad_Opcode },
9544 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9545 },
9546
6c30d220 9547 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9548 {
6c30d220
L
9549 { Bad_Opcode },
9550 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9551 },
9552
6c30d220 9553 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9554 {
6c30d220
L
9555 { Bad_Opcode },
9556 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9557 },
9558
592a252b 9559 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9560 {
592a252b 9561 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9562 },
9563
6c30d220
L
9564 /* VEX_LEN_0F385A_P_2_M_0 */
9565 {
9566 { Bad_Opcode },
9567 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9568 },
9569
592a252b 9570 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9571 {
592a252b 9572 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9573 },
9574
592a252b 9575 /* VEX_LEN_0F38DC_P_2 */
a5ff0eb2 9576 {
592a252b 9577 { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
a5ff0eb2
L
9578 },
9579
592a252b 9580 /* VEX_LEN_0F38DD_P_2 */
a5ff0eb2 9581 {
592a252b 9582 { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
a5ff0eb2
L
9583 },
9584
592a252b 9585 /* VEX_LEN_0F38DE_P_2 */
a5ff0eb2 9586 {
592a252b 9587 { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
a5ff0eb2
L
9588 },
9589
592a252b 9590 /* VEX_LEN_0F38DF_P_2 */
a5ff0eb2 9591 {
592a252b 9592 { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
a5ff0eb2
L
9593 },
9594
f12dc422
L
9595 /* VEX_LEN_0F38F2_P_0 */
9596 {
9597 { "andnS", { Gdq, VexGdq, Edq } },
9598 },
9599
9600 /* VEX_LEN_0F38F3_R_1_P_0 */
9601 {
9602 { "blsrS", { VexGdq, Edq } },
9603 },
9604
9605 /* VEX_LEN_0F38F3_R_2_P_0 */
9606 {
9607 { "blsmskS", { VexGdq, Edq } },
9608 },
9609
9610 /* VEX_LEN_0F38F3_R_3_P_0 */
9611 {
9612 { "blsiS", { VexGdq, Edq } },
9613 },
9614
6c30d220
L
9615 /* VEX_LEN_0F38F5_P_0 */
9616 {
9617 { "bzhiS", { Gdq, Edq, VexGdq } },
9618 },
9619
9620 /* VEX_LEN_0F38F5_P_1 */
9621 {
9622 { "pextS", { Gdq, VexGdq, Edq } },
9623 },
9624
9625 /* VEX_LEN_0F38F5_P_3 */
9626 {
9627 { "pdepS", { Gdq, VexGdq, Edq } },
9628 },
9629
9630 /* VEX_LEN_0F38F6_P_3 */
9631 {
9632 { "mulxS", { Gdq, VexGdq, Edq } },
9633 },
9634
f12dc422
L
9635 /* VEX_LEN_0F38F7_P_0 */
9636 {
9637 { "bextrS", { Gdq, Edq, VexGdq } },
9638 },
9639
6c30d220
L
9640 /* VEX_LEN_0F38F7_P_1 */
9641 {
9642 { "sarxS", { Gdq, Edq, VexGdq } },
9643 },
9644
9645 /* VEX_LEN_0F38F7_P_2 */
9646 {
9647 { "shlxS", { Gdq, Edq, VexGdq } },
9648 },
9649
9650 /* VEX_LEN_0F38F7_P_3 */
9651 {
9652 { "shrxS", { Gdq, Edq, VexGdq } },
9653 },
9654
9655 /* VEX_LEN_0F3A00_P_2 */
9656 {
9657 { Bad_Opcode },
9658 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9659 },
9660
9661 /* VEX_LEN_0F3A01_P_2 */
9662 {
9663 { Bad_Opcode },
9664 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9665 },
9666
592a252b 9667 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9668 {
592d1631 9669 { Bad_Opcode },
592a252b 9670 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9671 },
9672
592a252b 9673 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 9674 {
592a252b
L
9675 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9676 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
9677 },
9678
592a252b 9679 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 9680 {
592a252b
L
9681 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9682 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
9683 },
9684
592a252b 9685 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9686 {
592a252b 9687 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
9688 },
9689
592a252b 9690 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9691 {
592a252b 9692 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
9693 },
9694
592a252b 9695 /* VEX_LEN_0F3A16_P_2 */
c0f3af97
L
9696 {
9697 { "vpextrK", { Edq, XM, Ib } },
c0f3af97
L
9698 },
9699
592a252b 9700 /* VEX_LEN_0F3A17_P_2 */
c0f3af97
L
9701 {
9702 { "vextractps", { Edqd, XM, Ib } },
c0f3af97
L
9703 },
9704
592a252b 9705 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9706 {
592d1631 9707 { Bad_Opcode },
592a252b 9708 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9709 },
9710
592a252b 9711 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9712 {
592d1631 9713 { Bad_Opcode },
592a252b 9714 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9715 },
9716
592a252b 9717 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9718 {
592a252b 9719 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
9720 },
9721
592a252b 9722 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9723 {
592a252b 9724 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
9725 },
9726
592a252b 9727 /* VEX_LEN_0F3A22_P_2 */
c0f3af97
L
9728 {
9729 { "vpinsrK", { XM, Vex128, Edq, Ib } },
c0f3af97
L
9730 },
9731
43234a1e
L
9732 /* VEX_LEN_0F3A30_P_2 */
9733 {
9734 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9735 },
9736
9737 /* VEX_LEN_0F3A32_P_2 */
9738 {
9739 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9740 },
9741
6c30d220 9742 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9743 {
6c30d220
L
9744 { Bad_Opcode },
9745 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9746 },
9747
6c30d220 9748 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9749 {
6c30d220
L
9750 { Bad_Opcode },
9751 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9752 },
9753
9754 /* VEX_LEN_0F3A41_P_2 */
9755 {
9756 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
9757 },
9758
592a252b 9759 /* VEX_LEN_0F3A44_P_2 */
ce2f5b3c 9760 {
592a252b 9761 { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
ce2f5b3c
L
9762 },
9763
6c30d220 9764 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9765 {
6c30d220
L
9766 { Bad_Opcode },
9767 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9768 },
9769
592a252b 9770 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9771 {
592a252b 9772 { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
c0f3af97
L
9773 },
9774
592a252b 9775 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9776 {
592a252b 9777 { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
c0f3af97
L
9778 },
9779
592a252b 9780 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9781 {
592a252b 9782 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
9783 },
9784
592a252b 9785 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9786 {
592a252b 9787 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
9788 },
9789
592a252b 9790 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9791 {
206c2556 9792 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9793 },
9794
592a252b 9795 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9796 {
206c2556 9797 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9798 },
9799
592a252b 9800 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9801 {
206c2556 9802 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9803 },
9804
592a252b 9805 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9806 {
206c2556 9807 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9808 },
9809
592a252b 9810 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9811 {
206c2556 9812 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9813 },
9814
592a252b 9815 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9816 {
206c2556 9817 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9818 },
9819
592a252b 9820 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9821 {
206c2556 9822 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
922d8de8
DR
9823 },
9824
592a252b 9825 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9826 {
206c2556 9827 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
922d8de8
DR
9828 },
9829
592a252b 9830 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9831 {
592a252b 9832 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 9833 },
4c807e72 9834
6c30d220
L
9835 /* VEX_LEN_0F3AF0_P_3 */
9836 {
182ae480 9837 { "rorxS", { Gdq, Edq, Ib } },
6c30d220
L
9838 },
9839
ff688e1f
L
9840 /* VEX_LEN_0FXOP_08_CC */
9841 {
9842 { "vpcomb", { XM, Vex128, EXx, Ib } },
9843 },
9844
9845 /* VEX_LEN_0FXOP_08_CD */
9846 {
9847 { "vpcomw", { XM, Vex128, EXx, Ib } },
9848 },
9849
9850 /* VEX_LEN_0FXOP_08_CE */
9851 {
9852 { "vpcomd", { XM, Vex128, EXx, Ib } },
9853 },
9854
9855 /* VEX_LEN_0FXOP_08_CF */
9856 {
9857 { "vpcomq", { XM, Vex128, EXx, Ib } },
9858 },
9859
9860 /* VEX_LEN_0FXOP_08_EC */
9861 {
9862 { "vpcomub", { XM, Vex128, EXx, Ib } },
9863 },
9864
9865 /* VEX_LEN_0FXOP_08_ED */
9866 {
9867 { "vpcomuw", { XM, Vex128, EXx, Ib } },
9868 },
9869
9870 /* VEX_LEN_0FXOP_08_EE */
9871 {
9872 { "vpcomud", { XM, Vex128, EXx, Ib } },
9873 },
9874
9875 /* VEX_LEN_0FXOP_08_EF */
9876 {
9877 { "vpcomuq", { XM, Vex128, EXx, Ib } },
9878 },
9879
592a252b 9880 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9881 {
4c807e72
L
9882 { "vfrczps", { XM, EXxmm } },
9883 { "vfrczps", { XM, EXymmq } },
5dd85c99 9884 },
4c807e72 9885
592a252b 9886 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9887 {
4c807e72
L
9888 { "vfrczpd", { XM, EXxmm } },
9889 { "vfrczpd", { XM, EXymmq } },
5dd85c99 9890 },
331d2d0d
L
9891};
9892
9e30b8e0 9893static const struct dis386 vex_w_table[][2] = {
b844680a 9894 {
592a252b 9895 /* VEX_W_0F10_P_0 */
9e30b8e0 9896 { "vmovups", { XM, EXx } },
d8faab4e
L
9897 },
9898 {
592a252b 9899 /* VEX_W_0F10_P_1 */
539f890d 9900 { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
d8faab4e
L
9901 },
9902 {
592a252b 9903 /* VEX_W_0F10_P_2 */
9e30b8e0 9904 { "vmovupd", { XM, EXx } },
d8faab4e
L
9905 },
9906 {
592a252b 9907 /* VEX_W_0F10_P_3 */
539f890d 9908 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
d8faab4e
L
9909 },
9910 {
592a252b 9911 /* VEX_W_0F11_P_0 */
9e30b8e0 9912 { "vmovups", { EXxS, XM } },
d8faab4e
L
9913 },
9914 {
592a252b 9915 /* VEX_W_0F11_P_1 */
539f890d 9916 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
b844680a
L
9917 },
9918 {
592a252b 9919 /* VEX_W_0F11_P_2 */
9e30b8e0 9920 { "vmovupd", { EXxS, XM } },
b844680a
L
9921 },
9922 {
592a252b 9923 /* VEX_W_0F11_P_3 */
539f890d 9924 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
d8faab4e
L
9925 },
9926 {
592a252b 9927 /* VEX_W_0F12_P_0_M_0 */
9e30b8e0 9928 { "vmovlps", { XM, Vex128, EXq } },
b844680a
L
9929 },
9930 {
592a252b 9931 /* VEX_W_0F12_P_0_M_1 */
9e30b8e0 9932 { "vmovhlps", { XM, Vex128, EXq } },
b844680a
L
9933 },
9934 {
592a252b 9935 /* VEX_W_0F12_P_1 */
9e30b8e0 9936 { "vmovsldup", { XM, EXx } },
b844680a
L
9937 },
9938 {
592a252b 9939 /* VEX_W_0F12_P_2 */
9e30b8e0 9940 { "vmovlpd", { XM, Vex128, EXq } },
b844680a
L
9941 },
9942 {
592a252b 9943 /* VEX_W_0F12_P_3 */
9e30b8e0 9944 { "vmovddup", { XM, EXymmq } },
b844680a
L
9945 },
9946 {
592a252b 9947 /* VEX_W_0F13_M_0 */
9e30b8e0 9948 { "vmovlpX", { EXq, XM } },
b844680a
L
9949 },
9950 {
592a252b 9951 /* VEX_W_0F14 */
9e30b8e0 9952 { "vunpcklpX", { XM, Vex, EXx } },
b844680a
L
9953 },
9954 {
592a252b 9955 /* VEX_W_0F15 */
9e30b8e0 9956 { "vunpckhpX", { XM, Vex, EXx } },
b844680a
L
9957 },
9958 {
592a252b 9959 /* VEX_W_0F16_P_0_M_0 */
9e30b8e0 9960 { "vmovhps", { XM, Vex128, EXq } },
9e30b8e0
L
9961 },
9962 {
592a252b 9963 /* VEX_W_0F16_P_0_M_1 */
9e30b8e0 9964 { "vmovlhps", { XM, Vex128, EXq } },
9e30b8e0
L
9965 },
9966 {
592a252b 9967 /* VEX_W_0F16_P_1 */
9e30b8e0 9968 { "vmovshdup", { XM, EXx } },
9e30b8e0
L
9969 },
9970 {
592a252b 9971 /* VEX_W_0F16_P_2 */
9e30b8e0 9972 { "vmovhpd", { XM, Vex128, EXq } },
9e30b8e0
L
9973 },
9974 {
592a252b 9975 /* VEX_W_0F17_M_0 */
9e30b8e0 9976 { "vmovhpX", { EXq, XM } },
9e30b8e0
L
9977 },
9978 {
592a252b 9979 /* VEX_W_0F28 */
9e30b8e0 9980 { "vmovapX", { XM, EXx } },
9e30b8e0
L
9981 },
9982 {
592a252b 9983 /* VEX_W_0F29 */
9e30b8e0 9984 { "vmovapX", { EXxS, XM } },
9e30b8e0
L
9985 },
9986 {
592a252b 9987 /* VEX_W_0F2B_M_0 */
9e30b8e0 9988 { "vmovntpX", { Mx, XM } },
9e30b8e0
L
9989 },
9990 {
592a252b 9991 /* VEX_W_0F2E_P_0 */
7bb15c6f 9992 { "vucomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
9993 },
9994 {
592a252b 9995 /* VEX_W_0F2E_P_2 */
7bb15c6f 9996 { "vucomisd", { XMScalar, EXqScalar } },
9e30b8e0
L
9997 },
9998 {
592a252b 9999 /* VEX_W_0F2F_P_0 */
539f890d 10000 { "vcomiss", { XMScalar, EXdScalar } },
9e30b8e0
L
10001 },
10002 {
592a252b 10003 /* VEX_W_0F2F_P_2 */
539f890d 10004 { "vcomisd", { XMScalar, EXqScalar } },
9e30b8e0 10005 },
43234a1e
L
10006 {
10007 /* VEX_W_0F41_P_0_LEN_1 */
10008 { "kandw", { MaskG, MaskVex, MaskR } },
10009 },
10010 {
10011 /* VEX_W_0F42_P_0_LEN_1 */
10012 { "kandnw", { MaskG, MaskVex, MaskR } },
10013 },
10014 {
10015 /* VEX_W_0F44_P_0_LEN_0 */
10016 { "knotw", { MaskG, MaskR } },
10017 },
10018 {
10019 /* VEX_W_0F45_P_0_LEN_1 */
10020 { "korw", { MaskG, MaskVex, MaskR } },
10021 },
10022 {
10023 /* VEX_W_0F46_P_0_LEN_1 */
10024 { "kxnorw", { MaskG, MaskVex, MaskR } },
10025 },
10026 {
10027 /* VEX_W_0F47_P_0_LEN_1 */
10028 { "kxorw", { MaskG, MaskVex, MaskR } },
10029 },
10030 {
10031 /* VEX_W_0F4B_P_2_LEN_1 */
10032 { "kunpckbw", { MaskG, MaskVex, MaskR } },
10033 },
9e30b8e0 10034 {
592a252b 10035 /* VEX_W_0F50_M_0 */
9e30b8e0 10036 { "vmovmskpX", { Gdq, XS } },
9e30b8e0
L
10037 },
10038 {
592a252b 10039 /* VEX_W_0F51_P_0 */
9e30b8e0 10040 { "vsqrtps", { XM, EXx } },
9e30b8e0
L
10041 },
10042 {
592a252b 10043 /* VEX_W_0F51_P_1 */
539f890d 10044 { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10045 },
10046 {
592a252b 10047 /* VEX_W_0F51_P_2 */
9e30b8e0 10048 { "vsqrtpd", { XM, EXx } },
9e30b8e0
L
10049 },
10050 {
592a252b 10051 /* VEX_W_0F51_P_3 */
539f890d 10052 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10053 },
10054 {
592a252b 10055 /* VEX_W_0F52_P_0 */
9e30b8e0 10056 { "vrsqrtps", { XM, EXx } },
9e30b8e0
L
10057 },
10058 {
592a252b 10059 /* VEX_W_0F52_P_1 */
539f890d 10060 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10061 },
10062 {
592a252b 10063 /* VEX_W_0F53_P_0 */
9e30b8e0 10064 { "vrcpps", { XM, EXx } },
9e30b8e0
L
10065 },
10066 {
592a252b 10067 /* VEX_W_0F53_P_1 */
539f890d 10068 { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10069 },
10070 {
592a252b 10071 /* VEX_W_0F58_P_0 */
9e30b8e0 10072 { "vaddps", { XM, Vex, EXx } },
9e30b8e0
L
10073 },
10074 {
592a252b 10075 /* VEX_W_0F58_P_1 */
539f890d 10076 { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10077 },
10078 {
592a252b 10079 /* VEX_W_0F58_P_2 */
9e30b8e0 10080 { "vaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10081 },
10082 {
592a252b 10083 /* VEX_W_0F58_P_3 */
539f890d 10084 { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10085 },
10086 {
592a252b 10087 /* VEX_W_0F59_P_0 */
9e30b8e0 10088 { "vmulps", { XM, Vex, EXx } },
9e30b8e0
L
10089 },
10090 {
592a252b 10091 /* VEX_W_0F59_P_1 */
539f890d 10092 { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10093 },
10094 {
592a252b 10095 /* VEX_W_0F59_P_2 */
9e30b8e0 10096 { "vmulpd", { XM, Vex, EXx } },
9e30b8e0
L
10097 },
10098 {
592a252b 10099 /* VEX_W_0F59_P_3 */
539f890d 10100 { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10101 },
10102 {
592a252b 10103 /* VEX_W_0F5A_P_0 */
9e30b8e0 10104 { "vcvtps2pd", { XM, EXxmmq } },
9e30b8e0
L
10105 },
10106 {
592a252b 10107 /* VEX_W_0F5A_P_1 */
539f890d 10108 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10109 },
10110 {
592a252b 10111 /* VEX_W_0F5A_P_3 */
539f890d 10112 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10113 },
10114 {
592a252b 10115 /* VEX_W_0F5B_P_0 */
9e30b8e0 10116 { "vcvtdq2ps", { XM, EXx } },
9e30b8e0
L
10117 },
10118 {
592a252b 10119 /* VEX_W_0F5B_P_1 */
9e30b8e0 10120 { "vcvttps2dq", { XM, EXx } },
9e30b8e0
L
10121 },
10122 {
592a252b 10123 /* VEX_W_0F5B_P_2 */
9e30b8e0 10124 { "vcvtps2dq", { XM, EXx } },
9e30b8e0
L
10125 },
10126 {
592a252b 10127 /* VEX_W_0F5C_P_0 */
9e30b8e0 10128 { "vsubps", { XM, Vex, EXx } },
9e30b8e0
L
10129 },
10130 {
592a252b 10131 /* VEX_W_0F5C_P_1 */
539f890d 10132 { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10133 },
10134 {
592a252b 10135 /* VEX_W_0F5C_P_2 */
9e30b8e0 10136 { "vsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10137 },
10138 {
592a252b 10139 /* VEX_W_0F5C_P_3 */
539f890d 10140 { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10141 },
10142 {
592a252b 10143 /* VEX_W_0F5D_P_0 */
9e30b8e0 10144 { "vminps", { XM, Vex, EXx } },
9e30b8e0
L
10145 },
10146 {
592a252b 10147 /* VEX_W_0F5D_P_1 */
539f890d 10148 { "vminss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10149 },
10150 {
592a252b 10151 /* VEX_W_0F5D_P_2 */
9e30b8e0 10152 { "vminpd", { XM, Vex, EXx } },
9e30b8e0
L
10153 },
10154 {
592a252b 10155 /* VEX_W_0F5D_P_3 */
539f890d 10156 { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10157 },
10158 {
592a252b 10159 /* VEX_W_0F5E_P_0 */
9e30b8e0 10160 { "vdivps", { XM, Vex, EXx } },
9e30b8e0
L
10161 },
10162 {
592a252b 10163 /* VEX_W_0F5E_P_1 */
539f890d 10164 { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10165 },
10166 {
592a252b 10167 /* VEX_W_0F5E_P_2 */
9e30b8e0 10168 { "vdivpd", { XM, Vex, EXx } },
9e30b8e0
L
10169 },
10170 {
592a252b 10171 /* VEX_W_0F5E_P_3 */
539f890d 10172 { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10173 },
10174 {
592a252b 10175 /* VEX_W_0F5F_P_0 */
9e30b8e0 10176 { "vmaxps", { XM, Vex, EXx } },
9e30b8e0
L
10177 },
10178 {
592a252b 10179 /* VEX_W_0F5F_P_1 */
539f890d 10180 { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9e30b8e0
L
10181 },
10182 {
592a252b 10183 /* VEX_W_0F5F_P_2 */
9e30b8e0 10184 { "vmaxpd", { XM, Vex, EXx } },
9e30b8e0
L
10185 },
10186 {
592a252b 10187 /* VEX_W_0F5F_P_3 */
539f890d 10188 { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9e30b8e0
L
10189 },
10190 {
592a252b 10191 /* VEX_W_0F60_P_2 */
6c30d220 10192 { "vpunpcklbw", { XM, Vex, EXx } },
9e30b8e0
L
10193 },
10194 {
592a252b 10195 /* VEX_W_0F61_P_2 */
6c30d220 10196 { "vpunpcklwd", { XM, Vex, EXx } },
9e30b8e0
L
10197 },
10198 {
592a252b 10199 /* VEX_W_0F62_P_2 */
6c30d220 10200 { "vpunpckldq", { XM, Vex, EXx } },
9e30b8e0
L
10201 },
10202 {
592a252b 10203 /* VEX_W_0F63_P_2 */
6c30d220 10204 { "vpacksswb", { XM, Vex, EXx } },
9e30b8e0
L
10205 },
10206 {
592a252b 10207 /* VEX_W_0F64_P_2 */
6c30d220 10208 { "vpcmpgtb", { XM, Vex, EXx } },
9e30b8e0
L
10209 },
10210 {
592a252b 10211 /* VEX_W_0F65_P_2 */
6c30d220 10212 { "vpcmpgtw", { XM, Vex, EXx } },
9e30b8e0
L
10213 },
10214 {
592a252b 10215 /* VEX_W_0F66_P_2 */
6c30d220 10216 { "vpcmpgtd", { XM, Vex, EXx } },
9e30b8e0
L
10217 },
10218 {
592a252b 10219 /* VEX_W_0F67_P_2 */
6c30d220 10220 { "vpackuswb", { XM, Vex, EXx } },
9e30b8e0
L
10221 },
10222 {
592a252b 10223 /* VEX_W_0F68_P_2 */
6c30d220 10224 { "vpunpckhbw", { XM, Vex, EXx } },
9e30b8e0
L
10225 },
10226 {
592a252b 10227 /* VEX_W_0F69_P_2 */
6c30d220 10228 { "vpunpckhwd", { XM, Vex, EXx } },
9e30b8e0
L
10229 },
10230 {
592a252b 10231 /* VEX_W_0F6A_P_2 */
6c30d220 10232 { "vpunpckhdq", { XM, Vex, EXx } },
9e30b8e0
L
10233 },
10234 {
592a252b 10235 /* VEX_W_0F6B_P_2 */
6c30d220 10236 { "vpackssdw", { XM, Vex, EXx } },
9e30b8e0
L
10237 },
10238 {
592a252b 10239 /* VEX_W_0F6C_P_2 */
6c30d220 10240 { "vpunpcklqdq", { XM, Vex, EXx } },
9e30b8e0
L
10241 },
10242 {
592a252b 10243 /* VEX_W_0F6D_P_2 */
6c30d220 10244 { "vpunpckhqdq", { XM, Vex, EXx } },
9e30b8e0
L
10245 },
10246 {
592a252b 10247 /* VEX_W_0F6F_P_1 */
efdb52b7 10248 { "vmovdqu", { XM, EXx } },
9e30b8e0
L
10249 },
10250 {
592a252b 10251 /* VEX_W_0F6F_P_2 */
efdb52b7 10252 { "vmovdqa", { XM, EXx } },
9e30b8e0
L
10253 },
10254 {
592a252b 10255 /* VEX_W_0F70_P_1 */
9e30b8e0 10256 { "vpshufhw", { XM, EXx, Ib } },
9e30b8e0
L
10257 },
10258 {
592a252b 10259 /* VEX_W_0F70_P_2 */
9e30b8e0 10260 { "vpshufd", { XM, EXx, Ib } },
9e30b8e0
L
10261 },
10262 {
592a252b 10263 /* VEX_W_0F70_P_3 */
9e30b8e0 10264 { "vpshuflw", { XM, EXx, Ib } },
9e30b8e0
L
10265 },
10266 {
592a252b 10267 /* VEX_W_0F71_R_2_P_2 */
6c30d220 10268 { "vpsrlw", { Vex, XS, Ib } },
9e30b8e0
L
10269 },
10270 {
592a252b 10271 /* VEX_W_0F71_R_4_P_2 */
6c30d220 10272 { "vpsraw", { Vex, XS, Ib } },
9e30b8e0
L
10273 },
10274 {
592a252b 10275 /* VEX_W_0F71_R_6_P_2 */
6c30d220 10276 { "vpsllw", { Vex, XS, Ib } },
9e30b8e0
L
10277 },
10278 {
592a252b 10279 /* VEX_W_0F72_R_2_P_2 */
6c30d220 10280 { "vpsrld", { Vex, XS, Ib } },
9e30b8e0
L
10281 },
10282 {
592a252b 10283 /* VEX_W_0F72_R_4_P_2 */
6c30d220 10284 { "vpsrad", { Vex, XS, Ib } },
9e30b8e0
L
10285 },
10286 {
592a252b 10287 /* VEX_W_0F72_R_6_P_2 */
6c30d220 10288 { "vpslld", { Vex, XS, Ib } },
9e30b8e0
L
10289 },
10290 {
592a252b 10291 /* VEX_W_0F73_R_2_P_2 */
6c30d220 10292 { "vpsrlq", { Vex, XS, Ib } },
9e30b8e0
L
10293 },
10294 {
592a252b 10295 /* VEX_W_0F73_R_3_P_2 */
6c30d220 10296 { "vpsrldq", { Vex, XS, Ib } },
9e30b8e0
L
10297 },
10298 {
592a252b 10299 /* VEX_W_0F73_R_6_P_2 */
6c30d220 10300 { "vpsllq", { Vex, XS, Ib } },
9e30b8e0
L
10301 },
10302 {
592a252b 10303 /* VEX_W_0F73_R_7_P_2 */
6c30d220 10304 { "vpslldq", { Vex, XS, Ib } },
9e30b8e0
L
10305 },
10306 {
592a252b 10307 /* VEX_W_0F74_P_2 */
6c30d220 10308 { "vpcmpeqb", { XM, Vex, EXx } },
9e30b8e0
L
10309 },
10310 {
592a252b 10311 /* VEX_W_0F75_P_2 */
6c30d220 10312 { "vpcmpeqw", { XM, Vex, EXx } },
9e30b8e0
L
10313 },
10314 {
592a252b 10315 /* VEX_W_0F76_P_2 */
6c30d220 10316 { "vpcmpeqd", { XM, Vex, EXx } },
9e30b8e0
L
10317 },
10318 {
592a252b 10319 /* VEX_W_0F77_P_0 */
9e30b8e0 10320 { "", { VZERO } },
9e30b8e0
L
10321 },
10322 {
592a252b 10323 /* VEX_W_0F7C_P_2 */
9e30b8e0 10324 { "vhaddpd", { XM, Vex, EXx } },
9e30b8e0
L
10325 },
10326 {
592a252b 10327 /* VEX_W_0F7C_P_3 */
9e30b8e0 10328 { "vhaddps", { XM, Vex, EXx } },
9e30b8e0
L
10329 },
10330 {
592a252b 10331 /* VEX_W_0F7D_P_2 */
9e30b8e0 10332 { "vhsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10333 },
10334 {
592a252b 10335 /* VEX_W_0F7D_P_3 */
9e30b8e0 10336 { "vhsubps", { XM, Vex, EXx } },
9e30b8e0
L
10337 },
10338 {
592a252b 10339 /* VEX_W_0F7E_P_1 */
539f890d 10340 { "vmovq", { XMScalar, EXqScalar } },
9e30b8e0
L
10341 },
10342 {
592a252b 10343 /* VEX_W_0F7F_P_1 */
9e30b8e0 10344 { "vmovdqu", { EXxS, XM } },
9e30b8e0
L
10345 },
10346 {
592a252b 10347 /* VEX_W_0F7F_P_2 */
9e30b8e0 10348 { "vmovdqa", { EXxS, XM } },
9e30b8e0 10349 },
43234a1e
L
10350 {
10351 /* VEX_W_0F90_P_0_LEN_0 */
10352 { "kmovw", { MaskG, MaskE } },
10353 },
10354 {
10355 /* VEX_W_0F91_P_0_LEN_0 */
10356 { "kmovw", { Ew, MaskG } },
10357 },
10358 {
10359 /* VEX_W_0F92_P_0_LEN_0 */
10360 { "kmovw", { MaskG, Rdq } },
10361 },
10362 {
10363 /* VEX_W_0F93_P_0_LEN_0 */
10364 { "kmovw", { Gdq, MaskR } },
10365 },
10366 {
10367 /* VEX_W_0F98_P_0_LEN_0 */
10368 { "kortestw", { MaskG, MaskR } },
10369 },
9e30b8e0 10370 {
592a252b 10371 /* VEX_W_0FAE_R_2_M_0 */
9e30b8e0 10372 { "vldmxcsr", { Md } },
9e30b8e0
L
10373 },
10374 {
592a252b 10375 /* VEX_W_0FAE_R_3_M_0 */
9e30b8e0 10376 { "vstmxcsr", { Md } },
9e30b8e0
L
10377 },
10378 {
592a252b 10379 /* VEX_W_0FC2_P_0 */
9e30b8e0 10380 { "vcmpps", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10381 },
10382 {
592a252b 10383 /* VEX_W_0FC2_P_1 */
539f890d 10384 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9e30b8e0
L
10385 },
10386 {
592a252b 10387 /* VEX_W_0FC2_P_2 */
9e30b8e0 10388 { "vcmppd", { XM, Vex, EXx, VCMP } },
9e30b8e0
L
10389 },
10390 {
592a252b 10391 /* VEX_W_0FC2_P_3 */
539f890d 10392 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9e30b8e0
L
10393 },
10394 {
592a252b 10395 /* VEX_W_0FC4_P_2 */
9e30b8e0 10396 { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9e30b8e0
L
10397 },
10398 {
592a252b 10399 /* VEX_W_0FC5_P_2 */
9e30b8e0 10400 { "vpextrw", { Gdq, XS, Ib } },
9e30b8e0
L
10401 },
10402 {
592a252b 10403 /* VEX_W_0FD0_P_2 */
9e30b8e0 10404 { "vaddsubpd", { XM, Vex, EXx } },
9e30b8e0
L
10405 },
10406 {
592a252b 10407 /* VEX_W_0FD0_P_3 */
9e30b8e0 10408 { "vaddsubps", { XM, Vex, EXx } },
9e30b8e0
L
10409 },
10410 {
592a252b 10411 /* VEX_W_0FD1_P_2 */
6c30d220 10412 { "vpsrlw", { XM, Vex, EXxmm } },
9e30b8e0
L
10413 },
10414 {
592a252b 10415 /* VEX_W_0FD2_P_2 */
6c30d220 10416 { "vpsrld", { XM, Vex, EXxmm } },
9e30b8e0
L
10417 },
10418 {
592a252b 10419 /* VEX_W_0FD3_P_2 */
6c30d220 10420 { "vpsrlq", { XM, Vex, EXxmm } },
9e30b8e0
L
10421 },
10422 {
592a252b 10423 /* VEX_W_0FD4_P_2 */
6c30d220 10424 { "vpaddq", { XM, Vex, EXx } },
9e30b8e0
L
10425 },
10426 {
592a252b 10427 /* VEX_W_0FD5_P_2 */
6c30d220 10428 { "vpmullw", { XM, Vex, EXx } },
9e30b8e0
L
10429 },
10430 {
592a252b 10431 /* VEX_W_0FD6_P_2 */
539f890d 10432 { "vmovq", { EXqScalarS, XMScalar } },
9e30b8e0
L
10433 },
10434 {
592a252b 10435 /* VEX_W_0FD7_P_2_M_1 */
9e30b8e0 10436 { "vpmovmskb", { Gdq, XS } },
9e30b8e0
L
10437 },
10438 {
592a252b 10439 /* VEX_W_0FD8_P_2 */
6c30d220 10440 { "vpsubusb", { XM, Vex, EXx } },
9e30b8e0
L
10441 },
10442 {
592a252b 10443 /* VEX_W_0FD9_P_2 */
6c30d220 10444 { "vpsubusw", { XM, Vex, EXx } },
9e30b8e0
L
10445 },
10446 {
592a252b 10447 /* VEX_W_0FDA_P_2 */
6c30d220 10448 { "vpminub", { XM, Vex, EXx } },
9e30b8e0
L
10449 },
10450 {
592a252b 10451 /* VEX_W_0FDB_P_2 */
6c30d220 10452 { "vpand", { XM, Vex, EXx } },
9e30b8e0
L
10453 },
10454 {
592a252b 10455 /* VEX_W_0FDC_P_2 */
6c30d220 10456 { "vpaddusb", { XM, Vex, EXx } },
9e30b8e0
L
10457 },
10458 {
592a252b 10459 /* VEX_W_0FDD_P_2 */
6c30d220 10460 { "vpaddusw", { XM, Vex, EXx } },
9e30b8e0
L
10461 },
10462 {
592a252b 10463 /* VEX_W_0FDE_P_2 */
6c30d220 10464 { "vpmaxub", { XM, Vex, EXx } },
9e30b8e0
L
10465 },
10466 {
592a252b 10467 /* VEX_W_0FDF_P_2 */
6c30d220 10468 { "vpandn", { XM, Vex, EXx } },
9e30b8e0
L
10469 },
10470 {
592a252b 10471 /* VEX_W_0FE0_P_2 */
6c30d220 10472 { "vpavgb", { XM, Vex, EXx } },
9e30b8e0
L
10473 },
10474 {
592a252b 10475 /* VEX_W_0FE1_P_2 */
6c30d220 10476 { "vpsraw", { XM, Vex, EXxmm } },
9e30b8e0
L
10477 },
10478 {
592a252b 10479 /* VEX_W_0FE2_P_2 */
6c30d220 10480 { "vpsrad", { XM, Vex, EXxmm } },
9e30b8e0
L
10481 },
10482 {
592a252b 10483 /* VEX_W_0FE3_P_2 */
6c30d220 10484 { "vpavgw", { XM, Vex, EXx } },
9e30b8e0
L
10485 },
10486 {
592a252b 10487 /* VEX_W_0FE4_P_2 */
6c30d220 10488 { "vpmulhuw", { XM, Vex, EXx } },
9e30b8e0
L
10489 },
10490 {
592a252b 10491 /* VEX_W_0FE5_P_2 */
6c30d220 10492 { "vpmulhw", { XM, Vex, EXx } },
9e30b8e0
L
10493 },
10494 {
592a252b 10495 /* VEX_W_0FE6_P_1 */
efdb52b7 10496 { "vcvtdq2pd", { XM, EXxmmq } },
9e30b8e0
L
10497 },
10498 {
592a252b 10499 /* VEX_W_0FE6_P_2 */
a179a9fd 10500 { "vcvttpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10501 },
10502 {
592a252b 10503 /* VEX_W_0FE6_P_3 */
a179a9fd 10504 { "vcvtpd2dq%XY", { XMM, EXx } },
9e30b8e0
L
10505 },
10506 {
592a252b 10507 /* VEX_W_0FE7_P_2_M_0 */
9e30b8e0 10508 { "vmovntdq", { Mx, XM } },
9e30b8e0
L
10509 },
10510 {
592a252b 10511 /* VEX_W_0FE8_P_2 */
6c30d220 10512 { "vpsubsb", { XM, Vex, EXx } },
9e30b8e0
L
10513 },
10514 {
592a252b 10515 /* VEX_W_0FE9_P_2 */
6c30d220 10516 { "vpsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10517 },
10518 {
592a252b 10519 /* VEX_W_0FEA_P_2 */
6c30d220 10520 { "vpminsw", { XM, Vex, EXx } },
9e30b8e0
L
10521 },
10522 {
592a252b 10523 /* VEX_W_0FEB_P_2 */
6c30d220 10524 { "vpor", { XM, Vex, EXx } },
9e30b8e0
L
10525 },
10526 {
592a252b 10527 /* VEX_W_0FEC_P_2 */
6c30d220 10528 { "vpaddsb", { XM, Vex, EXx } },
9e30b8e0
L
10529 },
10530 {
592a252b 10531 /* VEX_W_0FED_P_2 */
6c30d220 10532 { "vpaddsw", { XM, Vex, EXx } },
9e30b8e0
L
10533 },
10534 {
592a252b 10535 /* VEX_W_0FEE_P_2 */
6c30d220 10536 { "vpmaxsw", { XM, Vex, EXx } },
9e30b8e0
L
10537 },
10538 {
592a252b 10539 /* VEX_W_0FEF_P_2 */
6c30d220 10540 { "vpxor", { XM, Vex, EXx } },
9e30b8e0
L
10541 },
10542 {
592a252b 10543 /* VEX_W_0FF0_P_3_M_0 */
9e30b8e0 10544 { "vlddqu", { XM, M } },
9e30b8e0
L
10545 },
10546 {
592a252b 10547 /* VEX_W_0FF1_P_2 */
6c30d220 10548 { "vpsllw", { XM, Vex, EXxmm } },
9e30b8e0
L
10549 },
10550 {
592a252b 10551 /* VEX_W_0FF2_P_2 */
6c30d220 10552 { "vpslld", { XM, Vex, EXxmm } },
9e30b8e0
L
10553 },
10554 {
592a252b 10555 /* VEX_W_0FF3_P_2 */
6c30d220 10556 { "vpsllq", { XM, Vex, EXxmm } },
9e30b8e0
L
10557 },
10558 {
592a252b 10559 /* VEX_W_0FF4_P_2 */
6c30d220 10560 { "vpmuludq", { XM, Vex, EXx } },
9e30b8e0
L
10561 },
10562 {
592a252b 10563 /* VEX_W_0FF5_P_2 */
6c30d220 10564 { "vpmaddwd", { XM, Vex, EXx } },
9e30b8e0
L
10565 },
10566 {
592a252b 10567 /* VEX_W_0FF6_P_2 */
6c30d220 10568 { "vpsadbw", { XM, Vex, EXx } },
9e30b8e0
L
10569 },
10570 {
592a252b 10571 /* VEX_W_0FF7_P_2 */
9e30b8e0 10572 { "vmaskmovdqu", { XM, XS } },
9e30b8e0
L
10573 },
10574 {
592a252b 10575 /* VEX_W_0FF8_P_2 */
6c30d220 10576 { "vpsubb", { XM, Vex, EXx } },
9e30b8e0
L
10577 },
10578 {
592a252b 10579 /* VEX_W_0FF9_P_2 */
6c30d220 10580 { "vpsubw", { XM, Vex, EXx } },
9e30b8e0
L
10581 },
10582 {
592a252b 10583 /* VEX_W_0FFA_P_2 */
6c30d220 10584 { "vpsubd", { XM, Vex, EXx } },
9e30b8e0
L
10585 },
10586 {
592a252b 10587 /* VEX_W_0FFB_P_2 */
6c30d220 10588 { "vpsubq", { XM, Vex, EXx } },
9e30b8e0
L
10589 },
10590 {
592a252b 10591 /* VEX_W_0FFC_P_2 */
6c30d220 10592 { "vpaddb", { XM, Vex, EXx } },
9e30b8e0
L
10593 },
10594 {
592a252b 10595 /* VEX_W_0FFD_P_2 */
6c30d220 10596 { "vpaddw", { XM, Vex, EXx } },
9e30b8e0
L
10597 },
10598 {
592a252b 10599 /* VEX_W_0FFE_P_2 */
6c30d220 10600 { "vpaddd", { XM, Vex, EXx } },
9e30b8e0
L
10601 },
10602 {
592a252b 10603 /* VEX_W_0F3800_P_2 */
6c30d220 10604 { "vpshufb", { XM, Vex, EXx } },
9e30b8e0
L
10605 },
10606 {
592a252b 10607 /* VEX_W_0F3801_P_2 */
6c30d220 10608 { "vphaddw", { XM, Vex, EXx } },
9e30b8e0
L
10609 },
10610 {
592a252b 10611 /* VEX_W_0F3802_P_2 */
6c30d220 10612 { "vphaddd", { XM, Vex, EXx } },
9e30b8e0
L
10613 },
10614 {
592a252b 10615 /* VEX_W_0F3803_P_2 */
6c30d220 10616 { "vphaddsw", { XM, Vex, EXx } },
9e30b8e0
L
10617 },
10618 {
592a252b 10619 /* VEX_W_0F3804_P_2 */
6c30d220 10620 { "vpmaddubsw", { XM, Vex, EXx } },
9e30b8e0
L
10621 },
10622 {
592a252b 10623 /* VEX_W_0F3805_P_2 */
6c30d220 10624 { "vphsubw", { XM, Vex, EXx } },
9e30b8e0
L
10625 },
10626 {
592a252b 10627 /* VEX_W_0F3806_P_2 */
6c30d220 10628 { "vphsubd", { XM, Vex, EXx } },
9e30b8e0
L
10629 },
10630 {
592a252b 10631 /* VEX_W_0F3807_P_2 */
6c30d220 10632 { "vphsubsw", { XM, Vex, EXx } },
9e30b8e0
L
10633 },
10634 {
592a252b 10635 /* VEX_W_0F3808_P_2 */
6c30d220 10636 { "vpsignb", { XM, Vex, EXx } },
9e30b8e0
L
10637 },
10638 {
592a252b 10639 /* VEX_W_0F3809_P_2 */
6c30d220 10640 { "vpsignw", { XM, Vex, EXx } },
9e30b8e0
L
10641 },
10642 {
592a252b 10643 /* VEX_W_0F380A_P_2 */
6c30d220 10644 { "vpsignd", { XM, Vex, EXx } },
9e30b8e0
L
10645 },
10646 {
592a252b 10647 /* VEX_W_0F380B_P_2 */
6c30d220 10648 { "vpmulhrsw", { XM, Vex, EXx } },
9e30b8e0
L
10649 },
10650 {
592a252b 10651 /* VEX_W_0F380C_P_2 */
9e30b8e0 10652 { "vpermilps", { XM, Vex, EXx } },
9e30b8e0
L
10653 },
10654 {
592a252b 10655 /* VEX_W_0F380D_P_2 */
9e30b8e0 10656 { "vpermilpd", { XM, Vex, EXx } },
9e30b8e0
L
10657 },
10658 {
592a252b 10659 /* VEX_W_0F380E_P_2 */
9e30b8e0 10660 { "vtestps", { XM, EXx } },
9e30b8e0
L
10661 },
10662 {
592a252b 10663 /* VEX_W_0F380F_P_2 */
9e30b8e0 10664 { "vtestpd", { XM, EXx } },
9e30b8e0 10665 },
6c30d220
L
10666 {
10667 /* VEX_W_0F3816_P_2 */
10668 { "vpermps", { XM, Vex, EXx } },
10669 },
9e30b8e0 10670 {
592a252b 10671 /* VEX_W_0F3817_P_2 */
9e30b8e0 10672 { "vptest", { XM, EXx } },
9e30b8e0 10673 },
bcf2684f 10674 {
6c30d220
L
10675 /* VEX_W_0F3818_P_2 */
10676 { "vbroadcastss", { XM, EXxmm_md } },
bcf2684f 10677 },
9e30b8e0 10678 {
6c30d220
L
10679 /* VEX_W_0F3819_P_2 */
10680 { "vbroadcastsd", { XM, EXxmm_mq } },
9e30b8e0
L
10681 },
10682 {
592a252b 10683 /* VEX_W_0F381A_P_2_M_0 */
9e30b8e0 10684 { "vbroadcastf128", { XM, Mxmm } },
9e30b8e0
L
10685 },
10686 {
592a252b 10687 /* VEX_W_0F381C_P_2 */
9e30b8e0 10688 { "vpabsb", { XM, EXx } },
9e30b8e0
L
10689 },
10690 {
592a252b 10691 /* VEX_W_0F381D_P_2 */
9e30b8e0 10692 { "vpabsw", { XM, EXx } },
9e30b8e0
L
10693 },
10694 {
592a252b 10695 /* VEX_W_0F381E_P_2 */
9e30b8e0 10696 { "vpabsd", { XM, EXx } },
9e30b8e0
L
10697 },
10698 {
592a252b 10699 /* VEX_W_0F3820_P_2 */
6c30d220 10700 { "vpmovsxbw", { XM, EXxmmq } },
9e30b8e0
L
10701 },
10702 {
592a252b 10703 /* VEX_W_0F3821_P_2 */
6c30d220 10704 { "vpmovsxbd", { XM, EXxmmqd } },
9e30b8e0
L
10705 },
10706 {
592a252b 10707 /* VEX_W_0F3822_P_2 */
6c30d220 10708 { "vpmovsxbq", { XM, EXxmmdw } },
9e30b8e0
L
10709 },
10710 {
592a252b 10711 /* VEX_W_0F3823_P_2 */
6c30d220 10712 { "vpmovsxwd", { XM, EXxmmq } },
9e30b8e0
L
10713 },
10714 {
592a252b 10715 /* VEX_W_0F3824_P_2 */
6c30d220 10716 { "vpmovsxwq", { XM, EXxmmqd } },
9e30b8e0
L
10717 },
10718 {
592a252b 10719 /* VEX_W_0F3825_P_2 */
6c30d220 10720 { "vpmovsxdq", { XM, EXxmmq } },
9e30b8e0
L
10721 },
10722 {
592a252b 10723 /* VEX_W_0F3828_P_2 */
6c30d220 10724 { "vpmuldq", { XM, Vex, EXx } },
9e30b8e0
L
10725 },
10726 {
592a252b 10727 /* VEX_W_0F3829_P_2 */
6c30d220 10728 { "vpcmpeqq", { XM, Vex, EXx } },
9e30b8e0
L
10729 },
10730 {
592a252b 10731 /* VEX_W_0F382A_P_2_M_0 */
9e30b8e0 10732 { "vmovntdqa", { XM, Mx } },
9e30b8e0
L
10733 },
10734 {
592a252b 10735 /* VEX_W_0F382B_P_2 */
6c30d220 10736 { "vpackusdw", { XM, Vex, EXx } },
9e30b8e0 10737 },
53aa04a0 10738 {
592a252b 10739 /* VEX_W_0F382C_P_2_M_0 */
53aa04a0 10740 { "vmaskmovps", { XM, Vex, Mx } },
53aa04a0
L
10741 },
10742 {
592a252b 10743 /* VEX_W_0F382D_P_2_M_0 */
53aa04a0 10744 { "vmaskmovpd", { XM, Vex, Mx } },
53aa04a0
L
10745 },
10746 {
592a252b 10747 /* VEX_W_0F382E_P_2_M_0 */
53aa04a0 10748 { "vmaskmovps", { Mx, Vex, XM } },
53aa04a0
L
10749 },
10750 {
592a252b 10751 /* VEX_W_0F382F_P_2_M_0 */
53aa04a0 10752 { "vmaskmovpd", { Mx, Vex, XM } },
53aa04a0 10753 },
9e30b8e0 10754 {
592a252b 10755 /* VEX_W_0F3830_P_2 */
6c30d220 10756 { "vpmovzxbw", { XM, EXxmmq } },
9e30b8e0
L
10757 },
10758 {
592a252b 10759 /* VEX_W_0F3831_P_2 */
6c30d220 10760 { "vpmovzxbd", { XM, EXxmmqd } },
9e30b8e0
L
10761 },
10762 {
592a252b 10763 /* VEX_W_0F3832_P_2 */
6c30d220 10764 { "vpmovzxbq", { XM, EXxmmdw } },
9e30b8e0
L
10765 },
10766 {
592a252b 10767 /* VEX_W_0F3833_P_2 */
6c30d220 10768 { "vpmovzxwd", { XM, EXxmmq } },
9e30b8e0
L
10769 },
10770 {
592a252b 10771 /* VEX_W_0F3834_P_2 */
6c30d220 10772 { "vpmovzxwq", { XM, EXxmmqd } },
9e30b8e0
L
10773 },
10774 {
592a252b 10775 /* VEX_W_0F3835_P_2 */
6c30d220
L
10776 { "vpmovzxdq", { XM, EXxmmq } },
10777 },
10778 {
10779 /* VEX_W_0F3836_P_2 */
10780 { "vpermd", { XM, Vex, EXx } },
9e30b8e0
L
10781 },
10782 {
592a252b 10783 /* VEX_W_0F3837_P_2 */
6c30d220 10784 { "vpcmpgtq", { XM, Vex, EXx } },
9e30b8e0
L
10785 },
10786 {
592a252b 10787 /* VEX_W_0F3838_P_2 */
6c30d220 10788 { "vpminsb", { XM, Vex, EXx } },
9e30b8e0
L
10789 },
10790 {
592a252b 10791 /* VEX_W_0F3839_P_2 */
6c30d220 10792 { "vpminsd", { XM, Vex, EXx } },
9e30b8e0
L
10793 },
10794 {
592a252b 10795 /* VEX_W_0F383A_P_2 */
6c30d220 10796 { "vpminuw", { XM, Vex, EXx } },
9e30b8e0
L
10797 },
10798 {
592a252b 10799 /* VEX_W_0F383B_P_2 */
6c30d220 10800 { "vpminud", { XM, Vex, EXx } },
9e30b8e0
L
10801 },
10802 {
592a252b 10803 /* VEX_W_0F383C_P_2 */
6c30d220 10804 { "vpmaxsb", { XM, Vex, EXx } },
9e30b8e0
L
10805 },
10806 {
592a252b 10807 /* VEX_W_0F383D_P_2 */
6c30d220 10808 { "vpmaxsd", { XM, Vex, EXx } },
9e30b8e0
L
10809 },
10810 {
592a252b 10811 /* VEX_W_0F383E_P_2 */
6c30d220 10812 { "vpmaxuw", { XM, Vex, EXx } },
9e30b8e0
L
10813 },
10814 {
592a252b 10815 /* VEX_W_0F383F_P_2 */
6c30d220 10816 { "vpmaxud", { XM, Vex, EXx } },
9e30b8e0
L
10817 },
10818 {
592a252b 10819 /* VEX_W_0F3840_P_2 */
6c30d220 10820 { "vpmulld", { XM, Vex, EXx } },
9e30b8e0
L
10821 },
10822 {
592a252b 10823 /* VEX_W_0F3841_P_2 */
9e30b8e0 10824 { "vphminposuw", { XM, EXx } },
9e30b8e0 10825 },
6c30d220
L
10826 {
10827 /* VEX_W_0F3846_P_2 */
10828 { "vpsravd", { XM, Vex, EXx } },
10829 },
10830 {
10831 /* VEX_W_0F3858_P_2 */
10832 { "vpbroadcastd", { XM, EXxmm_md } },
10833 },
10834 {
10835 /* VEX_W_0F3859_P_2 */
10836 { "vpbroadcastq", { XM, EXxmm_mq } },
10837 },
10838 {
10839 /* VEX_W_0F385A_P_2_M_0 */
10840 { "vbroadcasti128", { XM, Mxmm } },
10841 },
10842 {
10843 /* VEX_W_0F3878_P_2 */
10844 { "vpbroadcastb", { XM, EXxmm_mb } },
10845 },
10846 {
10847 /* VEX_W_0F3879_P_2 */
10848 { "vpbroadcastw", { XM, EXxmm_mw } },
10849 },
9e30b8e0 10850 {
592a252b 10851 /* VEX_W_0F38DB_P_2 */
9e30b8e0 10852 { "vaesimc", { XM, EXx } },
9e30b8e0
L
10853 },
10854 {
592a252b 10855 /* VEX_W_0F38DC_P_2 */
9e30b8e0 10856 { "vaesenc", { XM, Vex128, EXx } },
9e30b8e0
L
10857 },
10858 {
592a252b 10859 /* VEX_W_0F38DD_P_2 */
9e30b8e0 10860 { "vaesenclast", { XM, Vex128, EXx } },
9e30b8e0
L
10861 },
10862 {
592a252b 10863 /* VEX_W_0F38DE_P_2 */
9e30b8e0 10864 { "vaesdec", { XM, Vex128, EXx } },
9e30b8e0
L
10865 },
10866 {
592a252b 10867 /* VEX_W_0F38DF_P_2 */
9e30b8e0 10868 { "vaesdeclast", { XM, Vex128, EXx } },
9e30b8e0 10869 },
6c30d220
L
10870 {
10871 /* VEX_W_0F3A00_P_2 */
10872 { Bad_Opcode },
10873 { "vpermq", { XM, EXx, Ib } },
10874 },
10875 {
10876 /* VEX_W_0F3A01_P_2 */
10877 { Bad_Opcode },
10878 { "vpermpd", { XM, EXx, Ib } },
10879 },
10880 {
10881 /* VEX_W_0F3A02_P_2 */
10882 { "vpblendd", { XM, Vex, EXx, Ib } },
10883 },
9e30b8e0 10884 {
592a252b 10885 /* VEX_W_0F3A04_P_2 */
9e30b8e0 10886 { "vpermilps", { XM, EXx, Ib } },
9e30b8e0
L
10887 },
10888 {
592a252b 10889 /* VEX_W_0F3A05_P_2 */
9e30b8e0 10890 { "vpermilpd", { XM, EXx, Ib } },
9e30b8e0
L
10891 },
10892 {
592a252b 10893 /* VEX_W_0F3A06_P_2 */
9e30b8e0 10894 { "vperm2f128", { XM, Vex256, EXx, Ib } },
9e30b8e0
L
10895 },
10896 {
592a252b 10897 /* VEX_W_0F3A08_P_2 */
9e30b8e0 10898 { "vroundps", { XM, EXx, Ib } },
9e30b8e0
L
10899 },
10900 {
592a252b 10901 /* VEX_W_0F3A09_P_2 */
9e30b8e0 10902 { "vroundpd", { XM, EXx, Ib } },
9e30b8e0
L
10903 },
10904 {
592a252b 10905 /* VEX_W_0F3A0A_P_2 */
539f890d 10906 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
9e30b8e0
L
10907 },
10908 {
592a252b 10909 /* VEX_W_0F3A0B_P_2 */
539f890d 10910 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
9e30b8e0
L
10911 },
10912 {
592a252b 10913 /* VEX_W_0F3A0C_P_2 */
9e30b8e0 10914 { "vblendps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10915 },
10916 {
592a252b 10917 /* VEX_W_0F3A0D_P_2 */
9e30b8e0 10918 { "vblendpd", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10919 },
10920 {
592a252b 10921 /* VEX_W_0F3A0E_P_2 */
6c30d220 10922 { "vpblendw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10923 },
10924 {
592a252b 10925 /* VEX_W_0F3A0F_P_2 */
6c30d220 10926 { "vpalignr", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10927 },
10928 {
592a252b 10929 /* VEX_W_0F3A14_P_2 */
9e30b8e0 10930 { "vpextrb", { Edqb, XM, Ib } },
9e30b8e0
L
10931 },
10932 {
592a252b 10933 /* VEX_W_0F3A15_P_2 */
9e30b8e0 10934 { "vpextrw", { Edqw, XM, Ib } },
9e30b8e0
L
10935 },
10936 {
592a252b 10937 /* VEX_W_0F3A18_P_2 */
9e30b8e0 10938 { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
9e30b8e0
L
10939 },
10940 {
592a252b 10941 /* VEX_W_0F3A19_P_2 */
9e30b8e0 10942 { "vextractf128", { EXxmm, XM, Ib } },
9e30b8e0
L
10943 },
10944 {
592a252b 10945 /* VEX_W_0F3A20_P_2 */
9e30b8e0 10946 { "vpinsrb", { XM, Vex128, Edqb, Ib } },
9e30b8e0
L
10947 },
10948 {
592a252b 10949 /* VEX_W_0F3A21_P_2 */
9e30b8e0 10950 { "vinsertps", { XM, Vex128, EXd, Ib } },
9e30b8e0 10951 },
43234a1e
L
10952 {
10953 /* VEX_W_0F3A30_P_2 */
10954 { Bad_Opcode },
10955 { "kshiftrw", { MaskG, MaskR, Ib } },
10956 },
10957 {
10958 /* VEX_W_0F3A32_P_2 */
10959 { Bad_Opcode },
10960 { "kshiftlw", { MaskG, MaskR, Ib } },
10961 },
6c30d220
L
10962 {
10963 /* VEX_W_0F3A38_P_2 */
10964 { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10965 },
10966 {
10967 /* VEX_W_0F3A39_P_2 */
10968 { "vextracti128", { EXxmm, XM, Ib } },
10969 },
9e30b8e0 10970 {
592a252b 10971 /* VEX_W_0F3A40_P_2 */
9e30b8e0 10972 { "vdpps", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10973 },
10974 {
592a252b 10975 /* VEX_W_0F3A41_P_2 */
9e30b8e0 10976 { "vdppd", { XM, Vex128, EXx, Ib } },
9e30b8e0
L
10977 },
10978 {
592a252b 10979 /* VEX_W_0F3A42_P_2 */
6c30d220 10980 { "vmpsadbw", { XM, Vex, EXx, Ib } },
9e30b8e0
L
10981 },
10982 {
592a252b 10983 /* VEX_W_0F3A44_P_2 */
9e30b8e0 10984 { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
9e30b8e0 10985 },
6c30d220
L
10986 {
10987 /* VEX_W_0F3A46_P_2 */
10988 { "vperm2i128", { XM, Vex256, EXx, Ib } },
10989 },
a683cc34 10990 {
592a252b 10991 /* VEX_W_0F3A48_P_2 */
a683cc34
SP
10992 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10993 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10994 },
10995 {
592a252b 10996 /* VEX_W_0F3A49_P_2 */
a683cc34
SP
10997 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10998 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10999 },
9e30b8e0 11000 {
592a252b 11001 /* VEX_W_0F3A4A_P_2 */
9e30b8e0 11002 { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11003 },
11004 {
592a252b 11005 /* VEX_W_0F3A4B_P_2 */
9e30b8e0 11006 { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11007 },
11008 {
592a252b 11009 /* VEX_W_0F3A4C_P_2 */
6c30d220 11010 { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
9e30b8e0
L
11011 },
11012 {
592a252b 11013 /* VEX_W_0F3A60_P_2 */
9e30b8e0 11014 { "vpcmpestrm", { XM, EXx, Ib } },
9e30b8e0
L
11015 },
11016 {
592a252b 11017 /* VEX_W_0F3A61_P_2 */
9e30b8e0 11018 { "vpcmpestri", { XM, EXx, Ib } },
9e30b8e0
L
11019 },
11020 {
592a252b 11021 /* VEX_W_0F3A62_P_2 */
9e30b8e0 11022 { "vpcmpistrm", { XM, EXx, Ib } },
9e30b8e0
L
11023 },
11024 {
592a252b 11025 /* VEX_W_0F3A63_P_2 */
9e30b8e0 11026 { "vpcmpistri", { XM, EXx, Ib } },
9e30b8e0
L
11027 },
11028 {
592a252b 11029 /* VEX_W_0F3ADF_P_2 */
9e30b8e0 11030 { "vaeskeygenassist", { XM, EXx, Ib } },
9e30b8e0 11031 },
43234a1e
L
11032#define NEED_VEX_W_TABLE
11033#include "i386-dis-evex.h"
11034#undef NEED_VEX_W_TABLE
9e30b8e0
L
11035};
11036
11037static const struct dis386 mod_table[][2] = {
11038 {
11039 /* MOD_8D */
11040 { "leaS", { Gv, M } },
9e30b8e0 11041 },
42164a71
L
11042 {
11043 /* MOD_C6_REG_7 */
11044 { Bad_Opcode },
11045 { RM_TABLE (RM_C6_REG_7) },
11046 },
11047 {
11048 /* MOD_C7_REG_7 */
11049 { Bad_Opcode },
11050 { RM_TABLE (RM_C7_REG_7) },
11051 },
9e30b8e0
L
11052 {
11053 /* MOD_0F01_REG_0 */
11054 { X86_64_TABLE (X86_64_0F01_REG_0) },
11055 { RM_TABLE (RM_0F01_REG_0) },
11056 },
11057 {
11058 /* MOD_0F01_REG_1 */
11059 { X86_64_TABLE (X86_64_0F01_REG_1) },
11060 { RM_TABLE (RM_0F01_REG_1) },
11061 },
11062 {
11063 /* MOD_0F01_REG_2 */
11064 { X86_64_TABLE (X86_64_0F01_REG_2) },
11065 { RM_TABLE (RM_0F01_REG_2) },
11066 },
11067 {
11068 /* MOD_0F01_REG_3 */
11069 { X86_64_TABLE (X86_64_0F01_REG_3) },
11070 { RM_TABLE (RM_0F01_REG_3) },
11071 },
11072 {
11073 /* MOD_0F01_REG_7 */
11074 { "invlpg", { Mb } },
11075 { RM_TABLE (RM_0F01_REG_7) },
11076 },
11077 {
11078 /* MOD_0F12_PREFIX_0 */
11079 { "movlps", { XM, EXq } },
11080 { "movhlps", { XM, EXq } },
11081 },
11082 {
11083 /* MOD_0F13 */
11084 { "movlpX", { EXq, XM } },
9e30b8e0
L
11085 },
11086 {
11087 /* MOD_0F16_PREFIX_0 */
11088 { "movhps", { XM, EXq } },
11089 { "movlhps", { XM, EXq } },
11090 },
11091 {
11092 /* MOD_0F17 */
11093 { "movhpX", { EXq, XM } },
9e30b8e0
L
11094 },
11095 {
11096 /* MOD_0F18_REG_0 */
11097 { "prefetchnta", { Mb } },
9e30b8e0
L
11098 },
11099 {
11100 /* MOD_0F18_REG_1 */
11101 { "prefetcht0", { Mb } },
9e30b8e0
L
11102 },
11103 {
11104 /* MOD_0F18_REG_2 */
11105 { "prefetcht1", { Mb } },
9e30b8e0
L
11106 },
11107 {
11108 /* MOD_0F18_REG_3 */
11109 { "prefetcht2", { Mb } },
9e30b8e0 11110 },
d7189fa5
RM
11111 {
11112 /* MOD_0F18_REG_4 */
11113 { "nop/reserved", { Mb } },
11114 },
11115 {
11116 /* MOD_0F18_REG_5 */
11117 { "nop/reserved", { Mb } },
11118 },
11119 {
11120 /* MOD_0F18_REG_6 */
11121 { "nop/reserved", { Mb } },
11122 },
11123 {
11124 /* MOD_0F18_REG_7 */
11125 { "nop/reserved", { Mb } },
11126 },
7e8b059b
L
11127 {
11128 /* MOD_0F1A_PREFIX_0 */
11129 { "bndldx", { Gbnd, Ev_bnd } },
11130 { "nopQ", { Ev } },
11131 },
11132 {
11133 /* MOD_0F1B_PREFIX_0 */
11134 { "bndstx", { Ev_bnd, Gbnd } },
11135 { "nopQ", { Ev } },
11136 },
11137 {
11138 /* MOD_0F1B_PREFIX_1 */
11139 { "bndmk", { Gbnd, Ev_bnd } },
11140 { "nopQ", { Ev } },
11141 },
9e30b8e0
L
11142 {
11143 /* MOD_0F20 */
592d1631 11144 { Bad_Opcode },
9e30b8e0
L
11145 { "movZ", { Rm, Cm } },
11146 },
11147 {
11148 /* MOD_0F21 */
592d1631 11149 { Bad_Opcode },
9e30b8e0
L
11150 { "movZ", { Rm, Dm } },
11151 },
11152 {
11153 /* MOD_0F22 */
592d1631 11154 { Bad_Opcode },
9e30b8e0 11155 { "movZ", { Cm, Rm } },
b844680a
L
11156 },
11157 {
92fddf8e 11158 /* MOD_0F23 */
592d1631 11159 { Bad_Opcode },
92fddf8e 11160 { "movZ", { Dm, Rm } },
b844680a
L
11161 },
11162 {
92fddf8e 11163 /* MOD_0F24 */
7bb15c6f 11164 { Bad_Opcode },
92fddf8e 11165 { "movL", { Rd, Td } },
b844680a
L
11166 },
11167 {
92fddf8e 11168 /* MOD_0F26 */
592d1631 11169 { Bad_Opcode },
92fddf8e 11170 { "movL", { Td, Rd } },
b844680a 11171 },
75c135a8
L
11172 {
11173 /* MOD_0F2B_PREFIX_0 */
4ee52178 11174 {"movntps", { Mx, XM } },
75c135a8
L
11175 },
11176 {
11177 /* MOD_0F2B_PREFIX_1 */
4ee52178 11178 {"movntss", { Md, XM } },
75c135a8
L
11179 },
11180 {
11181 /* MOD_0F2B_PREFIX_2 */
4ee52178 11182 {"movntpd", { Mx, XM } },
75c135a8
L
11183 },
11184 {
11185 /* MOD_0F2B_PREFIX_3 */
4ee52178 11186 {"movntsd", { Mq, XM } },
75c135a8
L
11187 },
11188 {
11189 /* MOD_0F51 */
592d1631 11190 { Bad_Opcode },
75c135a8
L
11191 { "movmskpX", { Gdq, XS } },
11192 },
b844680a 11193 {
1ceb70f8 11194 /* MOD_0F71_REG_2 */
592d1631 11195 { Bad_Opcode },
4e7d34a6 11196 { "psrlw", { MS, Ib } },
b844680a
L
11197 },
11198 {
1ceb70f8 11199 /* MOD_0F71_REG_4 */
592d1631 11200 { Bad_Opcode },
4e7d34a6 11201 { "psraw", { MS, Ib } },
b844680a
L
11202 },
11203 {
1ceb70f8 11204 /* MOD_0F71_REG_6 */
592d1631 11205 { Bad_Opcode },
4e7d34a6 11206 { "psllw", { MS, Ib } },
b844680a
L
11207 },
11208 {
1ceb70f8 11209 /* MOD_0F72_REG_2 */
592d1631 11210 { Bad_Opcode },
4e7d34a6 11211 { "psrld", { MS, Ib } },
b844680a
L
11212 },
11213 {
1ceb70f8 11214 /* MOD_0F72_REG_4 */
592d1631 11215 { Bad_Opcode },
4e7d34a6 11216 { "psrad", { MS, Ib } },
b844680a
L
11217 },
11218 {
1ceb70f8 11219 /* MOD_0F72_REG_6 */
592d1631 11220 { Bad_Opcode },
4e7d34a6 11221 { "pslld", { MS, Ib } },
b844680a
L
11222 },
11223 {
1ceb70f8 11224 /* MOD_0F73_REG_2 */
592d1631 11225 { Bad_Opcode },
4e7d34a6 11226 { "psrlq", { MS, Ib } },
b844680a
L
11227 },
11228 {
1ceb70f8 11229 /* MOD_0F73_REG_3 */
592d1631 11230 { Bad_Opcode },
c0f3af97
L
11231 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11232 },
11233 {
11234 /* MOD_0F73_REG_6 */
592d1631 11235 { Bad_Opcode },
c0f3af97
L
11236 { "psllq", { MS, Ib } },
11237 },
11238 {
11239 /* MOD_0F73_REG_7 */
592d1631 11240 { Bad_Opcode },
c0f3af97
L
11241 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11242 },
11243 {
11244 /* MOD_0FAE_REG_0 */
eacc9c89 11245 { "fxsave", { FXSAVE } },
c7b8aa3a 11246 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11247 },
11248 {
11249 /* MOD_0FAE_REG_1 */
eacc9c89 11250 { "fxrstor", { FXSAVE } },
c7b8aa3a 11251 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11252 },
11253 {
11254 /* MOD_0FAE_REG_2 */
11255 { "ldmxcsr", { Md } },
c7b8aa3a 11256 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11257 },
11258 {
11259 /* MOD_0FAE_REG_3 */
11260 { "stmxcsr", { Md } },
c7b8aa3a 11261 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11262 },
11263 {
11264 /* MOD_0FAE_REG_4 */
73bb6729 11265 { "xsave", { FXSAVE } },
c0f3af97
L
11266 },
11267 {
11268 /* MOD_0FAE_REG_5 */
73bb6729 11269 { "xrstor", { FXSAVE } },
c0f3af97
L
11270 { RM_TABLE (RM_0FAE_REG_5) },
11271 },
11272 {
11273 /* MOD_0FAE_REG_6 */
c7b8aa3a 11274 { "xsaveopt", { FXSAVE } },
c0f3af97
L
11275 { RM_TABLE (RM_0FAE_REG_6) },
11276 },
11277 {
11278 /* MOD_0FAE_REG_7 */
11279 { "clflush", { Mb } },
11280 { RM_TABLE (RM_0FAE_REG_7) },
11281 },
11282 {
11283 /* MOD_0FB2 */
11284 { "lssS", { Gv, Mp } },
c0f3af97
L
11285 },
11286 {
11287 /* MOD_0FB4 */
11288 { "lfsS", { Gv, Mp } },
c0f3af97
L
11289 },
11290 {
11291 /* MOD_0FB5 */
11292 { "lgsS", { Gv, Mp } },
c0f3af97
L
11293 },
11294 {
11295 /* MOD_0FC7_REG_6 */
11296 { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
d7d9a9f8 11297 { "rdrand", { Ev } },
c0f3af97
L
11298 },
11299 {
11300 /* MOD_0FC7_REG_7 */
11301 { "vmptrst", { Mq } },
e2e1fcde 11302 { "rdseed", { Ev } },
c0f3af97
L
11303 },
11304 {
11305 /* MOD_0FD7 */
592d1631 11306 { Bad_Opcode },
c0f3af97
L
11307 { "pmovmskb", { Gdq, MS } },
11308 },
11309 {
11310 /* MOD_0FE7_PREFIX_2 */
11311 { "movntdq", { Mx, XM } },
c0f3af97
L
11312 },
11313 {
11314 /* MOD_0FF0_PREFIX_3 */
11315 { "lddqu", { XM, M } },
c0f3af97
L
11316 },
11317 {
11318 /* MOD_0F382A_PREFIX_2 */
11319 { "movntdqa", { XM, Mx } },
c0f3af97
L
11320 },
11321 {
11322 /* MOD_62_32BIT */
11323 { "bound{S|}", { Gv, Ma } },
43234a1e 11324 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11325 },
11326 {
11327 /* MOD_C4_32BIT */
11328 { "lesS", { Gv, Mp } },
11329 { VEX_C4_TABLE (VEX_0F) },
11330 },
11331 {
11332 /* MOD_C5_32BIT */
11333 { "ldsS", { Gv, Mp } },
11334 { VEX_C5_TABLE (VEX_0F) },
11335 },
11336 {
592a252b
L
11337 /* MOD_VEX_0F12_PREFIX_0 */
11338 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11339 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11340 },
11341 {
592a252b
L
11342 /* MOD_VEX_0F13 */
11343 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11344 },
11345 {
592a252b
L
11346 /* MOD_VEX_0F16_PREFIX_0 */
11347 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11348 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11349 },
11350 {
592a252b
L
11351 /* MOD_VEX_0F17 */
11352 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11353 },
11354 {
592a252b
L
11355 /* MOD_VEX_0F2B */
11356 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97
L
11357 },
11358 {
592a252b 11359 /* MOD_VEX_0F50 */
592d1631 11360 { Bad_Opcode },
592a252b 11361 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
11362 },
11363 {
592a252b 11364 /* MOD_VEX_0F71_REG_2 */
592d1631 11365 { Bad_Opcode },
592a252b 11366 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
11367 },
11368 {
592a252b 11369 /* MOD_VEX_0F71_REG_4 */
592d1631 11370 { Bad_Opcode },
592a252b 11371 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
11372 },
11373 {
592a252b 11374 /* MOD_VEX_0F71_REG_6 */
592d1631 11375 { Bad_Opcode },
592a252b 11376 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
11377 },
11378 {
592a252b 11379 /* MOD_VEX_0F72_REG_2 */
592d1631 11380 { Bad_Opcode },
592a252b 11381 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 11382 },
d8faab4e 11383 {
592a252b 11384 /* MOD_VEX_0F72_REG_4 */
592d1631 11385 { Bad_Opcode },
592a252b 11386 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
11387 },
11388 {
592a252b 11389 /* MOD_VEX_0F72_REG_6 */
592d1631 11390 { Bad_Opcode },
592a252b 11391 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 11392 },
876d4bfa 11393 {
592a252b 11394 /* MOD_VEX_0F73_REG_2 */
592d1631 11395 { Bad_Opcode },
592a252b 11396 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
11397 },
11398 {
592a252b 11399 /* MOD_VEX_0F73_REG_3 */
592d1631 11400 { Bad_Opcode },
592a252b 11401 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
11402 },
11403 {
592a252b 11404 /* MOD_VEX_0F73_REG_6 */
592d1631 11405 { Bad_Opcode },
592a252b 11406 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
11407 },
11408 {
592a252b 11409 /* MOD_VEX_0F73_REG_7 */
592d1631 11410 { Bad_Opcode },
592a252b 11411 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa
L
11412 },
11413 {
592a252b
L
11414 /* MOD_VEX_0FAE_REG_2 */
11415 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 11416 },
bbedc832 11417 {
592a252b
L
11418 /* MOD_VEX_0FAE_REG_3 */
11419 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 11420 },
144c41d9 11421 {
592a252b 11422 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 11423 { Bad_Opcode },
6c30d220 11424 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 11425 },
1afd85e3 11426 {
592a252b
L
11427 /* MOD_VEX_0FE7_PREFIX_2 */
11428 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
11429 },
11430 {
592a252b
L
11431 /* MOD_VEX_0FF0_PREFIX_3 */
11432 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 11433 },
75c135a8 11434 {
592a252b
L
11435 /* MOD_VEX_0F381A_PREFIX_2 */
11436 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 11437 },
1afd85e3 11438 {
592a252b 11439 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 11440 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 11441 },
75c135a8 11442 {
592a252b
L
11443 /* MOD_VEX_0F382C_PREFIX_2 */
11444 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 11445 },
1afd85e3 11446 {
592a252b
L
11447 /* MOD_VEX_0F382D_PREFIX_2 */
11448 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
11449 },
11450 {
592a252b
L
11451 /* MOD_VEX_0F382E_PREFIX_2 */
11452 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
11453 },
11454 {
592a252b
L
11455 /* MOD_VEX_0F382F_PREFIX_2 */
11456 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 11457 },
6c30d220
L
11458 {
11459 /* MOD_VEX_0F385A_PREFIX_2 */
11460 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11461 },
11462 {
11463 /* MOD_VEX_0F388C_PREFIX_2 */
11464 { "vpmaskmov%LW", { XM, Vex, Mx } },
11465 },
11466 {
11467 /* MOD_VEX_0F388E_PREFIX_2 */
11468 { "vpmaskmov%LW", { Mx, Vex, XM } },
11469 },
43234a1e
L
11470#define NEED_MOD_TABLE
11471#include "i386-dis-evex.h"
11472#undef NEED_MOD_TABLE
b844680a
L
11473};
11474
1ceb70f8 11475static const struct dis386 rm_table[][8] = {
42164a71
L
11476 {
11477 /* RM_C6_REG_7 */
11478 { "xabort", { Skip_MODRM, Ib } },
11479 },
11480 {
11481 /* RM_C7_REG_7 */
11482 { "xbeginT", { Skip_MODRM, Jv } },
11483 },
b844680a 11484 {
1ceb70f8 11485 /* RM_0F01_REG_0 */
592d1631 11486 { Bad_Opcode },
b844680a
L
11487 { "vmcall", { Skip_MODRM } },
11488 { "vmlaunch", { Skip_MODRM } },
11489 { "vmresume", { Skip_MODRM } },
11490 { "vmxoff", { Skip_MODRM } },
b844680a
L
11491 },
11492 {
1ceb70f8 11493 /* RM_0F01_REG_1 */
b844680a
L
11494 { "monitor", { { OP_Monitor, 0 } } },
11495 { "mwait", { { OP_Mwait, 0 } } },
5c111e37
L
11496 { "clac", { Skip_MODRM } },
11497 { "stac", { Skip_MODRM } },
b844680a 11498 },
475a2301
L
11499 {
11500 /* RM_0F01_REG_2 */
11501 { "xgetbv", { Skip_MODRM } },
11502 { "xsetbv", { Skip_MODRM } },
8729a6f6
L
11503 { Bad_Opcode },
11504 { Bad_Opcode },
11505 { "vmfunc", { Skip_MODRM } },
42164a71
L
11506 { "xend", { Skip_MODRM } },
11507 { "xtest", { Skip_MODRM } },
11508 { Bad_Opcode },
475a2301 11509 },
b844680a 11510 {
1ceb70f8 11511 /* RM_0F01_REG_3 */
4e7d34a6
L
11512 { "vmrun", { Skip_MODRM } },
11513 { "vmmcall", { Skip_MODRM } },
11514 { "vmload", { Skip_MODRM } },
11515 { "vmsave", { Skip_MODRM } },
11516 { "stgi", { Skip_MODRM } },
11517 { "clgi", { Skip_MODRM } },
11518 { "skinit", { Skip_MODRM } },
11519 { "invlpga", { Skip_MODRM } },
11520 },
11521 {
1ceb70f8 11522 /* RM_0F01_REG_7 */
4e7d34a6
L
11523 { "swapgs", { Skip_MODRM } },
11524 { "rdtscp", { Skip_MODRM } },
b844680a
L
11525 },
11526 {
1ceb70f8 11527 /* RM_0FAE_REG_5 */
4e7d34a6 11528 { "lfence", { Skip_MODRM } },
b844680a
L
11529 },
11530 {
1ceb70f8 11531 /* RM_0FAE_REG_6 */
4e7d34a6 11532 { "mfence", { Skip_MODRM } },
b844680a 11533 },
bbedc832 11534 {
1ceb70f8 11535 /* RM_0FAE_REG_7 */
4e7d34a6 11536 { "sfence", { Skip_MODRM } },
144c41d9 11537 },
b844680a
L
11538};
11539
c608c12e
AM
11540#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11541
f16cd0d5
L
11542/* We use the high bit to indicate different name for the same
11543 prefix. */
11544#define ADDR16_PREFIX (0x67 | 0x100)
11545#define ADDR32_PREFIX (0x67 | 0x200)
11546#define DATA16_PREFIX (0x66 | 0x100)
11547#define DATA32_PREFIX (0x66 | 0x200)
11548#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11549#define XACQUIRE_PREFIX (0xf2 | 0x200)
11550#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11551#define BND_PREFIX (0xf2 | 0x400)
f16cd0d5
L
11552
11553static int
26ca5450 11554ckprefix (void)
252b5132 11555{
f16cd0d5 11556 int newrex, i, length;
52b15da3 11557 rex = 0;
c0f3af97 11558 rex_ignored = 0;
252b5132 11559 prefixes = 0;
7d421014 11560 used_prefixes = 0;
52b15da3 11561 rex_used = 0;
f16cd0d5
L
11562 last_lock_prefix = -1;
11563 last_repz_prefix = -1;
11564 last_repnz_prefix = -1;
11565 last_data_prefix = -1;
11566 last_addr_prefix = -1;
11567 last_rex_prefix = -1;
11568 last_seg_prefix = -1;
f310f33d
L
11569 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11570 all_prefixes[i] = 0;
11571 i = 0;
f16cd0d5
L
11572 length = 0;
11573 /* The maximum instruction length is 15bytes. */
11574 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11575 {
11576 FETCH_DATA (the_info, codep + 1);
52b15da3 11577 newrex = 0;
252b5132
RH
11578 switch (*codep)
11579 {
52b15da3
JH
11580 /* REX prefixes family. */
11581 case 0x40:
11582 case 0x41:
11583 case 0x42:
11584 case 0x43:
11585 case 0x44:
11586 case 0x45:
11587 case 0x46:
11588 case 0x47:
11589 case 0x48:
11590 case 0x49:
11591 case 0x4a:
11592 case 0x4b:
11593 case 0x4c:
11594 case 0x4d:
11595 case 0x4e:
11596 case 0x4f:
f16cd0d5
L
11597 if (address_mode == mode_64bit)
11598 newrex = *codep;
11599 else
11600 return 1;
11601 last_rex_prefix = i;
52b15da3 11602 break;
252b5132
RH
11603 case 0xf3:
11604 prefixes |= PREFIX_REPZ;
f16cd0d5 11605 last_repz_prefix = i;
252b5132
RH
11606 break;
11607 case 0xf2:
11608 prefixes |= PREFIX_REPNZ;
f16cd0d5 11609 last_repnz_prefix = i;
252b5132
RH
11610 break;
11611 case 0xf0:
11612 prefixes |= PREFIX_LOCK;
f16cd0d5 11613 last_lock_prefix = i;
252b5132
RH
11614 break;
11615 case 0x2e:
11616 prefixes |= PREFIX_CS;
f16cd0d5 11617 last_seg_prefix = i;
252b5132
RH
11618 break;
11619 case 0x36:
11620 prefixes |= PREFIX_SS;
f16cd0d5 11621 last_seg_prefix = i;
252b5132
RH
11622 break;
11623 case 0x3e:
11624 prefixes |= PREFIX_DS;
f16cd0d5 11625 last_seg_prefix = i;
252b5132
RH
11626 break;
11627 case 0x26:
11628 prefixes |= PREFIX_ES;
f16cd0d5 11629 last_seg_prefix = i;
252b5132
RH
11630 break;
11631 case 0x64:
11632 prefixes |= PREFIX_FS;
f16cd0d5 11633 last_seg_prefix = i;
252b5132
RH
11634 break;
11635 case 0x65:
11636 prefixes |= PREFIX_GS;
f16cd0d5 11637 last_seg_prefix = i;
252b5132
RH
11638 break;
11639 case 0x66:
11640 prefixes |= PREFIX_DATA;
f16cd0d5 11641 last_data_prefix = i;
252b5132
RH
11642 break;
11643 case 0x67:
11644 prefixes |= PREFIX_ADDR;
f16cd0d5 11645 last_addr_prefix = i;
252b5132 11646 break;
5076851f 11647 case FWAIT_OPCODE:
252b5132
RH
11648 /* fwait is really an instruction. If there are prefixes
11649 before the fwait, they belong to the fwait, *not* to the
11650 following instruction. */
3e7d61b2 11651 if (prefixes || rex)
252b5132
RH
11652 {
11653 prefixes |= PREFIX_FWAIT;
11654 codep++;
6c067bbb
RM
11655 /* This ensures that the previous REX prefixes are noticed
11656 as unused prefixes, as in the return case below. */
11657 rex_used = rex;
f16cd0d5 11658 return 1;
252b5132
RH
11659 }
11660 prefixes = PREFIX_FWAIT;
11661 break;
11662 default:
f16cd0d5 11663 return 1;
252b5132 11664 }
52b15da3
JH
11665 /* Rex is ignored when followed by another prefix. */
11666 if (rex)
11667 {
3e7d61b2 11668 rex_used = rex;
f16cd0d5 11669 return 1;
52b15da3 11670 }
f16cd0d5
L
11671 if (*codep != FWAIT_OPCODE)
11672 all_prefixes[i++] = *codep;
52b15da3 11673 rex = newrex;
252b5132 11674 codep++;
f16cd0d5
L
11675 length++;
11676 }
11677 return 0;
11678}
11679
11680static int
11681seg_prefix (int pref)
11682{
11683 switch (pref)
11684 {
11685 case 0x2e:
11686 return PREFIX_CS;
11687 case 0x36:
11688 return PREFIX_SS;
11689 case 0x3e:
11690 return PREFIX_DS;
11691 case 0x26:
11692 return PREFIX_ES;
11693 case 0x64:
11694 return PREFIX_FS;
11695 case 0x65:
11696 return PREFIX_GS;
11697 default:
11698 return 0;
252b5132
RH
11699 }
11700}
11701
7d421014
ILT
11702/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11703 prefix byte. */
11704
11705static const char *
26ca5450 11706prefix_name (int pref, int sizeflag)
7d421014 11707{
0003779b
L
11708 static const char *rexes [16] =
11709 {
11710 "rex", /* 0x40 */
11711 "rex.B", /* 0x41 */
11712 "rex.X", /* 0x42 */
11713 "rex.XB", /* 0x43 */
11714 "rex.R", /* 0x44 */
11715 "rex.RB", /* 0x45 */
11716 "rex.RX", /* 0x46 */
11717 "rex.RXB", /* 0x47 */
11718 "rex.W", /* 0x48 */
11719 "rex.WB", /* 0x49 */
11720 "rex.WX", /* 0x4a */
11721 "rex.WXB", /* 0x4b */
11722 "rex.WR", /* 0x4c */
11723 "rex.WRB", /* 0x4d */
11724 "rex.WRX", /* 0x4e */
11725 "rex.WRXB", /* 0x4f */
11726 };
11727
7d421014
ILT
11728 switch (pref)
11729 {
52b15da3
JH
11730 /* REX prefixes family. */
11731 case 0x40:
52b15da3 11732 case 0x41:
52b15da3 11733 case 0x42:
52b15da3 11734 case 0x43:
52b15da3 11735 case 0x44:
52b15da3 11736 case 0x45:
52b15da3 11737 case 0x46:
52b15da3 11738 case 0x47:
52b15da3 11739 case 0x48:
52b15da3 11740 case 0x49:
52b15da3 11741 case 0x4a:
52b15da3 11742 case 0x4b:
52b15da3 11743 case 0x4c:
52b15da3 11744 case 0x4d:
52b15da3 11745 case 0x4e:
52b15da3 11746 case 0x4f:
0003779b 11747 return rexes [pref - 0x40];
7d421014
ILT
11748 case 0xf3:
11749 return "repz";
11750 case 0xf2:
11751 return "repnz";
11752 case 0xf0:
11753 return "lock";
11754 case 0x2e:
11755 return "cs";
11756 case 0x36:
11757 return "ss";
11758 case 0x3e:
11759 return "ds";
11760 case 0x26:
11761 return "es";
11762 case 0x64:
11763 return "fs";
11764 case 0x65:
11765 return "gs";
11766 case 0x66:
11767 return (sizeflag & DFLAG) ? "data16" : "data32";
11768 case 0x67:
cb712a9e 11769 if (address_mode == mode_64bit)
db6eb5be 11770 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11771 else
2888cb7a 11772 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11773 case FWAIT_OPCODE:
11774 return "fwait";
f16cd0d5
L
11775 case ADDR16_PREFIX:
11776 return "addr16";
11777 case ADDR32_PREFIX:
11778 return "addr32";
11779 case DATA16_PREFIX:
11780 return "data16";
11781 case DATA32_PREFIX:
11782 return "data32";
11783 case REP_PREFIX:
11784 return "rep";
42164a71
L
11785 case XACQUIRE_PREFIX:
11786 return "xacquire";
11787 case XRELEASE_PREFIX:
11788 return "xrelease";
7e8b059b
L
11789 case BND_PREFIX:
11790 return "bnd";
7d421014
ILT
11791 default:
11792 return NULL;
11793 }
11794}
11795
ce518a5f
L
11796static char op_out[MAX_OPERANDS][100];
11797static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11798static int two_source_ops;
ce518a5f
L
11799static bfd_vma op_address[MAX_OPERANDS];
11800static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11801static bfd_vma start_pc;
ce518a5f 11802
252b5132
RH
11803/*
11804 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11805 * (see topic "Redundant prefixes" in the "Differences from 8086"
11806 * section of the "Virtual 8086 Mode" chapter.)
11807 * 'pc' should be the address of this instruction, it will
11808 * be used to print the target address if this is a relative jump or call
11809 * The function returns the length of this instruction in bytes.
11810 */
11811
252b5132 11812static char intel_syntax;
9d141669 11813static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11814static char open_char;
11815static char close_char;
11816static char separator_char;
11817static char scale_char;
11818
e396998b
AM
11819/* Here for backwards compatibility. When gdb stops using
11820 print_insn_i386_att and print_insn_i386_intel these functions can
11821 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11822int
26ca5450 11823print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11824{
11825 intel_syntax = 0;
e396998b
AM
11826
11827 return print_insn (pc, info);
252b5132
RH
11828}
11829
11830int
26ca5450 11831print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11832{
11833 intel_syntax = 1;
e396998b
AM
11834
11835 return print_insn (pc, info);
252b5132
RH
11836}
11837
e396998b 11838int
26ca5450 11839print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11840{
11841 intel_syntax = -1;
11842
11843 return print_insn (pc, info);
11844}
11845
f59a29b9
L
11846void
11847print_i386_disassembler_options (FILE *stream)
11848{
11849 fprintf (stream, _("\n\
11850The following i386/x86-64 specific disassembler options are supported for use\n\
11851with the -M switch (multiple options should be separated by commas):\n"));
11852
11853 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11854 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11855 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11856 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11857 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11858 fprintf (stream, _(" att-mnemonic\n"
11859 " Display instruction in AT&T mnemonic\n"));
11860 fprintf (stream, _(" intel-mnemonic\n"
11861 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11862 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11863 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11864 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11865 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11866 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11867 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
11868}
11869
592d1631
L
11870/* Bad opcode. */
11871static const struct dis386 bad_opcode = { "(bad)", { XX } };
11872
b844680a
L
11873/* Get a pointer to struct dis386 with a valid name. */
11874
11875static const struct dis386 *
8bb15339 11876get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11877{
91d6fa6a 11878 int vindex, vex_table_index;
b844680a
L
11879
11880 if (dp->name != NULL)
11881 return dp;
11882
11883 switch (dp->op[0].bytemode)
11884 {
1ceb70f8
L
11885 case USE_REG_TABLE:
11886 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11887 break;
11888
11889 case USE_MOD_TABLE:
91d6fa6a
NC
11890 vindex = modrm.mod == 0x3 ? 1 : 0;
11891 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11892 break;
11893
11894 case USE_RM_TABLE:
11895 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11896 break;
11897
4e7d34a6 11898 case USE_PREFIX_TABLE:
c0f3af97 11899 if (need_vex)
b844680a 11900 {
c0f3af97
L
11901 /* The prefix in VEX is implicit. */
11902 switch (vex.prefix)
11903 {
11904 case 0:
91d6fa6a 11905 vindex = 0;
c0f3af97
L
11906 break;
11907 case REPE_PREFIX_OPCODE:
91d6fa6a 11908 vindex = 1;
c0f3af97
L
11909 break;
11910 case DATA_PREFIX_OPCODE:
91d6fa6a 11911 vindex = 2;
c0f3af97
L
11912 break;
11913 case REPNE_PREFIX_OPCODE:
91d6fa6a 11914 vindex = 3;
c0f3af97
L
11915 break;
11916 default:
11917 abort ();
11918 break;
11919 }
b844680a 11920 }
7bb15c6f 11921 else
b844680a 11922 {
91d6fa6a 11923 vindex = 0;
c0f3af97
L
11924 used_prefixes |= (prefixes & PREFIX_REPZ);
11925 if (prefixes & PREFIX_REPZ)
b844680a 11926 {
91d6fa6a 11927 vindex = 1;
f16cd0d5 11928 all_prefixes[last_repz_prefix] = 0;
b844680a
L
11929 }
11930 else
11931 {
c0f3af97
L
11932 /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11933 PREFIX_DATA. */
11934 used_prefixes |= (prefixes & PREFIX_REPNZ);
11935 if (prefixes & PREFIX_REPNZ)
11936 {
91d6fa6a 11937 vindex = 3;
f16cd0d5 11938 all_prefixes[last_repnz_prefix] = 0;
c0f3af97
L
11939 }
11940 else
b844680a 11941 {
c0f3af97
L
11942 used_prefixes |= (prefixes & PREFIX_DATA);
11943 if (prefixes & PREFIX_DATA)
11944 {
91d6fa6a 11945 vindex = 2;
f16cd0d5 11946 all_prefixes[last_data_prefix] = 0;
c0f3af97 11947 }
b844680a
L
11948 }
11949 }
11950 }
91d6fa6a 11951 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11952 break;
11953
4e7d34a6 11954 case USE_X86_64_TABLE:
91d6fa6a
NC
11955 vindex = address_mode == mode_64bit ? 1 : 0;
11956 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11957 break;
11958
4e7d34a6 11959 case USE_3BYTE_TABLE:
8bb15339 11960 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11961 vindex = *codep++;
11962 dp = &three_byte_table[dp->op[1].bytemode][vindex];
8bb15339
L
11963 modrm.mod = (*codep >> 6) & 3;
11964 modrm.reg = (*codep >> 3) & 7;
11965 modrm.rm = *codep & 7;
11966 break;
11967
c0f3af97
L
11968 case USE_VEX_LEN_TABLE:
11969 if (!need_vex)
11970 abort ();
11971
11972 switch (vex.length)
11973 {
11974 case 128:
91d6fa6a 11975 vindex = 0;
c0f3af97
L
11976 break;
11977 case 256:
91d6fa6a 11978 vindex = 1;
c0f3af97
L
11979 break;
11980 default:
11981 abort ();
11982 break;
11983 }
11984
91d6fa6a 11985 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11986 break;
11987
f88c9eb0
SP
11988 case USE_XOP_8F_TABLE:
11989 FETCH_DATA (info, codep + 3);
11990 /* All bits in the REX prefix are ignored. */
11991 rex_ignored = rex;
11992 rex = ~(*codep >> 5) & 0x7;
11993
11994 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11995 switch ((*codep & 0x1f))
11996 {
11997 default:
f07af43e
L
11998 dp = &bad_opcode;
11999 return dp;
5dd85c99
SP
12000 case 0x8:
12001 vex_table_index = XOP_08;
12002 break;
f88c9eb0
SP
12003 case 0x9:
12004 vex_table_index = XOP_09;
12005 break;
12006 case 0xa:
12007 vex_table_index = XOP_0A;
12008 break;
12009 }
12010 codep++;
12011 vex.w = *codep & 0x80;
12012 if (vex.w && address_mode == mode_64bit)
12013 rex |= REX_W;
12014
12015 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12016 if (address_mode != mode_64bit
12017 && vex.register_specifier > 0x7)
f07af43e
L
12018 {
12019 dp = &bad_opcode;
12020 return dp;
12021 }
f88c9eb0
SP
12022
12023 vex.length = (*codep & 0x4) ? 256 : 128;
12024 switch ((*codep & 0x3))
12025 {
12026 case 0:
12027 vex.prefix = 0;
12028 break;
12029 case 1:
12030 vex.prefix = DATA_PREFIX_OPCODE;
12031 break;
12032 case 2:
12033 vex.prefix = REPE_PREFIX_OPCODE;
12034 break;
12035 case 3:
12036 vex.prefix = REPNE_PREFIX_OPCODE;
12037 break;
12038 }
12039 need_vex = 1;
12040 need_vex_reg = 1;
12041 codep++;
91d6fa6a
NC
12042 vindex = *codep++;
12043 dp = &xop_table[vex_table_index][vindex];
c48244a5
SP
12044
12045 FETCH_DATA (info, codep + 1);
12046 modrm.mod = (*codep >> 6) & 3;
12047 modrm.reg = (*codep >> 3) & 7;
12048 modrm.rm = *codep & 7;
f88c9eb0
SP
12049 break;
12050
c0f3af97 12051 case USE_VEX_C4_TABLE:
43234a1e 12052 /* VEX prefix. */
c0f3af97
L
12053 FETCH_DATA (info, codep + 3);
12054 /* All bits in the REX prefix are ignored. */
12055 rex_ignored = rex;
12056 rex = ~(*codep >> 5) & 0x7;
12057 switch ((*codep & 0x1f))
12058 {
12059 default:
f07af43e
L
12060 dp = &bad_opcode;
12061 return dp;
c0f3af97 12062 case 0x1:
f88c9eb0 12063 vex_table_index = VEX_0F;
c0f3af97
L
12064 break;
12065 case 0x2:
f88c9eb0 12066 vex_table_index = VEX_0F38;
c0f3af97
L
12067 break;
12068 case 0x3:
f88c9eb0 12069 vex_table_index = VEX_0F3A;
c0f3af97
L
12070 break;
12071 }
12072 codep++;
12073 vex.w = *codep & 0x80;
12074 if (vex.w && address_mode == mode_64bit)
12075 rex |= REX_W;
12076
12077 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12078 if (address_mode != mode_64bit
12079 && vex.register_specifier > 0x7)
f07af43e
L
12080 {
12081 dp = &bad_opcode;
12082 return dp;
12083 }
c0f3af97
L
12084
12085 vex.length = (*codep & 0x4) ? 256 : 128;
12086 switch ((*codep & 0x3))
12087 {
12088 case 0:
12089 vex.prefix = 0;
12090 break;
12091 case 1:
12092 vex.prefix = DATA_PREFIX_OPCODE;
12093 break;
12094 case 2:
12095 vex.prefix = REPE_PREFIX_OPCODE;
12096 break;
12097 case 3:
12098 vex.prefix = REPNE_PREFIX_OPCODE;
12099 break;
12100 }
12101 need_vex = 1;
12102 need_vex_reg = 1;
12103 codep++;
91d6fa6a
NC
12104 vindex = *codep++;
12105 dp = &vex_table[vex_table_index][vindex];
c0f3af97 12106 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12107 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12108 {
12109 FETCH_DATA (info, codep + 1);
12110 modrm.mod = (*codep >> 6) & 3;
12111 modrm.reg = (*codep >> 3) & 7;
12112 modrm.rm = *codep & 7;
12113 }
12114 break;
12115
12116 case USE_VEX_C5_TABLE:
43234a1e 12117 /* VEX prefix. */
c0f3af97
L
12118 FETCH_DATA (info, codep + 2);
12119 /* All bits in the REX prefix are ignored. */
12120 rex_ignored = rex;
12121 rex = (*codep & 0x80) ? 0 : REX_R;
12122
12123 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12124 if (address_mode != mode_64bit
12125 && vex.register_specifier > 0x7)
f07af43e
L
12126 {
12127 dp = &bad_opcode;
12128 return dp;
12129 }
c0f3af97 12130
759a05ce
L
12131 vex.w = 0;
12132
c0f3af97
L
12133 vex.length = (*codep & 0x4) ? 256 : 128;
12134 switch ((*codep & 0x3))
12135 {
12136 case 0:
12137 vex.prefix = 0;
12138 break;
12139 case 1:
12140 vex.prefix = DATA_PREFIX_OPCODE;
12141 break;
12142 case 2:
12143 vex.prefix = REPE_PREFIX_OPCODE;
12144 break;
12145 case 3:
12146 vex.prefix = REPNE_PREFIX_OPCODE;
12147 break;
12148 }
12149 need_vex = 1;
12150 need_vex_reg = 1;
12151 codep++;
91d6fa6a
NC
12152 vindex = *codep++;
12153 dp = &vex_table[dp->op[1].bytemode][vindex];
c0f3af97 12154 /* There is no MODRM byte for VEX [82|77]. */
91d6fa6a 12155 if (vindex != 0x77 && vindex != 0x82)
c0f3af97
L
12156 {
12157 FETCH_DATA (info, codep + 1);
12158 modrm.mod = (*codep >> 6) & 3;
12159 modrm.reg = (*codep >> 3) & 7;
12160 modrm.rm = *codep & 7;
12161 }
12162 break;
12163
9e30b8e0
L
12164 case USE_VEX_W_TABLE:
12165 if (!need_vex)
12166 abort ();
12167
12168 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12169 break;
12170
43234a1e
L
12171 case USE_EVEX_TABLE:
12172 two_source_ops = 0;
12173 /* EVEX prefix. */
12174 vex.evex = 1;
12175 FETCH_DATA (info, codep + 4);
12176 /* All bits in the REX prefix are ignored. */
12177 rex_ignored = rex;
12178 /* The first byte after 0x62. */
12179 rex = ~(*codep >> 5) & 0x7;
12180 vex.r = *codep & 0x10;
12181 switch ((*codep & 0xf))
12182 {
12183 default:
12184 return &bad_opcode;
12185 case 0x1:
12186 vex_table_index = EVEX_0F;
12187 break;
12188 case 0x2:
12189 vex_table_index = EVEX_0F38;
12190 break;
12191 case 0x3:
12192 vex_table_index = EVEX_0F3A;
12193 break;
12194 }
12195
12196 /* The second byte after 0x62. */
12197 codep++;
12198 vex.w = *codep & 0x80;
12199 if (vex.w && address_mode == mode_64bit)
12200 rex |= REX_W;
12201
12202 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12203 if (address_mode != mode_64bit)
12204 {
12205 /* In 16/32-bit mode silently ignore following bits. */
12206 rex &= ~REX_B;
12207 vex.r = 1;
12208 vex.v = 1;
12209 vex.register_specifier &= 0x7;
12210 }
12211
12212 /* The U bit. */
12213 if (!(*codep & 0x4))
12214 return &bad_opcode;
12215
12216 switch ((*codep & 0x3))
12217 {
12218 case 0:
12219 vex.prefix = 0;
12220 break;
12221 case 1:
12222 vex.prefix = DATA_PREFIX_OPCODE;
12223 break;
12224 case 2:
12225 vex.prefix = REPE_PREFIX_OPCODE;
12226 break;
12227 case 3:
12228 vex.prefix = REPNE_PREFIX_OPCODE;
12229 break;
12230 }
12231
12232 /* The third byte after 0x62. */
12233 codep++;
12234
12235 /* Remember the static rounding bits. */
12236 vex.ll = (*codep >> 5) & 3;
12237 vex.b = (*codep & 0x10) != 0;
12238
12239 vex.v = *codep & 0x8;
12240 vex.mask_register_specifier = *codep & 0x7;
12241 vex.zeroing = *codep & 0x80;
12242
12243 need_vex = 1;
12244 need_vex_reg = 1;
12245 codep++;
12246 vindex = *codep++;
12247 dp = &evex_table[vex_table_index][vindex];
12248 FETCH_DATA (info, codep + 1);
12249 modrm.mod = (*codep >> 6) & 3;
12250 modrm.reg = (*codep >> 3) & 7;
12251 modrm.rm = *codep & 7;
12252
12253 /* Set vector length. */
12254 if (modrm.mod == 3 && vex.b)
12255 vex.length = 512;
12256 else
12257 {
12258 switch (vex.ll)
12259 {
12260 case 0x0:
12261 vex.length = 128;
12262 break;
12263 case 0x1:
12264 vex.length = 256;
12265 break;
12266 case 0x2:
12267 vex.length = 512;
12268 break;
12269 default:
12270 return &bad_opcode;
12271 }
12272 }
12273 break;
12274
592d1631
L
12275 case 0:
12276 dp = &bad_opcode;
12277 break;
12278
b844680a 12279 default:
d34b5006 12280 abort ();
b844680a
L
12281 }
12282
12283 if (dp->name != NULL)
12284 return dp;
12285 else
8bb15339 12286 return get_valid_dis386 (dp, info);
b844680a
L
12287}
12288
dfc8cf43 12289static void
55cf16e1 12290get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
12291{
12292 /* If modrm.mod == 3, operand must be register. */
12293 if (need_modrm
55cf16e1 12294 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
12295 && modrm.mod != 3
12296 && modrm.rm == 4)
12297 {
12298 FETCH_DATA (info, codep + 2);
12299 sib.index = (codep [1] >> 3) & 7;
12300 sib.scale = (codep [1] >> 6) & 3;
12301 sib.base = codep [1] & 7;
12302 }
12303}
12304
e396998b 12305static int
26ca5450 12306print_insn (bfd_vma pc, disassemble_info *info)
252b5132 12307{
2da11e11 12308 const struct dis386 *dp;
252b5132 12309 int i;
ce518a5f 12310 char *op_txt[MAX_OPERANDS];
252b5132 12311 int needcomma;
e396998b
AM
12312 int sizeflag;
12313 const char *p;
252b5132 12314 struct dis_private priv;
f16cd0d5
L
12315 int prefix_length;
12316 int default_prefixes;
252b5132 12317
d7921315
L
12318 priv.orig_sizeflag = AFLAG | DFLAG;
12319 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 12320 address_mode = mode_32bit;
2da11e11 12321 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
12322 {
12323 address_mode = mode_16bit;
12324 priv.orig_sizeflag = 0;
12325 }
2da11e11 12326 else
d7921315
L
12327 address_mode = mode_64bit;
12328
12329 if (intel_syntax == (char) -1)
12330 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
12331
12332 for (p = info->disassembler_options; p != NULL; )
12333 {
0112cd26 12334 if (CONST_STRNEQ (p, "x86-64"))
e396998b 12335 {
cb712a9e 12336 address_mode = mode_64bit;
e396998b
AM
12337 priv.orig_sizeflag = AFLAG | DFLAG;
12338 }
0112cd26 12339 else if (CONST_STRNEQ (p, "i386"))
e396998b 12340 {
cb712a9e 12341 address_mode = mode_32bit;
e396998b
AM
12342 priv.orig_sizeflag = AFLAG | DFLAG;
12343 }
0112cd26 12344 else if (CONST_STRNEQ (p, "i8086"))
e396998b 12345 {
cb712a9e 12346 address_mode = mode_16bit;
e396998b
AM
12347 priv.orig_sizeflag = 0;
12348 }
0112cd26 12349 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
12350 {
12351 intel_syntax = 1;
9d141669
L
12352 if (CONST_STRNEQ (p + 5, "-mnemonic"))
12353 intel_mnemonic = 1;
e396998b 12354 }
0112cd26 12355 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
12356 {
12357 intel_syntax = 0;
9d141669
L
12358 if (CONST_STRNEQ (p + 3, "-mnemonic"))
12359 intel_mnemonic = 0;
e396998b 12360 }
0112cd26 12361 else if (CONST_STRNEQ (p, "addr"))
e396998b 12362 {
f59a29b9
L
12363 if (address_mode == mode_64bit)
12364 {
12365 if (p[4] == '3' && p[5] == '2')
12366 priv.orig_sizeflag &= ~AFLAG;
12367 else if (p[4] == '6' && p[5] == '4')
12368 priv.orig_sizeflag |= AFLAG;
12369 }
12370 else
12371 {
12372 if (p[4] == '1' && p[5] == '6')
12373 priv.orig_sizeflag &= ~AFLAG;
12374 else if (p[4] == '3' && p[5] == '2')
12375 priv.orig_sizeflag |= AFLAG;
12376 }
e396998b 12377 }
0112cd26 12378 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
12379 {
12380 if (p[4] == '1' && p[5] == '6')
12381 priv.orig_sizeflag &= ~DFLAG;
12382 else if (p[4] == '3' && p[5] == '2')
12383 priv.orig_sizeflag |= DFLAG;
12384 }
0112cd26 12385 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
12386 priv.orig_sizeflag |= SUFFIX_ALWAYS;
12387
12388 p = strchr (p, ',');
12389 if (p != NULL)
12390 p++;
12391 }
12392
12393 if (intel_syntax)
12394 {
12395 names64 = intel_names64;
12396 names32 = intel_names32;
12397 names16 = intel_names16;
12398 names8 = intel_names8;
12399 names8rex = intel_names8rex;
12400 names_seg = intel_names_seg;
b9733481 12401 names_mm = intel_names_mm;
7e8b059b 12402 names_bnd = intel_names_bnd;
b9733481
L
12403 names_xmm = intel_names_xmm;
12404 names_ymm = intel_names_ymm;
43234a1e 12405 names_zmm = intel_names_zmm;
db51cc60
L
12406 index64 = intel_index64;
12407 index32 = intel_index32;
43234a1e 12408 names_mask = intel_names_mask;
e396998b
AM
12409 index16 = intel_index16;
12410 open_char = '[';
12411 close_char = ']';
12412 separator_char = '+';
12413 scale_char = '*';
12414 }
12415 else
12416 {
12417 names64 = att_names64;
12418 names32 = att_names32;
12419 names16 = att_names16;
12420 names8 = att_names8;
12421 names8rex = att_names8rex;
12422 names_seg = att_names_seg;
b9733481 12423 names_mm = att_names_mm;
7e8b059b 12424 names_bnd = att_names_bnd;
b9733481
L
12425 names_xmm = att_names_xmm;
12426 names_ymm = att_names_ymm;
43234a1e 12427 names_zmm = att_names_zmm;
db51cc60
L
12428 index64 = att_index64;
12429 index32 = att_index32;
43234a1e 12430 names_mask = att_names_mask;
e396998b
AM
12431 index16 = att_index16;
12432 open_char = '(';
12433 close_char = ')';
12434 separator_char = ',';
12435 scale_char = ',';
12436 }
2da11e11 12437
4fe53c98 12438 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12439 puts most long word instructions on a single line. Use 8 bytes
12440 for Intel L1OM. */
d7921315 12441 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12442 info->bytes_per_line = 8;
12443 else
12444 info->bytes_per_line = 7;
252b5132 12445
26ca5450 12446 info->private_data = &priv;
252b5132
RH
12447 priv.max_fetched = priv.the_buffer;
12448 priv.insn_start = pc;
252b5132
RH
12449
12450 obuf[0] = 0;
ce518a5f
L
12451 for (i = 0; i < MAX_OPERANDS; ++i)
12452 {
12453 op_out[i][0] = 0;
12454 op_index[i] = -1;
12455 }
252b5132
RH
12456
12457 the_info = info;
12458 start_pc = pc;
e396998b
AM
12459 start_codep = priv.the_buffer;
12460 codep = priv.the_buffer;
252b5132 12461
5076851f
ILT
12462 if (setjmp (priv.bailout) != 0)
12463 {
7d421014
ILT
12464 const char *name;
12465
5076851f 12466 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12467 means we have an incomplete instruction of some sort. Just
12468 print the first byte as a prefix or a .byte pseudo-op. */
12469 if (codep > priv.the_buffer)
5076851f 12470 {
e396998b 12471 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12472 if (name != NULL)
12473 (*info->fprintf_func) (info->stream, "%s", name);
12474 else
5076851f 12475 {
7d421014
ILT
12476 /* Just print the first byte as a .byte instruction. */
12477 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12478 (unsigned int) priv.the_buffer[0]);
5076851f 12479 }
5076851f 12480
7d421014 12481 return 1;
5076851f
ILT
12482 }
12483
12484 return -1;
12485 }
12486
52b15da3 12487 obufp = obuf;
f16cd0d5
L
12488 sizeflag = priv.orig_sizeflag;
12489
12490 if (!ckprefix () || rex_used)
12491 {
12492 /* Too many prefixes or unused REX prefixes. */
12493 for (i = 0;
f6dd4781 12494 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12495 i++)
de882298 12496 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12497 i == 0 ? "" : " ",
f16cd0d5 12498 prefix_name (all_prefixes[i], sizeflag));
de882298 12499 return i;
f16cd0d5 12500 }
252b5132
RH
12501
12502 insn_codep = codep;
12503
12504 FETCH_DATA (info, codep + 1);
12505 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12506
3e7d61b2 12507 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12508 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12509 {
f16cd0d5 12510 (*info->fprintf_func) (info->stream, "fwait");
7d421014 12511 return 1;
252b5132
RH
12512 }
12513
252b5132
RH
12514 if (*codep == 0x0f)
12515 {
eec0f4ca 12516 unsigned char threebyte;
252b5132 12517 FETCH_DATA (info, codep + 2);
eec0f4ca
L
12518 threebyte = *++codep;
12519 dp = &dis386_twobyte[threebyte];
252b5132 12520 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12521 codep++;
252b5132
RH
12522 }
12523 else
12524 {
6439fc28 12525 dp = &dis386[*codep];
252b5132 12526 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12527 codep++;
252b5132 12528 }
246c51aa 12529
b844680a 12530 if ((prefixes & PREFIX_REPZ))
f16cd0d5 12531 used_prefixes |= PREFIX_REPZ;
b844680a 12532 if ((prefixes & PREFIX_REPNZ))
f16cd0d5 12533 used_prefixes |= PREFIX_REPNZ;
b844680a 12534 if ((prefixes & PREFIX_LOCK))
f16cd0d5 12535 used_prefixes |= PREFIX_LOCK;
c608c12e 12536
f16cd0d5 12537 default_prefixes = 0;
c608c12e
AM
12538 if (prefixes & PREFIX_ADDR)
12539 {
12540 sizeflag ^= AFLAG;
ce518a5f 12541 if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
3ffd33cf 12542 {
cb712a9e 12543 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
f16cd0d5 12544 all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
3ffd33cf 12545 else
f16cd0d5
L
12546 all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
12547 default_prefixes |= PREFIX_ADDR;
3ffd33cf
AM
12548 }
12549 }
12550
b844680a 12551 if ((prefixes & PREFIX_DATA))
3ffd33cf
AM
12552 {
12553 sizeflag ^= DFLAG;
ce518a5f
L
12554 if (dp->op[2].bytemode == cond_jump_mode
12555 && dp->op[0].bytemode == v_mode
6439fc28 12556 && !intel_syntax)
3ffd33cf
AM
12557 {
12558 if (sizeflag & DFLAG)
f16cd0d5 12559 all_prefixes[last_data_prefix] = DATA32_PREFIX;
3ffd33cf 12560 else
f16cd0d5
L
12561 all_prefixes[last_data_prefix] = DATA16_PREFIX;
12562 default_prefixes |= PREFIX_DATA;
12563 }
12564 else if (rex & REX_W)
12565 {
12566 /* REX_W will override PREFIX_DATA. */
12567 default_prefixes |= PREFIX_DATA;
3ffd33cf
AM
12568 }
12569 }
12570
8bb15339 12571 if (need_modrm)
252b5132
RH
12572 {
12573 FETCH_DATA (info, codep + 1);
7967e09e
L
12574 modrm.mod = (*codep >> 6) & 3;
12575 modrm.reg = (*codep >> 3) & 7;
12576 modrm.rm = *codep & 7;
252b5132
RH
12577 }
12578
42d5f9c6
MS
12579 need_vex = 0;
12580 need_vex_reg = 0;
12581 vex_w_done = 0;
43234a1e 12582 vex.evex = 0;
55b126d4 12583
ce518a5f 12584 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12585 {
55cf16e1 12586 get_sib (info, sizeflag);
252b5132
RH
12587 dofloat (sizeflag);
12588 }
12589 else
12590 {
8bb15339 12591 dp = get_valid_dis386 (dp, info);
b844680a 12592 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12593 {
55cf16e1 12594 get_sib (info, sizeflag);
ce518a5f
L
12595 for (i = 0; i < MAX_OPERANDS; ++i)
12596 {
246c51aa 12597 obufp = op_out[i];
ce518a5f
L
12598 op_ad = MAX_OPERANDS - 1 - i;
12599 if (dp->op[i].rtn)
12600 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12601 /* For EVEX instruction after the last operand masking
12602 should be printed. */
12603 if (i == 0 && vex.evex)
12604 {
12605 /* Don't print {%k0}. */
12606 if (vex.mask_register_specifier)
12607 {
12608 oappend ("{");
12609 oappend (names_mask[vex.mask_register_specifier]);
12610 oappend ("}");
12611 }
12612 if (vex.zeroing)
12613 oappend ("{z}");
12614 }
ce518a5f 12615 }
6439fc28 12616 }
252b5132
RH
12617 }
12618
7d421014
ILT
12619 /* See if any prefixes were not used. If so, print the first one
12620 separately. If we don't do this, we'll wind up printing an
12621 instruction stream which does not precisely correspond to the
12622 bytes we are disassembling. */
f16cd0d5 12623 if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
7d421014 12624 {
f16cd0d5
L
12625 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12626 if (all_prefixes[i])
12627 {
12628 const char *name;
12629 name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
12630 if (name == NULL)
12631 name = INTERNAL_DISASSEMBLER_ERROR;
12632 (*info->fprintf_func) (info->stream, "%s", name);
12633 return 1;
12634 }
52b15da3 12635 }
7d421014 12636
d869730d 12637 /* Check if the REX prefix is used. */
2a70cca4 12638 if (rex_ignored == 0 && (rex ^ rex_used) == 0)
f16cd0d5
L
12639 all_prefixes[last_rex_prefix] = 0;
12640
5e6718e4 12641 /* Check if the SEG prefix is used. */
f16cd0d5
L
12642 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12643 | PREFIX_FS | PREFIX_GS)) != 0
12644 && (used_prefixes
12645 & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
12646 all_prefixes[last_seg_prefix] = 0;
12647
5e6718e4 12648 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12649 if ((prefixes & PREFIX_ADDR) != 0
12650 && (used_prefixes & PREFIX_ADDR) != 0)
12651 all_prefixes[last_addr_prefix] = 0;
12652
5e6718e4 12653 /* Check if the DATA prefix is used. */
f16cd0d5
L
12654 if ((prefixes & PREFIX_DATA) != 0
12655 && (used_prefixes & PREFIX_DATA) != 0)
12656 all_prefixes[last_data_prefix] = 0;
12657
12658 prefix_length = 0;
f310f33d 12659 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12660 if (all_prefixes[i])
12661 {
12662 const char *name;
12663 name = prefix_name (all_prefixes[i], sizeflag);
12664 if (name == NULL)
12665 abort ();
12666 prefix_length += strlen (name) + 1;
12667 (*info->fprintf_func) (info->stream, "%s ", name);
12668 }
b844680a 12669
f16cd0d5
L
12670 /* Check maximum code length. */
12671 if ((codep - start_codep) > MAX_CODE_LENGTH)
12672 {
12673 (*info->fprintf_func) (info->stream, "(bad)");
12674 return MAX_CODE_LENGTH;
12675 }
b844680a 12676
ea397f5b 12677 obufp = mnemonicendp;
f16cd0d5 12678 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12679 oappend (" ");
12680 oappend (" ");
12681 (*info->fprintf_func) (info->stream, "%s", obuf);
12682
12683 /* The enter and bound instructions are printed with operands in the same
12684 order as the intel book; everything else is printed in reverse order. */
2da11e11 12685 if (intel_syntax || two_source_ops)
252b5132 12686 {
185b1163
L
12687 bfd_vma riprel;
12688
ce518a5f 12689 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12690 op_txt[i] = op_out[i];
246c51aa 12691
ce518a5f
L
12692 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12693 {
6c067bbb
RM
12694 op_ad = op_index[i];
12695 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12696 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12697 riprel = op_riprel[i];
12698 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12699 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12700 }
252b5132
RH
12701 }
12702 else
12703 {
ce518a5f 12704 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12705 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12706 }
12707
ce518a5f
L
12708 needcomma = 0;
12709 for (i = 0; i < MAX_OPERANDS; ++i)
12710 if (*op_txt[i])
12711 {
12712 if (needcomma)
12713 (*info->fprintf_func) (info->stream, ",");
12714 if (op_index[i] != -1 && !op_riprel[i])
12715 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12716 else
12717 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12718 needcomma = 1;
12719 }
050dfa73 12720
ce518a5f 12721 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12722 if (op_index[i] != -1 && op_riprel[i])
12723 {
12724 (*info->fprintf_func) (info->stream, " # ");
12725 (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
12726 + op_address[op_index[i]]), info);
185b1163 12727 break;
52b15da3 12728 }
e396998b 12729 return codep - priv.the_buffer;
252b5132
RH
12730}
12731
6439fc28 12732static const char *float_mem[] = {
252b5132 12733 /* d8 */
7c52e0e8
L
12734 "fadd{s|}",
12735 "fmul{s|}",
12736 "fcom{s|}",
12737 "fcomp{s|}",
12738 "fsub{s|}",
12739 "fsubr{s|}",
12740 "fdiv{s|}",
12741 "fdivr{s|}",
db6eb5be 12742 /* d9 */
7c52e0e8 12743 "fld{s|}",
252b5132 12744 "(bad)",
7c52e0e8
L
12745 "fst{s|}",
12746 "fstp{s|}",
9306ca4a 12747 "fldenvIC",
252b5132 12748 "fldcw",
9306ca4a 12749 "fNstenvIC",
252b5132
RH
12750 "fNstcw",
12751 /* da */
7c52e0e8
L
12752 "fiadd{l|}",
12753 "fimul{l|}",
12754 "ficom{l|}",
12755 "ficomp{l|}",
12756 "fisub{l|}",
12757 "fisubr{l|}",
12758 "fidiv{l|}",
12759 "fidivr{l|}",
252b5132 12760 /* db */
7c52e0e8
L
12761 "fild{l|}",
12762 "fisttp{l|}",
12763 "fist{l|}",
12764 "fistp{l|}",
252b5132 12765 "(bad)",
6439fc28 12766 "fld{t||t|}",
252b5132 12767 "(bad)",
6439fc28 12768 "fstp{t||t|}",
252b5132 12769 /* dc */
7c52e0e8
L
12770 "fadd{l|}",
12771 "fmul{l|}",
12772 "fcom{l|}",
12773 "fcomp{l|}",
12774 "fsub{l|}",
12775 "fsubr{l|}",
12776 "fdiv{l|}",
12777 "fdivr{l|}",
252b5132 12778 /* dd */
7c52e0e8
L
12779 "fld{l|}",
12780 "fisttp{ll|}",
12781 "fst{l||}",
12782 "fstp{l|}",
9306ca4a 12783 "frstorIC",
252b5132 12784 "(bad)",
9306ca4a 12785 "fNsaveIC",
252b5132
RH
12786 "fNstsw",
12787 /* de */
12788 "fiadd",
12789 "fimul",
12790 "ficom",
12791 "ficomp",
12792 "fisub",
12793 "fisubr",
12794 "fidiv",
12795 "fidivr",
12796 /* df */
12797 "fild",
ca164297 12798 "fisttp",
252b5132
RH
12799 "fist",
12800 "fistp",
12801 "fbld",
7c52e0e8 12802 "fild{ll|}",
252b5132 12803 "fbstp",
7c52e0e8 12804 "fistp{ll|}",
1d9f512f
AM
12805};
12806
12807static const unsigned char float_mem_mode[] = {
12808 /* d8 */
12809 d_mode,
12810 d_mode,
12811 d_mode,
12812 d_mode,
12813 d_mode,
12814 d_mode,
12815 d_mode,
12816 d_mode,
12817 /* d9 */
12818 d_mode,
12819 0,
12820 d_mode,
12821 d_mode,
12822 0,
12823 w_mode,
12824 0,
12825 w_mode,
12826 /* da */
12827 d_mode,
12828 d_mode,
12829 d_mode,
12830 d_mode,
12831 d_mode,
12832 d_mode,
12833 d_mode,
12834 d_mode,
12835 /* db */
12836 d_mode,
12837 d_mode,
12838 d_mode,
12839 d_mode,
12840 0,
9306ca4a 12841 t_mode,
1d9f512f 12842 0,
9306ca4a 12843 t_mode,
1d9f512f
AM
12844 /* dc */
12845 q_mode,
12846 q_mode,
12847 q_mode,
12848 q_mode,
12849 q_mode,
12850 q_mode,
12851 q_mode,
12852 q_mode,
12853 /* dd */
12854 q_mode,
12855 q_mode,
12856 q_mode,
12857 q_mode,
12858 0,
12859 0,
12860 0,
12861 w_mode,
12862 /* de */
12863 w_mode,
12864 w_mode,
12865 w_mode,
12866 w_mode,
12867 w_mode,
12868 w_mode,
12869 w_mode,
12870 w_mode,
12871 /* df */
12872 w_mode,
12873 w_mode,
12874 w_mode,
12875 w_mode,
9306ca4a 12876 t_mode,
1d9f512f 12877 q_mode,
9306ca4a 12878 t_mode,
1d9f512f 12879 q_mode
252b5132
RH
12880};
12881
ce518a5f
L
12882#define ST { OP_ST, 0 }
12883#define STi { OP_STi, 0 }
252b5132 12884
4efba78c
L
12885#define FGRPd9_2 NULL, { { NULL, 0 } }
12886#define FGRPd9_4 NULL, { { NULL, 1 } }
12887#define FGRPd9_5 NULL, { { NULL, 2 } }
12888#define FGRPd9_6 NULL, { { NULL, 3 } }
12889#define FGRPd9_7 NULL, { { NULL, 4 } }
12890#define FGRPda_5 NULL, { { NULL, 5 } }
12891#define FGRPdb_4 NULL, { { NULL, 6 } }
12892#define FGRPde_3 NULL, { { NULL, 7 } }
12893#define FGRPdf_4 NULL, { { NULL, 8 } }
252b5132 12894
2da11e11 12895static const struct dis386 float_reg[][8] = {
252b5132
RH
12896 /* d8 */
12897 {
ce518a5f
L
12898 { "fadd", { ST, STi } },
12899 { "fmul", { ST, STi } },
12900 { "fcom", { STi } },
12901 { "fcomp", { STi } },
12902 { "fsub", { ST, STi } },
12903 { "fsubr", { ST, STi } },
12904 { "fdiv", { ST, STi } },
12905 { "fdivr", { ST, STi } },
252b5132
RH
12906 },
12907 /* d9 */
12908 {
ce518a5f
L
12909 { "fld", { STi } },
12910 { "fxch", { STi } },
252b5132 12911 { FGRPd9_2 },
592d1631 12912 { Bad_Opcode },
252b5132
RH
12913 { FGRPd9_4 },
12914 { FGRPd9_5 },
12915 { FGRPd9_6 },
12916 { FGRPd9_7 },
12917 },
12918 /* da */
12919 {
ce518a5f
L
12920 { "fcmovb", { ST, STi } },
12921 { "fcmove", { ST, STi } },
12922 { "fcmovbe",{ ST, STi } },
12923 { "fcmovu", { ST, STi } },
592d1631 12924 { Bad_Opcode },
252b5132 12925 { FGRPda_5 },
592d1631
L
12926 { Bad_Opcode },
12927 { Bad_Opcode },
252b5132
RH
12928 },
12929 /* db */
12930 {
ce518a5f
L
12931 { "fcmovnb",{ ST, STi } },
12932 { "fcmovne",{ ST, STi } },
12933 { "fcmovnbe",{ ST, STi } },
12934 { "fcmovnu",{ ST, STi } },
252b5132 12935 { FGRPdb_4 },
ce518a5f
L
12936 { "fucomi", { ST, STi } },
12937 { "fcomi", { ST, STi } },
592d1631 12938 { Bad_Opcode },
252b5132
RH
12939 },
12940 /* dc */
12941 {
ce518a5f
L
12942 { "fadd", { STi, ST } },
12943 { "fmul", { STi, ST } },
592d1631
L
12944 { Bad_Opcode },
12945 { Bad_Opcode },
9d141669
L
12946 { "fsub!M", { STi, ST } },
12947 { "fsubM", { STi, ST } },
12948 { "fdiv!M", { STi, ST } },
12949 { "fdivM", { STi, ST } },
252b5132
RH
12950 },
12951 /* dd */
12952 {
ce518a5f 12953 { "ffree", { STi } },
592d1631 12954 { Bad_Opcode },
ce518a5f
L
12955 { "fst", { STi } },
12956 { "fstp", { STi } },
12957 { "fucom", { STi } },
12958 { "fucomp", { STi } },
592d1631
L
12959 { Bad_Opcode },
12960 { Bad_Opcode },
252b5132
RH
12961 },
12962 /* de */
12963 {
ce518a5f
L
12964 { "faddp", { STi, ST } },
12965 { "fmulp", { STi, ST } },
592d1631 12966 { Bad_Opcode },
252b5132 12967 { FGRPde_3 },
9d141669
L
12968 { "fsub!Mp", { STi, ST } },
12969 { "fsubMp", { STi, ST } },
12970 { "fdiv!Mp", { STi, ST } },
12971 { "fdivMp", { STi, ST } },
252b5132
RH
12972 },
12973 /* df */
12974 {
ce518a5f 12975 { "ffreep", { STi } },
592d1631
L
12976 { Bad_Opcode },
12977 { Bad_Opcode },
12978 { Bad_Opcode },
252b5132 12979 { FGRPdf_4 },
ce518a5f
L
12980 { "fucomip", { ST, STi } },
12981 { "fcomip", { ST, STi } },
592d1631 12982 { Bad_Opcode },
252b5132
RH
12983 },
12984};
12985
252b5132
RH
12986static char *fgrps[][8] = {
12987 /* d9_2 0 */
12988 {
12989 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12990 },
12991
12992 /* d9_4 1 */
12993 {
12994 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12995 },
12996
12997 /* d9_5 2 */
12998 {
12999 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13000 },
13001
13002 /* d9_6 3 */
13003 {
13004 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13005 },
13006
13007 /* d9_7 4 */
13008 {
13009 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13010 },
13011
13012 /* da_5 5 */
13013 {
13014 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13015 },
13016
13017 /* db_4 6 */
13018 {
309d3373
JB
13019 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13020 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13021 },
13022
13023 /* de_3 7 */
13024 {
13025 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13026 },
13027
13028 /* df_4 8 */
13029 {
13030 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13031 },
13032};
13033
b6169b20
L
13034static void
13035swap_operand (void)
13036{
13037 mnemonicendp[0] = '.';
13038 mnemonicendp[1] = 's';
13039 mnemonicendp += 2;
13040}
13041
b844680a
L
13042static void
13043OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13044 int sizeflag ATTRIBUTE_UNUSED)
13045{
13046 /* Skip mod/rm byte. */
13047 MODRM_CHECK;
13048 codep++;
13049}
13050
252b5132 13051static void
26ca5450 13052dofloat (int sizeflag)
252b5132 13053{
2da11e11 13054 const struct dis386 *dp;
252b5132
RH
13055 unsigned char floatop;
13056
13057 floatop = codep[-1];
13058
7967e09e 13059 if (modrm.mod != 3)
252b5132 13060 {
7967e09e 13061 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13062
13063 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13064 obufp = op_out[0];
6e50d963 13065 op_ad = 2;
1d9f512f 13066 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13067 return;
13068 }
6608db57 13069 /* Skip mod/rm byte. */
4bba6815 13070 MODRM_CHECK;
252b5132
RH
13071 codep++;
13072
7967e09e 13073 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13074 if (dp->name == NULL)
13075 {
7967e09e 13076 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13077
6608db57 13078 /* Instruction fnstsw is only one with strange arg. */
252b5132 13079 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13080 strcpy (op_out[0], names16[0]);
252b5132
RH
13081 }
13082 else
13083 {
13084 putop (dp->name, sizeflag);
13085
ce518a5f 13086 obufp = op_out[0];
6e50d963 13087 op_ad = 2;
ce518a5f
L
13088 if (dp->op[0].rtn)
13089 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13090
ce518a5f 13091 obufp = op_out[1];
6e50d963 13092 op_ad = 1;
ce518a5f
L
13093 if (dp->op[1].rtn)
13094 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13095 }
13096}
13097
252b5132 13098static void
26ca5450 13099OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13100{
422673a9 13101 oappend ("%st" + intel_syntax);
252b5132
RH
13102}
13103
252b5132 13104static void
26ca5450 13105OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13106{
7967e09e 13107 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
d708bcba 13108 oappend (scratchbuf + intel_syntax);
252b5132
RH
13109}
13110
6608db57 13111/* Capital letters in template are macros. */
6439fc28 13112static int
d3ce72d0 13113putop (const char *in_template, int sizeflag)
252b5132 13114{
2da11e11 13115 const char *p;
9306ca4a 13116 int alt = 0;
9d141669 13117 int cond = 1;
98b528ac
L
13118 unsigned int l = 0, len = 1;
13119 char last[4];
13120
13121#define SAVE_LAST(c) \
13122 if (l < len && l < sizeof (last)) \
13123 last[l++] = c; \
13124 else \
13125 abort ();
252b5132 13126
d3ce72d0 13127 for (p = in_template; *p; p++)
252b5132
RH
13128 {
13129 switch (*p)
13130 {
13131 default:
13132 *obufp++ = *p;
13133 break;
98b528ac
L
13134 case '%':
13135 len++;
13136 break;
9d141669
L
13137 case '!':
13138 cond = 0;
13139 break;
6439fc28
AM
13140 case '{':
13141 alt = 0;
13142 if (intel_syntax)
6439fc28
AM
13143 {
13144 while (*++p != '|')
7c52e0e8
L
13145 if (*p == '}' || *p == '\0')
13146 abort ();
6439fc28 13147 }
9306ca4a
JB
13148 /* Fall through. */
13149 case 'I':
13150 alt = 1;
13151 continue;
6439fc28
AM
13152 case '|':
13153 while (*++p != '}')
13154 {
13155 if (*p == '\0')
13156 abort ();
13157 }
13158 break;
13159 case '}':
13160 break;
252b5132 13161 case 'A':
db6eb5be
AM
13162 if (intel_syntax)
13163 break;
7967e09e 13164 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13165 *obufp++ = 'b';
13166 break;
13167 case 'B':
4b06377f
L
13168 if (l == 0 && len == 1)
13169 {
13170case_B:
13171 if (intel_syntax)
13172 break;
13173 if (sizeflag & SUFFIX_ALWAYS)
13174 *obufp++ = 'b';
13175 }
13176 else
13177 {
13178 if (l != 1
13179 || len != 2
13180 || last[0] != 'L')
13181 {
13182 SAVE_LAST (*p);
13183 break;
13184 }
13185
13186 if (address_mode == mode_64bit
13187 && !(prefixes & PREFIX_ADDR))
13188 {
13189 *obufp++ = 'a';
13190 *obufp++ = 'b';
13191 *obufp++ = 's';
13192 }
13193
13194 goto case_B;
13195 }
252b5132 13196 break;
9306ca4a
JB
13197 case 'C':
13198 if (intel_syntax && !alt)
13199 break;
13200 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13201 {
13202 if (sizeflag & DFLAG)
13203 *obufp++ = intel_syntax ? 'd' : 'l';
13204 else
13205 *obufp++ = intel_syntax ? 'w' : 's';
13206 used_prefixes |= (prefixes & PREFIX_DATA);
13207 }
13208 break;
ed7841b3
JB
13209 case 'D':
13210 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13211 break;
161a04f6 13212 USED_REX (REX_W);
7967e09e 13213 if (modrm.mod == 3)
ed7841b3 13214 {
161a04f6 13215 if (rex & REX_W)
ed7841b3 13216 *obufp++ = 'q';
ed7841b3 13217 else
f16cd0d5
L
13218 {
13219 if (sizeflag & DFLAG)
13220 *obufp++ = intel_syntax ? 'd' : 'l';
13221 else
13222 *obufp++ = 'w';
13223 used_prefixes |= (prefixes & PREFIX_DATA);
13224 }
ed7841b3
JB
13225 }
13226 else
13227 *obufp++ = 'w';
13228 break;
252b5132 13229 case 'E': /* For jcxz/jecxz */
cb712a9e 13230 if (address_mode == mode_64bit)
c1a64871
JH
13231 {
13232 if (sizeflag & AFLAG)
13233 *obufp++ = 'r';
13234 else
13235 *obufp++ = 'e';
13236 }
13237 else
13238 if (sizeflag & AFLAG)
13239 *obufp++ = 'e';
3ffd33cf
AM
13240 used_prefixes |= (prefixes & PREFIX_ADDR);
13241 break;
13242 case 'F':
db6eb5be
AM
13243 if (intel_syntax)
13244 break;
e396998b 13245 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13246 {
13247 if (sizeflag & AFLAG)
cb712a9e 13248 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13249 else
cb712a9e 13250 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13251 used_prefixes |= (prefixes & PREFIX_ADDR);
13252 }
252b5132 13253 break;
52fd6d94
JB
13254 case 'G':
13255 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13256 break;
161a04f6 13257 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13258 *obufp++ = 'l';
13259 else
13260 *obufp++ = 'w';
161a04f6 13261 if (!(rex & REX_W))
52fd6d94
JB
13262 used_prefixes |= (prefixes & PREFIX_DATA);
13263 break;
5dd0794d 13264 case 'H':
db6eb5be
AM
13265 if (intel_syntax)
13266 break;
5dd0794d
AM
13267 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13268 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13269 {
13270 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13271 *obufp++ = ',';
13272 *obufp++ = 'p';
13273 if (prefixes & PREFIX_DS)
13274 *obufp++ = 't';
13275 else
13276 *obufp++ = 'n';
13277 }
13278 break;
9306ca4a
JB
13279 case 'J':
13280 if (intel_syntax)
13281 break;
13282 *obufp++ = 'l';
13283 break;
42903f7f
L
13284 case 'K':
13285 USED_REX (REX_W);
13286 if (rex & REX_W)
13287 *obufp++ = 'q';
13288 else
13289 *obufp++ = 'd';
13290 break;
6dd5059a
L
13291 case 'Z':
13292 if (intel_syntax)
13293 break;
13294 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13295 {
13296 *obufp++ = 'q';
13297 break;
13298 }
13299 /* Fall through. */
98b528ac 13300 goto case_L;
252b5132 13301 case 'L':
98b528ac
L
13302 if (l != 0 || len != 1)
13303 {
13304 SAVE_LAST (*p);
13305 break;
13306 }
13307case_L:
db6eb5be
AM
13308 if (intel_syntax)
13309 break;
252b5132
RH
13310 if (sizeflag & SUFFIX_ALWAYS)
13311 *obufp++ = 'l';
252b5132 13312 break;
9d141669
L
13313 case 'M':
13314 if (intel_mnemonic != cond)
13315 *obufp++ = 'r';
13316 break;
252b5132
RH
13317 case 'N':
13318 if ((prefixes & PREFIX_FWAIT) == 0)
13319 *obufp++ = 'n';
7d421014
ILT
13320 else
13321 used_prefixes |= PREFIX_FWAIT;
252b5132 13322 break;
52b15da3 13323 case 'O':
161a04f6
L
13324 USED_REX (REX_W);
13325 if (rex & REX_W)
6439fc28 13326 *obufp++ = 'o';
a35ca55a
JB
13327 else if (intel_syntax && (sizeflag & DFLAG))
13328 *obufp++ = 'q';
52b15da3
JH
13329 else
13330 *obufp++ = 'd';
161a04f6 13331 if (!(rex & REX_W))
a35ca55a 13332 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13333 break;
6439fc28 13334 case 'T':
d9e3625e
L
13335 if (!intel_syntax
13336 && address_mode == mode_64bit
7bb15c6f 13337 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13338 {
13339 *obufp++ = 'q';
13340 break;
13341 }
6608db57 13342 /* Fall through. */
252b5132 13343 case 'P':
db6eb5be 13344 if (intel_syntax)
d9e3625e
L
13345 {
13346 if ((rex & REX_W) == 0
13347 && (prefixes & PREFIX_DATA))
13348 {
13349 if ((sizeflag & DFLAG) == 0)
13350 *obufp++ = 'w';
13351 used_prefixes |= (prefixes & PREFIX_DATA);
13352 }
13353 break;
13354 }
252b5132 13355 if ((prefixes & PREFIX_DATA)
161a04f6 13356 || (rex & REX_W)
e396998b 13357 || (sizeflag & SUFFIX_ALWAYS))
252b5132 13358 {
161a04f6
L
13359 USED_REX (REX_W);
13360 if (rex & REX_W)
52b15da3 13361 *obufp++ = 'q';
c2419411 13362 else
52b15da3
JH
13363 {
13364 if (sizeflag & DFLAG)
13365 *obufp++ = 'l';
13366 else
13367 *obufp++ = 'w';
f16cd0d5 13368 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13369 }
252b5132
RH
13370 }
13371 break;
6439fc28 13372 case 'U':
db6eb5be
AM
13373 if (intel_syntax)
13374 break;
7bb15c6f 13375 if (address_mode == mode_64bit
6c067bbb 13376 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13377 {
7967e09e 13378 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13379 *obufp++ = 'q';
6439fc28
AM
13380 break;
13381 }
6608db57 13382 /* Fall through. */
98b528ac 13383 goto case_Q;
252b5132 13384 case 'Q':
98b528ac 13385 if (l == 0 && len == 1)
252b5132 13386 {
98b528ac
L
13387case_Q:
13388 if (intel_syntax && !alt)
13389 break;
13390 USED_REX (REX_W);
13391 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13392 {
98b528ac
L
13393 if (rex & REX_W)
13394 *obufp++ = 'q';
52b15da3 13395 else
98b528ac
L
13396 {
13397 if (sizeflag & DFLAG)
13398 *obufp++ = intel_syntax ? 'd' : 'l';
13399 else
13400 *obufp++ = 'w';
f16cd0d5 13401 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13402 }
52b15da3 13403 }
98b528ac
L
13404 }
13405 else
13406 {
13407 if (l != 1 || len != 2 || last[0] != 'L')
13408 {
13409 SAVE_LAST (*p);
13410 break;
13411 }
13412 if (intel_syntax
13413 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13414 break;
13415 if ((rex & REX_W))
13416 {
13417 USED_REX (REX_W);
13418 *obufp++ = 'q';
13419 }
13420 else
13421 *obufp++ = 'l';
252b5132
RH
13422 }
13423 break;
13424 case 'R':
161a04f6
L
13425 USED_REX (REX_W);
13426 if (rex & REX_W)
a35ca55a
JB
13427 *obufp++ = 'q';
13428 else if (sizeflag & DFLAG)
c608c12e 13429 {
a35ca55a 13430 if (intel_syntax)
c608c12e 13431 *obufp++ = 'd';
c608c12e 13432 else
a35ca55a 13433 *obufp++ = 'l';
c608c12e 13434 }
252b5132 13435 else
a35ca55a
JB
13436 *obufp++ = 'w';
13437 if (intel_syntax && !p[1]
161a04f6 13438 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13439 *obufp++ = 'e';
161a04f6 13440 if (!(rex & REX_W))
52b15da3 13441 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13442 break;
1a114b12 13443 case 'V':
4b06377f 13444 if (l == 0 && len == 1)
1a114b12 13445 {
4b06377f
L
13446 if (intel_syntax)
13447 break;
7bb15c6f 13448 if (address_mode == mode_64bit
6c067bbb 13449 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13450 {
13451 if (sizeflag & SUFFIX_ALWAYS)
13452 *obufp++ = 'q';
13453 break;
13454 }
13455 }
13456 else
13457 {
13458 if (l != 1
13459 || len != 2
13460 || last[0] != 'L')
13461 {
13462 SAVE_LAST (*p);
13463 break;
13464 }
13465
13466 if (rex & REX_W)
13467 {
13468 *obufp++ = 'a';
13469 *obufp++ = 'b';
13470 *obufp++ = 's';
13471 }
1a114b12
JB
13472 }
13473 /* Fall through. */
4b06377f 13474 goto case_S;
252b5132 13475 case 'S':
4b06377f 13476 if (l == 0 && len == 1)
252b5132 13477 {
4b06377f
L
13478case_S:
13479 if (intel_syntax)
13480 break;
13481 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13482 {
4b06377f
L
13483 if (rex & REX_W)
13484 *obufp++ = 'q';
52b15da3 13485 else
4b06377f
L
13486 {
13487 if (sizeflag & DFLAG)
13488 *obufp++ = 'l';
13489 else
13490 *obufp++ = 'w';
13491 used_prefixes |= (prefixes & PREFIX_DATA);
13492 }
13493 }
13494 }
13495 else
13496 {
13497 if (l != 1
13498 || len != 2
13499 || last[0] != 'L')
13500 {
13501 SAVE_LAST (*p);
13502 break;
52b15da3 13503 }
4b06377f
L
13504
13505 if (address_mode == mode_64bit
13506 && !(prefixes & PREFIX_ADDR))
13507 {
13508 *obufp++ = 'a';
13509 *obufp++ = 'b';
13510 *obufp++ = 's';
13511 }
13512
13513 goto case_S;
252b5132 13514 }
252b5132 13515 break;
041bd2e0 13516 case 'X':
c0f3af97
L
13517 if (l != 0 || len != 1)
13518 {
13519 SAVE_LAST (*p);
13520 break;
13521 }
13522 if (need_vex && vex.prefix)
13523 {
13524 if (vex.prefix == DATA_PREFIX_OPCODE)
13525 *obufp++ = 'd';
13526 else
13527 *obufp++ = 's';
13528 }
041bd2e0 13529 else
f16cd0d5
L
13530 {
13531 if (prefixes & PREFIX_DATA)
13532 *obufp++ = 'd';
13533 else
13534 *obufp++ = 's';
13535 used_prefixes |= (prefixes & PREFIX_DATA);
13536 }
041bd2e0 13537 break;
76f227a5 13538 case 'Y':
c0f3af97 13539 if (l == 0 && len == 1)
76f227a5 13540 {
c0f3af97
L
13541 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13542 break;
13543 if (rex & REX_W)
13544 {
13545 USED_REX (REX_W);
13546 *obufp++ = 'q';
13547 }
13548 break;
13549 }
13550 else
13551 {
13552 if (l != 1 || len != 2 || last[0] != 'X')
13553 {
13554 SAVE_LAST (*p);
13555 break;
13556 }
13557 if (!need_vex)
13558 abort ();
13559 if (intel_syntax
13560 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13561 break;
13562 switch (vex.length)
13563 {
13564 case 128:
13565 *obufp++ = 'x';
13566 break;
13567 case 256:
13568 *obufp++ = 'y';
13569 break;
13570 default:
13571 abort ();
13572 }
76f227a5
JH
13573 }
13574 break;
252b5132 13575 case 'W':
0bfee649 13576 if (l == 0 && len == 1)
a35ca55a 13577 {
0bfee649
L
13578 /* operand size flag for cwtl, cbtw */
13579 USED_REX (REX_W);
13580 if (rex & REX_W)
13581 {
13582 if (intel_syntax)
13583 *obufp++ = 'd';
13584 else
13585 *obufp++ = 'l';
13586 }
13587 else if (sizeflag & DFLAG)
13588 *obufp++ = 'w';
a35ca55a 13589 else
0bfee649
L
13590 *obufp++ = 'b';
13591 if (!(rex & REX_W))
13592 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13593 }
252b5132 13594 else
0bfee649 13595 {
6c30d220
L
13596 if (l != 1
13597 || len != 2
13598 || (last[0] != 'X'
13599 && last[0] != 'L'))
0bfee649
L
13600 {
13601 SAVE_LAST (*p);
13602 break;
13603 }
13604 if (!need_vex)
13605 abort ();
6c30d220
L
13606 if (last[0] == 'X')
13607 *obufp++ = vex.w ? 'd': 's';
13608 else
13609 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13610 }
252b5132
RH
13611 break;
13612 }
9306ca4a 13613 alt = 0;
252b5132
RH
13614 }
13615 *obufp = 0;
ea397f5b 13616 mnemonicendp = obufp;
6439fc28 13617 return 0;
252b5132
RH
13618}
13619
13620static void
26ca5450 13621oappend (const char *s)
252b5132 13622{
ea397f5b 13623 obufp = stpcpy (obufp, s);
252b5132
RH
13624}
13625
13626static void
26ca5450 13627append_seg (void)
252b5132
RH
13628{
13629 if (prefixes & PREFIX_CS)
7d421014 13630 {
7d421014 13631 used_prefixes |= PREFIX_CS;
d708bcba 13632 oappend ("%cs:" + intel_syntax);
7d421014 13633 }
252b5132 13634 if (prefixes & PREFIX_DS)
7d421014 13635 {
7d421014 13636 used_prefixes |= PREFIX_DS;
d708bcba 13637 oappend ("%ds:" + intel_syntax);
7d421014 13638 }
252b5132 13639 if (prefixes & PREFIX_SS)
7d421014 13640 {
7d421014 13641 used_prefixes |= PREFIX_SS;
d708bcba 13642 oappend ("%ss:" + intel_syntax);
7d421014 13643 }
252b5132 13644 if (prefixes & PREFIX_ES)
7d421014 13645 {
7d421014 13646 used_prefixes |= PREFIX_ES;
d708bcba 13647 oappend ("%es:" + intel_syntax);
7d421014 13648 }
252b5132 13649 if (prefixes & PREFIX_FS)
7d421014 13650 {
7d421014 13651 used_prefixes |= PREFIX_FS;
d708bcba 13652 oappend ("%fs:" + intel_syntax);
7d421014 13653 }
252b5132 13654 if (prefixes & PREFIX_GS)
7d421014 13655 {
7d421014 13656 used_prefixes |= PREFIX_GS;
d708bcba 13657 oappend ("%gs:" + intel_syntax);
7d421014 13658 }
252b5132
RH
13659}
13660
13661static void
26ca5450 13662OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13663{
13664 if (!intel_syntax)
13665 oappend ("*");
13666 OP_E (bytemode, sizeflag);
13667}
13668
52b15da3 13669static void
26ca5450 13670print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13671{
cb712a9e 13672 if (address_mode == mode_64bit)
52b15da3
JH
13673 {
13674 if (hex)
13675 {
13676 char tmp[30];
13677 int i;
13678 buf[0] = '0';
13679 buf[1] = 'x';
13680 sprintf_vma (tmp, disp);
6608db57 13681 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13682 strcpy (buf + 2, tmp + i);
13683 }
13684 else
13685 {
13686 bfd_signed_vma v = disp;
13687 char tmp[30];
13688 int i;
13689 if (v < 0)
13690 {
13691 *(buf++) = '-';
13692 v = -disp;
6608db57 13693 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13694 if (v < 0)
13695 {
13696 strcpy (buf, "9223372036854775808");
13697 return;
13698 }
13699 }
13700 if (!v)
13701 {
13702 strcpy (buf, "0");
13703 return;
13704 }
13705
13706 i = 0;
13707 tmp[29] = 0;
13708 while (v)
13709 {
6608db57 13710 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13711 v /= 10;
13712 i++;
13713 }
13714 strcpy (buf, tmp + 29 - i);
13715 }
13716 }
13717 else
13718 {
13719 if (hex)
13720 sprintf (buf, "0x%x", (unsigned int) disp);
13721 else
13722 sprintf (buf, "%d", (int) disp);
13723 }
13724}
13725
5d669648
L
13726/* Put DISP in BUF as signed hex number. */
13727
13728static void
13729print_displacement (char *buf, bfd_vma disp)
13730{
13731 bfd_signed_vma val = disp;
13732 char tmp[30];
13733 int i, j = 0;
13734
13735 if (val < 0)
13736 {
13737 buf[j++] = '-';
13738 val = -disp;
13739
13740 /* Check for possible overflow. */
13741 if (val < 0)
13742 {
13743 switch (address_mode)
13744 {
13745 case mode_64bit:
13746 strcpy (buf + j, "0x8000000000000000");
13747 break;
13748 case mode_32bit:
13749 strcpy (buf + j, "0x80000000");
13750 break;
13751 case mode_16bit:
13752 strcpy (buf + j, "0x8000");
13753 break;
13754 }
13755 return;
13756 }
13757 }
13758
13759 buf[j++] = '0';
13760 buf[j++] = 'x';
13761
0af1713e 13762 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13763 for (i = 0; tmp[i] == '0'; i++)
13764 continue;
13765 if (tmp[i] == '\0')
13766 i--;
13767 strcpy (buf + j, tmp + i);
13768}
13769
3f31e633
JB
13770static void
13771intel_operand_size (int bytemode, int sizeflag)
13772{
43234a1e
L
13773 if (vex.evex
13774 && vex.b
13775 && (bytemode == x_mode
13776 || bytemode == evex_half_bcst_xmmq_mode))
13777 {
13778 if (vex.w)
13779 oappend ("QWORD PTR ");
13780 else
13781 oappend ("DWORD PTR ");
13782 return;
13783 }
3f31e633
JB
13784 switch (bytemode)
13785 {
13786 case b_mode:
b6169b20 13787 case b_swap_mode:
42903f7f 13788 case dqb_mode:
3f31e633
JB
13789 oappend ("BYTE PTR ");
13790 break;
13791 case w_mode:
13792 case dqw_mode:
13793 oappend ("WORD PTR ");
13794 break;
1a114b12 13795 case stack_v_mode:
7bb15c6f 13796 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13797 {
13798 oappend ("QWORD PTR ");
3f31e633
JB
13799 break;
13800 }
13801 /* FALLTHRU */
13802 case v_mode:
7e8b059b 13803 case v_bnd_mode:
b6169b20 13804 case v_swap_mode:
3f31e633 13805 case dq_mode:
161a04f6
L
13806 USED_REX (REX_W);
13807 if (rex & REX_W)
3f31e633 13808 oappend ("QWORD PTR ");
3f31e633 13809 else
f16cd0d5
L
13810 {
13811 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13812 oappend ("DWORD PTR ");
13813 else
13814 oappend ("WORD PTR ");
13815 used_prefixes |= (prefixes & PREFIX_DATA);
13816 }
3f31e633 13817 break;
52fd6d94 13818 case z_mode:
161a04f6 13819 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13820 *obufp++ = 'D';
13821 oappend ("WORD PTR ");
161a04f6 13822 if (!(rex & REX_W))
52fd6d94
JB
13823 used_prefixes |= (prefixes & PREFIX_DATA);
13824 break;
34b772a6
JB
13825 case a_mode:
13826 if (sizeflag & DFLAG)
13827 oappend ("QWORD PTR ");
13828 else
13829 oappend ("DWORD PTR ");
13830 used_prefixes |= (prefixes & PREFIX_DATA);
13831 break;
3f31e633 13832 case d_mode:
539f890d
L
13833 case d_scalar_mode:
13834 case d_scalar_swap_mode:
fa99fab2 13835 case d_swap_mode:
42903f7f 13836 case dqd_mode:
3f31e633
JB
13837 oappend ("DWORD PTR ");
13838 break;
13839 case q_mode:
539f890d
L
13840 case q_scalar_mode:
13841 case q_scalar_swap_mode:
b6169b20 13842 case q_swap_mode:
3f31e633
JB
13843 oappend ("QWORD PTR ");
13844 break;
13845 case m_mode:
cb712a9e 13846 if (address_mode == mode_64bit)
3f31e633
JB
13847 oappend ("QWORD PTR ");
13848 else
13849 oappend ("DWORD PTR ");
13850 break;
13851 case f_mode:
13852 if (sizeflag & DFLAG)
13853 oappend ("FWORD PTR ");
13854 else
13855 oappend ("DWORD PTR ");
13856 used_prefixes |= (prefixes & PREFIX_DATA);
13857 break;
13858 case t_mode:
13859 oappend ("TBYTE PTR ");
13860 break;
13861 case x_mode:
b6169b20 13862 case x_swap_mode:
43234a1e
L
13863 case evex_x_gscat_mode:
13864 case evex_x_nobcst_mode:
c0f3af97
L
13865 if (need_vex)
13866 {
13867 switch (vex.length)
13868 {
13869 case 128:
13870 oappend ("XMMWORD PTR ");
13871 break;
13872 case 256:
13873 oappend ("YMMWORD PTR ");
13874 break;
43234a1e
L
13875 case 512:
13876 oappend ("ZMMWORD PTR ");
13877 break;
c0f3af97
L
13878 default:
13879 abort ();
13880 }
13881 }
13882 else
13883 oappend ("XMMWORD PTR ");
13884 break;
13885 case xmm_mode:
3f31e633
JB
13886 oappend ("XMMWORD PTR ");
13887 break;
43234a1e
L
13888 case ymm_mode:
13889 oappend ("YMMWORD PTR ");
13890 break;
c0f3af97 13891 case xmmq_mode:
43234a1e 13892 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13893 if (!need_vex)
13894 abort ();
13895
13896 switch (vex.length)
13897 {
13898 case 128:
13899 oappend ("QWORD PTR ");
13900 break;
13901 case 256:
13902 oappend ("XMMWORD PTR ");
13903 break;
43234a1e
L
13904 case 512:
13905 oappend ("YMMWORD PTR ");
13906 break;
c0f3af97
L
13907 default:
13908 abort ();
13909 }
13910 break;
6c30d220
L
13911 case xmm_mb_mode:
13912 if (!need_vex)
13913 abort ();
13914
13915 switch (vex.length)
13916 {
13917 case 128:
13918 case 256:
43234a1e 13919 case 512:
6c30d220
L
13920 oappend ("BYTE PTR ");
13921 break;
13922 default:
13923 abort ();
13924 }
13925 break;
13926 case xmm_mw_mode:
13927 if (!need_vex)
13928 abort ();
13929
13930 switch (vex.length)
13931 {
13932 case 128:
13933 case 256:
43234a1e 13934 case 512:
6c30d220
L
13935 oappend ("WORD PTR ");
13936 break;
13937 default:
13938 abort ();
13939 }
13940 break;
13941 case xmm_md_mode:
13942 if (!need_vex)
13943 abort ();
13944
13945 switch (vex.length)
13946 {
13947 case 128:
13948 case 256:
43234a1e 13949 case 512:
6c30d220
L
13950 oappend ("DWORD PTR ");
13951 break;
13952 default:
13953 abort ();
13954 }
13955 break;
13956 case xmm_mq_mode:
13957 if (!need_vex)
13958 abort ();
13959
13960 switch (vex.length)
13961 {
13962 case 128:
13963 case 256:
43234a1e 13964 case 512:
6c30d220
L
13965 oappend ("QWORD PTR ");
13966 break;
13967 default:
13968 abort ();
13969 }
13970 break;
13971 case xmmdw_mode:
13972 if (!need_vex)
13973 abort ();
13974
13975 switch (vex.length)
13976 {
13977 case 128:
13978 oappend ("WORD PTR ");
13979 break;
13980 case 256:
13981 oappend ("DWORD PTR ");
13982 break;
43234a1e
L
13983 case 512:
13984 oappend ("QWORD PTR ");
13985 break;
6c30d220
L
13986 default:
13987 abort ();
13988 }
13989 break;
13990 case xmmqd_mode:
13991 if (!need_vex)
13992 abort ();
13993
13994 switch (vex.length)
13995 {
13996 case 128:
13997 oappend ("DWORD PTR ");
13998 break;
13999 case 256:
14000 oappend ("QWORD PTR ");
14001 break;
43234a1e
L
14002 case 512:
14003 oappend ("XMMWORD PTR ");
14004 break;
6c30d220
L
14005 default:
14006 abort ();
14007 }
14008 break;
c0f3af97
L
14009 case ymmq_mode:
14010 if (!need_vex)
14011 abort ();
14012
14013 switch (vex.length)
14014 {
14015 case 128:
14016 oappend ("QWORD PTR ");
14017 break;
14018 case 256:
14019 oappend ("YMMWORD PTR ");
14020 break;
43234a1e
L
14021 case 512:
14022 oappend ("ZMMWORD PTR ");
14023 break;
c0f3af97
L
14024 default:
14025 abort ();
14026 }
14027 break;
6c30d220
L
14028 case ymmxmm_mode:
14029 if (!need_vex)
14030 abort ();
14031
14032 switch (vex.length)
14033 {
14034 case 128:
14035 case 256:
14036 oappend ("XMMWORD PTR ");
14037 break;
14038 default:
14039 abort ();
14040 }
14041 break;
fb9c77c7
L
14042 case o_mode:
14043 oappend ("OWORD PTR ");
14044 break;
43234a1e 14045 case xmm_mdq_mode:
0bfee649 14046 case vex_w_dq_mode:
1c480963 14047 case vex_scalar_w_dq_mode:
0bfee649
L
14048 if (!need_vex)
14049 abort ();
14050
14051 if (vex.w)
14052 oappend ("QWORD PTR ");
14053 else
14054 oappend ("DWORD PTR ");
14055 break;
43234a1e
L
14056 case vex_vsib_d_w_dq_mode:
14057 case vex_vsib_q_w_dq_mode:
14058 if (!need_vex)
14059 abort ();
14060
14061 if (!vex.evex)
14062 {
14063 if (vex.w)
14064 oappend ("QWORD PTR ");
14065 else
14066 oappend ("DWORD PTR ");
14067 }
14068 else
14069 {
14070 if (vex.length != 512)
14071 abort ();
14072 oappend ("ZMMWORD PTR ");
14073 }
14074 break;
14075 case mask_mode:
14076 if (!need_vex)
14077 abort ();
14078 /* Currently the only instructions, which allows either mask or
14079 memory operand, are AVX512's KMOVW instructions. They need
14080 Word-sized operand. */
14081 if (vex.w || vex.length != 128)
14082 abort ();
14083 oappend ("WORD PTR ");
14084 break;
3f31e633
JB
14085 default:
14086 break;
14087 }
14088}
14089
252b5132 14090static void
c0f3af97 14091OP_E_register (int bytemode, int sizeflag)
252b5132 14092{
c0f3af97
L
14093 int reg = modrm.rm;
14094 const char **names;
252b5132 14095
c0f3af97
L
14096 USED_REX (REX_B);
14097 if ((rex & REX_B))
14098 reg += 8;
252b5132 14099
b6169b20
L
14100 if ((sizeflag & SUFFIX_ALWAYS)
14101 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
14102 swap_operand ();
14103
c0f3af97 14104 switch (bytemode)
252b5132 14105 {
c0f3af97 14106 case b_mode:
b6169b20 14107 case b_swap_mode:
c0f3af97
L
14108 USED_REX (0);
14109 if (rex)
14110 names = names8rex;
14111 else
14112 names = names8;
14113 break;
14114 case w_mode:
14115 names = names16;
14116 break;
14117 case d_mode:
14118 names = names32;
14119 break;
14120 case q_mode:
14121 names = names64;
14122 break;
14123 case m_mode:
14124 names = address_mode == mode_64bit ? names64 : names32;
14125 break;
7e8b059b
L
14126 case bnd_mode:
14127 names = names_bnd;
14128 break;
c0f3af97 14129 case stack_v_mode:
7bb15c6f 14130 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14131 {
c0f3af97 14132 names = names64;
252b5132 14133 break;
252b5132 14134 }
c0f3af97
L
14135 bytemode = v_mode;
14136 /* FALLTHRU */
14137 case v_mode:
7e8b059b 14138 case v_bnd_mode:
b6169b20 14139 case v_swap_mode:
c0f3af97
L
14140 case dq_mode:
14141 case dqb_mode:
14142 case dqd_mode:
14143 case dqw_mode:
14144 USED_REX (REX_W);
14145 if (rex & REX_W)
14146 names = names64;
c0f3af97 14147 else
f16cd0d5 14148 {
7bb15c6f 14149 if ((sizeflag & DFLAG)
f16cd0d5
L
14150 || (bytemode != v_mode
14151 && bytemode != v_swap_mode))
14152 names = names32;
14153 else
14154 names = names16;
14155 used_prefixes |= (prefixes & PREFIX_DATA);
14156 }
c0f3af97 14157 break;
43234a1e
L
14158 case mask_mode:
14159 names = names_mask;
14160 break;
c0f3af97
L
14161 case 0:
14162 return;
14163 default:
14164 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14165 return;
14166 }
c0f3af97
L
14167 oappend (names[reg]);
14168}
14169
14170static void
c1e679ec 14171OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14172{
14173 bfd_vma disp = 0;
14174 int add = (rex & REX_B) ? 8 : 0;
14175 int riprel = 0;
43234a1e
L
14176 int shift;
14177
14178 if (vex.evex)
14179 {
14180 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14181 if (vex.b
14182 && bytemode != x_mode
14183 && bytemode != evex_half_bcst_xmmq_mode)
14184 {
14185 BadOp ();
14186 return;
14187 }
14188 switch (bytemode)
14189 {
14190 case vex_vsib_d_w_dq_mode:
14191 case evex_x_gscat_mode:
14192 case xmm_mdq_mode:
14193 shift = vex.w ? 3 : 2;
14194 break;
14195 case vex_vsib_q_w_dq_mode:
14196 shift = 3;
14197 break;
14198 case x_mode:
14199 case evex_half_bcst_xmmq_mode:
14200 if (vex.b)
14201 {
14202 shift = vex.w ? 3 : 2;
14203 break;
14204 }
14205 /* Fall through if vex.b == 0. */
14206 case xmmqd_mode:
14207 case xmmdw_mode:
14208 case xmmq_mode:
14209 case ymmq_mode:
14210 case evex_x_nobcst_mode:
14211 case x_swap_mode:
14212 switch (vex.length)
14213 {
14214 case 128:
14215 shift = 4;
14216 break;
14217 case 256:
14218 shift = 5;
14219 break;
14220 case 512:
14221 shift = 6;
14222 break;
14223 default:
14224 abort ();
14225 }
14226 break;
14227 case ymm_mode:
14228 shift = 5;
14229 break;
14230 case xmm_mode:
14231 shift = 4;
14232 break;
14233 case xmm_mq_mode:
14234 case q_mode:
14235 case q_scalar_mode:
14236 case q_swap_mode:
14237 case q_scalar_swap_mode:
14238 shift = 3;
14239 break;
14240 case dqd_mode:
14241 case xmm_md_mode:
14242 case d_mode:
14243 case d_scalar_mode:
14244 case d_swap_mode:
14245 case d_scalar_swap_mode:
14246 shift = 2;
14247 break;
14248 case xmm_mw_mode:
14249 shift = 1;
14250 break;
14251 case xmm_mb_mode:
14252 shift = 0;
14253 break;
14254 default:
14255 abort ();
14256 }
14257 /* Make necessary corrections to shift for modes that need it.
14258 For these modes we currently have shift 4, 5 or 6 depending on
14259 vex.length (it corresponds to xmmword, ymmword or zmmword
14260 operand). We might want to make it 3, 4 or 5 (e.g. for
14261 xmmq_mode). In case of broadcast enabled the corrections
14262 aren't needed, as element size is always 32 or 64 bits. */
14263 if (bytemode == xmmq_mode
14264 || (bytemode == evex_half_bcst_xmmq_mode
14265 && !vex.b))
14266 shift -= 1;
14267 else if (bytemode == xmmqd_mode)
14268 shift -= 2;
14269 else if (bytemode == xmmdw_mode)
14270 shift -= 3;
14271 }
14272 else
14273 shift = 0;
252b5132 14274
c0f3af97 14275 USED_REX (REX_B);
3f31e633
JB
14276 if (intel_syntax)
14277 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14278 append_seg ();
14279
5d669648 14280 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14281 {
5d669648
L
14282 /* 32/64 bit address mode */
14283 int havedisp;
252b5132
RH
14284 int havesib;
14285 int havebase;
0f7da397 14286 int haveindex;
20afcfb7 14287 int needindex;
82c18208 14288 int base, rbase;
91d6fa6a 14289 int vindex = 0;
252b5132 14290 int scale = 0;
7e8b059b
L
14291 int addr32flag = !((sizeflag & AFLAG)
14292 || bytemode == v_bnd_mode
14293 || bytemode == bnd_mode);
6c30d220
L
14294 const char **indexes64 = names64;
14295 const char **indexes32 = names32;
252b5132
RH
14296
14297 havesib = 0;
14298 havebase = 1;
0f7da397 14299 haveindex = 0;
7967e09e 14300 base = modrm.rm;
252b5132
RH
14301
14302 if (base == 4)
14303 {
14304 havesib = 1;
dfc8cf43 14305 vindex = sib.index;
161a04f6
L
14306 USED_REX (REX_X);
14307 if (rex & REX_X)
91d6fa6a 14308 vindex += 8;
6c30d220
L
14309 switch (bytemode)
14310 {
14311 case vex_vsib_d_w_dq_mode:
14312 case vex_vsib_q_w_dq_mode:
14313 if (!need_vex)
14314 abort ();
43234a1e
L
14315 if (vex.evex)
14316 {
14317 if (!vex.v)
14318 vindex += 16;
14319 }
6c30d220
L
14320
14321 haveindex = 1;
14322 switch (vex.length)
14323 {
14324 case 128:
7bb15c6f 14325 indexes64 = indexes32 = names_xmm;
6c30d220
L
14326 break;
14327 case 256:
14328 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
7bb15c6f 14329 indexes64 = indexes32 = names_ymm;
6c30d220 14330 else
7bb15c6f 14331 indexes64 = indexes32 = names_xmm;
6c30d220 14332 break;
43234a1e
L
14333 case 512:
14334 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
14335 indexes64 = indexes32 = names_zmm;
14336 else
14337 indexes64 = indexes32 = names_ymm;
14338 break;
6c30d220
L
14339 default:
14340 abort ();
14341 }
14342 break;
14343 default:
14344 haveindex = vindex != 4;
14345 break;
14346 }
14347 scale = sib.scale;
14348 base = sib.base;
252b5132
RH
14349 codep++;
14350 }
82c18208 14351 rbase = base + add;
252b5132 14352
7967e09e 14353 switch (modrm.mod)
252b5132
RH
14354 {
14355 case 0:
82c18208 14356 if (base == 5)
252b5132
RH
14357 {
14358 havebase = 0;
cb712a9e 14359 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14360 riprel = 1;
14361 disp = get32s ();
252b5132
RH
14362 }
14363 break;
14364 case 1:
14365 FETCH_DATA (the_info, codep + 1);
14366 disp = *codep++;
14367 if ((disp & 0x80) != 0)
14368 disp -= 0x100;
43234a1e
L
14369 if (vex.evex && shift > 0)
14370 disp <<= shift;
252b5132
RH
14371 break;
14372 case 2:
52b15da3 14373 disp = get32s ();
252b5132
RH
14374 break;
14375 }
14376
20afcfb7
L
14377 /* In 32bit mode, we need index register to tell [offset] from
14378 [eiz*1 + offset]. */
14379 needindex = (havesib
14380 && !havebase
14381 && !haveindex
14382 && address_mode == mode_32bit);
14383 havedisp = (havebase
14384 || needindex
14385 || (havesib && (haveindex || scale != 0)));
5d669648 14386
252b5132 14387 if (!intel_syntax)
82c18208 14388 if (modrm.mod != 0 || base == 5)
db6eb5be 14389 {
5d669648
L
14390 if (havedisp || riprel)
14391 print_displacement (scratchbuf, disp);
14392 else
14393 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14394 oappend (scratchbuf);
52b15da3
JH
14395 if (riprel)
14396 {
14397 set_op (disp, 1);
87767711 14398 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14399 }
db6eb5be 14400 }
2da11e11 14401
7e8b059b
L
14402 if ((havebase || haveindex || riprel)
14403 && (bytemode != v_bnd_mode)
14404 && (bytemode != bnd_mode))
87767711
JB
14405 used_prefixes |= PREFIX_ADDR;
14406
5d669648 14407 if (havedisp || (intel_syntax && riprel))
252b5132 14408 {
252b5132 14409 *obufp++ = open_char;
52b15da3 14410 if (intel_syntax && riprel)
185b1163
L
14411 {
14412 set_op (disp, 1);
87767711 14413 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 14414 }
db6eb5be 14415 *obufp = '\0';
252b5132 14416 if (havebase)
7e8b059b 14417 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14418 ? names64[rbase] : names32[rbase]);
252b5132
RH
14419 if (havesib)
14420 {
db51cc60
L
14421 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14422 print index to tell base + index from base. */
14423 if (scale != 0
20afcfb7 14424 || needindex
db51cc60
L
14425 || haveindex
14426 || (havebase && base != ESP_REG_NUM))
252b5132 14427 {
9306ca4a 14428 if (!intel_syntax || havebase)
db6eb5be 14429 {
9306ca4a
JB
14430 *obufp++ = separator_char;
14431 *obufp = '\0';
db6eb5be 14432 }
db51cc60 14433 if (haveindex)
7e8b059b 14434 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14435 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14436 else
7e8b059b 14437 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14438 ? index64 : index32);
14439
db6eb5be
AM
14440 *obufp++ = scale_char;
14441 *obufp = '\0';
14442 sprintf (scratchbuf, "%d", 1 << scale);
14443 oappend (scratchbuf);
14444 }
252b5132 14445 }
185b1163 14446 if (intel_syntax
82c18208 14447 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14448 {
db51cc60 14449 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14450 {
14451 *obufp++ = '+';
14452 *obufp = '\0';
14453 }
05203043 14454 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14455 {
14456 *obufp++ = '-';
14457 *obufp = '\0';
14458 disp = - (bfd_signed_vma) disp;
14459 }
14460
db51cc60
L
14461 if (havedisp)
14462 print_displacement (scratchbuf, disp);
14463 else
14464 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14465 oappend (scratchbuf);
14466 }
252b5132
RH
14467
14468 *obufp++ = close_char;
db6eb5be 14469 *obufp = '\0';
252b5132
RH
14470 }
14471 else if (intel_syntax)
db6eb5be 14472 {
82c18208 14473 if (modrm.mod != 0 || base == 5)
db6eb5be 14474 {
252b5132
RH
14475 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14476 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14477 ;
14478 else
14479 {
d708bcba 14480 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14481 oappend (":");
14482 }
52b15da3 14483 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14484 oappend (scratchbuf);
14485 }
14486 }
252b5132
RH
14487 }
14488 else
f16cd0d5
L
14489 {
14490 /* 16 bit address mode */
14491 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14492 switch (modrm.mod)
252b5132
RH
14493 {
14494 case 0:
7967e09e 14495 if (modrm.rm == 6)
252b5132
RH
14496 {
14497 disp = get16 ();
14498 if ((disp & 0x8000) != 0)
14499 disp -= 0x10000;
14500 }
14501 break;
14502 case 1:
14503 FETCH_DATA (the_info, codep + 1);
14504 disp = *codep++;
14505 if ((disp & 0x80) != 0)
14506 disp -= 0x100;
14507 break;
14508 case 2:
14509 disp = get16 ();
14510 if ((disp & 0x8000) != 0)
14511 disp -= 0x10000;
14512 break;
14513 }
14514
14515 if (!intel_syntax)
7967e09e 14516 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14517 {
5d669648 14518 print_displacement (scratchbuf, disp);
db6eb5be
AM
14519 oappend (scratchbuf);
14520 }
252b5132 14521
7967e09e 14522 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14523 {
14524 *obufp++ = open_char;
db6eb5be 14525 *obufp = '\0';
7967e09e 14526 oappend (index16[modrm.rm]);
5d669648
L
14527 if (intel_syntax
14528 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14529 {
5d669648 14530 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14531 {
14532 *obufp++ = '+';
14533 *obufp = '\0';
14534 }
7967e09e 14535 else if (modrm.mod != 1)
3d456fa1
JB
14536 {
14537 *obufp++ = '-';
14538 *obufp = '\0';
14539 disp = - (bfd_signed_vma) disp;
14540 }
14541
5d669648 14542 print_displacement (scratchbuf, disp);
3d456fa1
JB
14543 oappend (scratchbuf);
14544 }
14545
db6eb5be
AM
14546 *obufp++ = close_char;
14547 *obufp = '\0';
252b5132 14548 }
3d456fa1
JB
14549 else if (intel_syntax)
14550 {
14551 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14552 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14553 ;
14554 else
14555 {
14556 oappend (names_seg[ds_reg - es_reg]);
14557 oappend (":");
14558 }
14559 print_operand_value (scratchbuf, 1, disp & 0xffff);
14560 oappend (scratchbuf);
14561 }
252b5132 14562 }
43234a1e
L
14563 if (vex.evex && vex.b
14564 && (bytemode == x_mode
14565 || bytemode == evex_half_bcst_xmmq_mode))
14566 {
14567 if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
14568 oappend ("{1to8}");
14569 else
14570 oappend ("{1to16}");
14571 }
252b5132
RH
14572}
14573
c0f3af97 14574static void
8b3f93e7 14575OP_E (int bytemode, int sizeflag)
c0f3af97
L
14576{
14577 /* Skip mod/rm byte. */
14578 MODRM_CHECK;
14579 codep++;
14580
14581 if (modrm.mod == 3)
14582 OP_E_register (bytemode, sizeflag);
14583 else
c1e679ec 14584 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14585}
14586
252b5132 14587static void
26ca5450 14588OP_G (int bytemode, int sizeflag)
252b5132 14589{
52b15da3 14590 int add = 0;
161a04f6
L
14591 USED_REX (REX_R);
14592 if (rex & REX_R)
52b15da3 14593 add += 8;
252b5132
RH
14594 switch (bytemode)
14595 {
14596 case b_mode:
52b15da3
JH
14597 USED_REX (0);
14598 if (rex)
7967e09e 14599 oappend (names8rex[modrm.reg + add]);
52b15da3 14600 else
7967e09e 14601 oappend (names8[modrm.reg + add]);
252b5132
RH
14602 break;
14603 case w_mode:
7967e09e 14604 oappend (names16[modrm.reg + add]);
252b5132
RH
14605 break;
14606 case d_mode:
7967e09e 14607 oappend (names32[modrm.reg + add]);
52b15da3
JH
14608 break;
14609 case q_mode:
7967e09e 14610 oappend (names64[modrm.reg + add]);
252b5132 14611 break;
7e8b059b
L
14612 case bnd_mode:
14613 oappend (names_bnd[modrm.reg]);
14614 break;
252b5132 14615 case v_mode:
9306ca4a 14616 case dq_mode:
42903f7f
L
14617 case dqb_mode:
14618 case dqd_mode:
9306ca4a 14619 case dqw_mode:
161a04f6
L
14620 USED_REX (REX_W);
14621 if (rex & REX_W)
7967e09e 14622 oappend (names64[modrm.reg + add]);
252b5132 14623 else
f16cd0d5
L
14624 {
14625 if ((sizeflag & DFLAG) || bytemode != v_mode)
14626 oappend (names32[modrm.reg + add]);
14627 else
14628 oappend (names16[modrm.reg + add]);
14629 used_prefixes |= (prefixes & PREFIX_DATA);
14630 }
252b5132 14631 break;
90700ea2 14632 case m_mode:
cb712a9e 14633 if (address_mode == mode_64bit)
7967e09e 14634 oappend (names64[modrm.reg + add]);
90700ea2 14635 else
7967e09e 14636 oappend (names32[modrm.reg + add]);
90700ea2 14637 break;
43234a1e
L
14638 case mask_mode:
14639 oappend (names_mask[modrm.reg + add]);
14640 break;
252b5132
RH
14641 default:
14642 oappend (INTERNAL_DISASSEMBLER_ERROR);
14643 break;
14644 }
14645}
14646
52b15da3 14647static bfd_vma
26ca5450 14648get64 (void)
52b15da3 14649{
5dd0794d 14650 bfd_vma x;
52b15da3 14651#ifdef BFD64
5dd0794d
AM
14652 unsigned int a;
14653 unsigned int b;
14654
52b15da3
JH
14655 FETCH_DATA (the_info, codep + 8);
14656 a = *codep++ & 0xff;
14657 a |= (*codep++ & 0xff) << 8;
14658 a |= (*codep++ & 0xff) << 16;
14659 a |= (*codep++ & 0xff) << 24;
5dd0794d 14660 b = *codep++ & 0xff;
52b15da3
JH
14661 b |= (*codep++ & 0xff) << 8;
14662 b |= (*codep++ & 0xff) << 16;
14663 b |= (*codep++ & 0xff) << 24;
14664 x = a + ((bfd_vma) b << 32);
14665#else
6608db57 14666 abort ();
5dd0794d 14667 x = 0;
52b15da3
JH
14668#endif
14669 return x;
14670}
14671
14672static bfd_signed_vma
26ca5450 14673get32 (void)
252b5132 14674{
52b15da3 14675 bfd_signed_vma x = 0;
252b5132
RH
14676
14677 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14678 x = *codep++ & (bfd_signed_vma) 0xff;
14679 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14680 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14681 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14682 return x;
14683}
14684
14685static bfd_signed_vma
26ca5450 14686get32s (void)
52b15da3
JH
14687{
14688 bfd_signed_vma x = 0;
14689
14690 FETCH_DATA (the_info, codep + 4);
14691 x = *codep++ & (bfd_signed_vma) 0xff;
14692 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14693 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14694 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14695
14696 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14697
252b5132
RH
14698 return x;
14699}
14700
14701static int
26ca5450 14702get16 (void)
252b5132
RH
14703{
14704 int x = 0;
14705
14706 FETCH_DATA (the_info, codep + 2);
14707 x = *codep++ & 0xff;
14708 x |= (*codep++ & 0xff) << 8;
14709 return x;
14710}
14711
14712static void
26ca5450 14713set_op (bfd_vma op, int riprel)
252b5132
RH
14714{
14715 op_index[op_ad] = op_ad;
cb712a9e 14716 if (address_mode == mode_64bit)
7081ff04
AJ
14717 {
14718 op_address[op_ad] = op;
14719 op_riprel[op_ad] = riprel;
14720 }
14721 else
14722 {
14723 /* Mask to get a 32-bit address. */
14724 op_address[op_ad] = op & 0xffffffff;
14725 op_riprel[op_ad] = riprel & 0xffffffff;
14726 }
252b5132
RH
14727}
14728
14729static void
26ca5450 14730OP_REG (int code, int sizeflag)
252b5132 14731{
2da11e11 14732 const char *s;
9b60702d 14733 int add;
de882298
RM
14734
14735 switch (code)
14736 {
14737 case es_reg: case ss_reg: case cs_reg:
14738 case ds_reg: case fs_reg: case gs_reg:
14739 oappend (names_seg[code - es_reg]);
14740 return;
14741 }
14742
161a04f6
L
14743 USED_REX (REX_B);
14744 if (rex & REX_B)
52b15da3 14745 add = 8;
9b60702d
L
14746 else
14747 add = 0;
52b15da3
JH
14748
14749 switch (code)
14750 {
52b15da3
JH
14751 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14752 case sp_reg: case bp_reg: case si_reg: case di_reg:
14753 s = names16[code - ax_reg + add];
14754 break;
52b15da3
JH
14755 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14756 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14757 USED_REX (0);
14758 if (rex)
14759 s = names8rex[code - al_reg + add];
14760 else
14761 s = names8[code - al_reg];
14762 break;
6439fc28
AM
14763 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14764 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14765 if (address_mode == mode_64bit
6c067bbb 14766 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14767 {
14768 s = names64[code - rAX_reg + add];
14769 break;
14770 }
14771 code += eAX_reg - rAX_reg;
6608db57 14772 /* Fall through. */
52b15da3
JH
14773 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14774 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14775 USED_REX (REX_W);
14776 if (rex & REX_W)
52b15da3 14777 s = names64[code - eAX_reg + add];
52b15da3 14778 else
f16cd0d5
L
14779 {
14780 if (sizeflag & DFLAG)
14781 s = names32[code - eAX_reg + add];
14782 else
14783 s = names16[code - eAX_reg + add];
14784 used_prefixes |= (prefixes & PREFIX_DATA);
14785 }
52b15da3 14786 break;
52b15da3
JH
14787 default:
14788 s = INTERNAL_DISASSEMBLER_ERROR;
14789 break;
14790 }
14791 oappend (s);
14792}
14793
14794static void
26ca5450 14795OP_IMREG (int code, int sizeflag)
52b15da3
JH
14796{
14797 const char *s;
252b5132
RH
14798
14799 switch (code)
14800 {
14801 case indir_dx_reg:
d708bcba 14802 if (intel_syntax)
52fd6d94 14803 s = "dx";
d708bcba 14804 else
db6eb5be 14805 s = "(%dx)";
252b5132
RH
14806 break;
14807 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14808 case sp_reg: case bp_reg: case si_reg: case di_reg:
14809 s = names16[code - ax_reg];
14810 break;
14811 case es_reg: case ss_reg: case cs_reg:
14812 case ds_reg: case fs_reg: case gs_reg:
14813 s = names_seg[code - es_reg];
14814 break;
14815 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14816 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14817 USED_REX (0);
14818 if (rex)
14819 s = names8rex[code - al_reg];
14820 else
14821 s = names8[code - al_reg];
252b5132
RH
14822 break;
14823 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14824 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14825 USED_REX (REX_W);
14826 if (rex & REX_W)
52b15da3 14827 s = names64[code - eAX_reg];
252b5132 14828 else
f16cd0d5
L
14829 {
14830 if (sizeflag & DFLAG)
14831 s = names32[code - eAX_reg];
14832 else
14833 s = names16[code - eAX_reg];
14834 used_prefixes |= (prefixes & PREFIX_DATA);
14835 }
252b5132 14836 break;
52fd6d94 14837 case z_mode_ax_reg:
161a04f6 14838 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14839 s = *names32;
14840 else
14841 s = *names16;
161a04f6 14842 if (!(rex & REX_W))
52fd6d94
JB
14843 used_prefixes |= (prefixes & PREFIX_DATA);
14844 break;
252b5132
RH
14845 default:
14846 s = INTERNAL_DISASSEMBLER_ERROR;
14847 break;
14848 }
14849 oappend (s);
14850}
14851
14852static void
26ca5450 14853OP_I (int bytemode, int sizeflag)
252b5132 14854{
52b15da3
JH
14855 bfd_signed_vma op;
14856 bfd_signed_vma mask = -1;
252b5132
RH
14857
14858 switch (bytemode)
14859 {
14860 case b_mode:
14861 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14862 op = *codep++;
14863 mask = 0xff;
14864 break;
14865 case q_mode:
cb712a9e 14866 if (address_mode == mode_64bit)
6439fc28
AM
14867 {
14868 op = get32s ();
14869 break;
14870 }
6608db57 14871 /* Fall through. */
252b5132 14872 case v_mode:
161a04f6
L
14873 USED_REX (REX_W);
14874 if (rex & REX_W)
52b15da3 14875 op = get32s ();
252b5132 14876 else
52b15da3 14877 {
f16cd0d5
L
14878 if (sizeflag & DFLAG)
14879 {
14880 op = get32 ();
14881 mask = 0xffffffff;
14882 }
14883 else
14884 {
14885 op = get16 ();
14886 mask = 0xfffff;
14887 }
14888 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14889 }
252b5132
RH
14890 break;
14891 case w_mode:
52b15da3 14892 mask = 0xfffff;
252b5132
RH
14893 op = get16 ();
14894 break;
9306ca4a
JB
14895 case const_1_mode:
14896 if (intel_syntax)
6c067bbb 14897 oappend ("1");
9306ca4a 14898 return;
252b5132
RH
14899 default:
14900 oappend (INTERNAL_DISASSEMBLER_ERROR);
14901 return;
14902 }
14903
52b15da3
JH
14904 op &= mask;
14905 scratchbuf[0] = '$';
d708bcba
AM
14906 print_operand_value (scratchbuf + 1, 1, op);
14907 oappend (scratchbuf + intel_syntax);
52b15da3
JH
14908 scratchbuf[0] = '\0';
14909}
14910
14911static void
26ca5450 14912OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14913{
14914 bfd_signed_vma op;
14915 bfd_signed_vma mask = -1;
14916
cb712a9e 14917 if (address_mode != mode_64bit)
6439fc28
AM
14918 {
14919 OP_I (bytemode, sizeflag);
14920 return;
14921 }
14922
52b15da3
JH
14923 switch (bytemode)
14924 {
14925 case b_mode:
14926 FETCH_DATA (the_info, codep + 1);
14927 op = *codep++;
14928 mask = 0xff;
14929 break;
14930 case v_mode:
161a04f6
L
14931 USED_REX (REX_W);
14932 if (rex & REX_W)
52b15da3 14933 op = get64 ();
52b15da3
JH
14934 else
14935 {
f16cd0d5
L
14936 if (sizeflag & DFLAG)
14937 {
14938 op = get32 ();
14939 mask = 0xffffffff;
14940 }
14941 else
14942 {
14943 op = get16 ();
14944 mask = 0xfffff;
14945 }
14946 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14947 }
52b15da3
JH
14948 break;
14949 case w_mode:
14950 mask = 0xfffff;
14951 op = get16 ();
14952 break;
14953 default:
14954 oappend (INTERNAL_DISASSEMBLER_ERROR);
14955 return;
14956 }
14957
14958 op &= mask;
14959 scratchbuf[0] = '$';
d708bcba
AM
14960 print_operand_value (scratchbuf + 1, 1, op);
14961 oappend (scratchbuf + intel_syntax);
252b5132
RH
14962 scratchbuf[0] = '\0';
14963}
14964
14965static void
26ca5450 14966OP_sI (int bytemode, int sizeflag)
252b5132 14967{
52b15da3 14968 bfd_signed_vma op;
252b5132
RH
14969
14970 switch (bytemode)
14971 {
14972 case b_mode:
e3949f17 14973 case b_T_mode:
252b5132
RH
14974 FETCH_DATA (the_info, codep + 1);
14975 op = *codep++;
14976 if ((op & 0x80) != 0)
14977 op -= 0x100;
e3949f17
L
14978 if (bytemode == b_T_mode)
14979 {
14980 if (address_mode != mode_64bit
7bb15c6f 14981 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14982 {
6c067bbb
RM
14983 /* The operand-size prefix is overridden by a REX prefix. */
14984 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14985 op &= 0xffffffff;
14986 else
14987 op &= 0xffff;
14988 }
14989 }
14990 else
14991 {
14992 if (!(rex & REX_W))
14993 {
14994 if (sizeflag & DFLAG)
14995 op &= 0xffffffff;
14996 else
14997 op &= 0xffff;
14998 }
14999 }
252b5132
RH
15000 break;
15001 case v_mode:
7bb15c6f
RM
15002 /* The operand-size prefix is overridden by a REX prefix. */
15003 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15004 op = get32s ();
252b5132 15005 else
d9e3625e 15006 op = get16 ();
252b5132
RH
15007 break;
15008 default:
15009 oappend (INTERNAL_DISASSEMBLER_ERROR);
15010 return;
15011 }
52b15da3
JH
15012
15013 scratchbuf[0] = '$';
15014 print_operand_value (scratchbuf + 1, 1, op);
d708bcba 15015 oappend (scratchbuf + intel_syntax);
252b5132
RH
15016}
15017
15018static void
26ca5450 15019OP_J (int bytemode, int sizeflag)
252b5132 15020{
52b15da3 15021 bfd_vma disp;
7081ff04 15022 bfd_vma mask = -1;
65ca155d 15023 bfd_vma segment = 0;
252b5132
RH
15024
15025 switch (bytemode)
15026 {
15027 case b_mode:
15028 FETCH_DATA (the_info, codep + 1);
15029 disp = *codep++;
15030 if ((disp & 0x80) != 0)
15031 disp -= 0x100;
15032 break;
15033 case v_mode:
f16cd0d5 15034 USED_REX (REX_W);
161a04f6 15035 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15036 disp = get32s ();
252b5132
RH
15037 else
15038 {
15039 disp = get16 ();
206717e8
L
15040 if ((disp & 0x8000) != 0)
15041 disp -= 0x10000;
65ca155d
L
15042 /* In 16bit mode, address is wrapped around at 64k within
15043 the same segment. Otherwise, a data16 prefix on a jump
15044 instruction means that the pc is masked to 16 bits after
15045 the displacement is added! */
15046 mask = 0xffff;
15047 if ((prefixes & PREFIX_DATA) == 0)
15048 segment = ((start_pc + codep - start_codep)
15049 & ~((bfd_vma) 0xffff));
252b5132 15050 }
f16cd0d5
L
15051 if (!(rex & REX_W))
15052 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15053 break;
15054 default:
15055 oappend (INTERNAL_DISASSEMBLER_ERROR);
15056 return;
15057 }
42d5f9c6 15058 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15059 set_op (disp, 0);
15060 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15061 oappend (scratchbuf);
15062}
15063
252b5132 15064static void
ed7841b3 15065OP_SEG (int bytemode, int sizeflag)
252b5132 15066{
ed7841b3 15067 if (bytemode == w_mode)
7967e09e 15068 oappend (names_seg[modrm.reg]);
ed7841b3 15069 else
7967e09e 15070 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15071}
15072
15073static void
26ca5450 15074OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15075{
15076 int seg, offset;
15077
c608c12e 15078 if (sizeflag & DFLAG)
252b5132 15079 {
c608c12e
AM
15080 offset = get32 ();
15081 seg = get16 ();
252b5132 15082 }
c608c12e
AM
15083 else
15084 {
15085 offset = get16 ();
15086 seg = get16 ();
15087 }
7d421014 15088 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15089 if (intel_syntax)
3f31e633 15090 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15091 else
15092 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15093 oappend (scratchbuf);
252b5132
RH
15094}
15095
252b5132 15096static void
3f31e633 15097OP_OFF (int bytemode, int sizeflag)
252b5132 15098{
52b15da3 15099 bfd_vma off;
252b5132 15100
3f31e633
JB
15101 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15102 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15103 append_seg ();
15104
cb712a9e 15105 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15106 off = get32 ();
15107 else
15108 off = get16 ();
15109
15110 if (intel_syntax)
15111 {
15112 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15113 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 15114 {
d708bcba 15115 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15116 oappend (":");
15117 }
15118 }
52b15da3
JH
15119 print_operand_value (scratchbuf, 1, off);
15120 oappend (scratchbuf);
15121}
6439fc28 15122
52b15da3 15123static void
3f31e633 15124OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15125{
15126 bfd_vma off;
15127
539e75ad
L
15128 if (address_mode != mode_64bit
15129 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15130 {
15131 OP_OFF (bytemode, sizeflag);
15132 return;
15133 }
15134
3f31e633
JB
15135 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15136 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15137 append_seg ();
15138
6608db57 15139 off = get64 ();
52b15da3
JH
15140
15141 if (intel_syntax)
15142 {
15143 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15144 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 15145 {
d708bcba 15146 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15147 oappend (":");
15148 }
15149 }
15150 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15151 oappend (scratchbuf);
15152}
15153
15154static void
26ca5450 15155ptr_reg (int code, int sizeflag)
252b5132 15156{
2da11e11 15157 const char *s;
d708bcba 15158
1d9f512f 15159 *obufp++ = open_char;
20f0a1fc 15160 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15161 if (address_mode == mode_64bit)
c1a64871
JH
15162 {
15163 if (!(sizeflag & AFLAG))
db6eb5be 15164 s = names32[code - eAX_reg];
c1a64871 15165 else
db6eb5be 15166 s = names64[code - eAX_reg];
c1a64871 15167 }
52b15da3 15168 else if (sizeflag & AFLAG)
252b5132
RH
15169 s = names32[code - eAX_reg];
15170 else
15171 s = names16[code - eAX_reg];
15172 oappend (s);
1d9f512f
AM
15173 *obufp++ = close_char;
15174 *obufp = 0;
252b5132
RH
15175}
15176
15177static void
26ca5450 15178OP_ESreg (int code, int sizeflag)
252b5132 15179{
9306ca4a 15180 if (intel_syntax)
52fd6d94
JB
15181 {
15182 switch (codep[-1])
15183 {
15184 case 0x6d: /* insw/insl */
15185 intel_operand_size (z_mode, sizeflag);
15186 break;
15187 case 0xa5: /* movsw/movsl/movsq */
15188 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15189 case 0xab: /* stosw/stosl */
15190 case 0xaf: /* scasw/scasl */
15191 intel_operand_size (v_mode, sizeflag);
15192 break;
15193 default:
15194 intel_operand_size (b_mode, sizeflag);
15195 }
15196 }
d708bcba 15197 oappend ("%es:" + intel_syntax);
252b5132
RH
15198 ptr_reg (code, sizeflag);
15199}
15200
15201static void
26ca5450 15202OP_DSreg (int code, int sizeflag)
252b5132 15203{
9306ca4a 15204 if (intel_syntax)
52fd6d94
JB
15205 {
15206 switch (codep[-1])
15207 {
15208 case 0x6f: /* outsw/outsl */
15209 intel_operand_size (z_mode, sizeflag);
15210 break;
15211 case 0xa5: /* movsw/movsl/movsq */
15212 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15213 case 0xad: /* lodsw/lodsl/lodsq */
15214 intel_operand_size (v_mode, sizeflag);
15215 break;
15216 default:
15217 intel_operand_size (b_mode, sizeflag);
15218 }
15219 }
252b5132
RH
15220 if ((prefixes
15221 & (PREFIX_CS
15222 | PREFIX_DS
15223 | PREFIX_SS
15224 | PREFIX_ES
15225 | PREFIX_FS
15226 | PREFIX_GS)) == 0)
15227 prefixes |= PREFIX_DS;
6608db57 15228 append_seg ();
252b5132
RH
15229 ptr_reg (code, sizeflag);
15230}
15231
252b5132 15232static void
26ca5450 15233OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15234{
9b60702d 15235 int add;
161a04f6 15236 if (rex & REX_R)
c4a530c5 15237 {
161a04f6 15238 USED_REX (REX_R);
c4a530c5
JB
15239 add = 8;
15240 }
cb712a9e 15241 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15242 {
f16cd0d5 15243 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15244 used_prefixes |= PREFIX_LOCK;
15245 add = 8;
15246 }
9b60702d
L
15247 else
15248 add = 0;
7967e09e 15249 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
d708bcba 15250 oappend (scratchbuf + intel_syntax);
252b5132
RH
15251}
15252
252b5132 15253static void
26ca5450 15254OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15255{
9b60702d 15256 int add;
161a04f6
L
15257 USED_REX (REX_R);
15258 if (rex & REX_R)
52b15da3 15259 add = 8;
9b60702d
L
15260 else
15261 add = 0;
d708bcba 15262 if (intel_syntax)
7967e09e 15263 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15264 else
7967e09e 15265 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15266 oappend (scratchbuf);
15267}
15268
252b5132 15269static void
26ca5450 15270OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15271{
7967e09e 15272 sprintf (scratchbuf, "%%tr%d", modrm.reg);
d708bcba 15273 oappend (scratchbuf + intel_syntax);
252b5132
RH
15274}
15275
15276static void
6f74c397 15277OP_R (int bytemode, int sizeflag)
252b5132 15278{
7967e09e 15279 if (modrm.mod == 3)
2da11e11
AM
15280 OP_E (bytemode, sizeflag);
15281 else
6608db57 15282 BadOp ();
252b5132
RH
15283}
15284
15285static void
26ca5450 15286OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15287{
b9733481
L
15288 int reg = modrm.reg;
15289 const char **names;
15290
041bd2e0
JH
15291 used_prefixes |= (prefixes & PREFIX_DATA);
15292 if (prefixes & PREFIX_DATA)
20f0a1fc 15293 {
b9733481 15294 names = names_xmm;
161a04f6
L
15295 USED_REX (REX_R);
15296 if (rex & REX_R)
b9733481 15297 reg += 8;
20f0a1fc 15298 }
041bd2e0 15299 else
b9733481
L
15300 names = names_mm;
15301 oappend (names[reg]);
252b5132
RH
15302}
15303
c608c12e 15304static void
c0f3af97 15305OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15306{
b9733481
L
15307 int reg = modrm.reg;
15308 const char **names;
15309
161a04f6
L
15310 USED_REX (REX_R);
15311 if (rex & REX_R)
b9733481 15312 reg += 8;
43234a1e
L
15313 if (vex.evex)
15314 {
15315 if (!vex.r)
15316 reg += 16;
15317 }
15318
539f890d
L
15319 if (need_vex
15320 && bytemode != xmm_mode
43234a1e
L
15321 && bytemode != xmmq_mode
15322 && bytemode != evex_half_bcst_xmmq_mode
15323 && bytemode != ymm_mode
539f890d 15324 && bytemode != scalar_mode)
c0f3af97
L
15325 {
15326 switch (vex.length)
15327 {
15328 case 128:
b9733481 15329 names = names_xmm;
c0f3af97
L
15330 break;
15331 case 256:
6c30d220
L
15332 if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
15333 names = names_ymm;
15334 else
15335 names = names_xmm;
c0f3af97 15336 break;
43234a1e
L
15337 case 512:
15338 names = names_zmm;
15339 break;
c0f3af97
L
15340 default:
15341 abort ();
15342 }
15343 }
43234a1e
L
15344 else if (bytemode == xmmq_mode
15345 || bytemode == evex_half_bcst_xmmq_mode)
15346 {
15347 switch (vex.length)
15348 {
15349 case 128:
15350 case 256:
15351 names = names_xmm;
15352 break;
15353 case 512:
15354 names = names_ymm;
15355 break;
15356 default:
15357 abort ();
15358 }
15359 }
15360 else if (bytemode == ymm_mode)
15361 names = names_ymm;
c0f3af97 15362 else
b9733481
L
15363 names = names_xmm;
15364 oappend (names[reg]);
c608c12e
AM
15365}
15366
252b5132 15367static void
26ca5450 15368OP_EM (int bytemode, int sizeflag)
252b5132 15369{
b9733481
L
15370 int reg;
15371 const char **names;
15372
7967e09e 15373 if (modrm.mod != 3)
252b5132 15374 {
b6169b20
L
15375 if (intel_syntax
15376 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15377 {
15378 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15379 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15380 }
252b5132
RH
15381 OP_E (bytemode, sizeflag);
15382 return;
15383 }
15384
b6169b20
L
15385 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15386 swap_operand ();
15387
6608db57 15388 /* Skip mod/rm byte. */
4bba6815 15389 MODRM_CHECK;
252b5132 15390 codep++;
041bd2e0 15391 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15392 reg = modrm.rm;
041bd2e0 15393 if (prefixes & PREFIX_DATA)
20f0a1fc 15394 {
b9733481 15395 names = names_xmm;
161a04f6
L
15396 USED_REX (REX_B);
15397 if (rex & REX_B)
b9733481 15398 reg += 8;
20f0a1fc 15399 }
041bd2e0 15400 else
b9733481
L
15401 names = names_mm;
15402 oappend (names[reg]);
252b5132
RH
15403}
15404
246c51aa
L
15405/* cvt* are the only instructions in sse2 which have
15406 both SSE and MMX operands and also have 0x66 prefix
15407 in their opcode. 0x66 was originally used to differentiate
15408 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15409 cvt* separately using OP_EMC and OP_MXC */
15410static void
15411OP_EMC (int bytemode, int sizeflag)
15412{
7967e09e 15413 if (modrm.mod != 3)
4d9567e0
MM
15414 {
15415 if (intel_syntax && bytemode == v_mode)
15416 {
15417 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15418 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15419 }
4d9567e0
MM
15420 OP_E (bytemode, sizeflag);
15421 return;
15422 }
246c51aa 15423
4d9567e0
MM
15424 /* Skip mod/rm byte. */
15425 MODRM_CHECK;
15426 codep++;
15427 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15428 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15429}
15430
15431static void
15432OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15433{
15434 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15435 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15436}
15437
c608c12e 15438static void
26ca5450 15439OP_EX (int bytemode, int sizeflag)
c608c12e 15440{
b9733481
L
15441 int reg;
15442 const char **names;
d6f574e0
L
15443
15444 /* Skip mod/rm byte. */
15445 MODRM_CHECK;
15446 codep++;
15447
7967e09e 15448 if (modrm.mod != 3)
c608c12e 15449 {
c1e679ec 15450 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15451 return;
15452 }
d6f574e0 15453
b9733481 15454 reg = modrm.rm;
161a04f6
L
15455 USED_REX (REX_B);
15456 if (rex & REX_B)
b9733481 15457 reg += 8;
43234a1e
L
15458 if (vex.evex)
15459 {
15460 USED_REX (REX_X);
15461 if ((rex & REX_X))
15462 reg += 16;
15463 }
c608c12e 15464
b6169b20 15465 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15466 && (bytemode == x_swap_mode
15467 || bytemode == d_swap_mode
7bb15c6f 15468 || bytemode == d_scalar_swap_mode
539f890d
L
15469 || bytemode == q_swap_mode
15470 || bytemode == q_scalar_swap_mode))
b6169b20
L
15471 swap_operand ();
15472
c0f3af97
L
15473 if (need_vex
15474 && bytemode != xmm_mode
6c30d220
L
15475 && bytemode != xmmdw_mode
15476 && bytemode != xmmqd_mode
15477 && bytemode != xmm_mb_mode
15478 && bytemode != xmm_mw_mode
15479 && bytemode != xmm_md_mode
15480 && bytemode != xmm_mq_mode
43234a1e 15481 && bytemode != xmm_mdq_mode
539f890d 15482 && bytemode != xmmq_mode
43234a1e
L
15483 && bytemode != evex_half_bcst_xmmq_mode
15484 && bytemode != ymm_mode
539f890d 15485 && bytemode != d_scalar_mode
7bb15c6f 15486 && bytemode != d_scalar_swap_mode
539f890d 15487 && bytemode != q_scalar_mode
1c480963
L
15488 && bytemode != q_scalar_swap_mode
15489 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15490 {
15491 switch (vex.length)
15492 {
15493 case 128:
b9733481 15494 names = names_xmm;
c0f3af97
L
15495 break;
15496 case 256:
b9733481 15497 names = names_ymm;
c0f3af97 15498 break;
43234a1e
L
15499 case 512:
15500 names = names_zmm;
15501 break;
c0f3af97
L
15502 default:
15503 abort ();
15504 }
15505 }
43234a1e
L
15506 else if (bytemode == xmmq_mode
15507 || bytemode == evex_half_bcst_xmmq_mode)
15508 {
15509 switch (vex.length)
15510 {
15511 case 128:
15512 case 256:
15513 names = names_xmm;
15514 break;
15515 case 512:
15516 names = names_ymm;
15517 break;
15518 default:
15519 abort ();
15520 }
15521 }
15522 else if (bytemode == ymm_mode)
15523 names = names_ymm;
c0f3af97 15524 else
b9733481
L
15525 names = names_xmm;
15526 oappend (names[reg]);
c608c12e
AM
15527}
15528
252b5132 15529static void
26ca5450 15530OP_MS (int bytemode, int sizeflag)
252b5132 15531{
7967e09e 15532 if (modrm.mod == 3)
2da11e11
AM
15533 OP_EM (bytemode, sizeflag);
15534 else
6608db57 15535 BadOp ();
252b5132
RH
15536}
15537
992aaec9 15538static void
26ca5450 15539OP_XS (int bytemode, int sizeflag)
992aaec9 15540{
7967e09e 15541 if (modrm.mod == 3)
992aaec9
AM
15542 OP_EX (bytemode, sizeflag);
15543 else
6608db57 15544 BadOp ();
992aaec9
AM
15545}
15546
cc0ec051
AM
15547static void
15548OP_M (int bytemode, int sizeflag)
15549{
7967e09e 15550 if (modrm.mod == 3)
75413a22
L
15551 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15552 BadOp ();
cc0ec051
AM
15553 else
15554 OP_E (bytemode, sizeflag);
15555}
15556
15557static void
15558OP_0f07 (int bytemode, int sizeflag)
15559{
7967e09e 15560 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15561 BadOp ();
15562 else
15563 OP_E (bytemode, sizeflag);
15564}
15565
46e883c5 15566/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15567 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15568
cc0ec051 15569static void
46e883c5 15570NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15571{
8b38ad71
L
15572 if ((prefixes & PREFIX_DATA) != 0
15573 || (rex != 0
15574 && rex != 0x48
15575 && address_mode == mode_64bit))
46e883c5
L
15576 OP_REG (bytemode, sizeflag);
15577 else
15578 strcpy (obuf, "nop");
15579}
15580
15581static void
15582NOP_Fixup2 (int bytemode, int sizeflag)
15583{
8b38ad71
L
15584 if ((prefixes & PREFIX_DATA) != 0
15585 || (rex != 0
15586 && rex != 0x48
15587 && address_mode == mode_64bit))
46e883c5 15588 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15589}
15590
84037f8c 15591static const char *const Suffix3DNow[] = {
252b5132
RH
15592/* 00 */ NULL, NULL, NULL, NULL,
15593/* 04 */ NULL, NULL, NULL, NULL,
15594/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15595/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15596/* 10 */ NULL, NULL, NULL, NULL,
15597/* 14 */ NULL, NULL, NULL, NULL,
15598/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15599/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15600/* 20 */ NULL, NULL, NULL, NULL,
15601/* 24 */ NULL, NULL, NULL, NULL,
15602/* 28 */ NULL, NULL, NULL, NULL,
15603/* 2C */ NULL, NULL, NULL, NULL,
15604/* 30 */ NULL, NULL, NULL, NULL,
15605/* 34 */ NULL, NULL, NULL, NULL,
15606/* 38 */ NULL, NULL, NULL, NULL,
15607/* 3C */ NULL, NULL, NULL, NULL,
15608/* 40 */ NULL, NULL, NULL, NULL,
15609/* 44 */ NULL, NULL, NULL, NULL,
15610/* 48 */ NULL, NULL, NULL, NULL,
15611/* 4C */ NULL, NULL, NULL, NULL,
15612/* 50 */ NULL, NULL, NULL, NULL,
15613/* 54 */ NULL, NULL, NULL, NULL,
15614/* 58 */ NULL, NULL, NULL, NULL,
15615/* 5C */ NULL, NULL, NULL, NULL,
15616/* 60 */ NULL, NULL, NULL, NULL,
15617/* 64 */ NULL, NULL, NULL, NULL,
15618/* 68 */ NULL, NULL, NULL, NULL,
15619/* 6C */ NULL, NULL, NULL, NULL,
15620/* 70 */ NULL, NULL, NULL, NULL,
15621/* 74 */ NULL, NULL, NULL, NULL,
15622/* 78 */ NULL, NULL, NULL, NULL,
15623/* 7C */ NULL, NULL, NULL, NULL,
15624/* 80 */ NULL, NULL, NULL, NULL,
15625/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15626/* 88 */ NULL, NULL, "pfnacc", NULL,
15627/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15628/* 90 */ "pfcmpge", NULL, NULL, NULL,
15629/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15630/* 98 */ NULL, NULL, "pfsub", NULL,
15631/* 9C */ NULL, NULL, "pfadd", NULL,
15632/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15633/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15634/* A8 */ NULL, NULL, "pfsubr", NULL,
15635/* AC */ NULL, NULL, "pfacc", NULL,
15636/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15637/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15638/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15639/* BC */ NULL, NULL, NULL, "pavgusb",
15640/* C0 */ NULL, NULL, NULL, NULL,
15641/* C4 */ NULL, NULL, NULL, NULL,
15642/* C8 */ NULL, NULL, NULL, NULL,
15643/* CC */ NULL, NULL, NULL, NULL,
15644/* D0 */ NULL, NULL, NULL, NULL,
15645/* D4 */ NULL, NULL, NULL, NULL,
15646/* D8 */ NULL, NULL, NULL, NULL,
15647/* DC */ NULL, NULL, NULL, NULL,
15648/* E0 */ NULL, NULL, NULL, NULL,
15649/* E4 */ NULL, NULL, NULL, NULL,
15650/* E8 */ NULL, NULL, NULL, NULL,
15651/* EC */ NULL, NULL, NULL, NULL,
15652/* F0 */ NULL, NULL, NULL, NULL,
15653/* F4 */ NULL, NULL, NULL, NULL,
15654/* F8 */ NULL, NULL, NULL, NULL,
15655/* FC */ NULL, NULL, NULL, NULL,
15656};
15657
15658static void
26ca5450 15659OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15660{
15661 const char *mnemonic;
15662
15663 FETCH_DATA (the_info, codep + 1);
15664 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15665 place where an 8-bit immediate would normally go. ie. the last
15666 byte of the instruction. */
ea397f5b 15667 obufp = mnemonicendp;
c608c12e 15668 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15669 if (mnemonic)
2da11e11 15670 oappend (mnemonic);
252b5132
RH
15671 else
15672 {
15673 /* Since a variable sized modrm/sib chunk is between the start
15674 of the opcode (0x0f0f) and the opcode suffix, we need to do
15675 all the modrm processing first, and don't know until now that
15676 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15677 op_out[0][0] = '\0';
15678 op_out[1][0] = '\0';
6608db57 15679 BadOp ();
252b5132 15680 }
ea397f5b 15681 mnemonicendp = obufp;
252b5132 15682}
c608c12e 15683
ea397f5b
L
15684static struct op simd_cmp_op[] =
15685{
15686 { STRING_COMMA_LEN ("eq") },
15687 { STRING_COMMA_LEN ("lt") },
15688 { STRING_COMMA_LEN ("le") },
15689 { STRING_COMMA_LEN ("unord") },
15690 { STRING_COMMA_LEN ("neq") },
15691 { STRING_COMMA_LEN ("nlt") },
15692 { STRING_COMMA_LEN ("nle") },
15693 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15694};
15695
15696static void
ad19981d 15697CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15698{
15699 unsigned int cmp_type;
15700
15701 FETCH_DATA (the_info, codep + 1);
15702 cmp_type = *codep++ & 0xff;
c0f3af97 15703 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15704 {
ad19981d 15705 char suffix [3];
ea397f5b 15706 char *p = mnemonicendp - 2;
ad19981d
L
15707 suffix[0] = p[0];
15708 suffix[1] = p[1];
15709 suffix[2] = '\0';
ea397f5b
L
15710 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15711 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15712 }
15713 else
15714 {
ad19981d
L
15715 /* We have a reserved extension byte. Output it directly. */
15716 scratchbuf[0] = '$';
15717 print_operand_value (scratchbuf + 1, 1, cmp_type);
15718 oappend (scratchbuf + intel_syntax);
15719 scratchbuf[0] = '\0';
c608c12e
AM
15720 }
15721}
15722
ca164297 15723static void
b844680a
L
15724OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15725 int sizeflag ATTRIBUTE_UNUSED)
15726{
15727 /* mwait %eax,%ecx */
15728 if (!intel_syntax)
15729 {
15730 const char **names = (address_mode == mode_64bit
15731 ? names64 : names32);
15732 strcpy (op_out[0], names[0]);
15733 strcpy (op_out[1], names[1]);
15734 two_source_ops = 1;
15735 }
15736 /* Skip mod/rm byte. */
15737 MODRM_CHECK;
15738 codep++;
15739}
15740
15741static void
15742OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15743 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15744{
b844680a
L
15745 /* monitor %eax,%ecx,%edx" */
15746 if (!intel_syntax)
ca164297 15747 {
b844680a 15748 const char **op1_names;
cb712a9e
L
15749 const char **names = (address_mode == mode_64bit
15750 ? names64 : names32);
1d9f512f 15751
b844680a
L
15752 if (!(prefixes & PREFIX_ADDR))
15753 op1_names = (address_mode == mode_16bit
15754 ? names16 : names);
ca164297
L
15755 else
15756 {
b844680a 15757 /* Remove "addr16/addr32". */
f16cd0d5 15758 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15759 op1_names = (address_mode != mode_32bit
15760 ? names32 : names16);
15761 used_prefixes |= PREFIX_ADDR;
ca164297 15762 }
b844680a
L
15763 strcpy (op_out[0], op1_names[0]);
15764 strcpy (op_out[1], names[1]);
15765 strcpy (op_out[2], names[2]);
15766 two_source_ops = 1;
ca164297 15767 }
b844680a
L
15768 /* Skip mod/rm byte. */
15769 MODRM_CHECK;
15770 codep++;
30123838
JB
15771}
15772
6608db57
KH
15773static void
15774BadOp (void)
2da11e11 15775{
6608db57
KH
15776 /* Throw away prefixes and 1st. opcode byte. */
15777 codep = insn_codep + 1;
2da11e11
AM
15778 oappend ("(bad)");
15779}
4cc91dba 15780
35c52694
L
15781static void
15782REP_Fixup (int bytemode, int sizeflag)
15783{
15784 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15785 lods and stos. */
35c52694 15786 if (prefixes & PREFIX_REPZ)
f16cd0d5 15787 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15788
15789 switch (bytemode)
15790 {
15791 case al_reg:
15792 case eAX_reg:
15793 case indir_dx_reg:
15794 OP_IMREG (bytemode, sizeflag);
15795 break;
15796 case eDI_reg:
15797 OP_ESreg (bytemode, sizeflag);
15798 break;
15799 case eSI_reg:
15800 OP_DSreg (bytemode, sizeflag);
15801 break;
15802 default:
15803 abort ();
15804 break;
15805 }
15806}
f5804c90 15807
7e8b059b
L
15808/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15809 "bnd". */
15810
15811static void
15812BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15813{
15814 if (prefixes & PREFIX_REPNZ)
15815 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15816}
15817
42164a71
L
15818/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15819 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15820 */
15821
15822static void
15823HLE_Fixup1 (int bytemode, int sizeflag)
15824{
15825 if (modrm.mod != 3
15826 && (prefixes & PREFIX_LOCK) != 0)
15827 {
15828 if (prefixes & PREFIX_REPZ)
15829 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15830 if (prefixes & PREFIX_REPNZ)
15831 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15832 }
15833
15834 OP_E (bytemode, sizeflag);
15835}
15836
15837/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15838 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15839 */
15840
15841static void
15842HLE_Fixup2 (int bytemode, int sizeflag)
15843{
15844 if (modrm.mod != 3)
15845 {
15846 if (prefixes & PREFIX_REPZ)
15847 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15848 if (prefixes & PREFIX_REPNZ)
15849 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15850 }
15851
15852 OP_E (bytemode, sizeflag);
15853}
15854
15855/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15856 "xrelease" for memory operand. No check for LOCK prefix. */
15857
15858static void
15859HLE_Fixup3 (int bytemode, int sizeflag)
15860{
15861 if (modrm.mod != 3
15862 && last_repz_prefix > last_repnz_prefix
15863 && (prefixes & PREFIX_REPZ) != 0)
15864 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15865
15866 OP_E (bytemode, sizeflag);
15867}
15868
f5804c90
L
15869static void
15870CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15871{
161a04f6
L
15872 USED_REX (REX_W);
15873 if (rex & REX_W)
f5804c90
L
15874 {
15875 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15876 char *p = mnemonicendp - 2;
15877 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15878 bytemode = o_mode;
f5804c90 15879 }
42164a71
L
15880 else if ((prefixes & PREFIX_LOCK) != 0)
15881 {
15882 if (prefixes & PREFIX_REPZ)
15883 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15884 if (prefixes & PREFIX_REPNZ)
15885 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15886 }
15887
f5804c90
L
15888 OP_M (bytemode, sizeflag);
15889}
42903f7f
L
15890
15891static void
15892XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15893{
b9733481
L
15894 const char **names;
15895
c0f3af97
L
15896 if (need_vex)
15897 {
15898 switch (vex.length)
15899 {
15900 case 128:
b9733481 15901 names = names_xmm;
c0f3af97
L
15902 break;
15903 case 256:
b9733481 15904 names = names_ymm;
c0f3af97
L
15905 break;
15906 default:
15907 abort ();
15908 }
15909 }
15910 else
b9733481
L
15911 names = names_xmm;
15912 oappend (names[reg]);
42903f7f 15913}
381d071f
L
15914
15915static void
15916CRC32_Fixup (int bytemode, int sizeflag)
15917{
15918 /* Add proper suffix to "crc32". */
ea397f5b 15919 char *p = mnemonicendp;
381d071f
L
15920
15921 switch (bytemode)
15922 {
15923 case b_mode:
20592a94 15924 if (intel_syntax)
ea397f5b 15925 goto skip;
20592a94 15926
381d071f
L
15927 *p++ = 'b';
15928 break;
15929 case v_mode:
20592a94 15930 if (intel_syntax)
ea397f5b 15931 goto skip;
20592a94 15932
381d071f
L
15933 USED_REX (REX_W);
15934 if (rex & REX_W)
15935 *p++ = 'q';
7bb15c6f 15936 else
f16cd0d5
L
15937 {
15938 if (sizeflag & DFLAG)
15939 *p++ = 'l';
15940 else
15941 *p++ = 'w';
15942 used_prefixes |= (prefixes & PREFIX_DATA);
15943 }
381d071f
L
15944 break;
15945 default:
15946 oappend (INTERNAL_DISASSEMBLER_ERROR);
15947 break;
15948 }
ea397f5b 15949 mnemonicendp = p;
381d071f
L
15950 *p = '\0';
15951
ea397f5b 15952skip:
381d071f
L
15953 if (modrm.mod == 3)
15954 {
15955 int add;
15956
15957 /* Skip mod/rm byte. */
15958 MODRM_CHECK;
15959 codep++;
15960
15961 USED_REX (REX_B);
15962 add = (rex & REX_B) ? 8 : 0;
15963 if (bytemode == b_mode)
15964 {
15965 USED_REX (0);
15966 if (rex)
15967 oappend (names8rex[modrm.rm + add]);
15968 else
15969 oappend (names8[modrm.rm + add]);
15970 }
15971 else
15972 {
15973 USED_REX (REX_W);
15974 if (rex & REX_W)
15975 oappend (names64[modrm.rm + add]);
15976 else if ((prefixes & PREFIX_DATA))
15977 oappend (names16[modrm.rm + add]);
15978 else
15979 oappend (names32[modrm.rm + add]);
15980 }
15981 }
15982 else
9344ff29 15983 OP_E (bytemode, sizeflag);
381d071f 15984}
85f10a01 15985
eacc9c89
L
15986static void
15987FXSAVE_Fixup (int bytemode, int sizeflag)
15988{
15989 /* Add proper suffix to "fxsave" and "fxrstor". */
15990 USED_REX (REX_W);
15991 if (rex & REX_W)
15992 {
15993 char *p = mnemonicendp;
15994 *p++ = '6';
15995 *p++ = '4';
15996 *p = '\0';
15997 mnemonicendp = p;
15998 }
15999 OP_M (bytemode, sizeflag);
16000}
16001
c0f3af97
L
16002/* Display the destination register operand for instructions with
16003 VEX. */
16004
16005static void
16006OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16007{
539f890d 16008 int reg;
b9733481
L
16009 const char **names;
16010
c0f3af97
L
16011 if (!need_vex)
16012 abort ();
16013
16014 if (!need_vex_reg)
16015 return;
16016
539f890d 16017 reg = vex.register_specifier;
43234a1e
L
16018 if (vex.evex)
16019 {
16020 if (!vex.v)
16021 reg += 16;
16022 }
16023
539f890d
L
16024 if (bytemode == vex_scalar_mode)
16025 {
16026 oappend (names_xmm[reg]);
16027 return;
16028 }
16029
c0f3af97
L
16030 switch (vex.length)
16031 {
16032 case 128:
16033 switch (bytemode)
16034 {
16035 case vex_mode:
16036 case vex128_mode:
6c30d220 16037 case vex_vsib_q_w_dq_mode:
cb21baef
L
16038 names = names_xmm;
16039 break;
16040 case dq_mode:
16041 if (vex.w)
16042 names = names64;
16043 else
16044 names = names32;
c0f3af97 16045 break;
43234a1e
L
16046 case mask_mode:
16047 names = names_mask;
16048 break;
c0f3af97
L
16049 default:
16050 abort ();
16051 return;
16052 }
c0f3af97
L
16053 break;
16054 case 256:
16055 switch (bytemode)
16056 {
16057 case vex_mode:
16058 case vex256_mode:
6c30d220
L
16059 names = names_ymm;
16060 break;
16061 case vex_vsib_q_w_dq_mode:
16062 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16063 break;
43234a1e
L
16064 case mask_mode:
16065 names = names_mask;
16066 break;
c0f3af97
L
16067 default:
16068 abort ();
16069 return;
16070 }
c0f3af97 16071 break;
43234a1e
L
16072 case 512:
16073 names = names_zmm;
16074 break;
c0f3af97
L
16075 default:
16076 abort ();
16077 break;
16078 }
539f890d 16079 oappend (names[reg]);
c0f3af97
L
16080}
16081
922d8de8
DR
16082/* Get the VEX immediate byte without moving codep. */
16083
16084static unsigned char
ccc5981b 16085get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16086{
16087 int bytes_before_imm = 0;
16088
922d8de8
DR
16089 if (modrm.mod != 3)
16090 {
16091 /* There are SIB/displacement bytes. */
16092 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16093 {
922d8de8 16094 /* 32/64 bit address mode */
6c067bbb 16095 int base = modrm.rm;
922d8de8
DR
16096
16097 /* Check SIB byte. */
6c067bbb
RM
16098 if (base == 4)
16099 {
16100 FETCH_DATA (the_info, codep + 1);
16101 base = *codep & 7;
16102 /* When decoding the third source, don't increase
16103 bytes_before_imm as this has already been incremented
16104 by one in OP_E_memory while decoding the second
16105 source operand. */
16106 if (opnum == 0)
16107 bytes_before_imm++;
16108 }
16109
16110 /* Don't increase bytes_before_imm when decoding the third source,
16111 it has already been incremented by OP_E_memory while decoding
16112 the second source operand. */
16113 if (opnum == 0)
16114 {
16115 switch (modrm.mod)
16116 {
16117 case 0:
16118 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16119 SIB == 5, there is a 4 byte displacement. */
16120 if (base != 5)
16121 /* No displacement. */
16122 break;
16123 case 2:
16124 /* 4 byte displacement. */
16125 bytes_before_imm += 4;
16126 break;
16127 case 1:
16128 /* 1 byte displacement. */
16129 bytes_before_imm++;
16130 break;
16131 }
16132 }
16133 }
922d8de8 16134 else
02e647f9
SP
16135 {
16136 /* 16 bit address mode */
6c067bbb
RM
16137 /* Don't increase bytes_before_imm when decoding the third source,
16138 it has already been incremented by OP_E_memory while decoding
16139 the second source operand. */
16140 if (opnum == 0)
16141 {
02e647f9
SP
16142 switch (modrm.mod)
16143 {
16144 case 0:
16145 /* When modrm.rm == 6, there is a 2 byte displacement. */
16146 if (modrm.rm != 6)
16147 /* No displacement. */
16148 break;
16149 case 2:
16150 /* 2 byte displacement. */
16151 bytes_before_imm += 2;
16152 break;
16153 case 1:
16154 /* 1 byte displacement: when decoding the third source,
16155 don't increase bytes_before_imm as this has already
16156 been incremented by one in OP_E_memory while decoding
16157 the second source operand. */
16158 if (opnum == 0)
16159 bytes_before_imm++;
ccc5981b 16160
02e647f9
SP
16161 break;
16162 }
922d8de8
DR
16163 }
16164 }
16165 }
16166
16167 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16168 return codep [bytes_before_imm];
16169}
16170
16171static void
16172OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16173{
b9733481
L
16174 const char **names;
16175
922d8de8
DR
16176 if (reg == -1 && modrm.mod != 3)
16177 {
16178 OP_E_memory (bytemode, sizeflag);
16179 return;
16180 }
16181 else
16182 {
16183 if (reg == -1)
16184 {
16185 reg = modrm.rm;
16186 USED_REX (REX_B);
16187 if (rex & REX_B)
16188 reg += 8;
16189 }
16190 else if (reg > 7 && address_mode != mode_64bit)
16191 BadOp ();
16192 }
16193
16194 switch (vex.length)
16195 {
16196 case 128:
b9733481 16197 names = names_xmm;
922d8de8
DR
16198 break;
16199 case 256:
b9733481 16200 names = names_ymm;
922d8de8
DR
16201 break;
16202 default:
16203 abort ();
16204 }
b9733481 16205 oappend (names[reg]);
922d8de8
DR
16206}
16207
a683cc34
SP
16208static void
16209OP_EX_VexImmW (int bytemode, int sizeflag)
16210{
16211 int reg = -1;
16212 static unsigned char vex_imm8;
16213
16214 if (vex_w_done == 0)
16215 {
16216 vex_w_done = 1;
16217
16218 /* Skip mod/rm byte. */
16219 MODRM_CHECK;
16220 codep++;
16221
16222 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16223
16224 if (vex.w)
16225 reg = vex_imm8 >> 4;
16226
16227 OP_EX_VexReg (bytemode, sizeflag, reg);
16228 }
16229 else if (vex_w_done == 1)
16230 {
16231 vex_w_done = 2;
16232
16233 if (!vex.w)
16234 reg = vex_imm8 >> 4;
16235
16236 OP_EX_VexReg (bytemode, sizeflag, reg);
16237 }
16238 else
16239 {
16240 /* Output the imm8 directly. */
16241 scratchbuf[0] = '$';
16242 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
16243 oappend (scratchbuf + intel_syntax);
16244 scratchbuf[0] = '\0';
16245 codep++;
16246 }
16247}
16248
5dd85c99
SP
16249static void
16250OP_Vex_2src (int bytemode, int sizeflag)
16251{
16252 if (modrm.mod == 3)
16253 {
b9733481 16254 int reg = modrm.rm;
5dd85c99 16255 USED_REX (REX_B);
b9733481
L
16256 if (rex & REX_B)
16257 reg += 8;
16258 oappend (names_xmm[reg]);
5dd85c99
SP
16259 }
16260 else
16261 {
16262 if (intel_syntax
16263 && (bytemode == v_mode || bytemode == v_swap_mode))
16264 {
16265 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16266 used_prefixes |= (prefixes & PREFIX_DATA);
16267 }
16268 OP_E (bytemode, sizeflag);
16269 }
16270}
16271
16272static void
16273OP_Vex_2src_1 (int bytemode, int sizeflag)
16274{
16275 if (modrm.mod == 3)
16276 {
16277 /* Skip mod/rm byte. */
16278 MODRM_CHECK;
16279 codep++;
16280 }
16281
16282 if (vex.w)
b9733481 16283 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16284 else
16285 OP_Vex_2src (bytemode, sizeflag);
16286}
16287
16288static void
16289OP_Vex_2src_2 (int bytemode, int sizeflag)
16290{
16291 if (vex.w)
16292 OP_Vex_2src (bytemode, sizeflag);
16293 else
b9733481 16294 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16295}
16296
922d8de8
DR
16297static void
16298OP_EX_VexW (int bytemode, int sizeflag)
16299{
16300 int reg = -1;
16301
16302 if (!vex_w_done)
16303 {
16304 vex_w_done = 1;
41effecb
SP
16305
16306 /* Skip mod/rm byte. */
16307 MODRM_CHECK;
16308 codep++;
16309
922d8de8 16310 if (vex.w)
ccc5981b 16311 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16312 }
16313 else
16314 {
16315 if (!vex.w)
ccc5981b 16316 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16317 }
16318
16319 OP_EX_VexReg (bytemode, sizeflag, reg);
16320}
16321
922d8de8
DR
16322static void
16323VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16324 int sizeflag ATTRIBUTE_UNUSED)
16325{
16326 /* Skip the immediate byte and check for invalid bits. */
16327 FETCH_DATA (the_info, codep + 1);
16328 if (*codep++ & 0xf)
16329 BadOp ();
16330}
16331
c0f3af97
L
16332static void
16333OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16334{
16335 int reg;
b9733481
L
16336 const char **names;
16337
c0f3af97
L
16338 FETCH_DATA (the_info, codep + 1);
16339 reg = *codep++;
16340
16341 if (bytemode != x_mode)
16342 abort ();
16343
16344 if (reg & 0xf)
16345 BadOp ();
16346
16347 reg >>= 4;
dae39acc
L
16348 if (reg > 7 && address_mode != mode_64bit)
16349 BadOp ();
16350
c0f3af97
L
16351 switch (vex.length)
16352 {
16353 case 128:
b9733481 16354 names = names_xmm;
c0f3af97
L
16355 break;
16356 case 256:
b9733481 16357 names = names_ymm;
c0f3af97
L
16358 break;
16359 default:
16360 abort ();
16361 }
b9733481 16362 oappend (names[reg]);
c0f3af97
L
16363}
16364
922d8de8
DR
16365static void
16366OP_XMM_VexW (int bytemode, int sizeflag)
16367{
16368 /* Turn off the REX.W bit since it is used for swapping operands
16369 now. */
16370 rex &= ~REX_W;
16371 OP_XMM (bytemode, sizeflag);
16372}
16373
c0f3af97
L
16374static void
16375OP_EX_Vex (int bytemode, int sizeflag)
16376{
16377 if (modrm.mod != 3)
16378 {
16379 if (vex.register_specifier != 0)
16380 BadOp ();
16381 need_vex_reg = 0;
16382 }
16383 OP_EX (bytemode, sizeflag);
16384}
16385
16386static void
16387OP_XMM_Vex (int bytemode, int sizeflag)
16388{
16389 if (modrm.mod != 3)
16390 {
16391 if (vex.register_specifier != 0)
16392 BadOp ();
16393 need_vex_reg = 0;
16394 }
16395 OP_XMM (bytemode, sizeflag);
16396}
16397
16398static void
16399VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16400{
16401 switch (vex.length)
16402 {
16403 case 128:
ea397f5b 16404 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
16405 break;
16406 case 256:
ea397f5b 16407 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
16408 break;
16409 default:
16410 abort ();
16411 }
16412}
16413
ea397f5b
L
16414static struct op vex_cmp_op[] =
16415{
16416 { STRING_COMMA_LEN ("eq") },
16417 { STRING_COMMA_LEN ("lt") },
16418 { STRING_COMMA_LEN ("le") },
16419 { STRING_COMMA_LEN ("unord") },
16420 { STRING_COMMA_LEN ("neq") },
16421 { STRING_COMMA_LEN ("nlt") },
16422 { STRING_COMMA_LEN ("nle") },
16423 { STRING_COMMA_LEN ("ord") },
16424 { STRING_COMMA_LEN ("eq_uq") },
16425 { STRING_COMMA_LEN ("nge") },
16426 { STRING_COMMA_LEN ("ngt") },
16427 { STRING_COMMA_LEN ("false") },
16428 { STRING_COMMA_LEN ("neq_oq") },
16429 { STRING_COMMA_LEN ("ge") },
16430 { STRING_COMMA_LEN ("gt") },
16431 { STRING_COMMA_LEN ("true") },
16432 { STRING_COMMA_LEN ("eq_os") },
16433 { STRING_COMMA_LEN ("lt_oq") },
16434 { STRING_COMMA_LEN ("le_oq") },
16435 { STRING_COMMA_LEN ("unord_s") },
16436 { STRING_COMMA_LEN ("neq_us") },
16437 { STRING_COMMA_LEN ("nlt_uq") },
16438 { STRING_COMMA_LEN ("nle_uq") },
16439 { STRING_COMMA_LEN ("ord_s") },
16440 { STRING_COMMA_LEN ("eq_us") },
16441 { STRING_COMMA_LEN ("nge_uq") },
16442 { STRING_COMMA_LEN ("ngt_uq") },
16443 { STRING_COMMA_LEN ("false_os") },
16444 { STRING_COMMA_LEN ("neq_os") },
16445 { STRING_COMMA_LEN ("ge_oq") },
16446 { STRING_COMMA_LEN ("gt_oq") },
16447 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16448};
16449
16450static void
16451VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16452{
16453 unsigned int cmp_type;
16454
16455 FETCH_DATA (the_info, codep + 1);
16456 cmp_type = *codep++ & 0xff;
16457 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16458 {
16459 char suffix [3];
ea397f5b 16460 char *p = mnemonicendp - 2;
c0f3af97
L
16461 suffix[0] = p[0];
16462 suffix[1] = p[1];
16463 suffix[2] = '\0';
ea397f5b
L
16464 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16465 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16466 }
16467 else
16468 {
16469 /* We have a reserved extension byte. Output it directly. */
16470 scratchbuf[0] = '$';
16471 print_operand_value (scratchbuf + 1, 1, cmp_type);
16472 oappend (scratchbuf + intel_syntax);
16473 scratchbuf[0] = '\0';
16474 }
16475}
16476
43234a1e
L
16477static void
16478VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16479 int sizeflag ATTRIBUTE_UNUSED)
16480{
16481 unsigned int cmp_type;
16482
16483 if (!vex.evex)
16484 abort ();
16485
16486 FETCH_DATA (the_info, codep + 1);
16487 cmp_type = *codep++ & 0xff;
16488 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16489 If it's the case, print suffix, otherwise - print the immediate. */
16490 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16491 && cmp_type != 3
16492 && cmp_type != 7)
16493 {
16494 char suffix [3];
16495 char *p = mnemonicendp - 2;
16496
16497 /* vpcmp* can have both one- and two-lettered suffix. */
16498 if (p[0] == 'p')
16499 {
16500 p++;
16501 suffix[0] = p[0];
16502 suffix[1] = '\0';
16503 }
16504 else
16505 {
16506 suffix[0] = p[0];
16507 suffix[1] = p[1];
16508 suffix[2] = '\0';
16509 }
16510
16511 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16512 mnemonicendp += simd_cmp_op[cmp_type].len;
16513 }
16514 else
16515 {
16516 /* We have a reserved extension byte. Output it directly. */
16517 scratchbuf[0] = '$';
16518 print_operand_value (scratchbuf + 1, 1, cmp_type);
16519 oappend (scratchbuf + intel_syntax);
16520 scratchbuf[0] = '\0';
16521 }
16522}
16523
ea397f5b
L
16524static const struct op pclmul_op[] =
16525{
16526 { STRING_COMMA_LEN ("lql") },
16527 { STRING_COMMA_LEN ("hql") },
16528 { STRING_COMMA_LEN ("lqh") },
16529 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16530};
16531
16532static void
16533PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16534 int sizeflag ATTRIBUTE_UNUSED)
16535{
16536 unsigned int pclmul_type;
16537
16538 FETCH_DATA (the_info, codep + 1);
16539 pclmul_type = *codep++ & 0xff;
16540 switch (pclmul_type)
16541 {
16542 case 0x10:
16543 pclmul_type = 2;
16544 break;
16545 case 0x11:
16546 pclmul_type = 3;
16547 break;
16548 default:
16549 break;
7bb15c6f 16550 }
c0f3af97
L
16551 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16552 {
16553 char suffix [4];
ea397f5b 16554 char *p = mnemonicendp - 3;
c0f3af97
L
16555 suffix[0] = p[0];
16556 suffix[1] = p[1];
16557 suffix[2] = p[2];
16558 suffix[3] = '\0';
ea397f5b
L
16559 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16560 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16561 }
16562 else
16563 {
16564 /* We have a reserved extension byte. Output it directly. */
16565 scratchbuf[0] = '$';
16566 print_operand_value (scratchbuf + 1, 1, pclmul_type);
16567 oappend (scratchbuf + intel_syntax);
16568 scratchbuf[0] = '\0';
16569 }
16570}
16571
f1f8f695
L
16572static void
16573MOVBE_Fixup (int bytemode, int sizeflag)
16574{
16575 /* Add proper suffix to "movbe". */
ea397f5b 16576 char *p = mnemonicendp;
f1f8f695
L
16577
16578 switch (bytemode)
16579 {
16580 case v_mode:
16581 if (intel_syntax)
ea397f5b 16582 goto skip;
f1f8f695
L
16583
16584 USED_REX (REX_W);
16585 if (sizeflag & SUFFIX_ALWAYS)
16586 {
16587 if (rex & REX_W)
16588 *p++ = 'q';
f1f8f695 16589 else
f16cd0d5
L
16590 {
16591 if (sizeflag & DFLAG)
16592 *p++ = 'l';
16593 else
16594 *p++ = 'w';
16595 used_prefixes |= (prefixes & PREFIX_DATA);
16596 }
f1f8f695 16597 }
f1f8f695
L
16598 break;
16599 default:
16600 oappend (INTERNAL_DISASSEMBLER_ERROR);
16601 break;
16602 }
ea397f5b 16603 mnemonicendp = p;
f1f8f695
L
16604 *p = '\0';
16605
ea397f5b 16606skip:
f1f8f695
L
16607 OP_M (bytemode, sizeflag);
16608}
f88c9eb0
SP
16609
16610static void
16611OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16612{
16613 int reg;
16614 const char **names;
16615
16616 /* Skip mod/rm byte. */
16617 MODRM_CHECK;
16618 codep++;
16619
16620 if (vex.w)
16621 names = names64;
f88c9eb0 16622 else
ce7d077e 16623 names = names32;
f88c9eb0
SP
16624
16625 reg = modrm.rm;
16626 USED_REX (REX_B);
16627 if (rex & REX_B)
16628 reg += 8;
16629
16630 oappend (names[reg]);
16631}
16632
16633static void
16634OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16635{
16636 const char **names;
16637
16638 if (vex.w)
16639 names = names64;
f88c9eb0 16640 else
ce7d077e 16641 names = names32;
f88c9eb0
SP
16642
16643 oappend (names[vex.register_specifier]);
16644}
43234a1e
L
16645
16646static void
16647OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16648{
16649 if (!vex.evex
16650 || bytemode != mask_mode)
16651 abort ();
16652
16653 USED_REX (REX_R);
16654 if ((rex & REX_R) != 0 || !vex.r)
16655 {
16656 BadOp ();
16657 return;
16658 }
16659
16660 oappend (names_mask [modrm.reg]);
16661}
16662
16663static void
16664OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16665{
16666 if (!vex.evex
16667 || (bytemode != evex_rounding_mode
16668 && bytemode != evex_sae_mode))
16669 abort ();
16670 if (modrm.mod == 3 && vex.b)
16671 switch (bytemode)
16672 {
16673 case evex_rounding_mode:
16674 oappend (names_rounding[vex.ll]);
16675 break;
16676 case evex_sae_mode:
16677 oappend ("{sae}");
16678 break;
16679 default:
16680 break;
16681 }
16682}
This page took 2.354226 seconds and 4 git commands to generate.