* peXXigen.c: Include wchar.h if available.
[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,
9ce09ba2 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
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
9ce09ba2
RM
13098/* Like oappend (below), but S is a string starting with '%'.
13099 In Intel syntax, the '%' is elided. */
13100static void
13101oappend_maybe_intel (const char *s)
13102{
13103 oappend (s + intel_syntax);
13104}
13105
252b5132 13106static void
26ca5450 13107OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13108{
9ce09ba2 13109 oappend_maybe_intel ("%st");
252b5132
RH
13110}
13111
252b5132 13112static void
26ca5450 13113OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13114{
7967e09e 13115 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13116 oappend_maybe_intel (scratchbuf);
252b5132
RH
13117}
13118
6608db57 13119/* Capital letters in template are macros. */
6439fc28 13120static int
d3ce72d0 13121putop (const char *in_template, int sizeflag)
252b5132 13122{
2da11e11 13123 const char *p;
9306ca4a 13124 int alt = 0;
9d141669 13125 int cond = 1;
98b528ac
L
13126 unsigned int l = 0, len = 1;
13127 char last[4];
13128
13129#define SAVE_LAST(c) \
13130 if (l < len && l < sizeof (last)) \
13131 last[l++] = c; \
13132 else \
13133 abort ();
252b5132 13134
d3ce72d0 13135 for (p = in_template; *p; p++)
252b5132
RH
13136 {
13137 switch (*p)
13138 {
13139 default:
13140 *obufp++ = *p;
13141 break;
98b528ac
L
13142 case '%':
13143 len++;
13144 break;
9d141669
L
13145 case '!':
13146 cond = 0;
13147 break;
6439fc28
AM
13148 case '{':
13149 alt = 0;
13150 if (intel_syntax)
6439fc28
AM
13151 {
13152 while (*++p != '|')
7c52e0e8
L
13153 if (*p == '}' || *p == '\0')
13154 abort ();
6439fc28 13155 }
9306ca4a
JB
13156 /* Fall through. */
13157 case 'I':
13158 alt = 1;
13159 continue;
6439fc28
AM
13160 case '|':
13161 while (*++p != '}')
13162 {
13163 if (*p == '\0')
13164 abort ();
13165 }
13166 break;
13167 case '}':
13168 break;
252b5132 13169 case 'A':
db6eb5be
AM
13170 if (intel_syntax)
13171 break;
7967e09e 13172 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
13173 *obufp++ = 'b';
13174 break;
13175 case 'B':
4b06377f
L
13176 if (l == 0 && len == 1)
13177 {
13178case_B:
13179 if (intel_syntax)
13180 break;
13181 if (sizeflag & SUFFIX_ALWAYS)
13182 *obufp++ = 'b';
13183 }
13184 else
13185 {
13186 if (l != 1
13187 || len != 2
13188 || last[0] != 'L')
13189 {
13190 SAVE_LAST (*p);
13191 break;
13192 }
13193
13194 if (address_mode == mode_64bit
13195 && !(prefixes & PREFIX_ADDR))
13196 {
13197 *obufp++ = 'a';
13198 *obufp++ = 'b';
13199 *obufp++ = 's';
13200 }
13201
13202 goto case_B;
13203 }
252b5132 13204 break;
9306ca4a
JB
13205 case 'C':
13206 if (intel_syntax && !alt)
13207 break;
13208 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13209 {
13210 if (sizeflag & DFLAG)
13211 *obufp++ = intel_syntax ? 'd' : 'l';
13212 else
13213 *obufp++ = intel_syntax ? 'w' : 's';
13214 used_prefixes |= (prefixes & PREFIX_DATA);
13215 }
13216 break;
ed7841b3
JB
13217 case 'D':
13218 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13219 break;
161a04f6 13220 USED_REX (REX_W);
7967e09e 13221 if (modrm.mod == 3)
ed7841b3 13222 {
161a04f6 13223 if (rex & REX_W)
ed7841b3 13224 *obufp++ = 'q';
ed7841b3 13225 else
f16cd0d5
L
13226 {
13227 if (sizeflag & DFLAG)
13228 *obufp++ = intel_syntax ? 'd' : 'l';
13229 else
13230 *obufp++ = 'w';
13231 used_prefixes |= (prefixes & PREFIX_DATA);
13232 }
ed7841b3
JB
13233 }
13234 else
13235 *obufp++ = 'w';
13236 break;
252b5132 13237 case 'E': /* For jcxz/jecxz */
cb712a9e 13238 if (address_mode == mode_64bit)
c1a64871
JH
13239 {
13240 if (sizeflag & AFLAG)
13241 *obufp++ = 'r';
13242 else
13243 *obufp++ = 'e';
13244 }
13245 else
13246 if (sizeflag & AFLAG)
13247 *obufp++ = 'e';
3ffd33cf
AM
13248 used_prefixes |= (prefixes & PREFIX_ADDR);
13249 break;
13250 case 'F':
db6eb5be
AM
13251 if (intel_syntax)
13252 break;
e396998b 13253 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
13254 {
13255 if (sizeflag & AFLAG)
cb712a9e 13256 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 13257 else
cb712a9e 13258 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
13259 used_prefixes |= (prefixes & PREFIX_ADDR);
13260 }
252b5132 13261 break;
52fd6d94
JB
13262 case 'G':
13263 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13264 break;
161a04f6 13265 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13266 *obufp++ = 'l';
13267 else
13268 *obufp++ = 'w';
161a04f6 13269 if (!(rex & REX_W))
52fd6d94
JB
13270 used_prefixes |= (prefixes & PREFIX_DATA);
13271 break;
5dd0794d 13272 case 'H':
db6eb5be
AM
13273 if (intel_syntax)
13274 break;
5dd0794d
AM
13275 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13276 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13277 {
13278 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13279 *obufp++ = ',';
13280 *obufp++ = 'p';
13281 if (prefixes & PREFIX_DS)
13282 *obufp++ = 't';
13283 else
13284 *obufp++ = 'n';
13285 }
13286 break;
9306ca4a
JB
13287 case 'J':
13288 if (intel_syntax)
13289 break;
13290 *obufp++ = 'l';
13291 break;
42903f7f
L
13292 case 'K':
13293 USED_REX (REX_W);
13294 if (rex & REX_W)
13295 *obufp++ = 'q';
13296 else
13297 *obufp++ = 'd';
13298 break;
6dd5059a
L
13299 case 'Z':
13300 if (intel_syntax)
13301 break;
13302 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13303 {
13304 *obufp++ = 'q';
13305 break;
13306 }
13307 /* Fall through. */
98b528ac 13308 goto case_L;
252b5132 13309 case 'L':
98b528ac
L
13310 if (l != 0 || len != 1)
13311 {
13312 SAVE_LAST (*p);
13313 break;
13314 }
13315case_L:
db6eb5be
AM
13316 if (intel_syntax)
13317 break;
252b5132
RH
13318 if (sizeflag & SUFFIX_ALWAYS)
13319 *obufp++ = 'l';
252b5132 13320 break;
9d141669
L
13321 case 'M':
13322 if (intel_mnemonic != cond)
13323 *obufp++ = 'r';
13324 break;
252b5132
RH
13325 case 'N':
13326 if ((prefixes & PREFIX_FWAIT) == 0)
13327 *obufp++ = 'n';
7d421014
ILT
13328 else
13329 used_prefixes |= PREFIX_FWAIT;
252b5132 13330 break;
52b15da3 13331 case 'O':
161a04f6
L
13332 USED_REX (REX_W);
13333 if (rex & REX_W)
6439fc28 13334 *obufp++ = 'o';
a35ca55a
JB
13335 else if (intel_syntax && (sizeflag & DFLAG))
13336 *obufp++ = 'q';
52b15da3
JH
13337 else
13338 *obufp++ = 'd';
161a04f6 13339 if (!(rex & REX_W))
a35ca55a 13340 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13341 break;
6439fc28 13342 case 'T':
d9e3625e
L
13343 if (!intel_syntax
13344 && address_mode == mode_64bit
7bb15c6f 13345 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13346 {
13347 *obufp++ = 'q';
13348 break;
13349 }
6608db57 13350 /* Fall through. */
252b5132 13351 case 'P':
db6eb5be 13352 if (intel_syntax)
d9e3625e
L
13353 {
13354 if ((rex & REX_W) == 0
13355 && (prefixes & PREFIX_DATA))
13356 {
13357 if ((sizeflag & DFLAG) == 0)
13358 *obufp++ = 'w';
13359 used_prefixes |= (prefixes & PREFIX_DATA);
13360 }
13361 break;
13362 }
252b5132 13363 if ((prefixes & PREFIX_DATA)
161a04f6 13364 || (rex & REX_W)
e396998b 13365 || (sizeflag & SUFFIX_ALWAYS))
252b5132 13366 {
161a04f6
L
13367 USED_REX (REX_W);
13368 if (rex & REX_W)
52b15da3 13369 *obufp++ = 'q';
c2419411 13370 else
52b15da3
JH
13371 {
13372 if (sizeflag & DFLAG)
13373 *obufp++ = 'l';
13374 else
13375 *obufp++ = 'w';
f16cd0d5 13376 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 13377 }
252b5132
RH
13378 }
13379 break;
6439fc28 13380 case 'U':
db6eb5be
AM
13381 if (intel_syntax)
13382 break;
7bb15c6f 13383 if (address_mode == mode_64bit
6c067bbb 13384 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13385 {
7967e09e 13386 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13387 *obufp++ = 'q';
6439fc28
AM
13388 break;
13389 }
6608db57 13390 /* Fall through. */
98b528ac 13391 goto case_Q;
252b5132 13392 case 'Q':
98b528ac 13393 if (l == 0 && len == 1)
252b5132 13394 {
98b528ac
L
13395case_Q:
13396 if (intel_syntax && !alt)
13397 break;
13398 USED_REX (REX_W);
13399 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13400 {
98b528ac
L
13401 if (rex & REX_W)
13402 *obufp++ = 'q';
52b15da3 13403 else
98b528ac
L
13404 {
13405 if (sizeflag & DFLAG)
13406 *obufp++ = intel_syntax ? 'd' : 'l';
13407 else
13408 *obufp++ = 'w';
f16cd0d5 13409 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13410 }
52b15da3 13411 }
98b528ac
L
13412 }
13413 else
13414 {
13415 if (l != 1 || len != 2 || last[0] != 'L')
13416 {
13417 SAVE_LAST (*p);
13418 break;
13419 }
13420 if (intel_syntax
13421 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13422 break;
13423 if ((rex & REX_W))
13424 {
13425 USED_REX (REX_W);
13426 *obufp++ = 'q';
13427 }
13428 else
13429 *obufp++ = 'l';
252b5132
RH
13430 }
13431 break;
13432 case 'R':
161a04f6
L
13433 USED_REX (REX_W);
13434 if (rex & REX_W)
a35ca55a
JB
13435 *obufp++ = 'q';
13436 else if (sizeflag & DFLAG)
c608c12e 13437 {
a35ca55a 13438 if (intel_syntax)
c608c12e 13439 *obufp++ = 'd';
c608c12e 13440 else
a35ca55a 13441 *obufp++ = 'l';
c608c12e 13442 }
252b5132 13443 else
a35ca55a
JB
13444 *obufp++ = 'w';
13445 if (intel_syntax && !p[1]
161a04f6 13446 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13447 *obufp++ = 'e';
161a04f6 13448 if (!(rex & REX_W))
52b15da3 13449 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13450 break;
1a114b12 13451 case 'V':
4b06377f 13452 if (l == 0 && len == 1)
1a114b12 13453 {
4b06377f
L
13454 if (intel_syntax)
13455 break;
7bb15c6f 13456 if (address_mode == mode_64bit
6c067bbb 13457 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13458 {
13459 if (sizeflag & SUFFIX_ALWAYS)
13460 *obufp++ = 'q';
13461 break;
13462 }
13463 }
13464 else
13465 {
13466 if (l != 1
13467 || len != 2
13468 || last[0] != 'L')
13469 {
13470 SAVE_LAST (*p);
13471 break;
13472 }
13473
13474 if (rex & REX_W)
13475 {
13476 *obufp++ = 'a';
13477 *obufp++ = 'b';
13478 *obufp++ = 's';
13479 }
1a114b12
JB
13480 }
13481 /* Fall through. */
4b06377f 13482 goto case_S;
252b5132 13483 case 'S':
4b06377f 13484 if (l == 0 && len == 1)
252b5132 13485 {
4b06377f
L
13486case_S:
13487 if (intel_syntax)
13488 break;
13489 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13490 {
4b06377f
L
13491 if (rex & REX_W)
13492 *obufp++ = 'q';
52b15da3 13493 else
4b06377f
L
13494 {
13495 if (sizeflag & DFLAG)
13496 *obufp++ = 'l';
13497 else
13498 *obufp++ = 'w';
13499 used_prefixes |= (prefixes & PREFIX_DATA);
13500 }
13501 }
13502 }
13503 else
13504 {
13505 if (l != 1
13506 || len != 2
13507 || last[0] != 'L')
13508 {
13509 SAVE_LAST (*p);
13510 break;
52b15da3 13511 }
4b06377f
L
13512
13513 if (address_mode == mode_64bit
13514 && !(prefixes & PREFIX_ADDR))
13515 {
13516 *obufp++ = 'a';
13517 *obufp++ = 'b';
13518 *obufp++ = 's';
13519 }
13520
13521 goto case_S;
252b5132 13522 }
252b5132 13523 break;
041bd2e0 13524 case 'X':
c0f3af97
L
13525 if (l != 0 || len != 1)
13526 {
13527 SAVE_LAST (*p);
13528 break;
13529 }
13530 if (need_vex && vex.prefix)
13531 {
13532 if (vex.prefix == DATA_PREFIX_OPCODE)
13533 *obufp++ = 'd';
13534 else
13535 *obufp++ = 's';
13536 }
041bd2e0 13537 else
f16cd0d5
L
13538 {
13539 if (prefixes & PREFIX_DATA)
13540 *obufp++ = 'd';
13541 else
13542 *obufp++ = 's';
13543 used_prefixes |= (prefixes & PREFIX_DATA);
13544 }
041bd2e0 13545 break;
76f227a5 13546 case 'Y':
c0f3af97 13547 if (l == 0 && len == 1)
76f227a5 13548 {
c0f3af97
L
13549 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13550 break;
13551 if (rex & REX_W)
13552 {
13553 USED_REX (REX_W);
13554 *obufp++ = 'q';
13555 }
13556 break;
13557 }
13558 else
13559 {
13560 if (l != 1 || len != 2 || last[0] != 'X')
13561 {
13562 SAVE_LAST (*p);
13563 break;
13564 }
13565 if (!need_vex)
13566 abort ();
13567 if (intel_syntax
13568 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13569 break;
13570 switch (vex.length)
13571 {
13572 case 128:
13573 *obufp++ = 'x';
13574 break;
13575 case 256:
13576 *obufp++ = 'y';
13577 break;
13578 default:
13579 abort ();
13580 }
76f227a5
JH
13581 }
13582 break;
252b5132 13583 case 'W':
0bfee649 13584 if (l == 0 && len == 1)
a35ca55a 13585 {
0bfee649
L
13586 /* operand size flag for cwtl, cbtw */
13587 USED_REX (REX_W);
13588 if (rex & REX_W)
13589 {
13590 if (intel_syntax)
13591 *obufp++ = 'd';
13592 else
13593 *obufp++ = 'l';
13594 }
13595 else if (sizeflag & DFLAG)
13596 *obufp++ = 'w';
a35ca55a 13597 else
0bfee649
L
13598 *obufp++ = 'b';
13599 if (!(rex & REX_W))
13600 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13601 }
252b5132 13602 else
0bfee649 13603 {
6c30d220
L
13604 if (l != 1
13605 || len != 2
13606 || (last[0] != 'X'
13607 && last[0] != 'L'))
0bfee649
L
13608 {
13609 SAVE_LAST (*p);
13610 break;
13611 }
13612 if (!need_vex)
13613 abort ();
6c30d220
L
13614 if (last[0] == 'X')
13615 *obufp++ = vex.w ? 'd': 's';
13616 else
13617 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13618 }
252b5132
RH
13619 break;
13620 }
9306ca4a 13621 alt = 0;
252b5132
RH
13622 }
13623 *obufp = 0;
ea397f5b 13624 mnemonicendp = obufp;
6439fc28 13625 return 0;
252b5132
RH
13626}
13627
13628static void
26ca5450 13629oappend (const char *s)
252b5132 13630{
ea397f5b 13631 obufp = stpcpy (obufp, s);
252b5132
RH
13632}
13633
13634static void
26ca5450 13635append_seg (void)
252b5132
RH
13636{
13637 if (prefixes & PREFIX_CS)
7d421014 13638 {
7d421014 13639 used_prefixes |= PREFIX_CS;
9ce09ba2 13640 oappend_maybe_intel ("%cs:");
7d421014 13641 }
252b5132 13642 if (prefixes & PREFIX_DS)
7d421014 13643 {
7d421014 13644 used_prefixes |= PREFIX_DS;
9ce09ba2 13645 oappend_maybe_intel ("%ds:");
7d421014 13646 }
252b5132 13647 if (prefixes & PREFIX_SS)
7d421014 13648 {
7d421014 13649 used_prefixes |= PREFIX_SS;
9ce09ba2 13650 oappend_maybe_intel ("%ss:");
7d421014 13651 }
252b5132 13652 if (prefixes & PREFIX_ES)
7d421014 13653 {
7d421014 13654 used_prefixes |= PREFIX_ES;
9ce09ba2 13655 oappend_maybe_intel ("%es:");
7d421014 13656 }
252b5132 13657 if (prefixes & PREFIX_FS)
7d421014 13658 {
7d421014 13659 used_prefixes |= PREFIX_FS;
9ce09ba2 13660 oappend_maybe_intel ("%fs:");
7d421014 13661 }
252b5132 13662 if (prefixes & PREFIX_GS)
7d421014 13663 {
7d421014 13664 used_prefixes |= PREFIX_GS;
9ce09ba2 13665 oappend_maybe_intel ("%gs:");
7d421014 13666 }
252b5132
RH
13667}
13668
13669static void
26ca5450 13670OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13671{
13672 if (!intel_syntax)
13673 oappend ("*");
13674 OP_E (bytemode, sizeflag);
13675}
13676
52b15da3 13677static void
26ca5450 13678print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13679{
cb712a9e 13680 if (address_mode == mode_64bit)
52b15da3
JH
13681 {
13682 if (hex)
13683 {
13684 char tmp[30];
13685 int i;
13686 buf[0] = '0';
13687 buf[1] = 'x';
13688 sprintf_vma (tmp, disp);
6608db57 13689 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13690 strcpy (buf + 2, tmp + i);
13691 }
13692 else
13693 {
13694 bfd_signed_vma v = disp;
13695 char tmp[30];
13696 int i;
13697 if (v < 0)
13698 {
13699 *(buf++) = '-';
13700 v = -disp;
6608db57 13701 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13702 if (v < 0)
13703 {
13704 strcpy (buf, "9223372036854775808");
13705 return;
13706 }
13707 }
13708 if (!v)
13709 {
13710 strcpy (buf, "0");
13711 return;
13712 }
13713
13714 i = 0;
13715 tmp[29] = 0;
13716 while (v)
13717 {
6608db57 13718 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13719 v /= 10;
13720 i++;
13721 }
13722 strcpy (buf, tmp + 29 - i);
13723 }
13724 }
13725 else
13726 {
13727 if (hex)
13728 sprintf (buf, "0x%x", (unsigned int) disp);
13729 else
13730 sprintf (buf, "%d", (int) disp);
13731 }
13732}
13733
5d669648
L
13734/* Put DISP in BUF as signed hex number. */
13735
13736static void
13737print_displacement (char *buf, bfd_vma disp)
13738{
13739 bfd_signed_vma val = disp;
13740 char tmp[30];
13741 int i, j = 0;
13742
13743 if (val < 0)
13744 {
13745 buf[j++] = '-';
13746 val = -disp;
13747
13748 /* Check for possible overflow. */
13749 if (val < 0)
13750 {
13751 switch (address_mode)
13752 {
13753 case mode_64bit:
13754 strcpy (buf + j, "0x8000000000000000");
13755 break;
13756 case mode_32bit:
13757 strcpy (buf + j, "0x80000000");
13758 break;
13759 case mode_16bit:
13760 strcpy (buf + j, "0x8000");
13761 break;
13762 }
13763 return;
13764 }
13765 }
13766
13767 buf[j++] = '0';
13768 buf[j++] = 'x';
13769
0af1713e 13770 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13771 for (i = 0; tmp[i] == '0'; i++)
13772 continue;
13773 if (tmp[i] == '\0')
13774 i--;
13775 strcpy (buf + j, tmp + i);
13776}
13777
3f31e633
JB
13778static void
13779intel_operand_size (int bytemode, int sizeflag)
13780{
43234a1e
L
13781 if (vex.evex
13782 && vex.b
13783 && (bytemode == x_mode
13784 || bytemode == evex_half_bcst_xmmq_mode))
13785 {
13786 if (vex.w)
13787 oappend ("QWORD PTR ");
13788 else
13789 oappend ("DWORD PTR ");
13790 return;
13791 }
3f31e633
JB
13792 switch (bytemode)
13793 {
13794 case b_mode:
b6169b20 13795 case b_swap_mode:
42903f7f 13796 case dqb_mode:
3f31e633
JB
13797 oappend ("BYTE PTR ");
13798 break;
13799 case w_mode:
13800 case dqw_mode:
13801 oappend ("WORD PTR ");
13802 break;
1a114b12 13803 case stack_v_mode:
7bb15c6f 13804 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13805 {
13806 oappend ("QWORD PTR ");
3f31e633
JB
13807 break;
13808 }
13809 /* FALLTHRU */
13810 case v_mode:
b6169b20 13811 case v_swap_mode:
3f31e633 13812 case dq_mode:
161a04f6
L
13813 USED_REX (REX_W);
13814 if (rex & REX_W)
3f31e633 13815 oappend ("QWORD PTR ");
3f31e633 13816 else
f16cd0d5
L
13817 {
13818 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13819 oappend ("DWORD PTR ");
13820 else
13821 oappend ("WORD PTR ");
13822 used_prefixes |= (prefixes & PREFIX_DATA);
13823 }
3f31e633 13824 break;
52fd6d94 13825 case z_mode:
161a04f6 13826 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13827 *obufp++ = 'D';
13828 oappend ("WORD PTR ");
161a04f6 13829 if (!(rex & REX_W))
52fd6d94
JB
13830 used_prefixes |= (prefixes & PREFIX_DATA);
13831 break;
34b772a6
JB
13832 case a_mode:
13833 if (sizeflag & DFLAG)
13834 oappend ("QWORD PTR ");
13835 else
13836 oappend ("DWORD PTR ");
13837 used_prefixes |= (prefixes & PREFIX_DATA);
13838 break;
3f31e633 13839 case d_mode:
539f890d
L
13840 case d_scalar_mode:
13841 case d_scalar_swap_mode:
fa99fab2 13842 case d_swap_mode:
42903f7f 13843 case dqd_mode:
3f31e633
JB
13844 oappend ("DWORD PTR ");
13845 break;
13846 case q_mode:
539f890d
L
13847 case q_scalar_mode:
13848 case q_scalar_swap_mode:
b6169b20 13849 case q_swap_mode:
3f31e633
JB
13850 oappend ("QWORD PTR ");
13851 break;
13852 case m_mode:
cb712a9e 13853 if (address_mode == mode_64bit)
3f31e633
JB
13854 oappend ("QWORD PTR ");
13855 else
13856 oappend ("DWORD PTR ");
13857 break;
13858 case f_mode:
13859 if (sizeflag & DFLAG)
13860 oappend ("FWORD PTR ");
13861 else
13862 oappend ("DWORD PTR ");
13863 used_prefixes |= (prefixes & PREFIX_DATA);
13864 break;
13865 case t_mode:
13866 oappend ("TBYTE PTR ");
13867 break;
13868 case x_mode:
b6169b20 13869 case x_swap_mode:
43234a1e
L
13870 case evex_x_gscat_mode:
13871 case evex_x_nobcst_mode:
c0f3af97
L
13872 if (need_vex)
13873 {
13874 switch (vex.length)
13875 {
13876 case 128:
13877 oappend ("XMMWORD PTR ");
13878 break;
13879 case 256:
13880 oappend ("YMMWORD PTR ");
13881 break;
43234a1e
L
13882 case 512:
13883 oappend ("ZMMWORD PTR ");
13884 break;
c0f3af97
L
13885 default:
13886 abort ();
13887 }
13888 }
13889 else
13890 oappend ("XMMWORD PTR ");
13891 break;
13892 case xmm_mode:
3f31e633
JB
13893 oappend ("XMMWORD PTR ");
13894 break;
43234a1e
L
13895 case ymm_mode:
13896 oappend ("YMMWORD PTR ");
13897 break;
c0f3af97 13898 case xmmq_mode:
43234a1e 13899 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13900 if (!need_vex)
13901 abort ();
13902
13903 switch (vex.length)
13904 {
13905 case 128:
13906 oappend ("QWORD PTR ");
13907 break;
13908 case 256:
13909 oappend ("XMMWORD PTR ");
13910 break;
43234a1e
L
13911 case 512:
13912 oappend ("YMMWORD PTR ");
13913 break;
c0f3af97
L
13914 default:
13915 abort ();
13916 }
13917 break;
6c30d220
L
13918 case xmm_mb_mode:
13919 if (!need_vex)
13920 abort ();
13921
13922 switch (vex.length)
13923 {
13924 case 128:
13925 case 256:
43234a1e 13926 case 512:
6c30d220
L
13927 oappend ("BYTE PTR ");
13928 break;
13929 default:
13930 abort ();
13931 }
13932 break;
13933 case xmm_mw_mode:
13934 if (!need_vex)
13935 abort ();
13936
13937 switch (vex.length)
13938 {
13939 case 128:
13940 case 256:
43234a1e 13941 case 512:
6c30d220
L
13942 oappend ("WORD PTR ");
13943 break;
13944 default:
13945 abort ();
13946 }
13947 break;
13948 case xmm_md_mode:
13949 if (!need_vex)
13950 abort ();
13951
13952 switch (vex.length)
13953 {
13954 case 128:
13955 case 256:
43234a1e 13956 case 512:
6c30d220
L
13957 oappend ("DWORD PTR ");
13958 break;
13959 default:
13960 abort ();
13961 }
13962 break;
13963 case xmm_mq_mode:
13964 if (!need_vex)
13965 abort ();
13966
13967 switch (vex.length)
13968 {
13969 case 128:
13970 case 256:
43234a1e 13971 case 512:
6c30d220
L
13972 oappend ("QWORD PTR ");
13973 break;
13974 default:
13975 abort ();
13976 }
13977 break;
13978 case xmmdw_mode:
13979 if (!need_vex)
13980 abort ();
13981
13982 switch (vex.length)
13983 {
13984 case 128:
13985 oappend ("WORD PTR ");
13986 break;
13987 case 256:
13988 oappend ("DWORD PTR ");
13989 break;
43234a1e
L
13990 case 512:
13991 oappend ("QWORD PTR ");
13992 break;
6c30d220
L
13993 default:
13994 abort ();
13995 }
13996 break;
13997 case xmmqd_mode:
13998 if (!need_vex)
13999 abort ();
14000
14001 switch (vex.length)
14002 {
14003 case 128:
14004 oappend ("DWORD PTR ");
14005 break;
14006 case 256:
14007 oappend ("QWORD PTR ");
14008 break;
43234a1e
L
14009 case 512:
14010 oappend ("XMMWORD PTR ");
14011 break;
6c30d220
L
14012 default:
14013 abort ();
14014 }
14015 break;
c0f3af97
L
14016 case ymmq_mode:
14017 if (!need_vex)
14018 abort ();
14019
14020 switch (vex.length)
14021 {
14022 case 128:
14023 oappend ("QWORD PTR ");
14024 break;
14025 case 256:
14026 oappend ("YMMWORD PTR ");
14027 break;
43234a1e
L
14028 case 512:
14029 oappend ("ZMMWORD PTR ");
14030 break;
c0f3af97
L
14031 default:
14032 abort ();
14033 }
14034 break;
6c30d220
L
14035 case ymmxmm_mode:
14036 if (!need_vex)
14037 abort ();
14038
14039 switch (vex.length)
14040 {
14041 case 128:
14042 case 256:
14043 oappend ("XMMWORD PTR ");
14044 break;
14045 default:
14046 abort ();
14047 }
14048 break;
fb9c77c7
L
14049 case o_mode:
14050 oappend ("OWORD PTR ");
14051 break;
43234a1e 14052 case xmm_mdq_mode:
0bfee649 14053 case vex_w_dq_mode:
1c480963 14054 case vex_scalar_w_dq_mode:
0bfee649
L
14055 if (!need_vex)
14056 abort ();
14057
14058 if (vex.w)
14059 oappend ("QWORD PTR ");
14060 else
14061 oappend ("DWORD PTR ");
14062 break;
43234a1e
L
14063 case vex_vsib_d_w_dq_mode:
14064 case vex_vsib_q_w_dq_mode:
14065 if (!need_vex)
14066 abort ();
14067
14068 if (!vex.evex)
14069 {
14070 if (vex.w)
14071 oappend ("QWORD PTR ");
14072 else
14073 oappend ("DWORD PTR ");
14074 }
14075 else
14076 {
14077 if (vex.length != 512)
14078 abort ();
14079 oappend ("ZMMWORD PTR ");
14080 }
14081 break;
14082 case mask_mode:
14083 if (!need_vex)
14084 abort ();
14085 /* Currently the only instructions, which allows either mask or
14086 memory operand, are AVX512's KMOVW instructions. They need
14087 Word-sized operand. */
14088 if (vex.w || vex.length != 128)
14089 abort ();
14090 oappend ("WORD PTR ");
14091 break;
6c75cc62 14092 case v_bnd_mode:
3f31e633
JB
14093 default:
14094 break;
14095 }
14096}
14097
252b5132 14098static void
c0f3af97 14099OP_E_register (int bytemode, int sizeflag)
252b5132 14100{
c0f3af97
L
14101 int reg = modrm.rm;
14102 const char **names;
252b5132 14103
c0f3af97
L
14104 USED_REX (REX_B);
14105 if ((rex & REX_B))
14106 reg += 8;
252b5132 14107
b6169b20
L
14108 if ((sizeflag & SUFFIX_ALWAYS)
14109 && (bytemode == b_swap_mode || bytemode == v_swap_mode))
14110 swap_operand ();
14111
c0f3af97 14112 switch (bytemode)
252b5132 14113 {
c0f3af97 14114 case b_mode:
b6169b20 14115 case b_swap_mode:
c0f3af97
L
14116 USED_REX (0);
14117 if (rex)
14118 names = names8rex;
14119 else
14120 names = names8;
14121 break;
14122 case w_mode:
14123 names = names16;
14124 break;
14125 case d_mode:
14126 names = names32;
14127 break;
14128 case q_mode:
14129 names = names64;
14130 break;
14131 case m_mode:
6c75cc62 14132 case v_bnd_mode:
c0f3af97
L
14133 names = address_mode == mode_64bit ? names64 : names32;
14134 break;
7e8b059b
L
14135 case bnd_mode:
14136 names = names_bnd;
14137 break;
c0f3af97 14138 case stack_v_mode:
7bb15c6f 14139 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 14140 {
c0f3af97 14141 names = names64;
252b5132 14142 break;
252b5132 14143 }
c0f3af97
L
14144 bytemode = v_mode;
14145 /* FALLTHRU */
14146 case v_mode:
b6169b20 14147 case v_swap_mode:
c0f3af97
L
14148 case dq_mode:
14149 case dqb_mode:
14150 case dqd_mode:
14151 case dqw_mode:
14152 USED_REX (REX_W);
14153 if (rex & REX_W)
14154 names = names64;
c0f3af97 14155 else
f16cd0d5 14156 {
7bb15c6f 14157 if ((sizeflag & DFLAG)
f16cd0d5
L
14158 || (bytemode != v_mode
14159 && bytemode != v_swap_mode))
14160 names = names32;
14161 else
14162 names = names16;
14163 used_prefixes |= (prefixes & PREFIX_DATA);
14164 }
c0f3af97 14165 break;
43234a1e
L
14166 case mask_mode:
14167 names = names_mask;
14168 break;
c0f3af97
L
14169 case 0:
14170 return;
14171 default:
14172 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
14173 return;
14174 }
c0f3af97
L
14175 oappend (names[reg]);
14176}
14177
14178static void
c1e679ec 14179OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
14180{
14181 bfd_vma disp = 0;
14182 int add = (rex & REX_B) ? 8 : 0;
14183 int riprel = 0;
43234a1e
L
14184 int shift;
14185
14186 if (vex.evex)
14187 {
14188 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14189 if (vex.b
14190 && bytemode != x_mode
14191 && bytemode != evex_half_bcst_xmmq_mode)
14192 {
14193 BadOp ();
14194 return;
14195 }
14196 switch (bytemode)
14197 {
14198 case vex_vsib_d_w_dq_mode:
14199 case evex_x_gscat_mode:
14200 case xmm_mdq_mode:
14201 shift = vex.w ? 3 : 2;
14202 break;
14203 case vex_vsib_q_w_dq_mode:
14204 shift = 3;
14205 break;
14206 case x_mode:
14207 case evex_half_bcst_xmmq_mode:
14208 if (vex.b)
14209 {
14210 shift = vex.w ? 3 : 2;
14211 break;
14212 }
14213 /* Fall through if vex.b == 0. */
14214 case xmmqd_mode:
14215 case xmmdw_mode:
14216 case xmmq_mode:
14217 case ymmq_mode:
14218 case evex_x_nobcst_mode:
14219 case x_swap_mode:
14220 switch (vex.length)
14221 {
14222 case 128:
14223 shift = 4;
14224 break;
14225 case 256:
14226 shift = 5;
14227 break;
14228 case 512:
14229 shift = 6;
14230 break;
14231 default:
14232 abort ();
14233 }
14234 break;
14235 case ymm_mode:
14236 shift = 5;
14237 break;
14238 case xmm_mode:
14239 shift = 4;
14240 break;
14241 case xmm_mq_mode:
14242 case q_mode:
14243 case q_scalar_mode:
14244 case q_swap_mode:
14245 case q_scalar_swap_mode:
14246 shift = 3;
14247 break;
14248 case dqd_mode:
14249 case xmm_md_mode:
14250 case d_mode:
14251 case d_scalar_mode:
14252 case d_swap_mode:
14253 case d_scalar_swap_mode:
14254 shift = 2;
14255 break;
14256 case xmm_mw_mode:
14257 shift = 1;
14258 break;
14259 case xmm_mb_mode:
14260 shift = 0;
14261 break;
14262 default:
14263 abort ();
14264 }
14265 /* Make necessary corrections to shift for modes that need it.
14266 For these modes we currently have shift 4, 5 or 6 depending on
14267 vex.length (it corresponds to xmmword, ymmword or zmmword
14268 operand). We might want to make it 3, 4 or 5 (e.g. for
14269 xmmq_mode). In case of broadcast enabled the corrections
14270 aren't needed, as element size is always 32 or 64 bits. */
14271 if (bytemode == xmmq_mode
14272 || (bytemode == evex_half_bcst_xmmq_mode
14273 && !vex.b))
14274 shift -= 1;
14275 else if (bytemode == xmmqd_mode)
14276 shift -= 2;
14277 else if (bytemode == xmmdw_mode)
14278 shift -= 3;
14279 }
14280 else
14281 shift = 0;
252b5132 14282
c0f3af97 14283 USED_REX (REX_B);
3f31e633
JB
14284 if (intel_syntax)
14285 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14286 append_seg ();
14287
5d669648 14288 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14289 {
5d669648
L
14290 /* 32/64 bit address mode */
14291 int havedisp;
252b5132
RH
14292 int havesib;
14293 int havebase;
0f7da397 14294 int haveindex;
20afcfb7 14295 int needindex;
82c18208 14296 int base, rbase;
91d6fa6a 14297 int vindex = 0;
252b5132 14298 int scale = 0;
7e8b059b
L
14299 int addr32flag = !((sizeflag & AFLAG)
14300 || bytemode == v_bnd_mode
14301 || bytemode == bnd_mode);
6c30d220
L
14302 const char **indexes64 = names64;
14303 const char **indexes32 = names32;
252b5132
RH
14304
14305 havesib = 0;
14306 havebase = 1;
0f7da397 14307 haveindex = 0;
7967e09e 14308 base = modrm.rm;
252b5132
RH
14309
14310 if (base == 4)
14311 {
14312 havesib = 1;
dfc8cf43 14313 vindex = sib.index;
161a04f6
L
14314 USED_REX (REX_X);
14315 if (rex & REX_X)
91d6fa6a 14316 vindex += 8;
6c30d220
L
14317 switch (bytemode)
14318 {
14319 case vex_vsib_d_w_dq_mode:
14320 case vex_vsib_q_w_dq_mode:
14321 if (!need_vex)
14322 abort ();
43234a1e
L
14323 if (vex.evex)
14324 {
14325 if (!vex.v)
14326 vindex += 16;
14327 }
6c30d220
L
14328
14329 haveindex = 1;
14330 switch (vex.length)
14331 {
14332 case 128:
7bb15c6f 14333 indexes64 = indexes32 = names_xmm;
6c30d220
L
14334 break;
14335 case 256:
14336 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
7bb15c6f 14337 indexes64 = indexes32 = names_ymm;
6c30d220 14338 else
7bb15c6f 14339 indexes64 = indexes32 = names_xmm;
6c30d220 14340 break;
43234a1e
L
14341 case 512:
14342 if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
14343 indexes64 = indexes32 = names_zmm;
14344 else
14345 indexes64 = indexes32 = names_ymm;
14346 break;
6c30d220
L
14347 default:
14348 abort ();
14349 }
14350 break;
14351 default:
14352 haveindex = vindex != 4;
14353 break;
14354 }
14355 scale = sib.scale;
14356 base = sib.base;
252b5132
RH
14357 codep++;
14358 }
82c18208 14359 rbase = base + add;
252b5132 14360
7967e09e 14361 switch (modrm.mod)
252b5132
RH
14362 {
14363 case 0:
82c18208 14364 if (base == 5)
252b5132
RH
14365 {
14366 havebase = 0;
cb712a9e 14367 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14368 riprel = 1;
14369 disp = get32s ();
252b5132
RH
14370 }
14371 break;
14372 case 1:
14373 FETCH_DATA (the_info, codep + 1);
14374 disp = *codep++;
14375 if ((disp & 0x80) != 0)
14376 disp -= 0x100;
43234a1e
L
14377 if (vex.evex && shift > 0)
14378 disp <<= shift;
252b5132
RH
14379 break;
14380 case 2:
52b15da3 14381 disp = get32s ();
252b5132
RH
14382 break;
14383 }
14384
20afcfb7
L
14385 /* In 32bit mode, we need index register to tell [offset] from
14386 [eiz*1 + offset]. */
14387 needindex = (havesib
14388 && !havebase
14389 && !haveindex
14390 && address_mode == mode_32bit);
14391 havedisp = (havebase
14392 || needindex
14393 || (havesib && (haveindex || scale != 0)));
5d669648 14394
252b5132 14395 if (!intel_syntax)
82c18208 14396 if (modrm.mod != 0 || base == 5)
db6eb5be 14397 {
5d669648
L
14398 if (havedisp || riprel)
14399 print_displacement (scratchbuf, disp);
14400 else
14401 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14402 oappend (scratchbuf);
52b15da3
JH
14403 if (riprel)
14404 {
14405 set_op (disp, 1);
87767711 14406 oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
52b15da3 14407 }
db6eb5be 14408 }
2da11e11 14409
7e8b059b
L
14410 if ((havebase || haveindex || riprel)
14411 && (bytemode != v_bnd_mode)
14412 && (bytemode != bnd_mode))
87767711
JB
14413 used_prefixes |= PREFIX_ADDR;
14414
5d669648 14415 if (havedisp || (intel_syntax && riprel))
252b5132 14416 {
252b5132 14417 *obufp++ = open_char;
52b15da3 14418 if (intel_syntax && riprel)
185b1163
L
14419 {
14420 set_op (disp, 1);
87767711 14421 oappend (sizeflag & AFLAG ? "rip" : "eip");
185b1163 14422 }
db6eb5be 14423 *obufp = '\0';
252b5132 14424 if (havebase)
7e8b059b 14425 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14426 ? names64[rbase] : names32[rbase]);
252b5132
RH
14427 if (havesib)
14428 {
db51cc60
L
14429 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14430 print index to tell base + index from base. */
14431 if (scale != 0
20afcfb7 14432 || needindex
db51cc60
L
14433 || haveindex
14434 || (havebase && base != ESP_REG_NUM))
252b5132 14435 {
9306ca4a 14436 if (!intel_syntax || havebase)
db6eb5be 14437 {
9306ca4a
JB
14438 *obufp++ = separator_char;
14439 *obufp = '\0';
db6eb5be 14440 }
db51cc60 14441 if (haveindex)
7e8b059b 14442 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14443 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14444 else
7e8b059b 14445 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14446 ? index64 : index32);
14447
db6eb5be
AM
14448 *obufp++ = scale_char;
14449 *obufp = '\0';
14450 sprintf (scratchbuf, "%d", 1 << scale);
14451 oappend (scratchbuf);
14452 }
252b5132 14453 }
185b1163 14454 if (intel_syntax
82c18208 14455 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14456 {
db51cc60 14457 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14458 {
14459 *obufp++ = '+';
14460 *obufp = '\0';
14461 }
05203043 14462 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14463 {
14464 *obufp++ = '-';
14465 *obufp = '\0';
14466 disp = - (bfd_signed_vma) disp;
14467 }
14468
db51cc60
L
14469 if (havedisp)
14470 print_displacement (scratchbuf, disp);
14471 else
14472 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14473 oappend (scratchbuf);
14474 }
252b5132
RH
14475
14476 *obufp++ = close_char;
db6eb5be 14477 *obufp = '\0';
252b5132
RH
14478 }
14479 else if (intel_syntax)
db6eb5be 14480 {
82c18208 14481 if (modrm.mod != 0 || base == 5)
db6eb5be 14482 {
252b5132
RH
14483 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14484 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14485 ;
14486 else
14487 {
d708bcba 14488 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14489 oappend (":");
14490 }
52b15da3 14491 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14492 oappend (scratchbuf);
14493 }
14494 }
252b5132
RH
14495 }
14496 else
f16cd0d5
L
14497 {
14498 /* 16 bit address mode */
14499 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14500 switch (modrm.mod)
252b5132
RH
14501 {
14502 case 0:
7967e09e 14503 if (modrm.rm == 6)
252b5132
RH
14504 {
14505 disp = get16 ();
14506 if ((disp & 0x8000) != 0)
14507 disp -= 0x10000;
14508 }
14509 break;
14510 case 1:
14511 FETCH_DATA (the_info, codep + 1);
14512 disp = *codep++;
14513 if ((disp & 0x80) != 0)
14514 disp -= 0x100;
14515 break;
14516 case 2:
14517 disp = get16 ();
14518 if ((disp & 0x8000) != 0)
14519 disp -= 0x10000;
14520 break;
14521 }
14522
14523 if (!intel_syntax)
7967e09e 14524 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14525 {
5d669648 14526 print_displacement (scratchbuf, disp);
db6eb5be
AM
14527 oappend (scratchbuf);
14528 }
252b5132 14529
7967e09e 14530 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14531 {
14532 *obufp++ = open_char;
db6eb5be 14533 *obufp = '\0';
7967e09e 14534 oappend (index16[modrm.rm]);
5d669648
L
14535 if (intel_syntax
14536 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14537 {
5d669648 14538 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14539 {
14540 *obufp++ = '+';
14541 *obufp = '\0';
14542 }
7967e09e 14543 else if (modrm.mod != 1)
3d456fa1
JB
14544 {
14545 *obufp++ = '-';
14546 *obufp = '\0';
14547 disp = - (bfd_signed_vma) disp;
14548 }
14549
5d669648 14550 print_displacement (scratchbuf, disp);
3d456fa1
JB
14551 oappend (scratchbuf);
14552 }
14553
db6eb5be
AM
14554 *obufp++ = close_char;
14555 *obufp = '\0';
252b5132 14556 }
3d456fa1
JB
14557 else if (intel_syntax)
14558 {
14559 if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14560 | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14561 ;
14562 else
14563 {
14564 oappend (names_seg[ds_reg - es_reg]);
14565 oappend (":");
14566 }
14567 print_operand_value (scratchbuf, 1, disp & 0xffff);
14568 oappend (scratchbuf);
14569 }
252b5132 14570 }
43234a1e
L
14571 if (vex.evex && vex.b
14572 && (bytemode == x_mode
14573 || bytemode == evex_half_bcst_xmmq_mode))
14574 {
14575 if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
14576 oappend ("{1to8}");
14577 else
14578 oappend ("{1to16}");
14579 }
252b5132
RH
14580}
14581
c0f3af97 14582static void
8b3f93e7 14583OP_E (int bytemode, int sizeflag)
c0f3af97
L
14584{
14585 /* Skip mod/rm byte. */
14586 MODRM_CHECK;
14587 codep++;
14588
14589 if (modrm.mod == 3)
14590 OP_E_register (bytemode, sizeflag);
14591 else
c1e679ec 14592 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14593}
14594
252b5132 14595static void
26ca5450 14596OP_G (int bytemode, int sizeflag)
252b5132 14597{
52b15da3 14598 int add = 0;
161a04f6
L
14599 USED_REX (REX_R);
14600 if (rex & REX_R)
52b15da3 14601 add += 8;
252b5132
RH
14602 switch (bytemode)
14603 {
14604 case b_mode:
52b15da3
JH
14605 USED_REX (0);
14606 if (rex)
7967e09e 14607 oappend (names8rex[modrm.reg + add]);
52b15da3 14608 else
7967e09e 14609 oappend (names8[modrm.reg + add]);
252b5132
RH
14610 break;
14611 case w_mode:
7967e09e 14612 oappend (names16[modrm.reg + add]);
252b5132
RH
14613 break;
14614 case d_mode:
7967e09e 14615 oappend (names32[modrm.reg + add]);
52b15da3
JH
14616 break;
14617 case q_mode:
7967e09e 14618 oappend (names64[modrm.reg + add]);
252b5132 14619 break;
7e8b059b
L
14620 case bnd_mode:
14621 oappend (names_bnd[modrm.reg]);
14622 break;
252b5132 14623 case v_mode:
9306ca4a 14624 case dq_mode:
42903f7f
L
14625 case dqb_mode:
14626 case dqd_mode:
9306ca4a 14627 case dqw_mode:
161a04f6
L
14628 USED_REX (REX_W);
14629 if (rex & REX_W)
7967e09e 14630 oappend (names64[modrm.reg + add]);
252b5132 14631 else
f16cd0d5
L
14632 {
14633 if ((sizeflag & DFLAG) || bytemode != v_mode)
14634 oappend (names32[modrm.reg + add]);
14635 else
14636 oappend (names16[modrm.reg + add]);
14637 used_prefixes |= (prefixes & PREFIX_DATA);
14638 }
252b5132 14639 break;
90700ea2 14640 case m_mode:
cb712a9e 14641 if (address_mode == mode_64bit)
7967e09e 14642 oappend (names64[modrm.reg + add]);
90700ea2 14643 else
7967e09e 14644 oappend (names32[modrm.reg + add]);
90700ea2 14645 break;
43234a1e
L
14646 case mask_mode:
14647 oappend (names_mask[modrm.reg + add]);
14648 break;
252b5132
RH
14649 default:
14650 oappend (INTERNAL_DISASSEMBLER_ERROR);
14651 break;
14652 }
14653}
14654
52b15da3 14655static bfd_vma
26ca5450 14656get64 (void)
52b15da3 14657{
5dd0794d 14658 bfd_vma x;
52b15da3 14659#ifdef BFD64
5dd0794d
AM
14660 unsigned int a;
14661 unsigned int b;
14662
52b15da3
JH
14663 FETCH_DATA (the_info, codep + 8);
14664 a = *codep++ & 0xff;
14665 a |= (*codep++ & 0xff) << 8;
14666 a |= (*codep++ & 0xff) << 16;
14667 a |= (*codep++ & 0xff) << 24;
5dd0794d 14668 b = *codep++ & 0xff;
52b15da3
JH
14669 b |= (*codep++ & 0xff) << 8;
14670 b |= (*codep++ & 0xff) << 16;
14671 b |= (*codep++ & 0xff) << 24;
14672 x = a + ((bfd_vma) b << 32);
14673#else
6608db57 14674 abort ();
5dd0794d 14675 x = 0;
52b15da3
JH
14676#endif
14677 return x;
14678}
14679
14680static bfd_signed_vma
26ca5450 14681get32 (void)
252b5132 14682{
52b15da3 14683 bfd_signed_vma x = 0;
252b5132
RH
14684
14685 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14686 x = *codep++ & (bfd_signed_vma) 0xff;
14687 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14688 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14689 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14690 return x;
14691}
14692
14693static bfd_signed_vma
26ca5450 14694get32s (void)
52b15da3
JH
14695{
14696 bfd_signed_vma x = 0;
14697
14698 FETCH_DATA (the_info, codep + 4);
14699 x = *codep++ & (bfd_signed_vma) 0xff;
14700 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14701 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14702 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14703
14704 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14705
252b5132
RH
14706 return x;
14707}
14708
14709static int
26ca5450 14710get16 (void)
252b5132
RH
14711{
14712 int x = 0;
14713
14714 FETCH_DATA (the_info, codep + 2);
14715 x = *codep++ & 0xff;
14716 x |= (*codep++ & 0xff) << 8;
14717 return x;
14718}
14719
14720static void
26ca5450 14721set_op (bfd_vma op, int riprel)
252b5132
RH
14722{
14723 op_index[op_ad] = op_ad;
cb712a9e 14724 if (address_mode == mode_64bit)
7081ff04
AJ
14725 {
14726 op_address[op_ad] = op;
14727 op_riprel[op_ad] = riprel;
14728 }
14729 else
14730 {
14731 /* Mask to get a 32-bit address. */
14732 op_address[op_ad] = op & 0xffffffff;
14733 op_riprel[op_ad] = riprel & 0xffffffff;
14734 }
252b5132
RH
14735}
14736
14737static void
26ca5450 14738OP_REG (int code, int sizeflag)
252b5132 14739{
2da11e11 14740 const char *s;
9b60702d 14741 int add;
de882298
RM
14742
14743 switch (code)
14744 {
14745 case es_reg: case ss_reg: case cs_reg:
14746 case ds_reg: case fs_reg: case gs_reg:
14747 oappend (names_seg[code - es_reg]);
14748 return;
14749 }
14750
161a04f6
L
14751 USED_REX (REX_B);
14752 if (rex & REX_B)
52b15da3 14753 add = 8;
9b60702d
L
14754 else
14755 add = 0;
52b15da3
JH
14756
14757 switch (code)
14758 {
52b15da3
JH
14759 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14760 case sp_reg: case bp_reg: case si_reg: case di_reg:
14761 s = names16[code - ax_reg + add];
14762 break;
52b15da3
JH
14763 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14764 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14765 USED_REX (0);
14766 if (rex)
14767 s = names8rex[code - al_reg + add];
14768 else
14769 s = names8[code - al_reg];
14770 break;
6439fc28
AM
14771 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14772 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14773 if (address_mode == mode_64bit
6c067bbb 14774 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14775 {
14776 s = names64[code - rAX_reg + add];
14777 break;
14778 }
14779 code += eAX_reg - rAX_reg;
6608db57 14780 /* Fall through. */
52b15da3
JH
14781 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14782 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14783 USED_REX (REX_W);
14784 if (rex & REX_W)
52b15da3 14785 s = names64[code - eAX_reg + add];
52b15da3 14786 else
f16cd0d5
L
14787 {
14788 if (sizeflag & DFLAG)
14789 s = names32[code - eAX_reg + add];
14790 else
14791 s = names16[code - eAX_reg + add];
14792 used_prefixes |= (prefixes & PREFIX_DATA);
14793 }
52b15da3 14794 break;
52b15da3
JH
14795 default:
14796 s = INTERNAL_DISASSEMBLER_ERROR;
14797 break;
14798 }
14799 oappend (s);
14800}
14801
14802static void
26ca5450 14803OP_IMREG (int code, int sizeflag)
52b15da3
JH
14804{
14805 const char *s;
252b5132
RH
14806
14807 switch (code)
14808 {
14809 case indir_dx_reg:
d708bcba 14810 if (intel_syntax)
52fd6d94 14811 s = "dx";
d708bcba 14812 else
db6eb5be 14813 s = "(%dx)";
252b5132
RH
14814 break;
14815 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14816 case sp_reg: case bp_reg: case si_reg: case di_reg:
14817 s = names16[code - ax_reg];
14818 break;
14819 case es_reg: case ss_reg: case cs_reg:
14820 case ds_reg: case fs_reg: case gs_reg:
14821 s = names_seg[code - es_reg];
14822 break;
14823 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14824 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14825 USED_REX (0);
14826 if (rex)
14827 s = names8rex[code - al_reg];
14828 else
14829 s = names8[code - al_reg];
252b5132
RH
14830 break;
14831 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14832 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14833 USED_REX (REX_W);
14834 if (rex & REX_W)
52b15da3 14835 s = names64[code - eAX_reg];
252b5132 14836 else
f16cd0d5
L
14837 {
14838 if (sizeflag & DFLAG)
14839 s = names32[code - eAX_reg];
14840 else
14841 s = names16[code - eAX_reg];
14842 used_prefixes |= (prefixes & PREFIX_DATA);
14843 }
252b5132 14844 break;
52fd6d94 14845 case z_mode_ax_reg:
161a04f6 14846 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14847 s = *names32;
14848 else
14849 s = *names16;
161a04f6 14850 if (!(rex & REX_W))
52fd6d94
JB
14851 used_prefixes |= (prefixes & PREFIX_DATA);
14852 break;
252b5132
RH
14853 default:
14854 s = INTERNAL_DISASSEMBLER_ERROR;
14855 break;
14856 }
14857 oappend (s);
14858}
14859
14860static void
26ca5450 14861OP_I (int bytemode, int sizeflag)
252b5132 14862{
52b15da3
JH
14863 bfd_signed_vma op;
14864 bfd_signed_vma mask = -1;
252b5132
RH
14865
14866 switch (bytemode)
14867 {
14868 case b_mode:
14869 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14870 op = *codep++;
14871 mask = 0xff;
14872 break;
14873 case q_mode:
cb712a9e 14874 if (address_mode == mode_64bit)
6439fc28
AM
14875 {
14876 op = get32s ();
14877 break;
14878 }
6608db57 14879 /* Fall through. */
252b5132 14880 case v_mode:
161a04f6
L
14881 USED_REX (REX_W);
14882 if (rex & REX_W)
52b15da3 14883 op = get32s ();
252b5132 14884 else
52b15da3 14885 {
f16cd0d5
L
14886 if (sizeflag & DFLAG)
14887 {
14888 op = get32 ();
14889 mask = 0xffffffff;
14890 }
14891 else
14892 {
14893 op = get16 ();
14894 mask = 0xfffff;
14895 }
14896 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14897 }
252b5132
RH
14898 break;
14899 case w_mode:
52b15da3 14900 mask = 0xfffff;
252b5132
RH
14901 op = get16 ();
14902 break;
9306ca4a
JB
14903 case const_1_mode:
14904 if (intel_syntax)
6c067bbb 14905 oappend ("1");
9306ca4a 14906 return;
252b5132
RH
14907 default:
14908 oappend (INTERNAL_DISASSEMBLER_ERROR);
14909 return;
14910 }
14911
52b15da3
JH
14912 op &= mask;
14913 scratchbuf[0] = '$';
d708bcba 14914 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14915 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14916 scratchbuf[0] = '\0';
14917}
14918
14919static void
26ca5450 14920OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14921{
14922 bfd_signed_vma op;
14923 bfd_signed_vma mask = -1;
14924
cb712a9e 14925 if (address_mode != mode_64bit)
6439fc28
AM
14926 {
14927 OP_I (bytemode, sizeflag);
14928 return;
14929 }
14930
52b15da3
JH
14931 switch (bytemode)
14932 {
14933 case b_mode:
14934 FETCH_DATA (the_info, codep + 1);
14935 op = *codep++;
14936 mask = 0xff;
14937 break;
14938 case v_mode:
161a04f6
L
14939 USED_REX (REX_W);
14940 if (rex & REX_W)
52b15da3 14941 op = get64 ();
52b15da3
JH
14942 else
14943 {
f16cd0d5
L
14944 if (sizeflag & DFLAG)
14945 {
14946 op = get32 ();
14947 mask = 0xffffffff;
14948 }
14949 else
14950 {
14951 op = get16 ();
14952 mask = 0xfffff;
14953 }
14954 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14955 }
52b15da3
JH
14956 break;
14957 case w_mode:
14958 mask = 0xfffff;
14959 op = get16 ();
14960 break;
14961 default:
14962 oappend (INTERNAL_DISASSEMBLER_ERROR);
14963 return;
14964 }
14965
14966 op &= mask;
14967 scratchbuf[0] = '$';
d708bcba 14968 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14969 oappend_maybe_intel (scratchbuf);
252b5132
RH
14970 scratchbuf[0] = '\0';
14971}
14972
14973static void
26ca5450 14974OP_sI (int bytemode, int sizeflag)
252b5132 14975{
52b15da3 14976 bfd_signed_vma op;
252b5132
RH
14977
14978 switch (bytemode)
14979 {
14980 case b_mode:
e3949f17 14981 case b_T_mode:
252b5132
RH
14982 FETCH_DATA (the_info, codep + 1);
14983 op = *codep++;
14984 if ((op & 0x80) != 0)
14985 op -= 0x100;
e3949f17
L
14986 if (bytemode == b_T_mode)
14987 {
14988 if (address_mode != mode_64bit
7bb15c6f 14989 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14990 {
6c067bbb
RM
14991 /* The operand-size prefix is overridden by a REX prefix. */
14992 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14993 op &= 0xffffffff;
14994 else
14995 op &= 0xffff;
14996 }
14997 }
14998 else
14999 {
15000 if (!(rex & REX_W))
15001 {
15002 if (sizeflag & DFLAG)
15003 op &= 0xffffffff;
15004 else
15005 op &= 0xffff;
15006 }
15007 }
252b5132
RH
15008 break;
15009 case v_mode:
7bb15c6f
RM
15010 /* The operand-size prefix is overridden by a REX prefix. */
15011 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15012 op = get32s ();
252b5132 15013 else
d9e3625e 15014 op = get16 ();
252b5132
RH
15015 break;
15016 default:
15017 oappend (INTERNAL_DISASSEMBLER_ERROR);
15018 return;
15019 }
52b15da3
JH
15020
15021 scratchbuf[0] = '$';
15022 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15023 oappend_maybe_intel (scratchbuf);
252b5132
RH
15024}
15025
15026static void
26ca5450 15027OP_J (int bytemode, int sizeflag)
252b5132 15028{
52b15da3 15029 bfd_vma disp;
7081ff04 15030 bfd_vma mask = -1;
65ca155d 15031 bfd_vma segment = 0;
252b5132
RH
15032
15033 switch (bytemode)
15034 {
15035 case b_mode:
15036 FETCH_DATA (the_info, codep + 1);
15037 disp = *codep++;
15038 if ((disp & 0x80) != 0)
15039 disp -= 0x100;
15040 break;
15041 case v_mode:
f16cd0d5 15042 USED_REX (REX_W);
161a04f6 15043 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 15044 disp = get32s ();
252b5132
RH
15045 else
15046 {
15047 disp = get16 ();
206717e8
L
15048 if ((disp & 0x8000) != 0)
15049 disp -= 0x10000;
65ca155d
L
15050 /* In 16bit mode, address is wrapped around at 64k within
15051 the same segment. Otherwise, a data16 prefix on a jump
15052 instruction means that the pc is masked to 16 bits after
15053 the displacement is added! */
15054 mask = 0xffff;
15055 if ((prefixes & PREFIX_DATA) == 0)
15056 segment = ((start_pc + codep - start_codep)
15057 & ~((bfd_vma) 0xffff));
252b5132 15058 }
f16cd0d5
L
15059 if (!(rex & REX_W))
15060 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
15061 break;
15062 default:
15063 oappend (INTERNAL_DISASSEMBLER_ERROR);
15064 return;
15065 }
42d5f9c6 15066 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
15067 set_op (disp, 0);
15068 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
15069 oappend (scratchbuf);
15070}
15071
252b5132 15072static void
ed7841b3 15073OP_SEG (int bytemode, int sizeflag)
252b5132 15074{
ed7841b3 15075 if (bytemode == w_mode)
7967e09e 15076 oappend (names_seg[modrm.reg]);
ed7841b3 15077 else
7967e09e 15078 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
15079}
15080
15081static void
26ca5450 15082OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
15083{
15084 int seg, offset;
15085
c608c12e 15086 if (sizeflag & DFLAG)
252b5132 15087 {
c608c12e
AM
15088 offset = get32 ();
15089 seg = get16 ();
252b5132 15090 }
c608c12e
AM
15091 else
15092 {
15093 offset = get16 ();
15094 seg = get16 ();
15095 }
7d421014 15096 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 15097 if (intel_syntax)
3f31e633 15098 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
15099 else
15100 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 15101 oappend (scratchbuf);
252b5132
RH
15102}
15103
252b5132 15104static void
3f31e633 15105OP_OFF (int bytemode, int sizeflag)
252b5132 15106{
52b15da3 15107 bfd_vma off;
252b5132 15108
3f31e633
JB
15109 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15110 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15111 append_seg ();
15112
cb712a9e 15113 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15114 off = get32 ();
15115 else
15116 off = get16 ();
15117
15118 if (intel_syntax)
15119 {
15120 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15121 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
252b5132 15122 {
d708bcba 15123 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15124 oappend (":");
15125 }
15126 }
52b15da3
JH
15127 print_operand_value (scratchbuf, 1, off);
15128 oappend (scratchbuf);
15129}
6439fc28 15130
52b15da3 15131static void
3f31e633 15132OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15133{
15134 bfd_vma off;
15135
539e75ad
L
15136 if (address_mode != mode_64bit
15137 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15138 {
15139 OP_OFF (bytemode, sizeflag);
15140 return;
15141 }
15142
3f31e633
JB
15143 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15144 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15145 append_seg ();
15146
6608db57 15147 off = get64 ();
52b15da3
JH
15148
15149 if (intel_syntax)
15150 {
15151 if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
db6eb5be 15152 | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
52b15da3 15153 {
d708bcba 15154 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15155 oappend (":");
15156 }
15157 }
15158 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15159 oappend (scratchbuf);
15160}
15161
15162static void
26ca5450 15163ptr_reg (int code, int sizeflag)
252b5132 15164{
2da11e11 15165 const char *s;
d708bcba 15166
1d9f512f 15167 *obufp++ = open_char;
20f0a1fc 15168 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15169 if (address_mode == mode_64bit)
c1a64871
JH
15170 {
15171 if (!(sizeflag & AFLAG))
db6eb5be 15172 s = names32[code - eAX_reg];
c1a64871 15173 else
db6eb5be 15174 s = names64[code - eAX_reg];
c1a64871 15175 }
52b15da3 15176 else if (sizeflag & AFLAG)
252b5132
RH
15177 s = names32[code - eAX_reg];
15178 else
15179 s = names16[code - eAX_reg];
15180 oappend (s);
1d9f512f
AM
15181 *obufp++ = close_char;
15182 *obufp = 0;
252b5132
RH
15183}
15184
15185static void
26ca5450 15186OP_ESreg (int code, int sizeflag)
252b5132 15187{
9306ca4a 15188 if (intel_syntax)
52fd6d94
JB
15189 {
15190 switch (codep[-1])
15191 {
15192 case 0x6d: /* insw/insl */
15193 intel_operand_size (z_mode, sizeflag);
15194 break;
15195 case 0xa5: /* movsw/movsl/movsq */
15196 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15197 case 0xab: /* stosw/stosl */
15198 case 0xaf: /* scasw/scasl */
15199 intel_operand_size (v_mode, sizeflag);
15200 break;
15201 default:
15202 intel_operand_size (b_mode, sizeflag);
15203 }
15204 }
9ce09ba2 15205 oappend_maybe_intel ("%es:");
252b5132
RH
15206 ptr_reg (code, sizeflag);
15207}
15208
15209static void
26ca5450 15210OP_DSreg (int code, int sizeflag)
252b5132 15211{
9306ca4a 15212 if (intel_syntax)
52fd6d94
JB
15213 {
15214 switch (codep[-1])
15215 {
15216 case 0x6f: /* outsw/outsl */
15217 intel_operand_size (z_mode, sizeflag);
15218 break;
15219 case 0xa5: /* movsw/movsl/movsq */
15220 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15221 case 0xad: /* lodsw/lodsl/lodsq */
15222 intel_operand_size (v_mode, sizeflag);
15223 break;
15224 default:
15225 intel_operand_size (b_mode, sizeflag);
15226 }
15227 }
252b5132
RH
15228 if ((prefixes
15229 & (PREFIX_CS
15230 | PREFIX_DS
15231 | PREFIX_SS
15232 | PREFIX_ES
15233 | PREFIX_FS
15234 | PREFIX_GS)) == 0)
15235 prefixes |= PREFIX_DS;
6608db57 15236 append_seg ();
252b5132
RH
15237 ptr_reg (code, sizeflag);
15238}
15239
252b5132 15240static void
26ca5450 15241OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15242{
9b60702d 15243 int add;
161a04f6 15244 if (rex & REX_R)
c4a530c5 15245 {
161a04f6 15246 USED_REX (REX_R);
c4a530c5
JB
15247 add = 8;
15248 }
cb712a9e 15249 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15250 {
f16cd0d5 15251 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15252 used_prefixes |= PREFIX_LOCK;
15253 add = 8;
15254 }
9b60702d
L
15255 else
15256 add = 0;
7967e09e 15257 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15258 oappend_maybe_intel (scratchbuf);
252b5132
RH
15259}
15260
252b5132 15261static void
26ca5450 15262OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15263{
9b60702d 15264 int add;
161a04f6
L
15265 USED_REX (REX_R);
15266 if (rex & REX_R)
52b15da3 15267 add = 8;
9b60702d
L
15268 else
15269 add = 0;
d708bcba 15270 if (intel_syntax)
7967e09e 15271 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15272 else
7967e09e 15273 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15274 oappend (scratchbuf);
15275}
15276
252b5132 15277static void
26ca5450 15278OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15279{
7967e09e 15280 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15281 oappend_maybe_intel (scratchbuf);
252b5132
RH
15282}
15283
15284static void
6f74c397 15285OP_R (int bytemode, int sizeflag)
252b5132 15286{
7967e09e 15287 if (modrm.mod == 3)
2da11e11
AM
15288 OP_E (bytemode, sizeflag);
15289 else
6608db57 15290 BadOp ();
252b5132
RH
15291}
15292
15293static void
26ca5450 15294OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15295{
b9733481
L
15296 int reg = modrm.reg;
15297 const char **names;
15298
041bd2e0
JH
15299 used_prefixes |= (prefixes & PREFIX_DATA);
15300 if (prefixes & PREFIX_DATA)
20f0a1fc 15301 {
b9733481 15302 names = names_xmm;
161a04f6
L
15303 USED_REX (REX_R);
15304 if (rex & REX_R)
b9733481 15305 reg += 8;
20f0a1fc 15306 }
041bd2e0 15307 else
b9733481
L
15308 names = names_mm;
15309 oappend (names[reg]);
252b5132
RH
15310}
15311
c608c12e 15312static void
c0f3af97 15313OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15314{
b9733481
L
15315 int reg = modrm.reg;
15316 const char **names;
15317
161a04f6
L
15318 USED_REX (REX_R);
15319 if (rex & REX_R)
b9733481 15320 reg += 8;
43234a1e
L
15321 if (vex.evex)
15322 {
15323 if (!vex.r)
15324 reg += 16;
15325 }
15326
539f890d
L
15327 if (need_vex
15328 && bytemode != xmm_mode
43234a1e
L
15329 && bytemode != xmmq_mode
15330 && bytemode != evex_half_bcst_xmmq_mode
15331 && bytemode != ymm_mode
539f890d 15332 && bytemode != scalar_mode)
c0f3af97
L
15333 {
15334 switch (vex.length)
15335 {
15336 case 128:
b9733481 15337 names = names_xmm;
c0f3af97
L
15338 break;
15339 case 256:
6c30d220
L
15340 if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
15341 names = names_ymm;
15342 else
15343 names = names_xmm;
c0f3af97 15344 break;
43234a1e
L
15345 case 512:
15346 names = names_zmm;
15347 break;
c0f3af97
L
15348 default:
15349 abort ();
15350 }
15351 }
43234a1e
L
15352 else if (bytemode == xmmq_mode
15353 || bytemode == evex_half_bcst_xmmq_mode)
15354 {
15355 switch (vex.length)
15356 {
15357 case 128:
15358 case 256:
15359 names = names_xmm;
15360 break;
15361 case 512:
15362 names = names_ymm;
15363 break;
15364 default:
15365 abort ();
15366 }
15367 }
15368 else if (bytemode == ymm_mode)
15369 names = names_ymm;
c0f3af97 15370 else
b9733481
L
15371 names = names_xmm;
15372 oappend (names[reg]);
c608c12e
AM
15373}
15374
252b5132 15375static void
26ca5450 15376OP_EM (int bytemode, int sizeflag)
252b5132 15377{
b9733481
L
15378 int reg;
15379 const char **names;
15380
7967e09e 15381 if (modrm.mod != 3)
252b5132 15382 {
b6169b20
L
15383 if (intel_syntax
15384 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15385 {
15386 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15387 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15388 }
252b5132
RH
15389 OP_E (bytemode, sizeflag);
15390 return;
15391 }
15392
b6169b20
L
15393 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15394 swap_operand ();
15395
6608db57 15396 /* Skip mod/rm byte. */
4bba6815 15397 MODRM_CHECK;
252b5132 15398 codep++;
041bd2e0 15399 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15400 reg = modrm.rm;
041bd2e0 15401 if (prefixes & PREFIX_DATA)
20f0a1fc 15402 {
b9733481 15403 names = names_xmm;
161a04f6
L
15404 USED_REX (REX_B);
15405 if (rex & REX_B)
b9733481 15406 reg += 8;
20f0a1fc 15407 }
041bd2e0 15408 else
b9733481
L
15409 names = names_mm;
15410 oappend (names[reg]);
252b5132
RH
15411}
15412
246c51aa
L
15413/* cvt* are the only instructions in sse2 which have
15414 both SSE and MMX operands and also have 0x66 prefix
15415 in their opcode. 0x66 was originally used to differentiate
15416 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15417 cvt* separately using OP_EMC and OP_MXC */
15418static void
15419OP_EMC (int bytemode, int sizeflag)
15420{
7967e09e 15421 if (modrm.mod != 3)
4d9567e0
MM
15422 {
15423 if (intel_syntax && bytemode == v_mode)
15424 {
15425 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15426 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15427 }
4d9567e0
MM
15428 OP_E (bytemode, sizeflag);
15429 return;
15430 }
246c51aa 15431
4d9567e0
MM
15432 /* Skip mod/rm byte. */
15433 MODRM_CHECK;
15434 codep++;
15435 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15436 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15437}
15438
15439static void
15440OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15441{
15442 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15443 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15444}
15445
c608c12e 15446static void
26ca5450 15447OP_EX (int bytemode, int sizeflag)
c608c12e 15448{
b9733481
L
15449 int reg;
15450 const char **names;
d6f574e0
L
15451
15452 /* Skip mod/rm byte. */
15453 MODRM_CHECK;
15454 codep++;
15455
7967e09e 15456 if (modrm.mod != 3)
c608c12e 15457 {
c1e679ec 15458 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15459 return;
15460 }
d6f574e0 15461
b9733481 15462 reg = modrm.rm;
161a04f6
L
15463 USED_REX (REX_B);
15464 if (rex & REX_B)
b9733481 15465 reg += 8;
43234a1e
L
15466 if (vex.evex)
15467 {
15468 USED_REX (REX_X);
15469 if ((rex & REX_X))
15470 reg += 16;
15471 }
c608c12e 15472
b6169b20 15473 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15474 && (bytemode == x_swap_mode
15475 || bytemode == d_swap_mode
7bb15c6f 15476 || bytemode == d_scalar_swap_mode
539f890d
L
15477 || bytemode == q_swap_mode
15478 || bytemode == q_scalar_swap_mode))
b6169b20
L
15479 swap_operand ();
15480
c0f3af97
L
15481 if (need_vex
15482 && bytemode != xmm_mode
6c30d220
L
15483 && bytemode != xmmdw_mode
15484 && bytemode != xmmqd_mode
15485 && bytemode != xmm_mb_mode
15486 && bytemode != xmm_mw_mode
15487 && bytemode != xmm_md_mode
15488 && bytemode != xmm_mq_mode
43234a1e 15489 && bytemode != xmm_mdq_mode
539f890d 15490 && bytemode != xmmq_mode
43234a1e
L
15491 && bytemode != evex_half_bcst_xmmq_mode
15492 && bytemode != ymm_mode
539f890d 15493 && bytemode != d_scalar_mode
7bb15c6f 15494 && bytemode != d_scalar_swap_mode
539f890d 15495 && bytemode != q_scalar_mode
1c480963
L
15496 && bytemode != q_scalar_swap_mode
15497 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15498 {
15499 switch (vex.length)
15500 {
15501 case 128:
b9733481 15502 names = names_xmm;
c0f3af97
L
15503 break;
15504 case 256:
b9733481 15505 names = names_ymm;
c0f3af97 15506 break;
43234a1e
L
15507 case 512:
15508 names = names_zmm;
15509 break;
c0f3af97
L
15510 default:
15511 abort ();
15512 }
15513 }
43234a1e
L
15514 else if (bytemode == xmmq_mode
15515 || bytemode == evex_half_bcst_xmmq_mode)
15516 {
15517 switch (vex.length)
15518 {
15519 case 128:
15520 case 256:
15521 names = names_xmm;
15522 break;
15523 case 512:
15524 names = names_ymm;
15525 break;
15526 default:
15527 abort ();
15528 }
15529 }
15530 else if (bytemode == ymm_mode)
15531 names = names_ymm;
c0f3af97 15532 else
b9733481
L
15533 names = names_xmm;
15534 oappend (names[reg]);
c608c12e
AM
15535}
15536
252b5132 15537static void
26ca5450 15538OP_MS (int bytemode, int sizeflag)
252b5132 15539{
7967e09e 15540 if (modrm.mod == 3)
2da11e11
AM
15541 OP_EM (bytemode, sizeflag);
15542 else
6608db57 15543 BadOp ();
252b5132
RH
15544}
15545
992aaec9 15546static void
26ca5450 15547OP_XS (int bytemode, int sizeflag)
992aaec9 15548{
7967e09e 15549 if (modrm.mod == 3)
992aaec9
AM
15550 OP_EX (bytemode, sizeflag);
15551 else
6608db57 15552 BadOp ();
992aaec9
AM
15553}
15554
cc0ec051
AM
15555static void
15556OP_M (int bytemode, int sizeflag)
15557{
7967e09e 15558 if (modrm.mod == 3)
75413a22
L
15559 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15560 BadOp ();
cc0ec051
AM
15561 else
15562 OP_E (bytemode, sizeflag);
15563}
15564
15565static void
15566OP_0f07 (int bytemode, int sizeflag)
15567{
7967e09e 15568 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15569 BadOp ();
15570 else
15571 OP_E (bytemode, sizeflag);
15572}
15573
46e883c5 15574/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15575 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15576
cc0ec051 15577static void
46e883c5 15578NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15579{
8b38ad71
L
15580 if ((prefixes & PREFIX_DATA) != 0
15581 || (rex != 0
15582 && rex != 0x48
15583 && address_mode == mode_64bit))
46e883c5
L
15584 OP_REG (bytemode, sizeflag);
15585 else
15586 strcpy (obuf, "nop");
15587}
15588
15589static void
15590NOP_Fixup2 (int bytemode, int sizeflag)
15591{
8b38ad71
L
15592 if ((prefixes & PREFIX_DATA) != 0
15593 || (rex != 0
15594 && rex != 0x48
15595 && address_mode == mode_64bit))
46e883c5 15596 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15597}
15598
84037f8c 15599static const char *const Suffix3DNow[] = {
252b5132
RH
15600/* 00 */ NULL, NULL, NULL, NULL,
15601/* 04 */ NULL, NULL, NULL, NULL,
15602/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15603/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15604/* 10 */ NULL, NULL, NULL, NULL,
15605/* 14 */ NULL, NULL, NULL, NULL,
15606/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15607/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15608/* 20 */ NULL, NULL, NULL, NULL,
15609/* 24 */ NULL, NULL, NULL, NULL,
15610/* 28 */ NULL, NULL, NULL, NULL,
15611/* 2C */ NULL, NULL, NULL, NULL,
15612/* 30 */ NULL, NULL, NULL, NULL,
15613/* 34 */ NULL, NULL, NULL, NULL,
15614/* 38 */ NULL, NULL, NULL, NULL,
15615/* 3C */ NULL, NULL, NULL, NULL,
15616/* 40 */ NULL, NULL, NULL, NULL,
15617/* 44 */ NULL, NULL, NULL, NULL,
15618/* 48 */ NULL, NULL, NULL, NULL,
15619/* 4C */ NULL, NULL, NULL, NULL,
15620/* 50 */ NULL, NULL, NULL, NULL,
15621/* 54 */ NULL, NULL, NULL, NULL,
15622/* 58 */ NULL, NULL, NULL, NULL,
15623/* 5C */ NULL, NULL, NULL, NULL,
15624/* 60 */ NULL, NULL, NULL, NULL,
15625/* 64 */ NULL, NULL, NULL, NULL,
15626/* 68 */ NULL, NULL, NULL, NULL,
15627/* 6C */ NULL, NULL, NULL, NULL,
15628/* 70 */ NULL, NULL, NULL, NULL,
15629/* 74 */ NULL, NULL, NULL, NULL,
15630/* 78 */ NULL, NULL, NULL, NULL,
15631/* 7C */ NULL, NULL, NULL, NULL,
15632/* 80 */ NULL, NULL, NULL, NULL,
15633/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15634/* 88 */ NULL, NULL, "pfnacc", NULL,
15635/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15636/* 90 */ "pfcmpge", NULL, NULL, NULL,
15637/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15638/* 98 */ NULL, NULL, "pfsub", NULL,
15639/* 9C */ NULL, NULL, "pfadd", NULL,
15640/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15641/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15642/* A8 */ NULL, NULL, "pfsubr", NULL,
15643/* AC */ NULL, NULL, "pfacc", NULL,
15644/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15645/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15646/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15647/* BC */ NULL, NULL, NULL, "pavgusb",
15648/* C0 */ NULL, NULL, NULL, NULL,
15649/* C4 */ NULL, NULL, NULL, NULL,
15650/* C8 */ NULL, NULL, NULL, NULL,
15651/* CC */ NULL, NULL, NULL, NULL,
15652/* D0 */ NULL, NULL, NULL, NULL,
15653/* D4 */ NULL, NULL, NULL, NULL,
15654/* D8 */ NULL, NULL, NULL, NULL,
15655/* DC */ NULL, NULL, NULL, NULL,
15656/* E0 */ NULL, NULL, NULL, NULL,
15657/* E4 */ NULL, NULL, NULL, NULL,
15658/* E8 */ NULL, NULL, NULL, NULL,
15659/* EC */ NULL, NULL, NULL, NULL,
15660/* F0 */ NULL, NULL, NULL, NULL,
15661/* F4 */ NULL, NULL, NULL, NULL,
15662/* F8 */ NULL, NULL, NULL, NULL,
15663/* FC */ NULL, NULL, NULL, NULL,
15664};
15665
15666static void
26ca5450 15667OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15668{
15669 const char *mnemonic;
15670
15671 FETCH_DATA (the_info, codep + 1);
15672 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15673 place where an 8-bit immediate would normally go. ie. the last
15674 byte of the instruction. */
ea397f5b 15675 obufp = mnemonicendp;
c608c12e 15676 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15677 if (mnemonic)
2da11e11 15678 oappend (mnemonic);
252b5132
RH
15679 else
15680 {
15681 /* Since a variable sized modrm/sib chunk is between the start
15682 of the opcode (0x0f0f) and the opcode suffix, we need to do
15683 all the modrm processing first, and don't know until now that
15684 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15685 op_out[0][0] = '\0';
15686 op_out[1][0] = '\0';
6608db57 15687 BadOp ();
252b5132 15688 }
ea397f5b 15689 mnemonicendp = obufp;
252b5132 15690}
c608c12e 15691
ea397f5b
L
15692static struct op simd_cmp_op[] =
15693{
15694 { STRING_COMMA_LEN ("eq") },
15695 { STRING_COMMA_LEN ("lt") },
15696 { STRING_COMMA_LEN ("le") },
15697 { STRING_COMMA_LEN ("unord") },
15698 { STRING_COMMA_LEN ("neq") },
15699 { STRING_COMMA_LEN ("nlt") },
15700 { STRING_COMMA_LEN ("nle") },
15701 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15702};
15703
15704static void
ad19981d 15705CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15706{
15707 unsigned int cmp_type;
15708
15709 FETCH_DATA (the_info, codep + 1);
15710 cmp_type = *codep++ & 0xff;
c0f3af97 15711 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15712 {
ad19981d 15713 char suffix [3];
ea397f5b 15714 char *p = mnemonicendp - 2;
ad19981d
L
15715 suffix[0] = p[0];
15716 suffix[1] = p[1];
15717 suffix[2] = '\0';
ea397f5b
L
15718 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15719 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15720 }
15721 else
15722 {
ad19981d
L
15723 /* We have a reserved extension byte. Output it directly. */
15724 scratchbuf[0] = '$';
15725 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15726 oappend_maybe_intel (scratchbuf);
ad19981d 15727 scratchbuf[0] = '\0';
c608c12e
AM
15728 }
15729}
15730
ca164297 15731static void
b844680a
L
15732OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15733 int sizeflag ATTRIBUTE_UNUSED)
15734{
15735 /* mwait %eax,%ecx */
15736 if (!intel_syntax)
15737 {
15738 const char **names = (address_mode == mode_64bit
15739 ? names64 : names32);
15740 strcpy (op_out[0], names[0]);
15741 strcpy (op_out[1], names[1]);
15742 two_source_ops = 1;
15743 }
15744 /* Skip mod/rm byte. */
15745 MODRM_CHECK;
15746 codep++;
15747}
15748
15749static void
15750OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15751 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15752{
b844680a
L
15753 /* monitor %eax,%ecx,%edx" */
15754 if (!intel_syntax)
ca164297 15755 {
b844680a 15756 const char **op1_names;
cb712a9e
L
15757 const char **names = (address_mode == mode_64bit
15758 ? names64 : names32);
1d9f512f 15759
b844680a
L
15760 if (!(prefixes & PREFIX_ADDR))
15761 op1_names = (address_mode == mode_16bit
15762 ? names16 : names);
ca164297
L
15763 else
15764 {
b844680a 15765 /* Remove "addr16/addr32". */
f16cd0d5 15766 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15767 op1_names = (address_mode != mode_32bit
15768 ? names32 : names16);
15769 used_prefixes |= PREFIX_ADDR;
ca164297 15770 }
b844680a
L
15771 strcpy (op_out[0], op1_names[0]);
15772 strcpy (op_out[1], names[1]);
15773 strcpy (op_out[2], names[2]);
15774 two_source_ops = 1;
ca164297 15775 }
b844680a
L
15776 /* Skip mod/rm byte. */
15777 MODRM_CHECK;
15778 codep++;
30123838
JB
15779}
15780
6608db57
KH
15781static void
15782BadOp (void)
2da11e11 15783{
6608db57
KH
15784 /* Throw away prefixes and 1st. opcode byte. */
15785 codep = insn_codep + 1;
2da11e11
AM
15786 oappend ("(bad)");
15787}
4cc91dba 15788
35c52694
L
15789static void
15790REP_Fixup (int bytemode, int sizeflag)
15791{
15792 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15793 lods and stos. */
35c52694 15794 if (prefixes & PREFIX_REPZ)
f16cd0d5 15795 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15796
15797 switch (bytemode)
15798 {
15799 case al_reg:
15800 case eAX_reg:
15801 case indir_dx_reg:
15802 OP_IMREG (bytemode, sizeflag);
15803 break;
15804 case eDI_reg:
15805 OP_ESreg (bytemode, sizeflag);
15806 break;
15807 case eSI_reg:
15808 OP_DSreg (bytemode, sizeflag);
15809 break;
15810 default:
15811 abort ();
15812 break;
15813 }
15814}
f5804c90 15815
7e8b059b
L
15816/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15817 "bnd". */
15818
15819static void
15820BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15821{
15822 if (prefixes & PREFIX_REPNZ)
15823 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15824}
15825
42164a71
L
15826/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15827 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15828 */
15829
15830static void
15831HLE_Fixup1 (int bytemode, int sizeflag)
15832{
15833 if (modrm.mod != 3
15834 && (prefixes & PREFIX_LOCK) != 0)
15835 {
15836 if (prefixes & PREFIX_REPZ)
15837 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15838 if (prefixes & PREFIX_REPNZ)
15839 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15840 }
15841
15842 OP_E (bytemode, sizeflag);
15843}
15844
15845/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15846 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15847 */
15848
15849static void
15850HLE_Fixup2 (int bytemode, int sizeflag)
15851{
15852 if (modrm.mod != 3)
15853 {
15854 if (prefixes & PREFIX_REPZ)
15855 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15856 if (prefixes & PREFIX_REPNZ)
15857 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15858 }
15859
15860 OP_E (bytemode, sizeflag);
15861}
15862
15863/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15864 "xrelease" for memory operand. No check for LOCK prefix. */
15865
15866static void
15867HLE_Fixup3 (int bytemode, int sizeflag)
15868{
15869 if (modrm.mod != 3
15870 && last_repz_prefix > last_repnz_prefix
15871 && (prefixes & PREFIX_REPZ) != 0)
15872 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15873
15874 OP_E (bytemode, sizeflag);
15875}
15876
f5804c90
L
15877static void
15878CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15879{
161a04f6
L
15880 USED_REX (REX_W);
15881 if (rex & REX_W)
f5804c90
L
15882 {
15883 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15884 char *p = mnemonicendp - 2;
15885 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15886 bytemode = o_mode;
f5804c90 15887 }
42164a71
L
15888 else if ((prefixes & PREFIX_LOCK) != 0)
15889 {
15890 if (prefixes & PREFIX_REPZ)
15891 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15892 if (prefixes & PREFIX_REPNZ)
15893 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15894 }
15895
f5804c90
L
15896 OP_M (bytemode, sizeflag);
15897}
42903f7f
L
15898
15899static void
15900XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15901{
b9733481
L
15902 const char **names;
15903
c0f3af97
L
15904 if (need_vex)
15905 {
15906 switch (vex.length)
15907 {
15908 case 128:
b9733481 15909 names = names_xmm;
c0f3af97
L
15910 break;
15911 case 256:
b9733481 15912 names = names_ymm;
c0f3af97
L
15913 break;
15914 default:
15915 abort ();
15916 }
15917 }
15918 else
b9733481
L
15919 names = names_xmm;
15920 oappend (names[reg]);
42903f7f 15921}
381d071f
L
15922
15923static void
15924CRC32_Fixup (int bytemode, int sizeflag)
15925{
15926 /* Add proper suffix to "crc32". */
ea397f5b 15927 char *p = mnemonicendp;
381d071f
L
15928
15929 switch (bytemode)
15930 {
15931 case b_mode:
20592a94 15932 if (intel_syntax)
ea397f5b 15933 goto skip;
20592a94 15934
381d071f
L
15935 *p++ = 'b';
15936 break;
15937 case v_mode:
20592a94 15938 if (intel_syntax)
ea397f5b 15939 goto skip;
20592a94 15940
381d071f
L
15941 USED_REX (REX_W);
15942 if (rex & REX_W)
15943 *p++ = 'q';
7bb15c6f 15944 else
f16cd0d5
L
15945 {
15946 if (sizeflag & DFLAG)
15947 *p++ = 'l';
15948 else
15949 *p++ = 'w';
15950 used_prefixes |= (prefixes & PREFIX_DATA);
15951 }
381d071f
L
15952 break;
15953 default:
15954 oappend (INTERNAL_DISASSEMBLER_ERROR);
15955 break;
15956 }
ea397f5b 15957 mnemonicendp = p;
381d071f
L
15958 *p = '\0';
15959
ea397f5b 15960skip:
381d071f
L
15961 if (modrm.mod == 3)
15962 {
15963 int add;
15964
15965 /* Skip mod/rm byte. */
15966 MODRM_CHECK;
15967 codep++;
15968
15969 USED_REX (REX_B);
15970 add = (rex & REX_B) ? 8 : 0;
15971 if (bytemode == b_mode)
15972 {
15973 USED_REX (0);
15974 if (rex)
15975 oappend (names8rex[modrm.rm + add]);
15976 else
15977 oappend (names8[modrm.rm + add]);
15978 }
15979 else
15980 {
15981 USED_REX (REX_W);
15982 if (rex & REX_W)
15983 oappend (names64[modrm.rm + add]);
15984 else if ((prefixes & PREFIX_DATA))
15985 oappend (names16[modrm.rm + add]);
15986 else
15987 oappend (names32[modrm.rm + add]);
15988 }
15989 }
15990 else
9344ff29 15991 OP_E (bytemode, sizeflag);
381d071f 15992}
85f10a01 15993
eacc9c89
L
15994static void
15995FXSAVE_Fixup (int bytemode, int sizeflag)
15996{
15997 /* Add proper suffix to "fxsave" and "fxrstor". */
15998 USED_REX (REX_W);
15999 if (rex & REX_W)
16000 {
16001 char *p = mnemonicendp;
16002 *p++ = '6';
16003 *p++ = '4';
16004 *p = '\0';
16005 mnemonicendp = p;
16006 }
16007 OP_M (bytemode, sizeflag);
16008}
16009
c0f3af97
L
16010/* Display the destination register operand for instructions with
16011 VEX. */
16012
16013static void
16014OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16015{
539f890d 16016 int reg;
b9733481
L
16017 const char **names;
16018
c0f3af97
L
16019 if (!need_vex)
16020 abort ();
16021
16022 if (!need_vex_reg)
16023 return;
16024
539f890d 16025 reg = vex.register_specifier;
43234a1e
L
16026 if (vex.evex)
16027 {
16028 if (!vex.v)
16029 reg += 16;
16030 }
16031
539f890d
L
16032 if (bytemode == vex_scalar_mode)
16033 {
16034 oappend (names_xmm[reg]);
16035 return;
16036 }
16037
c0f3af97
L
16038 switch (vex.length)
16039 {
16040 case 128:
16041 switch (bytemode)
16042 {
16043 case vex_mode:
16044 case vex128_mode:
6c30d220 16045 case vex_vsib_q_w_dq_mode:
cb21baef
L
16046 names = names_xmm;
16047 break;
16048 case dq_mode:
16049 if (vex.w)
16050 names = names64;
16051 else
16052 names = names32;
c0f3af97 16053 break;
43234a1e
L
16054 case mask_mode:
16055 names = names_mask;
16056 break;
c0f3af97
L
16057 default:
16058 abort ();
16059 return;
16060 }
c0f3af97
L
16061 break;
16062 case 256:
16063 switch (bytemode)
16064 {
16065 case vex_mode:
16066 case vex256_mode:
6c30d220
L
16067 names = names_ymm;
16068 break;
16069 case vex_vsib_q_w_dq_mode:
16070 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16071 break;
43234a1e
L
16072 case mask_mode:
16073 names = names_mask;
16074 break;
c0f3af97
L
16075 default:
16076 abort ();
16077 return;
16078 }
c0f3af97 16079 break;
43234a1e
L
16080 case 512:
16081 names = names_zmm;
16082 break;
c0f3af97
L
16083 default:
16084 abort ();
16085 break;
16086 }
539f890d 16087 oappend (names[reg]);
c0f3af97
L
16088}
16089
922d8de8
DR
16090/* Get the VEX immediate byte without moving codep. */
16091
16092static unsigned char
ccc5981b 16093get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16094{
16095 int bytes_before_imm = 0;
16096
922d8de8
DR
16097 if (modrm.mod != 3)
16098 {
16099 /* There are SIB/displacement bytes. */
16100 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16101 {
922d8de8 16102 /* 32/64 bit address mode */
6c067bbb 16103 int base = modrm.rm;
922d8de8
DR
16104
16105 /* Check SIB byte. */
6c067bbb
RM
16106 if (base == 4)
16107 {
16108 FETCH_DATA (the_info, codep + 1);
16109 base = *codep & 7;
16110 /* When decoding the third source, don't increase
16111 bytes_before_imm as this has already been incremented
16112 by one in OP_E_memory while decoding the second
16113 source operand. */
16114 if (opnum == 0)
16115 bytes_before_imm++;
16116 }
16117
16118 /* Don't increase bytes_before_imm when decoding the third source,
16119 it has already been incremented by OP_E_memory while decoding
16120 the second source operand. */
16121 if (opnum == 0)
16122 {
16123 switch (modrm.mod)
16124 {
16125 case 0:
16126 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16127 SIB == 5, there is a 4 byte displacement. */
16128 if (base != 5)
16129 /* No displacement. */
16130 break;
16131 case 2:
16132 /* 4 byte displacement. */
16133 bytes_before_imm += 4;
16134 break;
16135 case 1:
16136 /* 1 byte displacement. */
16137 bytes_before_imm++;
16138 break;
16139 }
16140 }
16141 }
922d8de8 16142 else
02e647f9
SP
16143 {
16144 /* 16 bit address mode */
6c067bbb
RM
16145 /* Don't increase bytes_before_imm when decoding the third source,
16146 it has already been incremented by OP_E_memory while decoding
16147 the second source operand. */
16148 if (opnum == 0)
16149 {
02e647f9
SP
16150 switch (modrm.mod)
16151 {
16152 case 0:
16153 /* When modrm.rm == 6, there is a 2 byte displacement. */
16154 if (modrm.rm != 6)
16155 /* No displacement. */
16156 break;
16157 case 2:
16158 /* 2 byte displacement. */
16159 bytes_before_imm += 2;
16160 break;
16161 case 1:
16162 /* 1 byte displacement: when decoding the third source,
16163 don't increase bytes_before_imm as this has already
16164 been incremented by one in OP_E_memory while decoding
16165 the second source operand. */
16166 if (opnum == 0)
16167 bytes_before_imm++;
ccc5981b 16168
02e647f9
SP
16169 break;
16170 }
922d8de8
DR
16171 }
16172 }
16173 }
16174
16175 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16176 return codep [bytes_before_imm];
16177}
16178
16179static void
16180OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16181{
b9733481
L
16182 const char **names;
16183
922d8de8
DR
16184 if (reg == -1 && modrm.mod != 3)
16185 {
16186 OP_E_memory (bytemode, sizeflag);
16187 return;
16188 }
16189 else
16190 {
16191 if (reg == -1)
16192 {
16193 reg = modrm.rm;
16194 USED_REX (REX_B);
16195 if (rex & REX_B)
16196 reg += 8;
16197 }
16198 else if (reg > 7 && address_mode != mode_64bit)
16199 BadOp ();
16200 }
16201
16202 switch (vex.length)
16203 {
16204 case 128:
b9733481 16205 names = names_xmm;
922d8de8
DR
16206 break;
16207 case 256:
b9733481 16208 names = names_ymm;
922d8de8
DR
16209 break;
16210 default:
16211 abort ();
16212 }
b9733481 16213 oappend (names[reg]);
922d8de8
DR
16214}
16215
a683cc34
SP
16216static void
16217OP_EX_VexImmW (int bytemode, int sizeflag)
16218{
16219 int reg = -1;
16220 static unsigned char vex_imm8;
16221
16222 if (vex_w_done == 0)
16223 {
16224 vex_w_done = 1;
16225
16226 /* Skip mod/rm byte. */
16227 MODRM_CHECK;
16228 codep++;
16229
16230 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16231
16232 if (vex.w)
16233 reg = vex_imm8 >> 4;
16234
16235 OP_EX_VexReg (bytemode, sizeflag, reg);
16236 }
16237 else if (vex_w_done == 1)
16238 {
16239 vex_w_done = 2;
16240
16241 if (!vex.w)
16242 reg = vex_imm8 >> 4;
16243
16244 OP_EX_VexReg (bytemode, sizeflag, reg);
16245 }
16246 else
16247 {
16248 /* Output the imm8 directly. */
16249 scratchbuf[0] = '$';
16250 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16251 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16252 scratchbuf[0] = '\0';
16253 codep++;
16254 }
16255}
16256
5dd85c99
SP
16257static void
16258OP_Vex_2src (int bytemode, int sizeflag)
16259{
16260 if (modrm.mod == 3)
16261 {
b9733481 16262 int reg = modrm.rm;
5dd85c99 16263 USED_REX (REX_B);
b9733481
L
16264 if (rex & REX_B)
16265 reg += 8;
16266 oappend (names_xmm[reg]);
5dd85c99
SP
16267 }
16268 else
16269 {
16270 if (intel_syntax
16271 && (bytemode == v_mode || bytemode == v_swap_mode))
16272 {
16273 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16274 used_prefixes |= (prefixes & PREFIX_DATA);
16275 }
16276 OP_E (bytemode, sizeflag);
16277 }
16278}
16279
16280static void
16281OP_Vex_2src_1 (int bytemode, int sizeflag)
16282{
16283 if (modrm.mod == 3)
16284 {
16285 /* Skip mod/rm byte. */
16286 MODRM_CHECK;
16287 codep++;
16288 }
16289
16290 if (vex.w)
b9733481 16291 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16292 else
16293 OP_Vex_2src (bytemode, sizeflag);
16294}
16295
16296static void
16297OP_Vex_2src_2 (int bytemode, int sizeflag)
16298{
16299 if (vex.w)
16300 OP_Vex_2src (bytemode, sizeflag);
16301 else
b9733481 16302 oappend (names_xmm[vex.register_specifier]);
5dd85c99
SP
16303}
16304
922d8de8
DR
16305static void
16306OP_EX_VexW (int bytemode, int sizeflag)
16307{
16308 int reg = -1;
16309
16310 if (!vex_w_done)
16311 {
16312 vex_w_done = 1;
41effecb
SP
16313
16314 /* Skip mod/rm byte. */
16315 MODRM_CHECK;
16316 codep++;
16317
922d8de8 16318 if (vex.w)
ccc5981b 16319 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16320 }
16321 else
16322 {
16323 if (!vex.w)
ccc5981b 16324 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16325 }
16326
16327 OP_EX_VexReg (bytemode, sizeflag, reg);
16328}
16329
922d8de8
DR
16330static void
16331VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16332 int sizeflag ATTRIBUTE_UNUSED)
16333{
16334 /* Skip the immediate byte and check for invalid bits. */
16335 FETCH_DATA (the_info, codep + 1);
16336 if (*codep++ & 0xf)
16337 BadOp ();
16338}
16339
c0f3af97
L
16340static void
16341OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16342{
16343 int reg;
b9733481
L
16344 const char **names;
16345
c0f3af97
L
16346 FETCH_DATA (the_info, codep + 1);
16347 reg = *codep++;
16348
16349 if (bytemode != x_mode)
16350 abort ();
16351
16352 if (reg & 0xf)
16353 BadOp ();
16354
16355 reg >>= 4;
dae39acc
L
16356 if (reg > 7 && address_mode != mode_64bit)
16357 BadOp ();
16358
c0f3af97
L
16359 switch (vex.length)
16360 {
16361 case 128:
b9733481 16362 names = names_xmm;
c0f3af97
L
16363 break;
16364 case 256:
b9733481 16365 names = names_ymm;
c0f3af97
L
16366 break;
16367 default:
16368 abort ();
16369 }
b9733481 16370 oappend (names[reg]);
c0f3af97
L
16371}
16372
922d8de8
DR
16373static void
16374OP_XMM_VexW (int bytemode, int sizeflag)
16375{
16376 /* Turn off the REX.W bit since it is used for swapping operands
16377 now. */
16378 rex &= ~REX_W;
16379 OP_XMM (bytemode, sizeflag);
16380}
16381
c0f3af97
L
16382static void
16383OP_EX_Vex (int bytemode, int sizeflag)
16384{
16385 if (modrm.mod != 3)
16386 {
16387 if (vex.register_specifier != 0)
16388 BadOp ();
16389 need_vex_reg = 0;
16390 }
16391 OP_EX (bytemode, sizeflag);
16392}
16393
16394static void
16395OP_XMM_Vex (int bytemode, int sizeflag)
16396{
16397 if (modrm.mod != 3)
16398 {
16399 if (vex.register_specifier != 0)
16400 BadOp ();
16401 need_vex_reg = 0;
16402 }
16403 OP_XMM (bytemode, sizeflag);
16404}
16405
16406static void
16407VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16408{
16409 switch (vex.length)
16410 {
16411 case 128:
ea397f5b 16412 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
16413 break;
16414 case 256:
ea397f5b 16415 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
16416 break;
16417 default:
16418 abort ();
16419 }
16420}
16421
ea397f5b
L
16422static struct op vex_cmp_op[] =
16423{
16424 { STRING_COMMA_LEN ("eq") },
16425 { STRING_COMMA_LEN ("lt") },
16426 { STRING_COMMA_LEN ("le") },
16427 { STRING_COMMA_LEN ("unord") },
16428 { STRING_COMMA_LEN ("neq") },
16429 { STRING_COMMA_LEN ("nlt") },
16430 { STRING_COMMA_LEN ("nle") },
16431 { STRING_COMMA_LEN ("ord") },
16432 { STRING_COMMA_LEN ("eq_uq") },
16433 { STRING_COMMA_LEN ("nge") },
16434 { STRING_COMMA_LEN ("ngt") },
16435 { STRING_COMMA_LEN ("false") },
16436 { STRING_COMMA_LEN ("neq_oq") },
16437 { STRING_COMMA_LEN ("ge") },
16438 { STRING_COMMA_LEN ("gt") },
16439 { STRING_COMMA_LEN ("true") },
16440 { STRING_COMMA_LEN ("eq_os") },
16441 { STRING_COMMA_LEN ("lt_oq") },
16442 { STRING_COMMA_LEN ("le_oq") },
16443 { STRING_COMMA_LEN ("unord_s") },
16444 { STRING_COMMA_LEN ("neq_us") },
16445 { STRING_COMMA_LEN ("nlt_uq") },
16446 { STRING_COMMA_LEN ("nle_uq") },
16447 { STRING_COMMA_LEN ("ord_s") },
16448 { STRING_COMMA_LEN ("eq_us") },
16449 { STRING_COMMA_LEN ("nge_uq") },
16450 { STRING_COMMA_LEN ("ngt_uq") },
16451 { STRING_COMMA_LEN ("false_os") },
16452 { STRING_COMMA_LEN ("neq_os") },
16453 { STRING_COMMA_LEN ("ge_oq") },
16454 { STRING_COMMA_LEN ("gt_oq") },
16455 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16456};
16457
16458static void
16459VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16460{
16461 unsigned int cmp_type;
16462
16463 FETCH_DATA (the_info, codep + 1);
16464 cmp_type = *codep++ & 0xff;
16465 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16466 {
16467 char suffix [3];
ea397f5b 16468 char *p = mnemonicendp - 2;
c0f3af97
L
16469 suffix[0] = p[0];
16470 suffix[1] = p[1];
16471 suffix[2] = '\0';
ea397f5b
L
16472 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16473 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16474 }
16475 else
16476 {
16477 /* We have a reserved extension byte. Output it directly. */
16478 scratchbuf[0] = '$';
16479 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16480 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16481 scratchbuf[0] = '\0';
16482 }
16483}
16484
43234a1e
L
16485static void
16486VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16487 int sizeflag ATTRIBUTE_UNUSED)
16488{
16489 unsigned int cmp_type;
16490
16491 if (!vex.evex)
16492 abort ();
16493
16494 FETCH_DATA (the_info, codep + 1);
16495 cmp_type = *codep++ & 0xff;
16496 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16497 If it's the case, print suffix, otherwise - print the immediate. */
16498 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16499 && cmp_type != 3
16500 && cmp_type != 7)
16501 {
16502 char suffix [3];
16503 char *p = mnemonicendp - 2;
16504
16505 /* vpcmp* can have both one- and two-lettered suffix. */
16506 if (p[0] == 'p')
16507 {
16508 p++;
16509 suffix[0] = p[0];
16510 suffix[1] = '\0';
16511 }
16512 else
16513 {
16514 suffix[0] = p[0];
16515 suffix[1] = p[1];
16516 suffix[2] = '\0';
16517 }
16518
16519 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16520 mnemonicendp += simd_cmp_op[cmp_type].len;
16521 }
16522 else
16523 {
16524 /* We have a reserved extension byte. Output it directly. */
16525 scratchbuf[0] = '$';
16526 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16527 oappend_maybe_intel (scratchbuf);
43234a1e
L
16528 scratchbuf[0] = '\0';
16529 }
16530}
16531
ea397f5b
L
16532static const struct op pclmul_op[] =
16533{
16534 { STRING_COMMA_LEN ("lql") },
16535 { STRING_COMMA_LEN ("hql") },
16536 { STRING_COMMA_LEN ("lqh") },
16537 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16538};
16539
16540static void
16541PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16542 int sizeflag ATTRIBUTE_UNUSED)
16543{
16544 unsigned int pclmul_type;
16545
16546 FETCH_DATA (the_info, codep + 1);
16547 pclmul_type = *codep++ & 0xff;
16548 switch (pclmul_type)
16549 {
16550 case 0x10:
16551 pclmul_type = 2;
16552 break;
16553 case 0x11:
16554 pclmul_type = 3;
16555 break;
16556 default:
16557 break;
7bb15c6f 16558 }
c0f3af97
L
16559 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16560 {
16561 char suffix [4];
ea397f5b 16562 char *p = mnemonicendp - 3;
c0f3af97
L
16563 suffix[0] = p[0];
16564 suffix[1] = p[1];
16565 suffix[2] = p[2];
16566 suffix[3] = '\0';
ea397f5b
L
16567 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16568 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16569 }
16570 else
16571 {
16572 /* We have a reserved extension byte. Output it directly. */
16573 scratchbuf[0] = '$';
16574 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16575 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16576 scratchbuf[0] = '\0';
16577 }
16578}
16579
f1f8f695
L
16580static void
16581MOVBE_Fixup (int bytemode, int sizeflag)
16582{
16583 /* Add proper suffix to "movbe". */
ea397f5b 16584 char *p = mnemonicendp;
f1f8f695
L
16585
16586 switch (bytemode)
16587 {
16588 case v_mode:
16589 if (intel_syntax)
ea397f5b 16590 goto skip;
f1f8f695
L
16591
16592 USED_REX (REX_W);
16593 if (sizeflag & SUFFIX_ALWAYS)
16594 {
16595 if (rex & REX_W)
16596 *p++ = 'q';
f1f8f695 16597 else
f16cd0d5
L
16598 {
16599 if (sizeflag & DFLAG)
16600 *p++ = 'l';
16601 else
16602 *p++ = 'w';
16603 used_prefixes |= (prefixes & PREFIX_DATA);
16604 }
f1f8f695 16605 }
f1f8f695
L
16606 break;
16607 default:
16608 oappend (INTERNAL_DISASSEMBLER_ERROR);
16609 break;
16610 }
ea397f5b 16611 mnemonicendp = p;
f1f8f695
L
16612 *p = '\0';
16613
ea397f5b 16614skip:
f1f8f695
L
16615 OP_M (bytemode, sizeflag);
16616}
f88c9eb0
SP
16617
16618static void
16619OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16620{
16621 int reg;
16622 const char **names;
16623
16624 /* Skip mod/rm byte. */
16625 MODRM_CHECK;
16626 codep++;
16627
16628 if (vex.w)
16629 names = names64;
f88c9eb0 16630 else
ce7d077e 16631 names = names32;
f88c9eb0
SP
16632
16633 reg = modrm.rm;
16634 USED_REX (REX_B);
16635 if (rex & REX_B)
16636 reg += 8;
16637
16638 oappend (names[reg]);
16639}
16640
16641static void
16642OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16643{
16644 const char **names;
16645
16646 if (vex.w)
16647 names = names64;
f88c9eb0 16648 else
ce7d077e 16649 names = names32;
f88c9eb0
SP
16650
16651 oappend (names[vex.register_specifier]);
16652}
43234a1e
L
16653
16654static void
16655OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16656{
16657 if (!vex.evex
16658 || bytemode != mask_mode)
16659 abort ();
16660
16661 USED_REX (REX_R);
16662 if ((rex & REX_R) != 0 || !vex.r)
16663 {
16664 BadOp ();
16665 return;
16666 }
16667
16668 oappend (names_mask [modrm.reg]);
16669}
16670
16671static void
16672OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16673{
16674 if (!vex.evex
16675 || (bytemode != evex_rounding_mode
16676 && bytemode != evex_sae_mode))
16677 abort ();
16678 if (modrm.mod == 3 && vex.b)
16679 switch (bytemode)
16680 {
16681 case evex_rounding_mode:
16682 oappend (names_rounding[vex.ll]);
16683 break;
16684 case evex_sae_mode:
16685 oappend ("{sae}");
16686 break;
16687 default:
16688 break;
16689 }
16690}
This page took 2.031409 seconds and 4 git commands to generate.